@module-federation/node 2.0.1 → 2.0.2-beta.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +27 -0
  3. package/jest.config.d.ts +11 -0
  4. package/jest.config.js +19 -0
  5. package/jest.config.js.map +1 -0
  6. package/package.json +3 -2
  7. package/src/filesystem/DynamicFilesystemRuntimeModule.d.ts +6 -0
  8. package/src/filesystem/DynamicFilesystemRuntimeModule.js +30 -0
  9. package/src/filesystem/DynamicFilesystemRuntimeModule.js.map +1 -0
  10. package/src/filesystem/stratagies.d.ts +11 -0
  11. package/src/filesystem/stratagies.js +105 -0
  12. package/src/filesystem/stratagies.js.map +1 -0
  13. package/src/plugins/CommonJsChunkLoadingPlugin.js +29 -2
  14. package/src/plugins/CommonJsChunkLoadingPlugin.js.map +1 -1
  15. package/src/plugins/{LoadFileChunkLoadingRuntimeModule.d.ts → DynamicFilesystemChunkLoadingRuntimeModule.d.ts} +8 -4
  16. package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js +145 -0
  17. package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js.map +1 -0
  18. package/src/plugins/FederationModuleInfoRuntimeModule.d.ts +9 -0
  19. package/src/plugins/FederationModuleInfoRuntimeModule.js +55 -0
  20. package/src/plugins/FederationModuleInfoRuntimeModule.js.map +1 -0
  21. package/src/plugins/NodeFederationPlugin.d.ts +18 -25
  22. package/src/plugins/NodeFederationPlugin.js +41 -102
  23. package/src/plugins/NodeFederationPlugin.js.map +1 -1
  24. package/src/plugins/RemotePublicPathRuntimeModule.d.ts +10 -0
  25. package/src/plugins/RemotePublicPathRuntimeModule.js +86 -0
  26. package/src/plugins/RemotePublicPathRuntimeModule.js.map +1 -0
  27. package/src/plugins/StreamingTargetPlugin.js +6 -7
  28. package/src/plugins/StreamingTargetPlugin.js.map +1 -1
  29. package/src/plugins/UniversalFederationPlugin.js +2 -1
  30. package/src/plugins/UniversalFederationPlugin.js.map +1 -1
  31. package/src/plugins/parts.d.ts +50 -0
  32. package/src/plugins/parts.js +316 -0
  33. package/src/plugins/parts.js.map +1 -0
  34. package/src/plugins/LoadFileChunkLoadingRuntimeModule.js +0 -434
  35. package/src/plugins/LoadFileChunkLoadingRuntimeModule.js.map +0 -1
  36. package/src/plugins/loadScript.d.ts +0 -7
  37. package/src/plugins/loadScript.js +0 -116
  38. package/src/plugins/loadScript.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [2.0.2-beta.0](https://github.com/module-federation/nextjs-mf/compare/node-2.0.1...node-2.0.2-beta.0) (2023-09-14)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * import utils manually ([2767191](https://github.com/module-federation/nextjs-mf/commit/2767191467d9d685704b747d42b5f170da233847))
11
+ * **node:** use ES6 imports and override method in FederationModuleInfoRuntimeModule (#bytedance) ([d420ad9](https://github.com/module-federation/nextjs-mf/commit/d420ad94b7515123254af45c61704abcc0971511))
12
+ * remove ensure remote runtime module ([d06c082](https://github.com/module-federation/nextjs-mf/commit/d06c0823435063dcd277897ab551cd3a9c996d3d))
13
+
14
+
15
+ ### Features
16
+
17
+ * add auto public path support for remote modules (node_auto_public_path) ([b12c984](https://github.com/module-federation/nextjs-mf/commit/b12c9841aa55027cb7b77e768ff9c0b456120d51))
18
+ * Dynamic Filesystem ([#1274](https://github.com/module-federation/nextjs-mf/issues/1274)) ([2bec98a](https://github.com/module-federation/nextjs-mf/commit/2bec98a2472b44898a7f14ec6868a2368cfb6d82))
19
+ * FederationModuleInfo Runtime Module ([50a1a0c](https://github.com/module-federation/nextjs-mf/commit/50a1a0c7a37bbe42ab6f2f5559b411567fee0fe9))
20
+ * FederationModuleInfo Runtime Module ([7b09ef6](https://github.com/module-federation/nextjs-mf/commit/7b09ef6c0f4ee68a1b5caa5f021632059c522b8f))
21
+ * implement Bytedance Infra Node Plugin ([82e6801](https://github.com/module-federation/nextjs-mf/commit/82e680157bbad68fa93800a69149c4c28652cfed))
22
+ * implement Bytedance Infra Node Plugin ([97f283e](https://github.com/module-federation/nextjs-mf/commit/97f283e4746bf6f048ee27584adde5249c8e577c))
23
+ * native self forming node federation ([#1291](https://github.com/module-federation/nextjs-mf/issues/1291)) ([1dd5ed1](https://github.com/module-federation/nextjs-mf/commit/1dd5ed17c981e036336925e807203e94b58c36d6))
24
+ * **node-remote:** Improve module federation runtime compatibility ([5eb2092](https://github.com/module-federation/nextjs-mf/commit/5eb209249c44d525c12eff5739bf23a93db08e4f))
25
+ * **node:** auto set public path and improve chunk loading strategy #node_auto_public_path ([65989da](https://github.com/module-federation/nextjs-mf/commit/65989dab95ee2acee7ec9a5ab321921a278cd078))
26
+ * **node:** enhance error handling and remote container registry in RemotePublicPathRuntimeModule (#bytedance) ([061285e](https://github.com/module-federation/nextjs-mf/commit/061285e0b6210baa1dd502dc94fd57fd9a8af822))
27
+ * **NodeFederationPlugin:** assign remoteContainerRegistry to importMetaName ([ca33d98](https://github.com/module-federation/nextjs-mf/commit/ca33d98df63fdb8dac402b1cc0ec8bf95f9f1971))
28
+ * **node:** remove unused import from DynamicFilesystemRuntimeModule ([f9787a9](https://github.com/module-federation/nextjs-mf/commit/f9787a9a67da936679db388e5c66e012e7452d8a))
29
+ * remove old loadScript hack ([fbe19bc](https://github.com/module-federation/nextjs-mf/commit/fbe19bc76694c14b6a95c577669c2e8656ede1ba))
30
+ * **utilities:** update DelegateModulesPlugin and tests (#node_auto_public_path) ([df8bb79](https://github.com/module-federation/nextjs-mf/commit/df8bb791c3fedef299cb15960546ff5ad9c665ef))
31
+
32
+
33
+
5
34
  ## [2.0.1](https://github.com/module-federation/nextjs-mf/compare/node-2.0.0...node-2.0.1) (2023-09-13)
6
35
 
7
36
  ### Dependency Updates
package/README.md CHANGED
@@ -152,6 +152,33 @@ revalidate().then((shouldReload) => {
152
152
  });
153
153
  ```
154
154
 
155
+ ### Overrideing default http chunk fetch
156
+
157
+ ```js
158
+ const chunkFetcher = globalThis.webpackChunkLoad || globalThis.fetch || fetchPolyfill;
159
+ // then it will pass one argument to the function, the url to fetch
160
+
161
+ chunkFetcher(url)
162
+ .then((res) => res.text())
163
+ .then((text) => {
164
+ // do something with the text
165
+ });
166
+ ```
167
+
168
+ if you want to use your own custom fetch, or add fetch headers, either in the entrypoint of webpack or outside
169
+ of webpack scope, like in express server- you can override the default chunk fetcher by setting the globalThis.webpackChunkLoad variable.
170
+
171
+ ```js
172
+ globalThis.webpackChunkLoad = async (url) => {
173
+ const res = await fetch(url, {
174
+ headers: {
175
+ 'x-custom-header': 'custom-header-value',
176
+ },
177
+ });
178
+ return res.text();
179
+ };
180
+ ```
181
+
155
182
  ## 🔑 License
156
183
 
157
184
  - MIT @[ScriptedAlchemy](https://github.com/ScriptedAlchemy)
@@ -0,0 +1,11 @@
1
+ export let displayName: string;
2
+ export let preset: string;
3
+ export let globals: {};
4
+ export let testEnvironment: string;
5
+ export let transform: {
6
+ '^.+\\.[tj]s$': (string | {
7
+ tsconfig: string;
8
+ })[];
9
+ };
10
+ export let moduleFileExtensions: string[];
11
+ export let coverageDirectory: string;
package/jest.config.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /* eslint-disable */
3
+ module.exports = {
4
+ displayName: 'node',
5
+ preset: '../../jest.preset.js',
6
+ globals: {},
7
+ testEnvironment: 'node',
8
+ transform: {
9
+ '^.+\\.[tj]s$': [
10
+ 'ts-jest',
11
+ {
12
+ tsconfig: '<rootDir>/tsconfig.spec.json',
13
+ },
14
+ ],
15
+ },
16
+ moduleFileExtensions: ['ts', 'js', 'html'],
17
+ coverageDirectory: '../../coverage/packages/node',
18
+ };
19
+ //# sourceMappingURL=jest.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../../../packages/node/jest.config.js"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,MAAM,CAAC,OAAO,GAAG;IACf,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,MAAM;IACvB,SAAS,EAAE;QACT,cAAc,EAAE;YACd,SAAS;YACT;gBACE,QAAQ,EAAE,8BAA8B;aACzC;SACF;KACF;IACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;IAC1C,iBAAiB,EAAE,8BAA8B;CAClD,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "public": true,
3
3
  "name": "@module-federation/node",
4
- "version": "2.0.1",
4
+ "version": "2.0.2-beta.0",
5
5
  "type": "commonjs",
6
6
  "main": "./src/index.js",
7
7
  "exports": {
@@ -34,7 +34,8 @@
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
36
  "node-fetch": "^2.6.7",
37
- "encoding": "^0.1.13"
37
+ "encoding": "^0.1.13",
38
+ "@module-federation/utilities": "3.0.2-beta.0"
38
39
  },
39
40
  "peerDependencies": {
40
41
  "webpack": "^5.40.0",
@@ -0,0 +1,6 @@
1
+ export default FileSystemRunInContextStrategyRuntimeModule;
2
+ declare class FileSystemRunInContextStrategyRuntimeModule extends RuntimeModule {
3
+ constructor();
4
+ generate(): string;
5
+ }
6
+ import { RuntimeModule } from "webpack";
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const { RuntimeModule, Template } = require('webpack');
4
+ const stratagies_1 = require("./stratagies");
5
+ class FileSystemRunInContextStrategyRuntimeModule extends RuntimeModule {
6
+ constructor() {
7
+ super('dynamic-file-system', RuntimeModule.STAGE_BASIC);
8
+ }
9
+ generate() {
10
+ return Template.asString([
11
+ stratagies_1.fileSystemRunInContextStrategy.toString(),
12
+ stratagies_1.httpEvalStrategy.toString(),
13
+ stratagies_1.httpVmStrategy.toString(),
14
+ 'const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {',
15
+ Template.indent([
16
+ 'switch (strategyType) {',
17
+ Template.indent([
18
+ 'case "filesystem": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);',
19
+ 'case "http-eval": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);',
20
+ 'case "http-vm": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);',
21
+ 'default: throw new Error("Invalid strategy type");',
22
+ ]),
23
+ '}',
24
+ ]),
25
+ '};',
26
+ ]);
27
+ }
28
+ }
29
+ exports.default = FileSystemRunInContextStrategyRuntimeModule;
30
+ //# sourceMappingURL=DynamicFilesystemRuntimeModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicFilesystemRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/filesystem/DynamicFilesystemRuntimeModule.js"],"names":[],"mappings":";;AAAA,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACvD,6CAIsB;AAEtB,MAAM,2CAA4C,SAAQ,aAAa;IACrE;QACE,KAAK,CAAC,qBAAqB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ;QACN,OAAO,QAAQ,CAAC,QAAQ,CAAC;YACvB,2CAA8B,CAAC,QAAQ,EAAE;YACzC,6BAAgB,CAAC,QAAQ,EAAE;YAC3B,2BAAc,CAAC,QAAQ,EAAE;YACzB,8FAA8F;YAC9F,QAAQ,CAAC,MAAM,CAAC;gBACd,yBAAyB;gBACzB,QAAQ,CAAC,MAAM,CAAC;oBACd,2GAA2G;oBAC3G,4FAA4F;oBAC5F,wFAAwF;oBACxF,oDAAoD;iBACrD,CAAC;gBACF,GAAG;aACJ,CAAC;YACF,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,2CAA2C,CAAC"}
@@ -0,0 +1,11 @@
1
+ export function fileSystemRunInContextStrategy(chunkId: any, rootOutputDir: any, remotes: any, callback: any): Promise<void>;
2
+ export function httpEvalStrategy(chunkName: any, remoteName: any, remotes: any, callback: any): Promise<void>;
3
+ /**
4
+ * HttpVmStrategy
5
+ * This function is used to execute a chunk of code in a VM using HTTP or HTTPS based on the protocol.
6
+ * @param {string} chunkName - The name of the chunk to be executed.
7
+ * @param {string} remoteName - The name of the remote server.
8
+ * @param {object} remotes - An object containing the remote servers.
9
+ * @param {function} callback - A callback function to be executed after the chunk is executed.
10
+ */
11
+ export function httpVmStrategy(chunkName: string, remoteName: string, remotes: object, callback: Function): Promise<void>;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpVmStrategy = exports.httpEvalStrategy = exports.fileSystemRunInContextStrategy = void 0;
4
+ async function fileSystemRunInContextStrategy(chunkId, rootOutputDir, remotes, callback) {
5
+ var fs = require('fs');
6
+ var path = require('path');
7
+ var vm = require('vm');
8
+ var filename = require('path').join(__dirname,
9
+ //eslint-disable-next-line
10
+ rootOutputDir + __webpack_require__.u(chunkId));
11
+ if (fs.existsSync(filename)) {
12
+ fs.readFile(filename, 'utf-8', (err, content) => {
13
+ if (err) {
14
+ callback(err, null);
15
+ return;
16
+ }
17
+ var chunk = {};
18
+ try {
19
+ vm.runInThisContext('(function(exports, require, __dirname, __filename) {' +
20
+ content +
21
+ '\n})', filename)(chunk, require, path.dirname(filename), filename);
22
+ callback(null, chunk);
23
+ }
24
+ catch (e) {
25
+ console.log("'runInThisContext threw'", e);
26
+ callback(e, null);
27
+ }
28
+ });
29
+ }
30
+ else {
31
+ const err = new Error(`File ${filename} does not exist`);
32
+ callback(err, null);
33
+ }
34
+ }
35
+ exports.fileSystemRunInContextStrategy = fileSystemRunInContextStrategy;
36
+ // HttpEvalStrategy
37
+ async function httpEvalStrategy(chunkName, remoteName, remotes, callback) {
38
+ var url;
39
+ try {
40
+ // eslint-disable-next-line no-undef
41
+ url = new URL(chunkName, __webpack_require__.p);
42
+ }
43
+ catch (e) {
44
+ console.error('module-federation: failed to construct absolute chunk path of', remoteName, 'for', chunkName, e);
45
+ url = new URL(remotes[remoteName]);
46
+ var getBasenameFromUrl = (url) => {
47
+ const urlParts = url.split('/');
48
+ return urlParts[urlParts.length - 1];
49
+ };
50
+ var fileToReplace = getBasenameFromUrl(url.pathname);
51
+ url.pathname = url.pathname.replace(fileToReplace, chunkName);
52
+ }
53
+ const data = await fetch(url).then((res) => res.text());
54
+ var chunk = {};
55
+ try {
56
+ eval('(function(exports, require, __dirname, __filename) {' + data + '\n})', chunkName)(chunk, require, '.', chunkName);
57
+ callback(null, chunk);
58
+ }
59
+ catch (e) {
60
+ callback(e, null);
61
+ }
62
+ }
63
+ exports.httpEvalStrategy = httpEvalStrategy;
64
+ /**
65
+ * HttpVmStrategy
66
+ * This function is used to execute a chunk of code in a VM using HTTP or HTTPS based on the protocol.
67
+ * @param {string} chunkName - The name of the chunk to be executed.
68
+ * @param {string} remoteName - The name of the remote server.
69
+ * @param {object} remotes - An object containing the remote servers.
70
+ * @param {function} callback - A callback function to be executed after the chunk is executed.
71
+ */
72
+ async function httpVmStrategy(chunkName, remoteName, remotes, callback) {
73
+ var http = require('http');
74
+ var https = require('https');
75
+ var vm = require('vm');
76
+ var url;
77
+ try {
78
+ console.log('trying chunk load', chunkName, __webpack_require__.p);
79
+ url = new URL(chunkName, __webpack_require__.p);
80
+ }
81
+ catch (e) {
82
+ console.error('module-federation: failed to construct absolute chunk path of', remoteName, 'for', chunkName, e);
83
+ console.log('fallbak url constructed', remotes._config[remoteName]);
84
+ url = new URL(remotes._config[remoteName]);
85
+ var fileToReplace = require('path').basename(url.pathname);
86
+ url.pathname = url.pathname.replace(fileToReplace, chunkName);
87
+ }
88
+ var protocol = url.protocol === 'https:' ? https : http;
89
+ protocol.get(url, (res) => {
90
+ let data = '';
91
+ res.on('data', (chunk) => {
92
+ data += chunk;
93
+ });
94
+ res.on('end', () => {
95
+ var chunk = {};
96
+ vm.runInThisContext('(function(exports, require, __dirname, __filename) {' + data + '\n})', chunkName)(chunk, require, '.', chunkName);
97
+ callback(null, chunk);
98
+ });
99
+ res.on('error', (err) => {
100
+ callback(err, null);
101
+ });
102
+ });
103
+ }
104
+ exports.httpVmStrategy = httpVmStrategy;
105
+ //# sourceMappingURL=stratagies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stratagies.js","sourceRoot":"","sources":["../../../../../packages/node/src/filesystem/stratagies.js"],"names":[],"mappings":"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"}
@@ -5,7 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const RuntimeGlobals_1 = __importDefault(require("webpack/lib/RuntimeGlobals"));
7
7
  const StartupChunkDependenciesPlugin_1 = __importDefault(require("webpack/lib/runtime/StartupChunkDependenciesPlugin"));
8
- const LoadFileChunkLoadingRuntimeModule_1 = __importDefault(require("./LoadFileChunkLoadingRuntimeModule"));
8
+ const DynamicFilesystemChunkLoadingRuntimeModule_1 = __importDefault(require("./DynamicFilesystemChunkLoadingRuntimeModule"));
9
+ const FederationModuleInfoRuntimeModule_1 = __importDefault(require("./FederationModuleInfoRuntimeModule"));
10
+ const RemotePublicPathRuntimeModule_1 = __importDefault(require("./RemotePublicPathRuntimeModule"));
9
11
  class CommonJsChunkLoadingPlugin {
10
12
  constructor(options) {
11
13
  this.options = options || {};
@@ -34,7 +36,8 @@ class CommonJsChunkLoadingPlugin {
34
36
  }
35
37
  set.add(RuntimeGlobals_1.default.moduleFactoriesAddOnly);
36
38
  set.add(RuntimeGlobals_1.default.hasOwnProperty);
37
- compilation.addRuntimeModule(chunk, new LoadFileChunkLoadingRuntimeModule_1.default(set, this.options, {
39
+ set.add(RuntimeGlobals_1.default.publicPath); // this breaks things
40
+ compilation.addRuntimeModule(chunk, new DynamicFilesystemChunkLoadingRuntimeModule_1.default(set, this.options, {
38
41
  webpack: compiler.webpack,
39
42
  }));
40
43
  };
@@ -83,6 +86,30 @@ class CommonJsChunkLoadingPlugin {
83
86
  }
84
87
  set.add(RuntimeGlobals_1.default.getUpdateManifestFilename);
85
88
  });
89
+ compilation.hooks.runtimeRequirementInTree
90
+ .for(RuntimeGlobals_1.default.publicPath)
91
+ .tap("RuntimePlugin", (chunk, set) => {
92
+ const { outputOptions } = compilation;
93
+ const { publicPath: globalPublicPath, scriptType } = outputOptions;
94
+ const entryOptions = chunk.getEntryOptions();
95
+ const publicPath = entryOptions && entryOptions.publicPath !== undefined
96
+ ? entryOptions.publicPath
97
+ : globalPublicPath;
98
+ const module = new RemotePublicPathRuntimeModule_1.default(this.options);
99
+ if (publicPath === "auto" && scriptType !== "module") {
100
+ set.add(RuntimeGlobals_1.default.global);
101
+ }
102
+ else if (typeof publicPath !== "string" || /\[(full)?hash\]/.test(publicPath)) {
103
+ module.fullHash = true;
104
+ }
105
+ compilation.addRuntimeModule(chunk, module);
106
+ return true;
107
+ });
108
+ compilation.hooks.additionalTreeRuntimeRequirements.tap('StartupChunkDependenciesPlugin', (chunk, set, { chunkGraph }) => {
109
+ compilation.addRuntimeModule(chunk,
110
+ //@ts-ignore
111
+ new FederationModuleInfoRuntimeModule_1.default());
112
+ });
86
113
  });
87
114
  }
88
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CommonJsChunkLoadingPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/CommonJsChunkLoadingPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommonJsChunkLoadingPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/CommonJsChunkLoadingPlugin.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Chunk, Compiler } from 'webpack';
2
2
  import { RuntimeModule } from 'webpack';
3
- interface ReadFileChunkLoadingRuntimeModuleOptions {
3
+ import { SyncWaterfallHook } from 'tapable';
4
+ interface DynamicFilesystemChunkLoadingRuntimeModuleOptions {
4
5
  baseURI: Compiler['options']['output']['publicPath'];
5
6
  promiseBaseURI?: string;
6
7
  remotes: Record<string, string>;
@@ -10,11 +11,14 @@ interface ReadFileChunkLoadingRuntimeModuleOptions {
10
11
  interface ChunkLoadingContext {
11
12
  webpack: Compiler['webpack'];
12
13
  }
13
- declare class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
14
+ declare class DynamicFilesystemChunkLoadingRuntimeModule extends RuntimeModule {
14
15
  private runtimeRequirements;
15
16
  private options;
16
17
  private chunkLoadingContext;
17
- constructor(runtimeRequirements: Set<string>, options: ReadFileChunkLoadingRuntimeModuleOptions, chunkLoadingContext: ChunkLoadingContext);
18
+ hooks: {
19
+ strategyCase: SyncWaterfallHook<unknown, import("tapable").UnsetAdditionalOptions>;
20
+ };
21
+ constructor(runtimeRequirements: Set<string>, options: DynamicFilesystemChunkLoadingRuntimeModuleOptions, chunkLoadingContext: ChunkLoadingContext);
18
22
  /**
19
23
  * @private
20
24
  * @param {Chunk} chunk chunk
@@ -32,4 +36,4 @@ declare class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
32
36
  */
33
37
  generate(): string;
34
38
  }
35
- export default ReadFileChunkLoadingRuntimeModule;
39
+ export default DynamicFilesystemChunkLoadingRuntimeModule;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const webpack_1 = require("webpack");
7
+ const identifier_1 = require("webpack/lib/util/identifier");
8
+ const tapable_1 = require("tapable");
9
+ const compileBooleanMatcher_1 = __importDefault(require("webpack/lib/util/compileBooleanMatcher"));
10
+ const parts_1 = require("./parts");
11
+ const stratagies_1 = require("../filesystem/stratagies");
12
+ //hook can be tapped with
13
+ // class MyPlugin {
14
+ // apply(compiler: Compiler) {
15
+ // compiler.hooks.thisCompilation.tap('MyPlugin', (compilation: Compilation) => {
16
+ // compilation.hooks.runtimeModule.tap('MyPlugin', (module: RuntimeModule) => {
17
+ // if (module instanceof DynamicFilesystemChunkLoadingRuntimeModule) {
18
+ // module.hooks.strategyCase.tap('MyPlugin', (source: string) => {
19
+ // return source + '\ncase "my-strategy": return myStrategy(chunkId,rootOutputDir, remotes, callback);';
20
+ // });
21
+ // }
22
+ // });
23
+ // });
24
+ // }
25
+ // }
26
+ class DynamicFilesystemChunkLoadingRuntimeModule extends webpack_1.RuntimeModule {
27
+ constructor(runtimeRequirements, options, chunkLoadingContext) {
28
+ super('readFile chunk loading', webpack_1.RuntimeModule.STAGE_ATTACH);
29
+ this.hooks = {
30
+ strategyCase: new tapable_1.SyncWaterfallHook(['source']),
31
+ };
32
+ this.runtimeRequirements = runtimeRequirements;
33
+ this.options = options;
34
+ this.chunkLoadingContext = chunkLoadingContext;
35
+ }
36
+ /**
37
+ * @private
38
+ * @param {Chunk} chunk chunk
39
+ * @param {string} rootOutputDir root output directory
40
+ * @returns {string} generated code
41
+ */
42
+ _generateBaseUri(chunk, rootOutputDir) {
43
+ const options = chunk.getEntryOptions();
44
+ if (options && options.baseUri) {
45
+ return `${webpack_1.RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
46
+ }
47
+ return `${webpack_1.RuntimeGlobals.baseURI} = require("url").pathToFileURL(${rootOutputDir
48
+ ? `__dirname + ${JSON.stringify('/' + rootOutputDir)}`
49
+ : '__filename'});`;
50
+ }
51
+ /**
52
+ * @private
53
+ * @param {unknown[]} items item to log
54
+ */
55
+ _getLogger(...items) {
56
+ if (!this.options.debug) {
57
+ return '';
58
+ }
59
+ return `console.log(${items.join(',')});`;
60
+ }
61
+ /**
62
+ * @returns {string} runtime code
63
+ */
64
+ generate() {
65
+ const { remotes = {}, name } = this.options;
66
+ const { webpack } = this.chunkLoadingContext;
67
+ const { chunkGraph, chunk, compilation } = this;
68
+ if (!chunkGraph || !chunk || !compilation) {
69
+ console.warn('Missing required properties. Returning empty string.');
70
+ return '';
71
+ }
72
+ const { runtimeTemplate } = compilation;
73
+ const jsModulePlugin = webpack?.javascript?.JavascriptModulesPlugin ||
74
+ require('webpack/lib/javascript/JavascriptModulesPlugin');
75
+ const { chunkHasJs } = jsModulePlugin;
76
+ const fn = webpack_1.RuntimeGlobals.ensureChunkHandlers;
77
+ const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
78
+ const hasJsMatcher = (0, compileBooleanMatcher_1.default)(conditionMap);
79
+ const initialChunkIds = (0, parts_1.getInitialChunkIds)(chunk, chunkGraph, chunkHasJs);
80
+ const outputName = compilation.getPath(jsModulePlugin.getChunkFilenameTemplate(chunk, compilation.outputOptions), { chunk, contentHashType: 'javascript' });
81
+ const rootOutputDir = (0, identifier_1.getUndoPath)(outputName, compilation.outputOptions.path, false);
82
+ const stateExpression = this.runtimeRequirements.has(webpack_1.RuntimeGlobals.hmrDownloadUpdateHandlers)
83
+ ? `${webpack_1.RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm`
84
+ : undefined;
85
+ const dynamicFilesystemChunkLoadingPluginCode = webpack_1.Template.asString([
86
+ stratagies_1.fileSystemRunInContextStrategy.toString(),
87
+ stratagies_1.httpEvalStrategy.toString(),
88
+ stratagies_1.httpVmStrategy.toString(),
89
+ 'const loadChunkStrategy = async (strategyType,chunkId,rootOutputDir, remotes, callback) => {',
90
+ webpack_1.Template.indent([
91
+ 'switch (strategyType) {',
92
+ webpack_1.Template.indent([
93
+ 'case "filesystem": return await fileSystemRunInContextStrategy(chunkId,rootOutputDir, remotes, callback);',
94
+ 'case "http-eval": return await httpEvalStrategy(chunkId,rootOutputDir, remotes, callback);',
95
+ 'case "http-vm": return await httpVmStrategy(chunkId,rootOutputDir, remotes, callback);',
96
+ this.hooks.strategyCase.call('default: throw new Error("Invalid strategy type");'),
97
+ ]),
98
+ '}',
99
+ ]),
100
+ '};'
101
+ ]);
102
+ const remoteRegistry = webpack_1.Template.asString([
103
+ `var remotes = ${JSON.stringify(Object.values(remotes).reduce((acc, remote) => {
104
+ const [global, url] = remote.split('@');
105
+ acc[global] = url;
106
+ return acc;
107
+ }, {}))};`,
108
+ `Object.keys(remotes).forEach(function(remote) {
109
+ globalThis.__remote_scope__._config[remote] = remotes[remote];
110
+ });`,
111
+ ]);
112
+ return webpack_1.Template.asString([
113
+ remoteRegistry,
114
+ dynamicFilesystemChunkLoadingPluginCode,
115
+ this.runtimeRequirements.has(webpack_1.RuntimeGlobals.baseURI)
116
+ ? this._generateBaseUri(chunk, rootOutputDir)
117
+ : '// no baseURI',
118
+ '',
119
+ '// object to store loaded chunks',
120
+ '// "0" means "already loaded", Promise means loading',
121
+ `var installedChunks = ${stateExpression ? `${stateExpression} = ${stateExpression} || ` : ''}{`,
122
+ webpack_1.Template.indent(Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(',\n')),
123
+ '};',
124
+ '',
125
+ (0, parts_1.handleOnChunkLoad)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.onChunksLoaded), runtimeTemplate),
126
+ '',
127
+ (0, parts_1.generateInstallChunk)(runtimeTemplate, this.runtimeRequirements.has(webpack_1.RuntimeGlobals.onChunksLoaded)),
128
+ '',
129
+ this.runtimeRequirements.has(webpack_1.RuntimeGlobals.ensureChunkHandlers)
130
+ ? (0, parts_1.generateLoadScript)(runtimeTemplate)
131
+ : '// no remote script loader needed',
132
+ this.runtimeRequirements.has(webpack_1.RuntimeGlobals.ensureChunkHandlers)
133
+ ? (0, parts_1.generateLoadingCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.ensureChunkHandlers), fn, hasJsMatcher, rootOutputDir, remotes, name)
134
+ : '// no chunk loading',
135
+ '',
136
+ (0, parts_1.generateExternalInstallChunkCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.externalInstallChunk), this.options.debug),
137
+ '',
138
+ (0, parts_1.generateHmrCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.hmrDownloadUpdateHandlers), rootOutputDir),
139
+ '',
140
+ (0, parts_1.generateHmrManifestCode)(this.runtimeRequirements.has(webpack_1.RuntimeGlobals.hmrDownloadManifest), rootOutputDir),
141
+ ]);
142
+ }
143
+ }
144
+ exports.default = DynamicFilesystemChunkLoadingRuntimeModule;
145
+ //# sourceMappingURL=DynamicFilesystemChunkLoadingRuntimeModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicFilesystemChunkLoadingRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts"],"names":[],"mappings":";;;;;AAIA,qCAAmE;AACnE,4DAA0D;AAC1D,qCAAyC;AACzC,mGAA2E;AAC3E,mCASiB;AACjB,yDAIkC;AAoBlC,yBAAyB;AACzB,mBAAmB;AACnB,gCAAgC;AAChC,qFAAqF;AACrF,qFAAqF;AACrF,8EAA8E;AAC9E,4EAA4E;AAC5E,oHAAoH;AACpH,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,UAAU;AACV,MAAM;AACN,IAAI;AACJ,MAAM,0CAA2C,SAAQ,uBAAa;IAQpE,YACE,mBAAgC,EAChC,OAA0D,EAC1D,mBAAwC;QAExC,KAAK,CAAC,wBAAwB,EAAE,uBAAa,CAAC,YAAY,CAAC,CAAC;QAT9D,UAAK,GAAG;YACN,YAAY,EAAE,IAAI,2BAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC;SAChD,CAAC;QAQA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAE/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,KAAY,EAAE,aAAqB;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;YAC9B,OAAO,GAAG,wBAAc,CAAC,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;SAC1E;QAED,OAAO,GAAG,wBAAc,CAAC,OAAO,mCAC9B,aAAa;YACX,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,CAAC,EAAE;YACtD,CAAC,CAAC,YACN,IAAI,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,GAAG,KAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5C,CAAC;IAGD;;OAEG;IACM,QAAQ;QAAK,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAClE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC7C,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAEhD,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE;YACzC,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC;SACX;QAEC,MAAM,EAAE,eAAe,EAAE,GAAG,WAAW,CAAC;QACxC,MAAM,cAAc,GAClB,OAAO,EAAE,UAAU,EAAE,uBAAuB;YAC5C,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC5D,MAAM,EAAC,UAAU,EAAC,GAAG,cAAc,CAAC;QACpC,MAAM,EAAE,GAAG,wBAAc,CAAC,mBAAmB,CAAC;QAE9C,MAAM,YAAY,GAAG,UAAU,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,IAAA,+BAAqB,EAAC,YAAY,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAA,0BAAkB,EAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAE1E,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CACpC,cAAc,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,EACzE,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,CACzC,CAAC;QACF,MAAM,aAAa,GAAG,IAAA,wBAAW,EAC/B,UAAU,EACV,WAAW,CAAC,aAAa,CAAC,IAAI,EAC9B,KAAK,CACN,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAClD,wBAAc,CAAC,yBAAyB,CACzC;YACC,CAAC,CAAC,GAAG,wBAAc,CAAC,qBAAqB,aAAa;YACtD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,uCAAuC,GAAG,kBAAQ,CAAC,QAAQ,CAAC;YAChE,2CAA8B,CAAC,QAAQ,EAAE;YACzC,6BAAgB,CAAC,QAAQ,EAAE;YAC3B,2BAAc,CAAC,QAAQ,EAAE;YACzB,8FAA8F;YAC9F,kBAAQ,CAAC,MAAM,CAAC;gBACd,yBAAyB;gBACzB,kBAAQ,CAAC,MAAM,CAAC;oBACd,2GAA2G;oBAC3G,4FAA4F;oBAC5F,wFAAwF;oBACxF,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,oDAAoD,CAAW;iBAC7F,CAAC;gBACF,GAAG;aACJ,CAAC;YACF,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,kBAAQ,CAAC,QAAQ,CAAC;YACvC,iBAAiB,IAAI,CAAC,SAAS,CAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAC5C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBAClB,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAA4B,CAAC,CACjC,GAAG;YACJ;;UAEI;SACL,CAAC,CAAC;QAEH,OAAO,kBAAQ,CAAC,QAAQ,CAAC;YACvB,cAAc;YACd,uCAAuC;YACvC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,OAAO,CAAC;gBAClD,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC;gBAC7C,CAAC,CAAC,eAAe;YACnB,EAAE;YACF,kCAAkC;YAClC,sDAAsD;YACtD,yBACE,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,MAAM,eAAe,MAAM,CAAC,CAAC,CAAC,EACpE,GAAG;YACH,kBAAQ,CAAC,MAAM,CACb,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAClE,KAAK,CACN,CACF;YACD,IAAI;YACJ,EAAE;YACF,IAAA,yBAAiB,EACf,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,cAAc,CAAC,EAC3D,eAAe,CAChB;YACD,EAAE;YACF,IAAA,4BAAoB,EAClB,eAAe,EACf,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,cAAc,CAAC,CAC5D;YACD,EAAE;YACF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,mBAAmB,CAAC;gBAC9D,CAAC,CAAC,IAAA,0BAAkB,EAAC,eAAe,CAAC;gBACrC,CAAC,CAAC,mCAAmC;YACvC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,mBAAmB,CAAC;gBAC9D,CAAC,CAAC,IAAA,2BAAmB,EACjB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,mBAAmB,CAAC,EAChE,EAAE,EACF,YAAY,EACZ,aAAa,EACb,OAAO,EACP,IAAI,CACL;gBACH,CAAC,CAAC,qBAAqB;YACzB,EAAE;YACF,IAAA,wCAAgC,EAC9B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,oBAAoB,CAAC,EACjE,IAAI,CAAC,OAAO,CAAC,KAAK,CACnB;YACD,EAAE;YACF,IAAA,uBAAe,EACb,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,yBAAyB,CAAC,EACtE,aAAa,CACd;YACD,EAAE;YACF,IAAA,+BAAuB,EACrB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAc,CAAC,mBAAmB,CAAC,EAChE,aAAa,CACd;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,0CAA0C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { RuntimeModule } from 'webpack';
2
+ declare class FederationModuleInfoRuntimeModule extends RuntimeModule {
3
+ constructor();
4
+ /**
5
+ * @returns {string} runtime code
6
+ */
7
+ generate(): string;
8
+ }
9
+ export default FederationModuleInfoRuntimeModule;
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const webpack_1 = require("webpack");
4
+ const webpack_2 = require("webpack");
5
+ class FederationModuleInfoRuntimeModule extends webpack_1.RuntimeModule {
6
+ constructor() {
7
+ super('federation module info runtime', webpack_1.RuntimeModule.STAGE_BASIC);
8
+ }
9
+ /**
10
+ * @returns {string} runtime code
11
+ */
12
+ generate() {
13
+ return webpack_2.Template.asString([
14
+ `${webpack_1.RuntimeGlobals.require}.federation = {`,
15
+ webpack_2.Template.indent([
16
+ `cache: {},`,
17
+ `remotes: {},`,
18
+ `moduleInfo: { },`,
19
+ ]),
20
+ `};`,
21
+ // `if (!globalThis.__remote_scopes__) {`,
22
+ webpack_2.Template.indent([
23
+ '// backward compatible global proxy',
24
+ `globalThis.__remote_scope__ = globalThis.__remote_scope__ || new Proxy(${webpack_1.RuntimeGlobals.require}.federation, {`,
25
+ webpack_2.Template.indent([
26
+ `get: function(target, prop, receiver) {`,
27
+ 'var result;',
28
+ webpack_2.Template.indent([
29
+ `if (prop === '_config') {`,
30
+ webpack_2.Template.indent([`result = ${webpack_1.RuntimeGlobals.require}.federation.remotes;`]),
31
+ `} else {`,
32
+ webpack_2.Template.indent([`result = ${webpack_1.RuntimeGlobals.require}.federation.cache[prop];`]),
33
+ `}`,
34
+ 'return result;'
35
+ ]),
36
+ `},`,
37
+ `set: function(target, prop, value) {`,
38
+ webpack_2.Template.indent([
39
+ `if (prop === '_config') {`,
40
+ webpack_2.Template.indent([`${webpack_1.RuntimeGlobals.require}.federation.remotes = value;`]),
41
+ `} else {`,
42
+ webpack_2.Template.indent([`${webpack_1.RuntimeGlobals.require}.federation.cache[prop] = value;`]),
43
+ `}`,
44
+ `return true;`,
45
+ ]),
46
+ `}`,
47
+ ]),
48
+ `});`,
49
+ ]),
50
+ // `}`,
51
+ ]);
52
+ }
53
+ }
54
+ exports.default = FederationModuleInfoRuntimeModule;
55
+ //# sourceMappingURL=FederationModuleInfoRuntimeModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FederationModuleInfoRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/FederationModuleInfoRuntimeModule.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,qCAAwD;AACxD,qCAAmC;AAEnC,MAAM,iCAAkC,SAAQ,uBAAa;IAC3D;QACE,KAAK,CAAC,gCAAgC,EAAE,uBAAa,CAAC,WAAW,CAAE,CAAC;IACtE,CAAC;IAED;;OAEG;IACM,QAAQ;QACf,OAAO,kBAAQ,CAAC,QAAQ,CAAC;YACvB,GAAG,wBAAc,CAAC,OAAO,iBAAiB;YAC1C,kBAAQ,CAAC,MAAM,CAAC;gBACd,YAAY;gBACZ,cAAc;gBACd,kBAAkB;aACnB,CAAC;YACF,IAAI;YACJ,0CAA0C;YAC1C,kBAAQ,CAAC,MAAM,CAAC;gBACd,qCAAqC;gBACrC,0EAA0E,wBAAc,CAAC,OAAO,gBAAgB;gBAChH,kBAAQ,CAAC,MAAM,CAAC;oBACd,yCAAyC;oBACzC,aAAa;oBACb,kBAAQ,CAAC,MAAM,CAAC;wBACd,2BAA2B;wBAC3B,kBAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,wBAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;wBAC3E,UAAU;wBACV,kBAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,wBAAc,CAAC,OAAO,0BAA0B,CAAC,CAAC;wBAC/E,GAAG;wBACH,gBAAgB;qBACjB,CAAC;oBACF,IAAI;oBACJ,sCAAsC;oBACtC,kBAAQ,CAAC,MAAM,CAAC;wBACd,2BAA2B;wBAC3B,kBAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,wBAAc,CAAC,OAAO,8BAA8B,CAAC,CAAC;wBAC1E,UAAU;wBACV,kBAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,wBAAc,CAAC,OAAO,kCAAkC,CAAC,CAAC;wBAC9E,GAAG;wBACH,cAAc;qBACf,CAAC;oBACF,GAAG;iBACJ,CAAC;gBACF,KAAK;aACN,CAAC;YACF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,iCAAiC,CAAC"}