diff --git a/packages/angular_devkit/build_angular/src/builders/application/tests/behavior/typescript-rebuild-touch-file_spec.ts b/packages/angular_devkit/build_angular/src/builders/application/tests/behavior/typescript-rebuild-touch-file_spec.ts new file mode 100644 index 000000000000..9f8be3d82f38 --- /dev/null +++ b/packages/angular_devkit/build_angular/src/builders/application/tests/behavior/typescript-rebuild-touch-file_spec.ts @@ -0,0 +1,52 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { concatMap, count, take, timeout } from 'rxjs'; +import { buildApplication } from '../../index'; +import { APPLICATION_BUILDER_INFO, BASE_OPTIONS, describeBuilder } from '../setup'; + +describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { + describe('Behavior: "Rebuilds when touching file"', () => { + for (const aot of [true, false]) { + it(`Rebuild correctly when file is touched with ${aot ? 'AOT' : 'JIT'}`, async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + watch: true, + aot, + }); + + const buildCount = await harness + .execute({ outputLogsOnFailure: false }) + .pipe( + timeout(30_000), + concatMap(async ({ result }, index) => { + switch (index) { + case 0: + expect(result?.success).toBeTrue(); + // Touch a file without doing any changes. + await harness.modifyFile('src/app/app.component.ts', (content) => content); + break; + case 1: + expect(result?.success).toBeTrue(); + await harness.removeFile('src/app/app.component.ts'); + break; + case 2: + expect(result?.success).toBeFalse(); + break; + } + }), + take(3), + count(), + ) + .toPromise(); + + expect(buildCount).toBe(3); + }); + } + }); +}); diff --git a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/source-file-cache.ts b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/source-file-cache.ts index 032ebc988c9c..1bc08aeee54a 100644 --- a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/source-file-cache.ts +++ b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/source-file-cache.ts @@ -31,7 +31,6 @@ export class SourceFileCache extends Map { } for (let file of files) { file = path.normalize(file); - this.typeScriptFileCache.delete(file); this.loadResultCache.invalidate(file); // Normalize separators to allow matching TypeScript Host paths