CommonJsDependencyHelpers.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const RuntimeGlobals = require("../RuntimeGlobals");
  7. /** @typedef {import("../Module")} Module */
  8. /** @typedef {"exports" | "module.exports" | "this" | "Object.defineProperty(exports)" | "Object.defineProperty(module.exports)" | "Object.defineProperty(this)"} CommonJSDependencyBaseKeywords */
  9. /**
  10. * @param {CommonJSDependencyBaseKeywords} depBase commonjs dependency base
  11. * @param {Module} module module
  12. * @param {Set<string>} runtimeRequirements runtime requirements
  13. * @returns {[string, string]} type and base
  14. */
  15. exports.handleDependencyBase = (depBase, module, runtimeRequirements) => {
  16. let base = undefined;
  17. let type;
  18. switch (depBase) {
  19. case "exports":
  20. runtimeRequirements.add(RuntimeGlobals.exports);
  21. base = module.exportsArgument;
  22. type = "expression";
  23. break;
  24. case "module.exports":
  25. runtimeRequirements.add(RuntimeGlobals.module);
  26. base = `${module.moduleArgument}.exports`;
  27. type = "expression";
  28. break;
  29. case "this":
  30. runtimeRequirements.add(RuntimeGlobals.thisAsExports);
  31. base = "this";
  32. type = "expression";
  33. break;
  34. case "Object.defineProperty(exports)":
  35. runtimeRequirements.add(RuntimeGlobals.exports);
  36. base = module.exportsArgument;
  37. type = "Object.defineProperty";
  38. break;
  39. case "Object.defineProperty(module.exports)":
  40. runtimeRequirements.add(RuntimeGlobals.module);
  41. base = `${module.moduleArgument}.exports`;
  42. type = "Object.defineProperty";
  43. break;
  44. case "Object.defineProperty(this)":
  45. runtimeRequirements.add(RuntimeGlobals.thisAsExports);
  46. base = "this";
  47. type = "Object.defineProperty";
  48. break;
  49. default:
  50. throw new Error(`Unsupported base ${depBase}`);
  51. }
  52. return [type, base];
  53. };