@module-federation/nextjs-mf 5.5.1 → 5.6.1

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 (143) 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/node-plugin/streaming/CommonJsChunkLoadingPlugin.js +0 -94
  131. package/lib/node-plugin/streaming/LoadFileChunkLoadingRuntimeModule.js +0 -414
  132. package/lib/node-plugin/streaming/index.js +0 -46
  133. package/lib/node-plugin/streaming/loadScript.js +0 -59
  134. package/lib/plugins/DevHmrFixInvalidPongPlugin.js +0 -82
  135. package/lib/utils.js +0 -125
  136. package/node-plugin/README.md +0 -27
  137. package/node-plugin/package.json +0 -4
  138. package/node-plugin/streaming/CommonJsChunkLoadingPlugin.js +0 -89
  139. package/node-plugin/streaming/LoadFileChunkLoadingRuntimeModule.js +0 -410
  140. package/node-plugin/streaming/NodeRuntime.js +0 -245
  141. package/node-plugin/streaming/index.js +0 -42
  142. package/node-plugin/streaming/loadScript.js +0 -51
  143. package/tsconfig.json +0 -33
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoteContainer = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const eventemitter3_1 = tslib_1.__importDefault(require("eventemitter3"));
6
+ const utils_1 = require("../utils");
7
+ /**
8
+ * This is a Lazy loader of webpack remote container with some NextJS-specific helper methods.
9
+ *
10
+ * It provides the ability to register remote, and load & init it on the first use.
11
+ */
12
+ class RemoteContainer {
13
+ constructor(opts) {
14
+ this.global = opts.global;
15
+ this.url = opts.url;
16
+ this.events = new eventemitter3_1.default();
17
+ }
18
+ /**
19
+ * Create or reuse existed remote entry.
20
+ *
21
+ * Be careful, Singleton pattern does not work well in webpack builds,
22
+ * because one module may be copied between different chunks. In such a way
23
+ * you obtain several lists of instances.
24
+ */
25
+ static createSingleton(remote) {
26
+ let data;
27
+ if (typeof remote === 'string') {
28
+ const [global, url] = remote.split('@');
29
+ data = { global, url };
30
+ }
31
+ else if (remote?.global && remote?.url) {
32
+ data = { global: remote.global, url: remote.url };
33
+ }
34
+ if (!data) {
35
+ console.error(`Cannot init RemoteContainer with following data`, RemoteContainer);
36
+ throw Error('[nextjs-mf] RemoteContainer.createSingleton(remote) accepts string "shop@http://example.com/_next/static/chunks/remoteEntry.js" OR object { global: "shop", url: "http://example.com/_next/static/chunks/remoteEntry.js"}');
37
+ }
38
+ let container;
39
+ if (this.instances[data.global]) {
40
+ container = this.instances[data.global];
41
+ }
42
+ else {
43
+ container = new RemoteContainer(data);
44
+ this.instances[data.global] = container;
45
+ }
46
+ return container;
47
+ }
48
+ /**
49
+ * Check is the current remoteEntry.js loaded or not
50
+ */
51
+ isLoaded() {
52
+ return !!this.container;
53
+ }
54
+ /**
55
+ * Returns initialized webpack RemoteContainer.
56
+ * If its' script does not loaded - then load & init it firstly.
57
+ */
58
+ async getContainer() {
59
+ if (this.container) {
60
+ return this.container;
61
+ }
62
+ this.events.emit('loadStart', this);
63
+ try {
64
+ const container = await (0, utils_1.injectScript)({
65
+ global: this.global,
66
+ url: this.url,
67
+ });
68
+ if (container) {
69
+ this.container = container;
70
+ this.events.emit('loadComplete', this);
71
+ return container;
72
+ }
73
+ throw Error(`[nextjs-mf] Remote container ${this.url} is empty`);
74
+ }
75
+ catch (e) {
76
+ this.error = e;
77
+ this.events.emit('loadError', e.message, this);
78
+ throw e;
79
+ }
80
+ }
81
+ /**
82
+ * Return remote module from container.
83
+ * If you provide `exportName` it automatically return exact property value from module.
84
+ *
85
+ * @example
86
+ * remote.getModule('./pages/index', 'default')
87
+ */
88
+ async getModule(modulePath, exportName) {
89
+ const container = await this.getContainer();
90
+ const modFactory = await container.get(modulePath);
91
+ if (!modFactory)
92
+ return undefined;
93
+ const mod = modFactory();
94
+ if (exportName) {
95
+ return mod && typeof mod === 'object' ? mod[exportName] : undefined;
96
+ }
97
+ else {
98
+ return mod;
99
+ }
100
+ }
101
+ /**
102
+ * Retrieve registered nextjs' routes from remote app
103
+ */
104
+ async getPageMap() {
105
+ if (this.pageMap) {
106
+ return this.pageMap;
107
+ }
108
+ const pageMap = await this.getModule('./pages-map-v2', 'default');
109
+ if (pageMap) {
110
+ this.pageMap = pageMap;
111
+ }
112
+ else {
113
+ this.pageMap = {};
114
+ console.warn(`[nextjs-mf] Container ${this.global} does not expose "./pages-map-v2" module.`);
115
+ }
116
+ return this.pageMap;
117
+ }
118
+ }
119
+ exports.RemoteContainer = RemoteContainer;
120
+ RemoteContainer.instances = {};
121
+ //# sourceMappingURL=RemoteContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteContainer.js","sourceRoot":"","sources":["../../../../packages/nextjs-mf/client/RemoteContainer.ts"],"names":[],"mappings":"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"}
@@ -1,49 +1,49 @@
1
- import { PageMap, RemoteContainer } from './RemoteContainer';
2
- export declare type PathPrefix = string;
3
- export declare type RemoteToRoutes = Map<RemoteContainer, PathPrefix | PathPrefix[]>;
4
- export declare type RouteInfo = {
5
- component: any;
6
- exports: any;
7
- styles: string[];
8
- };
9
- /**
10
- * A class which prepares/loads a list of remotes pages and knows how
11
- * to prepare NextJS pseudo-module of route data.
12
- */
13
- export declare class RemotePages {
14
- paths: Record<PathPrefix, RemoteContainer>;
15
- pageListCache: string[] | undefined;
16
- private asyncLoadedPageMaps;
17
- private mode?;
18
- constructor(mode?: 'production' | 'development');
19
- /**
20
- * Add remote routes for specific RemoteContainer which serves them.
21
- */
22
- addRoutes(routes: string | string[], remote: RemoteContainer): void;
23
- /**
24
- * Load a remote page map and add its routes to registry.
25
- */
26
- loadRemotePageMap(remote: RemoteContainer): Promise<PageMap | undefined>;
27
- /**
28
- * Get remote module according to provided next route.
29
- * Under the hood it automatically determines which remote need to be used.
30
- */
31
- routeToPageModule(route: string): Promise<any>;
32
- /**
33
- * Check that provided route present in registry.
34
- */
35
- hasRoute(route: string): boolean;
36
- /**
37
- * Find remote according to provided route.
38
- */
39
- routeToRemote(route: string): RemoteContainer | undefined;
40
- /**
41
- * Get cached unsorted list of remote routes.
42
- */
43
- getPageList(): string[];
44
- /**
45
- * Get prepared pseudo-module which is consumed by Nextjs' router.
46
- */
47
- getRouteInfo(route: string): Promise<undefined | RouteInfo>;
48
- }
49
- //# sourceMappingURL=RemotePages.d.ts.map
1
+ import type { PageMap } from '@module-federation/utilities';
2
+ import { RemoteContainer } from './RemoteContainer';
3
+ export declare type PathPrefix = string;
4
+ export declare type RemoteToRoutes = Map<RemoteContainer, PathPrefix | PathPrefix[]>;
5
+ export declare type RouteInfo = {
6
+ component: any;
7
+ exports: any;
8
+ styles: string[];
9
+ };
10
+ /**
11
+ * A class which prepares/loads a list of remotes pages and knows how
12
+ * to prepare NextJS pseudo-module of route data.
13
+ */
14
+ export declare class RemotePages {
15
+ paths: Record<PathPrefix, RemoteContainer>;
16
+ pageListCache: string[] | undefined;
17
+ private asyncLoadedPageMaps;
18
+ private mode?;
19
+ constructor(mode?: 'production' | 'development');
20
+ /**
21
+ * Add remote routes for specific RemoteContainer which serves them.
22
+ */
23
+ addRoutes(routes: string | string[], remote: RemoteContainer): void;
24
+ /**
25
+ * Load a remote page map and add its routes to registry.
26
+ */
27
+ loadRemotePageMap(remote: RemoteContainer): Promise<PageMap | undefined>;
28
+ /**
29
+ * Get remote module according to provided next route.
30
+ * Under the hood it automatically determines which remote need to be used.
31
+ */
32
+ routeToPageModule(route: string): Promise<any>;
33
+ /**
34
+ * Check that provided route present in registry.
35
+ */
36
+ hasRoute(route: string): boolean;
37
+ /**
38
+ * Find remote according to provided route.
39
+ */
40
+ routeToRemote(route: string): RemoteContainer | undefined;
41
+ /**
42
+ * Get cached unsorted list of remote routes.
43
+ */
44
+ getPageList(): string[];
45
+ /**
46
+ * Get prepared pseudo-module which is consumed by Nextjs' router.
47
+ */
48
+ getRouteInfo(route: string): Promise<undefined | RouteInfo>;
49
+ }
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemotePages = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ /**
7
+ * A class which prepares/loads a list of remotes pages and knows how
8
+ * to prepare NextJS pseudo-module of route data.
9
+ */
10
+ class RemotePages {
11
+ constructor(mode) {
12
+ this.paths = {};
13
+ this.asyncLoadedPageMaps = new Set();
14
+ this.pageListCache = undefined;
15
+ this.mode = mode;
16
+ }
17
+ /**
18
+ * Add remote routes for specific RemoteContainer which serves them.
19
+ */
20
+ addRoutes(routes, remote) {
21
+ if (Array.isArray(routes)) {
22
+ routes.forEach((route) => {
23
+ this.paths[route] = remote;
24
+ });
25
+ }
26
+ else {
27
+ this.paths[routes] = remote;
28
+ }
29
+ this.pageListCache = Object.keys(this.paths);
30
+ }
31
+ /**
32
+ * Load a remote page map and add its routes to registry.
33
+ */
34
+ async loadRemotePageMap(remote) {
35
+ const pageMap = await remote.getPageMap();
36
+ if (!pageMap)
37
+ return undefined;
38
+ // init once page map from remote if it wasn't done before
39
+ // here we updating real routes received from remote app in runtime
40
+ if (!this.asyncLoadedPageMaps.has(remote)) {
41
+ this.asyncLoadedPageMaps.add(remote);
42
+ this.addRoutes(Object.keys(pageMap), remote);
43
+ }
44
+ return pageMap;
45
+ }
46
+ /**
47
+ * Get remote module according to provided next route.
48
+ * Under the hood it automatically determines which remote need to be used.
49
+ */
50
+ async routeToPageModule(route) {
51
+ const remote = this.routeToRemote(route);
52
+ if (!remote) {
53
+ return undefined;
54
+ }
55
+ const pageMap = await this.loadRemotePageMap(remote);
56
+ if (!pageMap) {
57
+ return undefined;
58
+ }
59
+ const modulePath = pageMap[route];
60
+ if (!modulePath) {
61
+ return undefined;
62
+ }
63
+ return remote.getModule(modulePath);
64
+ }
65
+ /**
66
+ * Check that provided route present in registry.
67
+ */
68
+ hasRoute(route) {
69
+ return !!this.pageListCache?.includes(route);
70
+ }
71
+ /**
72
+ * Find remote according to provided route.
73
+ */
74
+ routeToRemote(route) {
75
+ let bestMatch;
76
+ for (const basepath in this.paths) {
77
+ if (route === basepath) {
78
+ return this.paths[basepath];
79
+ }
80
+ else if (route.startsWith(`${basepath}/`)) {
81
+ if (!bestMatch) {
82
+ bestMatch = basepath;
83
+ }
84
+ else if (bestMatch.length < basepath.length) {
85
+ bestMatch = basepath;
86
+ }
87
+ }
88
+ }
89
+ if (bestMatch) {
90
+ return this.paths[bestMatch];
91
+ }
92
+ return undefined;
93
+ }
94
+ /**
95
+ * Get cached unsorted list of remote routes.
96
+ */
97
+ getPageList() {
98
+ // it's very important to return the same Array instance
99
+ // because it instance is used in CombinedPages for recalculation of sorted version of all routes
100
+ const pageList = this.pageListCache || Object.keys(this.paths);
101
+ this.pageListCache = pageList;
102
+ return pageList;
103
+ }
104
+ /**
105
+ * Get prepared pseudo-module which is consumed by Nextjs' router.
106
+ */
107
+ async getRouteInfo(route) {
108
+ let routeInfo;
109
+ try {
110
+ const mod = await this.routeToPageModule(route);
111
+ if (mod) {
112
+ routeInfo = {
113
+ component: mod.default,
114
+ exports: mod,
115
+ styles: [],
116
+ };
117
+ }
118
+ }
119
+ catch (e) {
120
+ if (this.mode !== 'development') {
121
+ // in PROD throw error, nextjs will reload the page according to its internal logic
122
+ throw e;
123
+ }
124
+ else {
125
+ // in DEV mod show error in browser
126
+ console.warn(e);
127
+ routeInfo = {
128
+ component: () => React.createElement('div', null, React.createElement('div', null, 'This page is shown only in DEVELOPMENT mode. In PRODUCTION NextJS will reload this page trying to obtain it again from the server.'), React.createElement('div', null, 'Federated page ', route, ' load error:'), React.createElement('div', null, React.createElement('b', null, e.message))),
129
+ exports: {},
130
+ styles: [],
131
+ };
132
+ }
133
+ }
134
+ return routeInfo;
135
+ }
136
+ }
137
+ exports.RemotePages = RemotePages;
138
+ //# sourceMappingURL=RemotePages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemotePages.js","sourceRoot":"","sources":["../../../../packages/nextjs-mf/client/RemotePages.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,17 @@
1
- /**
2
- * This class provides a logic of sorting dynamic routes in NextJS.
3
- *
4
- * It was copied from
5
- * @see https://github.com/vercel/next.js/blob/canary/packages/next/shared/lib/router/utils/sorted-routes.ts
6
- */
7
- export declare class UrlNode {
8
- placeholder: boolean;
9
- children: Map<string, UrlNode>;
10
- slugName: string | null;
11
- restSlugName: string | null;
12
- optionalRestSlugName: string | null;
13
- insert(urlPath: string): void;
14
- smoosh(): string[];
15
- private _smoosh;
16
- private _insert;
17
- }
18
- //# sourceMappingURL=UrlNode.d.ts.map
1
+ /**
2
+ * This class provides a logic of sorting dynamic routes in NextJS.
3
+ *
4
+ * It was copied from
5
+ * @see https://github.com/vercel/next.js/blob/canary/packages/next/shared/lib/router/utils/sorted-routes.ts
6
+ */
7
+ export declare class UrlNode {
8
+ placeholder: boolean;
9
+ children: Map<string, UrlNode>;
10
+ slugName: string | null;
11
+ restSlugName: string | null;
12
+ optionalRestSlugName: string | null;
13
+ insert(urlPath: string): void;
14
+ smoosh(): string[];
15
+ private _smoosh;
16
+ private _insert;
17
+ }