HarmonyModulesHelpers.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. class HarmonyModulesHelpers {
  7. static getModuleVar(state, request) {
  8. if(!state.harmonyModules) state.harmonyModules = [];
  9. var idx = state.harmonyModules.indexOf(request);
  10. if(idx < 0) {
  11. idx = state.harmonyModules.length;
  12. state.harmonyModules.push(request);
  13. }
  14. return "__WEBPACK_IMPORTED_MODULE_" + idx + "_" + request.replace(/[^A-Za-z0-9_]/g, "_").replace(/__+/g, "_") + "__";
  15. }
  16. static getNewModuleVar(state, request) {
  17. if(state.harmonyModules && state.harmonyModules.indexOf(request) >= 0)
  18. return null;
  19. return this.getModuleVar(state, request);
  20. }
  21. static checkModuleVar(state, request) {
  22. if(!state.harmonyModules || state.harmonyModules.indexOf(request) < 0)
  23. return null;
  24. return this.getModuleVar(state, request);
  25. }
  26. // checks if an harmony dependency is active in a module according to
  27. // precedence rules.
  28. static isActive(module, depInQuestion) {
  29. var desc = depInQuestion.describeHarmonyExport();
  30. if(!desc.exportedName) return true;
  31. var before = true;
  32. for(var i = 0; i < module.dependencies.length; i++) {
  33. var dep = module.dependencies[i];
  34. if(dep === depInQuestion) {
  35. before = false;
  36. continue;
  37. }
  38. if(!dep.describeHarmonyExport) continue;
  39. var d = dep.describeHarmonyExport();
  40. if(!d || !d.exportedName) continue;
  41. if(d.exportedName === desc.exportedName) {
  42. if(d.precedence < desc.precedence) {
  43. return false;
  44. }
  45. if(d.precedence === desc.precedence && !before) {
  46. return false;
  47. }
  48. }
  49. }
  50. return true;
  51. }
  52. // get a list of named exports defined in a module
  53. // doesn't include * reexports.
  54. static getActiveExports(module, currentDependency) {
  55. var desc = currentDependency && currentDependency.describeHarmonyExport();
  56. var currentIndex = currentDependency ? module.dependencies.indexOf(currentDependency) : -1;
  57. return module.dependencies.map((dep, idx) => {
  58. return {
  59. dep: dep,
  60. idx: idx
  61. };
  62. }).reduce((arr, data) => {
  63. var dep = data.dep;
  64. if(!dep.describeHarmonyExport) return arr;
  65. var d = dep.describeHarmonyExport();
  66. if(!d) return arr;
  67. if(!desc || (d.precedence < desc.precedence) || (d.precedence === desc.precedence && data.idx < currentIndex)) {
  68. var names = [].concat(d.exportedName);
  69. names.forEach(function(name) {
  70. if(name && arr.indexOf(name) < 0)
  71. arr.push(name);
  72. });
  73. }
  74. return arr;
  75. }, []);
  76. }
  77. }
  78. module.exports = HarmonyModulesHelpers;