@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
|
@@ -12,8 +12,11 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
|
12
12
|
const { InlinedUsedName } = require("../optimize/InlineExports");
|
|
13
13
|
const makeSerializable = require("../util/makeSerializable");
|
|
14
14
|
const { propertyAccess } = require("../util/property");
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
|
|
17
|
+
|
|
18
|
+
const { ExportBindingType } = HarmonyExportInitFragment;
|
|
19
|
+
|
|
17
20
|
const NullDependency = require("./NullDependency");
|
|
18
21
|
|
|
19
22
|
const DEFAULT_EXPORT_NAME = "default";
|
|
@@ -26,8 +29,8 @@ const DEFAULT_EXPORT_NAME = "default";
|
|
|
26
29
|
/** @import { InlinedValue } from "../optimize/InlineExports" */
|
|
27
30
|
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
28
31
|
/** @typedef {string | { id?: string | undefined, range: Range, prefix: string, suffix: string }} DeclarationId */
|
|
29
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, Range, string, DeclarationId | undefined, boolean]>} ObjectDeserializerContext */
|
|
30
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, Range, string, DeclarationId | undefined, boolean]>} ObjectSerializerContext */
|
|
32
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, Range, string, DeclarationId | undefined, boolean, boolean]>} ObjectDeserializerContext */
|
|
33
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, Range, string, DeclarationId | undefined, boolean, boolean]>} ObjectSerializerContext */
|
|
31
34
|
/** @import { ExportMap } from "./HarmonyExportInitFragment" */
|
|
32
35
|
/**
|
|
33
36
|
* @import {
|
|
@@ -54,6 +57,8 @@ class HarmonyExportExpressionDependency extends NullDependency {
|
|
|
54
57
|
this.constValue = constValue;
|
|
55
58
|
/** @type {boolean} */
|
|
56
59
|
this.isAnonymousDefault = false;
|
|
60
|
+
/** @type {boolean} */
|
|
61
|
+
this.isAnonymousDefaultClass = false;
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
get type() {
|
|
@@ -126,6 +131,7 @@ class HarmonyExportExpressionDependency extends NullDependency {
|
|
|
126
131
|
.write(this.prefix)
|
|
127
132
|
.write(this.declarationId)
|
|
128
133
|
.write(this.isAnonymousDefault)
|
|
134
|
+
.write(this.isAnonymousDefaultClass)
|
|
129
135
|
.write(this.constValue);
|
|
130
136
|
super.serialize(context);
|
|
131
137
|
}
|
|
@@ -145,8 +151,10 @@ class HarmonyExportExpressionDependency extends NullDependency {
|
|
|
145
151
|
const c4 = c3.rest;
|
|
146
152
|
this.isAnonymousDefault = c4.read();
|
|
147
153
|
const c5 = c4.rest;
|
|
148
|
-
this.
|
|
149
|
-
|
|
154
|
+
this.isAnonymousDefaultClass = c5.read();
|
|
155
|
+
const c6 = c5.rest;
|
|
156
|
+
this.constValue = c6.read();
|
|
157
|
+
super.deserialize(c6.rest);
|
|
150
158
|
}
|
|
151
159
|
}
|
|
152
160
|
|
|
@@ -208,7 +216,10 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
|
|
|
208
216
|
} else if (used) {
|
|
209
217
|
/** @type {ExportMap} */
|
|
210
218
|
const map = new Map();
|
|
211
|
-
map.set(used,
|
|
219
|
+
map.set(used, {
|
|
220
|
+
value: `/* export default binding */ ${name}`,
|
|
221
|
+
type: ExportBindingType.Getter
|
|
222
|
+
});
|
|
212
223
|
initFragments.push(new HarmonyExportInitFragment(exportsName, map));
|
|
213
224
|
}
|
|
214
225
|
|
|
@@ -253,31 +264,19 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
|
|
|
253
264
|
defaultIsUsed = true;
|
|
254
265
|
runtimeRequirements.add(RuntimeGlobals.exports);
|
|
255
266
|
// `export default <expr>` binds an immutable const declaration
|
|
256
|
-
const
|
|
267
|
+
const valueFormat =
|
|
257
268
|
/** @type {import("../Module").BuildInfo} */ (module.buildInfo)
|
|
258
269
|
.isCircular === false;
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
],
|
|
270
|
-
true
|
|
271
|
-
)
|
|
272
|
-
);
|
|
273
|
-
} else {
|
|
274
|
-
/** @type {ExportMap} */
|
|
275
|
-
const map = new Map();
|
|
276
|
-
map.set(used, name);
|
|
277
|
-
initFragments.push(
|
|
278
|
-
new HarmonyExportInitFragment(exportsName, map)
|
|
279
|
-
);
|
|
280
|
-
}
|
|
270
|
+
|
|
271
|
+
/** @type {ExportMap} */
|
|
272
|
+
const map = new Map();
|
|
273
|
+
map.set(used, {
|
|
274
|
+
value: name,
|
|
275
|
+
type: valueFormat
|
|
276
|
+
? ExportBindingType.Value
|
|
277
|
+
: ExportBindingType.Getter
|
|
278
|
+
});
|
|
279
|
+
initFragments.push(new HarmonyExportInitFragment(exportsName, map));
|
|
281
280
|
} else {
|
|
282
281
|
content = `/* unused harmony default export */ var ${name} = `;
|
|
283
282
|
}
|
|
@@ -294,10 +293,9 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
|
|
|
294
293
|
} else if (used) {
|
|
295
294
|
defaultIsUsed = true;
|
|
296
295
|
runtimeRequirements.add(RuntimeGlobals.exports);
|
|
297
|
-
//
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
// assignment target instead. See issue #20793.
|
|
296
|
+
// The TDZ is not reproduced here, `const` being unavailable. No local
|
|
297
|
+
// binding is created either, so the anonymous-default `.name` fix-up
|
|
298
|
+
// below names the assignment target instead. See issue #20793.
|
|
301
299
|
name = `${exportsName}${propertyAccess(
|
|
302
300
|
typeof used === "string" ? [used] : used
|
|
303
301
|
)}`;
|
|
@@ -308,6 +306,22 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
|
|
|
308
306
|
}
|
|
309
307
|
|
|
310
308
|
if (dep.range) {
|
|
309
|
+
// `export default class {}` names the class "default", and a static
|
|
310
|
+
// initializer reads that name before any later fix-up could run, so
|
|
311
|
+
// the class is created as a property of that name instead.
|
|
312
|
+
if (dep.isAnonymousDefaultClass) {
|
|
313
|
+
source.replace(
|
|
314
|
+
dep.rangeStatement[0],
|
|
315
|
+
dep.range[0] - 1,
|
|
316
|
+
`${content}{ ${DEFAULT_EXPORT_NAME}: (${dep.prefix}`
|
|
317
|
+
);
|
|
318
|
+
source.replace(
|
|
319
|
+
dep.range[1],
|
|
320
|
+
dep.rangeStatement[1] - 0.5,
|
|
321
|
+
`) }.${DEFAULT_EXPORT_NAME};`
|
|
322
|
+
);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
311
325
|
source.replace(
|
|
312
326
|
dep.rangeStatement[0],
|
|
313
327
|
dep.range[0] - 1,
|
|
@@ -14,9 +14,11 @@ const Template = require("../Template");
|
|
|
14
14
|
const {
|
|
15
15
|
InlinedUsedName,
|
|
16
16
|
isExportInlined,
|
|
17
|
-
isInlineEnabled
|
|
17
|
+
isInlineEnabled,
|
|
18
|
+
isInlineExportsEnabled
|
|
18
19
|
} = require("../optimize/InlineExports");
|
|
19
20
|
const {
|
|
21
|
+
getKnownExportNames,
|
|
20
22
|
getMakeDeferredNamespaceModeFromExportsType
|
|
21
23
|
} = require("../runtime/MakeDeferredNamespaceObjectRuntime");
|
|
22
24
|
const { countIterable } = require("../util/IterableHelpers");
|
|
@@ -29,6 +31,9 @@ const {
|
|
|
29
31
|
keyToRuntime
|
|
30
32
|
} = require("../util/runtime");
|
|
31
33
|
const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
|
|
34
|
+
|
|
35
|
+
const { ExportBindingType } = HarmonyExportInitFragment;
|
|
36
|
+
|
|
32
37
|
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
33
38
|
const HarmonyLinkingError = require("./HarmonyLinkingError");
|
|
34
39
|
const { ImportPhaseUtils } = require("./ImportPhase");
|
|
@@ -44,7 +49,8 @@ const processExportInfo = require("./processExportInfo");
|
|
|
44
49
|
* RawReferencedExports,
|
|
45
50
|
* ReferencedExports,
|
|
46
51
|
* TRANSITIVE,
|
|
47
|
-
* ExportInfoName
|
|
52
|
+
* ExportInfoName,
|
|
53
|
+
* UpdateHashContext
|
|
48
54
|
* } from "../Dependency"
|
|
49
55
|
*/
|
|
50
56
|
/** @import { DependencyTemplateContext } from "../DependencyTemplate" */
|
|
@@ -58,6 +64,7 @@ const processExportInfo = require("./processExportInfo");
|
|
|
58
64
|
* } from "../Module"
|
|
59
65
|
*/
|
|
60
66
|
/** @import ModuleGraph from "../ModuleGraph" */
|
|
67
|
+
/** @import Hash from "../util/Hash" */
|
|
61
68
|
/**
|
|
62
69
|
* @import ModuleGraphConnection, {
|
|
63
70
|
* ConnectionState
|
|
@@ -829,6 +836,31 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|
|
829
836
|
};
|
|
830
837
|
}
|
|
831
838
|
|
|
839
|
+
/**
|
|
840
|
+
* Updates the hash with the data contributed by this instance.
|
|
841
|
+
* @param {Hash} hash hash to be updated
|
|
842
|
+
* @param {UpdateHashContext} context context
|
|
843
|
+
* @returns {void}
|
|
844
|
+
*/
|
|
845
|
+
updateHash(hash, context) {
|
|
846
|
+
const { chunkGraph, runtime } = context;
|
|
847
|
+
const moduleGraph = chunkGraph.moduleGraph;
|
|
848
|
+
if (!isInlineExportsEnabled(moduleGraph)) return;
|
|
849
|
+
const module = moduleGraph.getModule(this);
|
|
850
|
+
if (!module || !isInlineEnabled(module)) return;
|
|
851
|
+
const mode = this.getMode(moduleGraph, runtime);
|
|
852
|
+
if (mode.type !== "normal-reexport") return;
|
|
853
|
+
const exportsInfo = moduleGraph.getExportsInfo(module);
|
|
854
|
+
for (const item of /** @type {NormalReexportItem[]} */ (mode.items)) {
|
|
855
|
+
if (item.hidden || item.checked) continue;
|
|
856
|
+
const usedName = exportsInfo.getUsedName(item.ids, runtime);
|
|
857
|
+
if (usedName instanceof InlinedUsedName) {
|
|
858
|
+
hash.update(`${item.name}:${item.ids.join(".")}:`);
|
|
859
|
+
usedName.updateHash(hash);
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
|
|
832
864
|
/**
|
|
833
865
|
* Gets module evaluation side effects state.
|
|
834
866
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
@@ -1515,10 +1547,9 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1515
1547
|
}
|
|
1516
1548
|
|
|
1517
1549
|
case "reexport-fake-namespace-object":
|
|
1518
|
-
// `${name}_namespace_cache` needs an identifier to suffix,
|
|
1519
|
-
//
|
|
1520
|
-
//
|
|
1521
|
-
// the exports type, which is what `fakeType` mirrors.
|
|
1550
|
+
// `${name}_namespace_cache` needs an identifier to suffix, and an in-scope
|
|
1551
|
+
// target is an expression. The concatenation already memoizes the same
|
|
1552
|
+
// object, its interop namespace taking the mode `fakeType` mirrors.
|
|
1522
1553
|
if (inScope) {
|
|
1523
1554
|
initFragments.push(
|
|
1524
1555
|
this.getReexportFragment(
|
|
@@ -1581,7 +1612,19 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1581
1612
|
);
|
|
1582
1613
|
break;
|
|
1583
1614
|
|
|
1584
|
-
case "reexport-namespace-object":
|
|
1615
|
+
case "reexport-namespace-object": {
|
|
1616
|
+
let value = namespaceImportVar;
|
|
1617
|
+
|
|
1618
|
+
// The re-exported binding is the namespace itself, so it has to be
|
|
1619
|
+
// the same object every importer of that module is handed.
|
|
1620
|
+
if (
|
|
1621
|
+
importedModule.buildInfo &&
|
|
1622
|
+
importedModule.buildInfo.specNamespaceObject
|
|
1623
|
+
) {
|
|
1624
|
+
runtimeRequirements.add(RuntimeGlobals.specNamespaceObject);
|
|
1625
|
+
value = `${RuntimeGlobals.specNamespaceObject}(${value})`;
|
|
1626
|
+
}
|
|
1627
|
+
|
|
1585
1628
|
initFragments.push(
|
|
1586
1629
|
this.getReexportFragment(
|
|
1587
1630
|
module,
|
|
@@ -1589,12 +1632,13 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1589
1632
|
moduleGraph
|
|
1590
1633
|
.getExportsInfo(module)
|
|
1591
1634
|
.getUsedName(/** @type {string} */ (mode.name), runtime),
|
|
1592
|
-
|
|
1635
|
+
value,
|
|
1593
1636
|
"",
|
|
1594
1637
|
runtimeRequirements
|
|
1595
1638
|
)
|
|
1596
1639
|
);
|
|
1597
1640
|
break;
|
|
1641
|
+
}
|
|
1598
1642
|
|
|
1599
1643
|
case "normal-reexport": {
|
|
1600
1644
|
// loop-invariants hoisted out of the per-item loop below (a barrel
|
|
@@ -1729,7 +1773,10 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1729
1773
|
|
|
1730
1774
|
/** @type {ExportMap} */
|
|
1731
1775
|
const map = new Map();
|
|
1732
|
-
map.set(key,
|
|
1776
|
+
map.set(key, {
|
|
1777
|
+
value: `/* ${comment} */ ${returnValue}`,
|
|
1778
|
+
type: ExportBindingType.Getter
|
|
1779
|
+
});
|
|
1733
1780
|
|
|
1734
1781
|
return new HarmonyExportInitFragment(module.exportsArgument, map);
|
|
1735
1782
|
}
|
|
@@ -1756,12 +1803,12 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1756
1803
|
|
|
1757
1804
|
/** @type {ExportMap} */
|
|
1758
1805
|
const map = new Map();
|
|
1759
|
-
map.set(
|
|
1760
|
-
|
|
1761
|
-
`/* reexport fake namespace object from non-harmony */ ${name}_namespace_cache || (${name}_namespace_cache = ${
|
|
1806
|
+
map.set(key, {
|
|
1807
|
+
value: `/* reexport fake namespace object from non-harmony */ ${name}_namespace_cache || (${name}_namespace_cache = ${
|
|
1762
1808
|
RuntimeGlobals.createFakeNamespaceObject
|
|
1763
|
-
}(${name}${fakeType ? `, ${fakeType}` : ""}))
|
|
1764
|
-
|
|
1809
|
+
}(${name}${fakeType ? `, ${fakeType}` : ""}))`,
|
|
1810
|
+
type: ExportBindingType.Getter
|
|
1811
|
+
});
|
|
1765
1812
|
|
|
1766
1813
|
return [
|
|
1767
1814
|
new InitFragment(
|
|
@@ -1800,10 +1847,20 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|
|
1800
1847
|
const map = new Map();
|
|
1801
1848
|
const moduleId = JSON.stringify(chunkGraph.getModuleId(module));
|
|
1802
1849
|
const mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1850
|
+
const names = getKnownExportNames(
|
|
1851
|
+
chunkGraph.moduleGraph,
|
|
1852
|
+
module,
|
|
1853
|
+
exportsType
|
|
1854
|
+
);
|
|
1855
|
+
runtimeRequirements.add(
|
|
1856
|
+
names
|
|
1857
|
+
? RuntimeGlobals.hasSealedDeferredNamespace
|
|
1858
|
+
: RuntimeGlobals.hasSynthesizedDeferredNamespace
|
|
1806
1859
|
);
|
|
1860
|
+
map.set(key, {
|
|
1861
|
+
value: `/* reexport deferred namespace object */ ${name}_deferred_namespace_cache || (${name}_deferred_namespace_cache = ${RuntimeGlobals.makeDeferredNamespaceObject}(${moduleId}, ${mode}${names ? `, ${JSON.stringify(names)}` : ""}))`,
|
|
1862
|
+
type: ExportBindingType.Getter
|
|
1863
|
+
});
|
|
1807
1864
|
|
|
1808
1865
|
return [
|
|
1809
1866
|
new InitFragment(
|
|
@@ -35,9 +35,13 @@ const joinIterableWithComma = (iterable) => {
|
|
|
35
35
|
return str;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
const ExportBindingType = Object.freeze({
|
|
39
|
+
Getter: 0b00,
|
|
40
|
+
Value: 0b01
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
/** @typedef {Map<UsedName, { value: string, type: typeof ExportBindingType.Getter | typeof ExportBindingType.Value }>} ExportMap */
|
|
39
44
|
/** @typedef {Set<string>} UnusedExports */
|
|
40
|
-
/** @import { OnDemandGeneration } from "./ExportBindingInitFragment" */
|
|
41
45
|
|
|
42
46
|
/** @type {ExportMap} */
|
|
43
47
|
const EMPTY_MAP = new Map();
|
|
@@ -54,13 +58,13 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
54
58
|
* @param {string} exportsArgument the exports identifier
|
|
55
59
|
* @param {ExportMap} exportMap mapping from used name to exposed variable name
|
|
56
60
|
* @param {UnusedExports} unusedExports list of unused export names
|
|
57
|
-
* @param {
|
|
61
|
+
* @param {boolean} onDemand leave the call out of the source and hand it over in the code generation data (see `KnownMeta.onDemandExports`)
|
|
58
62
|
*/
|
|
59
63
|
constructor(
|
|
60
64
|
exportsArgument,
|
|
61
65
|
exportMap = EMPTY_MAP,
|
|
62
66
|
unusedExports = EMPTY_SET,
|
|
63
|
-
onDemand =
|
|
67
|
+
onDemand = false
|
|
64
68
|
) {
|
|
65
69
|
super(undefined, InitFragment.STAGE_HARMONY_EXPORTS, 1, "harmony-exports");
|
|
66
70
|
/** @type {string} */
|
|
@@ -69,8 +73,51 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
69
73
|
this.exportMap = exportMap;
|
|
70
74
|
/** @type {UnusedExports} */
|
|
71
75
|
this.unusedExports = unusedExports;
|
|
72
|
-
/** @type {
|
|
76
|
+
/** @type {boolean} */
|
|
73
77
|
this.onDemand = onDemand;
|
|
78
|
+
|
|
79
|
+
this._generated = false;
|
|
80
|
+
this._defsValue = undefined;
|
|
81
|
+
this._defsGetter = undefined;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Returns the source code that will be included as initialization code.
|
|
86
|
+
* @param {GenerateContext} context context
|
|
87
|
+
* @returns {void}
|
|
88
|
+
*/
|
|
89
|
+
_generate({ runtimeTemplate }) {
|
|
90
|
+
if (this._generated) return;
|
|
91
|
+
this._generated = true;
|
|
92
|
+
|
|
93
|
+
if (this.exportMap.size > 0) {
|
|
94
|
+
/** @type {string[]} */
|
|
95
|
+
const _defsValue = [];
|
|
96
|
+
const _defsGetter = [];
|
|
97
|
+
const orderedExportMap =
|
|
98
|
+
this.exportMap.size > 1
|
|
99
|
+
? [...this.exportMap].sort(([a], [b]) => (a < b ? -1 : 1))
|
|
100
|
+
: this.exportMap;
|
|
101
|
+
for (const [key, { value, type }] of orderedExportMap) {
|
|
102
|
+
switch (type) {
|
|
103
|
+
case ExportBindingType.Getter:
|
|
104
|
+
_defsGetter.push(
|
|
105
|
+
`\n/* harmony export */ ${propertyName(
|
|
106
|
+
/** @type {string} */ (key)
|
|
107
|
+
)}: ${runtimeTemplate.returningFunction(value)}`
|
|
108
|
+
);
|
|
109
|
+
break;
|
|
110
|
+
|
|
111
|
+
case ExportBindingType.Value:
|
|
112
|
+
_defsValue.push(
|
|
113
|
+
`\n/* harmony export */ ${JSON.stringify(key)}, 0, ${value}`
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
this._defsGetter = _defsGetter;
|
|
119
|
+
this._defsValue = _defsValue;
|
|
120
|
+
}
|
|
74
121
|
}
|
|
75
122
|
|
|
76
123
|
/**
|
|
@@ -85,12 +132,15 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
85
132
|
/** @type {undefined | UnusedExports} */
|
|
86
133
|
let unusedExports;
|
|
87
134
|
let unusedExportsOwned = false;
|
|
135
|
+
/** @type {boolean} */
|
|
136
|
+
let onDemand = false;
|
|
88
137
|
|
|
89
138
|
for (const fragment of fragments) {
|
|
90
139
|
if (fragment.exportMap.size !== 0) {
|
|
91
140
|
if (exportMap === undefined) {
|
|
92
141
|
exportMap = fragment.exportMap;
|
|
93
142
|
exportMapOwned = false;
|
|
143
|
+
onDemand = fragment.onDemand;
|
|
94
144
|
} else {
|
|
95
145
|
if (!exportMapOwned) {
|
|
96
146
|
exportMap = new Map(exportMap);
|
|
@@ -98,6 +148,7 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
98
148
|
}
|
|
99
149
|
for (const [key, value] of fragment.exportMap) {
|
|
100
150
|
if (!exportMap.has(key)) exportMap.set(key, value);
|
|
151
|
+
onDemand = onDemand || fragment.onDemand;
|
|
101
152
|
}
|
|
102
153
|
}
|
|
103
154
|
}
|
|
@@ -120,7 +171,7 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
120
171
|
this.exportsArgument,
|
|
121
172
|
exportMap,
|
|
122
173
|
unusedExports,
|
|
123
|
-
|
|
174
|
+
onDemand
|
|
124
175
|
);
|
|
125
176
|
}
|
|
126
177
|
|
|
@@ -167,7 +218,10 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
167
218
|
* @param {GenerateContext} context context
|
|
168
219
|
* @returns {string | Source | undefined} the source code that will be included as initialization code
|
|
169
220
|
*/
|
|
170
|
-
getContent(
|
|
221
|
+
getContent(context) {
|
|
222
|
+
this._generate(context);
|
|
223
|
+
|
|
224
|
+
const { runtimeRequirements, getData } = context;
|
|
171
225
|
const unusedPart =
|
|
172
226
|
this.unusedExports.size > 1
|
|
173
227
|
? `/* unused harmony exports ${joinIterableWithComma(
|
|
@@ -177,35 +231,68 @@ class HarmonyExportInitFragment extends InitFragment {
|
|
|
177
231
|
? `/* unused harmony export ${first(this.unusedExports)} */\n`
|
|
178
232
|
: "";
|
|
179
233
|
let definePart = "";
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const definitions = [];
|
|
183
|
-
const orderedExportMap =
|
|
184
|
-
this.exportMap.size > 1
|
|
185
|
-
? [...this.exportMap].sort(([a], [b]) => (a < b ? -1 : 1))
|
|
186
|
-
: this.exportMap;
|
|
187
|
-
for (const [key, value] of orderedExportMap) {
|
|
188
|
-
definitions.push(
|
|
189
|
-
`\n/* harmony export */ ${propertyName(
|
|
190
|
-
/** @type {string} */ (key)
|
|
191
|
-
)}: ${runtimeTemplate.returningFunction(value)}`
|
|
192
|
-
);
|
|
193
|
-
}
|
|
234
|
+
|
|
235
|
+
if (this._defsGetter && this._defsGetter.length) {
|
|
194
236
|
// Requested even when the call is taken over below: whoever took it may still
|
|
195
237
|
// emit it, and by then the requirement set is closed.
|
|
196
238
|
runtimeRequirements.add(RuntimeGlobals.exports);
|
|
197
239
|
runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
|
|
198
240
|
definePart = `/* harmony export */ ${
|
|
199
241
|
RuntimeGlobals.definePropertyGetters
|
|
200
|
-
}(${this.exportsArgument}, {${
|
|
242
|
+
}(${this.exportsArgument}, {${this._defsGetter.join(
|
|
201
243
|
","
|
|
202
244
|
)}\n/* harmony export */ });\n`;
|
|
203
|
-
if (this.onDemand !== undefined
|
|
245
|
+
if (this.onDemand && getData !== undefined) {
|
|
246
|
+
const data = getData();
|
|
247
|
+
const before = data.get("exportsSource");
|
|
248
|
+
data.set(
|
|
249
|
+
"exportsSource",
|
|
250
|
+
before ? `${before}${definePart}` : definePart
|
|
251
|
+
);
|
|
204
252
|
definePart = "";
|
|
205
253
|
}
|
|
206
254
|
}
|
|
255
|
+
|
|
207
256
|
return `${definePart}${unusedPart}`;
|
|
208
257
|
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Returns the source code that will be included at the end of the module.
|
|
261
|
+
* @param {GenerateContext} context context
|
|
262
|
+
* @returns {string | Source | undefined} the source code that will be included at the end of the module
|
|
263
|
+
*/
|
|
264
|
+
getEndContent({ runtimeRequirements, getData }) {
|
|
265
|
+
let definePart = "";
|
|
266
|
+
|
|
267
|
+
if (this._defsValue && this._defsValue.length) {
|
|
268
|
+
// Requested even when the call is taken over below: whoever took it may still
|
|
269
|
+
// emit it, and by then the requirement set is closed.
|
|
270
|
+
runtimeRequirements.add(RuntimeGlobals.exports);
|
|
271
|
+
runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
|
|
272
|
+
// Only this fragment emits the array form, so the runtime helper drops the
|
|
273
|
+
// branch reading it unless this asks for it.
|
|
274
|
+
runtimeRequirements.add(RuntimeGlobals.definePropertyGettersFromArray);
|
|
275
|
+
definePart = `/* harmony export */ ${
|
|
276
|
+
RuntimeGlobals.definePropertyGetters
|
|
277
|
+
}(${this.exportsArgument}, [${this._defsValue.join(",")}\n/* harmony export */ ]);\n`;
|
|
278
|
+
|
|
279
|
+
if (this.onDemand && getData !== undefined) {
|
|
280
|
+
const data = getData();
|
|
281
|
+
const before = data.get("exportsBindingSource");
|
|
282
|
+
data.set(
|
|
283
|
+
"exportsBindingSource",
|
|
284
|
+
before ? `${before}${definePart}` : definePart
|
|
285
|
+
);
|
|
286
|
+
definePart = "";
|
|
287
|
+
} else {
|
|
288
|
+
definePart = `\n${definePart}`;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return definePart;
|
|
293
|
+
}
|
|
209
294
|
}
|
|
210
295
|
|
|
211
296
|
module.exports = HarmonyExportInitFragment;
|
|
297
|
+
|
|
298
|
+
HarmonyExportInitFragment.ExportBindingType = ExportBindingType;
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
const Dependency = require("../Dependency");
|
|
9
9
|
const { InlinedUsedName } = require("../optimize/InlineExports");
|
|
10
10
|
const makeSerializable = require("../util/makeSerializable");
|
|
11
|
-
const memoize = require("../util/memoize");
|
|
12
|
-
const ExportBindingInitFragment = require("./ExportBindingInitFragment");
|
|
13
11
|
const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
|
|
12
|
+
|
|
13
|
+
const { ExportBindingType } = HarmonyExportInitFragment;
|
|
14
|
+
|
|
14
15
|
const NullDependency = require("./NullDependency");
|
|
15
16
|
|
|
16
17
|
/** @import { ReplaceSource } from "webpack-sources" */
|
|
@@ -28,11 +29,6 @@ const NullDependency = require("./NullDependency");
|
|
|
28
29
|
* } from "../javascript/JavascriptModule"
|
|
29
30
|
*/
|
|
30
31
|
|
|
31
|
-
// Required here rather than at the top: the plugin reaches back into the dependencies.
|
|
32
|
-
const getJavascriptModulesPlugin = memoize(() =>
|
|
33
|
-
require("../javascript/JavascriptModulesPlugin")
|
|
34
|
-
);
|
|
35
|
-
|
|
36
32
|
class HarmonyExportSpecifierDependency extends NullDependency {
|
|
37
33
|
/**
|
|
38
34
|
* Creates an instance of HarmonyExportSpecifierDependency.
|
|
@@ -147,14 +143,7 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
|
|
|
147
143
|
apply(
|
|
148
144
|
dependency,
|
|
149
145
|
source,
|
|
150
|
-
{
|
|
151
|
-
module,
|
|
152
|
-
moduleGraph,
|
|
153
|
-
initFragments,
|
|
154
|
-
runtime,
|
|
155
|
-
runtimeTemplate,
|
|
156
|
-
concatenationScope
|
|
157
|
-
}
|
|
146
|
+
{ module, moduleGraph, initFragments, runtime, concatenationScope }
|
|
158
147
|
) {
|
|
159
148
|
const dep = /** @type {HarmonyExportSpecifierDependency} */ (dependency);
|
|
160
149
|
// a wrapped module's bindings stay inside the wrapper, not in the shared scope
|
|
@@ -180,54 +169,32 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
|
|
|
180
169
|
return;
|
|
181
170
|
}
|
|
182
171
|
|
|
183
|
-
const
|
|
172
|
+
const valueFormat =
|
|
184
173
|
dep.constValue !== undefined &&
|
|
185
174
|
/** @type {import("../Module").BuildInfo} */ (module.buildInfo)
|
|
186
175
|
.isCircular === false;
|
|
187
176
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const
|
|
191
|
-
|
|
177
|
+
const meta = moduleGraph.getMetaIfExisting(module);
|
|
178
|
+
|
|
179
|
+
const onDemand =
|
|
180
|
+
!concatenationScope &&
|
|
181
|
+
meta !== undefined &&
|
|
182
|
+
meta.onDemandExports === true;
|
|
183
|
+
|
|
184
|
+
/** @type {ExportMap} */
|
|
185
|
+
const map = new Map();
|
|
186
|
+
map.set(used, {
|
|
187
|
+
value: `/* binding */ ${dep.id}`,
|
|
188
|
+
type: valueFormat ? ExportBindingType.Value : ExportBindingType.Getter
|
|
189
|
+
});
|
|
190
|
+
initFragments.push(
|
|
191
|
+
new HarmonyExportInitFragment(
|
|
192
|
+
module.exportsArgument,
|
|
193
|
+
map,
|
|
194
|
+
undefined,
|
|
195
|
+
onDemand
|
|
196
|
+
)
|
|
192
197
|
);
|
|
193
|
-
const onDemand = hooks.onDemandExportsGeneration.isUsed()
|
|
194
|
-
? (/** @type {string} */ definition, /** @type {boolean} */ placeAtEnd) =>
|
|
195
|
-
hooks.onDemandExportsGeneration.call(
|
|
196
|
-
module,
|
|
197
|
-
runtime,
|
|
198
|
-
definition,
|
|
199
|
-
placeAtEnd
|
|
200
|
-
) === true
|
|
201
|
-
: undefined;
|
|
202
|
-
|
|
203
|
-
if (canUseValueBinding) {
|
|
204
|
-
initFragments.push(
|
|
205
|
-
new ExportBindingInitFragment(
|
|
206
|
-
module.exportsArgument,
|
|
207
|
-
[
|
|
208
|
-
{
|
|
209
|
-
name: used,
|
|
210
|
-
value: `/* binding */ ${dep.id}`,
|
|
211
|
-
bindingType: "value"
|
|
212
|
-
}
|
|
213
|
-
],
|
|
214
|
-
true,
|
|
215
|
-
onDemand
|
|
216
|
-
)
|
|
217
|
-
);
|
|
218
|
-
} else {
|
|
219
|
-
/** @type {ExportMap} */
|
|
220
|
-
const map = new Map();
|
|
221
|
-
map.set(used, `/* binding */ ${dep.id}`);
|
|
222
|
-
initFragments.push(
|
|
223
|
-
new HarmonyExportInitFragment(
|
|
224
|
-
module.exportsArgument,
|
|
225
|
-
map,
|
|
226
|
-
undefined,
|
|
227
|
-
onDemand
|
|
228
|
-
)
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
198
|
}
|
|
232
199
|
};
|
|
233
200
|
|