@module-federation/node 2.0.0 → 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 (42) hide show
  1. package/CHANGELOG.md +37 -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/ChunkCorrelationPlugin.js +1 -0
  14. package/src/plugins/ChunkCorrelationPlugin.js.map +1 -1
  15. package/src/plugins/CommonJsChunkLoadingPlugin.js +29 -2
  16. package/src/plugins/CommonJsChunkLoadingPlugin.js.map +1 -1
  17. package/src/plugins/{LoadFileChunkLoadingRuntimeModule.d.ts → DynamicFilesystemChunkLoadingRuntimeModule.d.ts} +8 -4
  18. package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js +145 -0
  19. package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js.map +1 -0
  20. package/src/plugins/FederationModuleInfoRuntimeModule.d.ts +9 -0
  21. package/src/plugins/FederationModuleInfoRuntimeModule.js +55 -0
  22. package/src/plugins/FederationModuleInfoRuntimeModule.js.map +1 -0
  23. package/src/plugins/NodeFederationPlugin.d.ts +45 -2
  24. package/src/plugins/NodeFederationPlugin.js +57 -93
  25. package/src/plugins/NodeFederationPlugin.js.map +1 -1
  26. package/src/plugins/RemotePublicPathRuntimeModule.d.ts +10 -0
  27. package/src/plugins/RemotePublicPathRuntimeModule.js +86 -0
  28. package/src/plugins/RemotePublicPathRuntimeModule.js.map +1 -0
  29. package/src/plugins/StreamingTargetPlugin.d.ts +16 -0
  30. package/src/plugins/StreamingTargetPlugin.js +17 -7
  31. package/src/plugins/StreamingTargetPlugin.js.map +1 -1
  32. package/src/plugins/UniversalFederationPlugin.d.ts +25 -0
  33. package/src/plugins/UniversalFederationPlugin.js +20 -1
  34. package/src/plugins/UniversalFederationPlugin.js.map +1 -1
  35. package/src/plugins/parts.d.ts +50 -0
  36. package/src/plugins/parts.js +316 -0
  37. package/src/plugins/parts.js.map +1 -0
  38. package/src/plugins/LoadFileChunkLoadingRuntimeModule.js +0 -434
  39. package/src/plugins/LoadFileChunkLoadingRuntimeModule.js.map +0 -1
  40. package/src/plugins/loadScript.d.ts +0 -7
  41. package/src/plugins/loadScript.js +0 -116
  42. package/src/plugins/loadScript.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicFilesystemChunkLoadingRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,20 +1,63 @@
1
1
  import type { Compiler, container } from 'webpack';
2
2
  import type { ModuleFederationPluginOptions } from '../types';
3
+ /**
4
+ * Interface for NodeFederationOptions which extends ModuleFederationPluginOptions
5
+ * @interface
6
+ * @property {Record<string, unknown>} experiments - Optional experiments configuration
7
+ * @property {boolean} debug - Optional debug flag
8
+ */
3
9
  interface NodeFederationOptions extends ModuleFederationPluginOptions {
4
10
  experiments?: Record<string, unknown>;
5
11
  debug?: boolean;
12
+ useRemoteSideloader?: boolean;
6
13
  }
14
+ /**
15
+ * Interface for Context
16
+ * @interface
17
+ * @property {typeof container.ModuleFederationPlugin} ModuleFederationPlugin - Optional ModuleFederationPlugin
18
+ */
7
19
  interface Context {
8
20
  ModuleFederationPlugin?: typeof container.ModuleFederationPlugin;
9
21
  }
22
+ /**
23
+ * This function iterates over all remotes and checks if they
24
+ * are internal or not. If it's an internal remote then we add it to our new object
25
+ * with a key of the name of the remote and value as internal. If it's not an internal
26
+ * remote then we check if there is a '@' in that string which likely means it is a global @ url
27
+ *
28
+ * @param {Record<string, any>} remotes - The remotes to parse.
29
+ * @returns {Record<string, string>} - The parsed remotes.
30
+ * */
10
31
  export declare const parseRemotes: (remotes: Record<string, any>) => Record<string, string>;
