@module-federation/nextjs-mf 5.5.0 → 5.6.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 (139) hide show
  1. package/README.md +1 -27
  2. package/{lib/client → client}/CombinedPages.d.ts +27 -28
  3. package/client/CombinedPages.js +38 -0
  4. package/client/CombinedPages.js.map +1 -0
  5. package/{lib/client → client}/MFClient.d.ts +72 -73
  6. package/client/MFClient.js +159 -0
  7. package/client/MFClient.js.map +1 -0
  8. package/{lib/client → client}/RemoteContainer.d.ts +46 -58
  9. package/client/RemoteContainer.js +121 -0
  10. package/client/RemoteContainer.js.map +1 -0
  11. package/{lib/client → client}/RemotePages.d.ts +49 -49
  12. package/client/RemotePages.js +138 -0
  13. package/client/RemotePages.js.map +1 -0
  14. package/{lib/client → client}/UrlNode.d.ts +17 -18
  15. package/{lib/client → client}/UrlNode.js +157 -161
  16. package/client/UrlNode.js.map +1 -0
  17. package/{lib/client → client}/helpers.d.ts +16 -17
  18. package/{lib/client → client}/helpers.js +90 -104
  19. package/client/helpers.js.map +1 -0
  20. package/client/index.d.ts +2 -0
  21. package/client/index.js +6 -0
  22. package/client/index.js.map +1 -0
  23. package/{lib/client → client}/useMFClient.d.ts +24 -25
  24. package/client/useMFClient.js +55 -0
  25. package/client/useMFClient.js.map +1 -0
  26. package/{lib/client → client}/useMFRemote.d.ts +16 -17
  27. package/client/useMFRemote.js +50 -0
  28. package/client/useMFRemote.js.map +1 -0
  29. package/jest.config.d.ts +13 -0
  30. package/jest.config.js +18 -0
  31. package/jest.config.js.map +1 -0
  32. package/package.json +19 -42
  33. package/src/include-defaults.d.ts +0 -0
  34. package/{lib → src}/include-defaults.js +4 -3
  35. package/src/include-defaults.js.map +1 -0
  36. package/src/index.d.ts +3 -0
  37. package/src/index.js +9 -0
  38. package/src/index.js.map +1 -0
  39. package/src/internal.d.ts +12 -0
  40. package/src/internal.js +260 -0
  41. package/src/internal.js.map +1 -0
  42. package/src/loaders/fixImageLoader.d.ts +16 -0
  43. package/src/loaders/fixImageLoader.js +53 -0
  44. package/src/loaders/fixImageLoader.js.map +1 -0
  45. package/src/loaders/fixUrlLoader.d.ts +13 -0
  46. package/src/loaders/fixUrlLoader.js +25 -0
  47. package/src/loaders/fixUrlLoader.js.map +1 -0
  48. package/src/loaders/helpers.d.ts +10 -0
  49. package/src/loaders/helpers.js +46 -0
  50. package/src/loaders/helpers.js.map +1 -0
  51. package/src/loaders/nextPageMapLoader.d.ts +15 -0
  52. package/src/loaders/nextPageMapLoader.js +151 -0
  53. package/src/loaders/nextPageMapLoader.js.map +1 -0
  54. package/src/loaders/patchNextClientPageLoader.d.ts +7 -0
  55. package/src/loaders/patchNextClientPageLoader.js +43 -0
  56. package/src/loaders/patchNextClientPageLoader.js.map +1 -0
  57. package/src/plugins/AddRuntimeRequirementToPromiseExternalPlugin.d.ts +5 -0
  58. package/src/plugins/AddRuntimeRequirementToPromiseExternalPlugin.js +19 -0
  59. package/src/plugins/AddRuntimeRequirementToPromiseExternalPlugin.js.map +1 -0
  60. package/src/plugins/ChildFederationPlugin.d.ts +9 -0
  61. package/src/plugins/ChildFederationPlugin.js +281 -0
  62. package/src/plugins/ChildFederationPlugin.js.map +1 -0
  63. package/src/plugins/DevHmrFixInvalidPongPlugin.d.ts +11 -0
  64. package/src/plugins/DevHmrFixInvalidPongPlugin.js +55 -0
  65. package/src/plugins/DevHmrFixInvalidPongPlugin.js.map +1 -0
  66. package/src/plugins/ModuleFederationPlugin.d.ts +7 -0
  67. package/src/plugins/ModuleFederationPlugin.js +50 -0
  68. package/src/plugins/ModuleFederationPlugin.js.map +1 -0
  69. package/src/plugins/NextFederationPlugin.d.ts +9 -0
  70. package/src/plugins/NextFederationPlugin.js +111 -0
  71. package/src/plugins/NextFederationPlugin.js.map +1 -0
  72. package/src/plugins/RemoveRRRuntimePlugin.d.ts +5 -0
  73. package/src/plugins/RemoveRRRuntimePlugin.js +39 -0
  74. package/src/plugins/RemoveRRRuntimePlugin.js.map +1 -0
  75. package/utils/Template.d.ts +148 -0
  76. package/utils/Template.js +381 -0
  77. package/utils/Template.js.map +1 -0
  78. package/utils/build-utils.d.ts +3 -0
  79. package/utils/build-utils.js +175 -0
  80. package/utils/build-utils.js.map +1 -0
  81. package/utils/index.d.ts +1 -0
  82. package/utils/index.js +7 -0
  83. package/utils/index.js.map +1 -0
  84. package/.prettierignore +0 -2
  85. package/.prettierrc +0 -7
  86. package/LICENSE +0 -21
  87. package/lib/ModuleFederationPlugin.js +0 -84
  88. package/lib/NextFederationPlugin.js +0 -513
  89. package/lib/_virtual/Template.js +0 -7
  90. package/lib/_virtual/UrlNode.js +0 -9
  91. package/lib/_virtual/_commonjsHelpers.js +0 -44
  92. package/lib/_virtual/_fast-glob.js +0 -16
  93. package/lib/_virtual/_fs.js +0 -16
  94. package/lib/_virtual/_path.js +0 -16
  95. package/lib/_virtual/_tslib.js +0 -277
  96. package/lib/_virtual/_webpack-sources.js +0 -16
  97. package/lib/_virtual/fs.js +0 -4
  98. package/lib/_virtual/fs2.js +0 -7
  99. package/lib/_virtual/helpers.js +0 -7
  100. package/lib/_virtual/nextPageMapLoader.js +0 -7
  101. package/lib/_virtual/options.js +0 -7
  102. package/lib/_virtual/utils.js +0 -7
  103. package/lib/build-utils.js +0 -176
  104. package/lib/client/CombinedPages.d.ts.map +0 -1
  105. package/lib/client/CombinedPages.js +0 -60
  106. package/lib/client/MFClient.d.ts.map +0 -1
  107. package/lib/client/MFClient.js +0 -213
  108. package/lib/client/RemoteContainer.d.ts.map +0 -1
  109. package/lib/client/RemoteContainer.js +0 -162
  110. package/lib/client/RemotePages.d.ts.map +0 -1
  111. package/lib/client/RemotePages.js +0 -194
  112. package/lib/client/UrlNode.d.ts.map +0 -1
  113. package/lib/client/helpers.d.ts.map +0 -1
  114. package/lib/client/useMFClient.d.ts.map +0 -1
  115. package/lib/client/useMFClient.js +0 -79
  116. package/lib/client/useMFRemote.d.ts.map +0 -1
  117. package/lib/client/useMFRemote.js +0 -72
  118. package/lib/dependencies/webpack/lib/Template.js +0 -437
  119. package/lib/dependencies/webpack/lib/container/options.js +0 -102
  120. package/lib/dependencies/webpack/lib/sharing/utils.js +0 -104
  121. package/lib/dependencies/webpack/lib/util/fs.js +0 -359
  122. package/lib/index.js +0 -3
  123. package/lib/internal.js +0 -271
  124. package/lib/loaders/UrlNode.js +0 -219
  125. package/lib/loaders/fixImageLoader.js +0 -65
  126. package/lib/loaders/fixUrlLoader.js +0 -25
  127. package/lib/loaders/helpers.js +0 -60
  128. package/lib/loaders/nextPageMapLoader.js +0 -200
  129. package/lib/loaders/patchNextClientPageLoader.js +0 -53
  130. package/lib/plugins/DevHmrFixInvalidPongPlugin.js +0 -82
  131. package/lib/utils.js +0 -125
  132. package/node-plugin/README.md +0 -27
  133. package/node-plugin/package.json +0 -4
  134. package/node-plugin/streaming/CommonJsChunkLoadingPlugin.js +0 -89
  135. package/node-plugin/streaming/LoadFileChunkLoadingRuntimeModule.js +0 -410
  136. package/node-plugin/streaming/NodeRuntime.js +0 -245
  137. package/node-plugin/streaming/index.js +0 -42
  138. package/node-plugin/streaming/loadScript.js +0 -51
  139. package/tsconfig.json +0 -33
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChildFederationPlugin = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const path_1 = tslib_1.__importDefault(require("path"));
6
+ const fs_1 = tslib_1.__importDefault(require("fs"));
7
+ const nextPageMapLoader_1 = require("../loaders/nextPageMapLoader");
8
+ const helpers_1 = require("../loaders/helpers");
9
+ const internal_1 = require("../internal");
10
+ const utilities_1 = require("@module-federation/utilities");
11
+ const build_utils_1 = require("../../utils/build-utils");
12
+ const ModuleFederationPlugin_1 = tslib_1.__importDefault(require("./ModuleFederationPlugin"));
13
+ const RemoveRRRuntimePlugin_1 = tslib_1.__importDefault(require("./RemoveRRRuntimePlugin"));
14
+ const AddRuntimeRequirementToPromiseExternalPlugin_1 = tslib_1.__importDefault(require("./AddRuntimeRequirementToPromiseExternalPlugin"));
15
+ const CHILD_PLUGIN_NAME = 'ChildFederationPlugin';
16
+ const childCompilers = {};
17
+ class ChildFederationPlugin {
18
+ constructor(options, extraOptions) {
19
+ this._options = options;
20
+ this._extraOptions = extraOptions;
21
+ }
22
+ apply(compiler) {
23
+ const webpack = compiler.webpack;
24
+ const LibraryPlugin = webpack.library.EnableLibraryPlugin;
25
+ const LoaderTargetPlugin = webpack.LoaderTargetPlugin;
26
+ const library = compiler.options.output.library;
27
+ const isServer = compiler.options.name === 'server';
28
+ const isDev = compiler.options.mode === 'development';
29
+ let outputPath;
30
+ if (isDev && isServer) {
31
+ outputPath = path_1.default.join((0, internal_1.getOutputPath)(compiler), 'static/ssr');
32
+ }
33
+ else {
34
+ if (isServer) {
35
+ outputPath = path_1.default.join((0, internal_1.getOutputPath)(compiler), 'static/ssr');
36
+ }
37
+ else {
38
+ outputPath = compiler.options.output.path;
39
+ }
40
+ }
41
+ compiler.hooks.thisCompilation.tap(CHILD_PLUGIN_NAME, (compilation) => {
42
+ let plugins = [];
43
+ const buildName = this._options.name;
44
+ // using ModuleFederationPlugin does not work, i had to fork because of afterPlugins hook on containerPlugin.
45
+ const FederationPlugin = ModuleFederationPlugin_1.default;
46
+ const childOutput = {
47
+ ...compiler.options.output,
48
+ path: outputPath,
49
+ // path: deriveOutputPath(isServer, compiler.options.output.path),
50
+ publicPath: 'auto',
51
+ chunkLoadingGlobal: buildName + 'chunkLoader',
52
+ uniqueName: buildName,
53
+ library: {
54
+ name: buildName,
55
+ type: library?.type,
56
+ },
57
+ chunkFilename: compiler.options.output.chunkFilename?.replace('.js', '-fed.js'),
58
+ filename: compiler.options.output.filename?.replace('.js', '-fed.js'),
59
+ };
60
+ const federationPluginOptions = {
61
+ // library: {type: 'var', name: buildName},
62
+ ...this._options,
63
+ filename: (0, build_utils_1.computeRemoteFilename)(isServer, this._options.filename),
64
+ exposes: {
65
+ ...this._options.exposes,
66
+ ...(this._extraOptions.exposePages
67
+ ? (0, nextPageMapLoader_1.exposeNextjsPages)(compiler.options.context)
68
+ : {}),
69
+ },
70
+ runtime: false,
71
+ shared: {
72
+ ...(this._extraOptions.skipSharingNextInternals
73
+ ? {}
74
+ : internal_1.externalizedShares),
75
+ ...this._options.shared,
76
+ },
77
+ };
78
+ if (compiler.options.name === 'client') {
79
+ plugins = [
80
+ new FederationPlugin(federationPluginOptions),
81
+ new webpack.web.JsonpTemplatePlugin(),
82
+ new LoaderTargetPlugin('web'),
83
+ new LibraryPlugin(this._options.library?.type),
84
+ new webpack.DefinePlugin({
85
+ 'process.env.REMOTES': (0, utilities_1.createRuntimeVariables)(this._options.remotes),
86
+ 'process.env.CURRENT_HOST': JSON.stringify(this._options.name),
87
+ }),
88
+ new AddRuntimeRequirementToPromiseExternalPlugin_1.default(),
89
+ ];
90
+ }
91
+ else if (compiler.options.name === 'server') {
92
+ const { StreamingTargetPlugin, NodeFederationPlugin, } = require('@module-federation/node');
93
+ plugins = [
94
+ new NodeFederationPlugin(federationPluginOptions, {
95
+ ModuleFederationPlugin: FederationPlugin,
96
+ }),
97
+ new webpack.node.NodeTemplatePlugin(childOutput),
98
+ //TODO: Externals function needs to internalize any shared module for host and remote build
99
+ new webpack.ExternalsPlugin(compiler.options.externalsType, [
100
+ // next dynamic needs to be within webpack, cannot be externalized
101
+ ...Object.keys(internal_1.DEFAULT_SHARE_SCOPE).filter((k) => k !== 'next/dynamic'),
102
+ 'react/jsx-runtime',
103
+ 'react/jsx-dev-runtime',
104
+ ]),
105
+ // new LoaderTargetPlugin('async-node'),
106
+ new StreamingTargetPlugin(federationPluginOptions, {
107
+ ModuleFederationPlugin: webpack.container.ModuleFederationPlugin,
108
+ }),
109
+ new LibraryPlugin(federationPluginOptions.library?.type),
110
+ // new webpack.DefinePlugin({
111
+ // 'process.env.REMOTES': JSON.stringify(this._options.remotes),
112
+ // 'process.env.CURRENT_HOST': JSON.stringify(this._options.name),
113
+ // }),
114
+ new AddRuntimeRequirementToPromiseExternalPlugin_1.default(),
115
+ ];
116
+ }
117
+ const childCompiler = compilation.createChildCompiler(CHILD_PLUGIN_NAME, childOutput, plugins);
118
+ childCompiler.outputPath = outputPath;
119
+ childCompiler.options.module.rules.forEach((rule) => {
120
+ // next-image-loader fix which adds remote's hostname to the assets url
121
+ if (this._extraOptions.enableImageLoaderFix &&
122
+ (0, helpers_1.hasLoader)(rule, 'next-image-loader')) {
123
+ (0, helpers_1.injectRuleLoader)(rule, {
124
+ loader: path_1.default.resolve(__dirname, '../loaders/fixImageLoader'),
125
+ });
126
+ }
127
+ // url-loader fix for which adds remote's hostname to the assets url
128
+ if (this._extraOptions.enableUrlLoaderFix &&
129
+ (0, helpers_1.hasLoader)(rule, 'url-loader')) {
130
+ (0, helpers_1.injectRuleLoader)({
131
+ loader: path_1.default.resolve(__dirname, '../loaders/fixUrlLoader'),
132
+ });
133
+ }
134
+ });
135
+ childCompiler.options.experiments.lazyCompilation = false;
136
+ childCompiler.options.optimization.runtimeChunk = false;
137
+ childCompiler.outputFileSystem = fs_1.default;
138
+ // no custom chunk splitting should be derived from host (next)
139
+ delete childCompiler.options.optimization.splitChunks;
140
+ if (compiler.options.optimization.minimize &&
141
+ compiler.options.optimization.minimizer) {
142
+ for (const minimizer of compiler.options.optimization.minimizer) {
143
+ if (typeof minimizer === 'function') {
144
+ minimizer.call(childCompiler, childCompiler);
145
+ }
146
+ else if (minimizer !== '...') {
147
+ minimizer.apply(childCompiler);
148
+ }
149
+ }
150
+ }
151
+ new RemoveRRRuntimePlugin_1.default().apply(childCompiler);
152
+ // TODO: Provide better types for MiniCss Plugin for ChildCompiler in ChildFederationPlugin
153
+ const MiniCss = childCompiler.options.plugins.find((p) => {
154
+ return p.constructor.name === 'NextMiniCssExtractPlugin';
155
+ });
156
+ childCompiler.options.plugins = childCompiler.options.plugins.filter((plugin) => !internal_1.removePlugins.includes(plugin.constructor.name));
157
+ if (MiniCss) {
158
+ // grab mini-css and reconfigure it to avoid conflicts with host
159
+ new MiniCss.constructor({
160
+ ...MiniCss.options,
161
+ filename: MiniCss.options.filename.replace('.css', '-fed.css'),
162
+ chunkFilename: MiniCss.options.chunkFilename.replace('.css', '-fed.css'),
163
+ }).apply(childCompiler);
164
+ }
165
+ // TODO: this can likely be deleted now, if running server child compiler under client is the best way to go
166
+ // help wanted for all asset pipeline stuff below
167
+ // let childAssets
168
+ // if (isServer) {
169
+ // childAssets = new Promise((resolve) => {
170
+ // childCompiler.hooks.afterEmit.tap(
171
+ // CHILD_PLUGIN_NAME,
172
+ // (childCompilation) => {
173
+ // console.log('after emit assets server');
174
+ // resolve(childCompilation.assets);
175
+ // }
176
+ // );
177
+ // });
178
+ // } else {
179
+ // if(isDev) {
180
+ // childAssets = new Promise((resolve) => {
181
+ // childCompiler.hooks.afterEmit.tap(
182
+ // CHILD_PLUGIN_NAME,
183
+ // (childCompilation) => {
184
+ // resolve(childCompilation.assets);
185
+ // }
186
+ // );
187
+ // });
188
+ //
189
+ // } else {
190
+ //
191
+ // TODO: improve this
192
+ // childAssets = new Promise((resolve, reject) => {
193
+ // fs.readdir(
194
+ // path.join(childCompiler.context, '.next/ssr'),
195
+ // function (err, files) {
196
+ // if (err) {
197
+ // reject('Unable to scan directory: ' + err);
198
+ // return;
199
+ // }
200
+ //
201
+ // const allFiles = files.map(function (file) {
202
+ // return new Promise((res, rej) => {
203
+ // fs.readFile(
204
+ // path.join(childCompiler.context, '.next/ssr', file),
205
+ // (err, data) => {
206
+ // if (err) rej(err);
207
+ // compilation.assets[path.join('static/ssr', file)] = new compiler.webpack.sources.RawSource(data)
208
+ // res();
209
+ // }
210
+ // );
211
+ // });
212
+ // });
213
+ // Promise.all(allFiles).then(resolve).catch(reject)
214
+ // }
215
+ // );
216
+ // });
217
+ // }
218
+ // }
219
+ // on main compiler add extra assets from server output to browser build
220
+ // compilation.hooks.additionalAssets.tapPromise(CHILD_PLUGIN_NAME, () => {
221
+ // console.log('additional hooks', compiler.options.name);
222
+ // console.log('in additional assets hook for main build');
223
+ // return childAssets
224
+ // });
225
+ // cache the serer compiler instance, we will run the server child compiler during the client main compilation
226
+ // we need to do this because i need access to data from the client build to inject into the server build
227
+ // in prod builds, server build runs first, followed by client build
228
+ // in dev, client build runs first, followed by server build
229
+ if (compiler.options.name) {
230
+ childCompilers[compiler.options.name] = childCompiler;
231
+ }
232
+ if (isDev) {
233
+ // in dev, run the compilers in the order they are created (client, server)
234
+ childCompiler.run((err, stats) => {
235
+ if (err) {
236
+ compilation.errors.push(err);
237
+ }
238
+ if (stats && stats.hasErrors()) {
239
+ compilation.errors.push(new Error((0, internal_1.toDisplayErrors)(stats.compilation.errors)));
240
+ }
241
+ });
242
+ // in prod, if client
243
+ }
244
+ else if (!isServer) {
245
+ // if ssr enabled and server in compiler cache
246
+ if (childCompilers['server']) {
247
+ //wrong hook for this
248
+ // add hook for additional assets to prevent compile from sealing.
249
+ compilation.hooks.additionalAssets.tapPromise(CHILD_PLUGIN_NAME, () => {
250
+ return new Promise((res, rej) => {
251
+ // run server child compilation during client main compilation
252
+ childCompilers['server'].run((err, stats) => {
253
+ if (err) {
254
+ compilation.errors.push(err);
255
+ rej();
256
+ }
257
+ if (stats && stats.hasErrors()) {
258
+ compilation.errors.push(new Error((0, internal_1.toDisplayErrors)(stats.compilation.errors)));
259
+ rej();
260
+ }
261
+ res();
262
+ });
263
+ });
264
+ });
265
+ }
266
+ // run client child compiler like normal
267
+ childCompiler.run((err, stats) => {
268
+ if (err) {
269
+ compilation.errors.push(err);
270
+ }
271
+ if (stats && stats.hasErrors()) {
272
+ compilation.errors.push(new Error((0, internal_1.toDisplayErrors)(stats.compilation.errors)));
273
+ }
274
+ });
275
+ }
276
+ });
277
+ }
278
+ }
279
+ exports.ChildFederationPlugin = ChildFederationPlugin;
280
+ exports.default = ChildFederationPlugin;
281
+ //# sourceMappingURL=ChildFederationPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/nextjs-mf/src/plugins/ChildFederationPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Compiler } from 'webpack';
2
+ /**
3
+ * If HMR through websocket received {"invalid":true, "event":"pong"} event
4
+ * then pages reloads. But for federated page this is unwanted behavior.
5
+ *
6
+ * So this plugin in DEV mode disables page.reload() in HMR for federated pages.
7
+ */
8
+ export declare class DevHmrFixInvalidPongPlugin {
9
+ apply(compiler: Compiler): void;
10
+ }
11
+ export default DevHmrFixInvalidPongPlugin;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DevHmrFixInvalidPongPlugin = void 0;
4
+ const webpack_1 = require("webpack");
5
+ if (!String.prototype.replaceAll) {
6
+ String.prototype.replaceAll = function (str, newStr) {
7
+ // If a regex pattern
8
+ if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') {
9
+ return this.replace(str, newStr);
10
+ }
11
+ // If a string
12
+ return this.replace(new RegExp(str, 'g'), newStr);
13
+ };
14
+ }
15
+ /**
16
+ * If HMR through websocket received {"invalid":true, "event":"pong"} event
17
+ * then pages reloads. But for federated page this is unwanted behavior.
18
+ *
19
+ * So this plugin in DEV mode disables page.reload() in HMR for federated pages.
20
+ */
21
+ class DevHmrFixInvalidPongPlugin {
22
+ apply(compiler) {
23
+ const webpack = compiler.webpack;
24
+ compiler.hooks.thisCompilation.tap('DevHmrFixInvalidPongPlugin', (compilation) => {
25
+ compilation.hooks.processAssets.tap({
26
+ name: 'DevHmrFixInvalidPongPlugin',
27
+ // FIXME: Is this state or stage?
28
+ // Webpack docs mentions it as 'stage'.
29
+ stage: webpack_1.Compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS,
30
+ }, (assets) => {
31
+ Object.keys(assets).forEach((filename) => {
32
+ if (filename.endsWith('/main.js')) {
33
+ const asset = compilation.getAsset(filename);
34
+ const newSource = asset?.source.source().replace(new RegExp(escapeRegExp('if (payload.event === \\"pong\\" && payload.invalid && !self.__NEXT_DATA__.err) {'), 'g'), `if (payload.event === \\"pong\\" && payload.invalid && !self.__NEXT_DATA__.err) {
35
+ if (window.mf_client && window.mf_client.isFederatedPathname(window.location.pathname)) return;
36
+ `.replaceAll('\n', '\\n'));
37
+ const updatedAsset = new webpack.sources.RawSource(newSource);
38
+ if (asset) {
39
+ compilation.updateAsset(filename, updatedAsset);
40
+ }
41
+ else {
42
+ compilation.emitAsset(filename, updatedAsset);
43
+ }
44
+ }
45
+ });
46
+ });
47
+ });
48
+ }
49
+ }
50
+ exports.DevHmrFixInvalidPongPlugin = DevHmrFixInvalidPongPlugin;
51
+ function escapeRegExp(string) {
52
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
53
+ }
54
+ exports.default = DevHmrFixInvalidPongPlugin;
55
+ //# sourceMappingURL=DevHmrFixInvalidPongPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevHmrFixInvalidPongPlugin.js","sourceRoot":"","sources":["../../../../../packages/nextjs-mf/src/plugins/DevHmrFixInvalidPongPlugin.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAEhD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;IAChC,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAS,GAAG,EAAE,MAAM;QAEhD,qBAAqB;QACrB,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,iBAAiB,EAAE;YAC3E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAU,MAAM,CAAC,CAAC;SAC1C;QAED,cAAc;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAU,MAAM,CAAC,CAAC;IAE5D,CAAC,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAa,0BAA0B;IACrC,KAAK,CAAC,QAAkB;QACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEjC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAChC,4BAA4B,EAC5B,CAAC,WAAW,EAAE,EAAE;YACd,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CACjC;gBACE,IAAI,EAAE,4BAA4B;gBAClC,iCAAiC;gBACjC,uCAAuC;gBACvC,KAAK,EAAE,qBAAW,CAAC,gCAAgC;aACpD,EACD,CAAC,MAAM,EAAE,EAAE;gBACT,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACvC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;wBACjC,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAC7C,MAAM,SAAS,GAAI,KAAK,EAAE,MAAM,CAAC,MAAM,EAAa,CAAC,OAAO,CAC1D,IAAI,MAAM,CACR,YAAY,CACV,mFAAmF,CACpF,EACD,GAAG,CACJ,EACD;;mBAEC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAC1B,CAAC;wBAEF,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;wBAE9D,IAAI,KAAK,EAAE;4BACT,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;yBACjD;6BAAM;4BACL,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;yBAC/C;qBACF;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CACF,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AA5CD,gEA4CC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;AAC5F,CAAC;AAED,kBAAe,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Compiler } from 'webpack';
2
+ import type { ModuleFederationPluginOptions } from '@module-federation/utilities';
3
+ export default class ModuleFederationPlugin {
4
+ private _options;
5
+ constructor(options: ModuleFederationPluginOptions);
6
+ apply(compiler: Compiler): void;
7
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ModuleFederationPlugin {
4
+ constructor(options) {
5
+ this._options = options;
6
+ }
7
+ apply(compiler) {
8
+ const { _options: options } = this;
9
+ const webpack = compiler.webpack;
10
+ const { ContainerPlugin, ContainerReferencePlugin } = webpack.container;
11
+ const { SharePlugin } = webpack.sharing;
12
+ const library = options.library || { type: 'var', name: options.name };
13
+ const remoteType = options.remoteType ||
14
+ (options.library && options.library.type) ||
15
+ 'script';
16
+ if (library &&
17
+ !compiler.options.output.enabledLibraryTypes?.includes(library.type)) {
18
+ compiler.options.output.enabledLibraryTypes?.push(library.type);
19
+ }
20
+ if (options.exposes &&
21
+ (Array.isArray(options.exposes)
22
+ ? options.exposes.length > 0
23
+ : Object.keys(options.exposes).length > 0)) {
24
+ new ContainerPlugin({
25
+ name: options.name,
26
+ library,
27
+ filename: options.filename,
28
+ runtime: options.runtime,
29
+ exposes: options.exposes,
30
+ }).apply(compiler);
31
+ }
32
+ if (options.remotes &&
33
+ (Array.isArray(options.remotes)
34
+ ? options.remotes.length > 0
35
+ : Object.keys(options.remotes).length > 0)) {
36
+ new ContainerReferencePlugin({
37
+ remoteType,
38
+ remotes: options.remotes,
39
+ }).apply(compiler);
40
+ }
41
+ if (options.shared) {
42
+ new SharePlugin({
43
+ shared: options.shared,
44
+ shareScope: options.shareScope,
45
+ }).apply(compiler);
46
+ }
47
+ }
48
+ }
49
+ exports.default = ModuleFederationPlugin;
50
+ //# sourceMappingURL=ModuleFederationPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/nextjs-mf/src/plugins/ModuleFederationPlugin.ts"],"names":[],"mappings":";;AAGA,MAAqB,sBAAsB;IAGzC,YAAY,OAAsC;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,QAAkB;QACtB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;QACxE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,UAAU,GACd,OAAO,CAAC,UAAU;YAClB,CAAC,OAAO,CAAC,OAAO,IAAK,OAAO,CAAC,OAAO,CAAC,IAAsB,CAAC;YAC5D,QAAQ,CAAC;QAEX,IACE,OAAO;YACP,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EACpE;YACA,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACjE;QAED,IACE,OAAO,CAAC,OAAO;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAC5C;YACA,IAAI,eAAe,CAAC;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAc;gBAC5B,OAAO;gBACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACpB;QACD,IACE,OAAO,CAAC,OAAO;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAC5C;YACA,IAAI,wBAAwB,CAAC;gBAC3B,UAAU;gBACV,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACpB;QACD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,IAAI,WAAW,CAAC;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACpB;IACH,CAAC;CACF;AAxDD,yCAwDC"}
@@ -0,0 +1,9 @@
1
+ import type { NextFederationPluginOptions } from '@module-federation/utilities';
2
+ import type { Compiler } from 'webpack';
3
+ export declare class NextFederationPlugin {
4
+ private _options;
5
+ private _extraOptions;
6
+ constructor(options: NextFederationPluginOptions);
7
+ apply(compiler: Compiler): void;
8
+ }
9
+ export default NextFederationPlugin;
@@ -0,0 +1,111 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Zackary Jackson @ScriptedAlchemy
4
+ */
5
+ 'use strict';
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.NextFederationPlugin = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const utilities_1 = require("@module-federation/utilities");
10
+ const path_1 = tslib_1.__importDefault(require("path"));
11
+ const internal_1 = require("../internal");
12
+ const AddRuntimeRequirementToPromiseExternalPlugin_1 = tslib_1.__importDefault(require("./AddRuntimeRequirementToPromiseExternalPlugin"));
13
+ const ChildFederationPlugin_1 = tslib_1.__importDefault(require("./ChildFederationPlugin"));
14
+ const DevHmrFixInvalidPongPlugin_1 = tslib_1.__importDefault(require("./DevHmrFixInvalidPongPlugin"));
15
+ class NextFederationPlugin {
16
+ constructor(options) {
17
+ const { extraOptions, ...mainOpts } = options;
18
+ this._options = mainOpts;
19
+ this._extraOptions = {
20
+ automaticPageStitching: false,
21
+ enableImageLoaderFix: false,
22
+ enableUrlLoaderFix: false,
23
+ skipSharingNextInternals: false,
24
+ ...extraOptions,
25
+ };
26
+ }
27
+ apply(compiler) {
28
+ if (!compiler.options.name) {
29
+ throw new Error('name is not defined in Compiler options');
30
+ }
31
+ if (!this._options.filename) {
32
+ throw new Error('filename is not defined in NextFederation options');
33
+ }
34
+ const isServer = compiler.options.name === 'server';
35
+ const webpack = compiler.webpack;
36
+ if (isServer) {
37
+ console.error('[nextjs-mf] WARNING: SSR IS NOT FULLY SUPPORTED YET, Only use pluign on client builds');
38
+ // target false because we use our own target for node env
39
+ compiler.options.target = false;
40
+ const StreamingTargetPlugin = require('@module-federation/node').StreamingTargetPlugin;
41
+ new StreamingTargetPlugin(this._options, {
42
+ ModuleFederationPlugin: webpack.container.ModuleFederationPlugin,
43
+ }).apply(compiler);
44
+ this._options.library = {
45
+ type: 'commonjs-module',
46
+ name: this._options.name,
47
+ };
48
+ // output remote to ssr if server
49
+ this._options.filename = this._options.filename.replace('/chunks', '/ssr');
50
+ // should this be a plugin that we apply to the compiler?
51
+ (0, internal_1.internalizeSharedPackages)(this._options, compiler);
52
+ }
53
+ else {
54
+ if (this._extraOptions.automaticPageStitching) {
55
+ compiler.options.module.rules.push({
56
+ test: /next[\\/]dist[\\/]client[\\/]page-loader\.js$/,
57
+ loader: path_1.default.resolve(__dirname, '../loaders/patchNextClientPageLoader'),
58
+ });
59
+ }
60
+ if (this._options.remotes) {
61
+ this._options.remotes = (0, internal_1.parseRemotes)(this._options.remotes);
62
+ }
63
+ if (this._options.library) {
64
+ console.error('[mf] you cannot set custom library');
65
+ }
66
+ this._options.library = {
67
+ // assign remote name to object to avoid SWC mangling top level variable
68
+ type: 'window',
69
+ name: this._options.name,
70
+ };
71
+ }
72
+ //todo runtime variable creation needs to be applied for server as well. this is just for client
73
+ // TODO: this needs to be refactored into something more comprehensive. this is just a quick fix
74
+ new webpack.DefinePlugin({
75
+ 'process.env.REMOTES': (0, utilities_1.createRuntimeVariables)(this._options.remotes),
76
+ 'process.env.CURRENT_HOST': JSON.stringify(this._options.name),
77
+ }).apply(compiler);
78
+ const ModuleFederationPlugin = isServer
79
+ ? require('@module-federation/node').NodeFederationPlugin
80
+ : webpack.container.ModuleFederationPlugin;
81
+ // ignore edge runtime and middleware builds
82
+ if (ModuleFederationPlugin) {
83
+ const internalShare = (0, internal_1.reKeyHostShared)(this._options.shared);
84
+ const hostFederationPluginOptions = {
85
+ ...this._options,
86
+ exposes: {},
87
+ shared: {
88
+ noop: {
89
+ import: 'data:text/javascript,module.exports = {};',
90
+ requiredVersion: false,
91
+ eager: true,
92
+ version: '0',
93
+ },
94
+ ...internalShare,
95
+ },
96
+ };
97
+ compiler.options.optimization.chunkIds = 'named';
98
+ new ModuleFederationPlugin(hostFederationPluginOptions, {
99
+ ModuleFederationPlugin,
100
+ }).apply(compiler);
101
+ new ChildFederationPlugin_1.default(this._options, this._extraOptions).apply(compiler);
102
+ new AddRuntimeRequirementToPromiseExternalPlugin_1.default().apply(compiler);
103
+ if (compiler.options.mode === 'development') {
104
+ new DevHmrFixInvalidPongPlugin_1.default().apply(compiler);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ exports.NextFederationPlugin = NextFederationPlugin;
110
+ exports.default = NextFederationPlugin;
111
+ //# sourceMappingURL=NextFederationPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NextFederationPlugin.js","sourceRoot":"","sources":["../../../../../packages/nextjs-mf/src/plugins/NextFederationPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Compiler } from 'webpack';
2
+ export declare class RemoveRRRuntimePlugin {
3
+ apply(compiler: Compiler): void;
4
+ }
5
+ export default RemoveRRRuntimePlugin;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoveRRRuntimePlugin = void 0;
4
+ const webpack_1 = require("webpack");
5
+ class RemoveRRRuntimePlugin {
6
+ apply(compiler) {
7
+ const webpack = compiler.webpack;
8
+ // only impacts dev mode - dont waste the memory during prod build
9
+ if (compiler.options.mode === 'development') {
10
+ compiler.hooks.thisCompilation.tap('RemoveRRRuntimePlugin', (compilation) => {
11
+ compilation.hooks.processAssets.tap({
12
+ name: 'RemoveRRRuntimePlugin',
13
+ // FIXME: Is this state or stage?
14
+ // Webpack docs mentions it as 'stage'.
15
+ stage: webpack_1.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE,
16
+ }, (assets) => {
17
+ //can this be improved? I need react refresh not to cause global collision in dev mode
18
+ Object.keys(assets).forEach((filename) => {
19
+ if (filename.endsWith('.js') || filename.endsWith('.mjs')) {
20
+ const asset = compilation.getAsset(filename);
21
+ // easiest way to solve it is to prevent react refresh helpers from running when its a federated module chunk
22
+ const newSource = asset?.source.source().replace(/RefreshHelpers/g, 'NoExist');
23
+ const updatedAsset = new webpack.sources.RawSource(newSource);
24
+ if (asset) {
25
+ compilation.updateAsset(filename, updatedAsset);
26
+ }
27
+ else {
28
+ compilation.emitAsset(filename, updatedAsset);
29
+ }
30
+ }
31
+ });
32
+ });
33
+ });
34
+ }
35
+ }
36
+ }
37
+ exports.RemoveRRRuntimePlugin = RemoveRRRuntimePlugin;
38
+ exports.default = RemoveRRRuntimePlugin;
39
+ //# sourceMappingURL=RemoveRRRuntimePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoveRRRuntimePlugin.js","sourceRoot":"","sources":["../../../../../packages/nextjs-mf/src/plugins/RemoveRRRuntimePlugin.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAEhD,MAAa,qBAAqB;IAChC,KAAK,CAAC,QAAkB;QACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEjC,kEAAkE;QAClE,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;YAC3C,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAChC,uBAAuB,EACvB,CAAC,WAAW,EAAE,EAAE;gBACd,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CACjC;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,iCAAiC;oBACjC,uCAAuC;oBACvC,KAAK,EAAE,qBAAW,CAAC,oCAAoC;iBACxD,EACD,CAAC,MAAM,EAAE,EAAE;oBACT,sFAAsF;oBACtF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;wBACvC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;4BACzD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;4BAC7C,6GAA6G;4BAC7G,MAAM,SAAS,GAAI,KAAK,EAAE,MAAM,CAAC,MAAM,EAAa,CAAC,OAAO,CAC1D,iBAAiB,EACjB,SAAS,CACV,CAAC;4BACF,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;4BAE9D,IAAI,KAAK,EAAE;gCACT,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;6BACjD;iCAAM;gCACL,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;6BAC/C;yBACF;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC,CACF,CAAC;YACJ,CAAC,CACF,CAAC;SACH;IACH,CAAC;CACF;AAzCD,sDAyCC;AAED,kBAAe,qBAAqB,CAAC"}