@module-federation/node 2.7.32 → 2.7.33
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/dist/_virtual/_rolldown/runtime.js +31 -0
- package/dist/_virtual/_rolldown/runtime.mjs +8 -0
- package/dist/plugins/ChunkCorrelationPlugin.js +308 -0
- package/dist/plugins/ChunkCorrelationPlugin.js.map +1 -0
- package/dist/plugins/ChunkCorrelationPlugin.mjs +305 -0
- package/dist/plugins/ChunkCorrelationPlugin.mjs.map +1 -0
- package/dist/src/filesystem/stratagies.d.mts +21 -0
- package/dist/src/filesystem/stratagies.d.ts +10 -7
- package/dist/src/filesystem/stratagies.js +97 -116
- package/dist/src/filesystem/stratagies.js.map +1 -1
- package/dist/src/filesystem/stratagies.mjs +103 -0
- package/dist/src/filesystem/stratagies.mjs.map +1 -0
- package/dist/src/index.d.mts +8 -0
- package/dist/src/index.d.ts +8 -7
- package/dist/src/index.js +16 -22
- package/dist/src/index.mjs +9 -0
- package/dist/src/plugins/AutomaticPublicPathPlugin.d.mts +12 -0
- package/dist/src/plugins/AutomaticPublicPathPlugin.d.ts +9 -7
- package/dist/src/plugins/AutomaticPublicPathPlugin.js +26 -35
- package/dist/src/plugins/AutomaticPublicPathPlugin.js.map +1 -1
- package/dist/src/plugins/AutomaticPublicPathPlugin.mjs +28 -0
- package/dist/src/plugins/AutomaticPublicPathPlugin.mjs.map +1 -0
- package/dist/src/plugins/ChunkCorrelationPlugin.d.mts +5 -0
- package/dist/src/plugins/ChunkCorrelationPlugin.d.ts +4 -61
- package/dist/src/plugins/ChunkCorrelationPlugin.js +8 -440
- package/dist/src/plugins/ChunkCorrelationPlugin.js.map +1 -1
- package/dist/src/plugins/ChunkCorrelationPlugin.mjs +8 -0
- package/dist/src/plugins/ChunkCorrelationPlugin.mjs.map +1 -0
- package/dist/src/plugins/CommonJsChunkLoadingPlugin.d.mts +21 -0
- package/dist/src/plugins/CommonJsChunkLoadingPlugin.d.ts +16 -13
- package/dist/src/plugins/CommonJsChunkLoadingPlugin.js +68 -118
- package/dist/src/plugins/CommonJsChunkLoadingPlugin.js.map +1 -1
- package/dist/src/plugins/CommonJsChunkLoadingPlugin.mjs +70 -0
- package/dist/src/plugins/CommonJsChunkLoadingPlugin.mjs.map +1 -0
- package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.d.mts +46 -0
- package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.d.ts +39 -34
- package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js +110 -126
- package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js.map +1 -1
- package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.mjs +111 -0
- package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.mjs.map +1 -0
- package/dist/src/plugins/EntryChunkTrackerPlugin.d.mts +17 -0
- package/dist/src/plugins/EntryChunkTrackerPlugin.d.ts +14 -10
- package/dist/src/plugins/EntryChunkTrackerPlugin.js +30 -32
- package/dist/src/plugins/EntryChunkTrackerPlugin.js.map +1 -1
- package/dist/src/plugins/EntryChunkTrackerPlugin.mjs +38 -0
- package/dist/src/plugins/EntryChunkTrackerPlugin.mjs.map +1 -0
- package/dist/src/plugins/NodeFederationPlugin.d.mts +54 -0
- package/dist/src/plugins/NodeFederationPlugin.d.ts +33 -26
- package/dist/src/plugins/NodeFederationPlugin.js +69 -84
- package/dist/src/plugins/NodeFederationPlugin.js.map +1 -1
- package/dist/src/plugins/NodeFederationPlugin.mjs +70 -0
- package/dist/src/plugins/NodeFederationPlugin.mjs.map +1 -0
- package/dist/src/plugins/RemotePublicPathRuntimeModule.d.mts +15 -0
- package/dist/src/plugins/RemotePublicPathRuntimeModule.d.ts +12 -8
- package/dist/src/plugins/RemotePublicPathRuntimeModule.js +34 -35
- package/dist/src/plugins/RemotePublicPathRuntimeModule.js.map +1 -1
- package/dist/src/plugins/RemotePublicPathRuntimeModule.mjs +132 -0
- package/dist/src/plugins/RemotePublicPathRuntimeModule.mjs.map +1 -0
- package/dist/src/plugins/StreamingTargetPlugin.d.mts +32 -0
- package/dist/src/plugins/StreamingTargetPlugin.d.ts +19 -16
- package/dist/src/plugins/StreamingTargetPlugin.js +43 -56
- package/dist/src/plugins/StreamingTargetPlugin.js.map +1 -1
- package/dist/src/plugins/StreamingTargetPlugin.mjs +46 -0
- package/dist/src/plugins/StreamingTargetPlugin.mjs.map +1 -0
- package/dist/src/plugins/UniversalFederationPlugin.d.mts +49 -0
- package/dist/src/plugins/UniversalFederationPlugin.d.ts +26 -23
- package/dist/src/plugins/UniversalFederationPlugin.js +58 -81
- package/dist/src/plugins/UniversalFederationPlugin.js.map +1 -1
- package/dist/src/plugins/UniversalFederationPlugin.mjs +61 -0
- package/dist/src/plugins/UniversalFederationPlugin.mjs.map +1 -0
- package/dist/src/plugins/UniverseEntryChunkTrackerPlugin.d.mts +9 -0
- package/dist/src/plugins/UniverseEntryChunkTrackerPlugin.d.ts +6 -3
- package/dist/src/plugins/UniverseEntryChunkTrackerPlugin.js +17 -17
- package/dist/src/plugins/UniverseEntryChunkTrackerPlugin.js.map +1 -1
- package/dist/src/plugins/UniverseEntryChunkTrackerPlugin.mjs +25 -0
- package/dist/src/plugins/UniverseEntryChunkTrackerPlugin.mjs.map +1 -0
- package/dist/src/plugins/webpackChunkUtilities.d.mts +55 -0
- package/dist/src/plugins/webpackChunkUtilities.d.ts +14 -9
- package/dist/src/plugins/webpackChunkUtilities.js +195 -257
- package/dist/src/plugins/webpackChunkUtilities.js.map +1 -1
- package/dist/src/plugins/webpackChunkUtilities.mjs +234 -0
- package/dist/src/plugins/webpackChunkUtilities.mjs.map +1 -0
- package/dist/src/recordDynamicRemoteEntryHashPlugin.d.mts +7 -0
- package/dist/src/recordDynamicRemoteEntryHashPlugin.d.ts +5 -2
- package/dist/src/recordDynamicRemoteEntryHashPlugin.js +24 -61
- package/dist/src/recordDynamicRemoteEntryHashPlugin.js.map +1 -1
- package/dist/src/recordDynamicRemoteEntryHashPlugin.mjs +26 -0
- package/dist/src/recordDynamicRemoteEntryHashPlugin.mjs.map +1 -0
- package/dist/src/runtimePlugin.d.mts +27 -0
- package/dist/src/runtimePlugin.d.ts +24 -19
- package/dist/src/runtimePlugin.js +157 -252
- package/dist/src/runtimePlugin.js.map +1 -1
- package/dist/src/runtimePlugin.mjs +169 -0
- package/dist/src/runtimePlugin.mjs.map +1 -0
- package/dist/src/types/index.d.mts +8 -0
- package/dist/src/types/index.d.ts +8 -3
- package/dist/src/types/index.js +1 -3
- package/dist/src/types/index.mjs +1 -0
- package/dist/src/utils/flush-chunks.d.mts +15 -0
- package/dist/src/utils/flush-chunks.d.ts +7 -3
- package/dist/src/utils/flush-chunks.js +87 -161
- package/dist/src/utils/flush-chunks.js.map +1 -1
- package/dist/src/utils/flush-chunks.mjs +99 -0
- package/dist/src/utils/flush-chunks.mjs.map +1 -0
- package/dist/src/utils/hot-reload.d.mts +16 -0
- package/dist/src/utils/hot-reload.d.ts +14 -10
- package/dist/src/utils/hot-reload.js +177 -264
- package/dist/src/utils/hot-reload.js.map +1 -1
- package/dist/src/utils/hot-reload.mjs +194 -0
- package/dist/src/utils/hot-reload.mjs.map +1 -0
- package/dist/src/utils/index.d.mts +3 -0
- package/dist/src/utils/index.d.ts +3 -2
- package/dist/src/utils/index.js +15 -19
- package/dist/src/utils/index.mjs +4 -0
- package/package.json +59 -15
- package/dist/jest.config.d.ts +0 -11
- package/dist/jest.config.js +0 -19
- package/dist/jest.config.js.map +0 -1
- package/dist/package.json +0 -82
- package/dist/src/index.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
|
@@ -1,128 +1,112 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
'',
|
|
112
|
-
this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)
|
|
113
|
-
? (0, webpackChunkUtilities_1.generateLoadScript)(runtimeTemplate)
|
|
114
|
-
: '// no remote script loader needed',
|
|
115
|
-
this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)
|
|
116
|
-
? (0, webpackChunkUtilities_1.generateLoadingCode)(this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers), fn, hasJsMatcher, rootOutputDir, remotes, name)
|
|
117
|
-
: '// no chunk loading',
|
|
118
|
-
'',
|
|
119
|
-
(0, webpackChunkUtilities_1.generateExternalInstallChunkCode)(this.runtimeRequirements.has(RuntimeGlobals.externalInstallChunk), this.options.debug),
|
|
120
|
-
'',
|
|
121
|
-
(0, webpackChunkUtilities_1.generateHmrCode)(this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers), rootOutputDir),
|
|
122
|
-
'',
|
|
123
|
-
(0, webpackChunkUtilities_1.generateHmrManifestCode)(this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadManifest), rootOutputDir),
|
|
124
|
-
]);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
3
|
+
const require_src_plugins_webpackChunkUtilities = require('./webpackChunkUtilities.js');
|
|
4
|
+
const require_src_filesystem_stratagies = require('../filesystem/stratagies.js');
|
|
5
|
+
let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path");
|
|
6
|
+
let tapable = require("tapable");
|
|
7
|
+
let _module_federation_sdk = require("@module-federation/sdk");
|
|
8
|
+
|
|
9
|
+
//#region src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts
|
|
10
|
+
const { RuntimeGlobals, RuntimeModule } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack"));
|
|
11
|
+
const { getUndoPath } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/identifier"));
|
|
12
|
+
const compileBooleanMatcher = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/compileBooleanMatcher"));
|
|
13
|
+
const createBundlerLogger = typeof _module_federation_sdk.createInfrastructureLogger === "function" ? _module_federation_sdk.createInfrastructureLogger : _module_federation_sdk.createLogger;
|
|
14
|
+
var DynamicFilesystemChunkLoadingRuntimeModule = class extends RuntimeModule {
|
|
15
|
+
constructor(runtimeRequirements, options, chunkLoadingContext) {
|
|
16
|
+
super("readFile chunk loading", RuntimeModule.STAGE_ATTACH + 1);
|
|
17
|
+
this.hooks = { strategyCase: new tapable.SyncWaterfallHook(["source"]) };
|
|
18
|
+
this.logger = createBundlerLogger("[ DynamicFilesystemChunkLoadingRuntimeModule ]");
|
|
19
|
+
this.runtimeRequirements = runtimeRequirements;
|
|
20
|
+
this.options = options;
|
|
21
|
+
this.chunkLoadingContext = chunkLoadingContext;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @private
|
|
25
|
+
* @param {Chunk} chunk chunk
|
|
26
|
+
* @param {string} rootOutputDir root output directory
|
|
27
|
+
* @returns {string} generated code
|
|
28
|
+
*/
|
|
29
|
+
_generateBaseUri(chunk, rootOutputDir) {
|
|
30
|
+
const options = chunk.getEntryOptions();
|
|
31
|
+
if (options && options.baseUri) return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
|
|
32
|
+
return `${RuntimeGlobals.baseURI} = require("url").pathToFileURL(${rootOutputDir ? `__dirname + ${JSON.stringify("/" + rootOutputDir)}` : "__filename"});`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @private
|
|
36
|
+
* @param {unknown[]} items item to log
|
|
37
|
+
*/
|
|
38
|
+
_getLogger(...items) {
|
|
39
|
+
if (!this.options.debug) return "";
|
|
40
|
+
return `console.log(${items.join(",")});`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @returns {string} runtime code
|
|
44
|
+
*/
|
|
45
|
+
generate() {
|
|
46
|
+
const { remotes = {}, name } = this.options;
|
|
47
|
+
const { webpack } = this.chunkLoadingContext;
|
|
48
|
+
const { chunkGraph, chunk, compilation } = this;
|
|
49
|
+
const { Template } = webpack;
|
|
50
|
+
if (!chunkGraph || !chunk || !compilation) {
|
|
51
|
+
this.logger.warn("Missing required properties. Returning empty string.");
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
const infrastructureLogger = compilation.getLogger?.("DynamicFilesystemChunkLoadingRuntimeModule");
|
|
55
|
+
if (infrastructureLogger) this.logger.setDelegate(infrastructureLogger);
|
|
56
|
+
const { runtimeTemplate } = compilation;
|
|
57
|
+
const jsModulePlugin = webpack?.javascript?.JavascriptModulesPlugin || require("webpack/lib/javascript/JavascriptModulesPlugin");
|
|
58
|
+
const { chunkHasJs } = jsModulePlugin;
|
|
59
|
+
const fn = RuntimeGlobals.ensureChunkHandlers;
|
|
60
|
+
const hasJsMatcher = compileBooleanMatcher(chunkGraph.getChunkConditionMap(chunk, chunkHasJs));
|
|
61
|
+
const initialChunkIds = require_src_plugins_webpackChunkUtilities.getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
|
|
62
|
+
const rootOutputDir = getUndoPath(compilation.getPath(jsModulePlugin.getChunkFilenameTemplate(chunk, compilation.outputOptions), {
|
|
63
|
+
chunk,
|
|
64
|
+
contentHashType: "javascript"
|
|
65
|
+
}), compilation.outputOptions.path || "", false);
|
|
66
|
+
const stateExpression = this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers) ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm` : void 0;
|
|
67
|
+
const dynamicFilesystemChunkLoadingPluginCode = Template.asString([
|
|
68
|
+
require_src_filesystem_stratagies.fileSystemRunInContextStrategy.toString(),
|
|
69
|
+
require_src_filesystem_stratagies.httpEvalStrategy.toString(),
|
|
70
|
+
require_src_filesystem_stratagies.httpVmStrategy.toString(),
|
|
71
|
+
"const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {",
|
|
72
|
+
Template.indent([
|
|
73
|
+
"switch (strategyType) {",
|
|
74
|
+
Template.indent([
|
|
75
|
+
"case \"filesystem\": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);",
|
|
76
|
+
"case \"http-eval\": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);",
|
|
77
|
+
"case \"http-vm\": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);",
|
|
78
|
+
this.hooks.strategyCase.call("default: throw new Error(\"Invalid strategy type\");")
|
|
79
|
+
]),
|
|
80
|
+
"}"
|
|
81
|
+
]),
|
|
82
|
+
"};"
|
|
83
|
+
]);
|
|
84
|
+
return Template.asString([
|
|
85
|
+
dynamicFilesystemChunkLoadingPluginCode,
|
|
86
|
+
this.runtimeRequirements.has(RuntimeGlobals.baseURI) ? this._generateBaseUri(chunk, rootOutputDir) : "// no baseURI",
|
|
87
|
+
"",
|
|
88
|
+
"// object to store loaded chunks",
|
|
89
|
+
"// \"0\" means \"already loaded\", Promise means loading",
|
|
90
|
+
`var installedChunks = ${stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""}{`,
|
|
91
|
+
Template.indent(Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(",\n")),
|
|
92
|
+
"};",
|
|
93
|
+
"",
|
|
94
|
+
require_src_plugins_webpackChunkUtilities.handleOnChunkLoad(this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded), runtimeTemplate),
|
|
95
|
+
"",
|
|
96
|
+
require_src_plugins_webpackChunkUtilities.generateInstallChunk(runtimeTemplate, this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)),
|
|
97
|
+
"",
|
|
98
|
+
this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) ? require_src_plugins_webpackChunkUtilities.generateLoadScript(runtimeTemplate) : "// no remote script loader needed",
|
|
99
|
+
this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) ? require_src_plugins_webpackChunkUtilities.generateLoadingCode(this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers), fn, hasJsMatcher, rootOutputDir, remotes, name) : "// no chunk loading",
|
|
100
|
+
"",
|
|
101
|
+
require_src_plugins_webpackChunkUtilities.generateExternalInstallChunkCode(this.runtimeRequirements.has(RuntimeGlobals.externalInstallChunk), this.options.debug),
|
|
102
|
+
"",
|
|
103
|
+
require_src_plugins_webpackChunkUtilities.generateHmrCode(this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers), rootOutputDir),
|
|
104
|
+
"",
|
|
105
|
+
require_src_plugins_webpackChunkUtilities.generateHmrManifestCode(this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadManifest), rootOutputDir)
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
//#endregion
|
|
127
111
|
exports.default = DynamicFilesystemChunkLoadingRuntimeModule;
|
|
128
112
|
//# sourceMappingURL=DynamicFilesystemChunkLoadingRuntimeModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicFilesystemChunkLoadingRuntimeModule.js","sourceRoot":"","sources":["../../../src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicFilesystemChunkLoadingRuntimeModule.js","names":["createInfrastructureLogger","createLogger","SyncWaterfallHook","getInitialChunkIds","fileSystemRunInContextStrategy","httpEvalStrategy","httpVmStrategy","handleOnChunkLoad","generateInstallChunk","generateLoadScript","generateLoadingCode","generateExternalInstallChunkCode","generateHmrCode","generateHmrManifestCode"],"sources":["../../../src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts"],"sourcesContent":["/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n*/\nimport type { Chunk, Compiler } from 'webpack';\nimport { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path';\nconst { RuntimeGlobals, RuntimeModule } = require(\n normalizeWebpackPath('webpack'),\n) as typeof import('webpack');\nconst { getUndoPath } = require(\n normalizeWebpackPath('webpack/lib/util/identifier'),\n) as typeof import('webpack/lib/util/identifier');\nimport { SyncWaterfallHook } from 'tapable';\nconst compileBooleanMatcher = require(\n normalizeWebpackPath('webpack/lib/util/compileBooleanMatcher'),\n) as typeof import('webpack/lib/util/compileBooleanMatcher');\nimport {\n generateHmrCode,\n getInitialChunkIds,\n generateLoadingCode,\n generateHmrManifestCode,\n handleOnChunkLoad,\n generateLoadScript,\n generateInstallChunk,\n generateExternalInstallChunkCode,\n} from './webpackChunkUtilities';\nimport {\n createInfrastructureLogger,\n createLogger,\n} from '@module-federation/sdk';\nimport {\n fileSystemRunInContextStrategy,\n httpEvalStrategy,\n httpVmStrategy,\n} from '../filesystem/stratagies';\n\ninterface RemotesByType {\n functional: string[];\n normal: string[];\n}\n\ninterface DynamicFilesystemChunkLoadingRuntimeModuleOptions {\n baseURI: Compiler['options']['output']['publicPath'];\n promiseBaseURI?: string;\n remotes: Record<string, string>;\n name?: string;\n debug?: boolean;\n}\n\ninterface ChunkLoadingContext {\n webpack: Compiler['webpack'];\n}\n\nconst createBundlerLogger: typeof createLogger =\n typeof createInfrastructureLogger === 'function'\n ? (createInfrastructureLogger as unknown as typeof createLogger)\n : createLogger;\n\nclass DynamicFilesystemChunkLoadingRuntimeModule extends RuntimeModule {\n private runtimeRequirements: Set<string>;\n private options: DynamicFilesystemChunkLoadingRuntimeModuleOptions;\n private chunkLoadingContext: ChunkLoadingContext;\n hooks = {\n strategyCase: new SyncWaterfallHook(['source']),\n };\n private logger = createBundlerLogger(\n '[ DynamicFilesystemChunkLoadingRuntimeModule ]',\n );\n\n constructor(\n runtimeRequirements: Set<string>,\n options: DynamicFilesystemChunkLoadingRuntimeModuleOptions,\n chunkLoadingContext: ChunkLoadingContext,\n ) {\n super('readFile chunk loading', RuntimeModule.STAGE_ATTACH + 1);\n this.runtimeRequirements = runtimeRequirements;\n\n this.options = options;\n this.chunkLoadingContext = chunkLoadingContext;\n }\n\n /**\n * @private\n * @param {Chunk} chunk chunk\n * @param {string} rootOutputDir root output directory\n * @returns {string} generated code\n */\n _generateBaseUri(chunk: Chunk, rootOutputDir: string) {\n const options = chunk.getEntryOptions();\n if (options && options.baseUri) {\n return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;\n }\n\n return `${RuntimeGlobals.baseURI} = require(\"url\").pathToFileURL(${\n rootOutputDir\n ? `__dirname + ${JSON.stringify('/' + rootOutputDir)}`\n : '__filename'\n });`;\n }\n\n /**\n * @private\n * @param {unknown[]} items item to log\n */\n _getLogger(...items: unknown[]) {\n if (!this.options.debug) {\n return '';\n }\n\n return `console.log(${items.join(',')});`;\n }\n\n /**\n * @returns {string} runtime code\n */\n override generate() {\n const { remotes = {}, name } = this.options;\n const { webpack } = this.chunkLoadingContext;\n const { chunkGraph, chunk, compilation } = this;\n const { Template } = webpack;\n if (!chunkGraph || !chunk || !compilation) {\n this.logger.warn('Missing required properties. Returning empty string.');\n return '';\n }\n\n const infrastructureLogger = compilation.getLogger?.(\n 'DynamicFilesystemChunkLoadingRuntimeModule',\n );\n if (infrastructureLogger) {\n this.logger.setDelegate(infrastructureLogger as any);\n }\n\n const { runtimeTemplate } = compilation;\n const jsModulePlugin =\n webpack?.javascript?.JavascriptModulesPlugin ||\n require('webpack/lib/javascript/JavascriptModulesPlugin');\n const { chunkHasJs } = jsModulePlugin;\n const fn = RuntimeGlobals.ensureChunkHandlers;\n\n const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);\n const hasJsMatcher = compileBooleanMatcher(conditionMap);\n const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);\n\n const outputName = compilation.getPath(\n jsModulePlugin.getChunkFilenameTemplate(chunk, compilation.outputOptions),\n { chunk, contentHashType: 'javascript' },\n );\n const rootOutputDir = getUndoPath(\n outputName,\n compilation.outputOptions.path || '',\n false,\n );\n const stateExpression = this.runtimeRequirements.has(\n RuntimeGlobals.hmrDownloadUpdateHandlers,\n )\n ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm`\n : undefined;\n\n const dynamicFilesystemChunkLoadingPluginCode = Template.asString([\n fileSystemRunInContextStrategy.toString(),\n httpEvalStrategy.toString(),\n httpVmStrategy.toString(),\n 'const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {',\n Template.indent([\n 'switch (strategyType) {',\n Template.indent([\n 'case \"filesystem\": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);',\n 'case \"http-eval\": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);',\n 'case \"http-vm\": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);',\n this.hooks.strategyCase.call(\n 'default: throw new Error(\"Invalid strategy type\");',\n ) as string,\n ]),\n '}',\n ]),\n '};',\n ]);\n\n return Template.asString([\n dynamicFilesystemChunkLoadingPluginCode,\n this.runtimeRequirements.has(RuntimeGlobals.baseURI)\n ? this._generateBaseUri(chunk, rootOutputDir)\n : '// no baseURI',\n '',\n '// object to store loaded chunks',\n '// \"0\" means \"already loaded\", Promise means loading',\n `var installedChunks = ${\n stateExpression ? `${stateExpression} = ${stateExpression} || ` : ''\n }{`,\n Template.indent(\n Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(\n ',\\n',\n ),\n ),\n '};',\n '',\n handleOnChunkLoad(\n this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded),\n runtimeTemplate,\n ),\n '',\n generateInstallChunk(\n runtimeTemplate,\n this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded),\n ),\n '',\n this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)\n ? generateLoadScript(runtimeTemplate)\n : '// no remote script loader needed',\n this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)\n ? generateLoadingCode(\n this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers),\n fn,\n hasJsMatcher,\n rootOutputDir,\n remotes,\n name,\n )\n : '// no chunk loading',\n '',\n generateExternalInstallChunkCode(\n this.runtimeRequirements.has(RuntimeGlobals.externalInstallChunk),\n this.options.debug,\n ),\n '',\n generateHmrCode(\n this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers),\n rootOutputDir,\n ),\n '',\n generateHmrManifestCode(\n this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadManifest),\n rootOutputDir,\n ),\n ]);\n }\n}\n\nexport default DynamicFilesystemChunkLoadingRuntimeModule;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { __require } from "../../_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { generateExternalInstallChunkCode, generateHmrCode, generateHmrManifestCode, generateInstallChunk, generateLoadScript, generateLoadingCode, getInitialChunkIds, handleOnChunkLoad } from "./webpackChunkUtilities.mjs";
|
|
3
|
+
import { fileSystemRunInContextStrategy, httpEvalStrategy, httpVmStrategy } from "../filesystem/stratagies.mjs";
|
|
4
|
+
import { normalizeWebpackPath } from "@module-federation/sdk/normalize-webpack-path";
|
|
5
|
+
import { SyncWaterfallHook } from "tapable";
|
|
6
|
+
import { createInfrastructureLogger, createLogger } from "@module-federation/sdk";
|
|
7
|
+
|
|
8
|
+
//#region src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts
|
|
9
|
+
const { RuntimeGlobals, RuntimeModule } = __require(normalizeWebpackPath("webpack"));
|
|
10
|
+
const { getUndoPath } = __require(normalizeWebpackPath("webpack/lib/util/identifier"));
|
|
11
|
+
const compileBooleanMatcher = __require(normalizeWebpackPath("webpack/lib/util/compileBooleanMatcher"));
|
|
12
|
+
const createBundlerLogger = typeof createInfrastructureLogger === "function" ? createInfrastructureLogger : createLogger;
|
|
13
|
+
var DynamicFilesystemChunkLoadingRuntimeModule = class extends RuntimeModule {
|
|
14
|
+
constructor(runtimeRequirements, options, chunkLoadingContext) {
|
|
15
|
+
super("readFile chunk loading", RuntimeModule.STAGE_ATTACH + 1);
|
|
16
|
+
this.hooks = { strategyCase: new SyncWaterfallHook(["source"]) };
|
|
17
|
+
this.logger = createBundlerLogger("[ DynamicFilesystemChunkLoadingRuntimeModule ]");
|
|
18
|
+
this.runtimeRequirements = runtimeRequirements;
|
|
19
|
+
this.options = options;
|
|
20
|
+
this.chunkLoadingContext = chunkLoadingContext;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @private
|
|
24
|
+
* @param {Chunk} chunk chunk
|
|
25
|
+
* @param {string} rootOutputDir root output directory
|
|
26
|
+
* @returns {string} generated code
|
|
27
|
+
*/
|
|
28
|
+
_generateBaseUri(chunk, rootOutputDir) {
|
|
29
|
+
const options = chunk.getEntryOptions();
|
|
30
|
+
if (options && options.baseUri) return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
|
|
31
|
+
return `${RuntimeGlobals.baseURI} = require("url").pathToFileURL(${rootOutputDir ? `__dirname + ${JSON.stringify("/" + rootOutputDir)}` : "__filename"});`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @private
|
|
35
|
+
* @param {unknown[]} items item to log
|
|
36
|
+
*/
|
|
37
|
+
_getLogger(...items) {
|
|
38
|
+
if (!this.options.debug) return "";
|
|
39
|
+
return `console.log(${items.join(",")});`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @returns {string} runtime code
|
|
43
|
+
*/
|
|
44
|
+
generate() {
|
|
45
|
+
const { remotes = {}, name } = this.options;
|
|
46
|
+
const { webpack } = this.chunkLoadingContext;
|
|
47
|
+
const { chunkGraph, chunk, compilation } = this;
|
|
48
|
+
const { Template } = webpack;
|
|
49
|
+
if (!chunkGraph || !chunk || !compilation) {
|
|
50
|
+
this.logger.warn("Missing required properties. Returning empty string.");
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
const infrastructureLogger = compilation.getLogger?.("DynamicFilesystemChunkLoadingRuntimeModule");
|
|
54
|
+
if (infrastructureLogger) this.logger.setDelegate(infrastructureLogger);
|
|
55
|
+
const { runtimeTemplate } = compilation;
|
|
56
|
+
const jsModulePlugin = webpack?.javascript?.JavascriptModulesPlugin || __require("webpack/lib/javascript/JavascriptModulesPlugin");
|
|
57
|
+
const { chunkHasJs } = jsModulePlugin;
|
|
58
|
+
const fn = RuntimeGlobals.ensureChunkHandlers;
|
|
59
|
+
const hasJsMatcher = compileBooleanMatcher(chunkGraph.getChunkConditionMap(chunk, chunkHasJs));
|
|
60
|
+
const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
|
|
61
|
+
const rootOutputDir = getUndoPath(compilation.getPath(jsModulePlugin.getChunkFilenameTemplate(chunk, compilation.outputOptions), {
|
|
62
|
+
chunk,
|
|
63
|
+
contentHashType: "javascript"
|
|
64
|
+
}), compilation.outputOptions.path || "", false);
|
|
65
|
+
const stateExpression = this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers) ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm` : void 0;
|
|
66
|
+
const dynamicFilesystemChunkLoadingPluginCode = Template.asString([
|
|
67
|
+
fileSystemRunInContextStrategy.toString(),
|
|
68
|
+
httpEvalStrategy.toString(),
|
|
69
|
+
httpVmStrategy.toString(),
|
|
70
|
+
"const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {",
|
|
71
|
+
Template.indent([
|
|
72
|
+
"switch (strategyType) {",
|
|
73
|
+
Template.indent([
|
|
74
|
+
"case \"filesystem\": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);",
|
|
75
|
+
"case \"http-eval\": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);",
|
|
76
|
+
"case \"http-vm\": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);",
|
|
77
|
+
this.hooks.strategyCase.call("default: throw new Error(\"Invalid strategy type\");")
|
|
78
|
+
]),
|
|
79
|
+
"}"
|
|
80
|
+
]),
|
|
81
|
+
"};"
|
|
82
|
+
]);
|
|
83
|
+
return Template.asString([
|
|
84
|
+
dynamicFilesystemChunkLoadingPluginCode,
|
|
85
|
+
this.runtimeRequirements.has(RuntimeGlobals.baseURI) ? this._generateBaseUri(chunk, rootOutputDir) : "// no baseURI",
|
|
86
|
+
"",
|
|
87
|
+
"// object to store loaded chunks",
|
|
88
|
+
"// \"0\" means \"already loaded\", Promise means loading",
|
|
89
|
+
`var installedChunks = ${stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""}{`,
|
|
90
|
+
Template.indent(Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(",\n")),
|
|
91
|
+
"};",
|
|
92
|
+
"",
|
|
93
|
+
handleOnChunkLoad(this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded), runtimeTemplate),
|
|
94
|
+
"",
|
|
95
|
+
generateInstallChunk(runtimeTemplate, this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)),
|
|
96
|
+
"",
|
|
97
|
+
this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) ? generateLoadScript(runtimeTemplate) : "// no remote script loader needed",
|
|
98
|
+
this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) ? generateLoadingCode(this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers), fn, hasJsMatcher, rootOutputDir, remotes, name) : "// no chunk loading",
|
|
99
|
+
"",
|
|
100
|
+
generateExternalInstallChunkCode(this.runtimeRequirements.has(RuntimeGlobals.externalInstallChunk), this.options.debug),
|
|
101
|
+
"",
|
|
102
|
+
generateHmrCode(this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers), rootOutputDir),
|
|
103
|
+
"",
|
|
104
|
+
generateHmrManifestCode(this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadManifest), rootOutputDir)
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
export { DynamicFilesystemChunkLoadingRuntimeModule as default };
|
|
111
|
+
//# sourceMappingURL=DynamicFilesystemChunkLoadingRuntimeModule.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicFilesystemChunkLoadingRuntimeModule.mjs","names":[],"sources":["../../../src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts"],"sourcesContent":["/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n*/\nimport type { Chunk, Compiler } from 'webpack';\nimport { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path';\nconst { RuntimeGlobals, RuntimeModule } = require(\n normalizeWebpackPath('webpack'),\n) as typeof import('webpack');\nconst { getUndoPath } = require(\n normalizeWebpackPath('webpack/lib/util/identifier'),\n) as typeof import('webpack/lib/util/identifier');\nimport { SyncWaterfallHook } from 'tapable';\nconst compileBooleanMatcher = require(\n normalizeWebpackPath('webpack/lib/util/compileBooleanMatcher'),\n) as typeof import('webpack/lib/util/compileBooleanMatcher');\nimport {\n generateHmrCode,\n getInitialChunkIds,\n generateLoadingCode,\n generateHmrManifestCode,\n handleOnChunkLoad,\n generateLoadScript,\n generateInstallChunk,\n generateExternalInstallChunkCode,\n} from './webpackChunkUtilities';\nimport {\n createInfrastructureLogger,\n createLogger,\n} from '@module-federation/sdk';\nimport {\n fileSystemRunInContextStrategy,\n httpEvalStrategy,\n httpVmStrategy,\n} from '../filesystem/stratagies';\n\ninterface RemotesByType {\n functional: string[];\n normal: string[];\n}\n\ninterface DynamicFilesystemChunkLoadingRuntimeModuleOptions {\n baseURI: Compiler['options']['output']['publicPath'];\n promiseBaseURI?: string;\n remotes: Record<string, string>;\n name?: string;\n debug?: boolean;\n}\n\ninterface ChunkLoadingContext {\n webpack: Compiler['webpack'];\n}\n\nconst createBundlerLogger: typeof createLogger =\n typeof createInfrastructureLogger === 'function'\n ? (createInfrastructureLogger as unknown as typeof createLogger)\n : createLogger;\n\nclass DynamicFilesystemChunkLoadingRuntimeModule extends RuntimeModule {\n private runtimeRequirements: Set<string>;\n private options: DynamicFilesystemChunkLoadingRuntimeModuleOptions;\n private chunkLoadingContext: ChunkLoadingContext;\n hooks = {\n strategyCase: new SyncWaterfallHook(['source']),\n };\n private logger = createBundlerLogger(\n '[ DynamicFilesystemChunkLoadingRuntimeModule ]',\n );\n\n constructor(\n runtimeRequirements: Set<string>,\n options: DynamicFilesystemChunkLoadingRuntimeModuleOptions,\n chunkLoadingContext: ChunkLoadingContext,\n ) {\n super('readFile chunk loading', RuntimeModule.STAGE_ATTACH + 1);\n this.runtimeRequirements = runtimeRequirements;\n\n this.options = options;\n this.chunkLoadingContext = chunkLoadingContext;\n }\n\n /**\n * @private\n * @param {Chunk} chunk chunk\n * @param {string} rootOutputDir root output directory\n * @returns {string} generated code\n */\n _generateBaseUri(chunk: Chunk, rootOutputDir: string) {\n const options = chunk.getEntryOptions();\n if (options && options.baseUri) {\n return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;\n }\n\n return `${RuntimeGlobals.baseURI} = require(\"url\").pathToFileURL(${\n rootOutputDir\n ? `__dirname + ${JSON.stringify('/' + rootOutputDir)}`\n : '__filename'\n });`;\n }\n\n /**\n * @private\n * @param {unknown[]} items item to log\n */\n _getLogger(...items: unknown[]) {\n if (!this.options.debug) {\n return '';\n }\n\n return `console.log(${items.join(',')});`;\n }\n\n /**\n * @returns {string} runtime code\n */\n override generate() {\n const { remotes = {}, name } = this.options;\n const { webpack } = this.chunkLoadingContext;\n const { chunkGraph, chunk, compilation } = this;\n const { Template } = webpack;\n if (!chunkGraph || !chunk || !compilation) {\n this.logger.warn('Missing required properties. Returning empty string.');\n return '';\n }\n\n const infrastructureLogger = compilation.getLogger?.(\n 'DynamicFilesystemChunkLoadingRuntimeModule',\n );\n if (infrastructureLogger) {\n this.logger.setDelegate(infrastructureLogger as any);\n }\n\n const { runtimeTemplate } = compilation;\n const jsModulePlugin =\n webpack?.javascript?.JavascriptModulesPlugin ||\n require('webpack/lib/javascript/JavascriptModulesPlugin');\n const { chunkHasJs } = jsModulePlugin;\n const fn = RuntimeGlobals.ensureChunkHandlers;\n\n const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);\n const hasJsMatcher = compileBooleanMatcher(conditionMap);\n const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);\n\n const outputName = compilation.getPath(\n jsModulePlugin.getChunkFilenameTemplate(chunk, compilation.outputOptions),\n { chunk, contentHashType: 'javascript' },\n );\n const rootOutputDir = getUndoPath(\n outputName,\n compilation.outputOptions.path || '',\n false,\n );\n const stateExpression = this.runtimeRequirements.has(\n RuntimeGlobals.hmrDownloadUpdateHandlers,\n )\n ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm`\n : undefined;\n\n const dynamicFilesystemChunkLoadingPluginCode = Template.asString([\n fileSystemRunInContextStrategy.toString(),\n httpEvalStrategy.toString(),\n httpVmStrategy.toString(),\n 'const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {',\n Template.indent([\n 'switch (strategyType) {',\n Template.indent([\n 'case \"filesystem\": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);',\n 'case \"http-eval\": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);',\n 'case \"http-vm\": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);',\n this.hooks.strategyCase.call(\n 'default: throw new Error(\"Invalid strategy type\");',\n ) as string,\n ]),\n '}',\n ]),\n '};',\n ]);\n\n return Template.asString([\n dynamicFilesystemChunkLoadingPluginCode,\n this.runtimeRequirements.has(RuntimeGlobals.baseURI)\n ? this._generateBaseUri(chunk, rootOutputDir)\n : '// no baseURI',\n '',\n '// object to store loaded chunks',\n '// \"0\" means \"already loaded\", Promise means loading',\n `var installedChunks = ${\n stateExpression ? `${stateExpression} = ${stateExpression} || ` : ''\n }{`,\n Template.indent(\n Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(\n ',\\n',\n ),\n ),\n '};',\n '',\n handleOnChunkLoad(\n this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded),\n runtimeTemplate,\n ),\n '',\n generateInstallChunk(\n runtimeTemplate,\n this.runtimeRequirements.has(RuntimeGlobals.onChunksLoaded),\n ),\n '',\n this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)\n ? generateLoadScript(runtimeTemplate)\n : '// no remote script loader needed',\n this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)\n ? generateLoadingCode(\n this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers),\n fn,\n hasJsMatcher,\n rootOutputDir,\n remotes,\n name,\n )\n : '// no chunk loading',\n '',\n generateExternalInstallChunkCode(\n this.runtimeRequirements.has(RuntimeGlobals.externalInstallChunk),\n this.options.debug,\n ),\n '',\n generateHmrCode(\n this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers),\n rootOutputDir,\n ),\n '',\n generateHmrManifestCode(\n this.runtimeRequirements.has(RuntimeGlobals.hmrDownloadManifest),\n rootOutputDir,\n ),\n ]);\n }\n}\n\nexport default DynamicFilesystemChunkLoadingRuntimeModule;\n"],"mappings":";;;;;;;;AAKA,MAAM,EAAE,gBAAgB,4BACtB,qBAAqB,UAAU,CAChC;AACD,MAAM,EAAE,0BACN,qBAAqB,8BAA8B,CACpD;AAED,MAAM,kCACJ,qBAAqB,yCAAyC,CAC/D;AAsCD,MAAM,sBACJ,OAAO,+BAA+B,aACjC,6BACD;AAEN,IAAM,6CAAN,cAAyD,cAAc;CAWrE,YACE,qBACA,SACA,qBACA;AACA,QAAM,0BAA0B,cAAc,eAAe,EAAE;eAZzD,EACN,cAAc,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAChD;gBACgB,oBACf,iDACD;AAQC,OAAK,sBAAsB;AAE3B,OAAK,UAAU;AACf,OAAK,sBAAsB;;;;;;;;CAS7B,iBAAiB,OAAc,eAAuB;EACpD,MAAM,UAAU,MAAM,iBAAiB;AACvC,MAAI,WAAW,QAAQ,QACrB,QAAO,GAAG,eAAe,QAAQ,KAAK,KAAK,UAAU,QAAQ,QAAQ,CAAC;AAGxE,SAAO,GAAG,eAAe,QAAQ,kCAC/B,gBACI,eAAe,KAAK,UAAU,MAAM,cAAc,KAClD,aACL;;;;;;CAOH,WAAW,GAAG,OAAkB;AAC9B,MAAI,CAAC,KAAK,QAAQ,MAChB,QAAO;AAGT,SAAO,eAAe,MAAM,KAAK,IAAI,CAAC;;;;;CAMxC,AAAS,WAAW;EAClB,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,KAAK;EACpC,MAAM,EAAE,YAAY,KAAK;EACzB,MAAM,EAAE,YAAY,OAAO,gBAAgB;EAC3C,MAAM,EAAE,aAAa;AACrB,MAAI,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa;AACzC,QAAK,OAAO,KAAK,uDAAuD;AACxE,UAAO;;EAGT,MAAM,uBAAuB,YAAY,YACvC,6CACD;AACD,MAAI,qBACF,MAAK,OAAO,YAAY,qBAA4B;EAGtD,MAAM,EAAE,oBAAoB;EAC5B,MAAM,iBACJ,SAAS,YAAY,qCACb,iDAAiD;EAC3D,MAAM,EAAE,eAAe;EACvB,MAAM,KAAK,eAAe;EAG1B,MAAM,eAAe,sBADA,WAAW,qBAAqB,OAAO,WAAW,CACf;EACxD,MAAM,kBAAkB,mBAAmB,OAAO,YAAY,WAAW;EAMzE,MAAM,gBAAgB,YAJH,YAAY,QAC7B,eAAe,yBAAyB,OAAO,YAAY,cAAc,EACzE;GAAE;GAAO,iBAAiB;GAAc,CACzC,EAGC,YAAY,cAAc,QAAQ,IAClC,MACD;EACD,MAAM,kBAAkB,KAAK,oBAAoB,IAC/C,eAAe,0BAChB,GACG,GAAG,eAAe,sBAAsB,eACxC;EAEJ,MAAM,0CAA0C,SAAS,SAAS;GAChE,+BAA+B,UAAU;GACzC,iBAAiB,UAAU;GAC3B,eAAe,UAAU;GACzB;GACA,SAAS,OAAO;IACd;IACA,SAAS,OAAO;KACd;KACA;KACA;KACA,KAAK,MAAM,aAAa,KACtB,uDACD;KACF,CAAC;IACF;IACD,CAAC;GACF;GACD,CAAC;AAEF,SAAO,SAAS,SAAS;GACvB;GACA,KAAK,oBAAoB,IAAI,eAAe,QAAQ,GAChD,KAAK,iBAAiB,OAAO,cAAc,GAC3C;GACJ;GACA;GACA;GACA,yBACE,kBAAkB,GAAG,gBAAgB,KAAK,gBAAgB,QAAQ,GACnE;GACD,SAAS,OACP,MAAM,KAAK,kBAAkB,OAAO,GAAG,KAAK,UAAU,GAAG,CAAC,KAAK,CAAC,KAC9D,MACD,CACF;GACD;GACA;GACA,kBACE,KAAK,oBAAoB,IAAI,eAAe,eAAe,EAC3D,gBACD;GACD;GACA,qBACE,iBACA,KAAK,oBAAoB,IAAI,eAAe,eAAe,CAC5D;GACD;GACA,KAAK,oBAAoB,IAAI,eAAe,oBAAoB,GAC5D,mBAAmB,gBAAgB,GACnC;GACJ,KAAK,oBAAoB,IAAI,eAAe,oBAAoB,GAC5D,oBACE,KAAK,oBAAoB,IAAI,eAAe,oBAAoB,EAChE,IACA,cACA,eACA,SACA,KACD,GACD;GACJ;GACA,iCACE,KAAK,oBAAoB,IAAI,eAAe,qBAAqB,EACjE,KAAK,QAAQ,MACd;GACD;GACA,gBACE,KAAK,oBAAoB,IAAI,eAAe,0BAA0B,EACtE,cACD;GACD;GACA,wBACE,KAAK,oBAAoB,IAAI,eAAe,oBAAoB,EAChE,cACD;GACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Chunk, Compiler, Module } from "webpack";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/EntryChunkTrackerPlugin.d.ts
|
|
4
|
+
interface Options {
|
|
5
|
+
eager?: RegExp | ((module: Module) => boolean);
|
|
6
|
+
excludeChunk?: (chunk: Chunk) => boolean;
|
|
7
|
+
}
|
|
8
|
+
declare class EntryChunkTrackerPlugin {
|
|
9
|
+
private _options;
|
|
10
|
+
constructor(options?: Options);
|
|
11
|
+
apply(compiler: Compiler): void;
|
|
12
|
+
private _handleRenderStartup;
|
|
13
|
+
private _getTemplateString;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Options, EntryChunkTrackerPlugin as default };
|
|
17
|
+
//# sourceMappingURL=EntryChunkTrackerPlugin.d.mts.map
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Chunk, Compiler, Module } from "webpack";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/EntryChunkTrackerPlugin.d.ts
|
|
4
|
+
interface Options {
|
|
5
|
+
eager?: RegExp | ((module: Module) => boolean);
|
|
6
|
+
excludeChunk?: (chunk: Chunk) => boolean;
|
|
5
7
|
}
|
|
6
8
|
declare class EntryChunkTrackerPlugin {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
private _options;
|
|
10
|
+
constructor(options?: Options);
|
|
11
|
+
apply(compiler: Compiler): void;
|
|
12
|
+
private _handleRenderStartup;
|
|
13
|
+
private _getTemplateString;
|
|
12
14
|
}
|
|
13
|
-
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Options, EntryChunkTrackerPlugin as default };
|
|
17
|
+
//# sourceMappingURL=EntryChunkTrackerPlugin.d.ts.map
|
|
@@ -1,30 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return Template.asString([
|
|
27
|
-
`if(typeof module !== 'undefined') {
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
3
|
+
let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path");
|
|
4
|
+
|
|
5
|
+
//#region src/plugins/EntryChunkTrackerPlugin.ts
|
|
6
|
+
require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/SortableSet"));
|
|
7
|
+
var EntryChunkTrackerPlugin = class {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this._options = options || {};
|
|
10
|
+
}
|
|
11
|
+
apply(compiler) {
|
|
12
|
+
compiler.hooks.thisCompilation.tap("EntryChunkTrackerPlugin", (compilation) => {
|
|
13
|
+
this._handleRenderStartup(compiler, compilation);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
_handleRenderStartup(compiler, compilation) {
|
|
17
|
+
compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation).renderStartup.tap("EntryChunkTrackerPlugin", (source, _renderContext, upperContext) => {
|
|
18
|
+
if (this._options.excludeChunk && this._options.excludeChunk(upperContext.chunk)) return source;
|
|
19
|
+
const templateString = this._getTemplateString(compiler, source);
|
|
20
|
+
return new compiler.webpack.sources.ConcatSource(templateString);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
_getTemplateString(compiler, source) {
|
|
24
|
+
const { Template } = compiler.webpack;
|
|
25
|
+
return Template.asString([`if(typeof module !== 'undefined') {
|
|
28
26
|
globalThis.entryChunkCache = globalThis.entryChunkCache || new Set();
|
|
29
27
|
module.filename && globalThis.entryChunkCache.add(module.filename);
|
|
30
28
|
if(module.children) {
|
|
@@ -32,10 +30,10 @@ class EntryChunkTrackerPlugin {
|
|
|
32
30
|
c.filename && globalThis.entryChunkCache.add(c.filename);
|
|
33
31
|
})
|
|
34
32
|
}
|
|
35
|
-
}`,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
}`, Template.indent(source.source().toString())]);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
40
38
|
exports.default = EntryChunkTrackerPlugin;
|
|
41
39
|
//# sourceMappingURL=EntryChunkTrackerPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryChunkTrackerPlugin.js","
|
|
1
|
+
{"version":3,"file":"EntryChunkTrackerPlugin.js","names":[],"sources":["../../../src/plugins/EntryChunkTrackerPlugin.ts"],"sourcesContent":["import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path';\nimport type {\n Compiler,\n Compilation,\n Chunk,\n sources,\n Module,\n RuntimeGlobals,\n javascript,\n} from 'webpack';\nimport type { SyncWaterfallHook } from 'tapable';\n\nconst SortableSet = require(\n normalizeWebpackPath('webpack/lib/util/SortableSet'),\n) as typeof import('webpack/lib/util/SortableSet');\n\ntype CompilationHooksJavascriptModulesPlugin = ReturnType<\n typeof javascript.JavascriptModulesPlugin.getCompilationHooks\n>;\ntype RenderStartup = CompilationHooksJavascriptModulesPlugin['renderStartup'];\n\ntype InferStartupRenderContext<T> =\n T extends SyncWaterfallHook<\n [infer Source, infer Module, infer StartupRenderContext]\n >\n ? StartupRenderContext\n : never;\n\ntype StartupRenderContext = InferStartupRenderContext<RenderStartup>;\n\nexport interface Options {\n eager?: RegExp | ((module: Module) => boolean);\n excludeChunk?: (chunk: Chunk) => boolean;\n}\n\nclass EntryChunkTrackerPlugin {\n private _options: Options;\n\n constructor(options?: Options) {\n this._options = options || {};\n }\n\n apply(compiler: Compiler) {\n compiler.hooks.thisCompilation.tap(\n 'EntryChunkTrackerPlugin',\n (compilation: Compilation) => {\n this._handleRenderStartup(compiler, compilation);\n },\n );\n }\n private _handleRenderStartup(compiler: Compiler, compilation: Compilation) {\n compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(\n compilation,\n ).renderStartup.tap(\n 'EntryChunkTrackerPlugin',\n (\n source: sources.Source,\n _renderContext: Module,\n upperContext: StartupRenderContext,\n ) => {\n if (\n this._options.excludeChunk &&\n this._options.excludeChunk(upperContext.chunk)\n ) {\n return source;\n }\n\n const templateString = this._getTemplateString(compiler, source);\n\n return new compiler.webpack.sources.ConcatSource(templateString);\n },\n );\n }\n\n private _getTemplateString(compiler: Compiler, source: sources.Source) {\n const { Template } = compiler.webpack;\n return Template.asString([\n `if(typeof module !== 'undefined') {\n globalThis.entryChunkCache = globalThis.entryChunkCache || new Set();\n module.filename && globalThis.entryChunkCache.add(module.filename);\n if(module.children) {\n module.children.forEach(function(c) {\n c.filename && globalThis.entryChunkCache.add(c.filename);\n })\n}\n }`,\n Template.indent(source.source().toString()),\n ]);\n }\n}\n\nexport default EntryChunkTrackerPlugin;\n"],"mappings":";;;;;AAYoB,gFACG,+BAA+B,CACrD;AAqBD,IAAM,0BAAN,MAA8B;CAG5B,YAAY,SAAmB;AAC7B,OAAK,WAAW,WAAW,EAAE;;CAG/B,MAAM,UAAoB;AACxB,WAAS,MAAM,gBAAgB,IAC7B,4BACC,gBAA6B;AAC5B,QAAK,qBAAqB,UAAU,YAAY;IAEnD;;CAEH,AAAQ,qBAAqB,UAAoB,aAA0B;AACzE,WAAS,QAAQ,WAAW,wBAAwB,oBAClD,YACD,CAAC,cAAc,IACd,4BAEE,QACA,gBACA,iBACG;AACH,OACE,KAAK,SAAS,gBACd,KAAK,SAAS,aAAa,aAAa,MAAM,CAE9C,QAAO;GAGT,MAAM,iBAAiB,KAAK,mBAAmB,UAAU,OAAO;AAEhE,UAAO,IAAI,SAAS,QAAQ,QAAQ,aAAa,eAAe;IAEnE;;CAGH,AAAQ,mBAAmB,UAAoB,QAAwB;EACrE,MAAM,EAAE,aAAa,SAAS;AAC9B,SAAO,SAAS,SAAS,CACvB;;;;;;;;UASA,SAAS,OAAO,OAAO,QAAQ,CAAC,UAAU,CAAC,CAC5C,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { __require } from "../../_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { normalizeWebpackPath } from "@module-federation/sdk/normalize-webpack-path";
|
|
3
|
+
|
|
4
|
+
//#region src/plugins/EntryChunkTrackerPlugin.ts
|
|
5
|
+
__require(normalizeWebpackPath("webpack/lib/util/SortableSet"));
|
|
6
|
+
var EntryChunkTrackerPlugin = class {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this._options = options || {};
|
|
9
|
+
}
|
|
10
|
+
apply(compiler) {
|
|
11
|
+
compiler.hooks.thisCompilation.tap("EntryChunkTrackerPlugin", (compilation) => {
|
|
12
|
+
this._handleRenderStartup(compiler, compilation);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
_handleRenderStartup(compiler, compilation) {
|
|
16
|
+
compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation).renderStartup.tap("EntryChunkTrackerPlugin", (source, _renderContext, upperContext) => {
|
|
17
|
+
if (this._options.excludeChunk && this._options.excludeChunk(upperContext.chunk)) return source;
|
|
18
|
+
const templateString = this._getTemplateString(compiler, source);
|
|
19
|
+
return new compiler.webpack.sources.ConcatSource(templateString);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
_getTemplateString(compiler, source) {
|
|
23
|
+
const { Template } = compiler.webpack;
|
|
24
|
+
return Template.asString([`if(typeof module !== 'undefined') {
|
|
25
|
+
globalThis.entryChunkCache = globalThis.entryChunkCache || new Set();
|
|
26
|
+
module.filename && globalThis.entryChunkCache.add(module.filename);
|
|
27
|
+
if(module.children) {
|
|
28
|
+
module.children.forEach(function(c) {
|
|
29
|
+
c.filename && globalThis.entryChunkCache.add(c.filename);
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
}`, Template.indent(source.source().toString())]);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { EntryChunkTrackerPlugin as default };
|
|
38
|
+
//# sourceMappingURL=EntryChunkTrackerPlugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntryChunkTrackerPlugin.mjs","names":[],"sources":["../../../src/plugins/EntryChunkTrackerPlugin.ts"],"sourcesContent":["import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path';\nimport type {\n Compiler,\n Compilation,\n Chunk,\n sources,\n Module,\n RuntimeGlobals,\n javascript,\n} from 'webpack';\nimport type { SyncWaterfallHook } from 'tapable';\n\nconst SortableSet = require(\n normalizeWebpackPath('webpack/lib/util/SortableSet'),\n) as typeof import('webpack/lib/util/SortableSet');\n\ntype CompilationHooksJavascriptModulesPlugin = ReturnType<\n typeof javascript.JavascriptModulesPlugin.getCompilationHooks\n>;\ntype RenderStartup = CompilationHooksJavascriptModulesPlugin['renderStartup'];\n\ntype InferStartupRenderContext<T> =\n T extends SyncWaterfallHook<\n [infer Source, infer Module, infer StartupRenderContext]\n >\n ? StartupRenderContext\n : never;\n\ntype StartupRenderContext = InferStartupRenderContext<RenderStartup>;\n\nexport interface Options {\n eager?: RegExp | ((module: Module) => boolean);\n excludeChunk?: (chunk: Chunk) => boolean;\n}\n\nclass EntryChunkTrackerPlugin {\n private _options: Options;\n\n constructor(options?: Options) {\n this._options = options || {};\n }\n\n apply(compiler: Compiler) {\n compiler.hooks.thisCompilation.tap(\n 'EntryChunkTrackerPlugin',\n (compilation: Compilation) => {\n this._handleRenderStartup(compiler, compilation);\n },\n );\n }\n private _handleRenderStartup(compiler: Compiler, compilation: Compilation) {\n compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(\n compilation,\n ).renderStartup.tap(\n 'EntryChunkTrackerPlugin',\n (\n source: sources.Source,\n _renderContext: Module,\n upperContext: StartupRenderContext,\n ) => {\n if (\n this._options.excludeChunk &&\n this._options.excludeChunk(upperContext.chunk)\n ) {\n return source;\n }\n\n const templateString = this._getTemplateString(compiler, source);\n\n return new compiler.webpack.sources.ConcatSource(templateString);\n },\n );\n }\n\n private _getTemplateString(compiler: Compiler, source: sources.Source) {\n const { Template } = compiler.webpack;\n return Template.asString([\n `if(typeof module !== 'undefined') {\n globalThis.entryChunkCache = globalThis.entryChunkCache || new Set();\n module.filename && globalThis.entryChunkCache.add(module.filename);\n if(module.children) {\n module.children.forEach(function(c) {\n c.filename && globalThis.entryChunkCache.add(c.filename);\n })\n}\n }`,\n Template.indent(source.source().toString()),\n ]);\n }\n}\n\nexport default EntryChunkTrackerPlugin;\n"],"mappings":";;;;UAaE,qBAAqB,+BAA+B,CACrD;AAqBD,IAAM,0BAAN,MAA8B;CAG5B,YAAY,SAAmB;AAC7B,OAAK,WAAW,WAAW,EAAE;;CAG/B,MAAM,UAAoB;AACxB,WAAS,MAAM,gBAAgB,IAC7B,4BACC,gBAA6B;AAC5B,QAAK,qBAAqB,UAAU,YAAY;IAEnD;;CAEH,AAAQ,qBAAqB,UAAoB,aAA0B;AACzE,WAAS,QAAQ,WAAW,wBAAwB,oBAClD,YACD,CAAC,cAAc,IACd,4BAEE,QACA,gBACA,iBACG;AACH,OACE,KAAK,SAAS,gBACd,KAAK,SAAS,aAAa,aAAa,MAAM,CAE9C,QAAO;GAGT,MAAM,iBAAiB,KAAK,mBAAmB,UAAU,OAAO;AAEhE,UAAO,IAAI,SAAS,QAAQ,QAAQ,aAAa,eAAe;IAEnE;;CAGH,AAAQ,mBAAmB,UAAoB,QAAwB;EACrE,MAAM,EAAE,aAAa,SAAS;AAC9B,SAAO,SAAS,SAAS,CACvB;;;;;;;;UASA,SAAS,OAAO,OAAO,QAAQ,CAAC,UAAU,CAAC,CAC5C,CAAC"}
|