11
- export declare const generateRemoteTemplate: (url: string, global: any) => string;
12
- export declare const parseRemoteSyntax: (remote: any) => any;
32
+ /**
33
+ * Parses the remote syntax and returns a formatted string if the remote includes '@' and does not start with 'window', 'global', or 'globalThis'.
34
+ * Otherwise, it returns the original remote string.
35
+ *
36
+ * @param {string} remote - The remote string to parse.
37
+ * @returns {string} - The parsed remote string or the original remote string.
38
+ * @throws {Error} - Throws an error if the remote is not a string.
39
+ */
40
+ export declare const parseRemoteSyntax: (remote: any) => string;
41
+ /**
42
+ * Class representing a NodeFederationPlugin.
43
+ * @class
44
+ */
13
45
  declare class NodeFederationPlugin {
14
46
  private _options;
15
47
  private context;
16
48
  private experiments;
49
+ /**
50
+ * Create a NodeFederationPlugin.
51
+ * @constructor
52
+ * @param {NodeFederationOptions} options - The options for the NodeFederationPlugin
53
+ * @param {Context} context - The context for the NodeFederationPlugin
54
+ */
17
55
  constructor({ experiments, debug, ...options }: NodeFederationOptions, context: Context);
56
+ /**
57
+ * Apply method for the NodeFederationPlugin class.
58
+ * @method
59
+ * @param {Compiler} compiler - The webpack compiler.
60
+ */
18
61
  apply(compiler: Compiler): void;
19
62
  }
20
63
  export default NodeFederationPlugin;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseRemoteSyntax = exports.generateRemoteTemplate = exports.parseRemotes = void 0;
3
+ exports.parseRemoteSyntax = exports.parseRemotes = void 0;
4
4
  const pure_1 = require("@module-federation/utilities/src/utils/pure");
5
5
  // possible remote evaluators
6
6
  // this depends on the chunk format selected.
@@ -10,121 +10,85 @@ const pure_1 = require("@module-federation/utilities/src/utils/pure");
10
10
  // const remote = eval('let exports = {};' + scriptContent + 'exports');
11
11
  // commonjs-module, ideal since it returns a commonjs module format
12
12
  // const remote = eval(scriptContent + 'module.exports')
