@eriche/webpack 4.47.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/LICENSE +20 -0
- package/README.md +784 -0
- package/SECURITY.md +9 -0
- package/bin/webpack.js +171 -0
- package/buildin/amd-define.js +3 -0
- package/buildin/amd-options.js +2 -0
- package/buildin/global.js +20 -0
- package/buildin/harmony-module.js +24 -0
- package/buildin/module.js +22 -0
- package/buildin/system.js +7 -0
- package/declarations/WebpackOptions.d.ts +1466 -0
- package/declarations/plugins/BannerPlugin.d.ts +49 -0
- package/declarations/plugins/DllPlugin.d.ts +32 -0
- package/declarations/plugins/DllReferencePlugin.d.ts +126 -0
- package/declarations/plugins/HashedModuleIdsPlugin.d.ts +24 -0
- package/declarations/plugins/IgnorePlugin.d.ts +27 -0
- package/declarations/plugins/LoaderOptionsPlugin.d.ts +27 -0
- package/declarations/plugins/ProgressPlugin.d.ts +42 -0
- package/declarations/plugins/SourceMapDevToolPlugin.d.ts +94 -0
- package/declarations/plugins/WatchIgnorePlugin.d.ts +10 -0
- package/declarations/plugins/debug/ProfilingPlugin.d.ts +12 -0
- package/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts +24 -0
- package/declarations/plugins/optimize/LimitChunkCountPlugin.d.ts +16 -0
- package/declarations/plugins/optimize/MinChunkSizePlugin.d.ts +12 -0
- package/declarations/plugins/optimize/OccurrenceOrderChunkIdsPlugin.d.ts +12 -0
- package/declarations/plugins/optimize/OccurrenceOrderModuleIdsPlugin.d.ts +12 -0
- package/hot/dev-server.js +61 -0
- package/hot/emitter.js +2 -0
- package/hot/log-apply-result.js +44 -0
- package/hot/log.js +59 -0
- package/hot/only-dev-server.js +102 -0
- package/hot/poll.js +37 -0
- package/hot/signal.js +62 -0
- package/lib/APIPlugin.js +84 -0
- package/lib/AbstractMethodError.js +43 -0
- package/lib/AmdMainTemplatePlugin.js +106 -0
- package/lib/AsyncDependenciesBlock.js +110 -0
- package/lib/AsyncDependencyToInitialChunkError.js +31 -0
- package/lib/AutomaticPrefetchPlugin.js +57 -0
- package/lib/BannerPlugin.js +122 -0
- package/lib/BasicEvaluatedExpression.js +248 -0
- package/lib/CachePlugin.js +100 -0
- package/lib/CaseSensitiveModulesWarning.js +67 -0
- package/lib/Chunk.js +875 -0
- package/lib/ChunkGroup.js +513 -0
- package/lib/ChunkRenderError.js +32 -0
- package/lib/ChunkTemplate.js +87 -0
- package/lib/CommentCompilationWarning.js +32 -0
- package/lib/CommonJsStuffPlugin.js +116 -0
- package/lib/CompatibilityPlugin.js +70 -0
- package/lib/Compilation.js +2327 -0
- package/lib/Compiler.js +735 -0
- package/lib/ConcurrentCompilationError.js +19 -0
- package/lib/ConstPlugin.js +348 -0
- package/lib/ContextExclusionPlugin.js +28 -0
- package/lib/ContextModule.js +872 -0
- package/lib/ContextModuleFactory.js +262 -0
- package/lib/ContextReplacementPlugin.js +133 -0
- package/lib/DefinePlugin.js +289 -0
- package/lib/DelegatedModule.js +114 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -0
- package/lib/DelegatedPlugin.js +39 -0
- package/lib/DependenciesBlock.js +124 -0
- package/lib/DependenciesBlockVariable.js +72 -0
- package/lib/Dependency.js +89 -0
- package/lib/DllEntryPlugin.js +54 -0
- package/lib/DllModule.js +60 -0
- package/lib/DllModuleFactory.js +29 -0
- package/lib/DllPlugin.js +49 -0
- package/lib/DllReferencePlugin.js +156 -0
- package/lib/DynamicEntryPlugin.js +94 -0
- package/lib/EntryModuleNotFoundError.js +21 -0
- package/lib/EntryOptionPlugin.js +46 -0
- package/lib/Entrypoint.js +64 -0
- package/lib/EnvironmentPlugin.js +72 -0
- package/lib/ErrorHelpers.js +60 -0
- package/lib/EvalDevToolModulePlugin.js +27 -0
- package/lib/EvalDevToolModuleTemplatePlugin.js +61 -0
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +120 -0
- package/lib/EvalSourceMapDevToolPlugin.js +41 -0
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -0
- package/lib/ExtendedAPIPlugin.js +88 -0
- package/lib/ExternalModule.js +179 -0
- package/lib/ExternalModuleFactoryPlugin.js +110 -0
- package/lib/ExternalsPlugin.js +23 -0
- package/lib/FlagAllModulesAsUsedPlugin.js +38 -0
- package/lib/FlagDependencyExportsPlugin.js +174 -0
- package/lib/FlagDependencyUsagePlugin.js +116 -0
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -0
- package/lib/FunctionModulePlugin.js +19 -0
- package/lib/FunctionModuleTemplatePlugin.js +102 -0
- package/lib/Generator.js +60 -0
- package/lib/GraphHelpers.js +65 -0
- package/lib/HarmonyLinkingError.js +17 -0
- package/lib/HashedModuleIdsPlugin.js +63 -0
- package/lib/HotModuleReplacement.runtime.js +721 -0
- package/lib/HotModuleReplacementPlugin.js +425 -0
- package/lib/HotUpdateChunk.js +17 -0
- package/lib/HotUpdateChunkTemplate.js +78 -0
- package/lib/IgnorePlugin.js +91 -0
- package/lib/JavascriptGenerator.js +229 -0
- package/lib/JavascriptModulesPlugin.js +185 -0
- package/lib/JsonGenerator.js +57 -0
- package/lib/JsonModulesPlugin.js +30 -0
- package/lib/JsonParser.js +27 -0
- package/lib/LibManifestPlugin.js +90 -0
- package/lib/LibraryTemplatePlugin.js +186 -0
- package/lib/LoaderOptionsPlugin.js +58 -0
- package/lib/LoaderTargetPlugin.js +24 -0
- package/lib/MainTemplate.js +568 -0
- package/lib/MemoryOutputFileSystem.js +5 -0
- package/lib/Module.js +435 -0
- package/lib/ModuleBuildError.js +52 -0
- package/lib/ModuleDependencyError.js +35 -0
- package/lib/ModuleDependencyWarning.js +25 -0
- package/lib/ModuleError.js +36 -0
- package/lib/ModuleFilenameHelpers.js +179 -0
- package/lib/ModuleNotFoundError.js +23 -0
- package/lib/ModuleParseError.js +67 -0
- package/lib/ModuleReason.js +48 -0
- package/lib/ModuleTemplate.js +93 -0
- package/lib/ModuleWarning.js +36 -0
- package/lib/MultiCompiler.js +290 -0
- package/lib/MultiEntryPlugin.js +80 -0
- package/lib/MultiModule.js +87 -0
- package/lib/MultiModuleFactory.js +23 -0
- package/lib/MultiStats.js +92 -0
- package/lib/MultiWatching.js +50 -0
- package/lib/NamedChunksPlugin.js +29 -0
- package/lib/NamedModulesPlugin.js +58 -0
- package/lib/NoEmitOnErrorsPlugin.js +20 -0
- package/lib/NoModeWarning.js +23 -0
- package/lib/NodeStuffPlugin.js +118 -0
- package/lib/NormalModule.js +582 -0
- package/lib/NormalModuleFactory.js +528 -0
- package/lib/NormalModuleReplacementPlugin.js +51 -0
- package/lib/NullFactory.js +12 -0
- package/lib/OptionsApply.js +10 -0
- package/lib/OptionsDefaulter.js +141 -0
- package/lib/Parser.js +2454 -0
- package/lib/ParserHelpers.js +103 -0
- package/lib/PrefetchPlugin.js +37 -0
- package/lib/ProgressPlugin.js +307 -0
- package/lib/ProvidePlugin.js +86 -0
- package/lib/RawModule.js +56 -0
- package/lib/RecordIdsPlugin.js +236 -0
- package/lib/RemovedPluginError.js +11 -0
- package/lib/RequestShortener.js +83 -0
- package/lib/RequireJsStuffPlugin.js +66 -0
- package/lib/ResolverFactory.js +74 -0
- package/lib/RuleSet.js +567 -0
- package/lib/RuntimeTemplate.js +336 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -0
- package/lib/SingleEntryPlugin.js +63 -0
- package/lib/SizeFormatHelpers.js +24 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -0
- package/lib/SourceMapDevToolPlugin.js +418 -0
- package/lib/Stats.js +1685 -0
- package/lib/SystemMainTemplatePlugin.js +137 -0
- package/lib/Template.js +291 -0
- package/lib/TemplatedPathPlugin.js +188 -0
- package/lib/UmdMainTemplatePlugin.js +305 -0
- package/lib/UnsupportedFeatureWarning.js +30 -0
- package/lib/UseStrictPlugin.js +54 -0
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -0
- package/lib/WarnNoModeSetPlugin.js +17 -0
- package/lib/WatchIgnorePlugin.js +106 -0
- package/lib/Watching.js +211 -0
- package/lib/WebpackError.js +31 -0
- package/lib/WebpackOptionsApply.js +546 -0
- package/lib/WebpackOptionsDefaulter.js +391 -0
- package/lib/WebpackOptionsValidationError.js +390 -0
- package/lib/buildChunkGraph.js +712 -0
- package/lib/compareLocations.js +52 -0
- package/lib/debug/ProfilingPlugin.js +442 -0
- package/lib/dependencies/AMDDefineDependency.js +137 -0
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +336 -0
- package/lib/dependencies/AMDPlugin.js +249 -0
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -0
- package/lib/dependencies/AMDRequireContextDependency.js +20 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +47 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +274 -0
- package/lib/dependencies/AMDRequireDependency.js +135 -0
- package/lib/dependencies/AMDRequireItemDependency.js +22 -0
- package/lib/dependencies/CommonJsPlugin.js +158 -0
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -0
- package/lib/dependencies/CommonJsRequireDependency.js +22 -0
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +138 -0
- package/lib/dependencies/ConstDependency.js +33 -0
- package/lib/dependencies/ContextDependency.js +68 -0
- package/lib/dependencies/ContextDependencyHelpers.js +232 -0
- package/lib/dependencies/ContextDependencyTemplateAsId.js +43 -0
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +39 -0
- package/lib/dependencies/ContextElementDependency.js +21 -0
- package/lib/dependencies/CriticalDependencyWarning.js +20 -0
- package/lib/dependencies/DelegatedExportsDependency.js +33 -0
- package/lib/dependencies/DelegatedSourceDependency.js +18 -0
- package/lib/dependencies/DependencyReference.js +64 -0
- package/lib/dependencies/DllEntryDependency.js +20 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +48 -0
- package/lib/dependencies/HarmonyAcceptImportDependency.js +23 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +96 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +154 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +58 -0
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +659 -0
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +54 -0
- package/lib/dependencies/HarmonyImportDependency.js +109 -0
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -0
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +163 -0
- package/lib/dependencies/HarmonyInitDependency.js +60 -0
- package/lib/dependencies/HarmonyModulesPlugin.js +143 -0
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -0
- package/lib/dependencies/ImportContextDependency.js +23 -0
- package/lib/dependencies/ImportDependenciesBlock.js +18 -0
- package/lib/dependencies/ImportDependency.js +34 -0
- package/lib/dependencies/ImportEagerDependency.js +32 -0
- package/lib/dependencies/ImportParserPlugin.js +248 -0
- package/lib/dependencies/ImportPlugin.js +79 -0
- package/lib/dependencies/ImportWeakDependency.js +34 -0
- package/lib/dependencies/JsonExportsDependency.js +26 -0
- package/lib/dependencies/LoaderDependency.js +21 -0
- package/lib/dependencies/LoaderPlugin.js +115 -0
- package/lib/dependencies/LocalModule.js +23 -0
- package/lib/dependencies/LocalModuleDependency.js +28 -0
- package/lib/dependencies/LocalModulesHelpers.js +52 -0
- package/lib/dependencies/ModuleDependency.js +23 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -0
- package/lib/dependencies/MultiEntryDependency.js +25 -0
- package/lib/dependencies/NullDependency.js +20 -0
- package/lib/dependencies/PrefetchDependency.js +18 -0
- package/lib/dependencies/RequireContextDependency.js +22 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -0
- package/lib/dependencies/RequireContextPlugin.js +143 -0
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -0
- package/lib/dependencies/RequireEnsureDependency.js +58 -0
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -0
- package/lib/dependencies/RequireEnsurePlugin.js +74 -0
- package/lib/dependencies/RequireHeaderDependency.js +26 -0
- package/lib/dependencies/RequireIncludeDependency.js +39 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -0
- package/lib/dependencies/RequireIncludePlugin.js +61 -0
- package/lib/dependencies/RequireResolveContextDependency.js +23 -0
- package/lib/dependencies/RequireResolveDependency.js +22 -0
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +86 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -0
- package/lib/dependencies/SingleEntryDependency.js +21 -0
- package/lib/dependencies/SystemPlugin.js +122 -0
- package/lib/dependencies/UnsupportedDependency.js +27 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +31 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +54 -0
- package/lib/dependencies/WebpackMissingModule.js +20 -0
- package/lib/dependencies/getFunctionExpression.js +52 -0
- package/lib/formatLocation.js +75 -0
- package/lib/logging/Logger.js +128 -0
- package/lib/logging/createConsoleLogger.js +210 -0
- package/lib/logging/runtime.js +36 -0
- package/lib/logging/truncateArgs.js +76 -0
- package/lib/node/NodeChunkTemplatePlugin.js +31 -0
- package/lib/node/NodeEnvironmentPlugin.js +44 -0
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -0
- package/lib/node/NodeMainTemplate.runtime.js +32 -0
- package/lib/node/NodeMainTemplateAsync.runtime.js +50 -0
- package/lib/node/NodeMainTemplatePlugin.js +321 -0
- package/lib/node/NodeOutputFileSystem.js +22 -0
- package/lib/node/NodeSourcePlugin.js +141 -0
- package/lib/node/NodeTargetPlugin.js +19 -0
- package/lib/node/NodeTemplatePlugin.js +31 -0
- package/lib/node/NodeWatchFileSystem.js +109 -0
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -0
- package/lib/node/nodeConsole.js +135 -0
- package/lib/optimize/AggressiveMergingPlugin.js +87 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +294 -0
- package/lib/optimize/ChunkModuleIdRangePlugin.js +66 -0
- package/lib/optimize/ConcatenatedModule.js +1477 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -0
- package/lib/optimize/LimitChunkCountPlugin.js +231 -0
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -0
- package/lib/optimize/MinChunkSizePlugin.js +82 -0
- package/lib/optimize/MinMaxSizeWarning.js +29 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +485 -0
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +66 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +112 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -0
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -0
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -0
- package/lib/optimize/RuntimeChunkPlugin.js +41 -0
- package/lib/optimize/SideEffectsFlagPlugin.js +352 -0
- package/lib/optimize/SplitChunksPlugin.js +971 -0
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -0
- package/lib/performance/NoAsyncChunksWarning.js +21 -0
- package/lib/performance/SizeLimitsPlugin.js +125 -0
- package/lib/util/LazyBucketSortedSet.js +235 -0
- package/lib/util/Queue.js +46 -0
- package/lib/util/Semaphore.js +53 -0
- package/lib/util/SetHelpers.js +48 -0
- package/lib/util/SortableSet.js +140 -0
- package/lib/util/StackedSetMap.js +142 -0
- package/lib/util/TrackingSet.js +35 -0
- package/lib/util/cachedMerge.js +35 -0
- package/lib/util/cleverMerge.js +77 -0
- package/lib/util/createHash.js +174 -0
- package/lib/util/deterministicGrouping.js +274 -0
- package/lib/util/hash/BatchedHash.js +71 -0
- package/lib/util/hash/md4.js +25 -0
- package/lib/util/hash/wasm-hash.js +174 -0
- package/lib/util/identifier.js +127 -0
- package/lib/util/objectToMap.js +16 -0
- package/lib/validateSchema.js +67 -0
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -0
- package/lib/wasm/WasmFinalizeExportsPlugin.js +69 -0
- package/lib/wasm/WasmMainTemplatePlugin.js +341 -0
- package/lib/wasm/WebAssemblyGenerator.js +458 -0
- package/lib/wasm/WebAssemblyInInitialChunkError.js +88 -0
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +152 -0
- package/lib/wasm/WebAssemblyModulesPlugin.js +128 -0
- package/lib/wasm/WebAssemblyParser.js +175 -0
- package/lib/wasm/WebAssemblyUtils.js +59 -0
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -0
- package/lib/web/JsonpChunkTemplatePlugin.js +71 -0
- package/lib/web/JsonpExportMainTemplatePlugin.js +50 -0
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -0
- package/lib/web/JsonpMainTemplate.runtime.js +71 -0
- package/lib/web/JsonpMainTemplatePlugin.js +615 -0
- package/lib/web/JsonpTemplatePlugin.js +23 -0
- package/lib/web/WebEnvironmentPlugin.js +18 -0
- package/lib/webpack.js +206 -0
- package/lib/webpack.web.js +31 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -0
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -0
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +73 -0
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +192 -0
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -0
- package/package.json +211 -0
- package/schemas/WebpackOptions.json +2285 -0
- package/schemas/ajv.absolutePath.js +57 -0
- package/schemas/plugins/BannerPlugin.json +101 -0
- package/schemas/plugins/DllPlugin.json +36 -0
- package/schemas/plugins/DllReferencePlugin.json +205 -0
- package/schemas/plugins/HashedModuleIdsPlugin.json +26 -0
- package/schemas/plugins/IgnorePlugin.json +37 -0
- package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
- package/schemas/plugins/ProgressPlugin.json +52 -0
- package/schemas/plugins/SourceMapDevToolPlugin.json +185 -0
- package/schemas/plugins/WatchIgnorePlugin.json +18 -0
- package/schemas/plugins/debug/ProfilingPlugin.json +13 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +16 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +12 -0
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +11 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +11 -0
- package/web_modules/node-libs-browser.js +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const Queue = require("./util/Queue");
|
|
8
|
+
|
|
9
|
+
const addToSet = (a, b) => {
|
|
10
|
+
for (const item of b) {
|
|
11
|
+
a.add(item);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
class FlagDependencyExportsPlugin {
|
|
16
|
+
apply(compiler) {
|
|
17
|
+
compiler.hooks.compilation.tap(
|
|
18
|
+
"FlagDependencyExportsPlugin",
|
|
19
|
+
compilation => {
|
|
20
|
+
compilation.hooks.finishModules.tap(
|
|
21
|
+
"FlagDependencyExportsPlugin",
|
|
22
|
+
modules => {
|
|
23
|
+
const dependencies = new Map();
|
|
24
|
+
|
|
25
|
+
const queue = new Queue();
|
|
26
|
+
|
|
27
|
+
let module;
|
|
28
|
+
let moduleWithExports;
|
|
29
|
+
let moduleProvidedExports;
|
|
30
|
+
let providedExportsAreTemporary;
|
|
31
|
+
|
|
32
|
+
const processDependenciesBlock = depBlock => {
|
|
33
|
+
for (const dep of depBlock.dependencies) {
|
|
34
|
+
if (processDependency(dep)) return true;
|
|
35
|
+
}
|
|
36
|
+
for (const variable of depBlock.variables) {
|
|
37
|
+
for (const dep of variable.dependencies) {
|
|
38
|
+
if (processDependency(dep)) return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const block of depBlock.blocks) {
|
|
42
|
+
if (processDependenciesBlock(block)) return true;
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const processDependency = dep => {
|
|
48
|
+
const exportDesc = dep.getExports && dep.getExports();
|
|
49
|
+
if (!exportDesc) return;
|
|
50
|
+
moduleWithExports = true;
|
|
51
|
+
const exports = exportDesc.exports;
|
|
52
|
+
// break early if it's only in the worst state
|
|
53
|
+
if (module.buildMeta.providedExports === true) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
// break if it should move to the worst state
|
|
57
|
+
if (exports === true) {
|
|
58
|
+
module.buildMeta.providedExports = true;
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
// merge in new exports
|
|
62
|
+
if (Array.isArray(exports)) {
|
|
63
|
+
addToSet(moduleProvidedExports, exports);
|
|
64
|
+
}
|
|
65
|
+
// store dependencies
|
|
66
|
+
const exportDeps = exportDesc.dependencies;
|
|
67
|
+
if (exportDeps) {
|
|
68
|
+
providedExportsAreTemporary = true;
|
|
69
|
+
for (const exportDependency of exportDeps) {
|
|
70
|
+
// add dependency for this module
|
|
71
|
+
const set = dependencies.get(exportDependency);
|
|
72
|
+
if (set === undefined) {
|
|
73
|
+
dependencies.set(exportDependency, new Set([module]));
|
|
74
|
+
} else {
|
|
75
|
+
set.add(module);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const notifyDependencies = () => {
|
|
83
|
+
const deps = dependencies.get(module);
|
|
84
|
+
if (deps !== undefined) {
|
|
85
|
+
for (const dep of deps) {
|
|
86
|
+
queue.enqueue(dep);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const notifyDependenciesIfDifferent = (set, array) => {
|
|
92
|
+
const deps = dependencies.get(module);
|
|
93
|
+
if (deps !== undefined) {
|
|
94
|
+
if (set.size === array.length) {
|
|
95
|
+
let i = 0;
|
|
96
|
+
let different = false;
|
|
97
|
+
for (const item of set) {
|
|
98
|
+
if (item !== array[i++]) {
|
|
99
|
+
different = true;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (!different) return;
|
|
104
|
+
}
|
|
105
|
+
for (const dep of deps) {
|
|
106
|
+
queue.enqueue(dep);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// Start with all modules without provided exports
|
|
112
|
+
for (const module of modules) {
|
|
113
|
+
if (module.buildInfo.temporaryProvidedExports) {
|
|
114
|
+
// Clear exports when they are temporary
|
|
115
|
+
// and recreate them
|
|
116
|
+
module.buildMeta.providedExports = null;
|
|
117
|
+
queue.enqueue(module);
|
|
118
|
+
} else if (!module.buildMeta.providedExports) {
|
|
119
|
+
queue.enqueue(module);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
while (queue.length > 0) {
|
|
124
|
+
module = queue.dequeue();
|
|
125
|
+
|
|
126
|
+
if (module.buildMeta.providedExports !== true) {
|
|
127
|
+
moduleWithExports =
|
|
128
|
+
module.buildMeta && module.buildMeta.exportsType;
|
|
129
|
+
moduleProvidedExports = new Set();
|
|
130
|
+
providedExportsAreTemporary = false;
|
|
131
|
+
processDependenciesBlock(module);
|
|
132
|
+
module.buildInfo.temporaryProvidedExports = providedExportsAreTemporary;
|
|
133
|
+
if (!moduleWithExports) {
|
|
134
|
+
notifyDependencies();
|
|
135
|
+
module.buildMeta.providedExports = true;
|
|
136
|
+
} else if (module.buildMeta.providedExports === true) {
|
|
137
|
+
notifyDependencies();
|
|
138
|
+
} else if (!module.buildMeta.providedExports) {
|
|
139
|
+
notifyDependencies();
|
|
140
|
+
module.buildMeta.providedExports = Array.from(
|
|
141
|
+
moduleProvidedExports
|
|
142
|
+
);
|
|
143
|
+
} else {
|
|
144
|
+
notifyDependenciesIfDifferent(
|
|
145
|
+
moduleProvidedExports,
|
|
146
|
+
module.buildMeta.providedExports
|
|
147
|
+
);
|
|
148
|
+
module.buildMeta.providedExports = Array.from(
|
|
149
|
+
moduleProvidedExports
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
const providedExportsCache = new WeakMap();
|
|
157
|
+
compilation.hooks.rebuildModule.tap(
|
|
158
|
+
"FlagDependencyExportsPlugin",
|
|
159
|
+
module => {
|
|
160
|
+
providedExportsCache.set(module, module.buildMeta.providedExports);
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
compilation.hooks.finishRebuildingModule.tap(
|
|
164
|
+
"FlagDependencyExportsPlugin",
|
|
165
|
+
module => {
|
|
166
|
+
module.buildMeta.providedExports = providedExportsCache.get(module);
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
module.exports = FlagDependencyExportsPlugin;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
/** @typedef {import("./Module")} Module */
|
|
8
|
+
/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
|
|
9
|
+
|
|
10
|
+
/** @typedef {false | true | string[]} UsedExports */
|
|
11
|
+
|
|
12
|
+
const addToSet = (a, b) => {
|
|
13
|
+
for (const item of b) {
|
|
14
|
+
if (!a.includes(item)) a.push(item);
|
|
15
|
+
}
|
|
16
|
+
return a;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const isSubset = (biggerSet, subset) => {
|
|
20
|
+
if (biggerSet === true) return true;
|
|
21
|
+
if (subset === true) return false;
|
|
22
|
+
return subset.every(item => biggerSet.indexOf(item) >= 0);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
class FlagDependencyUsagePlugin {
|
|
26
|
+
apply(compiler) {
|
|
27
|
+
compiler.hooks.compilation.tap("FlagDependencyUsagePlugin", compilation => {
|
|
28
|
+
compilation.hooks.optimizeDependencies.tap(
|
|
29
|
+
"FlagDependencyUsagePlugin",
|
|
30
|
+
modules => {
|
|
31
|
+
const processModule = (module, usedExports) => {
|
|
32
|
+
module.used = true;
|
|
33
|
+
if (module.usedExports === true) return;
|
|
34
|
+
if (usedExports === true) {
|
|
35
|
+
module.usedExports = true;
|
|
36
|
+
} else if (Array.isArray(usedExports)) {
|
|
37
|
+
const old = module.usedExports ? module.usedExports.length : -1;
|
|
38
|
+
module.usedExports = addToSet(
|
|
39
|
+
module.usedExports || [],
|
|
40
|
+
usedExports
|
|
41
|
+
);
|
|
42
|
+
if (module.usedExports.length === old) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
} else if (Array.isArray(module.usedExports)) {
|
|
46
|
+
return;
|
|
47
|
+
} else {
|
|
48
|
+
module.usedExports = false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// for a module without side effects we stop tracking usage here when no export is used
|
|
52
|
+
// This module won't be evaluated in this case
|
|
53
|
+
if (module.factoryMeta.sideEffectFree) {
|
|
54
|
+
if (module.usedExports === false) return;
|
|
55
|
+
if (
|
|
56
|
+
Array.isArray(module.usedExports) &&
|
|
57
|
+
module.usedExports.length === 0
|
|
58
|
+
)
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
queue.push([module, module, module.usedExports]);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const processDependenciesBlock = (module, depBlock, usedExports) => {
|
|
66
|
+
for (const dep of depBlock.dependencies) {
|
|
67
|
+
processDependency(module, dep);
|
|
68
|
+
}
|
|
69
|
+
for (const variable of depBlock.variables) {
|
|
70
|
+
for (const dep of variable.dependencies) {
|
|
71
|
+
processDependency(module, dep);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const block of depBlock.blocks) {
|
|
75
|
+
queue.push([module, block, usedExports]);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const processDependency = (module, dep) => {
|
|
80
|
+
const reference = compilation.getDependencyReference(module, dep);
|
|
81
|
+
if (!reference) return;
|
|
82
|
+
const referenceModule = reference.module;
|
|
83
|
+
const importedNames = reference.importedNames;
|
|
84
|
+
const oldUsed = referenceModule.used;
|
|
85
|
+
const oldUsedExports = referenceModule.usedExports;
|
|
86
|
+
if (
|
|
87
|
+
!oldUsed ||
|
|
88
|
+
(importedNames &&
|
|
89
|
+
(!oldUsedExports || !isSubset(oldUsedExports, importedNames)))
|
|
90
|
+
) {
|
|
91
|
+
processModule(referenceModule, importedNames);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
for (const module of modules) {
|
|
96
|
+
if (!module.used) module.used = false;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** @type {[Module, DependenciesBlock, UsedExports][]} */
|
|
100
|
+
const queue = [];
|
|
101
|
+
for (const preparedEntrypoint of compilation._preparedEntrypoints) {
|
|
102
|
+
if (preparedEntrypoint.module) {
|
|
103
|
+
processModule(preparedEntrypoint.module, true);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
while (queue.length) {
|
|
108
|
+
const queueItem = queue.pop();
|
|
109
|
+
processDependenciesBlock(queueItem[0], queueItem[1], queueItem[2]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
module.exports = FlagDependencyUsagePlugin;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
class FlagInitialModulesAsUsedPlugin {
|
|
8
|
+
constructor(explanation) {
|
|
9
|
+
this.explanation = explanation;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
apply(compiler) {
|
|
13
|
+
compiler.hooks.compilation.tap(
|
|
14
|
+
"FlagInitialModulesAsUsedPlugin",
|
|
15
|
+
compilation => {
|
|
16
|
+
compilation.hooks.afterOptimizeChunks.tap(
|
|
17
|
+
"FlagInitialModulesAsUsedPlugin",
|
|
18
|
+
chunks => {
|
|
19
|
+
for (const chunk of chunks) {
|
|
20
|
+
if (!chunk.isOnlyInitial()) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const module of chunk.modulesIterable) {
|
|
24
|
+
module.used = true;
|
|
25
|
+
module.usedExports = true;
|
|
26
|
+
module.addReason(null, null, this.explanation);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = FlagInitialModulesAsUsedPlugin;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const FunctionModuleTemplatePlugin = require("./FunctionModuleTemplatePlugin");
|
|
8
|
+
|
|
9
|
+
class FunctionModulePlugin {
|
|
10
|
+
apply(compiler) {
|
|
11
|
+
compiler.hooks.compilation.tap("FunctionModulePlugin", compilation => {
|
|
12
|
+
new FunctionModuleTemplatePlugin().apply(
|
|
13
|
+
compilation.moduleTemplates.javascript
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = FunctionModulePlugin;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const { ConcatSource } = require("webpack-sources");
|
|
8
|
+
const Template = require("./Template");
|
|
9
|
+
|
|
10
|
+
class FunctionModuleTemplatePlugin {
|
|
11
|
+
apply(moduleTemplate) {
|
|
12
|
+
moduleTemplate.hooks.render.tap(
|
|
13
|
+
"FunctionModuleTemplatePlugin",
|
|
14
|
+
(moduleSource, module) => {
|
|
15
|
+
const source = new ConcatSource();
|
|
16
|
+
const args = [module.moduleArgument];
|
|
17
|
+
// TODO remove HACK checking type for javascript
|
|
18
|
+
if (module.type && module.type.startsWith("javascript")) {
|
|
19
|
+
args.push(module.exportsArgument);
|
|
20
|
+
if (module.hasDependencies(d => d.requireWebpackRequire !== false)) {
|
|
21
|
+
args.push("__webpack_require__");
|
|
22
|
+
}
|
|
23
|
+
} else if (module.type && module.type.startsWith("json")) {
|
|
24
|
+
// no additional arguments needed
|
|
25
|
+
} else {
|
|
26
|
+
args.push(module.exportsArgument, "__webpack_require__");
|
|
27
|
+
}
|
|
28
|
+
source.add("/***/ (function(" + args.join(", ") + ") {\n\n");
|
|
29
|
+
if (module.buildInfo.strict) source.add('"use strict";\n');
|
|
30
|
+
source.add(moduleSource);
|
|
31
|
+
source.add("\n\n/***/ })");
|
|
32
|
+
return source;
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
moduleTemplate.hooks.package.tap(
|
|
37
|
+
"FunctionModuleTemplatePlugin",
|
|
38
|
+
(moduleSource, module) => {
|
|
39
|
+
if (moduleTemplate.runtimeTemplate.outputOptions.pathinfo) {
|
|
40
|
+
const source = new ConcatSource();
|
|
41
|
+
const req = module.readableIdentifier(
|
|
42
|
+
moduleTemplate.runtimeTemplate.requestShortener
|
|
43
|
+
);
|
|
44
|
+
const reqStr = req.replace(/\*\//g, "*_/");
|
|
45
|
+
const reqStrStar = "*".repeat(reqStr.length);
|
|
46
|
+
source.add("/*!****" + reqStrStar + "****!*\\\n");
|
|
47
|
+
source.add(" !*** " + reqStr + " ***!\n");
|
|
48
|
+
source.add(" \\****" + reqStrStar + "****/\n");
|
|
49
|
+
if (
|
|
50
|
+
Array.isArray(module.buildMeta.providedExports) &&
|
|
51
|
+
module.buildMeta.providedExports.length === 0
|
|
52
|
+
) {
|
|
53
|
+
source.add(Template.toComment("no exports provided") + "\n");
|
|
54
|
+
} else if (Array.isArray(module.buildMeta.providedExports)) {
|
|
55
|
+
source.add(
|
|
56
|
+
Template.toComment(
|
|
57
|
+
"exports provided: " +
|
|
58
|
+
module.buildMeta.providedExports.join(", ")
|
|
59
|
+
) + "\n"
|
|
60
|
+
);
|
|
61
|
+
} else if (module.buildMeta.providedExports) {
|
|
62
|
+
source.add(Template.toComment("no static exports found") + "\n");
|
|
63
|
+
}
|
|
64
|
+
if (
|
|
65
|
+
Array.isArray(module.usedExports) &&
|
|
66
|
+
module.usedExports.length === 0
|
|
67
|
+
) {
|
|
68
|
+
source.add(Template.toComment("no exports used") + "\n");
|
|
69
|
+
} else if (Array.isArray(module.usedExports)) {
|
|
70
|
+
source.add(
|
|
71
|
+
Template.toComment(
|
|
72
|
+
"exports used: " + module.usedExports.join(", ")
|
|
73
|
+
) + "\n"
|
|
74
|
+
);
|
|
75
|
+
} else if (module.usedExports) {
|
|
76
|
+
source.add(Template.toComment("all exports used") + "\n");
|
|
77
|
+
}
|
|
78
|
+
if (module.optimizationBailout) {
|
|
79
|
+
for (const text of module.optimizationBailout) {
|
|
80
|
+
let code;
|
|
81
|
+
if (typeof text === "function") {
|
|
82
|
+
code = text(moduleTemplate.runtimeTemplate.requestShortener);
|
|
83
|
+
} else {
|
|
84
|
+
code = text;
|
|
85
|
+
}
|
|
86
|
+
source.add(Template.toComment(`${code}`) + "\n");
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
source.add(moduleSource);
|
|
90
|
+
return source;
|
|
91
|
+
}
|
|
92
|
+
return moduleSource;
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
moduleTemplate.hooks.hash.tap("FunctionModuleTemplatePlugin", hash => {
|
|
97
|
+
hash.update("FunctionModuleTemplatePlugin");
|
|
98
|
+
hash.update("2");
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
module.exports = FunctionModuleTemplatePlugin;
|
package/lib/Generator.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
/** @typedef {import("./NormalModule")} NormalModule */
|
|
8
|
+
/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
|
|
9
|
+
/** @typedef {import("webpack-sources").Source} Source */
|
|
10
|
+
/** @typedef {import("./Dependency").DependencyTemplate} DependencyTemplate */
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
class Generator {
|
|
16
|
+
static byType(map) {
|
|
17
|
+
return new ByTypeGenerator(map);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @abstract
|
|
22
|
+
* @param {NormalModule} module module for which the code should be generated
|
|
23
|
+
* @param {Map<Function, DependencyTemplate>} dependencyTemplates mapping from dependencies to templates
|
|
24
|
+
* @param {RuntimeTemplate} runtimeTemplate the runtime template
|
|
25
|
+
* @param {string} type which kind of code should be generated
|
|
26
|
+
* @returns {Source} generated code
|
|
27
|
+
*/
|
|
28
|
+
generate(module, dependencyTemplates, runtimeTemplate, type) {
|
|
29
|
+
throw new Error("Generator.generate: must be overridden");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class ByTypeGenerator extends Generator {
|
|
34
|
+
constructor(map) {
|
|
35
|
+
super();
|
|
36
|
+
this.map = map;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {NormalModule} module module for which the code should be generated
|
|
41
|
+
* @param {Map<Function, DependencyTemplate>} dependencyTemplates mapping from dependencies to templates
|
|
42
|
+
* @param {RuntimeTemplate} runtimeTemplate the runtime template
|
|
43
|
+
* @param {string} type which kind of code should be generated
|
|
44
|
+
* @returns {Source} generated code
|
|
45
|
+
*/
|
|
46
|
+
generate(module, dependencyTemplates, runtimeTemplate, type) {
|
|
47
|
+
const generator = this.map[type];
|
|
48
|
+
if (!generator) {
|
|
49
|
+
throw new Error(`Generator.byType: no generator specified for ${type}`);
|
|
50
|
+
}
|
|
51
|
+
return generator.generate(
|
|
52
|
+
module,
|
|
53
|
+
dependencyTemplates,
|
|
54
|
+
runtimeTemplate,
|
|
55
|
+
type
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = Generator;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** @typedef {import("./Chunk")} Chunk */
|
|
2
|
+
/** @typedef {import("./ChunkGroup")} ChunkGroup */
|
|
3
|
+
/** @typedef {import("./Module")} Module */
|
|
4
|
+
/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
|
|
5
|
+
/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {ChunkGroup} chunkGroup the ChunkGroup to connect
|
|
9
|
+
* @param {Chunk} chunk chunk to tie to ChunkGroup
|
|
10
|
+
* @returns {void}
|
|
11
|
+
*/
|
|
12
|
+
const connectChunkGroupAndChunk = (chunkGroup, chunk) => {
|
|
13
|
+
if (chunkGroup.pushChunk(chunk)) {
|
|
14
|
+
chunk.addGroup(chunkGroup);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {ChunkGroup} parent parent ChunkGroup to connect
|
|
20
|
+
* @param {ChunkGroup} child child ChunkGroup to connect
|
|
21
|
+
* @returns {void}
|
|
22
|
+
*/
|
|
23
|
+
const connectChunkGroupParentAndChild = (parent, child) => {
|
|
24
|
+
if (parent.addChild(child)) {
|
|
25
|
+
child.addParent(parent);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @param {Chunk} chunk Chunk to connect to Module
|
|
31
|
+
* @param {Module} module Module to connect to Chunk
|
|
32
|
+
* @returns {void}
|
|
33
|
+
*/
|
|
34
|
+
const connectChunkAndModule = (chunk, module) => {
|
|
35
|
+
if (module.addChunk(chunk)) {
|
|
36
|
+
chunk.addModule(module);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @param {Chunk} chunk Chunk being disconnected
|
|
42
|
+
* @param {Module} module Module being disconnected
|
|
43
|
+
* @returns {void}
|
|
44
|
+
*/
|
|
45
|
+
const disconnectChunkAndModule = (chunk, module) => {
|
|
46
|
+
chunk.removeModule(module);
|
|
47
|
+
module.removeChunk(chunk);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {AsyncDependenciesBlock} depBlock DepBlock being tied to ChunkGroup
|
|
52
|
+
* @param {ChunkGroup} chunkGroup ChunkGroup being tied to DepBlock
|
|
53
|
+
* @returns {void}
|
|
54
|
+
*/
|
|
55
|
+
const connectDependenciesBlockAndChunkGroup = (depBlock, chunkGroup) => {
|
|
56
|
+
if (chunkGroup.addBlock(depBlock)) {
|
|
57
|
+
depBlock.chunkGroup = chunkGroup;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
exports.connectChunkGroupAndChunk = connectChunkGroupAndChunk;
|
|
62
|
+
exports.connectChunkGroupParentAndChild = connectChunkGroupParentAndChild;
|
|
63
|
+
exports.connectChunkAndModule = connectChunkAndModule;
|
|
64
|
+
exports.disconnectChunkAndModule = disconnectChunkAndModule;
|
|
65
|
+
exports.connectDependenciesBlockAndChunkGroup = connectDependenciesBlockAndChunkGroup;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
*/
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
const WebpackError = require("./WebpackError");
|
|
7
|
+
|
|
8
|
+
module.exports = class HarmonyLinkingError extends WebpackError {
|
|
9
|
+
/** @param {string} message Error message */
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "HarmonyLinkingError";
|
|
13
|
+
this.hideStack = true;
|
|
14
|
+
|
|
15
|
+
Error.captureStackTrace(this, this.constructor);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
const createHash = require("./util/createHash");
|
|
7
|
+
|
|
8
|
+
const validateOptions = require("schema-utils");
|
|
9
|
+
const schema = require("../schemas/plugins/HashedModuleIdsPlugin.json");
|
|
10
|
+
|
|
11
|
+
/** @typedef {import("../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */
|
|
12
|
+
|
|
13
|
+
class HashedModuleIdsPlugin {
|
|
14
|
+
/**
|
|
15
|
+
* @param {HashedModuleIdsPluginOptions=} options options object
|
|
16
|
+
*/
|
|
17
|
+
constructor(options) {
|
|
18
|
+
if (!options) options = {};
|
|
19
|
+
|
|
20
|
+
validateOptions(schema, options, "Hashed Module Ids Plugin");
|
|
21
|
+
|
|
22
|
+
/** @type {HashedModuleIdsPluginOptions} */
|
|
23
|
+
this.options = Object.assign(
|
|
24
|
+
{
|
|
25
|
+
context: null,
|
|
26
|
+
hashFunction: "md4",
|
|
27
|
+
hashDigest: "base64",
|
|
28
|
+
hashDigestLength: 4
|
|
29
|
+
},
|
|
30
|
+
options
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
apply(compiler) {
|
|
35
|
+
const options = this.options;
|
|
36
|
+
compiler.hooks.compilation.tap("HashedModuleIdsPlugin", compilation => {
|
|
37
|
+
const usedIds = new Set();
|
|
38
|
+
compilation.hooks.beforeModuleIds.tap(
|
|
39
|
+
"HashedModuleIdsPlugin",
|
|
40
|
+
modules => {
|
|
41
|
+
for (const module of modules) {
|
|
42
|
+
if (module.id === null && module.libIdent) {
|
|
43
|
+
const id = module.libIdent({
|
|
44
|
+
context: this.options.context || compiler.options.context
|
|
45
|
+
});
|
|
46
|
+
const hash = createHash(options.hashFunction);
|
|
47
|
+
hash.update(id);
|
|
48
|
+
const hashId = /** @type {string} */ (hash.digest(
|
|
49
|
+
options.hashDigest
|
|
50
|
+
));
|
|
51
|
+
let len = options.hashDigestLength;
|
|
52
|
+
while (usedIds.has(hashId.substr(0, len))) len++;
|
|
53
|
+
module.id = hashId.substr(0, len);
|
|
54
|
+
usedIds.add(module.id);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
module.exports = HashedModuleIdsPlugin;
|