1
- import { NormalizedFederationConfig , NormalizedSharedConfig } from '../config/federation-config' ;
1
+ import {
2
+ NormalizedFederationConfig ,
3
+ NormalizedSharedConfig ,
4
+ } from '../config/federation-config' ;
2
5
import { FederationInfo , SharedInfo } from '@softarc/native-federation-runtime' ;
3
6
import { FederationOptions } from './federation-options' ;
4
7
import { writeImportMap } from './write-import-map' ;
@@ -19,14 +22,15 @@ export const defaultBuildParams: BuildParams = {
19
22
skipMappingsAndExposed : false ,
20
23
} ;
21
24
22
-
23
25
export async function buildForFederation (
24
26
config : NormalizedFederationConfig ,
25
27
fedOptions : FederationOptions ,
26
28
externals : string [ ] ,
27
29
buildParams = defaultBuildParams
28
30
) {
31
+
29
32
let artefactInfo : ArtefactInfo | undefined ;
33
+
30
34
if ( ! buildParams . skipMappingsAndExposed ) {
31
35
artefactInfo = await bundleExposedAndMappings (
32
36
config ,
@@ -39,23 +43,46 @@ export async function buildForFederation(
39
43
? describeExposed ( config , fedOptions )
40
44
: artefactInfo . exposes ;
41
45
42
- const {
43
- sharedBrowser,
44
- sharedServer,
45
- separateBrowser,
46
- separateServer
47
- } = splitShared ( config . shared ) ;
46
+ const { sharedBrowser, sharedServer, separateBrowser, separateServer } =
47
+ splitShared ( config . shared ) ;
48
+
49
+ const sharedPackageInfoBrowser = await bundleShared (
50
+ sharedBrowser ,
51
+ config ,
52
+ fedOptions ,
53
+ externals ,
54
+ 'browser'
55
+ ) ;
48
56
49
- const sharedPackageInfoBrowser = await bundleShared ( sharedBrowser , config , fedOptions , externals , 'browser' ) ;
50
- const sharedPackageInfoServer = await bundleShared ( sharedServer , config , fedOptions , externals , 'node' ) ;
51
- const separatePackageInfoBrowser = await bundleSeparate ( separateBrowser , externals , config , fedOptions , 'browser' ) ;
52
- const separatePackageInfoServer = await bundleSeparate ( separateServer , externals , config , fedOptions , 'node' ) ;
57
+ const sharedPackageInfoServer = await bundleShared (
58
+ sharedServer ,
59
+ config ,
60
+ fedOptions ,
61
+ externals ,
62
+ 'node'
63
+ ) ;
64
+
65
+ const separatePackageInfoBrowser = await bundleSeparate (
66
+ separateBrowser ,
67
+ externals ,
68
+ config ,
69
+ fedOptions ,
70
+ 'browser'
71
+ ) ;
72
+
73
+ const separatePackageInfoServer = await bundleSeparate (
74
+ separateServer ,
75
+ externals ,
76
+ config ,
77
+ fedOptions ,
78
+ 'node'
79
+ ) ;
53
80
54
81
const sharedPackageInfo = [
55
- ...sharedPackageInfoBrowser ,
82
+ ...sharedPackageInfoBrowser ,
56
83
...sharedPackageInfoServer ,
57
84
...separatePackageInfoBrowser ,
58
- ...separatePackageInfoServer
85
+ ...separatePackageInfoServer ,
59
86
] ;
60
87
61
88
const sharedMappingInfo = ! artefactInfo
@@ -86,25 +113,41 @@ type SplitSharedResult = {
86
113
function inferPackageFromSecondary ( secondary : string ) : string {
87
114
const parts = secondary . split ( '/' ) ;
88
115
if ( secondary . startsWith ( '@' ) && parts . length >= 2 ) {
89
- return parts [ 0 ] + '/' + parts [ 1 ] ;
116
+ return parts [ 0 ] + '/' + parts [ 1 ] ;
90
117
}
91
118
return parts [ 0 ] ;
92
119
}
93
120
94
- async function bundleSeparate ( separateBrowser : Record < string , NormalizedSharedConfig > , externals : string [ ] , config : NormalizedFederationConfig , fedOptions : FederationOptions , platform : 'node' | 'browser' ) {
121
+ async function bundleSeparate (
122
+ separateBrowser : Record < string , NormalizedSharedConfig > ,
123
+ externals : string [ ] ,
124
+ config : NormalizedFederationConfig ,
125
+ fedOptions : FederationOptions ,
126
+ platform : 'node' | 'browser'
127
+ ) {
95
128
const result : SharedInfo [ ] = [ ] ;
96
129
for ( const key in separateBrowser ) {
97
130
const shared = separateBrowser [ key ] ;
98
131
const packageName = inferPackageFromSecondary ( key ) ;
99
- const filteredExternals = externals . filter ( e => ! e . startsWith ( packageName ) ) ;
132
+ const filteredExternals = externals . filter (
133
+ ( e ) => ! e . startsWith ( packageName )
134
+ ) ;
100
135
const record = { [ key ] : shared } ;
101
- const buildResult = await bundleShared ( record , config , fedOptions , filteredExternals , platform ) ;
102
- buildResult . forEach ( item => result . push ( item ) ) ;
136
+ const buildResult = await bundleShared (
137
+ record ,
138
+ config ,
139
+ fedOptions ,
140
+ filteredExternals ,
141
+ platform
142
+ ) ;
143
+ buildResult . forEach ( ( item ) => result . push ( item ) ) ;
103
144
}
104
145
return result ;
105
146
}
106
147
107
- function splitShared ( shared : Record < string , NormalizedSharedConfig > ) : SplitSharedResult {
148
+ function splitShared (
149
+ shared : Record < string , NormalizedSharedConfig >
150
+ ) : SplitSharedResult {
108
151
const sharedServer : Record < string , NormalizedSharedConfig > = { } ;
109
152
const sharedBrowser : Record < string , NormalizedSharedConfig > = { } ;
110
153
const separateBrowser : Record < string , NormalizedSharedConfig > = { } ;
@@ -114,24 +157,19 @@ function splitShared(shared: Record<string, NormalizedSharedConfig>): SplitShare
114
157
const obj = shared [ key ] ;
115
158
if ( obj . platform === 'node' && obj . build === 'default' ) {
116
159
sharedServer [ key ] = obj ;
117
- }
118
- else if ( obj . platform === 'node' && obj . build === 'separate' ) {
160
+ } else if ( obj . platform === 'node' && obj . build === 'separate' ) {
119
161
separateServer [ key ] = obj ;
120
- }
121
- else if ( obj . platform === 'browser' && obj . build === 'default' ) {
162
+ } else if ( obj . platform === 'browser' && obj . build === 'default' ) {
122
163
sharedBrowser [ key ] = obj ;
123
- }
124
- else {
164
+ } else {
125
165
separateBrowser [ key ] = obj ;
126
166
}
127
167
}
128
168
129
169
return {
130
- sharedBrowser,
170
+ sharedBrowser,
131
171
sharedServer,
132
172
separateBrowser,
133
173
separateServer,
134
174
} ;
135
-
136
175
}
137
-
0 commit comments