@depup/webpack 5.110.1-depup.0 → 5.111.1-depup.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 +7 -8
- package/changes.json +7 -11
- package/lib/APIPlugin.js +26 -11
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/Cache.js +8 -3
- package/lib/CacheFacade.js +1 -1
- package/lib/ChunkGraph.js +20 -18
- package/lib/CircularModulesPlugin.js +157 -55
- package/lib/CleanPlugin.js +2 -2
- package/lib/CompatibilityPlugin.js +3 -4
- package/lib/Compilation.js +337 -338
- package/lib/Compiler.js +213 -51
- package/lib/ConcatenationScope.js +25 -35
- package/lib/ConstPlugin.js +16 -132
- package/lib/CopyPlugin.js +1054 -0
- package/lib/DefinePlugin.js +24 -8
- package/lib/DependencyTemplate.js +2 -1
- package/lib/DotenvPlugin.js +64 -40
- package/lib/ErrorHelpers.js +113 -0
- package/lib/ExportsInfo.js +30 -16
- package/lib/ExternalModule.js +47 -22
- package/lib/FileSystemInfo.js +17 -14
- package/lib/FlagDependencyExportsPlugin.js +53 -34
- package/lib/FlagDependencyUsagePlugin.js +17 -15
- package/lib/Generator.js +24 -2
- package/lib/HotModuleReplacementPlugin.js +55 -7
- package/lib/IgnorePlugin.js +1 -1
- package/lib/JavascriptMetaInfoPlugin.js +5 -3
- package/lib/LoaderOptionsPlugin.js +1 -1
- package/lib/MainTemplate.js +5 -1
- package/lib/Module.js +19 -10
- package/lib/ModuleGraph.js +6 -9
- package/lib/MultiCompiler.js +7 -17
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +148 -70
- package/lib/NormalModuleFactory.js +1 -1
- package/lib/RuntimeGlobals.js +21 -7
- package/lib/RuntimeModule.js +28 -12
- package/lib/RuntimePlugin.js +33 -3
- package/lib/RuntimeTemplate.js +1147 -847
- package/lib/SourceMapDevToolPlugin.js +54 -104
- package/lib/TemplatedPathPlugin.js +16 -59
- package/lib/Watching.js +9 -0
- package/lib/WebpackOptionsApply.js +84 -91
- package/lib/asset/AssetBytesGenerator.js +7 -1
- package/lib/asset/AssetGenerator.js +50 -24
- package/lib/asset/AssetModule.js +3 -0
- package/lib/asset/AssetSourceGenerator.js +7 -1
- package/lib/asset/WebManifestParser.js +7 -5
- package/lib/async-modules/AsyncModuleHelpers.js +10 -4
- package/lib/buildChunkGraph.js +11 -15
- package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
- package/lib/cache/PackFileCacheStrategy.js +17 -19
- package/lib/cache/getLazyHashedEtag.js +3 -5
- package/lib/config/browserslistTargetHandler.js +17 -4
- package/lib/config/defaults.js +162 -142
- package/lib/config/getClaimedAssetTypes.js +10 -11
- package/lib/config/normalization.js +100 -20
- package/lib/config/target.js +13 -4
- package/lib/container/ContainerReferencePlugin.js +6 -0
- package/lib/container/RemoteRuntimeModule.js +9 -0
- package/lib/container/declaredRemotes.js +39 -0
- package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
- package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
- package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
- package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
- package/lib/css/CssGenerator.js +27 -11
- package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
- package/lib/css/CssLoadingRuntimeModule.js +92 -15
- package/lib/css/CssModule.js +1 -1
- package/lib/css/CssModulesPlugin.js +3 -10
- package/lib/css/CssParser.js +162 -31
- package/lib/css/CssServerStylesRuntimeModule.js +9 -0
- package/lib/css/cssMinify.js +43 -32
- package/lib/css/data.js +3526 -871
- package/lib/css/syntax.js +6455 -1237
- package/lib/debug/ProfilingPlugin.js +7 -4
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
- package/lib/dependencies/AMDRuntimeModules.js +18 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
- package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
- package/lib/dependencies/CommonJsPlugin.js +19 -3
- package/lib/dependencies/CommonJsRequireDependency.js +32 -9
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
- package/lib/dependencies/ContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +3 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
- package/lib/dependencies/ContextElementDependency.js +1 -1
- package/lib/dependencies/CssIcssExportDependency.js +13 -9
- package/lib/dependencies/CssIcssImportDependency.js +3 -6
- package/lib/dependencies/CssUrlDependency.js +3 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +10 -4
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -7
- package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +217 -34
- package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
- package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
- package/lib/dependencies/HarmonyImportDependency.js +99 -41
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +198 -25
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +117 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
- package/lib/dependencies/HtmlEntryDependency.js +136 -104
- package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
- package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
- package/lib/dependencies/ImportContextDependency.js +43 -3
- package/lib/dependencies/ImportDependency.js +8 -29
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
- package/lib/dependencies/ImportMetaMainDependency.js +104 -0
- package/lib/dependencies/ImportMetaPlugin.js +67 -25
- package/lib/dependencies/ImportParserPlugin.js +25 -15
- package/lib/dependencies/LoaderPlugin.js +26 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RequireHeaderDependency.js +20 -21
- package/lib/dependencies/SystemRuntimeModule.js +9 -0
- package/lib/dependencies/URLContextDependency.js +1 -1
- package/lib/dependencies/URLDependency.js +6 -5
- package/lib/dependencies/WorkerAndWorkletPlugin.js +16 -21
- package/lib/dependencies/WorkerDependency.js +12 -18
- package/lib/dependencies/WorkletDependency.js +12 -20
- package/lib/dependencies/importOptionsCheck.js +47 -0
- package/lib/dll/DelegatedModule.js +18 -1
- package/lib/dll/DllReferencePlugin.js +11 -8
- package/lib/dll/LibManifestPlugin.js +1 -1
- package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
- package/lib/errors/DotenvFileError.js +29 -0
- package/lib/errors/DuplicateModulesWarning.js +12 -7
- package/lib/errors/EmptyCopyPatternWarning.js +26 -0
- package/lib/errors/ExternalStarReexportError.js +44 -0
- package/lib/errors/HookWebpackError.js +3 -2
- package/lib/errors/ImportedBindingAssignmentError.js +30 -0
- package/lib/errors/MissingSourceMapsWarning.js +36 -0
- package/lib/errors/ModuleParseError.js +2 -1
- package/lib/errors/UnusedAssetsWarning.js +36 -0
- package/lib/errors/UnusedFederationWarning.js +35 -0
- package/lib/errors/UnusedModulesWarning.js +38 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
- package/lib/esm/ModuleChunkLoadingPlugin.js +21 -5
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +91 -53
- package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
- package/lib/hmr/LazyCompilationPlugin.js +3 -5
- package/lib/html/HtmlGenerator.js +72 -87
- package/lib/html/HtmlModulesPlugin.js +479 -215
- package/lib/html/HtmlParser.js +110 -147
- package/lib/html/builtinEmbeddedRenderer.js +107 -0
- package/lib/html/data.js +142 -7
- package/lib/html/htmlMinify.js +92 -122
- package/lib/html/syntax.js +2031 -1556
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/index.js +49 -3
- package/lib/javascript/ChunkFormatHelpers.js +4 -3
- package/lib/javascript/JavascriptGenerator.js +8 -1
- package/lib/javascript/JavascriptModule.js +1 -0
- package/lib/javascript/JavascriptModulesPlugin.js +76 -80
- package/lib/javascript/JavascriptParser.js +1970 -900
- package/lib/javascript/StartupHelpers.js +27 -3
- package/lib/javascript/data.js +172 -0
- package/lib/javascript/grammar.js +5546 -0
- package/lib/javascript/parser.js +1500 -0
- package/lib/javascript/regexp.js +1762 -0
- package/lib/javascript/regexpData.js +51 -0
- package/lib/javascript/syntax.js +9061 -5262
- package/lib/json/JsonGenerator.js +7 -1
- package/lib/library/ModuleLibraryPlugin.js +171 -132
- package/lib/loaders/LoaderRunner.js +170 -14
- package/lib/node/NodeWatchFileSystem.js +3 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +8 -15
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
- package/lib/optimize/AggressiveMergingPlugin.js +3 -5
- package/lib/optimize/ConcatenatedModule.js +222 -125
- package/lib/optimize/ConstExportsPlugin.js +50 -34
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
- package/lib/optimize/InlineExports.js +20 -2
- package/lib/optimize/InnerGraphPlugin.js +7 -13
- package/lib/optimize/LimitChunkCountPlugin.js +5 -8
- package/lib/optimize/MangleExportsPlugin.js +13 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
- package/lib/optimize/RealContentHashPlugin.js +179 -44
- package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
- package/lib/optimize/SplitChunksPlugin.js +2 -4
- package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
- package/lib/performance/BroadContextsPlugin.js +1 -1
- package/lib/performance/CacheEffectivenessPlugin.js +7 -7
- package/lib/performance/DuplicateModulesPlugin.js +57 -13
- package/lib/performance/EvalUsagePlugin.js +5 -2
- package/lib/performance/MissingSourceMapsPlugin.js +115 -0
- package/lib/performance/PureAnnotationsPlugin.js +6 -3
- package/lib/performance/SizeLimitsPlugin.js +2 -4
- package/lib/performance/TopLevelThisPlugin.js +5 -4
- package/lib/performance/UnusedAssetsPlugin.js +109 -0
- package/lib/performance/UnusedFederationPlugin.js +147 -0
- package/lib/performance/UnusedModulesPlugin.js +141 -0
- package/lib/performance/UnusedReexportsPlugin.js +1 -55
- package/lib/performance/isOnlyReexported.js +65 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
- package/lib/prefetch/ResourceHintPlugin.js +29 -35
- package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
- package/lib/rules/RuleSetCompiler.js +211 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +103 -67
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
- package/lib/runtime/BaseUriRuntimeModule.js +9 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
- package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
- package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
- package/lib/runtime/GlobalRuntimeModule.js +11 -4
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
- package/lib/runtime/HelperRuntimeModule.js +10 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +313 -222
- package/lib/runtime/NonceRuntimeModule.js +9 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
- package/lib/runtime/PublicPathRuntimeModule.js +9 -0
- package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
- package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
- package/lib/runtime/SystemContextRuntimeModule.js +9 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
- package/lib/schemes/DataUriPlugin.js +3 -6
- package/lib/schemes/HttpUriPlugin.js +22 -5
- package/lib/schemes/VirtualUrlPlugin.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +9 -9
- package/lib/serialization/FileMiddleware.js +31 -18
- package/lib/serialization/ObjectMiddleware.js +168 -139
- package/lib/sharing/ConsumeSharedPlugin.js +12 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
- package/lib/sharing/ShareRuntimeModule.js +9 -0
- package/lib/sharing/declaredShared.js +47 -0
- package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
- package/lib/typescript/TypeScriptPlugin.js +10 -13
- package/lib/url/URLParserPlugin.js +6 -8
- package/lib/util/ArrayQueue.js +3 -3
- package/lib/util/LocConverter.js +4 -7
- package/lib/util/SourceProcessor.js +115 -99
- package/lib/util/URLAbsoluteSpecifier.js +3 -1
- package/lib/util/async.js +292 -0
- package/lib/util/buildDiagnostics.js +69 -0
- package/lib/util/chainedImports.js +3 -4
- package/lib/util/concatenate.js +4 -4
- package/lib/util/conventions.js +5 -1
- package/lib/util/createHooksRegistry.js +1 -2
- package/lib/util/createMappings.js +25 -3
- package/lib/util/dataURL.js +2 -3
- package/lib/util/deterministicGrouping.js +8 -13
- package/lib/util/findGraphRoots.js +6 -13
- package/lib/util/fs.js +27 -1
- package/lib/util/globUtils.js +1 -1
- package/lib/util/handlerKeys.js +40 -0
- package/lib/util/hash/wasm-hash.js +3 -4
- package/lib/util/identifier.js +20 -0
- package/lib/util/internalSerializables.js +7 -1
- package/lib/util/registerExternalSerializer.js +6 -45
- package/lib/util/removeBOM.js +82 -1
- package/lib/util/semver.js +5 -3
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +14 -3
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +7 -12
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
- package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -6
- package/lib/web/FetchCompileWasmPlugin.js +4 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
- package/package.json +55 -46
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +388 -76
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/ManifestPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/types.d.ts +1795 -608
- package/lib/dependencies/ExportBindingInitFragment.js +0 -191
- package/lib/errors/EntrypointOverlapWarning.js +0 -45
- package/lib/performance/EntrypointOverlapPlugin.js +0 -122
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const makeSerializable = require("../util/makeSerializable");
|
|
9
|
+
const ConstDependency = require("./ConstDependency");
|
|
10
|
+
const NullDependency = require("./NullDependency");
|
|
11
|
+
|
|
12
|
+
/** @import { ReplaceSource } from "webpack-sources" */
|
|
13
|
+
/** @import Dependency, { UpdateHashContext } from "../Dependency" */
|
|
14
|
+
/** @import { DependencyTemplateContext } from "../DependencyTemplate" */
|
|
15
|
+
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
16
|
+
/**
|
|
17
|
+
* @import {
|
|
18
|
+
* ObjectDeserializerContext,
|
|
19
|
+
* ObjectSerializerContext
|
|
20
|
+
* } from "../serialization/ObjectMiddleware"
|
|
21
|
+
*/
|
|
22
|
+
/** @import Hash from "../util/Hash" */
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* `import.meta.main` asks whether the module is the entry, which needs the
|
|
26
|
+
* module argument scope hoisting removes. An inner concatenated module is
|
|
27
|
+
* never an entry module, so it answers with a separate constant expression.
|
|
28
|
+
*/
|
|
29
|
+
class ImportMetaMainDependency extends ConstDependency {
|
|
30
|
+
/**
|
|
31
|
+
* Creates an instance of ImportMetaMainDependency.
|
|
32
|
+
* @param {string} expression the expression a module outside a concatenation evaluates
|
|
33
|
+
* @param {string} concatenatedExpression the expression an inner concatenated module evaluates
|
|
34
|
+
* @param {Range} range the source range
|
|
35
|
+
* @param {(string[] | null)=} runtimeRequirements runtime requirements of `expression`
|
|
36
|
+
*/
|
|
37
|
+
constructor(expression, concatenatedExpression, range, runtimeRequirements) {
|
|
38
|
+
super(expression, range, runtimeRequirements);
|
|
39
|
+
/** @type {string} */
|
|
40
|
+
this.concatenatedExpression = concatenatedExpression;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Updates the hash with the data contributed by this instance.
|
|
45
|
+
* @param {Hash} hash hash to be updated
|
|
46
|
+
* @param {UpdateHashContext} context context
|
|
47
|
+
* @returns {void}
|
|
48
|
+
*/
|
|
49
|
+
updateHash(hash, context) {
|
|
50
|
+
super.updateHash(hash, context);
|
|
51
|
+
hash.update(this.concatenatedExpression);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Serializes this instance into the provided serializer context.
|
|
56
|
+
* @param {ObjectSerializerContext} context context
|
|
57
|
+
*/
|
|
58
|
+
serialize(context) {
|
|
59
|
+
context.write(this.concatenatedExpression);
|
|
60
|
+
super.serialize(context);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Restores this instance from the provided deserializer context.
|
|
65
|
+
* @param {ObjectDeserializerContext} context context
|
|
66
|
+
*/
|
|
67
|
+
deserialize(context) {
|
|
68
|
+
this.concatenatedExpression = context.read();
|
|
69
|
+
super.deserialize(context.rest);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
makeSerializable(
|
|
74
|
+
ImportMetaMainDependency,
|
|
75
|
+
"webpack/lib/dependencies/ImportMetaMainDependency"
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
ImportMetaMainDependency.Template = class ImportMetaMainDependencyTemplate extends (
|
|
79
|
+
NullDependency.Template
|
|
80
|
+
) {
|
|
81
|
+
/**
|
|
82
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
83
|
+
* @param {Dependency} dependency the dependency for which the template should be applied
|
|
84
|
+
* @param {ReplaceSource} source the current replace source which can be modified
|
|
85
|
+
* @param {DependencyTemplateContext} templateContext the context object
|
|
86
|
+
* @returns {void}
|
|
87
|
+
*/
|
|
88
|
+
apply(dependency, source, templateContext) {
|
|
89
|
+
const dep = /** @type {ImportMetaMainDependency} */ (dependency);
|
|
90
|
+
const concatenated = templateContext.concatenationScope !== undefined;
|
|
91
|
+
if (!concatenated && dep.runtimeRequirements) {
|
|
92
|
+
for (const req of dep.runtimeRequirements) {
|
|
93
|
+
templateContext.runtimeRequirements.add(req);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const expression = concatenated
|
|
97
|
+
? dep.concatenatedExpression
|
|
98
|
+
: dep.expression;
|
|
99
|
+
const range = /** @type {Range} */ (dep.range);
|
|
100
|
+
source.replace(range[0], range[1] - 1, expression);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
module.exports = ImportMetaMainDependency;
|
|
@@ -27,6 +27,7 @@ const createHooksRegistry = require("../util/createHooksRegistry");
|
|
|
27
27
|
const { propertyAccess } = require("../util/property");
|
|
28
28
|
const BuildTimeConstDependency = require("./BuildTimeConstDependency");
|
|
29
29
|
const ConstDependency = require("./ConstDependency");
|
|
30
|
+
const ImportMetaMainDependency = require("./ImportMetaMainDependency");
|
|
30
31
|
const ImportMetaResolveDependency = require("./ImportMetaResolveDependency");
|
|
31
32
|
const ModuleInitFragmentDependency = require("./ModuleInitFragmentDependency");
|
|
32
33
|
|
|
@@ -92,11 +93,9 @@ const IMPORT_META_FIELDS = new Set([
|
|
|
92
93
|
"webpackHot"
|
|
93
94
|
]);
|
|
94
95
|
|
|
95
|
-
//
|
|
96
|
-
// and
|
|
97
|
-
//
|
|
98
|
-
// pragmas `import.meta.webpackHot`/`webpackContext` are intentionally excluded:
|
|
99
|
-
// they are usable in CommonJS modules and must not force ESM.
|
|
96
|
+
// The `import.meta` accesses that exist only in ES modules, and so mark one.
|
|
97
|
+
// `dirname` and `filename` are resolved by NodeStuffPlugin. The webpack pragmas
|
|
98
|
+
// are excluded: they work in CommonJS too and must not force ESM.
|
|
100
99
|
const IMPORT_META_NAMES = [
|
|
101
100
|
IMPORT_META,
|
|
102
101
|
IMPORT_META_URL,
|
|
@@ -108,11 +107,11 @@ const IMPORT_META_NAMES = [
|
|
|
108
107
|
IMPORT_META_RESOLVE
|
|
109
108
|
];
|
|
110
109
|
|
|
111
|
-
//
|
|
112
|
-
// (HarmonyDetectionParserPlugin, non-bailing) must observe every
|
|
113
|
-
// any bailing replacement
|
|
114
|
-
// DefinePlugin object defines (default stage 0) and its nested
|
|
115
|
-
// handler (stage 100).
|
|
110
|
+
// WHY: the ordering contract for the `import.meta` parser hooks across plugins.
|
|
111
|
+
// ESM detection (HarmonyDetectionParserPlugin, non-bailing) must observe every
|
|
112
|
+
// access before any bailing replacement, and the merged replacements here must
|
|
113
|
+
// run before DefinePlugin's object defines (default stage 0) and its nested
|
|
114
|
+
// destructuring handler (stage 100).
|
|
116
115
|
const IMPORT_META_STAGE_ESM_DETECTION = -1000;
|
|
117
116
|
const IMPORT_META_STAGE_REPLACEMENT = -100;
|
|
118
117
|
|
|
@@ -154,17 +153,44 @@ const isImportMetaFieldEnabled = (importMeta, field) => {
|
|
|
154
153
|
};
|
|
155
154
|
|
|
156
155
|
/**
|
|
157
|
-
* Renders the `import.meta.main` comparison
|
|
156
|
+
* Renders the `import.meta.main` comparison, which reads the module argument a
|
|
157
|
+
* scope-hoisted module does not have. A caller that can answer the expression
|
|
158
|
+
* statically for an inner module rules out only the concatenation root.
|
|
158
159
|
* @param {Parser} parser the parser
|
|
160
|
+
* @param {boolean} staticWhenInner whether an inner concatenated module answers it without the comparison
|
|
159
161
|
* @returns {string} the comparison expression
|
|
160
162
|
*/
|
|
161
|
-
const renderImportMetaMain = (parser) => {
|
|
163
|
+
const renderImportMetaMain = (parser, staticWhenInner) => {
|
|
162
164
|
const currentModule = parser.state.module;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
+
const buildInfo =
|
|
166
|
+
/** @type {JavascriptModuleBuildInfo} */
|
|
167
|
+
(currentModule.buildInfo);
|
|
168
|
+
if (staticWhenInner) {
|
|
169
|
+
buildInfo.moduleConcatenationRootBailout = IMPORT_META_MAIN;
|
|
170
|
+
} else {
|
|
171
|
+
buildInfo.moduleConcatenationBailout = IMPORT_META_MAIN;
|
|
172
|
+
}
|
|
165
173
|
return `${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${currentModule.moduleArgument}`;
|
|
166
174
|
};
|
|
167
175
|
|
|
176
|
+
const IMPORT_META_VAR = "__webpack_import_meta__";
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The name of the module's synthesized `import.meta` binding, stepped aside when
|
|
180
|
+
* the source already spells it. Re-bundling webpack output is the case that
|
|
181
|
+
* matters: the earlier binding would shadow this one and make it initialize
|
|
182
|
+
* itself.
|
|
183
|
+
* @param {Parser} parser the parser
|
|
184
|
+
* @returns {string} a name no declaration in this module takes
|
|
185
|
+
*/
|
|
186
|
+
const importMetaVarName = (parser) => {
|
|
187
|
+
const { source } = parser.state;
|
|
188
|
+
if (!source || !source.includes(IMPORT_META_VAR)) return IMPORT_META_VAR;
|
|
189
|
+
let index = 2;
|
|
190
|
+
while (source.includes(`__webpack_import_meta_${index}__`)) index++;
|
|
191
|
+
return `__webpack_import_meta_${index}__`;
|
|
192
|
+
};
|
|
193
|
+
|
|
168
194
|
/**
|
|
169
195
|
* Checks whether the callee is the `import.meta.resolve` member.
|
|
170
196
|
* @param {Expression | Super} callee call callee
|
|
@@ -261,6 +287,10 @@ class ImportMetaPlugin {
|
|
|
261
287
|
BuildTimeConstDependency,
|
|
262
288
|
new BuildTimeConstDependency.Template()
|
|
263
289
|
);
|
|
290
|
+
compilation.dependencyTemplates.set(
|
|
291
|
+
ImportMetaMainDependency,
|
|
292
|
+
new ImportMetaMainDependency.Template()
|
|
293
|
+
);
|
|
264
294
|
|
|
265
295
|
/**
|
|
266
296
|
* Returns file url.
|
|
@@ -442,7 +472,7 @@ class ImportMetaPlugin {
|
|
|
442
472
|
const referencedPropertiesInDestructuring =
|
|
443
473
|
parser.destructuringAssignmentPropertiesFor(metaProperty);
|
|
444
474
|
if (!referencedPropertiesInDestructuring) {
|
|
445
|
-
const varName =
|
|
475
|
+
const varName = importMetaVarName(parser);
|
|
446
476
|
const knownProps = [];
|
|
447
477
|
if (isImportMetaFieldEnabled(importMeta, "url")) {
|
|
448
478
|
knownProps.push(`url: ${importMetaUrl()}`);
|
|
@@ -451,7 +481,9 @@ class ImportMetaPlugin {
|
|
|
451
481
|
knownProps.push(`webpack: ${importMetaWebpackVersion()}`);
|
|
452
482
|
}
|
|
453
483
|
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
454
|
-
knownProps.push(
|
|
484
|
+
knownProps.push(
|
|
485
|
+
`main: ${renderImportMetaMain(parser, false)}`
|
|
486
|
+
);
|
|
455
487
|
}
|
|
456
488
|
if (isImportMetaFieldEnabled(importMeta, "env")) {
|
|
457
489
|
addDefinitionValueDependencies();
|
|
@@ -471,8 +503,10 @@ class ImportMetaPlugin {
|
|
|
471
503
|
const plainInitCode = `var ${varName} = {${knownProps.join(
|
|
472
504
|
", "
|
|
473
505
|
)}};\n`;
|
|
506
|
+
// Each module owns its `import.meta`: it copies the bundle's one
|
|
507
|
+
// and inherits from it, so later host writes stay visible.
|
|
474
508
|
const initCode = preserveUnknown(importMeta)
|
|
475
|
-
? `var ${varName} = Object.assign(import.meta, {${knownProps.join(
|
|
509
|
+
? `var ${varName} = Object.assign(Object.create(import.meta), import.meta, {${knownProps.join(
|
|
476
510
|
", "
|
|
477
511
|
)}});\n`
|
|
478
512
|
: plainInitCode;
|
|
@@ -556,7 +590,7 @@ class ImportMetaPlugin {
|
|
|
556
590
|
break;
|
|
557
591
|
case "main":
|
|
558
592
|
if (fieldEnabled) {
|
|
559
|
-
append(`main: ${renderImportMetaMain(parser)},`);
|
|
593
|
+
append(`main: ${renderImportMetaMain(parser, false)},`);
|
|
560
594
|
runtimeRequirements.push(
|
|
561
595
|
RuntimeGlobals.moduleCache,
|
|
562
596
|
RuntimeGlobals.entryModuleId,
|
|
@@ -740,13 +774,21 @@ class ImportMetaPlugin {
|
|
|
740
774
|
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
741
775
|
parser.hooks.expression
|
|
742
776
|
.for(IMPORT_META_MAIN)
|
|
743
|
-
.tap(PLUGIN_NAME, (expr) =>
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
777
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
778
|
+
const dep = new ImportMetaMainDependency(
|
|
779
|
+
renderImportMetaMain(parser, true),
|
|
780
|
+
"false",
|
|
781
|
+
/** @type {Range} */ (expr.range),
|
|
782
|
+
[
|
|
783
|
+
RuntimeGlobals.moduleCache,
|
|
784
|
+
RuntimeGlobals.entryModuleId,
|
|
785
|
+
RuntimeGlobals.module
|
|
786
|
+
]
|
|
787
|
+
);
|
|
788
|
+
dep.loc = parser.getLocation(expr);
|
|
789
|
+
parser.state.module.addPresentationalDependency(dep);
|
|
790
|
+
return true;
|
|
791
|
+
});
|
|
750
792
|
parser.hooks.typeof
|
|
751
793
|
.for(IMPORT_META_MAIN)
|
|
752
794
|
.tap(
|
|
@@ -45,7 +45,7 @@ const getCommentCompilationWarning = memoize(() =>
|
|
|
45
45
|
* } from "../../declarations/WebpackOptions"
|
|
46
46
|
*/
|
|
47
47
|
/** @import { RawChunkGroupOptions } from "../ChunkGroup" */
|
|
48
|
-
/** @import { ContextMode } from "../ContextModule" */
|
|
48
|
+
/** @import { ContextMode } from "../context/ContextModule" */
|
|
49
49
|
/** @import { RawReferencedExports } from "../Dependency" */
|
|
50
50
|
/** @import { BuildMeta } from "../Module" */
|
|
51
51
|
/**
|
|
@@ -209,20 +209,18 @@ const isStaticStringAttributes = (node) => {
|
|
|
209
209
|
: key.type === "Literal"
|
|
210
210
|
? key.value
|
|
211
211
|
: undefined;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
212
|
+
// Any other key is an expression webpack cannot account for, and its
|
|
213
|
+
// value still evaluates, so the argument has to stay.
|
|
214
|
+
if (keyName !== "with" && keyName !== "assert") return false;
|
|
215
|
+
const value = prop.value;
|
|
216
|
+
if (value.type !== "ObjectExpression") return false;
|
|
217
|
+
for (const attr of value.properties) {
|
|
218
|
+
if (attr.type !== "Property" || attr.kind !== "init" || attr.computed) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const attrValue = attr.value;
|
|
222
|
+
if (attrValue.type !== "Literal" || typeof attrValue.value !== "string") {
|
|
223
|
+
return false;
|
|
226
224
|
}
|
|
227
225
|
}
|
|
228
226
|
}
|
|
@@ -676,6 +674,18 @@ class ImportParserPlugin {
|
|
|
676
674
|
parser
|
|
677
675
|
);
|
|
678
676
|
if (!dep) return;
|
|
677
|
+
// The context module ignores the options argument, but the spec
|
|
678
|
+
// evaluates it, so anything but a static attributes object stays.
|
|
679
|
+
const optionsNode = expr.options;
|
|
680
|
+
if (
|
|
681
|
+
optionsNode &&
|
|
682
|
+
optionsNode.range &&
|
|
683
|
+
!isStaticStringAttributes(optionsNode)
|
|
684
|
+
) {
|
|
685
|
+
/** @type {ImportContextDependency} */ (dep).optionsRange =
|
|
686
|
+
/** @type {Range} */ (optionsNode.range);
|
|
687
|
+
parser.walkExpression(optionsNode);
|
|
688
|
+
}
|
|
679
689
|
dep.loc = parser.getLocation(expr);
|
|
680
690
|
dep.optional = Boolean(parser.scope.inTry);
|
|
681
691
|
parser.state.current.addDependency(dep);
|
|
@@ -21,7 +21,7 @@ const LoaderImportDependency = require("./LoaderImportDependency");
|
|
|
21
21
|
* } from "../Compilation"
|
|
22
22
|
*/
|
|
23
23
|
/** @import Compiler from "../Compiler" */
|
|
24
|
-
/** @import { BuildInfo } from "../Module" */
|
|
24
|
+
/** @import Module, { BuildInfo } from "../Module" */
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Defines the import module callback callback.
|
|
@@ -39,6 +39,31 @@ const LoaderImportDependency = require("./LoaderImportDependency");
|
|
|
39
39
|
* @property {string=} baseUri target base uri
|
|
40
40
|
*/
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* @callback LoadModuleCallback
|
|
44
|
+
* @param {Error | null} err error object
|
|
45
|
+
* @param {(string | Buffer)=} source source of the loaded module
|
|
46
|
+
* @param {(object | null)=} sourceMap source map of the loaded module
|
|
47
|
+
* @param {Module=} module the loaded module
|
|
48
|
+
* @returns {void}
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* `importModule` takes a callback or, given none, answers with a promise, and
|
|
53
|
+
* TypeScript reads an intersection of call signatures as an overload set
|
|
54
|
+
* @typedef {{ (request: string, options: ImportModuleOptions | undefined, callback: ImportModuleCallback): void } & { (request: string, options?: ImportModuleOptions): Promise<ExecuteModuleExports> }} ImportModuleMethod
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* These properties are added by the LoaderPlugin
|
|
59
|
+
* @typedef {object} LoaderPluginLoaderContext
|
|
60
|
+
* @property {(request: string, callback: LoadModuleCallback) => void} loadModule Resolves the given request to a module, applies all configured loaders and calls
|
|
61
|
+
* back with the generated source, the sourceMap and the module instance (usually an
|
|
62
|
+
* instance of NormalModule). Use this function if you need to know the source code
|
|
63
|
+
* of another module to generate the result.
|
|
64
|
+
* @property {ImportModuleMethod} importModule
|
|
65
|
+
*/
|
|
66
|
+
|
|
42
67
|
const PLUGIN_NAME = "LoaderPlugin";
|
|
43
68
|
|
|
44
69
|
class LoaderPlugin {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const RequireContextDependency = require("./RequireContextDependency");
|
|
9
9
|
|
|
10
|
-
/** @import { ContextMode } from "../ContextModule" */
|
|
10
|
+
/** @import { ContextMode } from "../context/ContextModule" */
|
|
11
11
|
/** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
|
|
12
12
|
|
|
13
13
|
const PLUGIN_NAME = "RequireContextDependencyParserPlugin";
|
|
@@ -76,30 +76,29 @@ RequireHeaderDependency.Template = class RequireHeaderDependencyTemplate extends
|
|
|
76
76
|
{ moduleGraph, runtime, runtimeRequirements, concatenationScope }
|
|
77
77
|
) {
|
|
78
78
|
const dep = /** @type {RequireHeaderDependency} */ (dependency);
|
|
79
|
-
|
|
80
|
-
// the paired require dependency already replaced the whole call
|
|
81
|
-
if (
|
|
82
|
-
concatenationScope !== undefined &&
|
|
83
|
-
concatenationScope.isInsideReplacedRequire(dep.range[0])
|
|
84
|
-
) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
79
|
const requireDep = dep.requireDependency;
|
|
89
|
-
// Skip when the paired call became `0`; dead-branch still needs the header.
|
|
90
80
|
if (requireDep) {
|
|
91
81
|
const connection = moduleGraph.getConnection(requireDep);
|
|
92
|
-
if (
|
|
93
|
-
connection
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
82
|
+
if (connection) {
|
|
83
|
+
if (connection.isTargetActive(runtime)) {
|
|
84
|
+
if (
|
|
85
|
+
concatenationScope !== undefined &&
|
|
86
|
+
requireDep.rendersAsConcatenatedReference(
|
|
87
|
+
connection,
|
|
88
|
+
concatenationScope
|
|
89
|
+
)
|
|
90
|
+
) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
} else if (requireDep.isEvaluationOnly()) {
|
|
94
|
+
// Skip when the paired call became `0`; dead-branch still needs the header.
|
|
95
|
+
const guards = requireDep.branchGuards;
|
|
96
|
+
if (
|
|
97
|
+
guards === undefined ||
|
|
98
|
+
!HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime)
|
|
99
|
+
) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
}
|
|
@@ -24,6 +24,15 @@ class SystemRuntimeModule extends RuntimeModule {
|
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The `[handlerMap, key]` pairs this module installs onto a chunk handler map
|
|
29
|
+
* such as `__webpack_require__.f`, or `null` where it cannot name them.
|
|
30
|
+
* @returns {[string, string][] | null} installed chunk handlers (do not mutate)
|
|
31
|
+
*/
|
|
32
|
+
getInstalledChunkHandlers() {
|
|
33
|
+
return RuntimeModule.NO_CHUNK_HANDLERS;
|
|
34
|
+
}
|
|
35
|
+
|
|
27
36
|
/**
|
|
28
37
|
* Generates runtime code for this runtime module.
|
|
29
38
|
* @returns {string | null} runtime code
|
|
@@ -9,7 +9,7 @@ const makeSerializable = require("../util/makeSerializable");
|
|
|
9
9
|
const ContextDependency = require("./ContextDependency");
|
|
10
10
|
const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
|
|
11
11
|
|
|
12
|
-
/** @import { ContextOptions } from "../ContextModule" */
|
|
12
|
+
/** @import { ContextOptions } from "../context/ContextModule" */
|
|
13
13
|
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
14
14
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range]>} ObjectDeserializerContext */
|
|
15
15
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range]>} ObjectSerializerContext */
|
|
@@ -263,11 +263,12 @@ URLDependency.Template = class URLDependencyTemplate extends (
|
|
|
263
263
|
return;
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
//
|
|
269
|
-
//
|
|
270
|
-
//
|
|
266
|
+
// WHY: ESM module output emits the analyzable
|
|
267
|
+
// `new URL("./asset", import.meta.url)` form — a literal specifier, no runtime
|
|
268
|
+
// helpers — so other bundlers and webpack itself can statically follow the
|
|
269
|
+
// asset, while `url: "relative"` keeps the runtime form. A prefetch or preload
|
|
270
|
+
// hint does not force it: the `<link>` is emitted separately at chunk startup
|
|
271
|
+
// (`StartupAssetHintRuntimeModule`), independent of the call site.
|
|
271
272
|
if (
|
|
272
273
|
!dep.relative &&
|
|
273
274
|
runtimeTemplate.supportsAnalyzable(
|
|
@@ -86,10 +86,9 @@ const WORKER_DEFAULT_SYNTAX = [
|
|
|
86
86
|
"Worker from worker_threads"
|
|
87
87
|
];
|
|
88
88
|
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// pre-added via `addModule` from the calling scope (see WorkletDependency).
|
|
89
|
+
// A worklet is always a module script loaded through `addModule`, and unlike a
|
|
90
|
+
// Web Worker cannot load further chunks at runtime, so WorkletDependency wraps
|
|
91
|
+
// the call and pre-adds every chunk from the calling scope.
|
|
93
92
|
const WORKLET_DEFAULT_SYNTAX = [
|
|
94
93
|
"*context.audioWorklet.addModule()",
|
|
95
94
|
"*audioWorklet.addModule()",
|
|
@@ -406,10 +405,9 @@ class WorkerAndWorkletPlugin {
|
|
|
406
405
|
)
|
|
407
406
|
);
|
|
408
407
|
} else {
|
|
409
|
-
// `webpackEntryOptions` is user input from a magic
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
// `prototype`.
|
|
408
|
+
// `webpackEntryOptions` is user input from a magic comment, so
|
|
409
|
+
// only safe own keys are copied, against prototype pollution
|
|
410
|
+
// through `__proto__` or `constructor`.
|
|
413
411
|
const userEntryOptions = importOptions.webpackEntryOptions;
|
|
414
412
|
for (const key of Object.keys(userEntryOptions)) {
|
|
415
413
|
if (
|
|
@@ -502,11 +500,9 @@ class WorkerAndWorkletPlugin {
|
|
|
502
500
|
|
|
503
501
|
/** @type {ResourceHint | undefined} */
|
|
504
502
|
let resourceHint;
|
|
505
|
-
// Resource-hint comments belong to the asset expression
|
|
506
|
-
//
|
|
507
|
-
//
|
|
508
|
-
// `import.meta.url` there is no `new URL` and no place for
|
|
509
|
-
// the comments to go, so resource hints are skipped.
|
|
503
|
+
// Resource-hint comments belong to the asset expression, so they are
|
|
504
|
+
// read from the inner `new URL(...)` range alone. A bare
|
|
505
|
+
// `import.meta.url` has none, so its hints are skipped.
|
|
510
506
|
if (arg1.type === "NewExpression") {
|
|
511
507
|
const { options: urlImportOptions } = parser.parseCommentOptions(
|
|
512
508
|
/** @type {Range} */ (arg1.range)
|
|
@@ -652,10 +648,9 @@ class WorkerAndWorkletPlugin {
|
|
|
652
648
|
name: entryOptions.name,
|
|
653
649
|
circular: false,
|
|
654
650
|
entryOptions: {
|
|
655
|
-
// A module worklet links its split chunks
|
|
656
|
-
//
|
|
657
|
-
//
|
|
658
|
-
// chunks use import-scripts and are pre-added from the calling scope.
|
|
651
|
+
// A module worklet links its split chunks through native `import`
|
|
652
|
+
// and keeps module chunk loading. A script worklet loads none at
|
|
653
|
+
// runtime, so its chunks are pre-added from the calling scope.
|
|
659
654
|
chunkLoading: this._module
|
|
660
655
|
? this._chunkLoading
|
|
661
656
|
: "import-scripts",
|
|
@@ -753,6 +748,7 @@ class WorkerAndWorkletPlugin {
|
|
|
753
748
|
) {
|
|
754
749
|
return;
|
|
755
750
|
}
|
|
751
|
+
settings.used = true;
|
|
756
752
|
return handle(expr);
|
|
757
753
|
});
|
|
758
754
|
} else {
|
|
@@ -799,10 +795,9 @@ class WorkerAndWorkletPlugin {
|
|
|
799
795
|
);
|
|
800
796
|
}
|
|
801
797
|
|
|
802
|
-
// Worklet parsing is opt-in: unset falls back to
|
|
803
|
-
//
|
|
804
|
-
//
|
|
805
|
-
// merge sentinel of a user-provided list.
|
|
798
|
+
// Worklet parsing is opt-in: unset falls back to `futureDefaults` and
|
|
799
|
+
// `false` disables it. Not defaulted in `config/defaults.js`, which
|
|
800
|
+
// would splice into a user list's `"..."` sentinel.
|
|
806
801
|
const workletOption =
|
|
807
802
|
parserOptions.worklet === undefined
|
|
808
803
|
? this._workletDefault
|
|
@@ -131,24 +131,18 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
|
|
|
131
131
|
);
|
|
132
132
|
const chunk = entrypoint.getEntrypointChunk();
|
|
133
133
|
|
|
134
|
-
//
|
|
135
|
-
// import.meta.url)` form
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
chunk,
|
|
147
|
-
templateContext.module,
|
|
148
|
-
chunkGraph,
|
|
149
|
-
runtimeRequirements
|
|
150
|
-
)
|
|
151
|
-
: null;
|
|
134
|
+
// WHY: ESM module output emits the analyzable
|
|
135
|
+
// `new URL("./worker.<name>.js", import.meta.url)` form — a literal specifier,
|
|
136
|
+
// no runtime helpers — so other bundlers and webpack itself can statically
|
|
137
|
+
// follow the worker. A resource hint does not block it: the `<link>` is
|
|
138
|
+
// emitted at chunk startup instead of wrapping the href, which would turn the
|
|
139
|
+
// specifier into a non-analyzable expression.
|
|
140
|
+
const analyzableSpecifier = runtimeTemplate.getAnalyzableWorkerUrl(
|
|
141
|
+
dep.options.publicPath,
|
|
142
|
+
chunk,
|
|
143
|
+
templateContext.module,
|
|
144
|
+
chunkGraph
|
|
145
|
+
);
|
|
152
146
|
|
|
153
147
|
if (analyzableSpecifier !== null) {
|
|
154
148
|
// No `<link>` helper is asked for here: this form emits no call, and
|
|
@@ -136,21 +136,15 @@ WorkletDependency.Template = class WorkletDependencyTemplate extends (
|
|
|
136
136
|
const runtimeChunkId =
|
|
137
137
|
runtimeChunk && runtimeChunk.id !== null ? runtimeChunk.id : null;
|
|
138
138
|
|
|
139
|
-
//
|
|
140
|
-
// import.meta.url)
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
entryChunk,
|
|
149
|
-
module,
|
|
150
|
-
chunkGraph,
|
|
151
|
-
runtimeRequirements
|
|
152
|
-
)
|
|
153
|
-
: null;
|
|
139
|
+
// ESM output emits the analyzable `new URL("./worklet.<name>.js",
|
|
140
|
+
// import.meta.url)`, which another bundler can follow statically. Only the
|
|
141
|
+
// entry chunk is named, its splits being linked by native `import`.
|
|
142
|
+
const analyzableSpecifier = runtimeTemplate.getAnalyzableWorkerUrl(
|
|
143
|
+
dep.options.publicPath,
|
|
144
|
+
entryChunk,
|
|
145
|
+
module,
|
|
146
|
+
chunkGraph
|
|
147
|
+
);
|
|
154
148
|
if (analyzableSpecifier !== null) {
|
|
155
149
|
source.replace(
|
|
156
150
|
dep.callRange[0],
|
|
@@ -201,11 +195,9 @@ WorkletDependency.Template = class WorkletDependencyTemplate extends (
|
|
|
201
195
|
return;
|
|
202
196
|
}
|
|
203
197
|
|
|
204
|
-
// A worklet
|
|
205
|
-
//
|
|
206
|
-
//
|
|
207
|
-
// chunks pushed before it and runs entry startup with every module present
|
|
208
|
-
// (see ImportScriptsChunkLoadingRuntimeModule).
|
|
198
|
+
// A worklet loads no chunks at runtime, so every reachable one is pre-added
|
|
199
|
+
// from the calling scope. The runtime chunk goes last, installing what came
|
|
200
|
+
// before it and running startup with every module present.
|
|
209
201
|
/** @type {(string | number)[]} */
|
|
210
202
|
const restChunkIds = [];
|
|
211
203
|
for (const chunk of referencedChunks) {
|