webpack 5.100.1 → 5.101.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 +12 -10
- package/bin/webpack.js +7 -7
- package/lib/APIPlugin.js +12 -14
- package/lib/AutomaticPrefetchPlugin.js +2 -2
- package/lib/BannerPlugin.js +4 -4
- package/lib/Cache.js +1 -1
- package/lib/CacheFacade.js +7 -7
- package/lib/CaseSensitiveModulesWarning.js +2 -2
- package/lib/Chunk.js +3 -3
- package/lib/ChunkGraph.js +21 -18
- package/lib/ChunkGroup.js +4 -4
- package/lib/CleanPlugin.js +19 -53
- package/lib/CodeGenerationResults.js +3 -3
- package/lib/CompatibilityPlugin.js +6 -6
- package/lib/Compilation.js +127 -114
- package/lib/Compiler.js +37 -37
- package/lib/ConcatenationScope.js +39 -1
- package/lib/ConstPlugin.js +11 -11
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +12 -11
- package/lib/ContextModuleFactory.js +11 -11
- package/lib/ContextReplacementPlugin.js +5 -5
- package/lib/DefinePlugin.js +24 -22
- package/lib/DelegatedModuleFactoryPlugin.js +1 -1
- package/lib/DllEntryPlugin.js +1 -1
- package/lib/DllReferencePlugin.js +1 -1
- package/lib/DynamicEntryPlugin.js +3 -3
- package/lib/EntryPlugin.js +1 -1
- package/lib/EnvironmentPlugin.js +1 -1
- package/lib/ErrorHelpers.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +2 -2
- package/lib/EvalSourceMapDevToolPlugin.js +5 -5
- package/lib/ExportsInfo.js +9 -9
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +163 -48
- package/lib/ExternalModuleFactoryPlugin.js +2 -2
- package/lib/ExternalsPlugin.js +45 -0
- package/lib/FileSystemInfo.js +64 -61
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +7 -7
- package/lib/FlagDependencyUsagePlugin.js +4 -4
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +27 -27
- package/lib/IgnorePlugin.js +3 -3
- package/lib/IgnoreWarningsPlugin.js +4 -4
- package/lib/InitFragment.js +6 -0
- package/lib/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/JavascriptMetaInfoPlugin.js +1 -1
- package/lib/LibManifestPlugin.js +2 -2
- package/lib/LoaderOptionsPlugin.js +1 -1
- package/lib/LoaderTargetPlugin.js +2 -2
- package/lib/MainTemplate.js +1 -1
- package/lib/Module.js +1 -1
- package/lib/ModuleFilenameHelpers.js +3 -3
- package/lib/ModuleGraph.js +86 -5
- package/lib/ModuleInfoHeaderPlugin.js +3 -3
- package/lib/ModuleParseError.js +5 -3
- package/lib/MultiCompiler.js +29 -24
- package/lib/MultiStats.js +18 -13
- package/lib/MultiWatching.js +1 -1
- package/lib/NoEmitOnErrorsPlugin.js +2 -2
- package/lib/NodeStuffPlugin.js +27 -15
- package/lib/NormalModule.js +28 -24
- package/lib/NormalModuleFactory.js +23 -21
- package/lib/NormalModuleReplacementPlugin.js +3 -3
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +11 -11
- package/lib/ProvidePlugin.js +2 -2
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/ResolverFactory.js +3 -3
- package/lib/RuntimeGlobals.js +20 -0
- package/lib/RuntimePlugin.js +16 -16
- package/lib/RuntimeTemplate.js +42 -44
- package/lib/SizeFormatHelpers.js +1 -1
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -4
- package/lib/SourceMapDevToolPlugin.js +9 -9
- package/lib/Stats.js +2 -2
- package/lib/Template.js +1 -1
- package/lib/TemplatedPathPlugin.js +2 -2
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +1 -1
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +2 -2
- package/lib/Watching.js +12 -12
- package/lib/WebpackIsIncludedPlugin.js +2 -2
- package/lib/WebpackOptionsApply.js +10 -3
- package/lib/asset/AssetGenerator.js +3 -3
- package/lib/asset/AssetModulesPlugin.js +6 -6
- package/lib/async-modules/AsyncModuleHelpers.js +50 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +36 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +3 -3
- package/lib/buildChunkGraph.js +5 -5
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +5 -5
- package/lib/cache/PackFileCacheStrategy.js +20 -20
- package/lib/cache/ResolverCachePlugin.js +4 -4
- package/lib/cli.js +196 -14
- package/lib/config/browserslistTargetHandler.js +6 -6
- package/lib/config/defaults.js +23 -14
- package/lib/config/normalization.js +41 -38
- package/lib/config/target.js +4 -4
- package/lib/container/ContainerEntryModule.js +3 -3
- package/lib/container/ContainerPlugin.js +3 -3
- package/lib/container/ContainerReferencePlugin.js +3 -3
- package/lib/container/FallbackModule.js +1 -1
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/options.js +4 -4
- package/lib/css/CssGenerator.js +5 -3
- package/lib/css/CssLoadingRuntimeModule.js +1 -1
- package/lib/css/CssModulesPlugin.js +25 -22
- package/lib/css/CssParser.js +5 -5
- package/lib/css/walkCssTokens.js +9 -9
- package/lib/debug/ProfilingPlugin.js +5 -5
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +4 -4
- package/lib/dependencies/AMDPlugin.js +3 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +3 -3
- package/lib/dependencies/CommonJsExportRequireDependency.js +2 -2
- package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -10
- package/lib/dependencies/CommonJsImportsParserPlugin.js +21 -19
- package/lib/dependencies/CommonJsPlugin.js +2 -2
- package/lib/dependencies/ContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/CssIcssExportDependency.js +2 -2
- package/lib/dependencies/CssLocalIdentifierDependency.js +2 -2
- package/lib/dependencies/CssUrlDependency.js +4 -4
- package/lib/dependencies/DynamicExports.js +5 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +39 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +2 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +17 -23
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +7 -8
- package/lib/dependencies/HarmonyExportInitFragment.js +1 -1
- package/lib/dependencies/HarmonyExports.js +1 -1
- package/lib/dependencies/HarmonyImportDependency.js +28 -9
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +59 -75
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +3 -4
- package/lib/dependencies/HarmonyModulesPlugin.js +2 -8
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -4
- package/lib/dependencies/ImportMetaPlugin.js +7 -7
- package/lib/dependencies/ImportParserPlugin.js +4 -4
- package/lib/dependencies/JsonExportsDependency.js +1 -1
- package/lib/dependencies/LoaderPlugin.js +4 -4
- package/lib/dependencies/ProvidedDependency.js +2 -2
- package/lib/dependencies/PureExpressionDependency.js +1 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -3
- package/lib/dependencies/SystemPlugin.js +3 -3
- package/lib/dependencies/WorkerPlugin.js +5 -5
- package/lib/dependencies/getFunctionExpression.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +5 -5
- package/lib/esm/ModuleChunkLoadingPlugin.js +2 -2
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +15 -11
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +39 -27
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -32
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +6 -6
- package/lib/hmr/lazyCompilationBackend.js +6 -6
- package/lib/ids/ChunkModuleIdRangePlugin.js +4 -4
- package/lib/ids/DeterministicChunkIdsPlugin.js +5 -4
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +1 -1
- package/lib/ids/IdHelpers.js +9 -9
- package/lib/ids/NamedChunkIdsPlugin.js +5 -5
- package/lib/ids/NamedModuleIdsPlugin.js +2 -2
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -4
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -6
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
- package/lib/javascript/BasicEvaluatedExpression.js +3 -3
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +1 -1
- package/lib/javascript/JavascriptGenerator.js +1 -1
- package/lib/javascript/JavascriptModulesPlugin.js +16 -16
- package/lib/javascript/JavascriptParser.js +90 -83
- package/lib/javascript/JavascriptParserHelpers.js +3 -3
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonGenerator.js +2 -2
- package/lib/json/JsonModulesPlugin.js +2 -2
- package/lib/library/AbstractLibraryPlugin.js +3 -3
- package/lib/library/AmdLibraryPlugin.js +3 -3
- package/lib/library/AssignLibraryPlugin.js +2 -2
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ModuleLibraryPlugin.js +7 -2
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +14 -14
- package/lib/logging/createConsoleLogger.js +4 -4
- package/lib/logging/runtime.js +3 -3
- package/lib/logging/truncateArgs.js +4 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +2 -2
- package/lib/node/NodeEnvironmentPlugin.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +16 -14
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +7 -7
- package/lib/node/ReadFileCompileWasmPlugin.js +7 -7
- package/lib/node/RequireChunkLoadingRuntimeModule.js +6 -4
- package/lib/node/nodeConsole.js +2 -2
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +10 -10
- package/lib/optimize/ConcatenatedModule.js +161 -52
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +14 -12
- package/lib/optimize/LimitChunkCountPlugin.js +5 -5
- package/lib/optimize/MangleExportsPlugin.js +5 -5
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
- package/lib/optimize/MinChunkSizePlugin.js +3 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +45 -38
- package/lib/optimize/RealContentHashPlugin.js +23 -23
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +22 -6
- package/lib/optimize/SplitChunksPlugin.js +20 -20
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +4 -4
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -3
- package/lib/rules/BasicMatcherRulePlugin.js +1 -1
- package/lib/rules/RuleSetCompiler.js +10 -10
- package/lib/rules/UseEffectRulePlugin.js +2 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +15 -15
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +1 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/schemes/DataUriPlugin.js +3 -3
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +40 -36
- package/lib/schemes/VirtualUrlPlugin.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +11 -11
- package/lib/serialization/FileMiddleware.js +17 -17
- package/lib/serialization/ObjectMiddleware.js +8 -8
- package/lib/serialization/Serializer.js +2 -2
- package/lib/serialization/SerializerMiddleware.js +2 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -4
- package/lib/sharing/ProvideSharedPlugin.js +4 -4
- package/lib/sharing/SharePlugin.js +1 -1
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +86 -80
- package/lib/stats/DefaultStatsPresetPlugin.js +15 -15
- package/lib/stats/DefaultStatsPrinterPlugin.js +87 -87
- package/lib/stats/StatsFactory.js +7 -7
- package/lib/stats/StatsPrinter.js +9 -9
- package/lib/url/URLParserPlugin.js +5 -5
- package/lib/util/AsyncQueue.js +4 -4
- package/lib/util/IterableHelpers.js +2 -2
- package/lib/util/LazyBucketSortedSet.js +3 -3
- package/lib/util/SetHelpers.js +2 -2
- package/lib/util/StackedCacheMap.js +1 -1
- package/lib/util/StackedMap.js +1 -1
- package/lib/util/TupleSet.js +1 -1
- package/lib/util/WeakTupleMap.js +1 -1
- package/lib/util/cleverMerge.js +8 -8
- package/lib/util/comparators.js +107 -8
- package/lib/util/compileBooleanMatcher.js +20 -20
- package/lib/util/concatenate.js +3 -3
- package/lib/util/conventions.js +4 -4
- package/lib/util/create-schema-validation.js +1 -1
- package/lib/util/createHash.js +1 -1
- package/lib/util/deprecation.js +4 -4
- package/lib/util/deterministicGrouping.js +7 -7
- package/lib/util/findGraphRoots.js +1 -1
- package/lib/util/fs.js +3 -3
- package/lib/util/identifier.js +14 -14
- package/lib/util/magicComment.js +5 -1
- package/lib/util/memoize.js +1 -1
- package/lib/util/processAsyncTree.js +2 -2
- package/lib/util/propertyName.js +1 -1
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +6 -6
- package/lib/util/semver.js +16 -16
- package/lib/util/serialization.js +5 -5
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +2 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +4 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +13 -9
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
- package/lib/wasm-sync/WebAssemblyGenerator.js +14 -14
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -2
- package/lib/wasm-sync/WebAssemblyParser.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +4 -4
- package/lib/web/JsonpChunkLoadingPlugin.js +2 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -1
- package/lib/webpack.js +17 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +2 -2
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
- package/package.json +13 -13
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +4 -0
- package/types.d.ts +186 -54
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const Template = require("../Template");
|
|
9
|
+
const AwaitDependenciesInitFragment = require("../async-modules/AwaitDependenciesInitFragment");
|
|
9
10
|
const makeSerializable = require("../util/makeSerializable");
|
|
10
11
|
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
11
12
|
const NullDependency = require("./NullDependency");
|
|
@@ -82,8 +83,25 @@ HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate extends
|
|
|
82
83
|
moduleGraph,
|
|
83
84
|
chunkGraph
|
|
84
85
|
} = templateContext;
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
|
|
87
|
+
/** @type {HarmonyAcceptImportDependency[]} */
|
|
88
|
+
const syncDeps = [];
|
|
89
|
+
|
|
90
|
+
/** @type {HarmonyAcceptImportDependency[]} */
|
|
91
|
+
const asyncDeps = [];
|
|
92
|
+
|
|
93
|
+
for (const dependency of dep.dependencies) {
|
|
94
|
+
const connection = moduleGraph.getConnection(dependency);
|
|
95
|
+
|
|
96
|
+
if (connection && moduleGraph.isAsync(connection.module)) {
|
|
97
|
+
asyncDeps.push(dependency);
|
|
98
|
+
} else {
|
|
99
|
+
syncDeps.push(dependency);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let content = syncDeps
|
|
104
|
+
.map((dependency) => {
|
|
87
105
|
const referencedModule = moduleGraph.getModule(dependency);
|
|
88
106
|
return {
|
|
89
107
|
dependency,
|
|
@@ -112,17 +130,33 @@ HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate extends
|
|
|
112
130
|
})
|
|
113
131
|
.join("");
|
|
114
132
|
|
|
133
|
+
const promises = new Map(
|
|
134
|
+
asyncDeps.map((dependency) => [
|
|
135
|
+
dependency.getImportVar(moduleGraph),
|
|
136
|
+
dependency.getModuleExports(templateContext)
|
|
137
|
+
])
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
let optAsync = "";
|
|
141
|
+
if (promises.size !== 0) {
|
|
142
|
+
optAsync = "async ";
|
|
143
|
+
content += new AwaitDependenciesInitFragment(promises).getContent({
|
|
144
|
+
...templateContext,
|
|
145
|
+
type: "javascript"
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
115
149
|
if (dep.hasCallback) {
|
|
116
150
|
if (runtimeTemplate.supportsArrowFunction()) {
|
|
117
151
|
source.insert(
|
|
118
152
|
dep.range[0],
|
|
119
|
-
|
|
153
|
+
`${optAsync}__WEBPACK_OUTDATED_DEPENDENCIES__ => { ${content} return (`
|
|
120
154
|
);
|
|
121
155
|
source.insert(dep.range[1], ")(__WEBPACK_OUTDATED_DEPENDENCIES__); }");
|
|
122
156
|
} else {
|
|
123
157
|
source.insert(
|
|
124
158
|
dep.range[0],
|
|
125
|
-
|
|
159
|
+
`${optAsync}function(__WEBPACK_OUTDATED_DEPENDENCIES__) { ${content} return (`
|
|
126
160
|
);
|
|
127
161
|
source.insert(
|
|
128
162
|
dep.range[1],
|
|
@@ -135,7 +169,7 @@ HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate extends
|
|
|
135
169
|
const arrow = runtimeTemplate.supportsArrowFunction();
|
|
136
170
|
source.insert(
|
|
137
171
|
dep.range[1] - 0.5,
|
|
138
|
-
`, ${arrow ?
|
|
172
|
+
`, ${arrow ? `${optAsync}() =>` : `${optAsync}function()`} { ${content} }`
|
|
139
173
|
);
|
|
140
174
|
}
|
|
141
175
|
};
|
|
@@ -31,13 +31,13 @@ module.exports = class HarmonyDetectionParserPlugin {
|
|
|
31
31
|
* @returns {void}
|
|
32
32
|
*/
|
|
33
33
|
apply(parser) {
|
|
34
|
-
parser.hooks.program.tap(PLUGIN_NAME, ast => {
|
|
34
|
+
parser.hooks.program.tap(PLUGIN_NAME, (ast) => {
|
|
35
35
|
const isStrictHarmony =
|
|
36
36
|
parser.state.module.type === JAVASCRIPT_MODULE_TYPE_ESM;
|
|
37
37
|
const isHarmony =
|
|
38
38
|
isStrictHarmony ||
|
|
39
39
|
ast.body.some(
|
|
40
|
-
statement =>
|
|
40
|
+
(statement) =>
|
|
41
41
|
statement.type === "ImportDeclaration" ||
|
|
42
42
|
statement.type === "ExportDefaultDeclaration" ||
|
|
43
43
|
statement.type === "ExportNamedDeclaration" ||
|
|
@@ -33,9 +33,8 @@ const PLUGIN_NAME = "HarmonyExportDependencyParserPlugin";
|
|
|
33
33
|
module.exports = class HarmonyExportDependencyParserPlugin {
|
|
34
34
|
/**
|
|
35
35
|
* @param {import("../../declarations/WebpackOptions").JavascriptParserOptions} options options
|
|
36
|
-
* @param {boolean=} deferImport defer import enabled
|
|
37
36
|
*/
|
|
38
|
-
constructor(options
|
|
37
|
+
constructor(options) {
|
|
39
38
|
this.exportPresenceMode =
|
|
40
39
|
options.reexportExportsPresence !== undefined
|
|
41
40
|
? ExportPresenceModes.fromUserOption(options.reexportExportsPresence)
|
|
@@ -44,7 +43,7 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
44
43
|
: options.strictExportPresence
|
|
45
44
|
? ExportPresenceModes.ERROR
|
|
46
45
|
: ExportPresenceModes.AUTO;
|
|
47
|
-
this.deferImport = deferImport;
|
|
46
|
+
this.deferImport = options.deferImport;
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
/**
|
|
@@ -53,7 +52,7 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
53
52
|
*/
|
|
54
53
|
apply(parser) {
|
|
55
54
|
const { exportPresenceMode } = this;
|
|
56
|
-
parser.hooks.export.tap(PLUGIN_NAME, statement => {
|
|
55
|
+
parser.hooks.export.tap(PLUGIN_NAME, (statement) => {
|
|
57
56
|
const dep = new HarmonyExportHeaderDependency(
|
|
58
57
|
/** @type {Range | false} */ (
|
|
59
58
|
statement.declaration && statement.declaration.range
|
|
@@ -77,18 +76,16 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
77
76
|
clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
|
78
77
|
clearDep.loc.index = -1;
|
|
79
78
|
parser.state.module.addPresentationalDependency(clearDep);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
statement
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
error.loc = statement.loc || undefined;
|
|
91
|
-
parser.state.current.addError(error);
|
|
79
|
+
let defer = false;
|
|
80
|
+
if (this.deferImport) {
|
|
81
|
+
({ defer } = getImportMode(parser, statement));
|
|
82
|
+
if (defer) {
|
|
83
|
+
const error = new WebpackError(
|
|
84
|
+
"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 };"
|
|
85
|
+
);
|
|
86
|
+
error.loc = statement.loc || undefined;
|
|
87
|
+
parser.state.current.addError(error);
|
|
88
|
+
}
|
|
92
89
|
}
|
|
93
90
|
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
|
94
91
|
/** @type {string} */ (source),
|
|
@@ -112,7 +109,7 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
112
109
|
exprRange,
|
|
113
110
|
statementRange,
|
|
114
111
|
comments
|
|
115
|
-
.map(c => {
|
|
112
|
+
.map((c) => {
|
|
116
113
|
switch (c.type) {
|
|
117
114
|
case "Block":
|
|
118
115
|
return `/*${c.value}*/`;
|
|
@@ -207,12 +204,9 @@ module.exports = class HarmonyExportDependencyParserPlugin {
|
|
|
207
204
|
parser.state.harmonyStarExports || new HarmonyStarExportsList();
|
|
208
205
|
}
|
|
209
206
|
const attributes = getImportAttributes(statement);
|
|
210
|
-
const
|
|
211
|
-
parser,
|
|
212
|
-
|
|
213
|
-
this.deferImport,
|
|
214
|
-
false
|
|
215
|
-
);
|
|
207
|
+
const defer = this.deferImport
|
|
208
|
+
? getImportMode(parser, statement).defer
|
|
209
|
+
: false;
|
|
216
210
|
const dep = new HarmonyExportImportedSpecifierDependency(
|
|
217
211
|
/** @type {string} */
|
|
218
212
|
(source),
|
|
@@ -334,7 +334,7 @@ const getMode = (moduleGraph, dep, runtimeKey) => {
|
|
|
334
334
|
|
|
335
335
|
mode.items = Array.from(
|
|
336
336
|
exports,
|
|
337
|
-
exportName =>
|
|
337
|
+
(exportName) =>
|
|
338
338
|
new NormalReexportItem(
|
|
339
339
|
exportName,
|
|
340
340
|
[exportName],
|
|
@@ -378,7 +378,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
378
378
|
* @param {ExportPresenceMode} exportPresenceMode mode of checking export names
|
|
379
379
|
* @param {HarmonyStarExportsList | null} allStarExports all star exports in the module
|
|
380
380
|
* @param {ImportAttributes=} attributes import attributes
|
|
381
|
-
* @param {boolean=}
|
|
381
|
+
* @param {boolean=} defer is defer phase
|
|
382
382
|
*/
|
|
383
383
|
constructor(
|
|
384
384
|
request,
|
|
@@ -390,9 +390,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
390
390
|
exportPresenceMode,
|
|
391
391
|
allStarExports,
|
|
392
392
|
attributes,
|
|
393
|
-
|
|
393
|
+
defer
|
|
394
394
|
) {
|
|
395
|
-
super(request, sourceOrder, attributes);
|
|
395
|
+
super(request, sourceOrder, attributes, defer);
|
|
396
396
|
|
|
397
397
|
this.ids = ids;
|
|
398
398
|
this.name = name;
|
|
@@ -400,7 +400,6 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
400
400
|
this.otherStarExports = otherStarExports;
|
|
401
401
|
this.exportPresenceMode = exportPresenceMode;
|
|
402
402
|
this.allStarExports = allStarExports;
|
|
403
|
-
this.defer = deferEvaluation;
|
|
404
403
|
}
|
|
405
404
|
|
|
406
405
|
/**
|
|
@@ -722,7 +721,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
722
721
|
return {
|
|
723
722
|
exports: Array.from(
|
|
724
723
|
/** @type {NormalReexportItem[]} */ (mode.items),
|
|
725
|
-
item => ({
|
|
724
|
+
(item) => ({
|
|
726
725
|
name: item.name,
|
|
727
726
|
from,
|
|
728
727
|
export: item.ids,
|
|
@@ -930,7 +929,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
930
929
|
}' contains conflicting star exports for the ${
|
|
931
930
|
exports.length > 1 ? "names" : "name"
|
|
932
931
|
} ${exports
|
|
933
|
-
.map(e => `'${e}'`)
|
|
932
|
+
.map((e) => `'${e}'`)
|
|
934
933
|
.join(", ")} with the previous requested module '${request}'`
|
|
935
934
|
)
|
|
936
935
|
);
|
|
@@ -1190,7 +1189,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1190
1189
|
const runtimeCondition = dep.weak
|
|
1191
1190
|
? false
|
|
1192
1191
|
: connection
|
|
1193
|
-
? filterRuntime(runtime, r => connection.isTargetActive(r))
|
|
1192
|
+
? filterRuntime(runtime, (r) => connection.isTargetActive(r))
|
|
1194
1193
|
: true;
|
|
1195
1194
|
initFragments.push(
|
|
1196
1195
|
new ConditionalInitFragment(
|
|
@@ -17,7 +17,7 @@ const { propertyName } = require("../util/propertyName");
|
|
|
17
17
|
* @param {Iterable<string>} iterable iterable strings
|
|
18
18
|
* @returns {string} result
|
|
19
19
|
*/
|
|
20
|
-
const joinIterableWithComma = iterable => {
|
|
20
|
+
const joinIterableWithComma = (iterable) => {
|
|
21
21
|
// This is more performant than Array.from().join(", ")
|
|
22
22
|
// as it doesn't create an array
|
|
23
23
|
let str = "";
|
|
@@ -40,7 +40,7 @@ module.exports.enable = (parserState, isStrictHarmony) => {
|
|
|
40
40
|
* @param {ParserState} parserState parser state
|
|
41
41
|
* @returns {boolean} true, when enabled
|
|
42
42
|
*/
|
|
43
|
-
module.exports.isEnabled = parserState => {
|
|
43
|
+
module.exports.isEnabled = (parserState) => {
|
|
44
44
|
const value = parserStateExportsState.get(parserState);
|
|
45
45
|
return value === true;
|
|
46
46
|
};
|
|
@@ -64,11 +64,13 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
64
64
|
* @param {string} request request string
|
|
65
65
|
* @param {number} sourceOrder source order
|
|
66
66
|
* @param {ImportAttributes=} attributes import attributes
|
|
67
|
+
* @param {boolean=} defer import attributes
|
|
67
68
|
*/
|
|
68
|
-
constructor(request, sourceOrder, attributes) {
|
|
69
|
+
constructor(request, sourceOrder, attributes, defer) {
|
|
69
70
|
super(request);
|
|
70
71
|
this.sourceOrder = sourceOrder;
|
|
71
72
|
this.assertions = attributes;
|
|
73
|
+
this.defer = defer;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
get category() {
|
|
@@ -112,6 +114,24 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
112
114
|
return importVar;
|
|
113
115
|
}
|
|
114
116
|
|
|
117
|
+
/**
|
|
118
|
+
* @param {DependencyTemplateContext} context the template context
|
|
119
|
+
* @returns {string} the expression
|
|
120
|
+
*/
|
|
121
|
+
getModuleExports({
|
|
122
|
+
runtimeTemplate,
|
|
123
|
+
moduleGraph,
|
|
124
|
+
chunkGraph,
|
|
125
|
+
runtimeRequirements
|
|
126
|
+
}) {
|
|
127
|
+
return runtimeTemplate.moduleExports({
|
|
128
|
+
module: moduleGraph.getModule(this),
|
|
129
|
+
chunkGraph,
|
|
130
|
+
request: this.request,
|
|
131
|
+
runtimeRequirements
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
115
135
|
/**
|
|
116
136
|
* @param {boolean} update create new variables or update existing one
|
|
117
137
|
* @param {DependencyTemplateContext} templateContext the template context
|
|
@@ -183,7 +203,7 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
183
203
|
new HarmonyLinkingError(
|
|
184
204
|
`export ${ids
|
|
185
205
|
.slice(0, pos)
|
|
186
|
-
.map(id => `'${id}'`)
|
|
206
|
+
.map((id) => `'${id}'`)
|
|
187
207
|
.join(".")} ${additionalMessage} was not found in '${
|
|
188
208
|
this.userRequest
|
|
189
209
|
}'${moreInfo}`
|
|
@@ -199,7 +219,7 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
199
219
|
return [
|
|
200
220
|
new HarmonyLinkingError(
|
|
201
221
|
`export ${ids
|
|
202
|
-
.map(id => `'${id}'`)
|
|
222
|
+
.map((id) => `'${id}'`)
|
|
203
223
|
.join(".")} ${additionalMessage} was not found in '${
|
|
204
224
|
this.userRequest
|
|
205
225
|
}'`
|
|
@@ -215,7 +235,7 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
215
235
|
return [
|
|
216
236
|
new HarmonyLinkingError(
|
|
217
237
|
`Can't import the named export ${ids
|
|
218
|
-
.map(id => `'${id}'`)
|
|
238
|
+
.map((id) => `'${id}'`)
|
|
219
239
|
.join(
|
|
220
240
|
"."
|
|
221
241
|
)} ${additionalMessage} from default-exporting module (only default export is available)`
|
|
@@ -236,7 +256,7 @@ class HarmonyImportDependency extends ModuleDependency {
|
|
|
236
256
|
return [
|
|
237
257
|
new HarmonyLinkingError(
|
|
238
258
|
`Should not import the named export ${ids
|
|
239
|
-
.map(id => `'${id}'`)
|
|
259
|
+
.map((id) => `'${id}'`)
|
|
240
260
|
.join(
|
|
241
261
|
"."
|
|
242
262
|
)} ${additionalMessage} from default-exporting module (only default export is available soon)`
|
|
@@ -310,7 +330,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
|
|
|
310
330
|
const runtimeCondition = dep.weak
|
|
311
331
|
? false
|
|
312
332
|
: connection
|
|
313
|
-
? filterRuntime(runtime, r => connection.isTargetActive(r))
|
|
333
|
+
? filterRuntime(runtime, (r) => connection.isTargetActive(r))
|
|
314
334
|
: true;
|
|
315
335
|
|
|
316
336
|
if (module && referencedModule) {
|
|
@@ -348,10 +368,9 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
|
|
|
348
368
|
runtimeCondition
|
|
349
369
|
)
|
|
350
370
|
);
|
|
371
|
+
const importVar = dep.getImportVar(templateContext.moduleGraph);
|
|
351
372
|
templateContext.initFragments.push(
|
|
352
|
-
new AwaitDependenciesInitFragment(
|
|
353
|
-
new Set([dep.getImportVar(templateContext.moduleGraph)])
|
|
354
|
-
)
|
|
373
|
+
new AwaitDependenciesInitFragment(new Map([[importVar, importVar]]))
|
|
355
374
|
);
|
|
356
375
|
templateContext.initFragments.push(
|
|
357
376
|
new ConditionalInitFragment(
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
const CommentCompilationWarning = require("../CommentCompilationWarning");
|
|
9
9
|
const HotModuleReplacementPlugin = require("../HotModuleReplacementPlugin");
|
|
10
|
-
const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
|
|
11
10
|
const WebpackError = require("../WebpackError");
|
|
12
11
|
const { getImportAttributes } = require("../javascript/JavascriptParser");
|
|
13
12
|
const InnerGraph = require("../optimize/InnerGraph");
|
|
@@ -60,9 +59,8 @@ const PLUGIN_NAME = "HarmonyImportDependencyParserPlugin";
|
|
|
60
59
|
module.exports = class HarmonyImportDependencyParserPlugin {
|
|
61
60
|
/**
|
|
62
61
|
* @param {JavascriptParserOptions} options options
|
|
63
|
-
* @param {boolean | undefined} deferImport defer import enabled
|
|
64
62
|
*/
|
|
65
|
-
constructor(options
|
|
63
|
+
constructor(options) {
|
|
66
64
|
this.exportPresenceMode =
|
|
67
65
|
options.importExportsPresence !== undefined
|
|
68
66
|
? ExportPresenceModes.fromUserOption(options.importExportsPresence)
|
|
@@ -72,7 +70,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
72
70
|
? ExportPresenceModes.ERROR
|
|
73
71
|
: ExportPresenceModes.AUTO;
|
|
74
72
|
this.strictThisContextOnImports = options.strictThisContextOnImports;
|
|
75
|
-
this.deferImport = deferImport;
|
|
73
|
+
this.deferImport = options.deferImport;
|
|
76
74
|
}
|
|
77
75
|
|
|
78
76
|
/**
|
|
@@ -103,7 +101,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
103
101
|
return node;
|
|
104
102
|
}
|
|
105
103
|
|
|
106
|
-
parser.hooks.isPure.for("Identifier").tap(PLUGIN_NAME, expression => {
|
|
104
|
+
parser.hooks.isPure.for("Identifier").tap(PLUGIN_NAME, (expression) => {
|
|
107
105
|
const expr = /** @type {Identifier} */ (expression);
|
|
108
106
|
if (
|
|
109
107
|
parser.isVariableDefined(expr.name) ||
|
|
@@ -125,22 +123,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
125
123
|
parser.state.module.addPresentationalDependency(clearDep);
|
|
126
124
|
parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
|
|
127
125
|
const attributes = getImportAttributes(statement);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
statement
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
error.loc = statement.loc || undefined;
|
|
143
|
-
parser.state.current.addError(error);
|
|
126
|
+
let defer = false;
|
|
127
|
+
if (this.deferImport) {
|
|
128
|
+
({ defer } = getImportMode(parser, statement));
|
|
129
|
+
if (
|
|
130
|
+
defer &&
|
|
131
|
+
(statement.specifiers.length !== 1 ||
|
|
132
|
+
statement.specifiers[0].type !== "ImportNamespaceSpecifier")
|
|
133
|
+
) {
|
|
134
|
+
const error = new WebpackError(
|
|
135
|
+
"Deferred import can only be used with `import * as namespace from '...'` syntax."
|
|
136
|
+
);
|
|
137
|
+
error.loc = statement.loc || undefined;
|
|
138
|
+
parser.state.current.addError(error);
|
|
139
|
+
}
|
|
144
140
|
}
|
|
145
141
|
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
|
146
142
|
/** @type {string} */ (source),
|
|
@@ -156,12 +152,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
156
152
|
PLUGIN_NAME,
|
|
157
153
|
(statement, source, id, name) => {
|
|
158
154
|
const ids = id === null ? [] : [id];
|
|
159
|
-
const
|
|
160
|
-
parser,
|
|
161
|
-
|
|
162
|
-
this.deferImport,
|
|
163
|
-
false
|
|
164
|
-
);
|
|
155
|
+
const defer = this.deferImport
|
|
156
|
+
? getImportMode(parser, statement).defer
|
|
157
|
+
: false;
|
|
165
158
|
parser.tagVariable(name, harmonySpecifierTag, {
|
|
166
159
|
name,
|
|
167
160
|
source,
|
|
@@ -173,7 +166,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
173
166
|
return true;
|
|
174
167
|
}
|
|
175
168
|
);
|
|
176
|
-
parser.hooks.binaryExpression.tap(PLUGIN_NAME, expression => {
|
|
169
|
+
parser.hooks.binaryExpression.tap(PLUGIN_NAME, (expression) => {
|
|
177
170
|
if (expression.operator !== "in") return;
|
|
178
171
|
|
|
179
172
|
const leftPartEvaluated = parser.evaluateExpression(expression.left);
|
|
@@ -215,34 +208,38 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
215
208
|
);
|
|
216
209
|
dep.loc = /** @type {DependencyLocation} */ (expression.loc);
|
|
217
210
|
parser.state.module.addDependency(dep);
|
|
218
|
-
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
|
219
|
-
return true;
|
|
220
|
-
});
|
|
221
|
-
parser.hooks.expression.for(harmonySpecifierTag).tap(PLUGIN_NAME, expr => {
|
|
222
|
-
const settings = /** @type {HarmonySettings} */ (parser.currentTagData);
|
|
223
|
-
const dep = new HarmonyImportSpecifierDependency(
|
|
224
|
-
settings.source,
|
|
225
|
-
settings.sourceOrder,
|
|
226
|
-
settings.ids,
|
|
227
|
-
settings.name,
|
|
228
|
-
/** @type {Range} */
|
|
229
|
-
(expr.range),
|
|
230
|
-
exportPresenceMode,
|
|
231
|
-
settings.attributes,
|
|
232
|
-
[],
|
|
233
|
-
settings.defer
|
|
234
|
-
);
|
|
235
|
-
dep.referencedPropertiesInDestructuring =
|
|
236
|
-
parser.destructuringAssignmentPropertiesFor(expr);
|
|
237
|
-
dep.shorthand = parser.scope.inShorthand;
|
|
238
|
-
dep.directImport = true;
|
|
239
|
-
dep.asiSafe = !parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]);
|
|
240
|
-
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
241
|
-
dep.call = parser.scope.inTaggedTemplateTag;
|
|
242
|
-
parser.state.module.addDependency(dep);
|
|
243
|
-
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
|
211
|
+
InnerGraph.onUsage(parser.state, (e) => (dep.usedByExports = e));
|
|
244
212
|
return true;
|
|
245
213
|
});
|
|
214
|
+
parser.hooks.expression
|
|
215
|
+
.for(harmonySpecifierTag)
|
|
216
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
217
|
+
const settings = /** @type {HarmonySettings} */ (parser.currentTagData);
|
|
218
|
+
const dep = new HarmonyImportSpecifierDependency(
|
|
219
|
+
settings.source,
|
|
220
|
+
settings.sourceOrder,
|
|
221
|
+
settings.ids,
|
|
222
|
+
settings.name,
|
|
223
|
+
/** @type {Range} */
|
|
224
|
+
(expr.range),
|
|
225
|
+
exportPresenceMode,
|
|
226
|
+
settings.attributes,
|
|
227
|
+
[],
|
|
228
|
+
settings.defer
|
|
229
|
+
);
|
|
230
|
+
dep.referencedPropertiesInDestructuring =
|
|
231
|
+
parser.destructuringAssignmentPropertiesFor(expr);
|
|
232
|
+
dep.shorthand = parser.scope.inShorthand;
|
|
233
|
+
dep.directImport = true;
|
|
234
|
+
dep.asiSafe = !parser.isAsiPosition(
|
|
235
|
+
/** @type {Range} */ (expr.range)[0]
|
|
236
|
+
);
|
|
237
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
238
|
+
dep.call = parser.scope.inTaggedTemplateTag;
|
|
239
|
+
parser.state.module.addDependency(dep);
|
|
240
|
+
InnerGraph.onUsage(parser.state, (e) => (dep.usedByExports = e));
|
|
241
|
+
return true;
|
|
242
|
+
});
|
|
246
243
|
parser.hooks.expressionMemberChain
|
|
247
244
|
.for(harmonySpecifierTag)
|
|
248
245
|
.tap(
|
|
@@ -288,7 +285,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
288
285
|
);
|
|
289
286
|
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
290
287
|
parser.state.module.addDependency(dep);
|
|
291
|
-
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
|
288
|
+
InnerGraph.onUsage(parser.state, (e) => (dep.usedByExports = e));
|
|
292
289
|
return true;
|
|
293
290
|
}
|
|
294
291
|
);
|
|
@@ -342,7 +339,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
342
339
|
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
343
340
|
parser.state.module.addDependency(dep);
|
|
344
341
|
if (args) parser.walkExpressions(args);
|
|
345
|
-
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
|
342
|
+
InnerGraph.onUsage(parser.state, (e) => (dep.usedByExports = e));
|
|
346
343
|
return true;
|
|
347
344
|
}
|
|
348
345
|
);
|
|
@@ -353,7 +350,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
353
350
|
// This is not a harmony module, skip it
|
|
354
351
|
return;
|
|
355
352
|
}
|
|
356
|
-
const dependencies = requests.map(request => {
|
|
353
|
+
const dependencies = requests.map((request) => {
|
|
357
354
|
const dep = new HarmonyAcceptImportDependency(request);
|
|
358
355
|
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
359
356
|
parser.state.module.addDependency(dep);
|
|
@@ -375,7 +372,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
375
372
|
// This is not a harmony module, skip it
|
|
376
373
|
return;
|
|
377
374
|
}
|
|
378
|
-
const dependencies = requests.map(request => {
|
|
375
|
+
const dependencies = requests.map((request) => {
|
|
379
376
|
const dep = new HarmonyAcceptImportDependency(request);
|
|
380
377
|
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
381
378
|
parser.state.module.addDependency(dep);
|
|
@@ -398,23 +395,10 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
|
398
395
|
/**
|
|
399
396
|
* @param {JavascriptParser} parser parser
|
|
400
397
|
* @param {ExportNamedDeclaration | ExportAllDeclaration | ImportDeclaration} node node
|
|
401
|
-
* @
|
|
402
|
-
* @param {boolean} reportSyntaxError report syntax error
|
|
403
|
-
* @returns {{defer: boolean}} import attributes
|
|
398
|
+
* @returns {{ defer: boolean }} import attributes
|
|
404
399
|
*/
|
|
405
|
-
function getImportMode(parser, node
|
|
406
|
-
const result = { defer:
|
|
407
|
-
if ("phase" in node && node.phase === "defer") {
|
|
408
|
-
if (deferImportEnabled) {
|
|
409
|
-
result.defer = true;
|
|
410
|
-
} else if (reportSyntaxError) {
|
|
411
|
-
const error = new WebpackError(
|
|
412
|
-
"Deferred import syntax (`import defer * as namespace from '...'`) cannot be used unless experimental.deferImport is true."
|
|
413
|
-
);
|
|
414
|
-
error.loc = node.loc || undefined;
|
|
415
|
-
parser.state.current.addError(error);
|
|
416
|
-
}
|
|
417
|
-
}
|
|
400
|
+
function getImportMode(parser, node) {
|
|
401
|
+
const result = { defer: "phase" in node && node.phase === "defer" };
|
|
418
402
|
if (!node.range) {
|
|
419
403
|
return result;
|
|
420
404
|
}
|
|
@@ -437,7 +421,7 @@ function getImportMode(parser, node, deferImportEnabled, reportSyntaxError) {
|
|
|
437
421
|
result.defer = options.webpackDefer;
|
|
438
422
|
} else if (node.loc) {
|
|
439
423
|
parser.state.module.addWarning(
|
|
440
|
-
new
|
|
424
|
+
new CommentCompilationWarning(
|
|
441
425
|
"webpackDefer magic comment expected a boolean value.",
|
|
442
426
|
node.loc
|
|
443
427
|
)
|
|
@@ -26,11 +26,10 @@ class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
|
|
|
26
26
|
* @param {string} request the request string
|
|
27
27
|
* @param {number} sourceOrder source order
|
|
28
28
|
* @param {ImportAttributes=} attributes import attributes
|
|
29
|
-
* @param {boolean=}
|
|
29
|
+
* @param {boolean=} defer is defer phase
|
|
30
30
|
*/
|
|
31
|
-
constructor(request, sourceOrder, attributes,
|
|
32
|
-
super(request, sourceOrder, attributes);
|
|
33
|
-
this.defer = deferred;
|
|
31
|
+
constructor(request, sourceOrder, attributes, defer) {
|
|
32
|
+
super(request, sourceOrder, attributes, defer);
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
get type() {
|
|
@@ -42,7 +41,7 @@ class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
|
|
|
42
41
|
* @returns {null | false | GetConditionFn} function to determine if the connection is active
|
|
43
42
|
*/
|
|
44
43
|
getCondition(moduleGraph) {
|
|
45
|
-
return connection => {
|
|
44
|
+
return (connection) => {
|
|
46
45
|
const refModule = connection.resolvedModule;
|
|
47
46
|
if (!refModule) return true;
|
|
48
47
|
return refModule.getSideEffectsConnectionState(moduleGraph);
|
|
@@ -51,7 +51,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
|
51
51
|
* @param {ExportPresenceMode} exportPresenceMode export presence mode
|
|
52
52
|
* @param {ImportAttributes | undefined} attributes import attributes
|
|
53
53
|
* @param {Range[] | undefined} idRanges ranges for members of ids; the two arrays are right-aligned
|
|
54
|
-
* @param {boolean=}
|
|
54
|
+
* @param {boolean=} defer is defer phase
|
|
55
55
|
*/
|
|
56
56
|
constructor(
|
|
57
57
|
request,
|
|
@@ -62,9 +62,9 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
|
62
62
|
exportPresenceMode,
|
|
63
63
|
attributes,
|
|
64
64
|
idRanges, // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
|
|
65
|
-
|
|
65
|
+
defer
|
|
66
66
|
) {
|
|
67
|
-
super(request, sourceOrder, attributes);
|
|
67
|
+
super(request, sourceOrder, attributes, defer);
|
|
68
68
|
this.ids = ids;
|
|
69
69
|
this.name = name;
|
|
70
70
|
this.range = range;
|
|
@@ -79,7 +79,6 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
|
79
79
|
this.usedByExports = undefined;
|
|
80
80
|
/** @type {Set<DestructuringAssignmentProperty> | undefined} */
|
|
81
81
|
this.referencedPropertiesInDestructuring = undefined;
|
|
82
|
-
this.defer = deferred;
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
// TODO webpack 6 remove
|
|
@@ -135,14 +135,8 @@ class HarmonyModulesPlugin {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
new HarmonyDetectionParserPlugin(this.options).apply(parser);
|
|
138
|
-
new HarmonyImportDependencyParserPlugin(
|
|
139
|
-
|
|
140
|
-
this.options.deferImport
|
|
141
|
-
).apply(parser);
|
|
142
|
-
new HarmonyExportDependencyParserPlugin(
|
|
143
|
-
parserOptions,
|
|
144
|
-
this.options.deferImport
|
|
145
|
-
).apply(parser);
|
|
138
|
+
new HarmonyImportDependencyParserPlugin(parserOptions).apply(parser);
|
|
139
|
+
new HarmonyExportDependencyParserPlugin(parserOptions).apply(parser);
|
|
146
140
|
new HarmonyTopLevelThisParserPlugin().apply(parser);
|
|
147
141
|
};
|
|
148
142
|
|
|
@@ -20,7 +20,7 @@ class HarmonyTopLevelThisParserPlugin {
|
|
|
20
20
|
* @returns {void}
|
|
21
21
|
*/
|
|
22
22
|
apply(parser) {
|
|
23
|
-
parser.hooks.expression.for("this").tap(PLUGIN_NAME, node => {
|
|
23
|
+
parser.hooks.expression.for("this").tap(PLUGIN_NAME, (node) => {
|
|
24
24
|
if (!parser.scope.topLevelScope) return;
|
|
25
25
|
if (HarmonyExports.isEnabled(parser.state)) {
|
|
26
26
|
const dep = new ConstDependency(
|