webpack 5.85.0 → 5.88.1
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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +5 -2
- package/lib/APIPlugin.js +150 -99
- package/lib/AsyncDependenciesBlock.js +3 -3
- package/lib/BannerPlugin.js +2 -1
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +35 -17
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +20 -9
- package/lib/CompatibilityPlugin.js +50 -30
- package/lib/Compilation.js +2 -1
- package/lib/Compiler.js +10 -9
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +73 -32
- package/lib/ContextModule.js +8 -3
- package/lib/ContextModuleFactory.js +1 -0
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/DelegatedModule.js +15 -3
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +1 -1
- package/lib/Dependency.js +11 -5
- package/lib/DependencyTemplates.js +1 -1
- package/lib/DllEntryPlugin.js +11 -1
- package/lib/DllModule.js +6 -0
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +1 -0
- package/lib/EvalSourceMapDevToolPlugin.js +6 -1
- package/lib/ExportsInfo.js +22 -4
- package/lib/ExportsInfoApiPlugin.js +14 -5
- package/lib/ExternalModule.js +20 -8
- package/lib/FileSystemInfo.js +52 -24
- package/lib/FlagAllModulesAsUsedPlugin.js +6 -1
- package/lib/FlagDependencyUsagePlugin.js +3 -1
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -0
- package/lib/Generator.js +7 -0
- package/lib/HotModuleReplacementPlugin.js +8 -0
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +11 -6
- package/lib/LibManifestPlugin.js +20 -4
- package/lib/Module.js +14 -3
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleGraph.js +31 -24
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +7 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +32 -6
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +13 -4
- package/lib/RawModule.js +3 -1
- package/lib/RequireJsStuffPlugin.js +7 -0
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +3 -3
- package/lib/RuntimePlugin.js +6 -3
- package/lib/RuntimeTemplate.js +22 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +7 -2
- package/lib/UseStrictPlugin.js +10 -3
- package/lib/Watching.js +62 -25
- package/lib/WebpackError.js +6 -5
- package/lib/WebpackIsIncludedPlugin.js +6 -4
- package/lib/WebpackOptionsApply.js +4 -2
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +2 -1
- package/lib/asset/AssetParser.js +11 -6
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/buildChunkGraph.js +37 -21
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/PackFileCacheStrategy.js +53 -22
- package/lib/config/browserslistTargetHandler.js +7 -7
- package/lib/config/defaults.js +43 -26
- package/lib/container/RemoteRuntimeModule.js +1 -1
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +1 -1
- package/lib/css/CssLoadingRuntimeModule.js +43 -19
- package/lib/css/CssModulesPlugin.js +42 -14
- package/lib/css/CssParser.js +22 -0
- package/lib/dependencies/AMDDefineDependency.js +34 -4
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CommonJsExportsParserPlugin.js +14 -4
- package/lib/dependencies/CommonJsImportsParserPlugin.js +169 -59
- package/lib/dependencies/CommonJsPlugin.js +13 -8
- package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +7 -2
- package/lib/dependencies/CssImportDependency.js +1 -1
- package/lib/dependencies/CssLocalIdentifierDependency.js +5 -0
- package/lib/dependencies/CssUrlDependency.js +3 -3
- package/lib/dependencies/DllEntryDependency.js +5 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +14 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +2 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +4 -4
- package/lib/dependencies/HarmonyExports.js +9 -5
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +40 -27
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +1 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +31 -21
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportDependency.js +5 -3
- package/lib/dependencies/ImportEagerDependency.js +5 -3
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +19 -0
- package/lib/dependencies/ImportMetaPlugin.js +31 -15
- package/lib/dependencies/ImportParserPlugin.js +62 -25
- package/lib/dependencies/ImportWeakDependency.js +5 -3
- package/lib/dependencies/JsonExportsDependency.js +1 -1
- package/lib/dependencies/ModuleDependency.js +1 -1
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ProvidedDependency.js +4 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- package/lib/dependencies/RequireHeaderDependency.js +4 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +26 -5
- package/lib/dependencies/RequireResolveHeaderDependency.js +9 -0
- package/lib/dependencies/SystemPlugin.js +17 -5
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +2 -2
- package/lib/dependencies/URLPlugin.js +9 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +1 -1
- package/lib/dependencies/WorkerPlugin.js +59 -22
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +1 -0
- package/lib/javascript/BasicEvaluatedExpression.js +28 -19
- package/lib/javascript/CommonJsChunkFormatPlugin.js +6 -2
- package/lib/javascript/JavascriptModulesPlugin.js +25 -5
- package/lib/javascript/JavascriptParser.js +157 -85
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/json/JsonData.js +2 -2
- package/lib/json/JsonParser.js +25 -12
- package/lib/library/AmdLibraryPlugin.js +2 -2
- package/lib/library/AssignLibraryPlugin.js +13 -1
- package/lib/library/EnableLibraryPlugin.js +4 -0
- package/lib/library/SystemLibraryPlugin.js +1 -1
- package/lib/library/UmdLibraryPlugin.js +20 -2
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -6
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +2 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +10 -6
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +2 -1
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +80 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +10 -1
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +8 -5
- package/lib/runtime/AutoPublicPathRuntimeModule.js +4 -2
- package/lib/runtime/BaseUriRuntimeModule.js +3 -3
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +15 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -10
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +4 -2
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +64 -48
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +4 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -2
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +143 -1
- package/lib/serialization/ErrorObjectSerializer.js +3 -0
- package/lib/serialization/ObjectMiddleware.js +9 -3
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +14 -5
- package/lib/sharing/ProvideSharedDependency.js +11 -0
- package/lib/sharing/ProvideSharedModule.js +4 -0
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +12 -5
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +32 -5
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +1 -1
- package/lib/util/URLAbsoluteSpecifier.js +1 -1
- package/lib/util/createHash.js +30 -9
- package/lib/util/deprecation.js +10 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/memoize.js +3 -3
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +84 -21
- package/lib/util/semver.js +1 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +6 -2
- package/lib/wasm-async/AsyncWebAssemblyParser.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +14 -7
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -1
- package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
- package/lib/wasm-sync/WebAssemblyParser.js +6 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +14 -4
- package/lib/webpack.js +11 -2
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -16
- package/module.d.ts +1 -0
- package/package.json +5 -4
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +52 -6
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/types.d.ts +606 -292
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
8
9
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
9
10
|
|
10
11
|
/** @type {WeakMap<ParserState, boolean>} */
|
@@ -18,8 +19,9 @@ exports.bailout = parserState => {
|
|
18
19
|
const value = parserStateExportsState.get(parserState);
|
19
20
|
parserStateExportsState.set(parserState, false);
|
20
21
|
if (value === true) {
|
21
|
-
parserState.module.buildMeta
|
22
|
-
|
22
|
+
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
|
23
|
+
buildMeta.exportsType = undefined;
|
24
|
+
buildMeta.defaultObject = false;
|
23
25
|
}
|
24
26
|
};
|
25
27
|
|
@@ -32,8 +34,9 @@ exports.enable = parserState => {
|
|
32
34
|
if (value === false) return;
|
33
35
|
parserStateExportsState.set(parserState, true);
|
34
36
|
if (value !== true) {
|
35
|
-
parserState.module.buildMeta
|
36
|
-
|
37
|
+
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
|
38
|
+
buildMeta.exportsType = "default";
|
39
|
+
buildMeta.defaultObject = "redirect";
|
37
40
|
}
|
38
41
|
};
|
39
42
|
|
@@ -44,7 +47,7 @@ exports.enable = parserState => {
|
|
44
47
|
exports.setFlagged = parserState => {
|
45
48
|
const value = parserStateExportsState.get(parserState);
|
46
49
|
if (value !== true) return;
|
47
|
-
const buildMeta = parserState.module.buildMeta;
|
50
|
+
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
|
48
51
|
if (buildMeta.exportsType === "dynamic") return;
|
49
52
|
buildMeta.exportsType = "flagged";
|
50
53
|
};
|
@@ -56,7 +59,8 @@ exports.setFlagged = parserState => {
|
|
56
59
|
exports.setDynamic = parserState => {
|
57
60
|
const value = parserStateExportsState.get(parserState);
|
58
61
|
if (value !== true) return;
|
59
|
-
|
62
|
+
/** @type {BuildMeta} */
|
63
|
+
(parserState.module.buildMeta).exportsType = "dynamic";
|
60
64
|
};
|
61
65
|
|
62
66
|
/**
|
@@ -51,19 +51,23 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
|
|
51
51
|
switch (property) {
|
52
52
|
case "canMangle": {
|
53
53
|
const exportsInfo = moduleGraph.getExportsInfo(module);
|
54
|
-
const exportInfo = exportsInfo.getExportInfo(
|
54
|
+
const exportInfo = exportsInfo.getExportInfo(
|
55
|
+
/** @type {string} */ (exportName)
|
56
|
+
);
|
55
57
|
if (exportInfo) return exportInfo.canMangle;
|
56
58
|
return exportsInfo.otherExportsInfo.canMangle;
|
57
59
|
}
|
58
60
|
case "used":
|
59
61
|
return (
|
60
|
-
moduleGraph
|
62
|
+
moduleGraph
|
63
|
+
.getExportsInfo(module)
|
64
|
+
.getUsed(/** @type {string} */ (exportName), runtime) !==
|
61
65
|
UsageState.Unused
|
62
66
|
);
|
63
67
|
case "useInfo": {
|
64
68
|
const state = moduleGraph
|
65
69
|
.getExportsInfo(module)
|
66
|
-
.getUsed(exportName, runtime);
|
70
|
+
.getUsed(/** @type {string} */ (exportName), runtime);
|
67
71
|
switch (state) {
|
68
72
|
case UsageState.Used:
|
69
73
|
case UsageState.OnlyPropertiesUsed:
|
@@ -79,7 +83,9 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
|
|
79
83
|
}
|
80
84
|
}
|
81
85
|
case "provideInfo":
|
82
|
-
return moduleGraph
|
86
|
+
return moduleGraph
|
87
|
+
.getExportsInfo(module)
|
88
|
+
.isExportProvided(/** @type {string} */ (exportName));
|
83
89
|
}
|
84
90
|
return undefined;
|
85
91
|
};
|
@@ -108,6 +114,10 @@ class ExportsInfoDependency extends NullDependency {
|
|
108
114
|
super.serialize(context);
|
109
115
|
}
|
110
116
|
|
117
|
+
/**
|
118
|
+
* @param {ObjectDeserializerContext} context context
|
119
|
+
* @returns {ExportsInfoDependency} ExportsInfoDependency
|
120
|
+
*/
|
111
121
|
static deserialize(context) {
|
112
122
|
const obj = new ExportsInfoDependency(
|
113
123
|
context.read(),
|
@@ -15,6 +15,7 @@ const NullDependency = require("./NullDependency");
|
|
15
15
|
/** @typedef {import("../Dependency")} Dependency */
|
16
16
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
17
17
|
/** @typedef {import("../Module")} Module */
|
18
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
18
19
|
|
19
20
|
class HarmonyCompatibilityDependency extends NullDependency {
|
20
21
|
get type() {
|
@@ -80,7 +81,7 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
|
|
80
81
|
0,
|
81
82
|
undefined,
|
82
83
|
`\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${
|
83
|
-
module.buildMeta.async ? ", 1" : ""
|
84
|
+
/** @type {BuildMeta} */ (module.buildMeta).async ? ", 1" : ""
|
84
85
|
});`
|
85
86
|
)
|
86
87
|
);
|
@@ -10,6 +10,7 @@ const DynamicExports = require("./DynamicExports");
|
|
10
10
|
const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
|
11
11
|
const HarmonyExports = require("./HarmonyExports");
|
12
12
|
|
13
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
13
14
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
14
15
|
/** @typedef {import("./HarmonyModulesPlugin").HarmonyModulesPluginOptions} HarmonyModulesPluginOptions */
|
15
16
|
|
@@ -72,7 +73,8 @@ module.exports = class HarmonyDetectionParserPlugin {
|
|
72
73
|
"Top-level-await is only supported in EcmaScript Modules"
|
73
74
|
);
|
74
75
|
}
|
75
|
-
|
76
|
+
/** @type {BuildMeta} */
|
77
|
+
(module.buildMeta).async = true;
|
76
78
|
});
|
77
79
|
|
78
80
|
/**
|
@@ -12,6 +12,8 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
|
|
12
12
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
13
13
|
/** @typedef {import("../Dependency")} Dependency */
|
14
14
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
15
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
16
|
+
/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
|
15
17
|
/** @typedef {import("../javascript/JavascriptParser").Assertions} Assertions */
|
16
18
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
17
19
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
@@ -85,15 +87,20 @@ HarmonyEvaluatedImportSpecifierDependency.Template = class HarmonyEvaluatedImpor
|
|
85
87
|
// Skip rendering depending when dependency is conditional
|
86
88
|
if (connection && !connection.isTargetActive(runtime)) return;
|
87
89
|
|
88
|
-
const exportsInfo = moduleGraph.getExportsInfo(
|
90
|
+
const exportsInfo = moduleGraph.getExportsInfo(
|
91
|
+
/** @type {ModuleGraphConnection} */ (connection).module
|
92
|
+
);
|
89
93
|
const ids = dep.getIds(moduleGraph);
|
90
94
|
|
91
95
|
let value;
|
92
96
|
|
93
|
-
const exportsType =
|
94
|
-
|
95
|
-
module.
|
96
|
-
|
97
|
+
const exportsType =
|
98
|
+
/** @type {ModuleGraphConnection} */
|
99
|
+
(connection).module.getExportsType(
|
100
|
+
moduleGraph,
|
101
|
+
/** @type {BuildMeta} */
|
102
|
+
(module.buildMeta).strictHarmonyModule
|
103
|
+
);
|
97
104
|
switch (exportsType) {
|
98
105
|
case "default-with-named": {
|
99
106
|
if (ids[0] === "default") {
|
@@ -18,6 +18,8 @@ const {
|
|
18
18
|
} = require("./HarmonyImportDependencyParserPlugin");
|
19
19
|
const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
20
20
|
|
21
|
+
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
22
|
+
|
21
23
|
const { HarmonyStarExportsList } = HarmonyExportImportedSpecifierDependency;
|
22
24
|
|
23
25
|
module.exports = class HarmonyExportDependencyParserPlugin {
|
@@ -330,9 +330,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
330
330
|
* @param {string[]} ids the requested export name of the imported module
|
331
331
|
* @param {string | null} name the export name of for this module
|
332
332
|
* @param {Set<string>} activeExports other named exports in the module
|
333
|
-
* @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency> | Iterable<HarmonyExportImportedSpecifierDependency>} otherStarExports other star exports in the module before this import
|
333
|
+
* @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency> | Iterable<HarmonyExportImportedSpecifierDependency> | null} otherStarExports other star exports in the module before this import
|
334
334
|
* @param {number} exportPresenceMode mode of checking export names
|
335
|
-
* @param {HarmonyStarExportsList} allStarExports all star exports in the module
|
335
|
+
* @param {HarmonyStarExportsList | null} allStarExports all star exports in the module
|
336
336
|
* @param {Assertions=} assertions import assertions
|
337
337
|
*/
|
338
338
|
constructor(
|
@@ -756,7 +756,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
756
756
|
/**
|
757
757
|
* Returns warnings
|
758
758
|
* @param {ModuleGraph} moduleGraph module graph
|
759
|
-
* @returns {WebpackError[]} warnings
|
759
|
+
* @returns {WebpackError[] | null | undefined} warnings
|
760
760
|
*/
|
761
761
|
getWarnings(moduleGraph) {
|
762
762
|
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
|
@@ -769,7 +769,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
769
769
|
/**
|
770
770
|
* Returns errors
|
771
771
|
* @param {ModuleGraph} moduleGraph module graph
|
772
|
-
* @returns {WebpackError[]} errors
|
772
|
+
* @returns {WebpackError[] | null | undefined} errors
|
773
773
|
*/
|
774
774
|
getErrors(moduleGraph) {
|
775
775
|
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
|
@@ -7,6 +7,8 @@
|
|
7
7
|
|
8
8
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
9
|
|
10
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
11
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
10
12
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
11
13
|
|
12
14
|
/** @type {WeakMap<ParserState, boolean>} */
|
@@ -22,12 +24,14 @@ exports.enable = (parserState, isStrictHarmony) => {
|
|
22
24
|
if (value === false) return;
|
23
25
|
parserStateExportsState.set(parserState, true);
|
24
26
|
if (value !== true) {
|
25
|
-
parserState.module.buildMeta
|
26
|
-
|
27
|
-
parserState.module.buildInfo
|
27
|
+
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
|
28
|
+
buildMeta.exportsType = "namespace";
|
29
|
+
const buildInfo = /** @type {BuildInfo} */ (parserState.module.buildInfo);
|
30
|
+
buildInfo.strict = true;
|
31
|
+
buildInfo.exportsArgument = RuntimeGlobals.exports;
|
28
32
|
if (isStrictHarmony) {
|
29
|
-
|
30
|
-
|
33
|
+
buildMeta.strictHarmonyModule = true;
|
34
|
+
buildInfo.moduleArgument = "__webpack_module__";
|
31
35
|
}
|
32
36
|
}
|
33
37
|
};
|
@@ -21,8 +21,12 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
|
|
21
21
|
/** @typedef {import("estree").Identifier} Identifier */
|
22
22
|
/** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
|
23
23
|
/** @typedef {import("estree").ImportExpression} ImportExpression */
|
24
|
+
/** @typedef {import("estree").MemberExpression} MemberExpression */
|
24
25
|
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
26
|
+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
27
|
+
/** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
|
25
28
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
29
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
26
30
|
/** @typedef {import("../optimize/InnerGraph").InnerGraph} InnerGraph */
|
27
31
|
/** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
|
28
32
|
/** @typedef {import("./HarmonyImportDependency")} HarmonyImportDependency */
|
@@ -113,19 +117,21 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
113
117
|
parser.state.lastHarmonyImportOrder =
|
114
118
|
(parser.state.lastHarmonyImportOrder || 0) + 1;
|
115
119
|
const clearDep = new ConstDependency(
|
116
|
-
parser.isAsiPosition(statement.range[0])
|
117
|
-
|
120
|
+
parser.isAsiPosition(/** @type {Range} */ (statement.range)[0])
|
121
|
+
? ";"
|
122
|
+
: "",
|
123
|
+
/** @type {Range} */ (statement.range)
|
118
124
|
);
|
119
|
-
clearDep.loc = statement.loc;
|
125
|
+
clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
120
126
|
parser.state.module.addPresentationalDependency(clearDep);
|
121
|
-
parser.unsetAsiPosition(statement.range[1]);
|
127
|
+
parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
|
122
128
|
const assertions = getAssertions(statement);
|
123
129
|
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
124
130
|
source,
|
125
131
|
parser.state.lastHarmonyImportOrder,
|
126
132
|
assertions
|
127
133
|
);
|
128
|
-
sideEffectDep.loc = statement.loc;
|
134
|
+
sideEffectDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
129
135
|
parser.state.module.addDependency(sideEffectDep);
|
130
136
|
return true;
|
131
137
|
}
|
@@ -172,13 +178,15 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
172
178
|
settings.sourceOrder,
|
173
179
|
settings.ids.concat(members).concat([leftPart]),
|
174
180
|
settings.name,
|
175
|
-
expression.range,
|
181
|
+
/** @type {Range} */ (expression.range),
|
176
182
|
settings.assertions,
|
177
183
|
"in"
|
178
184
|
);
|
179
185
|
dep.directImport = members.length === 0;
|
180
|
-
dep.asiSafe = !parser.isAsiPosition(
|
181
|
-
|
186
|
+
dep.asiSafe = !parser.isAsiPosition(
|
187
|
+
/** @type {Range} */ (expression.range)[0]
|
188
|
+
);
|
189
|
+
dep.loc = /** @type {DependencyLocation} */ (expression.loc);
|
182
190
|
parser.state.module.addDependency(dep);
|
183
191
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
184
192
|
return true;
|
@@ -193,7 +201,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
193
201
|
settings.sourceOrder,
|
194
202
|
settings.ids,
|
195
203
|
settings.name,
|
196
|
-
expr.range,
|
204
|
+
/** @type {Range} */ (expr.range),
|
197
205
|
exportPresenceMode,
|
198
206
|
settings.assertions,
|
199
207
|
[]
|
@@ -202,8 +210,11 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
202
210
|
parser.destructuringAssignmentPropertiesFor(expr);
|
203
211
|
dep.shorthand = parser.scope.inShorthand;
|
204
212
|
dep.directImport = true;
|
205
|
-
dep.asiSafe = !parser.isAsiPosition(
|
206
|
-
|
213
|
+
dep.asiSafe = !parser.isAsiPosition(
|
214
|
+
/** @type {Range} */ (expr.range)[0]
|
215
|
+
);
|
216
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
217
|
+
dep.call = parser.scope.inTaggedTemplateTag;
|
207
218
|
parser.state.module.addDependency(dep);
|
208
219
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
209
220
|
return true;
|
@@ -212,7 +223,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
212
223
|
.for(harmonySpecifierTag)
|
213
224
|
.tap(
|
214
225
|
"HarmonyImportDependencyParserPlugin",
|
215
|
-
(expression, members, membersOptionals,
|
226
|
+
(expression, members, membersOptionals, memberRanges) => {
|
216
227
|
const settings = /** @type {HarmonySettings} */ (
|
217
228
|
parser.currentTagData
|
218
229
|
);
|
@@ -220,10 +231,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
220
231
|
members,
|
221
232
|
membersOptionals
|
222
233
|
);
|
223
|
-
const
|
234
|
+
const ranges = memberRanges.slice(
|
224
235
|
0,
|
225
|
-
|
226
|
-
(members.length - nonOptionalMembers.length)
|
236
|
+
memberRanges.length - (members.length - nonOptionalMembers.length)
|
227
237
|
);
|
228
238
|
const expr =
|
229
239
|
nonOptionalMembers !== members
|
@@ -238,15 +248,17 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
238
248
|
settings.sourceOrder,
|
239
249
|
ids,
|
240
250
|
settings.name,
|
241
|
-
expr.range,
|
251
|
+
/** @type {Range} */ (expr.range),
|
242
252
|
exportPresenceMode,
|
243
253
|
settings.assertions,
|
244
|
-
|
254
|
+
ranges
|
245
255
|
);
|
246
256
|
dep.referencedPropertiesInDestructuring =
|
247
257
|
parser.destructuringAssignmentPropertiesFor(expr);
|
248
|
-
dep.asiSafe = !parser.isAsiPosition(
|
249
|
-
|
258
|
+
dep.asiSafe = !parser.isAsiPosition(
|
259
|
+
/** @type {Range} */ (expr.range)[0]
|
260
|
+
);
|
261
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
250
262
|
parser.state.module.addDependency(dep);
|
251
263
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
252
264
|
return true;
|
@@ -256,7 +268,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
256
268
|
.for(harmonySpecifierTag)
|
257
269
|
.tap(
|
258
270
|
"HarmonyImportDependencyParserPlugin",
|
259
|
-
(expression, members, membersOptionals,
|
271
|
+
(expression, members, membersOptionals, memberRanges) => {
|
260
272
|
const { arguments: args, callee } = expression;
|
261
273
|
const settings = /** @type {HarmonySettings} */ (
|
262
274
|
parser.currentTagData
|
@@ -265,10 +277,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
265
277
|
members,
|
266
278
|
membersOptionals
|
267
279
|
);
|
268
|
-
const
|
280
|
+
const ranges = memberRanges.slice(
|
269
281
|
0,
|
270
|
-
|
271
|
-
(members.length - nonOptionalMembers.length)
|
282
|
+
memberRanges.length - (members.length - nonOptionalMembers.length)
|
272
283
|
);
|
273
284
|
const expr =
|
274
285
|
nonOptionalMembers !== members
|
@@ -283,18 +294,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
283
294
|
settings.sourceOrder,
|
284
295
|
ids,
|
285
296
|
settings.name,
|
286
|
-
expr.range,
|
297
|
+
/** @type {Range} */ (expr.range),
|
287
298
|
exportPresenceMode,
|
288
299
|
settings.assertions,
|
289
|
-
|
300
|
+
ranges
|
290
301
|
);
|
291
302
|
dep.directImport = members.length === 0;
|
292
303
|
dep.call = true;
|
293
|
-
dep.asiSafe = !parser.isAsiPosition(
|
304
|
+
dep.asiSafe = !parser.isAsiPosition(
|
305
|
+
/** @type {Range} */ (expr.range)[0]
|
306
|
+
);
|
294
307
|
// only in case when we strictly follow the spec we need a special case here
|
295
308
|
dep.namespaceObjectAsContext =
|
296
309
|
members.length > 0 && this.strictThisContextOnImports;
|
297
|
-
dep.loc = expr.loc;
|
310
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
298
311
|
parser.state.module.addDependency(dep);
|
299
312
|
if (args) parser.walkExpressions(args);
|
300
313
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
@@ -11,7 +11,6 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
11
11
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
12
12
|
/** @typedef {import("../Dependency")} Dependency */
|
13
13
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
14
|
-
/** @typedef {import("../InitFragment")} InitFragment */
|
15
14
|
/** @typedef {import("../Module")} Module */
|
16
15
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
17
16
|
/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
|
@@ -74,7 +73,7 @@ HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDepend
|
|
74
73
|
apply(dependency, source, templateContext) {
|
75
74
|
const { moduleGraph, concatenationScope } = templateContext;
|
76
75
|
if (concatenationScope) {
|
77
|
-
const module = moduleGraph.getModule(dependency);
|
76
|
+
const module = /** @type {Module} */ (moduleGraph.getModule(dependency));
|
78
77
|
if (concatenationScope.isModuleInScope(module)) {
|
79
78
|
return;
|
80
79
|
}
|
@@ -19,6 +19,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
19
19
|
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
|
20
20
|
/** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
|
21
21
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
22
|
+
/** @typedef {import("../Module")} Module */
|
23
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
22
24
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
23
25
|
/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
|
24
26
|
/** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
|
@@ -43,7 +45,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
43
45
|
* @param {Range} range range
|
44
46
|
* @param {TODO} exportPresenceMode export presence mode
|
45
47
|
* @param {Assertions=} assertions assertions
|
46
|
-
* @param {
|
48
|
+
* @param {Range[]=} idRanges ranges for members of ids; the two arrays are right-aligned
|
47
49
|
*/
|
48
50
|
constructor(
|
49
51
|
request,
|
@@ -53,22 +55,23 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
53
55
|
range,
|
54
56
|
exportPresenceMode,
|
55
57
|
assertions,
|
56
|
-
|
58
|
+
idRanges // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
|
57
59
|
) {
|
58
60
|
super(request, sourceOrder, assertions);
|
59
61
|
this.ids = ids;
|
60
62
|
this.name = name;
|
61
63
|
this.range = range;
|
62
|
-
this.
|
64
|
+
this.idRanges = idRanges;
|
63
65
|
this.exportPresenceMode = exportPresenceMode;
|
66
|
+
/** @type {boolean | undefined} */
|
64
67
|
this.namespaceObjectAsContext = false;
|
65
68
|
this.call = undefined;
|
66
69
|
this.directImport = undefined;
|
67
70
|
this.shorthand = undefined;
|
68
71
|
this.asiSafe = undefined;
|
69
|
-
/** @type {Set<string> | boolean} */
|
72
|
+
/** @type {Set<string> | boolean | undefined} */
|
70
73
|
this.usedByExports = undefined;
|
71
|
-
/** @type {Set<string>} */
|
74
|
+
/** @type {Set<string> | undefined} */
|
72
75
|
this.referencedPropertiesInDestructuring = undefined;
|
73
76
|
}
|
74
77
|
|
@@ -143,11 +146,14 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
143
146
|
let namespaceObjectAsContext = this.namespaceObjectAsContext;
|
144
147
|
if (ids[0] === "default") {
|
145
148
|
const selfModule = moduleGraph.getParentModule(this);
|
146
|
-
const importedModule =
|
149
|
+
const importedModule =
|
150
|
+
/** @type {Module} */
|
151
|
+
(moduleGraph.getModule(this));
|
147
152
|
switch (
|
148
153
|
importedModule.getExportsType(
|
149
154
|
moduleGraph,
|
150
|
-
|
155
|
+
/** @type {BuildMeta} */
|
156
|
+
(selfModule.buildMeta).strictHarmonyModule
|
151
157
|
)
|
152
158
|
) {
|
153
159
|
case "default-only":
|
@@ -201,7 +207,10 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
201
207
|
_getEffectiveExportPresenceLevel(moduleGraph) {
|
202
208
|
if (this.exportPresenceMode !== ExportPresenceModes.AUTO)
|
203
209
|
return this.exportPresenceMode;
|
204
|
-
|
210
|
+
const buildMeta = /** @type {BuildMeta} */ (
|
211
|
+
moduleGraph.getParentModule(this).buildMeta
|
212
|
+
);
|
213
|
+
return buildMeta.strictHarmonyModule
|
205
214
|
? ExportPresenceModes.ERROR
|
206
215
|
: ExportPresenceModes.WARN;
|
207
216
|
}
|
@@ -209,7 +218,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
209
218
|
/**
|
210
219
|
* Returns warnings
|
211
220
|
* @param {ModuleGraph} moduleGraph module graph
|
212
|
-
* @returns {WebpackError[]} warnings
|
221
|
+
* @returns {WebpackError[] | null | undefined} warnings
|
213
222
|
*/
|
214
223
|
getWarnings(moduleGraph) {
|
215
224
|
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
|
@@ -222,7 +231,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
222
231
|
/**
|
223
232
|
* Returns errors
|
224
233
|
* @param {ModuleGraph} moduleGraph module graph
|
225
|
-
* @returns {WebpackError[]} errors
|
234
|
+
* @returns {WebpackError[] | null | undefined} errors
|
226
235
|
*/
|
227
236
|
getErrors(moduleGraph) {
|
228
237
|
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
|
@@ -261,7 +270,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
261
270
|
write(this.ids);
|
262
271
|
write(this.name);
|
263
272
|
write(this.range);
|
264
|
-
write(this.
|
273
|
+
write(this.idRanges);
|
265
274
|
write(this.exportPresenceMode);
|
266
275
|
write(this.namespaceObjectAsContext);
|
267
276
|
write(this.call);
|
@@ -281,7 +290,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
281
290
|
this.ids = read();
|
282
291
|
this.name = read();
|
283
292
|
this.range = read();
|
284
|
-
this.
|
293
|
+
this.idRanges = read();
|
285
294
|
this.exportPresenceMode = read();
|
286
295
|
this.namespaceObjectAsContext = read();
|
287
296
|
this.call = read();
|
@@ -320,15 +329,15 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
320
329
|
|
321
330
|
let [rangeStart, rangeEnd] = dep.range;
|
322
331
|
if (trimmedIds.length !== ids.length) {
|
323
|
-
// The array returned from dep.
|
332
|
+
// The array returned from dep.idRanges is right-aligned with the array returned from dep.getIds.
|
324
333
|
// Meaning, the two arrays may not always have the same number of elements, but the last element of
|
325
|
-
// dep.
|
326
|
-
// Use this to find the correct range
|
334
|
+
// dep.idRanges corresponds to [the expression fragment to the left of] the last element of dep.getIds.
|
335
|
+
// Use this to find the correct replacement range based on the number of ids that were trimmed.
|
327
336
|
const idx =
|
328
|
-
dep.
|
337
|
+
dep.idRanges === undefined
|
329
338
|
? -1 /* trigger failure case below */
|
330
|
-
: dep.
|
331
|
-
if (idx < 0 || idx >= dep.
|
339
|
+
: dep.idRanges.length + (trimmedIds.length - ids.length);
|
340
|
+
if (idx < 0 || idx >= dep.idRanges.length) {
|
332
341
|
// cspell:ignore minifiers
|
333
342
|
// Should not happen but we can't throw an error here because of backward compatibility with
|
334
343
|
// external plugins in wp5. Instead, we just disable trimming for now. This may break some minifiers.
|
@@ -336,7 +345,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
336
345
|
// TODO webpack 6 remove the "trimmedIds = ids" above and uncomment the following line instead.
|
337
346
|
// throw new Error("Missing range starts data for id replacement trimming.");
|
338
347
|
} else {
|
339
|
-
rangeEnd = dep.
|
348
|
+
[rangeStart, rangeEnd] = dep.idRanges[idx];
|
340
349
|
}
|
341
350
|
}
|
342
351
|
|
@@ -362,9 +371,10 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
362
371
|
* @returns {string[]} generated code
|
363
372
|
*/
|
364
373
|
_trimIdsToThoseImported(ids, moduleGraph, dependency) {
|
374
|
+
/** @type {string[]} */
|
365
375
|
let trimmedIds = [];
|
366
376
|
const exportsInfo = moduleGraph.getExportsInfo(
|
367
|
-
moduleGraph.getModule(dependency)
|
377
|
+
/** @type {Module} */ (moduleGraph.getModule(dependency))
|
368
378
|
);
|
369
379
|
let currentExportsInfo = /** @type {ExportsInfo=} */ exportsInfo;
|
370
380
|
for (let i = 0; i < ids.length; i++) {
|
@@ -437,7 +447,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
437
447
|
|
438
448
|
exportExpr = runtimeTemplate.exportFromImport({
|
439
449
|
moduleGraph,
|
440
|
-
module: moduleGraph.getModule(dep),
|
450
|
+
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
|
441
451
|
request: dep.request,
|
442
452
|
exportName: ids,
|
443
453
|
originModule: module,
|
@@ -8,17 +8,29 @@
|
|
8
8
|
const ConstDependency = require("./ConstDependency");
|
9
9
|
const HarmonyExports = require("./HarmonyExports");
|
10
10
|
|
11
|
+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
12
|
+
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
13
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
14
|
+
|
11
15
|
class HarmonyTopLevelThisParserPlugin {
|
16
|
+
/**
|
17
|
+
* @param {JavascriptParser} parser the parser
|
18
|
+
* @returns {void}
|
19
|
+
*/
|
12
20
|
apply(parser) {
|
13
21
|
parser.hooks.expression
|
14
22
|
.for("this")
|
15
23
|
.tap("HarmonyTopLevelThisParserPlugin", node => {
|
16
24
|
if (!parser.scope.topLevelScope) return;
|
17
25
|
if (HarmonyExports.isEnabled(parser.state)) {
|
18
|
-
const dep = new ConstDependency(
|
19
|
-
|
26
|
+
const dep = new ConstDependency(
|
27
|
+
"undefined",
|
28
|
+
/** @type {Range} */ (node.range),
|
29
|
+
null
|
30
|
+
);
|
31
|
+
dep.loc = /** @type {DependencyLocation} */ (node.loc);
|
20
32
|
parser.state.module.addPresentationalDependency(dep);
|
21
|
-
return
|
33
|
+
return true;
|
22
34
|
}
|
23
35
|
});
|
24
36
|
}
|
@@ -13,6 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
|
|
13
13
|
/** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
|
14
14
|
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
|
15
15
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
16
|
+
/** @typedef {import("../Module")} Module */
|
17
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
16
18
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
17
19
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
18
20
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
@@ -23,7 +25,7 @@ class ImportDependency extends ModuleDependency {
|
|
23
25
|
/**
|
24
26
|
* @param {string} request the request
|
25
27
|
* @param {Range} range expression range
|
26
|
-
* @param {string[][]=} referencedExports list of referenced exports
|
28
|
+
* @param {(string[][] | null)=} referencedExports list of referenced exports
|
27
29
|
*/
|
28
30
|
constructor(request, range, referencedExports) {
|
29
31
|
super(request);
|
@@ -96,9 +98,9 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
|
|
96
98
|
const content = runtimeTemplate.moduleNamespacePromise({
|
97
99
|
chunkGraph,
|
98
100
|
block: block,
|
99
|
-
module: moduleGraph.getModule(dep),
|
101
|
+
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
|
100
102
|
request: dep.request,
|
101
|
-
strict: module.buildMeta.strictHarmonyModule,
|
103
|
+
strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
|
102
104
|
message: "import()",
|
103
105
|
runtimeRequirements
|
104
106
|
});
|