CommonJsDependencyHelpers.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 {import("../Module").RuntimeRequirements} RuntimeRequirements */
  9. /** @typedef {"exports" | "module.exports" | "this" | "Object.defineProperty(exports)" | "Object.defineProperty(module.exports)" | "Object.defineProperty(this)"} CommonJSDependencyBaseKeywords */
  10. /**
  11. * @param {CommonJSDependencyBaseKeywords} depBase commonjs dependency base
  12. * @param {Module} module module
  13. * @param {RuntimeRequirements} runtimeRequirements runtime requirements
  14. * @returns {[string, string]} type and base
  15. */
  16. module.exports.handleDependencyBase = (
  17. depBase,
  18. module,
  19. runtimeRequirements
  20. ) => {
  21. let base;
  22. let type;
  23. switch (depBase) {
  24. case "exports":
  25. runtimeRequirements.add(RuntimeGlobals.exports);
  26. base = module.exportsArgument;
  27. type = "expression";
  28. break;
  29. case "module.exports":
  30. runtimeRequirements.add(RuntimeGlobals.module);
  31. base = `${module.moduleArgument}.exports`;
  32. type = "expression";
  33. break;
  34. case "this":
  35. runtimeRequirements.add(RuntimeGlobals.thisAsExports);
  36. base = "this";
  37. type = "expression";
  38. break;
  39. case "Object.defineProperty(exports)":
  40. runtimeRequirements.add(RuntimeGlobals.exports);
  41. base = module.exportsArgument;
  42. type = "Object.defineProperty";
  43. break;
  44. case "Object.defineProperty(module.exports)":
  45. runtimeRequirements.add(RuntimeGlobals.module);
  46. base = `${module.moduleArgument}.exports`;
  47. type = "Object.defineProperty";
  48. break;
  49. case "Object.defineProperty(this)":
  50. runtimeRequirements.add(RuntimeGlobals.thisAsExports);
  51. base = "this";
  52. type = "Object.defineProperty";
  53. break;
  54. default:
  55. throw new Error(`Unsupported base ${depBase}`);
  56. }
  57. return [type, base];
  58. };