DynamicExports.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. /** @typedef {import("../Module").BuildMeta} BuildMeta */
  7. /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
  8. /** @type {WeakMap<JavascriptParserState, boolean>} */
  9. const parserStateExportsState = new WeakMap();
  10. /**
  11. * Processes the provided parser state.
  12. * @param {JavascriptParserState} parserState parser state
  13. * @returns {void}
  14. */
  15. module.exports.bailout = (parserState) => {
  16. const value = parserStateExportsState.get(parserState);
  17. parserStateExportsState.set(parserState, false);
  18. if (value === true) {
  19. const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
  20. buildMeta.exportsType = undefined;
  21. buildMeta.defaultObject = false;
  22. }
  23. };
  24. /**
  25. * Processes the provided parser state.
  26. * @param {JavascriptParserState} parserState parser state
  27. * @returns {void}
  28. */
  29. module.exports.enable = (parserState) => {
  30. const value = parserStateExportsState.get(parserState);
  31. if (value === false) return;
  32. parserStateExportsState.set(parserState, true);
  33. if (value !== true) {
  34. const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
  35. buildMeta.exportsType = "default";
  36. buildMeta.defaultObject = "redirect";
  37. }
  38. };
  39. /**
  40. * Returns true, when enabled.
  41. * @param {JavascriptParserState} parserState parser state
  42. * @returns {boolean} true, when enabled
  43. */
  44. module.exports.isEnabled = (parserState) => {
  45. const value = parserStateExportsState.get(parserState);
  46. return value === true;
  47. };
  48. /**
  49. * Processes the provided parser state.
  50. * @param {JavascriptParserState} parserState parser state
  51. * @returns {void}
  52. */
  53. module.exports.setDynamic = (parserState) => {
  54. const value = parserStateExportsState.get(parserState);
  55. if (value !== true) return;
  56. /** @type {BuildMeta} */
  57. (parserState.module.buildMeta).exportsType = "dynamic";
  58. };
  59. /**
  60. * Processes the provided parser state.
  61. * @param {JavascriptParserState} parserState parser state
  62. * @returns {void}
  63. */
  64. module.exports.setFlagged = (parserState) => {
  65. const value = parserStateExportsState.get(parserState);
  66. if (value !== true) return;
  67. const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
  68. if (buildMeta.exportsType === "dynamic") return;
  69. buildMeta.exportsType = "flagged";
  70. };