Skip to content

Commit 157d28d

Browse files
committed
test(rsc-mf): combine react-server conditions with layered shared paths
1 parent b7ecd37 commit 157d28d

4 files changed

Lines changed: 142 additions & 8 deletions

File tree

tests/integration/rsc-mf/host/modern.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default defineConfig({
2525
chain.target('async-node');
2626
chain.resolve.conditionNames
2727
.clear()
28+
.add('react-server')
2829
.add('require')
2930
.add('import')
3031
.add('default');

tests/integration/rsc-mf/host/module-federation.config.ts

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,84 @@
1+
import path from 'path';
12
import { createModuleFederationConfig } from '@module-federation/modern-js-v3';
23

34
const REMOTE_PORT = process.env.RSC_MF_REMOTE_PORT || '3008';
5+
const LAYERS = {
6+
ssr: 'server-side-rendering',
7+
rsc: 'react-server-components',
8+
} as const;
9+
10+
const reactClientPath = require.resolve('react');
11+
const reactDomClientPath = require.resolve('react-dom');
12+
const reactServerPath = path.join(
13+
path.dirname(require.resolve('react/package.json')),
14+
'react.react-server.js',
15+
);
16+
17+
const layeredShared = [
18+
{
19+
react: {
20+
import: reactClientPath,
21+
shareKey: 'react',
22+
singleton: true,
23+
requiredVersion: false,
24+
shareScope: 'default',
25+
},
26+
'react-dom': {
27+
import: reactDomClientPath,
28+
shareKey: 'react-dom',
29+
singleton: true,
30+
requiredVersion: false,
31+
shareScope: 'default',
32+
},
33+
},
34+
{
35+
react: {
36+
import: reactClientPath,
37+
shareKey: 'react',
38+
singleton: true,
39+
requiredVersion: false,
40+
shareScope: 'ssr',
41+
layer: LAYERS.ssr,
42+
issuerLayer: LAYERS.ssr,
43+
},
44+
'react-dom': {
45+
import: reactDomClientPath,
46+
shareKey: 'react-dom',
47+
singleton: true,
48+
requiredVersion: false,
49+
shareScope: 'ssr',
50+
layer: LAYERS.ssr,
51+
issuerLayer: LAYERS.ssr,
52+
},
53+
},
54+
{
55+
react: {
56+
import: reactServerPath,
57+
shareKey: 'react',
58+
singleton: true,
59+
requiredVersion: false,
60+
shareScope: 'rsc',
61+
layer: LAYERS.rsc,
62+
issuerLayer: LAYERS.rsc,
63+
},
64+
'react-dom': {
65+
import: reactDomClientPath,
66+
shareKey: 'react-dom',
67+
singleton: true,
68+
requiredVersion: false,
69+
shareScope: 'rsc',
70+
layer: LAYERS.rsc,
71+
issuerLayer: LAYERS.rsc,
72+
},
73+
},
74+
] as const;
475

576
export default createModuleFederationConfig({
677
name: 'rscHost',
778
remotes: {
879
rscRemote: `rscRemote@http://127.0.0.1:${REMOTE_PORT}/static/mf-manifest.json`,
980
},
10-
shared: {
11-
react: { singleton: true },
12-
'react-dom': { singleton: true },
13-
},
81+
shared: layeredShared as any,
1482
dts: false,
1583
experiments: {
1684
asyncStartup: true,

tests/integration/rsc-mf/remote/modern.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export default defineConfig({
3030
chain.target('async-node');
3131
chain.resolve.conditionNames
3232
.clear()
33+
.add('react-server')
3334
.add('require')
3435
.add('import')
3536
.add('default');

tests/integration/rsc-mf/remote/module-federation.config.ts

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,77 @@
1+
import path from 'path';
12
import { createModuleFederationConfig } from '@module-federation/modern-js-v3';
23

34
const LAYERS = {
45
ssr: 'server-side-rendering',
56
rsc: 'react-server-components',
67
} as const;
78

9+
const reactClientPath = require.resolve('react');
10+
const reactDomClientPath = require.resolve('react-dom');
11+
const reactServerPath = path.join(
12+
path.dirname(require.resolve('react/package.json')),
13+
'react.react-server.js',
14+
);
15+
16+
const layeredShared = [
17+
{
18+
react: {
19+
import: reactClientPath,
20+
shareKey: 'react',
21+
singleton: true,
22+
requiredVersion: false,
23+
shareScope: 'default',
24+
},
25+
'react-dom': {
26+
import: reactDomClientPath,
27+
shareKey: 'react-dom',
28+
singleton: true,
29+
requiredVersion: false,
30+
shareScope: 'default',
31+
},
32+
},
33+
{
34+
react: {
35+
import: reactClientPath,
36+
shareKey: 'react',
37+
singleton: true,
38+
requiredVersion: false,
39+
shareScope: 'ssr',
40+
layer: LAYERS.ssr,
41+
issuerLayer: LAYERS.ssr,
42+
},
43+
'react-dom': {
44+
import: reactDomClientPath,
45+
shareKey: 'react-dom',
46+
singleton: true,
47+
requiredVersion: false,
48+
shareScope: 'ssr',
49+
layer: LAYERS.ssr,
50+
issuerLayer: LAYERS.ssr,
51+
},
52+
},
53+
{
54+
react: {
55+
import: reactServerPath,
56+
shareKey: 'react',
57+
singleton: true,
58+
requiredVersion: false,
59+
shareScope: 'rsc',
60+
layer: LAYERS.rsc,
61+
issuerLayer: LAYERS.rsc,
62+
},
63+
'react-dom': {
64+
import: reactDomClientPath,
65+
shareKey: 'react-dom',
66+
singleton: true,
67+
requiredVersion: false,
68+
shareScope: 'rsc',
69+
layer: LAYERS.rsc,
70+
issuerLayer: LAYERS.rsc,
71+
},
72+
},
73+
] as const;
74+
875
export default createModuleFederationConfig({
976
name: 'rscRemote',
1077
manifest: {
@@ -61,10 +128,7 @@ export default createModuleFederationConfig({
61128
layer: LAYERS.rsc,
62129
} as any,
63130
},
64-
shared: {
65-
react: { singleton: true },
66-
'react-dom': { singleton: true },
67-
},
131+
shared: layeredShared as any,
68132
dts: false,
69133
experiments: {
70134
asyncStartup: true,

0 commit comments

Comments
 (0)