webpack 4.15.0 → 4.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +761 -758
- package/SECURITY.md +9 -9
- package/buildin/amd-define.js +3 -3
- package/buildin/amd-options.js +2 -2
- package/buildin/global.js +20 -20
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/buildin/system.js +7 -7
- package/hot/dev-server.js +61 -61
- package/hot/emitter.js +2 -2
- package/hot/log-apply-result.js +44 -44
- package/hot/log.js +45 -45
- package/hot/only-dev-server.js +105 -105
- package/hot/poll.js +40 -37
- package/hot/signal.js +62 -62
- package/lib/APIPlugin.js +84 -84
- package/lib/AmdMainTemplatePlugin.js +87 -87
- package/lib/AsyncDependencyToInitialChunkError.js +31 -31
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +117 -117
- package/lib/BasicEvaluatedExpression.js +211 -211
- package/lib/CachePlugin.js +102 -102
- package/lib/CaseSensitiveModulesWarning.js +67 -67
- package/lib/Chunk.js +833 -811
- package/lib/ChunkGroup.js +4 -4
- package/lib/ChunkRenderError.js +32 -32
- package/lib/CommentCompilationWarning.js +2 -2
- package/lib/CompatibilityPlugin.js +70 -70
- package/lib/Compilation.js +46 -15
- package/lib/ConcurrentCompilationError.js +19 -19
- package/lib/ConstPlugin.js +258 -258
- package/lib/ContextExclusionPlugin.js +28 -17
- package/lib/ContextModule.js +844 -739
- package/lib/ContextModuleFactory.js +262 -256
- package/lib/ContextReplacementPlugin.js +133 -133
- package/lib/DefinePlugin.js +49 -0
- package/lib/DelegatedModule.js +5 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -89
- package/lib/DelegatedPlugin.js +39 -39
- package/lib/DependenciesBlock.js +1 -1
- package/lib/Dependency.js +10 -4
- package/lib/DllModule.js +60 -54
- package/lib/DllModuleFactory.js +29 -29
- package/lib/DllPlugin.js +44 -44
- package/lib/DllReferencePlugin.js +132 -84
- package/lib/EntryModuleNotFoundError.js +21 -21
- package/lib/Entrypoint.js +54 -54
- package/lib/EnvironmentPlugin.js +72 -65
- package/lib/ErrorHelpers.js +60 -60
- package/lib/EvalDevToolModulePlugin.js +27 -27
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
- package/lib/EvalSourceMapDevToolPlugin.js +41 -41
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
- package/lib/ExternalModule.js +165 -159
- package/lib/ExternalsPlugin.js +23 -23
- package/lib/FlagDependencyExportsPlugin.js +146 -146
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
- package/lib/FunctionModuleTemplatePlugin.js +100 -100
- package/lib/Generator.js +60 -52
- package/lib/HarmonyLinkingError.js +17 -17
- package/lib/HashedModuleIdsPlugin.js +53 -53
- package/lib/HotModuleReplacementPlugin.js +411 -413
- package/lib/IgnorePlugin.js +90 -90
- package/lib/JavascriptGenerator.js +229 -229
- package/lib/JavascriptModulesPlugin.js +179 -179
- package/lib/JsonGenerator.js +55 -55
- package/lib/JsonModulesPlugin.js +30 -30
- package/lib/JsonParser.js +27 -27
- package/lib/LibManifestPlugin.js +86 -86
- package/lib/LibraryTemplatePlugin.js +153 -153
- package/lib/LoaderOptionsPlugin.js +53 -53
- package/lib/LoaderTargetPlugin.js +24 -24
- package/lib/MemoryOutputFileSystem.js +5 -5
- package/lib/Module.js +431 -391
- package/lib/ModuleBuildError.js +52 -52
- package/lib/ModuleDependencyError.js +35 -35
- package/lib/ModuleDependencyWarning.js +25 -25
- package/lib/ModuleError.js +36 -36
- package/lib/ModuleFilenameHelpers.js +178 -178
- package/lib/ModuleNotFoundError.js +23 -23
- package/lib/ModuleParseError.js +57 -57
- package/lib/ModuleTemplate.js +93 -93
- package/lib/ModuleWarning.js +36 -36
- package/lib/MultiCompiler.js +283 -283
- package/lib/MultiModule.js +87 -81
- package/lib/MultiModuleFactory.js +23 -23
- package/lib/MultiStats.js +92 -92
- package/lib/MultiWatching.js +38 -38
- package/lib/NamedChunksPlugin.js +29 -29
- package/lib/NamedModulesPlugin.js +57 -57
- package/lib/NoEmitOnErrorsPlugin.js +20 -20
- package/lib/NoModeWarning.js +23 -23
- package/lib/NodeStuffPlugin.js +197 -179
- package/lib/NormalModule.js +542 -536
- package/lib/NormalModuleFactory.js +526 -526
- package/lib/NormalModuleReplacementPlugin.js +51 -51
- package/lib/NullFactory.js +12 -12
- package/lib/OptionsApply.js +10 -10
- package/lib/OptionsDefaulter.js +84 -84
- package/lib/Parser.js +2202 -2193
- package/lib/ParserHelpers.js +103 -103
- package/lib/PrefetchPlugin.js +37 -37
- package/lib/ProgressPlugin.js +246 -246
- package/lib/ProvidePlugin.js +86 -86
- package/lib/RawModule.js +56 -56
- package/lib/RecordIdsPlugin.js +230 -230
- package/lib/RemovedPluginError.js +11 -11
- package/lib/RequestShortener.js +83 -83
- package/lib/RequireJsStuffPlugin.js +69 -69
- package/lib/ResolverFactory.js +64 -64
- package/lib/RuntimeTemplate.js +12 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -69
- package/lib/SingleEntryPlugin.js +6 -1
- package/lib/SizeFormatHelpers.js +24 -24
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
- package/lib/SourceMapDevToolPlugin.js +301 -301
- package/lib/Stats.js +28 -5
- package/lib/TemplatedPathPlugin.js +173 -173
- package/lib/UnsupportedFeatureWarning.js +22 -22
- package/lib/UseStrictPlugin.js +54 -54
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
- package/lib/WarnNoModeSetPlugin.js +17 -17
- package/lib/WatchIgnorePlugin.js +100 -100
- package/lib/Watching.js +194 -194
- package/lib/WebpackOptionsApply.js +92 -10
- package/lib/WebpackOptionsDefaulter.js +368 -354
- package/lib/debug/ProfilingPlugin.js +430 -430
- package/lib/dependencies/AMDPlugin.js +250 -250
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
- package/lib/dependencies/AMDRequireContextDependency.js +20 -20
- package/lib/dependencies/AMDRequireDependency.js +135 -135
- package/lib/dependencies/AMDRequireItemDependency.js +22 -22
- package/lib/dependencies/CommonJsPlugin.js +161 -161
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
- package/lib/dependencies/CommonJsRequireDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
- package/lib/dependencies/ConstDependency.js +33 -33
- package/lib/dependencies/ContextDependency.js +68 -68
- package/lib/dependencies/ContextDependencyHelpers.js +142 -142
- package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/CriticalDependencyWarning.js +20 -20
- package/lib/dependencies/DelegatedSourceDependency.js +18 -18
- package/lib/dependencies/DllEntryDependency.js +20 -20
- package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
- package/lib/dependencies/HarmonyImportDependency.js +109 -109
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
- package/lib/dependencies/HarmonyInitDependency.js +60 -60
- package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
- package/lib/dependencies/ImportContextDependency.js +23 -23
- package/lib/dependencies/ImportDependenciesBlock.js +18 -18
- package/lib/dependencies/ImportDependency.js +34 -34
- package/lib/dependencies/ImportEagerDependency.js +32 -32
- package/lib/dependencies/ImportParserPlugin.js +263 -263
- package/lib/dependencies/ImportPlugin.js +82 -82
- package/lib/dependencies/ImportWeakDependency.js +34 -34
- package/lib/dependencies/LoaderPlugin.js +18 -1
- package/lib/dependencies/LocalModule.js +23 -23
- package/lib/dependencies/LocalModulesHelpers.js +52 -52
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
- package/lib/dependencies/NullDependency.js +20 -20
- package/lib/dependencies/PrefetchDependency.js +18 -18
- package/lib/dependencies/RequireContextDependency.js +22 -22
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
- package/lib/dependencies/RequireContextPlugin.js +143 -143
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
- package/lib/dependencies/RequireEnsureDependency.js +58 -58
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
- package/lib/dependencies/RequireEnsurePlugin.js +74 -74
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
- package/lib/dependencies/RequireIncludePlugin.js +61 -61
- package/lib/dependencies/RequireResolveContextDependency.js +23 -23
- package/lib/dependencies/RequireResolveDependency.js +22 -22
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SystemPlugin.js +125 -125
- package/lib/dependencies/UnsupportedDependency.js +27 -27
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
- package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
- package/lib/dependencies/WebpackMissingModule.js +20 -20
- package/lib/formatLocation.js +75 -61
- package/lib/node/NodeChunkTemplatePlugin.js +31 -31
- package/lib/node/NodeEnvironmentPlugin.js +28 -28
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
- package/lib/node/NodeMainTemplate.runtime.js +27 -27
- package/lib/node/NodeMainTemplatePlugin.js +323 -323
- package/lib/node/NodeOutputFileSystem.js +22 -22
- package/lib/node/NodeSourcePlugin.js +144 -144
- package/lib/node/NodeTargetPlugin.js +18 -18
- package/lib/node/NodeTemplatePlugin.js +31 -31
- package/lib/node/NodeWatchFileSystem.js +99 -99
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
- package/lib/optimize/AggressiveMergingPlugin.js +87 -87
- package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
- package/lib/optimize/ConcatenatedModule.js +5 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
- package/lib/optimize/LimitChunkCountPlugin.js +66 -66
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
- package/lib/optimize/MinChunkSizePlugin.js +77 -77
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
- package/lib/optimize/RuntimeChunkPlugin.js +41 -41
- package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
- package/lib/optimize/SplitChunksPlugin.js +866 -850
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
- package/lib/performance/NoAsyncChunksWarning.js +21 -21
- package/lib/performance/SizeLimitsPlugin.js +105 -105
- package/lib/util/SortableSet.js +1 -0
- package/lib/util/StackedSetMap.js +144 -135
- package/lib/util/TrackingSet.js +35 -35
- package/lib/util/cachedMerge.js +35 -35
- package/lib/util/deterministicGrouping.js +251 -251
- package/lib/util/identifier.js +103 -103
- package/lib/util/objectToMap.js +16 -16
- package/lib/validateSchema.js +67 -67
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
- package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
- package/lib/wasm/WebAssemblyGenerator.js +16 -2
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
- package/lib/wasm/WebAssemblyParser.js +174 -174
- package/lib/wasm/WebAssemblyUtils.js +59 -59
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
- package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
- package/lib/web/JsonpMainTemplate.runtime.js +65 -65
- package/lib/web/JsonpMainTemplatePlugin.js +1 -1
- package/lib/web/JsonpTemplatePlugin.js +23 -23
- package/lib/web/WebEnvironmentPlugin.js +18 -18
- package/lib/webpack.js +5 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
- package/package.json +22 -13
- package/schemas/WebpackOptions.json +2062 -2036
- package/schemas/ajv.absolutePath.js +55 -55
- package/schemas/plugins/BannerPlugin.json +96 -96
- package/schemas/plugins/DllPlugin.json +32 -32
- package/schemas/plugins/DllReferencePlugin.json +99 -99
- package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
- package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
- package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
- package/schemas/plugins/WatchIgnorePlugin.json +16 -16
- package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -1,222 +1,222 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const { SyncBailHook } = require("tapable");
|
8
|
-
const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
9
|
-
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
10
|
-
const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
11
|
-
const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
12
|
-
const ConstDependency = require("./ConstDependency");
|
13
|
-
|
14
|
-
module.exports = class HarmonyImportDependencyParserPlugin {
|
15
|
-
constructor(moduleOptions) {
|
16
|
-
this.strictExportPresence = moduleOptions.strictExportPresence;
|
17
|
-
this.strictThisContextOnImports = moduleOptions.strictThisContextOnImports;
|
18
|
-
}
|
19
|
-
|
20
|
-
apply(parser) {
|
21
|
-
parser.hooks.import.tap(
|
22
|
-
"HarmonyImportDependencyParserPlugin",
|
23
|
-
(statement, source) => {
|
24
|
-
parser.state.lastHarmonyImportOrder =
|
25
|
-
(parser.state.lastHarmonyImportOrder || 0) + 1;
|
26
|
-
const clearDep = new ConstDependency("", statement.range);
|
27
|
-
clearDep.loc = statement.loc;
|
28
|
-
parser.state.module.addDependency(clearDep);
|
29
|
-
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
30
|
-
source,
|
31
|
-
parser.state.module,
|
32
|
-
parser.state.lastHarmonyImportOrder,
|
33
|
-
parser.state.harmonyParserScope
|
34
|
-
);
|
35
|
-
sideEffectDep.loc = statement.loc;
|
36
|
-
parser.state.module.addDependency(sideEffectDep);
|
37
|
-
return true;
|
38
|
-
}
|
39
|
-
);
|
40
|
-
parser.hooks.importSpecifier.tap(
|
41
|
-
"HarmonyImportDependencyParserPlugin",
|
42
|
-
(statement, source, id, name) => {
|
43
|
-
parser.scope.definitions.delete(name);
|
44
|
-
parser.scope.renames.set(name, "imported var");
|
45
|
-
if (!parser.state.harmonySpecifier) {
|
46
|
-
parser.state.harmonySpecifier = new Map();
|
47
|
-
}
|
48
|
-
parser.state.harmonySpecifier.set(name, {
|
49
|
-
source,
|
50
|
-
id,
|
51
|
-
sourceOrder: parser.state.lastHarmonyImportOrder
|
52
|
-
});
|
53
|
-
return true;
|
54
|
-
}
|
55
|
-
);
|
56
|
-
parser.hooks.expression
|
57
|
-
.for("imported var")
|
58
|
-
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
59
|
-
const name = expr.name;
|
60
|
-
const settings = parser.state.harmonySpecifier.get(name);
|
61
|
-
const dep = new HarmonyImportSpecifierDependency(
|
62
|
-
settings.source,
|
63
|
-
parser.state.module,
|
64
|
-
settings.sourceOrder,
|
65
|
-
parser.state.harmonyParserScope,
|
66
|
-
settings.id,
|
67
|
-
name,
|
68
|
-
expr.range,
|
69
|
-
this.strictExportPresence
|
70
|
-
);
|
71
|
-
dep.shorthand = parser.scope.inShorthand;
|
72
|
-
dep.directImport = true;
|
73
|
-
dep.loc = expr.loc;
|
74
|
-
parser.state.module.addDependency(dep);
|
75
|
-
return true;
|
76
|
-
});
|
77
|
-
parser.hooks.expressionAnyMember
|
78
|
-
.for("imported var")
|
79
|
-
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
80
|
-
const name = expr.object.name;
|
81
|
-
const settings = parser.state.harmonySpecifier.get(name);
|
82
|
-
if (settings.id !== null) return false;
|
83
|
-
const dep = new HarmonyImportSpecifierDependency(
|
84
|
-
settings.source,
|
85
|
-
parser.state.module,
|
86
|
-
settings.sourceOrder,
|
87
|
-
parser.state.harmonyParserScope,
|
88
|
-
expr.property.name || expr.property.value,
|
89
|
-
name,
|
90
|
-
expr.range,
|
91
|
-
this.strictExportPresence
|
92
|
-
);
|
93
|
-
dep.shorthand = parser.scope.inShorthand;
|
94
|
-
dep.directImport = false;
|
95
|
-
dep.loc = expr.loc;
|
96
|
-
parser.state.module.addDependency(dep);
|
97
|
-
return true;
|
98
|
-
});
|
99
|
-
if (this.strictThisContextOnImports) {
|
100
|
-
// only in case when we strictly follow the spec we need a special case here
|
101
|
-
parser.hooks.callAnyMember
|
102
|
-
.for("imported var")
|
103
|
-
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
104
|
-
if (expr.callee.type !== "MemberExpression") return;
|
105
|
-
if (expr.callee.object.type !== "Identifier") return;
|
106
|
-
const name = expr.callee.object.name;
|
107
|
-
const settings = parser.state.harmonySpecifier.get(name);
|
108
|
-
if (settings.id !== null) return false;
|
109
|
-
const dep = new HarmonyImportSpecifierDependency(
|
110
|
-
settings.source,
|
111
|
-
parser.state.module,
|
112
|
-
settings.sourceOrder,
|
113
|
-
parser.state.harmonyParserScope,
|
114
|
-
expr.callee.property.name || expr.callee.property.value,
|
115
|
-
name,
|
116
|
-
expr.callee.range,
|
117
|
-
this.strictExportPresence
|
118
|
-
);
|
119
|
-
dep.shorthand = parser.scope.inShorthand;
|
120
|
-
dep.directImport = false;
|
121
|
-
dep.namespaceObjectAsContext = true;
|
122
|
-
dep.loc = expr.callee.loc;
|
123
|
-
parser.state.module.addDependency(dep);
|
124
|
-
if (expr.arguments) parser.walkExpressions(expr.arguments);
|
125
|
-
return true;
|
126
|
-
});
|
127
|
-
}
|
128
|
-
parser.hooks.call
|
129
|
-
.for("imported var")
|
130
|
-
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
131
|
-
const args = expr.arguments;
|
132
|
-
const fullExpr = expr;
|
133
|
-
expr = expr.callee;
|
134
|
-
if (expr.type !== "Identifier") return;
|
135
|
-
const name = expr.name;
|
136
|
-
const settings = parser.state.harmonySpecifier.get(name);
|
137
|
-
const dep = new HarmonyImportSpecifierDependency(
|
138
|
-
settings.source,
|
139
|
-
parser.state.module,
|
140
|
-
settings.sourceOrder,
|
141
|
-
parser.state.harmonyParserScope,
|
142
|
-
settings.id,
|
143
|
-
name,
|
144
|
-
expr.range,
|
145
|
-
this.strictExportPresence
|
146
|
-
);
|
147
|
-
dep.directImport = true;
|
148
|
-
dep.callArgs = args;
|
149
|
-
dep.call = fullExpr;
|
150
|
-
dep.loc = expr.loc;
|
151
|
-
parser.state.module.addDependency(dep);
|
152
|
-
if (args) parser.walkExpressions(args);
|
153
|
-
return true;
|
154
|
-
});
|
155
|
-
// TODO webpack 5: refactor this, no custom hooks
|
156
|
-
if (!parser.hooks.hotAcceptCallback) {
|
157
|
-
parser.hooks.hotAcceptCallback = new SyncBailHook([
|
158
|
-
"expression",
|
159
|
-
"requests"
|
160
|
-
]);
|
161
|
-
}
|
162
|
-
if (!parser.hooks.hotAcceptWithoutCallback) {
|
163
|
-
parser.hooks.hotAcceptWithoutCallback = new SyncBailHook([
|
164
|
-
"expression",
|
165
|
-
"requests"
|
166
|
-
]);
|
167
|
-
}
|
168
|
-
parser.hooks.hotAcceptCallback.tap(
|
169
|
-
"HarmonyImportDependencyParserPlugin",
|
170
|
-
(expr, requests) => {
|
171
|
-
const harmonyParserScope = parser.state.harmonyParserScope;
|
172
|
-
if (!harmonyParserScope) {
|
173
|
-
// This is not a harmony module, skip it
|
174
|
-
return;
|
175
|
-
}
|
176
|
-
const dependencies = requests.map(request => {
|
177
|
-
const dep = new HarmonyAcceptImportDependency(
|
178
|
-
request,
|
179
|
-
parser.state.module,
|
180
|
-
harmonyParserScope
|
181
|
-
);
|
182
|
-
dep.loc = expr.loc;
|
183
|
-
parser.state.module.addDependency(dep);
|
184
|
-
return dep;
|
185
|
-
});
|
186
|
-
if (dependencies.length > 0) {
|
187
|
-
const dep = new HarmonyAcceptDependency(
|
188
|
-
expr.range,
|
189
|
-
dependencies,
|
190
|
-
true
|
191
|
-
);
|
192
|
-
dep.loc = expr.loc;
|
193
|
-
parser.state.module.addDependency(dep);
|
194
|
-
}
|
195
|
-
}
|
196
|
-
);
|
197
|
-
parser.hooks.hotAcceptWithoutCallback.tap(
|
198
|
-
"HarmonyImportDependencyParserPlugin",
|
199
|
-
(expr, requests) => {
|
200
|
-
const dependencies = requests.map(request => {
|
201
|
-
const dep = new HarmonyAcceptImportDependency(
|
202
|
-
request,
|
203
|
-
parser.state.module,
|
204
|
-
parser.state.harmonyParserScope
|
205
|
-
);
|
206
|
-
dep.loc = expr.loc;
|
207
|
-
parser.state.module.addDependency(dep);
|
208
|
-
return dep;
|
209
|
-
});
|
210
|
-
if (dependencies.length > 0) {
|
211
|
-
const dep = new HarmonyAcceptDependency(
|
212
|
-
expr.range,
|
213
|
-
dependencies,
|
214
|
-
false
|
215
|
-
);
|
216
|
-
dep.loc = expr.loc;
|
217
|
-
parser.state.module.addDependency(dep);
|
218
|
-
}
|
219
|
-
}
|
220
|
-
);
|
221
|
-
}
|
222
|
-
};
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const { SyncBailHook } = require("tapable");
|
8
|
+
const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
9
|
+
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
10
|
+
const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
11
|
+
const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
12
|
+
const ConstDependency = require("./ConstDependency");
|
13
|
+
|
14
|
+
module.exports = class HarmonyImportDependencyParserPlugin {
|
15
|
+
constructor(moduleOptions) {
|
16
|
+
this.strictExportPresence = moduleOptions.strictExportPresence;
|
17
|
+
this.strictThisContextOnImports = moduleOptions.strictThisContextOnImports;
|
18
|
+
}
|
19
|
+
|
20
|
+
apply(parser) {
|
21
|
+
parser.hooks.import.tap(
|
22
|
+
"HarmonyImportDependencyParserPlugin",
|
23
|
+
(statement, source) => {
|
24
|
+
parser.state.lastHarmonyImportOrder =
|
25
|
+
(parser.state.lastHarmonyImportOrder || 0) + 1;
|
26
|
+
const clearDep = new ConstDependency("", statement.range);
|
27
|
+
clearDep.loc = statement.loc;
|
28
|
+
parser.state.module.addDependency(clearDep);
|
29
|
+
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
30
|
+
source,
|
31
|
+
parser.state.module,
|
32
|
+
parser.state.lastHarmonyImportOrder,
|
33
|
+
parser.state.harmonyParserScope
|
34
|
+
);
|
35
|
+
sideEffectDep.loc = statement.loc;
|
36
|
+
parser.state.module.addDependency(sideEffectDep);
|
37
|
+
return true;
|
38
|
+
}
|
39
|
+
);
|
40
|
+
parser.hooks.importSpecifier.tap(
|
41
|
+
"HarmonyImportDependencyParserPlugin",
|
42
|
+
(statement, source, id, name) => {
|
43
|
+
parser.scope.definitions.delete(name);
|
44
|
+
parser.scope.renames.set(name, "imported var");
|
45
|
+
if (!parser.state.harmonySpecifier) {
|
46
|
+
parser.state.harmonySpecifier = new Map();
|
47
|
+
}
|
48
|
+
parser.state.harmonySpecifier.set(name, {
|
49
|
+
source,
|
50
|
+
id,
|
51
|
+
sourceOrder: parser.state.lastHarmonyImportOrder
|
52
|
+
});
|
53
|
+
return true;
|
54
|
+
}
|
55
|
+
);
|
56
|
+
parser.hooks.expression
|
57
|
+
.for("imported var")
|
58
|
+
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
59
|
+
const name = expr.name;
|
60
|
+
const settings = parser.state.harmonySpecifier.get(name);
|
61
|
+
const dep = new HarmonyImportSpecifierDependency(
|
62
|
+
settings.source,
|
63
|
+
parser.state.module,
|
64
|
+
settings.sourceOrder,
|
65
|
+
parser.state.harmonyParserScope,
|
66
|
+
settings.id,
|
67
|
+
name,
|
68
|
+
expr.range,
|
69
|
+
this.strictExportPresence
|
70
|
+
);
|
71
|
+
dep.shorthand = parser.scope.inShorthand;
|
72
|
+
dep.directImport = true;
|
73
|
+
dep.loc = expr.loc;
|
74
|
+
parser.state.module.addDependency(dep);
|
75
|
+
return true;
|
76
|
+
});
|
77
|
+
parser.hooks.expressionAnyMember
|
78
|
+
.for("imported var")
|
79
|
+
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
80
|
+
const name = expr.object.name;
|
81
|
+
const settings = parser.state.harmonySpecifier.get(name);
|
82
|
+
if (settings.id !== null) return false;
|
83
|
+
const dep = new HarmonyImportSpecifierDependency(
|
84
|
+
settings.source,
|
85
|
+
parser.state.module,
|
86
|
+
settings.sourceOrder,
|
87
|
+
parser.state.harmonyParserScope,
|
88
|
+
expr.property.name || expr.property.value,
|
89
|
+
name,
|
90
|
+
expr.range,
|
91
|
+
this.strictExportPresence
|
92
|
+
);
|
93
|
+
dep.shorthand = parser.scope.inShorthand;
|
94
|
+
dep.directImport = false;
|
95
|
+
dep.loc = expr.loc;
|
96
|
+
parser.state.module.addDependency(dep);
|
97
|
+
return true;
|
98
|
+
});
|
99
|
+
if (this.strictThisContextOnImports) {
|
100
|
+
// only in case when we strictly follow the spec we need a special case here
|
101
|
+
parser.hooks.callAnyMember
|
102
|
+
.for("imported var")
|
103
|
+
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
104
|
+
if (expr.callee.type !== "MemberExpression") return;
|
105
|
+
if (expr.callee.object.type !== "Identifier") return;
|
106
|
+
const name = expr.callee.object.name;
|
107
|
+
const settings = parser.state.harmonySpecifier.get(name);
|
108
|
+
if (settings.id !== null) return false;
|
109
|
+
const dep = new HarmonyImportSpecifierDependency(
|
110
|
+
settings.source,
|
111
|
+
parser.state.module,
|
112
|
+
settings.sourceOrder,
|
113
|
+
parser.state.harmonyParserScope,
|
114
|
+
expr.callee.property.name || expr.callee.property.value,
|
115
|
+
name,
|
116
|
+
expr.callee.range,
|
117
|
+
this.strictExportPresence
|
118
|
+
);
|
119
|
+
dep.shorthand = parser.scope.inShorthand;
|
120
|
+
dep.directImport = false;
|
121
|
+
dep.namespaceObjectAsContext = true;
|
122
|
+
dep.loc = expr.callee.loc;
|
123
|
+
parser.state.module.addDependency(dep);
|
124
|
+
if (expr.arguments) parser.walkExpressions(expr.arguments);
|
125
|
+
return true;
|
126
|
+
});
|
127
|
+
}
|
128
|
+
parser.hooks.call
|
129
|
+
.for("imported var")
|
130
|
+
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
131
|
+
const args = expr.arguments;
|
132
|
+
const fullExpr = expr;
|
133
|
+
expr = expr.callee;
|
134
|
+
if (expr.type !== "Identifier") return;
|
135
|
+
const name = expr.name;
|
136
|
+
const settings = parser.state.harmonySpecifier.get(name);
|
137
|
+
const dep = new HarmonyImportSpecifierDependency(
|
138
|
+
settings.source,
|
139
|
+
parser.state.module,
|
140
|
+
settings.sourceOrder,
|
141
|
+
parser.state.harmonyParserScope,
|
142
|
+
settings.id,
|
143
|
+
name,
|
144
|
+
expr.range,
|
145
|
+
this.strictExportPresence
|
146
|
+
);
|
147
|
+
dep.directImport = true;
|
148
|
+
dep.callArgs = args;
|
149
|
+
dep.call = fullExpr;
|
150
|
+
dep.loc = expr.loc;
|
151
|
+
parser.state.module.addDependency(dep);
|
152
|
+
if (args) parser.walkExpressions(args);
|
153
|
+
return true;
|
154
|
+
});
|
155
|
+
// TODO webpack 5: refactor this, no custom hooks
|
156
|
+
if (!parser.hooks.hotAcceptCallback) {
|
157
|
+
parser.hooks.hotAcceptCallback = new SyncBailHook([
|
158
|
+
"expression",
|
159
|
+
"requests"
|
160
|
+
]);
|
161
|
+
}
|
162
|
+
if (!parser.hooks.hotAcceptWithoutCallback) {
|
163
|
+
parser.hooks.hotAcceptWithoutCallback = new SyncBailHook([
|
164
|
+
"expression",
|
165
|
+
"requests"
|
166
|
+
]);
|
167
|
+
}
|
168
|
+
parser.hooks.hotAcceptCallback.tap(
|
169
|
+
"HarmonyImportDependencyParserPlugin",
|
170
|
+
(expr, requests) => {
|
171
|
+
const harmonyParserScope = parser.state.harmonyParserScope;
|
172
|
+
if (!harmonyParserScope) {
|
173
|
+
// This is not a harmony module, skip it
|
174
|
+
return;
|
175
|
+
}
|
176
|
+
const dependencies = requests.map(request => {
|
177
|
+
const dep = new HarmonyAcceptImportDependency(
|
178
|
+
request,
|
179
|
+
parser.state.module,
|
180
|
+
harmonyParserScope
|
181
|
+
);
|
182
|
+
dep.loc = expr.loc;
|
183
|
+
parser.state.module.addDependency(dep);
|
184
|
+
return dep;
|
185
|
+
});
|
186
|
+
if (dependencies.length > 0) {
|
187
|
+
const dep = new HarmonyAcceptDependency(
|
188
|
+
expr.range,
|
189
|
+
dependencies,
|
190
|
+
true
|
191
|
+
);
|
192
|
+
dep.loc = expr.loc;
|
193
|
+
parser.state.module.addDependency(dep);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
);
|
197
|
+
parser.hooks.hotAcceptWithoutCallback.tap(
|
198
|
+
"HarmonyImportDependencyParserPlugin",
|
199
|
+
(expr, requests) => {
|
200
|
+
const dependencies = requests.map(request => {
|
201
|
+
const dep = new HarmonyAcceptImportDependency(
|
202
|
+
request,
|
203
|
+
parser.state.module,
|
204
|
+
parser.state.harmonyParserScope
|
205
|
+
);
|
206
|
+
dep.loc = expr.loc;
|
207
|
+
parser.state.module.addDependency(dep);
|
208
|
+
return dep;
|
209
|
+
});
|
210
|
+
if (dependencies.length > 0) {
|
211
|
+
const dep = new HarmonyAcceptDependency(
|
212
|
+
expr.range,
|
213
|
+
dependencies,
|
214
|
+
false
|
215
|
+
);
|
216
|
+
dep.loc = expr.loc;
|
217
|
+
parser.state.module.addDependency(dep);
|
218
|
+
}
|
219
|
+
}
|
220
|
+
);
|
221
|
+
}
|
222
|
+
};
|
@@ -1,31 +1,31 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
7
|
-
|
8
|
-
class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
|
9
|
-
constructor(request, originModule, sourceOrder, parserScope) {
|
10
|
-
super(request, originModule, sourceOrder, parserScope);
|
11
|
-
}
|
12
|
-
|
13
|
-
getReference() {
|
14
|
-
if (this._module && this._module.factoryMeta.sideEffectFree) return null;
|
15
|
-
|
16
|
-
return super.getReference();
|
17
|
-
}
|
18
|
-
|
19
|
-
get type() {
|
20
|
-
return "harmony side effect evaluation";
|
21
|
-
}
|
22
|
-
}
|
23
|
-
|
24
|
-
HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDependencyTemplate extends HarmonyImportDependency.Template {
|
25
|
-
getHarmonyInitOrder(dep) {
|
26
|
-
if (dep._module && dep._module.factoryMeta.sideEffectFree) return NaN;
|
27
|
-
return super.getHarmonyInitOrder(dep);
|
28
|
-
}
|
29
|
-
};
|
30
|
-
|
31
|
-
module.exports = HarmonyImportSideEffectDependency;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
7
|
+
|
8
|
+
class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
|
9
|
+
constructor(request, originModule, sourceOrder, parserScope) {
|
10
|
+
super(request, originModule, sourceOrder, parserScope);
|
11
|
+
}
|
12
|
+
|
13
|
+
getReference() {
|
14
|
+
if (this._module && this._module.factoryMeta.sideEffectFree) return null;
|
15
|
+
|
16
|
+
return super.getReference();
|
17
|
+
}
|
18
|
+
|
19
|
+
get type() {
|
20
|
+
return "harmony side effect evaluation";
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDependencyTemplate extends HarmonyImportDependency.Template {
|
25
|
+
getHarmonyInitOrder(dep) {
|
26
|
+
if (dep._module && dep._module.factoryMeta.sideEffectFree) return NaN;
|
27
|
+
return super.getHarmonyInitOrder(dep);
|
28
|
+
}
|
29
|
+
};
|
30
|
+
|
31
|
+
module.exports = HarmonyImportSideEffectDependency;
|