@@ -29,6 +29,7 @@ type NormalizedOptions = {
29
29
projectRoot : string ;
30
30
projectSourceRoot : string ;
31
31
manifestPath : string ;
32
+ manifestRelPath : string ;
32
33
projectConfig : any ;
33
34
main : string ;
34
35
port : number ;
@@ -65,14 +66,15 @@ export default function config(options: MfSchematicSchema): Rule {
65
66
const workspaceFileName = getWorkspaceFileName ( tree ) ;
66
67
const workspace = JSON . parse ( tree . read ( workspaceFileName ) . toString ( 'utf8' ) ) ;
67
68
68
- const normalized = normalizeOptions ( options , workspace ) ;
69
+ const normalized = normalizeOptions ( options , workspace , tree ) ;
69
70
70
71
const {
71
72
polyfills,
72
73
projectName,
73
74
projectRoot,
74
75
projectSourceRoot,
75
76
manifestPath,
77
+ manifestRelPath,
76
78
main,
77
79
} = normalized ;
78
80
@@ -90,11 +92,11 @@ export default function config(options: MfSchematicSchema): Rule {
90
92
91
93
const generateRule = ! exists
92
94
? await generateFederationConfig (
93
- remoteMap ,
94
- projectRoot ,
95
- projectSourceRoot ,
96
- options
97
- )
95
+ remoteMap ,
96
+ projectRoot ,
97
+ projectSourceRoot ,
98
+ options
99
+ )
98
100
: noop ;
99
101
100
102
updateWorkspaceConfig ( tree , normalized , workspace , workspaceFileName ) ;
@@ -112,11 +114,11 @@ export default function config(options: MfSchematicSchema): Rule {
112
114
113
115
context . addTask ( new NodePackageInstallTask ( ) ) ;
114
116
115
- return chain ( [ generateRule , makeMainAsync ( main , options , remoteMap ) ] ) ;
117
+ return chain ( [ generateRule , makeMainAsync ( main , options , remoteMap , manifestRelPath ) ] ) ;
116
118
} ;
117
119
}
118
120
119
- export function patchAngularBuild ( tree ) {
121
+ export function patchAngularBuild ( tree : Tree ) {
120
122
const packagePath = 'node_modules/@angular/build/package.json' ;
121
123
const privatePath = 'node_modules/@angular/build/private.js' ;
122
124
@@ -125,17 +127,26 @@ export function patchAngularBuild(tree) {
125
127
}
126
128
127
129
const packageJson = JSON . parse (
128
- tree . read ( packagePath )
130
+ tree . read ( packagePath ) . toString ( 'utf8' )
129
131
) ;
130
132
patchAngularBuildPackageJson ( packageJson ) ;
131
133
tree . overwrite (
132
134
packagePath ,
133
135
JSON . stringify ( packageJson , null , 2 )
134
136
) ;
135
- tree . overwrite (
136
- privatePath ,
137
- privateEntrySrc
138
- ) ;
137
+
138
+ if ( ! tree . exists ( privatePath ) ) {
139
+ tree . create (
140
+ privatePath ,
141
+ privateEntrySrc
142
+ ) ;
143
+ }
144
+ else {
145
+ tree . overwrite (
146
+ privatePath ,
147
+ privateEntrySrc
148
+ ) ;
149
+ }
139
150
140
151
}
141
152
@@ -164,18 +175,14 @@ function updateWorkspaceConfig(
164
175
delete originalBuild . configurations ?. development ?. vendorChunk ;
165
176
}
166
177
167
- // if (originalBuild.options.browser) {
168
- // const browser = originalBuild.options.browser;
169
- // delete originalBuild.options.browser;
170
- // originalBuild.options.main = browser;
171
- // }
172
-
173
178
if ( originalBuild . options . main ) {
174
179
const main = originalBuild . options . main ;
175
180
delete originalBuild . options . main ;
176
181
originalBuild . options . browser = main ;
177
182
}
178
183
184
+ delete originalBuild . options . commonChunk ;
185
+
179
186
projectConfig . architect . esbuild = originalBuild ;
180
187
181
188
projectConfig . architect . build = {
@@ -197,6 +204,8 @@ function updateWorkspaceConfig(
197
204
serve . options ??= { } ;
198
205
serve . options . port = port ;
199
206
207
+ delete serve . options . commonChunk ;
208
+
200
209
const serveProd = projectConfig . architect . serve . configurations ?. production ;
201
210
if ( serveProd ) {
202
211
serveProd . buildTarget = `${ projectName } :esbuild:production` ;
@@ -237,7 +246,8 @@ function updateWorkspaceConfig(
237
246
238
247
function normalizeOptions (
239
248
options : MfSchematicSchema ,
240
- workspace : any
249
+ workspace : any ,
250
+ tree : Tree
241
251
) : NormalizedOptions {
242
252
if ( ! options . project ) {
243
253
options . project = workspace . defaultProject ;
@@ -271,10 +281,22 @@ function normalizeOptions(
271
281
'/'
272
282
) ;
273
283
274
- const manifestPath = path
275
- . join ( projectRoot , 'public/federation.manifest.json' )
284
+ const publicPath = path . join ( projectRoot , 'public' ) . replace ( / \\ / g, '/' ) ;
285
+
286
+ let manifestPath = path
287
+ . join ( publicPath , 'federation.manifest.json' )
276
288
. replace ( / \\ / g, '/' ) ;
277
289
290
+ let manifestRelPath = 'public/federation.manifest.json' ;
291
+
292
+ if ( ! tree . exists ( publicPath ) ) {
293
+ manifestPath = path
294
+ . join ( projectRoot , 'src/assets/federation.manifest.json' )
295
+ . replace ( / \\ / g, '/' ) ;
296
+
297
+ manifestRelPath = 'assets/federation.manifest.json' ;
298
+ }
299
+
278
300
const main =
279
301
projectConfig . architect . build . options . main ||
280
302
projectConfig . architect . build . options . browser ;
@@ -283,13 +305,20 @@ function normalizeOptions(
283
305
projectConfig . architect . build . options . polyfills = [ ] ;
284
306
}
285
307
308
+ if ( typeof projectConfig . architect . build . options . polyfills === 'string' ) {
309
+ projectConfig . architect . build . options . polyfills = [
310
+ projectConfig . architect . build . options . polyfills
311
+ ]
312
+ }
313
+
286
314
const polyfills = projectConfig . architect . build . options . polyfills ;
287
315
return {
288
316
polyfills,
289
317
projectName,
290
318
projectRoot,
291
319
projectSourceRoot,
292
320
manifestPath,
321
+ manifestRelPath,
293
322
projectConfig,
294
323
main,
295
324
port : + ( options . port || 4200 ) ,
@@ -353,7 +382,8 @@ function generateRemoteMap(workspace: any, projectName: string) {
353
382
function makeMainAsync (
354
383
main : string ,
355
384
options : MfSchematicSchema ,
356
- remoteMap : unknown
385
+ remoteMap : unknown ,
386
+ manifestRelPath : string ,
357
387
) : Rule {
358
388
return async function ( tree ) {
359
389
const mainPath = path . dirname ( main ) ;
@@ -371,7 +401,7 @@ function makeMainAsync(
371
401
if ( options . type === 'dynamic-host' ) {
372
402
newMainContent = `import { initFederation } from '@angular-architects/native-federation';
373
403
374
- initFederation('federation.manifest.json ')
404
+ initFederation('${ manifestRelPath } ')
375
405
.catch(err => console.error(err))
376
406
.then(_ => import('./bootstrap'))
377
407
.catch(err => console.error(err));
0 commit comments