Skip to content

Commit 9488fcd

Browse files
committed
fix: angular.json can contain comments
1 parent 1bd02e2 commit 9488fcd

File tree

6 files changed

+82
-32
lines changed

6 files changed

+82
-32
lines changed

libs/native-federation-core/src/lib/core/default-skip-list.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const DEFAULT_SKIP_LIST: SkipList = [
2020
'@angular/ssr',
2121
'express',
2222
/\/schematics(\/|$)/,
23+
/^@nx\/angular/,
2324
(pkg) => pkg.startsWith('@angular/') && !!pkg.match(/\/testing(\/|$)/),
2425
(pkg) => pkg.startsWith('@types/'),
2526
];

libs/native-federation/migrate-appbuilder.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,4 @@
125125
}
126126
}
127127

128-
```
128+
```

libs/native-federation/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@angular-architects/native-federation",
3-
"version": "17.1.0-beta.1",
3+
"version": "17.1.0-rc.0",
44
"main": "src/index.js",
55
"generators": "./collection.json",
66
"builders": "./builders.json",

libs/native-federation/src/builders/build/builder.ts

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,28 +55,34 @@ export async function* runBuilder(
5555
context: BuilderContext
5656
): AsyncIterable<BuilderOutput> {
5757
let target = targetFromTargetString(nfOptions.target);
58-
59-
if (target.target === 'esbuild') {
60-
logger.error('UPDATE NEEDED');
61-
logger.error('')
62-
logger.error('Since version 17.1, Native Federation uses Angular\'s');
63-
logger.error('Application-Builder and its Dev-Server.');
64-
logger.error('Please update your project config, e.g. in angular.json');
65-
logger.error('');
66-
logger.error('This command performs the needed update for default configs:');
67-
logger.error('');
68-
logger.error('\tng g @angular-architects/native-federation:appbuilder');
69-
logger.error('');
70-
logger.error('You need to run it once per application to migrate');
71-
logger.error('Please find more information here: https://shorturl.at/gADJW');
72-
return;
73-
}
74-
58+
7559
let _options = (await context.getTargetOptions(
7660
target
7761
)) as unknown as JsonObject & Schema;
7862

7963
let builder = await context.getBuilderNameForTarget(target);
64+
65+
if (builder === '@angular-devkit/build-angular:browser-esbuild') {
66+
logger.info('.: UPDATE NEEDED :.');
67+
logger.info('');
68+
logger.info("Since version 17.1, Native Federation uses Angular's");
69+
logger.info('Application-Builder and its Dev-Server.');
70+
logger.info('Please update your project config, e.g. in angular.json');
71+
logger.info('');
72+
logger.info(
73+
'This command performs the needed update for default configs:'
74+
);
75+
logger.info('');
76+
logger.info('\tng g @angular-architects/native-federation:appbuilder');
77+
logger.info('');
78+
logger.info('You need to run it once per application to migrate');
79+
logger.info(
80+
'Please find more information here: https://shorturl.at/gADJW'
81+
);
82+
return;
83+
84+
}
85+
8086
let options = (await context.validateOptions(
8187
_options,
8288
builder

libs/native-federation/src/schematics/appbuilder/schematic.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,29 @@ function updateWorkspaceConfig(
4040
}
4141

4242
if (projectConfig.architect.esbuild) {
43-
projectConfig.architect.esbuild.builder = '@angular-devkit/build-angular:application';
44-
projectConfig.architect.esbuild.options.browser = projectConfig.architect.esbuild.options.main;
43+
projectConfig.architect.esbuild.builder =
44+
'@angular-devkit/build-angular:application';
45+
projectConfig.architect.esbuild.options.browser =
46+
projectConfig.architect.esbuild.options.main;
4547
delete projectConfig.architect.esbuild.options.main;
4648
}
4749

4850
if (projectConfig.architect['serve-original']) {
4951
const target = projectConfig.architect['serve-original'];
5052
if (target.configurations?.production) {
51-
target.configurations.production.buildTarget = target.configurations.production.buildTarget.replace(':build:', ':esbuild:');
53+
target.configurations.production.buildTarget =
54+
target.configurations.production.buildTarget.replace(
55+
':build:',
56+
':esbuild:'
57+
);
5258
}
5359
if (target.configurations?.development) {
54-
target.configurations.development.buildTarget = target.configurations.development.buildTarget.replace(':build:', ':esbuild:');
60+
target.configurations.development.buildTarget =
61+
target.configurations.development.buildTarget.replace(
62+
':build:',
63+
':esbuild:'
64+
);
5565
}
56-
5766
}
5867

5968
if (projectConfig.architect.serve) {

libs/native-federation/src/utils/angular-esbuild-adapter.ts

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,9 @@ async function runEsbuild(
203203

204204
const tailwindConfiguration = tailwindConfigurationPath
205205
? {
206-
file: tailwindConfigurationPath,
207-
package: resolver.resolve('tailwindcss'),
208-
}
206+
file: tailwindConfigurationPath,
207+
package: resolver.resolve('tailwindcss'),
208+
}
209209
: undefined;
210210

211211
const outputNames = {
@@ -222,11 +222,7 @@ async function runEsbuild(
222222
}
223223
}
224224

225-
if (fs.existsSync(path.join(workspaceRoot, 'tsconfig.base.json'))) {
226-
tsConfigPath = 'tsconfig.base.json';
227-
} else if (fs.existsSync(path.join(workspaceRoot, 'tsconfig.json'))) {
228-
tsConfigPath = 'tsconfig.json';
229-
}
225+
tsConfigPath = createTsConfigForFederation(workspaceRoot, tsConfigPath, entryPoints);
230226

231227
const pluginOptions = createCompilerPluginOptions(
232228
{
@@ -328,9 +324,47 @@ async function runEsbuild(
328324
ctx.dispose();
329325
}
330326

327+
cleanUpTsConfigForFederation(tsConfigPath);
328+
331329
return writtenFiles;
332330
}
333331

332+
function cleanUpTsConfigForFederation(tsConfigPath: string) {
333+
if (tsConfigPath.includes('.federation.')) {
334+
fs.unlinkSync(tsConfigPath);
335+
}
336+
}
337+
338+
function createTsConfigForFederation(workspaceRoot: string, tsConfigPath: string, entryPoints: EntryPoint[]) {
339+
const fullTsConfigPath = path.join(workspaceRoot, tsConfigPath);
340+
const tsconfigDir = path.dirname(fullTsConfigPath);
341+
342+
const filtered = entryPoints.filter(ep => !ep.fileName.includes('/node_modules/') && !ep.fileName.startsWith('.')).map(ep => path.relative(tsconfigDir, ep.fileName).replace(/\\\\/g, '/'));
343+
344+
const tsconfigAsString = fs.readFileSync(fullTsConfigPath, 'utf-8');
345+
const tsconfigWithoutComments = tsconfigAsString.replace(
346+
/\/\*.+?\*\/|\/\/.*(?=[\n\r])/g,
347+
''
348+
);
349+
const tsconfig = JSON.parse(tsconfigWithoutComments);
350+
351+
352+
if (!tsconfig.include) {
353+
tsconfig.include = [];
354+
}
355+
356+
for (const ep of filtered) {
357+
if (!tsconfig.include.includes(ep)) {
358+
tsconfig.include.push(ep);
359+
}
360+
}
361+
362+
const tsconfigFedPath = path.join(tsconfigDir, 'tsconfig.federation.json');
363+
fs.writeFileSync(tsconfigFedPath, JSON.stringify(tsconfig, null, 2));
364+
tsConfigPath = tsconfigFedPath;
365+
return tsConfigPath;
366+
}
367+
334368
function writeResult(
335369
result: esbuild.BuildResult<esbuild.BuildOptions>,
336370
outdir: string,

0 commit comments

Comments
 (0)