| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const Template = require("../Template"); | 
					
						
							|  |  |  | const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** @typedef {import("../Module")} Module */ | 
					
						
							| 
									
										
										
										
											2018-07-24 23:35:36 +08:00
										 |  |  | /** @typedef {import("../ModuleGraph")} ModuleGraph */ | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** @typedef {Object} UsedWasmDependency | 
					
						
							|  |  |  |  * @property {WebAssemblyImportDependency} dependency the dependency | 
					
						
							|  |  |  |  * @property {string} name the export name | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  |  * @property {string} module the module name | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const MANGLED_MODULE = "a"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2018-07-24 23:35:36 +08:00
										 |  |  |  * @param {ModuleGraph} moduleGraph the module graph | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  |  * @param {Module} module the module | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  |  * @param {boolean} mangle mangle module and export names | 
					
						
							|  |  |  |  * @returns {UsedWasmDependency[]} used dependencies and (mangled) name | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-07-24 23:35:36 +08:00
										 |  |  | const getUsedDependencies = (moduleGraph, module, mangle) => { | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | 	/** @type {UsedWasmDependency[]} */ | 
					
						
							|  |  |  | 	const array = []; | 
					
						
							|  |  |  | 	let importIndex = 0; | 
					
						
							|  |  |  | 	for (const dep of module.dependencies) { | 
					
						
							|  |  |  | 		if (dep instanceof WebAssemblyImportDependency) { | 
					
						
							| 
									
										
										
										
											2018-07-24 21:30:37 +08:00
										 |  |  | 			if ( | 
					
						
							|  |  |  | 				dep.description.type === "GlobalType" || | 
					
						
							|  |  |  | 				moduleGraph.getModule(dep) === null | 
					
						
							|  |  |  | 			) { | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | 				continue; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			const exportName = dep.name; | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  | 			// TODO add the following 3 lines when removing of ModuleExport is possible
 | 
					
						
							| 
									
										
										
										
											2018-07-24 21:30:37 +08:00
										 |  |  | 			// const importedModule = moduleGraph.getModule(dep);
 | 
					
						
							| 
									
										
										
										
											2018-08-07 03:01:24 +08:00
										 |  |  | 			// const usedName = importedModule && importedModule.getUsedName(moduleGraph, exportName);
 | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  | 			// if (usedName !== false) {
 | 
					
						
							|  |  |  | 			if (mangle) { | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | 				array.push({ | 
					
						
							|  |  |  | 					dependency: dep, | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  | 					name: Template.numberToIdentifer(importIndex++), | 
					
						
							|  |  |  | 					module: MANGLED_MODULE | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				array.push({ | 
					
						
							|  |  |  | 					dependency: dep, | 
					
						
							|  |  |  | 					name: exportName, | 
					
						
							|  |  |  | 					module: dep.request | 
					
						
							| 
									
										
										
										
											2018-05-11 20:24:40 +08:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return array; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exports.getUsedDependencies = getUsedDependencies; | 
					
						
							|  |  |  | exports.MANGLED_MODULE = MANGLED_MODULE; |