HarmonyExportSpecifierDependency.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const NullDependency = require("./NullDependency");
  7. const HarmonyModulesHelpers = require("./HarmonyModulesHelpers");
  8. class HarmonyExportSpecifierDependency extends NullDependency {
  9. constructor(originModule, id, name, position, immutable) {
  10. super();
  11. this.originModule = originModule;
  12. this.id = id;
  13. this.name = name;
  14. this.position = position;
  15. this.immutable = immutable;
  16. }
  17. get type() {
  18. return "harmony export specifier";
  19. }
  20. getExports() {
  21. return {
  22. exports: [this.name]
  23. };
  24. }
  25. describeHarmonyExport() {
  26. return {
  27. exportedName: this.name,
  28. precedence: 1
  29. };
  30. }
  31. }
  32. HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependencyTemplate {
  33. apply(dep, source) {
  34. const content = this.getPrefix(dep) + this.getContent(dep);
  35. source.insert(dep.position, content);
  36. }
  37. getPrefix(dep) {
  38. return dep.position > 0 ? "\n" : "";
  39. }
  40. getContent(dep) {
  41. const used = dep.originModule.isUsed(dep.name);
  42. const active = HarmonyModulesHelpers.isActive(dep.originModule, dep);
  43. if(!used) {
  44. return `/* unused harmony export ${(dep.name || "namespace")} */\n`;
  45. }
  46. if(!active) {
  47. return `/* inactive harmony export ${(dep.name || "namespace")} */\n`;
  48. }
  49. const exportsName = dep.originModule.exportsArgument || "exports";
  50. if(dep.immutable) {
  51. return `/* harmony export (immutable) */ ${exportsName}[${JSON.stringify(used)}] = ${dep.id};\n`;
  52. }
  53. return `/* harmony export (binding) */ __webpack_require__.d(${exportsName}, ${JSON.stringify(used)}, function() { return ${dep.id}; });\n`;
  54. }
  55. };
  56. module.exports = HarmonyExportSpecifierDependency;