webpack 5.102.1 → 5.104.0
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/README.md +121 -134
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/only-dev-server.js +19 -4
- package/lib/APIPlugin.js +6 -0
- package/lib/Chunk.js +1 -1
- package/lib/ChunkGraph.js +9 -7
- package/lib/ChunkGroup.js +8 -5
- package/lib/CleanPlugin.js +6 -3
- package/lib/CodeGenerationResults.js +2 -1
- package/lib/CompatibilityPlugin.js +28 -2
- package/lib/Compilation.js +58 -21
- package/lib/Compiler.js +3 -3
- package/lib/ConcatenationScope.js +0 -15
- package/lib/ContextModule.js +6 -3
- package/lib/ContextModuleFactory.js +6 -4
- package/lib/CssModule.js +6 -1
- package/lib/DefinePlugin.js +45 -14
- package/lib/DelegatedModule.js +7 -4
- package/lib/Dependency.js +8 -1
- package/lib/DependencyTemplate.js +1 -0
- package/lib/DllModule.js +6 -3
- package/lib/DotenvPlugin.js +462 -0
- package/lib/EnvironmentPlugin.js +19 -16
- package/lib/EvalSourceMapDevToolPlugin.js +16 -0
- package/lib/ExportsInfo.js +6 -2
- package/lib/ExternalModule.js +28 -35
- package/lib/ExternalModuleFactoryPlugin.js +11 -9
- package/lib/ExternalsPlugin.js +2 -1
- package/lib/FileSystemInfo.js +1 -1
- package/lib/Generator.js +10 -7
- package/lib/HookWebpackError.js +33 -4
- package/lib/HotModuleReplacementPlugin.js +22 -0
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +27 -15
- package/lib/ModuleBuildError.js +1 -1
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFilenameHelpers.js +1 -1
- package/lib/ModuleGraph.js +29 -13
- package/lib/ModuleGraphConnection.js +2 -2
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTypeConstants.js +1 -4
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +1 -1
- package/lib/NodeStuffPlugin.js +424 -116
- package/lib/NormalModule.js +23 -20
- package/lib/NormalModuleFactory.js +7 -10
- package/lib/Parser.js +1 -1
- package/lib/RawModule.js +7 -4
- package/lib/RuntimeGlobals.js +22 -4
- package/lib/RuntimeModule.js +1 -1
- package/lib/RuntimePlugin.js +27 -6
- package/lib/RuntimeTemplate.js +120 -57
- package/lib/SourceMapDevToolPlugin.js +26 -1
- package/lib/Template.js +17 -6
- package/lib/TemplatedPathPlugin.js +5 -6
- package/lib/WebpackError.js +0 -1
- package/lib/WebpackOptionsApply.js +67 -15
- package/lib/asset/AssetBytesGenerator.js +16 -12
- package/lib/asset/AssetGenerator.js +31 -26
- package/lib/asset/AssetSourceGenerator.js +16 -12
- package/lib/asset/RawDataUrlModule.js +6 -3
- package/lib/buildChunkGraph.js +4 -2
- package/lib/cache/PackFileCacheStrategy.js +6 -5
- package/lib/cli.js +2 -43
- package/lib/config/browserslistTargetHandler.js +24 -0
- package/lib/config/defaults.js +226 -61
- package/lib/config/normalization.js +4 -3
- package/lib/config/target.js +11 -0
- package/lib/container/ContainerEntryModule.js +6 -3
- package/lib/container/FallbackModule.js +6 -3
- package/lib/container/RemoteModule.js +1 -3
- package/lib/css/CssGenerator.js +304 -76
- package/lib/css/CssLoadingRuntimeModule.js +14 -4
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +72 -67
- package/lib/css/CssParser.js +1726 -732
- package/lib/css/walkCssTokens.js +128 -11
- package/lib/dependencies/CachedConstDependency.js +24 -10
- package/lib/dependencies/CommonJsImportsParserPlugin.js +0 -9
- package/lib/dependencies/CommonJsPlugin.js +12 -0
- package/lib/dependencies/CommonJsRequireContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +2 -2
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +389 -12
- package/lib/dependencies/CssIcssImportDependency.js +114 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +31 -33
- package/lib/dependencies/CssImportDependency.js +17 -6
- package/lib/dependencies/CssUrlDependency.js +3 -2
- package/lib/dependencies/DynamicExports.js +7 -7
- package/lib/dependencies/ExternalModuleDependency.js +7 -4
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +6 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -1
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +35 -23
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +13 -9
- package/lib/dependencies/HarmonyExports.js +4 -4
- package/lib/dependencies/HarmonyImportDependency.js +28 -27
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +28 -69
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -3
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +10 -8
- package/lib/dependencies/ImportDependency.js +8 -2
- package/lib/dependencies/ImportEagerDependency.js +6 -3
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -9
- package/lib/dependencies/ImportParserPlugin.js +21 -23
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportWeakDependency.js +6 -3
- package/lib/dependencies/LocalModulesHelpers.js +3 -3
- package/lib/dependencies/ModuleDependency.js +5 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/WorkerPlugin.js +2 -2
- package/lib/dependencies/getFunctionExpression.js +1 -1
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -8
- package/lib/esm/ModuleChunkFormatPlugin.js +5 -4
- package/lib/hmr/HotModuleReplacement.runtime.js +2 -1
- package/lib/hmr/LazyCompilationPlugin.js +5 -3
- package/lib/ids/IdHelpers.js +20 -8
- package/lib/index.js +6 -0
- package/lib/javascript/ChunkHelpers.js +16 -5
- package/lib/javascript/JavascriptGenerator.js +105 -104
- package/lib/javascript/JavascriptModulesPlugin.js +80 -37
- package/lib/javascript/JavascriptParser.js +161 -44
- package/lib/json/JsonGenerator.js +5 -4
- package/lib/json/JsonParser.js +9 -2
- package/lib/library/AbstractLibraryPlugin.js +1 -1
- package/lib/library/AmdLibraryPlugin.js +4 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +41 -23
- package/lib/library/SystemLibraryPlugin.js +8 -1
- package/lib/library/UmdLibraryPlugin.js +2 -2
- package/lib/logging/Logger.js +5 -4
- package/lib/logging/createConsoleLogger.js +2 -2
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +0 -2
- package/lib/optimize/ConcatenatedModule.js +208 -167
- package/lib/optimize/ModuleConcatenationPlugin.js +5 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +3 -2
- package/lib/optimize/SplitChunksPlugin.js +60 -46
- package/lib/rules/RuleSetCompiler.js +1 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +28 -18
- package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +3 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +89 -55
- package/lib/schemes/HttpUriPlugin.js +78 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -2
- package/lib/serialization/ObjectMiddleware.js +0 -2
- package/lib/serialization/SingleItemMiddleware.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +1 -1
- package/lib/sharing/ConsumeSharedPlugin.js +5 -3
- package/lib/sharing/ProvideSharedModule.js +1 -1
- package/lib/sharing/resolveMatchedConfigs.js +15 -9
- package/lib/sharing/utils.js +1 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +8 -5
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +1 -1
- package/lib/util/StringXor.js +1 -1
- package/lib/util/URLAbsoluteSpecifier.js +2 -2
- package/lib/util/binarySearchBounds.js +2 -2
- package/lib/util/comparators.js +54 -76
- package/lib/util/compileBooleanMatcher.js +78 -6
- package/lib/util/createHash.js +20 -199
- package/lib/util/deprecation.js +1 -1
- package/lib/util/deterministicGrouping.js +6 -3
- package/lib/util/fs.js +75 -75
- package/lib/util/hash/BatchedHash.js +10 -9
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/identifier.js +82 -17
- package/lib/util/internalSerializables.js +2 -6
- package/lib/util/runtime.js +3 -3
- package/lib/util/source.js +2 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -4
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +3 -2
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +11 -7
- package/lib/wasm-sync/WebAssemblyGenerator.js +9 -6
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +11 -6
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +6 -2
- package/lib/web/FetchCompileWasmPlugin.js +0 -2
- package/lib/webpack.js +85 -82
- package/module.d.ts +5 -0
- package/package.json +34 -28
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +160 -101
- package/schemas/plugins/{css/CssAutoParserOptions.check.d.ts → ManifestPlugin.check.d.ts} +1 -1
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +16 -3
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -1
- package/types.d.ts +771 -436
- package/lib/ModuleSourceTypesConstants.js +0 -123
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -112
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const makeSerializable = require("../util/makeSerializable");
|
|
9
9
|
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
10
|
+
const { ImportPhase } = require("./ImportPhase");
|
|
10
11
|
const NullDependency = require("./NullDependency");
|
|
11
12
|
|
|
12
13
|
class HarmonyAcceptImportDependency extends HarmonyImportDependency {
|
|
@@ -14,7 +15,7 @@ class HarmonyAcceptImportDependency extends HarmonyImportDependency {
|
|
|
14
15
|
* @param {string} request the request string
|
|
15
16
|
*/
|
|
16
17
|
constructor(request) {
|
|
17
|
-
super(request,
|
|
18
|
+
super(request, Infinity, ImportPhase.Evaluation);
|
|
18
19
|
this.weak = true;
|
|
19
20
|
}
|
|
20
21
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const makeSerializable = require("../util/makeSerializable");
|
|
9
9
|
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
|
10
|
+
const { ImportPhase } = require("./ImportPhase");
|
|
10
11
|
|
|
11
12
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
|
12
13
|
/** @typedef {import("../Dependency")} Dependency */
|
|
@@ -37,7 +38,17 @@ class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDe
|
|
|
37
38
|
* @param {string} operator operator
|
|
38
39
|
*/
|
|
39
40
|
constructor(request, sourceOrder, ids, name, range, attributes, operator) {
|
|
40
|
-
super(
|
|
41
|
+
super(
|
|
42
|
+
request,
|
|
43
|
+
sourceOrder,
|
|
44
|
+
ids,
|
|
45
|
+
name,
|
|
46
|
+
range,
|
|
47
|
+
false,
|
|
48
|
+
ImportPhase.Evaluation,
|
|
49
|
+
attributes,
|
|
50
|
+
[]
|
|
51
|
+
);
|
|
41
52
|
this.operator = operator;
|
|
42
53
|
}
|
|
43
54
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
const CompatibilityPlugin = require("../CompatibilityPlugin");
|
|
8
9
|
const WebpackError = require("../WebpackError");
|
|
9
10
|
const { getImportAttributes } = require("../javascript/JavascriptParser");
|
|
10
11
|
const InnerGraph = require("../optimize/InnerGraph");
|
|
@@ -15,10 +16,10 @@ const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImporte
|
|
|
15
16
|
const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDependency");
|
|
16
17
|
const { ExportPresenceModes } = require("./HarmonyImportDependency");
|
|
17
18
|
const {
|
|
18
|
-
getImportMode,
|
|
19
19
|
harmonySpecifierTag
|
|
20
20
|
} = require("./HarmonyImportDependencyParserPlugin");
|
|
21
21
|
const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
|
22
|
+
const { ImportPhaseUtils, createGetImportPhase } = require("./ImportPhase");
|
|
22
23
|
|
|
23
24
|
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
|
24
25
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
|
@@ -26,6 +27,7 @@ const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDepe
|
|
|
26
27
|
/** @typedef {import("../javascript/JavascriptParser").FunctionDeclaration} FunctionDeclaration */
|
|
27
28
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
28
29
|
/** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
|
|
30
|
+
/** @typedef {import("../CompatibilityPlugin").CompatibilitySettings} CompatibilitySettings */
|
|
29
31
|
|
|
30
32
|
const { HarmonyStarExportsList } = HarmonyExportImportedSpecifierDependency;
|
|
31
33
|
|
|
@@ -36,6 +38,7 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
36
38
|
* @param {import("../../declarations/WebpackOptions").JavascriptParserOptions} options options
|
|
37
39
|
*/
|
|
38
40
|
constructor(options) {
|
|
41
|
+
this.options = options;
|
|
39
42
|
this.exportPresenceMode =
|
|
40
43
|
options.reexportExportsPresence !== undefined
|
|
41
44
|
? ExportPresenceModes.fromUserOption(options.reexportExportsPresence)
|
|
@@ -44,7 +47,6 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
44
47
|
: options.strictExportPresence
|
|
45
48
|
? ExportPresenceModes.ERROR
|
|
46
49
|
: ExportPresenceModes.AUTO;
|
|
47
|
-
this.deferImport = options.deferImport;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
/**
|
|
@@ -53,6 +55,8 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
53
55
|
*/
|
|
54
56
|
apply(parser) {
|
|
55
57
|
const { exportPresenceMode } = this;
|
|
58
|
+
const getImportPhase = createGetImportPhase(this.options.deferImport);
|
|
59
|
+
|
|
56
60
|
parser.hooks.export.tap(PLUGIN_NAME, (statement) => {
|
|
57
61
|
const dep = new HarmonyExportHeaderDependency(
|
|
58
62
|
/** @type {Range | false} */ (
|
|
@@ -77,22 +81,20 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
77
81
|
clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
|
78
82
|
clearDep.loc.index = -1;
|
|
79
83
|
parser.state.module.addPresentationalDependency(clearDep);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
parser.state.current.addError(error);
|
|
89
|
-
}
|
|
84
|
+
|
|
85
|
+
const phase = getImportPhase(parser, statement);
|
|
86
|
+
if (phase && ImportPhaseUtils.isDefer(phase)) {
|
|
87
|
+
const error = new WebpackError(
|
|
88
|
+
"Deferred re-export (`export defer * as namespace from '...'`) is not a part of the Import Defer proposal.\nUse the following code instead:\n import defer * as namespace from '...';\n export { namespace };"
|
|
89
|
+
);
|
|
90
|
+
error.loc = statement.loc || undefined;
|
|
91
|
+
parser.state.current.addError(error);
|
|
90
92
|
}
|
|
91
93
|
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
|
92
94
|
/** @type {string} */ (source),
|
|
93
95
|
parser.state.lastHarmonyImportOrder,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
phase,
|
|
97
|
+
getImportAttributes(statement)
|
|
96
98
|
);
|
|
97
99
|
sideEffectDep.loc = Object.create(
|
|
98
100
|
/** @type {DependencyLocation} */ (statement.loc)
|
|
@@ -121,7 +123,7 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
121
123
|
})
|
|
122
124
|
.join(""),
|
|
123
125
|
node.type.endsWith("Declaration") &&
|
|
124
|
-
|
|
126
|
+
/** @type {FunctionDeclaration | ClassDeclaration} */ (node).id
|
|
125
127
|
? /** @type {FunctionDeclaration | ClassDeclaration} */
|
|
126
128
|
(node).id.name
|
|
127
129
|
: isFunctionDeclaration
|
|
@@ -157,6 +159,18 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
157
159
|
parser.hooks.exportSpecifier.tap(
|
|
158
160
|
PLUGIN_NAME,
|
|
159
161
|
(statement, id, name, idx) => {
|
|
162
|
+
// CompatibilityPlugin may change exports name
|
|
163
|
+
// not handle re-export or import then export situation as current CompatibilityPlugin only
|
|
164
|
+
// rename symbol in declaration module, not change exported symbol
|
|
165
|
+
const variable = parser.getTagData(
|
|
166
|
+
id,
|
|
167
|
+
CompatibilityPlugin.nestedWebpackIdentifierTag
|
|
168
|
+
);
|
|
169
|
+
if (variable && /** @type {CompatibilitySettings} */ (variable).name) {
|
|
170
|
+
// CompatibilityPlugin changes exports to a new name, should updates exports name
|
|
171
|
+
id = /** @type {CompatibilitySettings} */ (variable).name;
|
|
172
|
+
}
|
|
173
|
+
|
|
160
174
|
const settings =
|
|
161
175
|
/** @type {HarmonySettings} */
|
|
162
176
|
(parser.getTagData(id, harmonySpecifierTag));
|
|
@@ -174,8 +188,8 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
174
188
|
null,
|
|
175
189
|
exportPresenceMode,
|
|
176
190
|
null,
|
|
177
|
-
settings.
|
|
178
|
-
settings.
|
|
191
|
+
settings.phase,
|
|
192
|
+
settings.attributes
|
|
179
193
|
)
|
|
180
194
|
: new HarmonyExportSpecifierDependency(id, name);
|
|
181
195
|
dep.loc = Object.create(
|
|
@@ -207,13 +221,11 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
207
221
|
parser.state.harmonyStarExports || new HarmonyStarExportsList();
|
|
208
222
|
}
|
|
209
223
|
const attributes = getImportAttributes(statement);
|
|
210
|
-
const defer = this.deferImport
|
|
211
|
-
? getImportMode(parser, statement).defer
|
|
212
|
-
: false;
|
|
213
224
|
const dep = new HarmonyExportImportedSpecifierDependency(
|
|
214
225
|
/** @type {string} */
|
|
215
226
|
(source),
|
|
216
|
-
|
|
227
|
+
/** @type {number} */
|
|
228
|
+
(parser.state.lastHarmonyImportOrder),
|
|
217
229
|
id ? [id] : [],
|
|
218
230
|
name,
|
|
219
231
|
harmonyNamedExports,
|
|
@@ -221,8 +233,8 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
221
233
|
harmonyStarExports && harmonyStarExports.slice(),
|
|
222
234
|
exportPresenceMode,
|
|
223
235
|
harmonyStarExports,
|
|
224
|
-
|
|
225
|
-
|
|
236
|
+
getImportPhase(parser, statement),
|
|
237
|
+
attributes
|
|
226
238
|
);
|
|
227
239
|
if (harmonyStarExports) {
|
|
228
240
|
harmonyStarExports.push(dep);
|
|
@@ -27,6 +27,7 @@ const {
|
|
|
27
27
|
} = require("../util/runtime");
|
|
28
28
|
const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
|
|
29
29
|
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
30
|
+
const { ImportPhaseUtils } = require("./ImportPhase");
|
|
30
31
|
const processExportInfo = require("./processExportInfo");
|
|
31
32
|
|
|
32
33
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
|
@@ -57,8 +58,9 @@ const processExportInfo = require("./processExportInfo");
|
|
|
57
58
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
58
59
|
/** @typedef {import("./HarmonyImportDependency").Ids} Ids */
|
|
59
60
|
/** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
|
|
61
|
+
/** @typedef {import("../dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
|
|
60
62
|
|
|
61
|
-
/** @typedef {"missing"|"unused"|"empty-star"|"reexport-dynamic-default"|"reexport-named-default"|"reexport-namespace-object"|"reexport-fake-namespace-object"|"reexport-undefined"|"normal-reexport"|"dynamic-reexport"} ExportModeType */
|
|
63
|
+
/** @typedef {"missing" | "unused" | "empty-star" | "reexport-dynamic-default" | "reexport-named-default" | "reexport-namespace-object" | "reexport-fake-namespace-object" | "reexport-undefined" | "normal-reexport" | "dynamic-reexport"} ExportModeType */
|
|
62
64
|
|
|
63
65
|
const { ExportPresenceModes } = HarmonyImportDependency;
|
|
64
66
|
|
|
@@ -376,8 +378,8 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
376
378
|
* @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency> | null} otherStarExports other star exports in the module before this import
|
|
377
379
|
* @param {ExportPresenceMode} exportPresenceMode mode of checking export names
|
|
378
380
|
* @param {HarmonyStarExportsList | null} allStarExports all star exports in the module
|
|
381
|
+
* @param {ImportPhaseType} phase import phase
|
|
379
382
|
* @param {ImportAttributes=} attributes import attributes
|
|
380
|
-
* @param {boolean=} defer is defer phase
|
|
381
383
|
*/
|
|
382
384
|
constructor(
|
|
383
385
|
request,
|
|
@@ -388,10 +390,10 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
388
390
|
otherStarExports,
|
|
389
391
|
exportPresenceMode,
|
|
390
392
|
allStarExports,
|
|
391
|
-
|
|
392
|
-
|
|
393
|
+
phase,
|
|
394
|
+
attributes
|
|
393
395
|
) {
|
|
394
|
-
super(request, sourceOrder,
|
|
396
|
+
super(request, sourceOrder, phase, attributes);
|
|
395
397
|
|
|
396
398
|
this.ids = ids;
|
|
397
399
|
this.name = name;
|
|
@@ -1050,12 +1052,14 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1050
1052
|
) {
|
|
1051
1053
|
const importedModule = /** @type {Module} */ (moduleGraph.getModule(dep));
|
|
1052
1054
|
const importVar = dep.getImportVar(moduleGraph);
|
|
1055
|
+
const isDeferred =
|
|
1056
|
+
ImportPhaseUtils.isDefer(dep.phase) &&
|
|
1057
|
+
!(/** @type {BuildMeta} */ (importedModule.buildMeta).async);
|
|
1053
1058
|
|
|
1054
1059
|
if (
|
|
1055
1060
|
(mode.type === "reexport-namespace-object" ||
|
|
1056
1061
|
mode.type === "reexport-fake-namespace-object") &&
|
|
1057
|
-
|
|
1058
|
-
!moduleGraph.isAsync(importedModule)
|
|
1062
|
+
isDeferred
|
|
1059
1063
|
) {
|
|
1060
1064
|
initFragments.push(
|
|
1061
1065
|
...this.getReexportDeferredNamespaceObjectFragments(
|
|
@@ -1200,7 +1204,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1200
1204
|
moduleGraph.isAsync(importedModule)
|
|
1201
1205
|
? InitFragment.STAGE_ASYNC_HARMONY_IMPORTS
|
|
1202
1206
|
: InitFragment.STAGE_HARMONY_IMPORTS,
|
|
1203
|
-
dep.sourceOrder,
|
|
1207
|
+
/** @type {number} */ (dep.sourceOrder),
|
|
1204
1208
|
key,
|
|
1205
1209
|
runtimeCondition
|
|
1206
1210
|
)
|
|
@@ -1261,7 +1265,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1261
1265
|
moduleGraph.isAsync(importedModule)
|
|
1262
1266
|
? InitFragment.STAGE_ASYNC_HARMONY_IMPORTS
|
|
1263
1267
|
: InitFragment.STAGE_HARMONY_IMPORTS,
|
|
1264
|
-
dep.sourceOrder
|
|
1268
|
+
/** @type {number} */ (dep.sourceOrder)
|
|
1265
1269
|
)
|
|
1266
1270
|
);
|
|
1267
1271
|
break;
|
|
@@ -9,13 +9,13 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
|
9
9
|
|
|
10
10
|
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
|
11
11
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
12
|
-
/** @typedef {import("../
|
|
12
|
+
/** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
|
|
13
13
|
|
|
14
|
-
/** @type {WeakMap<
|
|
14
|
+
/** @type {WeakMap<JavascriptParserState, boolean>} */
|
|
15
15
|
const parserStateExportsState = new WeakMap();
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* @param {
|
|
18
|
+
* @param {JavascriptParserState} parserState parser state
|
|
19
19
|
* @param {boolean} isStrictHarmony strict harmony mode should be enabled
|
|
20
20
|
* @returns {void}
|
|
21
21
|
*/
|
|
@@ -37,7 +37,7 @@ module.exports.enable = (parserState, isStrictHarmony) => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* @param {
|
|
40
|
+
* @param {JavascriptParserState} parserState parser state
|
|
41
41
|
* @returns {boolean} true, when enabled
|
|
42
42
|
*/
|
|
43
43
|
module.exports.isEnabled = (parserState) => {
|
|
@@ -12,6 +12,7 @@ const InitFragment = require("../InitFragment");
|
|
|
12
12
|
const Template = require("../Template");
|
|
13
13
|
const AwaitDependenciesInitFragment = require("../async-modules/AwaitDependenciesInitFragment");
|
|
14
14
|
const { filterRuntime, mergeRuntime } = require("../util/runtime");
|
|
15
|
+
const { ImportPhase, ImportPhaseUtils } = require("./ImportPhase");
|
|
15
16
|
const ModuleDependency = require("./ModuleDependency");
|
|
16
17
|
|
|
17
18
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
|
@@ -23,6 +24,7 @@ const ModuleDependency = require("./ModuleDependency");
|
|
|
23
24
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
24
25
|
/** @typedef {import("../WebpackError")} WebpackError */
|
|
25
26
|
/** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
|
|
27
|
+
/** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
|
|
26
28
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
27
29
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
28
30
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
@@ -60,14 +62,18 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
60
62
|
/**
|
|
61
63
|
* @param {string} request request string
|
|
62
64
|
* @param {number} sourceOrder source order
|
|
65
|
+
* @param {ImportPhaseType=} phase import phase
|
|
63
66
|
* @param {ImportAttributes=} attributes import attributes
|
|
64
|
-
* @param {boolean=} defer import attributes
|
|
65
67
|
*/
|
|
66
|
-
constructor(
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
constructor(
|
|
69
|
+
request,
|
|
70
|
+
sourceOrder,
|
|
71
|
+
phase = ImportPhase.Evaluation,
|
|
72
|
+
attributes = undefined
|
|
73
|
+
) {
|
|
74
|
+
super(request, sourceOrder);
|
|
75
|
+
this.phase = phase;
|
|
69
76
|
this.attributes = attributes;
|
|
70
|
-
this.defer = defer;
|
|
71
77
|
}
|
|
72
78
|
|
|
73
79
|
get category() {
|
|
@@ -79,7 +85,7 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
79
85
|
*/
|
|
80
86
|
getResourceIdentifier() {
|
|
81
87
|
let str = super.getResourceIdentifier();
|
|
82
|
-
if (this.
|
|
88
|
+
if (ImportPhaseUtils.isDefer(this.phase)) {
|
|
83
89
|
str += "|defer";
|
|
84
90
|
}
|
|
85
91
|
if (this.attributes) {
|
|
@@ -104,10 +110,14 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
104
110
|
*/
|
|
105
111
|
getImportVar(moduleGraph) {
|
|
106
112
|
const module = /** @type {Module} */ (moduleGraph.getParentModule(this));
|
|
113
|
+
const importedModule = /** @type {Module} */ (moduleGraph.getModule(this));
|
|
107
114
|
const meta = moduleGraph.getMeta(module);
|
|
108
|
-
const defer = this.defer;
|
|
109
115
|
|
|
110
|
-
const
|
|
116
|
+
const isDeferred =
|
|
117
|
+
ImportPhaseUtils.isDefer(this.phase) &&
|
|
118
|
+
!(/** @type {BuildMeta} */ (importedModule.buildMeta).async);
|
|
119
|
+
|
|
120
|
+
const metaKey = isDeferred ? "deferredImportVarMap" : "importVarMap";
|
|
111
121
|
let importVarMap = meta[metaKey];
|
|
112
122
|
if (!importVarMap) {
|
|
113
123
|
meta[metaKey] = importVarMap =
|
|
@@ -115,19 +125,12 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
115
125
|
(new Map());
|
|
116
126
|
}
|
|
117
127
|
|
|
118
|
-
let importVar = importVarMap.get(
|
|
119
|
-
/** @type {Module} */
|
|
120
|
-
(moduleGraph.getModule(this))
|
|
121
|
-
);
|
|
128
|
+
let importVar = importVarMap.get(importedModule);
|
|
122
129
|
if (importVar) return importVar;
|
|
123
130
|
importVar = `${Template.toIdentifier(
|
|
124
131
|
`${this.userRequest}`
|
|
125
|
-
)}__WEBPACK_${
|
|
126
|
-
importVarMap.set(
|
|
127
|
-
/** @type {Module} */
|
|
128
|
-
(moduleGraph.getModule(this)),
|
|
129
|
-
importVar
|
|
130
|
-
);
|
|
132
|
+
)}__WEBPACK_${isDeferred ? "DEFERRED_" : ""}IMPORTED_MODULE_${importVarMap.size}__`;
|
|
133
|
+
importVarMap.set(importedModule, importVar);
|
|
131
134
|
return importVar;
|
|
132
135
|
}
|
|
133
136
|
|
|
@@ -167,7 +170,7 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
167
170
|
request: this.request,
|
|
168
171
|
originModule: module,
|
|
169
172
|
runtimeRequirements,
|
|
170
|
-
|
|
173
|
+
dependency: this
|
|
171
174
|
});
|
|
172
175
|
}
|
|
173
176
|
|
|
@@ -289,9 +292,8 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
289
292
|
*/
|
|
290
293
|
serialize(context) {
|
|
291
294
|
const { write } = context;
|
|
292
|
-
write(this.sourceOrder);
|
|
293
295
|
write(this.attributes);
|
|
294
|
-
write(this.
|
|
296
|
+
write(this.phase);
|
|
295
297
|
super.serialize(context);
|
|
296
298
|
}
|
|
297
299
|
|
|
@@ -300,9 +302,8 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
300
302
|
*/
|
|
301
303
|
deserialize(context) {
|
|
302
304
|
const { read } = context;
|
|
303
|
-
this.sourceOrder = read();
|
|
304
305
|
this.attributes = read();
|
|
305
|
-
this.
|
|
306
|
+
this.phase = read();
|
|
306
307
|
super.deserialize(context);
|
|
307
308
|
}
|
|
308
309
|
}
|
|
@@ -344,7 +345,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
|
|
|
344
345
|
const moduleKey = referencedModule
|
|
345
346
|
? referencedModule.identifier()
|
|
346
347
|
: dep.request;
|
|
347
|
-
const key = `${dep.
|
|
348
|
+
const key = `${ImportPhaseUtils.isDefer(dep.phase) ? "deferred " : ""}harmony import ${moduleKey}`;
|
|
348
349
|
|
|
349
350
|
const runtimeCondition = dep.weak
|
|
350
351
|
? false
|
|
@@ -382,7 +383,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
|
|
|
382
383
|
new ConditionalInitFragment(
|
|
383
384
|
importStatement[0],
|
|
384
385
|
InitFragment.STAGE_HARMONY_IMPORTS,
|
|
385
|
-
dep.sourceOrder,
|
|
386
|
+
/** @type {number} */ (dep.sourceOrder),
|
|
386
387
|
key,
|
|
387
388
|
runtimeCondition
|
|
388
389
|
)
|
|
@@ -395,7 +396,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
|
|
|
395
396
|
new ConditionalInitFragment(
|
|
396
397
|
importStatement[1],
|
|
397
398
|
InitFragment.STAGE_ASYNC_HARMONY_IMPORTS,
|
|
398
|
-
dep.sourceOrder,
|
|
399
|
+
/** @type {number} */ (dep.sourceOrder),
|
|
399
400
|
`${key} compat`,
|
|
400
401
|
runtimeCondition
|
|
401
402
|
)
|
|
@@ -405,7 +406,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
|
|
|
405
406
|
new ConditionalInitFragment(
|
|
406
407
|
importStatement[0] + importStatement[1],
|
|
407
408
|
InitFragment.STAGE_HARMONY_IMPORTS,
|
|
408
|
-
dep.sourceOrder,
|
|
409
|
+
/** @type {number} */ (dep.sourceOrder),
|
|
409
410
|
key,
|
|
410
411
|
runtimeCondition
|
|
411
412
|
)
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const CommentCompilationWarning = require("../CommentCompilationWarning");
|
|
9
8
|
const HotModuleReplacementPlugin = require("../HotModuleReplacementPlugin");
|
|
10
9
|
const WebpackError = require("../WebpackError");
|
|
11
10
|
const {
|
|
@@ -21,6 +20,7 @@ const HarmonyExports = require("./HarmonyExports");
|
|
|
21
20
|
const { ExportPresenceModes } = require("./HarmonyImportDependency");
|
|
22
21
|
const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
|
23
22
|
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
|
23
|
+
const { ImportPhaseUtils, createGetImportPhase } = require("./ImportPhase");
|
|
24
24
|
|
|
25
25
|
/** @typedef {import("estree").Expression} Expression */
|
|
26
26
|
/** @typedef {import("estree").Identifier} Identifier */
|
|
@@ -36,6 +36,7 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
|
|
|
36
36
|
/** @typedef {import("../javascript/JavascriptParser").Members} Members */
|
|
37
37
|
/** @typedef {import("../javascript/JavascriptParser").MembersOptionals} MembersOptionals */
|
|
38
38
|
/** @typedef {import("./HarmonyImportDependency").Ids} Ids */
|
|
39
|
+
/** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
|
|
39
40
|
|
|
40
41
|
const harmonySpecifierTag = Symbol("harmony import");
|
|
41
42
|
|
|
@@ -47,7 +48,7 @@ const harmonySpecifierTag = Symbol("harmony import");
|
|
|
47
48
|
* @property {string} name
|
|
48
49
|
* @property {boolean} await
|
|
49
50
|
* @property {ImportAttributes=} attributes
|
|
50
|
-
* @property {
|
|
51
|
+
* @property {ImportPhaseType} phase
|
|
51
52
|
*/
|
|
52
53
|
|
|
53
54
|
const PLUGIN_NAME = "HarmonyImportDependencyParserPlugin";
|
|
@@ -57,6 +58,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
57
58
|
* @param {JavascriptParserOptions} options options
|
|
58
59
|
*/
|
|
59
60
|
constructor(options) {
|
|
61
|
+
this.options = options;
|
|
60
62
|
this.exportPresenceMode =
|
|
61
63
|
options.importExportsPresence !== undefined
|
|
62
64
|
? ExportPresenceModes.fromUserOption(options.importExportsPresence)
|
|
@@ -66,7 +68,6 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
66
68
|
? ExportPresenceModes.ERROR
|
|
67
69
|
: ExportPresenceModes.AUTO;
|
|
68
70
|
this.strictThisContextOnImports = options.strictThisContextOnImports;
|
|
69
|
-
this.deferImport = options.deferImport;
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
/**
|
|
@@ -76,6 +77,8 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
76
77
|
apply(parser) {
|
|
77
78
|
const { exportPresenceMode } = this;
|
|
78
79
|
|
|
80
|
+
const getImportPhase = createGetImportPhase(this.options.deferImport);
|
|
81
|
+
|
|
79
82
|
/**
|
|
80
83
|
* @param {Members} members members
|
|
81
84
|
* @param {MembersOptionals} membersOptionals members Optionals
|
|
@@ -119,26 +122,24 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
119
122
|
parser.state.module.addPresentationalDependency(clearDep);
|
|
120
123
|
parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
|
|
121
124
|
const attributes = getImportAttributes(statement);
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
error.loc = statement.loc || undefined;
|
|
134
|
-
parser.state.current.addError(error);
|
|
135
|
-
}
|
|
125
|
+
const phase = getImportPhase(parser, statement);
|
|
126
|
+
if (
|
|
127
|
+
ImportPhaseUtils.isDefer(phase) &&
|
|
128
|
+
(statement.specifiers.length !== 1 ||
|
|
129
|
+
statement.specifiers[0].type !== "ImportNamespaceSpecifier")
|
|
130
|
+
) {
|
|
131
|
+
const error = new WebpackError(
|
|
132
|
+
"Deferred import can only be used with `import * as namespace from '...'` syntax."
|
|
133
|
+
);
|
|
134
|
+
error.loc = statement.loc || undefined;
|
|
135
|
+
parser.state.current.addError(error);
|
|
136
136
|
}
|
|
137
|
+
|
|
137
138
|
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
|
138
139
|
/** @type {string} */ (source),
|
|
139
140
|
parser.state.lastHarmonyImportOrder,
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
phase,
|
|
142
|
+
attributes
|
|
142
143
|
);
|
|
143
144
|
sideEffectDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
|
144
145
|
parser.state.module.addDependency(sideEffectDep);
|
|
@@ -148,9 +149,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
148
149
|
PLUGIN_NAME,
|
|
149
150
|
(statement, source, id, name) => {
|
|
150
151
|
const ids = id === null ? [] : [id];
|
|
151
|
-
const
|
|
152
|
-
? getImportMode(parser, statement).defer
|
|
153
|
-
: false;
|
|
152
|
+
const phase = getImportPhase(parser, statement);
|
|
154
153
|
parser.tagVariable(
|
|
155
154
|
name,
|
|
156
155
|
harmonySpecifierTag,
|
|
@@ -160,7 +159,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
160
159
|
ids,
|
|
161
160
|
sourceOrder: parser.state.lastHarmonyImportOrder,
|
|
162
161
|
attributes: getImportAttributes(statement),
|
|
163
|
-
|
|
162
|
+
phase
|
|
164
163
|
})
|
|
165
164
|
);
|
|
166
165
|
return true;
|
|
@@ -237,9 +236,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
237
236
|
/** @type {Range} */
|
|
238
237
|
(expr.range),
|
|
239
238
|
exportPresenceMode,
|
|
239
|
+
settings.phase,
|
|
240
240
|
settings.attributes,
|
|
241
|
-
[]
|
|
242
|
-
settings.defer
|
|
241
|
+
[]
|
|
243
242
|
);
|
|
244
243
|
dep.referencedPropertiesInDestructuring =
|
|
245
244
|
parser.destructuringAssignmentPropertiesFor(expr);
|
|
@@ -287,9 +286,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
287
286
|
/** @type {Range} */
|
|
288
287
|
(expr.range),
|
|
289
288
|
exportPresenceMode,
|
|
289
|
+
settings.phase,
|
|
290
290
|
settings.attributes,
|
|
291
|
-
ranges
|
|
292
|
-
settings.defer
|
|
291
|
+
ranges
|
|
293
292
|
);
|
|
294
293
|
dep.referencedPropertiesInDestructuring =
|
|
295
294
|
parser.destructuringAssignmentPropertiesFor(expr);
|
|
@@ -337,9 +336,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
337
336
|
settings.name,
|
|
338
337
|
/** @type {Range} */ (expr.range),
|
|
339
338
|
exportPresenceMode,
|
|
339
|
+
settings.phase,
|
|
340
340
|
settings.attributes,
|
|
341
|
-
ranges
|
|
342
|
-
settings.defer
|
|
341
|
+
ranges
|
|
343
342
|
);
|
|
344
343
|
dep.directImport = members.length === 0;
|
|
345
344
|
dep.call = true;
|
|
@@ -406,44 +405,4 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
406
405
|
}
|
|
407
406
|
};
|
|
408
407
|
|
|
409
|
-
/**
|
|
410
|
-
* @param {JavascriptParser} parser parser
|
|
411
|
-
* @param {ExportNamedDeclaration | ExportAllDeclaration | ImportDeclaration} node node
|
|
412
|
-
* @returns {{ defer: boolean }} import attributes
|
|
413
|
-
*/
|
|
414
|
-
function getImportMode(parser, node) {
|
|
415
|
-
const result = { defer: "phase" in node && node.phase === "defer" };
|
|
416
|
-
if (!node.range) {
|
|
417
|
-
return result;
|
|
418
|
-
}
|
|
419
|
-
const { options, errors } = parser.parseCommentOptions(node.range);
|
|
420
|
-
if (errors) {
|
|
421
|
-
for (const e of errors) {
|
|
422
|
-
const { comment } = e;
|
|
423
|
-
if (!comment.loc) continue;
|
|
424
|
-
parser.state.module.addWarning(
|
|
425
|
-
new CommentCompilationWarning(
|
|
426
|
-
`Compilation error while processing magic comment(-s): /*${comment.value}*/: ${e.message}`,
|
|
427
|
-
comment.loc
|
|
428
|
-
)
|
|
429
|
-
);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
if (!options) return result;
|
|
433
|
-
if (options.webpackDefer) {
|
|
434
|
-
if (typeof options.webpackDefer === "boolean") {
|
|
435
|
-
result.defer = options.webpackDefer;
|
|
436
|
-
} else if (node.loc) {
|
|
437
|
-
parser.state.module.addWarning(
|
|
438
|
-
new CommentCompilationWarning(
|
|
439
|
-
"webpackDefer magic comment expected a boolean value.",
|
|
440
|
-
node.loc
|
|
441
|
-
)
|
|
442
|
-
);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
return result;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
module.exports.getImportMode = getImportMode;
|
|
449
408
|
module.exports.harmonySpecifierTag = harmonySpecifierTag;
|
|
@@ -16,16 +16,17 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
|
16
16
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
17
17
|
/** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
|
|
18
18
|
/** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
|
|
19
|
+
/** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
|
|
19
20
|
|
|
20
21
|
class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
|
|
21
22
|
/**
|
|
22
23
|
* @param {string} request the request string
|
|
23
24
|
* @param {number} sourceOrder source order
|
|
25
|
+
* @param {ImportPhaseType} phase import phase
|
|
24
26
|
* @param {ImportAttributes=} attributes import attributes
|
|
25
|
-
* @param {boolean=} defer is defer phase
|
|
26
27
|
*/
|
|
27
|
-
constructor(request, sourceOrder,
|
|
28
|
-
super(request, sourceOrder,
|
|
28
|
+
constructor(request, sourceOrder, phase, attributes) {
|
|
29
|
+
super(request, sourceOrder, phase, attributes);
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
get type() {
|