@angular/build
Version:
Official build system for Angular
58 lines (57 loc) • 2.34 kB
JavaScript
;
/**
* @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.dev/license
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileReferenceTracker = void 0;
const node_path_1 = require("node:path");
class FileReferenceTracker {
#referencingFiles = new Map();
get referencedFiles() {
return this.#referencingFiles.keys();
}
add(containingFile, referencedFiles) {
const normalizedContainingFile = (0, node_path_1.normalize)(containingFile);
for (const file of referencedFiles) {
const normalizedReferencedFile = (0, node_path_1.normalize)(file);
if (normalizedReferencedFile === normalizedContainingFile) {
// Containing file is already known to the AOT compiler
continue;
}
const referencing = this.#referencingFiles.get(normalizedReferencedFile);
if (referencing === undefined) {
this.#referencingFiles.set(normalizedReferencedFile, new Set([normalizedContainingFile]));
}
else {
referencing.add(normalizedContainingFile);
}
}
}
/**
*
* @param changed The set of changed files.
*/
update(changed) {
// Lazily initialized to avoid unneeded copying if there are no additions to return
let allChangedFiles;
// Add referencing files to fully notify the AOT compiler of required component updates
for (const modifiedFile of changed) {
const normalizedModifiedFile = (0, node_path_1.normalize)(modifiedFile);
const referencing = this.#referencingFiles.get(normalizedModifiedFile);
if (referencing) {
allChangedFiles ??= new Set(changed);
for (const referencingFile of referencing) {
allChangedFiles.add(referencingFile);
}
// Cleanup the stale record which will be updated by new resource transforms
this.#referencingFiles.delete(normalizedModifiedFile);
}
}
return allChangedFiles ?? changed;
}
}
exports.FileReferenceTracker = FileReferenceTracker;