HarmonyExports.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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").BuildInfo} BuildInfo */
  8. /** @typedef {import("../Module").BuildMeta} BuildMeta */
  9. /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
  10. /** @type {WeakMap<JavascriptParserState, boolean>} */
  11. const parserStateExportsState = new WeakMap();
  12. /**
  13. * Processes the provided parser state.
  14. * @param {JavascriptParserState} parserState parser state
  15. * @param {boolean} isStrictHarmony strict harmony mode should be enabled
  16. * @returns {void}
  17. */
  18. module.exports.enable = (parserState, isStrictHarmony) => {
  19. const value = parserStateExportsState.get(parserState);
  20. if (value === false) return;
  21. parserStateExportsState.set(parserState, true);
  22. if (value !== true) {
  23. const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
  24. buildMeta.exportsType = "namespace";
  25. const buildInfo = /** @type {BuildInfo} */ (parserState.module.buildInfo);
  26. buildInfo.strict = true;
  27. buildInfo.exportsArgument = RuntimeGlobals.exports;
  28. if (isStrictHarmony) {
  29. buildMeta.strictHarmonyModule = true;
  30. buildInfo.moduleArgument = "__webpack_module__";
  31. }
  32. }
  33. };
  34. /**
  35. * Returns true, when enabled.
  36. * @param {JavascriptParserState} parserState parser state
  37. * @returns {boolean} true, when enabled
  38. */
  39. module.exports.isEnabled = (parserState) => {
  40. const value = parserStateExportsState.get(parserState);
  41. return value === true;
  42. };