1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | "use strict";
|
7 |
|
8 | const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
9 | const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
10 | const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
|
11 | const HarmonyEvaluatedImportSpecifierDependency = require("./HarmonyEvaluatedImportSpecifierDependency");
|
12 | const HarmonyExportExpressionDependency = require("./HarmonyExportExpressionDependency");
|
13 | const HarmonyExportHeaderDependency = require("./HarmonyExportHeaderDependency");
|
14 | const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImportedSpecifierDependency");
|
15 | const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDependency");
|
16 | const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
17 | const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
18 |
|
19 | const HarmonyDetectionParserPlugin = require("./HarmonyDetectionParserPlugin");
|
20 | const HarmonyExportDependencyParserPlugin = require("./HarmonyExportDependencyParserPlugin");
|
21 | const HarmonyImportDependencyParserPlugin = require("./HarmonyImportDependencyParserPlugin");
|
22 | const HarmonyTopLevelThisParserPlugin = require("./HarmonyTopLevelThisParserPlugin");
|
23 |
|
24 |
|
25 |
|
26 | class HarmonyModulesPlugin {
|
27 | constructor(options) {
|
28 | this.options = options;
|
29 | }
|
30 |
|
31 | |
32 |
|
33 |
|
34 |
|
35 |
|
36 | apply(compiler) {
|
37 | compiler.hooks.compilation.tap(
|
38 | "HarmonyModulesPlugin",
|
39 | (compilation, { normalModuleFactory }) => {
|
40 | compilation.dependencyTemplates.set(
|
41 | HarmonyCompatibilityDependency,
|
42 | new HarmonyCompatibilityDependency.Template()
|
43 | );
|
44 |
|
45 | compilation.dependencyFactories.set(
|
46 | HarmonyImportSideEffectDependency,
|
47 | normalModuleFactory
|
48 | );
|
49 | compilation.dependencyTemplates.set(
|
50 | HarmonyImportSideEffectDependency,
|
51 | new HarmonyImportSideEffectDependency.Template()
|
52 | );
|
53 |
|
54 | compilation.dependencyFactories.set(
|
55 | HarmonyImportSpecifierDependency,
|
56 | normalModuleFactory
|
57 | );
|
58 | compilation.dependencyTemplates.set(
|
59 | HarmonyImportSpecifierDependency,
|
60 | new HarmonyImportSpecifierDependency.Template()
|
61 | );
|
62 |
|
63 | compilation.dependencyFactories.set(
|
64 | HarmonyEvaluatedImportSpecifierDependency,
|
65 | normalModuleFactory
|
66 | );
|
67 | compilation.dependencyTemplates.set(
|
68 | HarmonyEvaluatedImportSpecifierDependency,
|
69 | new HarmonyEvaluatedImportSpecifierDependency.Template()
|
70 | );
|
71 |
|
72 | compilation.dependencyTemplates.set(
|
73 | HarmonyExportHeaderDependency,
|
74 | new HarmonyExportHeaderDependency.Template()
|
75 | );
|
76 |
|
77 | compilation.dependencyTemplates.set(
|
78 | HarmonyExportExpressionDependency,
|
79 | new HarmonyExportExpressionDependency.Template()
|
80 | );
|
81 |
|
82 | compilation.dependencyTemplates.set(
|
83 | HarmonyExportSpecifierDependency,
|
84 | new HarmonyExportSpecifierDependency.Template()
|
85 | );
|
86 |
|
87 | compilation.dependencyFactories.set(
|
88 | HarmonyExportImportedSpecifierDependency,
|
89 | normalModuleFactory
|
90 | );
|
91 | compilation.dependencyTemplates.set(
|
92 | HarmonyExportImportedSpecifierDependency,
|
93 | new HarmonyExportImportedSpecifierDependency.Template()
|
94 | );
|
95 |
|
96 | compilation.dependencyTemplates.set(
|
97 | HarmonyAcceptDependency,
|
98 | new HarmonyAcceptDependency.Template()
|
99 | );
|
100 |
|
101 | compilation.dependencyFactories.set(
|
102 | HarmonyAcceptImportDependency,
|
103 | normalModuleFactory
|
104 | );
|
105 | compilation.dependencyTemplates.set(
|
106 | HarmonyAcceptImportDependency,
|
107 | new HarmonyAcceptImportDependency.Template()
|
108 | );
|
109 |
|
110 | const handler = (parser, parserOptions) => {
|
111 |
|
112 | if (parserOptions.harmony !== undefined && !parserOptions.harmony)
|
113 | return;
|
114 |
|
115 | new HarmonyDetectionParserPlugin(this.options).apply(parser);
|
116 | new HarmonyImportDependencyParserPlugin(parserOptions).apply(parser);
|
117 | new HarmonyExportDependencyParserPlugin(parserOptions).apply(parser);
|
118 | new HarmonyTopLevelThisParserPlugin().apply(parser);
|
119 | };
|
120 |
|
121 | normalModuleFactory.hooks.parser
|
122 | .for("javascript/auto")
|
123 | .tap("HarmonyModulesPlugin", handler);
|
124 | normalModuleFactory.hooks.parser
|
125 | .for("javascript/esm")
|
126 | .tap("HarmonyModulesPlugin", handler);
|
127 | }
|
128 | );
|
129 | }
|
130 | }
|
131 | module.exports = HarmonyModulesPlugin;
|