WebAssemblyUtils.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const Template = require("../Template");
  7. const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
  8. /** @typedef {import("../Module")} Module */
  9. /** @typedef {import("../ModuleGraph")} ModuleGraph */
  10. /**
  11. * Defines the used wasm dependency type used by this module.
  12. * @typedef {object} UsedWasmDependency
  13. * @property {WebAssemblyImportDependency} dependency the dependency
  14. * @property {string} name the export name
  15. * @property {string} module the module name
  16. */
  17. const MANGLED_MODULE = "a";
  18. /**
  19. * Gets used dependencies.
  20. * @param {ModuleGraph} moduleGraph the module graph
  21. * @param {Module} module the module
  22. * @param {boolean | undefined} mangle mangle module and export names
  23. * @returns {UsedWasmDependency[]} used dependencies and (mangled) name
  24. */
  25. const getUsedDependencies = (moduleGraph, module, mangle) => {
  26. /** @type {UsedWasmDependency[]} */
  27. const array = [];
  28. let importIndex = 0;
  29. for (const dep of module.dependencies) {
  30. if (dep instanceof WebAssemblyImportDependency) {
  31. if (
  32. dep.description.type === "GlobalType" ||
  33. moduleGraph.getModule(dep) === null
  34. ) {
  35. continue;
  36. }
  37. const exportName = dep.name;
  38. // TODO add the following 3 lines when removing of ModuleExport is possible
  39. // const importedModule = moduleGraph.getModule(dep);
  40. // const usedName = importedModule && moduleGraph.getExportsInfo(importedModule).getUsedName(exportName, runtime);
  41. // if (usedName !== false) {
  42. if (mangle) {
  43. array.push({
  44. dependency: dep,
  45. name: Template.numberToIdentifier(importIndex++),
  46. module: MANGLED_MODULE
  47. });
  48. } else {
  49. array.push({
  50. dependency: dep,
  51. name: exportName,
  52. module: dep.request
  53. });
  54. }
  55. }
  56. }
  57. return array;
  58. };
  59. module.exports.MANGLED_MODULE = MANGLED_MODULE;
  60. module.exports.getUsedDependencies = getUsedDependencies;