Skip to content

Commit ff3d40a

Browse files
committed
feat(@angular/build): provide file dependencies map on compilation initialize results
1 parent 21a486b commit ff3d40a

File tree

3 files changed

+56
-45
lines changed

3 files changed

+56
-45
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export abstract class AngularCompilation {
7676
referencedFiles: readonly string[];
7777
externalStylesheets?: ReadonlyMap<string, string>;
7878
templateUpdates?: ReadonlyMap<string, string>;
79+
fileDependencies?: ReadonlyMap<string, readonly string[]>;
7980
}>;
8081

8182
abstract emitAffectedFiles(): Iterable<EmitFileResult> | Promise<Iterable<EmitFileResult>>;

packages/angular/build/src/tools/angular/compilation/aot-compilation.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export class AotCompilation extends AngularCompilation {
6262
referencedFiles: readonly string[];
6363
externalStylesheets?: ReadonlyMap<string, string>;
6464
templateUpdates?: ReadonlyMap<string, string>;
65+
fileDependencies?: ReadonlyMap<string, readonly string[]>;
6566
}> {
6667
// Dynamically load the Angular compiler CLI package
6768
const { NgtscProgram, OptimizeFor } = await AngularCompilation.loadCompilerCli();
@@ -175,13 +176,15 @@ export class AotCompilation extends AngularCompilation {
175176
findAffectedFiles(typeScriptProgram, angularCompiler, usingBuildInfo),
176177
);
177178

179+
const fileDependencies = new Map<string, string[]>();
180+
178181
// Get all files referenced in the TypeScript/Angular program including component resources
179182
const referencedFiles = typeScriptProgram
180183
.getSourceFiles()
181184
.filter((sourceFile) => !angularCompiler.ignoreForEmit.has(sourceFile))
182185
.flatMap((sourceFile) => {
183186
const resourceDependencies = angularCompiler.getResourceDependencies(sourceFile);
184-
187+
fileDependencies.set(sourceFile.fileName, resourceDependencies);
185188
// Also invalidate Angular diagnostics for a source file if component resources are modified
186189
if (this.#state && hostOptions.modifiedFiles?.size) {
187190
for (const resourceDependency of resourceDependencies) {
@@ -212,6 +215,7 @@ export class AotCompilation extends AngularCompilation {
212215
referencedFiles,
213216
externalStylesheets: hostOptions.externalStylesheets,
214217
templateUpdates,
218+
fileDependencies,
215219
};
216220
}
217221

packages/angular/build/src/tools/angular/compilation/parallel-worker.ts

Lines changed: 50 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -45,58 +45,63 @@ export async function initialize(request: InitRequest) {
4545
}
4646
});
4747

48-
const { compilerOptions, referencedFiles, externalStylesheets, templateUpdates } =
49-
await compilation.initialize(
50-
request.tsconfig,
51-
{
52-
fileReplacements: request.fileReplacements,
53-
sourceFileCache,
54-
modifiedFiles: sourceFileCache.modifiedFiles,
55-
transformStylesheet(data, containingFile, stylesheetFile, order, className) {
56-
const requestId = randomUUID();
57-
const resultPromise = new Promise<string>((resolve, reject) =>
58-
stylesheetRequests.set(requestId, [resolve, reject]),
59-
);
60-
61-
request.stylesheetPort.postMessage({
62-
requestId,
63-
data,
64-
containingFile,
65-
stylesheetFile,
66-
order,
67-
className,
68-
});
69-
70-
return resultPromise;
71-
},
72-
processWebWorker(workerFile, containingFile) {
73-
Atomics.store(request.webWorkerSignal, 0, 0);
74-
request.webWorkerPort.postMessage({ workerFile, containingFile });
75-
76-
Atomics.wait(request.webWorkerSignal, 0, 0);
77-
const result = receiveMessageOnPort(request.webWorkerPort)?.message;
78-
79-
if (result?.error) {
80-
throw result.error;
81-
}
82-
83-
return result?.workerCodeFile ?? workerFile;
84-
},
48+
const {
49+
compilerOptions,
50+
referencedFiles,
51+
externalStylesheets,
52+
templateUpdates,
53+
fileDependencies,
54+
} = await compilation.initialize(
55+
request.tsconfig,
56+
{
57+
fileReplacements: request.fileReplacements,
58+
sourceFileCache,
59+
modifiedFiles: sourceFileCache.modifiedFiles,
60+
transformStylesheet(data, containingFile, stylesheetFile, order, className) {
61+
const requestId = randomUUID();
62+
const resultPromise = new Promise<string>((resolve, reject) =>
63+
stylesheetRequests.set(requestId, [resolve, reject]),
64+
);
65+
66+
request.stylesheetPort.postMessage({
67+
requestId,
68+
data,
69+
containingFile,
70+
stylesheetFile,
71+
order,
72+
className,
73+
});
74+
75+
return resultPromise;
8576
},
86-
(compilerOptions) => {
87-
Atomics.store(request.optionsSignal, 0, 0);
88-
request.optionsPort.postMessage(compilerOptions);
77+
processWebWorker(workerFile, containingFile) {
78+
Atomics.store(request.webWorkerSignal, 0, 0);
79+
request.webWorkerPort.postMessage({ workerFile, containingFile });
8980

90-
Atomics.wait(request.optionsSignal, 0, 0);
91-
const result = receiveMessageOnPort(request.optionsPort)?.message;
81+
Atomics.wait(request.webWorkerSignal, 0, 0);
82+
const result = receiveMessageOnPort(request.webWorkerPort)?.message;
9283

9384
if (result?.error) {
9485
throw result.error;
9586
}
9687

97-
return result?.transformedOptions ?? compilerOptions;
88+
return result?.workerCodeFile ?? workerFile;
9889
},
99-
);
90+
},
91+
(compilerOptions) => {
92+
Atomics.store(request.optionsSignal, 0, 0);
93+
request.optionsPort.postMessage(compilerOptions);
94+
95+
Atomics.wait(request.optionsSignal, 0, 0);
96+
const result = receiveMessageOnPort(request.optionsPort)?.message;
97+
98+
if (result?.error) {
99+
throw result.error;
100+
}
101+
102+
return result?.transformedOptions ?? compilerOptions;
103+
},
104+
);
100105

101106
return {
102107
externalStylesheets,
@@ -109,6 +114,7 @@ export async function initialize(request: InitRequest) {
109114
sourceMap: compilerOptions.sourceMap,
110115
inlineSourceMap: compilerOptions.inlineSourceMap,
111116
},
117+
fileDependencies,
112118
};
113119
}
114120

0 commit comments

Comments
 (0)