13
- /*
14
- This code is doing the following It iterates over all remotes and checks if they
15
- are internal or not If it\'s an internal remote then we add it to our new object
16
- with a key of the name of the remote and value as internal If it\'s not an internal
17
- remote then we check if there is a in that string which means that this is probably
18
- a github repo
19
- */
20
- const parseRemotes = (remotes) => Object.entries(remotes).reduce((acc, remote) => {
21
- if (remote[1].startsWith('internal ')) {
22
- acc[remote[0]] = remote[1];
23
- return acc;
13
+ /**
14
+ * This function iterates over all remotes and checks if they
15
+ * are internal or not. If it's an internal remote then we add it to our new object
16
+ * with a key of the name of the remote and value as internal. If it's not an internal
17
+ * remote then we check if there is a '@' in that string which likely means it is a global @ url
18
+ *
19
+ * @param {Record<string, any>} remotes - The remotes to parse.
20
+ * @returns {Record<string, string>} - The parsed remotes.
21
+ * */
22
+ const parseRemotes = (remotes) => {
23
+ if (!remotes || typeof remotes !== 'object') {
24
+ throw new Error('remotes must be an object');
24
25
  }
25
- if (!remote[1].startsWith('promise ') && remote[1].includes('@')) {
26
- acc[remote[0]] = `promise ${(0, exports.parseRemoteSyntax)(remote[1])}`;
26
+ return Object.entries(remotes).reduce((acc, [key, value]) => {
27
+ const isInternal = value.startsWith('internal ');
28
+ const isGlobal = value.includes('@') && !['window.', 'global.', 'globalThis.', 'self.'].some(prefix => value.startsWith(prefix));
29
+ acc[key] = isInternal || !isGlobal ? value : (0, exports.parseRemoteSyntax)(value);
27
30
  return acc;
28
- }
29
- acc[remote[0]] = remote[1];
30
- return acc;
31
- }, {});
31
+ }, {});
32
+ };
32
33
  exports.parseRemotes = parseRemotes;
33
- // server template to convert remote into promise new promise and use require.loadChunk to load the chunk
34
- const generateRemoteTemplate = (url, global) => `new Promise(function (resolve, reject) {
35
- if(!globalThis.__remote_scope__) {
36
- // create a global scope for container, similar to how remotes are set on window in the browser
37
- globalThis.__remote_scope__ = {
38
- _config: {},
39
- }
40
- }
41
-
42
- if (typeof globalThis.__remote_scope__[${JSON.stringify(global)}] !== 'undefined') return resolve(globalThis.__remote_scope__[${JSON.stringify(global)}]);
43
- globalThis.__remote_scope__._config[${JSON.stringify(global)}] = ${JSON.stringify(url)};
44
- var __webpack_error__ = new Error();
45
-
46
- __webpack_require__.l(
47
- ${JSON.stringify(url)},
48
- function (event) {
49
- if (typeof globalThis.__remote_scope__[${JSON.stringify(global)}] !== 'undefined') return resolve(globalThis.__remote_scope__[${JSON.stringify(global)}]);
50
- var realSrc = event && event.target && event.target.src;
51
- __webpack_error__.message = 'Loading script failed.\\n(' + event.message + ': ' + realSrc + ')';
52
- __webpack_error__.name = 'ScriptExternalLoadError';
53
- __webpack_error__.stack = event.stack;
54
- reject(__webpack_error__);
55
- },
56
- ${JSON.stringify(global)},
57
- );
58
- }).catch((e)=> {
59
- console.error(${JSON.stringify(global)}, 'is offline, returning fake remote');
60
- console.error(e);
61
-
62
- return {
63
- fake: true,
64
- get: (arg) => {
65
- console.warn('faking', arg, 'module on', ${JSON.stringify(global)});
66
-
67
- return Promise.resolve(() => {
68
- return () => null
69
- });
70
- },
71
- init: () => {
72
- }
73
- }
74
- }).then(function (remote) {
75
- if(remote.fake) {
76
- return remote;
77
- }
78
- return remote;
79
- })`;
80
- exports.generateRemoteTemplate = generateRemoteTemplate;
81
- /*
82
- This code is taking the remote string and splitting it into two parts The first
83
- part of the split is going to be a url which will be used in generate Remote Template
84
- function The second part of the split is going to be a global variable name which
85
- will also be used in generate Remote Template function If there\'s no global variable
86
- name then we\'ll use default as default value for that parameter
87
- */
34
+ /**
35
+ * Parses the remote syntax and returns a formatted string if the remote includes '@' and does not start with 'window', 'global', or 'globalThis'.
36
+ * Otherwise, it returns the original remote string.
37
+ *
38
+ * @param {string} remote - The remote string to parse.
39
+ * @returns {string} - The parsed remote string or the original remote string.
40
+ * @throws {Error} - Throws an error if the remote is not a string.
41
+ */
88
42
  const parseRemoteSyntax = (remote) => {
89
- if (typeof remote === 'string' && remote.includes('@')) {
43
+ if (typeof remote !== 'string') {
44
+ throw new Error('remote must be a string');
45
+ }
46
+ if (remote.includes('@')) {
90
47
  const [url, global] = (0, pure_1.extractUrlAndGlobal)(remote);
91
- return (0, exports.generateRemoteTemplate)(url, global);
48
+ if (!['window.', 'global.', 'globalThis.'].some(prefix => global.startsWith(prefix))) {
49
+ return `globalThis.__remote_scope__.${global}@${url}`;
50
+ }
92
51
  }
93
52
  return remote;
94
53
  };
95
54
  exports.parseRemoteSyntax = parseRemoteSyntax;
55
+ /**
56
+ * Class representing a NodeFederationPlugin.
57
+ * @class
58
+ */
96
59
  class NodeFederationPlugin {
60
+ /**
61
+ * Create a NodeFederationPlugin.
62
+ * @constructor
63
+ * @param {NodeFederationOptions} options - The options for the NodeFederationPlugin
64
+ * @param {Context} context - The context for the NodeFederationPlugin
65
+ */
97
66
  constructor({ experiments, debug, ...options }, context) {
98
67
  this._options = options || {};
99
68
  this.context = context || {};
100
69
  this.experiments = experiments || {};
101
70
  }
71
+ /**
72
+ * Apply method for the NodeFederationPlugin class.
73
+ * @method
74
+ * @param {Compiler} compiler - The webpack compiler.
75
+ */
102
76
  apply(compiler) {
103
77
  // When used with Next.js, context is needed to use Next.js webpack
104
78
  const { webpack } = compiler;
105
79
  const pluginOptions = {
106
80
  ...this._options,
107
- remotes: (0, exports.parseRemotes)(this._options.remotes || {}),
81
+ remotes: this._options.remotes ? (0, exports.parseRemotes)(this._options.remotes) : {},
108
82
  };
83
+ //TODO can use import meta mock object but need to update data structure of remote_scope
84
+ if (compiler.options && compiler.options.output) {
85
+ compiler.options.output.importMetaName = 'remoteContainerRegistry';
86
+ }
109
87
  const chunkFileName = compiler.options?.output?.chunkFilename;
110
88
  const uniqueName = compiler?.options?.output?.uniqueName || this._options.name;
111
- if (typeof chunkFileName === 'string') {
112
- const requiredSubstrings = [
113
- '[chunkhash]',
114
- '[contenthash]',
115
- '[fullHash]',
116
- uniqueName,
117
- ];
118
- if (
119
- //@ts-ignore
120
- !requiredSubstrings.some((substring) =>
121
- //@ts-ignore
122
- chunkFileName.includes(substring))) {
123
- const suffix = compiler.options.mode === 'development'
124
- ? `.[chunkhash].js`
125
- : `.[chunkhash].js`;
126
- compiler.options.output.chunkFilename = chunkFileName.replace('.js', suffix);
127
- }
89
+ if (typeof chunkFileName === 'string' && uniqueName && !chunkFileName.includes(uniqueName)) {
90
+ const suffix = `-[chunkhash].js`;
91
+ compiler.options.output.chunkFilename = chunkFileName.replace('.js', suffix);
128
92
  }
129
93
  new (this.context.ModuleFederationPlugin ||
130
94
  (webpack && webpack.container.ModuleFederationPlugin) ||
@@ -1 +1 @@
1
- {"version":3,"file":"NodeFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/NodeFederationPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NodeFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/NodeFederationPlugin.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAIb,sEAAkF;AAuBlF,6BAA6B;AAC7B,6CAA6C;AAC7C,qDAAqD;AACrD,yFAAyF;AACzF,yDAAyD;AACzD,wEAAwE;AACxE,mEAAmE;AACnE,wDAAwD;AAExD;;;;;;;;KAQK;AAEE,MAAM,YAAY,GAAG,CAAC,OAA4B,EAA0B,EAAE;IACnF,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC3C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAA2B,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAClF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhI,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,CAAC;QAEtE,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAA;AAbY,QAAA,YAAY,gBAaxB;AACD;;;;;;;GAOG;AACI,MAAM,iBAAiB,GAAG,CAAC,MAAW,EAAU,EAAE;IACvD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACxB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,0BAAmB,EAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;YACpF,OAAO,+BAA+B,MAAM,IAAI,GAAG,EAAE,CAAC;SACvD;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,iBAAiB,qBAY5B;AAGF;;;GAGG;AACH,MAAM,oBAAoB;IAKxB;;;;;OAKG;IACH,YACE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,OAAO,EAAyB,EACzD,OAAgB;QAEhB,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAK,EAAoC,CAAC;QACjE,IAAI,CAAC,OAAO,GAAG,OAAO,IAAK,EAAc,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAkB;QACtB,mEAAmE;QACnE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAE7B,MAAM,aAAa,GAAG;YACpB,GAAG,IAAI,CAAC,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,oBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,OAA8B,CAAC,CAAC,CAAC,CAAC,EAAE;SACjG,CAAC;QACH,wFAAwF;QACvF,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;YAC/C,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,yBAAyB,CAAC;SACpE;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;QAC9D,MAAM,UAAU,GACd,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE9D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC1F,MAAM,MAAM,GAAG,iBAAiB,CAAC;YACjC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAC9E;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB;YACtC,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC;YACrD,OAAO,CAAC,8CAA8C,CAAC,CAAC,CACxD,aAAa,CACd,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;CACF;AAED,kBAAe,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export default AutoPublicPathRuntimeModule;
2
+ declare class AutoPublicPathRuntimeModule extends RuntimeModule {
3
+ constructor(options: any);
4
+ options: any;
5
+ /**
6
+ * @returns {string} runtime code
7
+ */
8
+ generate(): string;
9
+ }
10
+ import { RuntimeModule } from "webpack";
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const webpack_1 = require("webpack");
4
+ const identifier_1 = require("webpack/lib/util/identifier");
5
+ class AutoPublicPathRuntimeModule extends webpack_1.RuntimeModule {
6
+ constructor(options) {
7
+ super("publicPath", webpack_1.RuntimeModule.STAGE_BASIC + 1);
8
+ this.options = options;
9
+ }
10
+ /**
11
+ * @returns {string} runtime code
12
+ */
13
+ generate() {
14
+ const { compilation } = this;
15
+ const { scriptType, path, publicPath, importMetaName, uniqueName } = compilation.outputOptions;
16
+ const getPath = () => {
17
+ return compilation.getPath(publicPath || "", {
18
+ hash: compilation.hash || "XXXX"
19
+ });
20
+ };
21
+ // If publicPath is not "auto", return the static value
22
+ if (publicPath !== "auto") {
23
+ return `${webpack_1.RuntimeGlobals.publicPath} = ${JSON.stringify(getPath())};`;
24
+ }
25
+ const chunkName = compilation.getPath(webpack_1.javascript.JavascriptModulesPlugin.getChunkFilenameTemplate(this.chunk, compilation.outputOptions), {
26
+ chunk: this.chunk,
27
+ contentHashType: "javascript"
28
+ });
29
+ const undoPath = (0, identifier_1.getUndoPath)(chunkName, path, false);
30
+ const ident = webpack_1.Template.toIdentifier(uniqueName);
31
+ return webpack_1.Template.asString([
32
+ "var scriptUrl;",
33
+ // its an esproxy so nesting into _config directly is not possible
34
+ "var remoteReg = globalThis.__remote_scope__._config;",
35
+ `
36
+ let remoteContainerRegistry = {
37
+ get url() {
38
+ return remoteReg[${JSON.stringify(ident)}];
39
+ }
40
+ };
41
+ `,
42
+ scriptType === "module"
43
+ ? webpack_1.Template.asString([
44
+ 'try {',
45
+ webpack_1.Template.indent([
46
+ `scriptUrl = new Function('return typeof ${importMetaName}.url === "string" ? ${importMetaName}.url : undefined;')();`,
47
+ ]),
48
+ '} catch (e) {',
49
+ webpack_1.Template.indent([
50
+ `if (typeof remoteContainerRegistry.url === "string") {`,
51
+ webpack_1.Template.indent('scriptUrl = remoteContainerRegistry.url;'),
52
+ '} else {',
53
+ webpack_1.Template.indent('scriptUrl = __filename;'),
54
+ '}',
55
+ ]),
56
+ '}'
57
+ ])
58
+ : webpack_1.Template.asString([
59
+ `if (${webpack_1.RuntimeGlobals.global}.importScripts) scriptUrl = ${webpack_1.RuntimeGlobals.global}.location + "";`,
60
+ `var document = ${webpack_1.RuntimeGlobals.global}.document;`,
61
+ "if (!scriptUrl && document) {",
62
+ webpack_1.Template.indent([
63
+ `if (document.currentScript)`,
64
+ webpack_1.Template.indent(`scriptUrl = document.currentScript.src`),
65
+ "if (!scriptUrl) {",
66
+ webpack_1.Template.indent([
67
+ 'var scripts = document.getElementsByTagName("script");',
68
+ "if(scripts.length) scriptUrl = scripts[scripts.length - 1].src"
69
+ ]),
70
+ "}"
71
+ ]),
72
+ "}",
73
+ ]),
74
+ "console.log('scriptUrl', scriptUrl);",
75
+ "// When supporting server environments where an automatic publicPath is not supported, you must specify an output.publicPath manually via configuration",
76
+ '// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.',
77
+ 'if (!scriptUrl) throw new Error("Unable to calculate automatic public path");',
78
+ 'scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\\?.*$/, "").replace(/\\/[^\\/]+$/, "/");',
79
+ !undoPath
80
+ ? `${webpack_1.RuntimeGlobals.publicPath} = scriptUrl;`
81
+ : `${webpack_1.RuntimeGlobals.publicPath} = scriptUrl + ${JSON.stringify(undoPath)};`
82
+ ]);
83
+ }
84
+ }
85
+ exports.default = AutoPublicPathRuntimeModule;
86
+ //# sourceMappingURL=RemotePublicPathRuntimeModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemotePublicPathRuntimeModule.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/RemotePublicPathRuntimeModule.js"],"names":[],"mappings":"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"}
@@ -1,12 +1,28 @@
1
1
  import type { Compiler } from 'webpack';
2
2
  import type { ModuleFederationPluginOptions } from '../types';
3
+ /**
4
+ * Interface for StreamingTargetOptions which extends ModuleFederationPluginOptions
5
+ * @property {string} promiseBaseURI - The base URI for the promise
6
+ * @property {boolean} debug - Flag to enable/disable debug mode
7
+ */
3
8
  interface StreamingTargetOptions extends ModuleFederationPluginOptions {
4
9
  promiseBaseURI?: string;
5
10
  debug?: boolean;
6
11
  }
12
+ /**
13
+ * Class representing a StreamingTargetPlugin
14
+ */
7
15
  declare class StreamingTargetPlugin {
8
16
  private options;
17
+ /**
18
+ * Create a StreamingTargetPlugin
19
+ * @param {StreamingTargetOptions} options - The options for the plugin
20
+ */
9
21
  constructor(options: StreamingTargetOptions);
22
+ /**
23
+ * Apply the plugin to the compiler
24
+ * @param {Compiler} compiler - The webpack compiler
25
+ */
10
26
  apply(compiler: Compiler): void;
11
27
  }
12
28
  export default StreamingTargetPlugin;
@@ -4,21 +4,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const CommonJsChunkLoadingPlugin_1 = __importDefault(require("./CommonJsChunkLoadingPlugin"));
7
+ /**
8
+ * Class representing a StreamingTargetPlugin
9
+ */
7
10
  class StreamingTargetPlugin {
11
+ /**
12
+ * Create a StreamingTargetPlugin
13
+ * @param {StreamingTargetOptions} options - The options for the plugin
14
+ */
8
15
  constructor(options) {
9
16
  this.options = options || {};
10
17
  }
18
+ /**
19
+ * Apply the plugin to the compiler
20
+ * @param {Compiler} compiler - The webpack compiler
21
+ */
11
22
  apply(compiler) {
12
- if (compiler.options.target) {
13
- console.warn(`target should be set to false while using NodeSoftwareStreamRuntime plugin, actual target: ${compiler.options.target}`);
14
- console.info('Setting target to false');
15
- compiler.options.target = false;
16
- }
17
23
  // When used with Next.js, context is needed to use Next.js webpack
18
24
  const { webpack } = compiler;
19
- // This will enable CommonJsChunkFormatPlugin
20
25
  compiler.options.output.chunkFormat = 'commonjs';
21
- // This will force async chunk loading
26
+ if (compiler.options.output.enabledLibraryTypes === undefined) {
27
+ compiler.options.output.enabledLibraryTypes = ['commonjs-module'];
28
+ }
29
+ else {
30
+ compiler.options.output.enabledLibraryTypes.push('commonjs-module');
31
+ }
22
32
  compiler.options.output.chunkLoading = 'async-node';
23
33
  // Disable default config
24
34
  // FIXME: enabledChunkLoadingTypes is of type 'string[] | undefined'
@@ -1 +1 @@
1
- {"version":3,"file":"StreamingTargetPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/StreamingTargetPlugin.ts"],"names":[],"mappings":";;;;;AAGA,8FAAsE;AAUtE,MAAM,qBAAqB;IAGzB,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,QAAkB;QACtB,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;YAC3B,OAAO,CAAC,IAAI,CACV,8FAA8F,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CACxH,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACxC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;SACjC;QAED,mEAAmE;QACnE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAE7B,6CAA6C;QAC7C,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;QACjD,sCAAsC;QACtC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;QAEpD,yBAAyB;QACzB,oEAAoE;QACpE,4DAA4D;QAC5D,8EAA8E;QAC9E,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACtD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG;YACpC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW;YACtC,aAAa,EAAE,IAAI;SACpB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB;YACvC,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACnD,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB;SAC9D,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB;YAClC,OAAO,CAAC,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,oCAA0B,CAAC;YAC7B,iBAAiB,EAAE,IAAI;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAiC;YACvD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;YAC3C,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC1B,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;CACF;AAED,kBAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"StreamingTargetPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/StreamingTargetPlugin.ts"],"names":[],"mappings":";;;;;AAGA,8FAAsE;AAkBtE;;GAEG;AACH,MAAM,qBAAqB;IAGzB;;;OAGG;IACH,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAkB;QACtB,mEAAmE;QACnE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAE7B,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;QACjD,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE;YAC7D,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,iBAAiB,CAAC,CAAC;SACnE;aAAM;YACL,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACrE;QAED,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;QAEpD,yBAAyB;QACzB,oEAAoE;QACpE,4DAA4D;QAC5D,8EAA8E;QAC9E,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACtD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG;YACpC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW;YACtC,aAAa,EAAE,IAAI;SACpB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB;YACvC,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACnD,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB;SAC9D,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB;YAClC,OAAO,CAAC,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,oCAA0B,CAAC;YAC7B,iBAAiB,EAAE,IAAI;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAiC;YACvD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;YAC3C,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC1B,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;CACF;AAED,kBAAe,qBAAqB,CAAC"}
@@ -1,17 +1,42 @@
1
1
  import { ModuleFederationPluginOptions } from '../types';
2
2
  import type { Compiler, container } from 'webpack';
3
+ /**
4
+ * Interface for NodeFederationOptions
5
+ * @property {boolean} isServer - Indicates if the server is running
6
+ * @property {string} [promiseBaseURI] - The base URI for the promise
7
+ * @property {boolean} [debug] - Indicates if debug mode is enabled
8
+ */
3
9
  interface NodeFederationOptions extends ModuleFederationPluginOptions {
4
10
  isServer: boolean;
5
11
  promiseBaseURI?: string;
6
12
  debug?: boolean;
7
13
  }
14
+ /**
15
+ * Interface for NodeFederationContext
16
+ * @property {typeof container.ModuleFederationPlugin} [ModuleFederationPlugin] - The ModuleFederationPlugin from webpack container
17
+ */
8
18
  interface NodeFederationContext {
9
19
  ModuleFederationPlugin?: typeof container.ModuleFederationPlugin;
10
20
  }
21
+ /**
22
+ * Class representing a UniversalFederationPlugin
23
+ */
11
24
  declare class UniversalFederationPlugin {
12
25
  private _options;
13
26
  private context;
27
+ /**
28
+ * Create a UniversalFederationPlugin
29
+ * @param {NodeFederationOptions} options - The options for the plugin
30
+ * @param {NodeFederationContext} context - The context for the plugin
31
+ */
14
32
  constructor(options: NodeFederationOptions, context: NodeFederationContext);
33
+ /**
34
+ * Apply the plugin to the compiler
35
+ * @param {Compiler} compiler - The webpack compiler
36
+ */
15
37
  apply(compiler: Compiler): void;
16
38
  }
39
+ /**
40
+ * Exporting UniversalFederationPlugin as default
41
+ */
17
42
  export default UniversalFederationPlugin;
@@ -3,19 +3,35 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * Importing necessary plugins and types
8
+ */
6
9
  const StreamingTargetPlugin_1 = __importDefault(require("./StreamingTargetPlugin"));
7
10
  const NodeFederationPlugin_1 = __importDefault(require("./NodeFederationPlugin"));
11
+ /**
12
+ * Class representing a UniversalFederationPlugin
13
+ */
8
14
  class UniversalFederationPlugin {
15
+ /**
16
+ * Create a UniversalFederationPlugin
17
+ * @param {NodeFederationOptions} options - The options for the plugin
18
+ * @param {NodeFederationContext} context - The context for the plugin
19
+ */
9
20
  constructor(options, context) {
10
21
  this._options = options || {};
11
22
  this.context = context || {};
12
23
  }
24
+ /**
25
+ * Apply the plugin to the compiler
26
+ * @param {Compiler} compiler - The webpack compiler
27
+ */
13
28
  apply(compiler) {
14
29
  const { isServer, debug, ...options } = this._options;
15
30
  const { webpack } = compiler;
16
31
  if (isServer ||
17
32
  compiler.options.name === 'server' ||
18
- compiler.options.target === 'node') {
33
+ compiler.options.target === 'node' ||
34
+ compiler.options.target === 'async-node') {
19
35
  new NodeFederationPlugin_1.default(options, this.context).apply(compiler);
20
36
  new StreamingTargetPlugin_1.default({ ...options, debug }).apply(compiler);
21
37
  }
@@ -26,5 +42,8 @@ class UniversalFederationPlugin {
26
42
  }
27
43
  }
28
44
  }
45
+ /**
46
+ * Exporting UniversalFederationPlugin as default
47
+ */
29
48
  exports.default = UniversalFederationPlugin;
30
49
  //# sourceMappingURL=UniversalFederationPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UniversalFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/UniversalFederationPlugin.ts"],"names":[],"mappings":";;;;;AAAA,oFAA4D;AAC5D,kFAA0D;AAc1D,MAAM,yBAAyB;IAI7B,YAAY,OAA8B,EAAE,OAA8B;QACxE,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAK,EAA4B,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAK,EAA4B,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,QAAkB;QACtB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAE7B,IACE,QAAQ;YACR,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YAClC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAClC;YACA,IAAI,8BAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,+BAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAClE;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB;gBACtC,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC;gBACrD,OAAO,CAAC,8CAA8C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CACvE,QAAQ,CACT,CAAC;SACH;IACH,CAAC;CACF;AAED,kBAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"UniversalFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/node/src/plugins/UniversalFederationPlugin.ts"],"names":[],"mappings":";;;;;AAAA;;GAEG;AACH,oFAA4D;AAC5D,kFAA0D;AAwB1D;;GAEG;AACH,MAAM,yBAAyB;IAI7B;;;;OAIG;IACH,YAAY,OAA8B,EAAE,OAA8B;QACxE,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAK,EAA4B,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAK,EAA4B,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAkB;QACtB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAE7B,IACE,QAAQ;YACR,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YAClC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;YAClC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,EACxC;YACA,IAAI,8BAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,+BAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAClE;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB;gBACtC,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC;gBACrD,OAAO,CAAC,8CAA8C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CACvE,QAAQ,CACT,CAAC;SACH;IACH,CAAC;CACF;AAED;;GAEG;AACH,kBAAe,yBAAyB,CAAC"}