@depup/webpack 5.110.3-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/CircularModulesPlugin.js +157 -55
- package/lib/CleanPlugin.js +2 -2
- package/lib/CompatibilityPlugin.js +3 -4
- package/lib/Compilation.js +336 -337
- package/lib/Compiler.js +213 -51
- 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 +24 -28
- package/lib/ErrorHelpers.js +113 -0
- package/lib/ExportsInfo.js +20 -16
- package/lib/ExternalModule.js +47 -22
- package/lib/FileSystemInfo.js +17 -14
- package/lib/FlagDependencyExportsPlugin.js +53 -34
- package/lib/FlagDependencyUsagePlugin.js +9 -13
- 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 +135 -50
- package/lib/NormalModuleFactory.js +1 -1
- package/lib/RuntimeGlobals.js +21 -7
- package/lib/RuntimeModule.js +28 -12
- package/lib/RuntimePlugin.js +30 -3
- package/lib/RuntimeTemplate.js +813 -518
- 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/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 +138 -128
- package/lib/config/getClaimedAssetTypes.js +10 -11
- package/lib/config/normalization.js +82 -12
- 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 +94 -36
- package/lib/css/CssModule.js +1 -1
- package/lib/css/CssModulesPlugin.js +7 -6
- 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 +3514 -869
- package/lib/css/syntax.js +6370 -1220
- 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 +14 -5
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
- package/lib/dependencies/ContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +3 -9
- 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/HarmonyExportDependencyParserPlugin.js +10 -7
- package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +74 -17
- 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 +6 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +111 -17
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +3 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
- package/lib/dependencies/HtmlEntryDependency.js +124 -102
- package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
- package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
- 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 +1 -1
- package/lib/dependencies/LoaderPlugin.js +26 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- 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 +15 -21
- package/lib/dependencies/WorkerDependency.js +7 -7
- package/lib/dependencies/WorkletDependency.js +7 -11
- 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/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/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 +30 -11
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
- 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 +418 -200
- 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 +1618 -1391
- 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 +73 -72
- 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 +137 -9
- package/lib/node/NodeWatchFileSystem.js +3 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
- package/lib/optimize/AggressiveMergingPlugin.js +3 -5
- package/lib/optimize/ConcatenatedModule.js +178 -120
- package/lib/optimize/ConstExportsPlugin.js +50 -39
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
- package/lib/optimize/InlineExports.js +20 -123
- 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 +68 -9
- 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 +18 -23
- 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 +98 -66
- 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 +305 -224
- 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/VirtualUrlPlugin.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +9 -9
- package/lib/serialization/FileMiddleware.js +16 -16
- 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 +2 -3
- package/lib/url/URLParserPlugin.js +6 -8
- package/lib/util/LocConverter.js +4 -7
- package/lib/util/SourceProcessor.js +91 -91
- 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/createHooksRegistry.js +1 -2
- 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 +5 -1
- package/lib/util/registerExternalSerializer.js +6 -45
- package/lib/util/semver.js +5 -3
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
- 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/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 +379 -66
- 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 +1723 -604
- package/lib/dependencies/ExportBindingInitFragment.js +0 -191
- package/lib/errors/EntrypointOverlapWarning.js +0 -45
- package/lib/performance/EntrypointOverlapPlugin.js +0 -122
|
@@ -259,7 +259,13 @@ class JsonGenerator extends Generator {
|
|
|
259
259
|
* @returns {Source | null} generated code
|
|
260
260
|
*/
|
|
261
261
|
generateError(error, module, generateContext) {
|
|
262
|
-
return new RawSource(
|
|
262
|
+
return new RawSource(
|
|
263
|
+
Generator.throwBuildErrorCode(
|
|
264
|
+
error,
|
|
265
|
+
undefined,
|
|
266
|
+
generateContext.runtimeTemplate.requestShortener
|
|
267
|
+
)
|
|
268
|
+
);
|
|
263
269
|
}
|
|
264
270
|
|
|
265
271
|
/**
|
|
@@ -14,15 +14,17 @@ const Template = require("../Template");
|
|
|
14
14
|
const HarmonyExportExpressionDependency = require("../dependencies/HarmonyExportExpressionDependency");
|
|
15
15
|
const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
|
|
16
16
|
const HarmonyExportSpecifierDependency = require("../dependencies/HarmonyExportSpecifierDependency");
|
|
17
|
+
const ExternalStarReexportError = require("../errors/ExternalStarReexportError");
|
|
17
18
|
const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
|
|
18
19
|
const ConcatenatedModule = require("../optimize/ConcatenatedModule");
|
|
19
20
|
const { InlinedUsedName } = require("../optimize/InlineExports");
|
|
21
|
+
const { toJsStringLiteral } = require("../util/identifier");
|
|
20
22
|
const {
|
|
21
23
|
RESERVED_IDENTIFIER,
|
|
22
24
|
SAFE_IDENTIFIER,
|
|
23
25
|
propertyAccess
|
|
24
26
|
} = require("../util/property");
|
|
25
|
-
const { getEntryRuntime
|
|
27
|
+
const { getEntryRuntime } = require("../util/runtime");
|
|
26
28
|
const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
|
|
27
29
|
|
|
28
30
|
/** @import { Source } from "webpack-sources" */
|
|
@@ -37,13 +39,14 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
|
|
|
37
39
|
/** @import Compilation from "../Compilation" */
|
|
38
40
|
/** @import Compiler from "../Compiler" */
|
|
39
41
|
/** @import ModuleGraph from "../ModuleGraph" */
|
|
40
|
-
/** @import Module
|
|
42
|
+
/** @import Module from "../Module" */
|
|
41
43
|
/**
|
|
42
44
|
* @import {
|
|
43
45
|
* StartupRenderContext,
|
|
44
46
|
* ModuleRenderContext
|
|
45
47
|
* } from "../javascript/JavascriptModulesPlugin"
|
|
46
48
|
*/
|
|
49
|
+
/** @import { ImportAttributes } from "../javascript/JavascriptParser" */
|
|
47
50
|
/** @import { RuntimeSpec } from "../util/runtime" */
|
|
48
51
|
/**
|
|
49
52
|
* @import {
|
|
@@ -122,6 +125,18 @@ const definesOnlyNativeExports = (module, moduleGraph) => {
|
|
|
122
125
|
const toExportName = (name) =>
|
|
123
126
|
SAFE_IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
124
127
|
|
|
128
|
+
/**
|
|
129
|
+
* Renders the import attributes of a reexport in the syntax the author wrote,
|
|
130
|
+
* since a legacy `assert` clause and a `with` clause are not interchangeable.
|
|
131
|
+
* @param {ImportAttributes | undefined} attributes the import attributes
|
|
132
|
+
* @returns {string} the attributes clause, empty when there are none
|
|
133
|
+
*/
|
|
134
|
+
const toAttributesClause = (attributes) => {
|
|
135
|
+
if (!attributes) return "";
|
|
136
|
+
const { _isLegacyAssert: isLegacyAssert, ...values } = attributes;
|
|
137
|
+
return ` ${isLegacyAssert ? "assert" : "with"} ${JSON.stringify(values)}`;
|
|
138
|
+
};
|
|
139
|
+
|
|
125
140
|
/**
|
|
126
141
|
* Whether the export name can also be used as the declared binding name.
|
|
127
142
|
* @param {string} name export name
|
|
@@ -156,73 +171,33 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
156
171
|
super.apply(compiler);
|
|
157
172
|
|
|
158
173
|
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
159
|
-
const { onDemandExportsGeneration } =
|
|
160
|
-
ConcatenatedModule.getCompilationHooks(compilation);
|
|
161
174
|
const javascriptHooks =
|
|
162
175
|
JavascriptModulesPlugin.getCompilationHooks(compilation);
|
|
163
|
-
onDemandExportsGeneration.tap(
|
|
164
|
-
PLUGIN_NAME,
|
|
165
|
-
(module, runtimes, source, finalName) => {
|
|
166
|
-
/** @type {BuildMeta} */
|
|
167
|
-
const buildMeta = module.buildMeta || (module.buildMeta = {});
|
|
168
|
-
|
|
169
|
-
/** @type {BuildMeta["exportsSourceByRuntime"]} */
|
|
170
|
-
const exportsSourceByRuntime =
|
|
171
|
-
buildMeta.exportsSourceByRuntime ||
|
|
172
|
-
(buildMeta.exportsSourceByRuntime = new Map());
|
|
173
|
-
|
|
174
|
-
/** @type {BuildMeta["exportsFinalNameByRuntime"]} */
|
|
175
|
-
const exportsFinalNameByRuntime =
|
|
176
|
-
buildMeta.exportsFinalNameByRuntime ||
|
|
177
|
-
(buildMeta.exportsFinalNameByRuntime = new Map());
|
|
178
|
-
|
|
179
|
-
for (const runtime of runtimes) {
|
|
180
|
-
const key = getRuntimeKey(runtime);
|
|
181
|
-
exportsSourceByRuntime.set(key, source);
|
|
182
|
-
exportsFinalNameByRuntime.set(key, finalName);
|
|
183
|
-
}
|
|
184
176
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
buildMeta.exportsBindingSourceByRuntime ||
|
|
204
|
-
(buildMeta.exportsBindingSourceByRuntime = new Map());
|
|
205
|
-
bindings.set(key, source);
|
|
206
|
-
} else {
|
|
207
|
-
const sources =
|
|
208
|
-
buildMeta.exportsSourceByRuntime ||
|
|
209
|
-
(buildMeta.exportsSourceByRuntime = new Map());
|
|
210
|
-
// The `__esModule` marker and the definitions both land here, so
|
|
211
|
-
// keep whichever arrived first rather than replacing it.
|
|
212
|
-
const before = sources.get(key);
|
|
213
|
-
sources.set(key, before ? `${before}${source}` : source);
|
|
177
|
+
compilation.hooks.beforeCodeGeneration.tap(PLUGIN_NAME, () => {
|
|
178
|
+
const entries = libraryEntryModules.get(compilation);
|
|
179
|
+
if (entries === undefined) return;
|
|
180
|
+
const { moduleGraph } = compilation;
|
|
181
|
+
for (const { dependencies } of compilation.entries.values()) {
|
|
182
|
+
for (const dep of dependencies) {
|
|
183
|
+
const module = dep && moduleGraph.getModule(dep);
|
|
184
|
+
if (!module) continue;
|
|
185
|
+
const root =
|
|
186
|
+
module instanceof ConcatenatedModule ? module.rootModule : module;
|
|
187
|
+
if (!entries.has(root)) continue;
|
|
188
|
+
if (
|
|
189
|
+
root === module &&
|
|
190
|
+
!definesOnlyNativeExports(module, moduleGraph)
|
|
191
|
+
) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
moduleGraph.getMeta(module).onDemandExports = true;
|
|
214
195
|
}
|
|
215
|
-
return true;
|
|
216
196
|
}
|
|
217
|
-
);
|
|
197
|
+
});
|
|
218
198
|
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
// module is wrapped in an IIFE/factory. When the entry is
|
|
222
|
-
// inlined directly, the stashed source — and the
|
|
223
|
-
// `definePropertyGetters` / `requireScope` runtime helpers it
|
|
224
|
-
// pulled in — never make it into the output. Drop those helpers
|
|
225
|
-
// from the chunk's set so the bundle stays clean.
|
|
199
|
+
// The stashed exports source is re-emitted only where the entry is wrapped;
|
|
200
|
+
// inlined directly, the helpers it pulled in have no reader and can go.
|
|
226
201
|
compilation.hooks.additionalChunkRuntimeRequirements.tap(
|
|
227
202
|
PLUGIN_NAME,
|
|
228
203
|
(chunk, set, { chunkGraph, codeGenerationResults }) => {
|
|
@@ -240,22 +215,16 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
240
215
|
if (javascriptHooks.inlineInRuntimeBailout.isUsed()) return;
|
|
241
216
|
|
|
242
217
|
const [module] = chunkGraph.getChunkEntryModulesIterable(chunk);
|
|
243
|
-
const runtimeKey = getRuntimeKey(chunk.runtime);
|
|
244
|
-
const buildMeta = module.buildMeta;
|
|
245
|
-
const takenOver =
|
|
246
|
-
(buildMeta &&
|
|
247
|
-
buildMeta.exportsSourceByRuntime &&
|
|
248
|
-
buildMeta.exportsSourceByRuntime.has(runtimeKey)) ||
|
|
249
|
-
(buildMeta &&
|
|
250
|
-
buildMeta.exportsBindingSourceByRuntime &&
|
|
251
|
-
buildMeta.exportsBindingSourceByRuntime.has(runtimeKey));
|
|
252
|
-
if (!takenOver) return;
|
|
253
218
|
const codeGenResult = codeGenerationResults.get(
|
|
254
219
|
module,
|
|
255
220
|
chunk.runtime
|
|
256
221
|
);
|
|
257
|
-
const
|
|
258
|
-
|
|
222
|
+
const { data } = codeGenResult;
|
|
223
|
+
const takenOver =
|
|
224
|
+
data !== undefined &&
|
|
225
|
+
(data.has("exportsSource") || data.has("exportsBindingSource"));
|
|
226
|
+
if (!takenOver) return;
|
|
227
|
+
const jsSource = codeGenResult.sources.get("javascript");
|
|
259
228
|
if (
|
|
260
229
|
jsSource &&
|
|
261
230
|
String(jsSource.source()).includes(`${RuntimeGlobals.require}.`)
|
|
@@ -367,6 +336,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
367
336
|
}
|
|
368
337
|
}
|
|
369
338
|
}
|
|
339
|
+
this._checkStarReexportedExternals(module, compilation);
|
|
370
340
|
moduleGraph.addExtraReason(module, "used as library export");
|
|
371
341
|
let entries = libraryEntryModules.get(compilation);
|
|
372
342
|
if (entries === undefined) {
|
|
@@ -376,6 +346,61 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
376
346
|
entries.add(module);
|
|
377
347
|
}
|
|
378
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Reports every external the entry star-reexports whose request names a property
|
|
351
|
+
* path, which `export *` has no way to reference.
|
|
352
|
+
* @param {Module} module the library entry module
|
|
353
|
+
* @param {Compilation} compilation the compilation
|
|
354
|
+
* @returns {void}
|
|
355
|
+
*/
|
|
356
|
+
_checkStarReexportedExternals(module, compilation) {
|
|
357
|
+
const { moduleGraph } = compilation;
|
|
358
|
+
/** @type {Set<Module>} */
|
|
359
|
+
const visitedReexportModules = new Set([module]);
|
|
360
|
+
/** @type {Module[]} */
|
|
361
|
+
const queue = [module];
|
|
362
|
+
/** @type {Set<ExternalModule>} */
|
|
363
|
+
const unsupportedExternals = new Set();
|
|
364
|
+
|
|
365
|
+
for (const current of queue) {
|
|
366
|
+
for (const connection of moduleGraph.getOutgoingConnections(current)) {
|
|
367
|
+
const dep = connection.dependency;
|
|
368
|
+
|
|
369
|
+
// Only handle star-reexport statement
|
|
370
|
+
if (
|
|
371
|
+
!(dep instanceof HarmonyExportImportedSpecifierDependency) ||
|
|
372
|
+
dep.name !== null
|
|
373
|
+
) {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
const importedModule = connection.resolvedModule;
|
|
377
|
+
|
|
378
|
+
// Only a module providing unknown exports keeps its reexport rendered
|
|
379
|
+
if (
|
|
380
|
+
moduleGraph.getExportsInfo(importedModule)._otherExportsInfo
|
|
381
|
+
.provided !== null
|
|
382
|
+
) {
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
if (importedModule instanceof ExternalModule) {
|
|
386
|
+
const request = importedModule.getResolvedRequest();
|
|
387
|
+
if (Array.isArray(request) && request.length > 1) {
|
|
388
|
+
unsupportedExternals.add(importedModule);
|
|
389
|
+
}
|
|
390
|
+
} else if (!visitedReexportModules.has(importedModule)) {
|
|
391
|
+
visitedReexportModules.add(importedModule);
|
|
392
|
+
queue.push(importedModule);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
for (const externalModule of unsupportedExternals) {
|
|
398
|
+
compilation.errors.push(
|
|
399
|
+
new ExternalStarReexportError(externalModule, module)
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
379
404
|
/**
|
|
380
405
|
* Returns preprocess as needed by overriding.
|
|
381
406
|
* @param {LibraryOptions} library normalized library option
|
|
@@ -415,14 +440,17 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
415
440
|
) {
|
|
416
441
|
const result = new ConcatSource(source);
|
|
417
442
|
/** @type {Set<string>} */
|
|
418
|
-
const
|
|
443
|
+
const externalReexports = new Set();
|
|
419
444
|
/** @type {Map<string, string | InlinedUsedName>} */
|
|
420
445
|
const unknownProvidedExports = new Map();
|
|
446
|
+
/** @type {Set<Module>} */
|
|
447
|
+
const visitedReexportModules = new Set();
|
|
421
448
|
|
|
422
449
|
/**
|
|
423
450
|
* Resolves dynamic star reexport.
|
|
424
451
|
* @param {Module} module the module
|
|
425
452
|
* @param {boolean} isDynamicReexport if module is dynamic reexported
|
|
453
|
+
* @returns {void}
|
|
426
454
|
*/
|
|
427
455
|
const resolveDynamicStarReexport = (module, isDynamicReexport) => {
|
|
428
456
|
for (const connection of moduleGraph.getOutgoingConnections(module)) {
|
|
@@ -445,8 +473,22 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
445
473
|
) {
|
|
446
474
|
// Handle export * from 'external'
|
|
447
475
|
if (importedModule instanceof ExternalModule) {
|
|
448
|
-
|
|
449
|
-
|
|
476
|
+
const request = importedModule.getResolvedRequest();
|
|
477
|
+
// A property path is reported by `_checkStarReexportedExternals`,
|
|
478
|
+
// and an absent one by the external's own build
|
|
479
|
+
const specifier =
|
|
480
|
+
typeof request === "string"
|
|
481
|
+
? request
|
|
482
|
+
: Array.isArray(request) && request.length === 1
|
|
483
|
+
? request[0]
|
|
484
|
+
: undefined;
|
|
485
|
+
if (specifier !== undefined) {
|
|
486
|
+
externalReexports.add(
|
|
487
|
+
`export * from ${toJsStringLiteral(specifier)}${toAttributesClause(dep.attributes)};\n`
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
} else if (!visitedReexportModules.has(importedModule)) {
|
|
491
|
+
visitedReexportModules.add(importedModule);
|
|
450
492
|
resolveDynamicStarReexport(importedModule, true);
|
|
451
493
|
}
|
|
452
494
|
}
|
|
@@ -473,8 +515,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
473
515
|
|
|
474
516
|
resolveDynamicStarReexport(module, false);
|
|
475
517
|
|
|
476
|
-
for (const
|
|
477
|
-
result.add(
|
|
518
|
+
for (const reexport of externalReexports) {
|
|
519
|
+
result.add(reexport);
|
|
478
520
|
}
|
|
479
521
|
|
|
480
522
|
for (const [origin, used] of unknownProvidedExports) {
|
|
@@ -520,19 +562,13 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
520
562
|
]
|
|
521
563
|
: moduleGraph.getExportsInfo(module).orderedExports;
|
|
522
564
|
|
|
523
|
-
const
|
|
524
|
-
(module.buildMeta &&
|
|
525
|
-
module.buildMeta.exportsFinalNameByRuntime &&
|
|
526
|
-
module.buildMeta.exportsFinalNameByRuntime.get(
|
|
527
|
-
getRuntimeKey(chunk.runtime)
|
|
528
|
-
)) ||
|
|
529
|
-
{};
|
|
565
|
+
const { data } = codeGenerationResults.get(module, chunk.runtime);
|
|
530
566
|
|
|
531
567
|
const isInlinedEntryWithoutIIFE = inlined && !inlinedInIIFE;
|
|
532
568
|
// Direct export bindings from on-demand concatenation
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
569
|
+
/** @type {Record<string, string>} */
|
|
570
|
+
const definitions =
|
|
571
|
+
(isInlinedEntryWithoutIIFE && data && data.get("exportsFinalName")) || {};
|
|
536
572
|
|
|
537
573
|
/** @type {string[]} */
|
|
538
574
|
const shortHandedExports = [];
|
|
@@ -566,15 +602,12 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
566
602
|
.treatAsCommonJs;
|
|
567
603
|
const skipRenderDefaultExport = Boolean(treatAsCommonJs);
|
|
568
604
|
|
|
569
|
-
// A single
|
|
570
|
-
//
|
|
571
|
-
//
|
|
572
|
-
// `__webpack_exports__.x` into a `const`. Concatenated entries already
|
|
573
|
-
// get direct bindings via `definitions` above.
|
|
605
|
+
// A single inlined entry renders at the top level, so its declarations are
|
|
606
|
+
// bindings that can be exported directly, keeping ESM live bindings rather
|
|
607
|
+
// than snapshotting them into a `const`.
|
|
574
608
|
/** @type {Map<string, string> | undefined} */
|
|
575
609
|
let directBindings;
|
|
576
610
|
if (isInlinedEntryWithoutIIFE && !treatAsCommonJs) {
|
|
577
|
-
const { data } = codeGenerationResults.get(module, chunk.runtime);
|
|
578
611
|
const topLevelDeclarations =
|
|
579
612
|
(data && data.get("topLevelDeclarations")) ||
|
|
580
613
|
(module.buildInfo && module.buildInfo.topLevelDeclarations);
|
|
@@ -593,15 +626,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
593
626
|
}
|
|
594
627
|
}
|
|
595
628
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
const bindingsTakenOver = Boolean(
|
|
599
|
-
module.buildMeta &&
|
|
600
|
-
module.buildMeta.exportsBindingSourceByRuntime &&
|
|
601
|
-
module.buildMeta.exportsBindingSourceByRuntime.has(
|
|
602
|
-
getRuntimeKey(chunk.runtime)
|
|
603
|
-
)
|
|
604
|
-
);
|
|
629
|
+
const bindingsTakenOver =
|
|
630
|
+
data !== undefined && data.has("exportsBindingSource");
|
|
605
631
|
|
|
606
632
|
const moduleExportsInfo = moduleGraph.getExportsInfo(module);
|
|
607
633
|
|
|
@@ -623,7 +649,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
623
649
|
}
|
|
624
650
|
|
|
625
651
|
// Try to find all known exports of the entry module
|
|
626
|
-
|
|
652
|
+
for (const exportInfo of exportInfos) {
|
|
627
653
|
if (!exportInfo.provided) continue;
|
|
628
654
|
|
|
629
655
|
const originalName = exportInfo.name;
|
|
@@ -631,20 +657,40 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
631
657
|
if (skipRenderDefaultExport && originalName === "default") continue;
|
|
632
658
|
|
|
633
659
|
// Try to find all exports from the reexported modules
|
|
634
|
-
const target = exportInfo.
|
|
635
|
-
|
|
636
|
-
// export
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
660
|
+
const target = exportInfo.getTarget(moduleGraph);
|
|
661
|
+
|
|
662
|
+
// A re-export is provided even when its target lacks the export, and
|
|
663
|
+
// the path can end in a property access, so every name is looked up.
|
|
664
|
+
if (
|
|
665
|
+
target &&
|
|
666
|
+
target.export &&
|
|
667
|
+
target.export[target.export.length - 1] !== "default" &&
|
|
668
|
+
moduleGraph
|
|
669
|
+
.getExportsInfo(target.module)
|
|
670
|
+
.isExportProvided(target.export) === false
|
|
671
|
+
) {
|
|
672
|
+
continue;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
if (
|
|
676
|
+
target &&
|
|
677
|
+
target.module instanceof ExternalModule &&
|
|
678
|
+
target.export &&
|
|
679
|
+
target.export.length === 1 &&
|
|
680
|
+
codeGenerationResults.has(target.module, chunk.runtime)
|
|
681
|
+
) {
|
|
682
|
+
const reexport = codeGenerationResults.getData(
|
|
683
|
+
target.module,
|
|
684
|
+
chunk.runtime,
|
|
685
|
+
"externalReexport"
|
|
686
|
+
);
|
|
687
|
+
if (reexport) {
|
|
688
|
+
if (!bindingsTakenOver) needExportsDeclaration = true;
|
|
689
|
+
result.add(
|
|
690
|
+
`export { ${toExportName(target.export[0])} as ${toExportName(originalName)} } ${reexport};\n`
|
|
691
|
+
);
|
|
692
|
+
alreadyRenderedExports.add(originalName);
|
|
693
|
+
continue;
|
|
648
694
|
}
|
|
649
695
|
}
|
|
650
696
|
|
|
@@ -690,7 +736,6 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
690
736
|
finalName.includes("("))
|
|
691
737
|
) {
|
|
692
738
|
if (exportInfo.isReexport()) {
|
|
693
|
-
const { data } = codeGenerationResults.get(module, chunk.runtime);
|
|
694
739
|
const topLevelDeclarations =
|
|
695
740
|
(data && data.get("topLevelDeclarations")) ||
|
|
696
741
|
(module.buildInfo && module.buildInfo.topLevelDeclarations);
|
|
@@ -769,19 +814,13 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
|
|
|
769
814
|
renderModuleContent(
|
|
770
815
|
source,
|
|
771
816
|
module,
|
|
772
|
-
{ factory, inlinedInIIFE, chunk },
|
|
817
|
+
{ factory, inlinedInIIFE, chunk, codeGenerationResults },
|
|
773
818
|
libraryContext
|
|
774
819
|
) {
|
|
775
|
-
const
|
|
776
|
-
|
|
777
|
-
const exportsSource =
|
|
778
|
-
|
|
779
|
-
buildMeta.exportsSourceByRuntime &&
|
|
780
|
-
buildMeta.exportsSourceByRuntime.get(runtimeKey);
|
|
781
|
-
const bindingSource =
|
|
782
|
-
buildMeta &&
|
|
783
|
-
buildMeta.exportsBindingSourceByRuntime &&
|
|
784
|
-
buildMeta.exportsBindingSourceByRuntime.get(runtimeKey);
|
|
820
|
+
const { data } = codeGenerationResults.get(module, chunk.runtime);
|
|
821
|
+
if (data === undefined) return source;
|
|
822
|
+
const exportsSource = data.get("exportsSource");
|
|
823
|
+
const bindingSource = data.get("exportsBindingSource");
|
|
785
824
|
|
|
786
825
|
// Re-add the exports source in a factory or IIFE-wrapped startup module; value
|
|
787
826
|
// bindings read the declarations above them, so those go after the body.
|
|
@@ -10,6 +10,9 @@ const { parseResource } = require("../util/identifier");
|
|
|
10
10
|
const { adjustSourceMapForRemovedBOM } = require("../util/removeBOM");
|
|
11
11
|
const loadLoader = require("./loadLoader");
|
|
12
12
|
|
|
13
|
+
/** @import { RawSourceMap } from "webpack-sources" */
|
|
14
|
+
/** @import { Environment } from "../../declarations/WebpackOptions" */
|
|
15
|
+
|
|
13
16
|
// Set on a loader context to have each loader's own run measured. Absent
|
|
14
17
|
// unless something asked for the measurement, and read once per loader.
|
|
15
18
|
const LOADER_TIMING = Symbol("loader timing");
|
|
@@ -44,14 +47,139 @@ const LOADER_TIMING = Symbol("loader timing");
|
|
|
44
47
|
|
|
45
48
|
/** @typedef {(...args: EXPECTED_ANY[]) => void} LoaderCallback */
|
|
46
49
|
|
|
47
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* @typedef {object} AdditionalDataKnown
|
|
52
|
+
* @property {EXPECTED_OBJECT} webpackAST the AST webpack should parse instead of the source
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/** @typedef {AdditionalDataKnown & Record<string, EXPECTED_ANY>} AdditionalData */
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @callback WebpackLoaderContextCallback
|
|
59
|
+
* @param {undefined | null | Error} err error object
|
|
60
|
+
* @param {(string | Buffer)=} content the loader result
|
|
61
|
+
* @param {(null | string | RawSourceMap)=} sourceMap a source map for the result
|
|
62
|
+
* @param {AdditionalData=} additionalData data passed to the next loader
|
|
63
|
+
* @returns {void}
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @typedef {object} LoaderEntry
|
|
68
|
+
* @property {string} request
|
|
69
|
+
* @property {string} path
|
|
70
|
+
* @property {string} query
|
|
71
|
+
* @property {string} fragment
|
|
72
|
+
* @property {EXPECTED_OBJECT | string | undefined} options
|
|
73
|
+
* @property {string} ident
|
|
74
|
+
* @property {EXPECTED_FUNCTION | undefined} normal
|
|
75
|
+
* @property {EXPECTED_FUNCTION | undefined} pitch
|
|
76
|
+
* @property {boolean | undefined} raw
|
|
77
|
+
* @property {EXPECTED_OBJECT | undefined} data
|
|
78
|
+
* @property {boolean} pitchExecuted
|
|
79
|
+
* @property {boolean} normalExecuted
|
|
80
|
+
* @property {("commonjs" | "module")=} type
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The members the runner never lets a loader assign. They carry no
|
|
85
|
+
* documentation, so a type literal loses nothing and keeps `readonly`
|
|
86
|
+
* @template OptionsType
|
|
87
|
+
* @typedef {{ readonly currentRequest: string, readonly data: EXPECTED_ANY, readonly previousRequest: string, readonly query: string | OptionsType, readonly remainingRequest: string, readonly request: string }} LoaderRunnerReadonlyContext
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @template OptionsType
|
|
92
|
+
* @typedef {object} LoaderRunnerMutableContext
|
|
93
|
+
* @property {(context: string) => void} addContextDependency Add a directory as dependency of the loader result.
|
|
94
|
+
* @property {(file: string) => void} addDependency Adds a file as dependency of the loader result in order to make them watchable.
|
|
95
|
+
* For example, html-loader uses this technique as it finds src and src-set attributes.
|
|
96
|
+
* Then, it sets the url's for those attributes as dependencies of the html file that is parsed.
|
|
97
|
+
* @property {(context: string) => void} addMissingDependency
|
|
98
|
+
* @property {() => WebpackLoaderContextCallback} async Make this loader async.
|
|
99
|
+
* @property {(flag?: boolean) => void} cacheable Make this loader result cacheable. By default it's cacheable.
|
|
100
|
+
* A cacheable loader must have a deterministic result, when inputs and dependencies haven't changed.
|
|
101
|
+
* This means the loader shouldn't have other dependencies than specified with this.addDependency.
|
|
102
|
+
* Most loaders are deterministic and cacheable.
|
|
103
|
+
* @property {WebpackLoaderContextCallback} callback
|
|
104
|
+
* @property {() => void} clearDependencies Remove all dependencies of the loader result. Even initial dependencies and these of other loaders.
|
|
105
|
+
* @property {string} context The directory of the module. Can be used as context for resolving other stuff.
|
|
106
|
+
* eg '/workspaces/ts-loader/examples/vanilla/src'
|
|
107
|
+
* @property {(file: string) => void} dependency alias of addDependency
|
|
108
|
+
* Adds a file as dependency of the loader result in order to make them watchable.
|
|
109
|
+
* For example, html-loader uses this technique as it finds src and src-set attributes.
|
|
110
|
+
* Then, it sets the url's for those attributes as dependencies of the html file that is parsed.
|
|
111
|
+
* @property {() => string[]} getContextDependencies
|
|
112
|
+
* @property {() => string[]} getDependencies
|
|
113
|
+
* @property {() => string[]} getMissingDependencies
|
|
114
|
+
* @property {number} loaderIndex The index in the loaders array of the current loader.
|
|
115
|
+
* In the example: in loader1: 0, in loader2: 1
|
|
116
|
+
* @property {LoaderEntry[]} loaders An array of all the loaders. It is writeable in the pitch phase.
|
|
117
|
+
* loaders = [{request: string, path: string, query: string, module: function}]
|
|
118
|
+
* @property {string} resourcePath The resource path.
|
|
119
|
+
* In the example: "/abc/resource.js"
|
|
120
|
+
* @property {string} resourceQuery The resource query string.
|
|
121
|
+
* Example: "?query"
|
|
122
|
+
* @property {string} resourceFragment The resource fragment.
|
|
123
|
+
* Example: "#frag"
|
|
124
|
+
* @property {string} resource The resource inclusive query and fragment.
|
|
125
|
+
* Example: "/abc/resource.js?query#frag"
|
|
126
|
+
* @property {string} target Target of compilation.
|
|
127
|
+
* Example: "web"
|
|
128
|
+
* @property {Environment} environment Tell what kind of ES-features may be used in the generated runtime-code.
|
|
129
|
+
* Example: { arrowFunction: true }
|
|
130
|
+
*/
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* The properties are added by https://github.com/webpack/loader-runner
|
|
134
|
+
* @template OptionsType
|
|
135
|
+
* @typedef {LoaderRunnerMutableContext<OptionsType> & LoaderRunnerReadonlyContext<OptionsType>} LoaderRunnerLoaderContext
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @template [OptionsType={}]
|
|
140
|
+
* @template [ContextAdditions={}]
|
|
141
|
+
* @typedef {(this: import("../NormalModule").LoaderContext<OptionsType> & ContextAdditions, remainingRequest: string, previousRequest: string, data: EXPECTED_OBJECT) => string | Buffer | Promise<string | Buffer> | void} PitchLoaderDefinitionFunction
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @template [OptionsType={}]
|
|
146
|
+
* @template [ContextAdditions={}]
|
|
147
|
+
* @typedef {(this: import("../NormalModule").LoaderContext<OptionsType> & ContextAdditions, content: string, sourceMap?: string | RawSourceMap, additionalData?: AdditionalData) => string | Buffer | Promise<string | Buffer> | void} LoaderDefinitionFunction
|
|
148
|
+
*/
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @template [OptionsType={}]
|
|
152
|
+
* @template [ContextAdditions={}]
|
|
153
|
+
* @typedef {(this: import("../NormalModule").LoaderContext<OptionsType> & ContextAdditions, content: Buffer, sourceMap?: string | RawSourceMap, additionalData?: AdditionalData) => string | Buffer | Promise<string | Buffer> | void} RawLoaderDefinitionFunction
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @template [OptionsType={}]
|
|
158
|
+
* @template [ContextAdditions={}]
|
|
159
|
+
* @typedef {LoaderDefinitionFunction<OptionsType, ContextAdditions> & { raw?: false, pitch?: PitchLoaderDefinitionFunction<OptionsType, ContextAdditions> }} LoaderDefinition
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @template [OptionsType={}]
|
|
164
|
+
* @template [ContextAdditions={}]
|
|
165
|
+
* @typedef {RawLoaderDefinitionFunction<OptionsType, ContextAdditions> & { raw: true, pitch?: PitchLoaderDefinitionFunction<OptionsType, ContextAdditions> }} RawLoaderDefinition
|
|
166
|
+
*/
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @template [OptionsType={}]
|
|
170
|
+
* @template [ContextAdditions={}]
|
|
171
|
+
* @typedef {object} LoaderModule
|
|
172
|
+
* @property {(RawLoaderDefinitionFunction<OptionsType, ContextAdditions> | LoaderDefinitionFunction<OptionsType, ContextAdditions>)=} default
|
|
173
|
+
* @property {false=} raw
|
|
174
|
+
* @property {PitchLoaderDefinitionFunction<OptionsType, ContextAdditions>=} pitch
|
|
175
|
+
*/
|
|
48
176
|
|
|
49
177
|
/**
|
|
50
178
|
* The loader context as the runner sees and mutates it: the canonical
|
|
51
179
|
* `LoaderRunnerLoaderContext` shape (not re-declared here), with only the fields
|
|
52
180
|
* the runner assigns internally before a loader runs widened to their mutable
|
|
53
181
|
* form (nullable `context`/`callback`/`async`, `LoaderObject` loaders).
|
|
54
|
-
* @typedef {Omit<LoaderRunnerLoaderContext
|
|
182
|
+
* @typedef {Omit<LoaderRunnerLoaderContext<EXPECTED_ANY>, "context" | "callback" | "async" | "loaders"> & { context: string | null, callback: LoaderCallback | null, async: (() => LoaderCallback | undefined) | null, loaders: LoaderObject[] }} LoaderContext
|
|
55
183
|
*/
|
|
56
184
|
|
|
57
185
|
const HASH_ESCAPE_REGEXP = /#/g;
|
|
@@ -575,7 +703,7 @@ function createLoaderContext(base) {
|
|
|
575
703
|
* Marks the request as not cacheable with the given reasons instead of
|
|
576
704
|
* attributing the currently running loader (used by the host when the cause
|
|
577
705
|
* lives outside the loader, e.g. in a child compilation of `importModule`).
|
|
578
|
-
* @param {LoaderRunnerLoaderContext} loaderContext loader context
|
|
706
|
+
* @param {LoaderRunnerLoaderContext<EXPECTED_ANY>} loaderContext loader context
|
|
579
707
|
* @param {string[]} reasons reasons why the request is not cacheable
|
|
580
708
|
* @returns {void}
|
|
581
709
|
*/
|
|
@@ -682,12 +810,12 @@ const ACCESSORS = {
|
|
|
682
810
|
* @returns {void}
|
|
683
811
|
*/
|
|
684
812
|
module.exports.runLoaders = function runLoaders(options, callback) {
|
|
685
|
-
// reuse a context already prepared
|
|
686
|
-
// NormalModule
|
|
687
|
-
// in place. State is intentionally preserved across the handoff, so
|
|
688
|
-
//
|
|
689
|
-
// non-cacheable before the run; a caller re-running on the same context
|
|
690
|
-
// clearDependencies() first to avoid accumulating stale
|
|
813
|
+
// WHY: reuse a context `createLoaderContext` already prepared, from
|
|
814
|
+
// NormalModule say, else augment the caller-provided context, or a fresh
|
|
815
|
+
// object, in place. State is intentionally preserved across the handoff, so a
|
|
816
|
+
// host hook such as `beforeLoaders` can pre-add dependencies or mark the
|
|
817
|
+
// request non-cacheable before the run; a caller re-running on the same context
|
|
818
|
+
// should `clearDependencies()` first, to avoid accumulating stale ones.
|
|
691
819
|
const provided = /** @type {EXPECTED_ANY} */ (options.context);
|
|
692
820
|
const loaderContext =
|
|
693
821
|
provided && provided[LOADER_STATE]
|
|
@@ -147,15 +147,9 @@ class NodeWatchFileSystem {
|
|
|
147
147
|
const directoriesSet =
|
|
148
148
|
directories instanceof Set ? directories : new Set(directories);
|
|
149
149
|
|
|
150
|
-
// Watchpack reports a watched directory
|
|
151
|
-
// `
|
|
152
|
-
//
|
|
153
|
-
// prefix, so it would wipe the stat cache of every file inside the
|
|
154
|
-
// directory even though only file-level events actually invalidate
|
|
155
|
-
// file stats. For directories we explicitly watch, purge only the
|
|
156
|
-
// directory's own entry (`{ exact: true }`, enhanced-resolve >=
|
|
157
|
-
// 5.22.0); file-level events in the same aggregated batch still
|
|
158
|
-
// handle file stats and the parent readdir invalidation.
|
|
150
|
+
// Watchpack reports a watched directory whenever its contents change, and
|
|
151
|
+
// `fs.purge(dir)` matches by prefix, wiping every file's stat cache with it.
|
|
152
|
+
// Only its own entry is purged; the batch's file events carry the rest.
|
|
159
153
|
/**
|
|
160
154
|
* @param {Changes | null | undefined} changes changes set
|
|
161
155
|
* @param {Removals | null | undefined} removals removals set
|