CommonJsDependencyHelpers.js 1.9 KB

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