Skip to content

Commit 566abde

Browse files
authored
fix(@angular/build): enforce library compilerOptions and skip unused .tsbuildinfo emit
Ensure library compilations explicitly set `noEmit: false`, `emitDeclarationOnly: false`, and `emitDecoratorMetadata: false` in `transformCompilerOptions` so that configurations extending a root `tsconfig.json` with `noEmit` or `emitDeclarationOnly` still emit both JavaScript and declaration files.
1 parent cd70beb commit 566abde

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

‎packages/angular/build/src/tools/angular/compilation/angular-compilation_spec.ts‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* found in the LICENSE file at https://angular.dev/license
77
*/
88

9+
import path from 'node:path';
910
import ts from 'typescript';
1011
import type { AngularHostOptions } from '../angular-host';
1112
import { CompilerOptionOverrides, transformCompilerOptions } from './compiler-options';
@@ -476,8 +477,36 @@ describe('AngularCompilation', () => {
476477
expect(compilerOptions['_useTypeScriptTranspilation']).toBe(true);
477478
expect(compilerOptions.supportTestBed).toBe(true);
478479
expect(compilerOptions.supportJitMode).toBe(true);
480+
expect(compilerOptions.noEmit).toBe(false);
479481
expect(compilerOptions.noEmitOnError).toBe(false);
482+
expect(compilerOptions.emitDeclarationOnly).toBe(false);
480483
expect(compilerOptions.composite).toBe(false);
481484
});
485+
486+
it('enforces library compiler options and skips app-only target warning', () => {
487+
const { compilerOptions, warnings } = transformCompilerOptions(
488+
ts,
489+
{
490+
target: ts.ScriptTarget.ES2020,
491+
noEmit: true,
492+
emitDeclarationOnly: true,
493+
isolatedModules: true,
494+
},
495+
{
496+
cachePath: '/tmp/cache',
497+
},
498+
'tsconfig.lib.json',
499+
'library',
500+
);
501+
502+
expect(compilerOptions.target).toBe(ts.ScriptTarget.ES2022);
503+
expect(compilerOptions.module).toBe(ts.ModuleKind.Preserve);
504+
expect(compilerOptions.useDefineForClassFields).toBeUndefined();
505+
expect(compilerOptions.noEmit).toBe(false);
506+
expect(compilerOptions.emitDeclarationOnly).toBe(false);
507+
expect(compilerOptions.incremental).toBe(true);
508+
expect(compilerOptions.tsBuildInfoFile).toBe(path.join('/tmp/cache', '.tsbuildinfo'));
509+
expect(warnings).toEqual([]);
510+
});
482511
});
483512
});

‎packages/angular/build/src/tools/angular/compilation/compiler-options.ts‎

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ export function transformCompilerOptions(
3939
const warnings: PartialMessage[] = [];
4040
const isLibrary = buildType === 'library';
4141

42+
if (isLibrary) {
43+
compilerOptions.target = typeScript.ScriptTarget.ES2022;
44+
compilerOptions.module = typeScript.ModuleKind.Preserve;
45+
compilerOptions.importHelpers = true;
46+
compilerOptions.declaration = true;
47+
compilerOptions.declarationMap = !!(
48+
overrides?.declarationMap ?? compilerOptions.declarationMap
49+
);
50+
compilerOptions.declarationDir = undefined;
51+
}
52+
4253
if (
4354
compilerOptions.target === undefined ||
4455
compilerOptions.target < typeScript.ScriptTarget.ES2022
@@ -112,18 +123,6 @@ export function transformCompilerOptions(
112123
});
113124
}
114125

115-
if (isLibrary) {
116-
compilerOptions.target = typeScript.ScriptTarget.ES2022;
117-
compilerOptions.module = typeScript.ModuleKind.ES2022;
118-
compilerOptions.moduleResolution = typeScript.ModuleResolutionKind.Bundler;
119-
compilerOptions.importHelpers = true;
120-
compilerOptions.declaration = true;
121-
compilerOptions.declarationMap = !!(
122-
overrides?.declarationMap ?? compilerOptions.declarationMap
123-
);
124-
compilerOptions.declarationDir = undefined;
125-
}
126-
127126
// Synchronize custom resolve conditions.
128127
// Set if using the supported bundler resolution mode (bundler is the default in new projects)
129128
if (
@@ -137,7 +136,9 @@ export function transformCompilerOptions(
137136
compilerOptions: {
138137
...compilerOptions,
139138
basePath: overrides?.basePath ? toPosixPath(overrides.basePath) : compilerOptions.basePath,
139+
noEmit: false,
140140
noEmitOnError: false,
141+
emitDeclarationOnly: false,
141142
composite: false,
142143
inlineSources: !!overrides?.sourcemap,
143144
inlineSourceMap: !isLibrary && !!overrides?.sourcemap,

0 commit comments

Comments
 (0)