Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit dab2ffc

Browse filesBrowse files
authored
Add SolutionBuilderHostBase.getCustomTransformers to be used when emitting. (microsoft#44489)
This allows not having to specify the transformers during normal watch scneario Builds on top of microsoft#43984
1 parent be2fec1 commit dab2ffc
Copy full SHA for dab2ffc

6 files changed

+505-3Lines changed: 505 additions & 3 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/tsbuildPublic.ts‎

Copy file name to clipboardExpand all lines: src/compiler/tsbuildPublic.ts
+4-3Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ namespace ts {
8585
* writeFileCallback
8686
*/
8787
writeFile?(path: string, data: string, writeByteOrderMark?: boolean): void;
88+
getCustomTransformers?: (project: string) => CustomTransformers | undefined;
8889

8990
getModifiedTime(fileName: string): Date | undefined;
9091
setModifiedTime(fileName: string, date: Date): void;
@@ -785,7 +786,7 @@ namespace ts {
785786
emit: (targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) => {
786787
if (targetSourceFile || emitOnlyDtsFiles) {
787788
return withProgramOrUndefined(
788-
program => program.emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers)
789+
program => program.emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers || state.host.getCustomTransformers?.(project))
789790
);
790791
}
791792
executeSteps(BuildStep.SemanticDiagnostics, cancellationToken);
@@ -921,7 +922,7 @@ namespace ts {
921922
(name, text, writeByteOrderMark) => outputFiles.push({ name, text, writeByteOrderMark }),
922923
cancellationToken,
923924
/*emitOnlyDts*/ false,
924-
customTransformers
925+
customTransformers || state.host.getCustomTransformers?.(project)
925926
);
926927
// Don't emit .d.ts if there are decl file errors
927928
if (declDiagnostics) {
@@ -1060,7 +1061,7 @@ namespace ts {
10601061
const refName = resolveProjectName(state, ref.path);
10611062
return parseConfigFile(state, refName, toResolvedConfigFilePath(state, refName));
10621063
},
1063-
customTransformers
1064+
customTransformers || state.host.getCustomTransformers?.(project)
10641065
);
10651066

10661067
if (isString(outputFiles)) {
Collapse file

‎src/testRunner/tsconfig.json‎

Copy file name to clipboardExpand all lines: src/testRunner/tsconfig.json
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
"unittests/tsbuildWatch/noEmit.ts",
142142
"unittests/tsbuildWatch/noEmitOnError.ts",
143143
"unittests/tsbuildWatch/programUpdates.ts",
144+
"unittests/tsbuildWatch/publicApi.ts",
144145
"unittests/tsbuildWatch/reexport.ts",
145146
"unittests/tsbuildWatch/watchEnvironment.ts",
146147
"unittests/tsc/composite.ts",
Collapse file
+115Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
namespace ts.tscWatch {
2+
it("unittests:: tsbuildWatch:: watchMode:: Public API with custom transformers", () => {
3+
const solution: File = {
4+
path: `${projectRoot}/tsconfig.json`,
5+
content: JSON.stringify({
6+
references: [
7+
{ path: "./shared/tsconfig.json" },
8+
{ path: "./webpack/tsconfig.json" }
9+
],
10+
files: []
11+
})
12+
};
13+
const sharedConfig: File = {
14+
path: `${projectRoot}/shared/tsconfig.json`,
15+
content: JSON.stringify({
16+
compilerOptions: { composite: true },
17+
})
18+
};
19+
const sharedIndex: File = {
20+
path: `${projectRoot}/shared/index.ts`,
21+
content: `export function f1() { }
22+
export class c { }
23+
export enum e { }
24+
// leading
25+
export function f2() { } // trailing`
26+
};
27+
const webpackConfig: File = {
28+
path: `${projectRoot}/webpack/tsconfig.json`,
29+
content: JSON.stringify({
30+
compilerOptions: { composite: true, },
31+
references: [{ path: "../shared/tsconfig.json" }]
32+
})
33+
};
34+
const webpackIndex: File = {
35+
path: `${projectRoot}/webpack/index.ts`,
36+
content: `export function f2() { }
37+
export class c2 { }
38+
export enum e2 { }
39+
// leading
40+
export function f22() { } // trailing`
41+
};
42+
const commandLineArgs = ["--b", "--w"];
43+
const { sys, baseline, oldSnap } = createBaseline(createWatchedSystem([libFile, solution, sharedConfig, sharedIndex, webpackConfig, webpackIndex], { currentDirectory: projectRoot }));
44+
const { cb, getPrograms } = commandLineCallbacks(sys);
45+
const buildHost = createSolutionBuilderWithWatchHost(
46+
sys,
47+
/*createProgram*/ undefined,
48+
createDiagnosticReporter(sys, /*pretty*/ true),
49+
createBuilderStatusReporter(sys, /*pretty*/ true),
50+
createWatchStatusReporter(sys, /*pretty*/ true)
51+
);
52+
buildHost.afterProgramEmitAndDiagnostics = cb;
53+
buildHost.afterEmitBundle = cb;
54+
buildHost.getCustomTransformers = getCustomTransformers;
55+
const builder = createSolutionBuilderWithWatch(buildHost, [solution.path], { verbose: true });
56+
builder.build();
57+
runWatchBaseline({
58+
scenario: "publicApi",
59+
subScenario: "with custom transformers",
60+
commandLineArgs,
61+
sys,
62+
baseline,
63+
oldSnap,
64+
getPrograms,
65+
changes: [
66+
{
67+
caption: "change to shared",
68+
change: sys => sys.prependFile(sharedIndex.path, "export function fooBar() {}"),
69+
timeouts: sys => {
70+
sys.checkTimeoutQueueLengthAndRun(1); // Shared
71+
sys.checkTimeoutQueueLengthAndRun(1); // webpack
72+
sys.checkTimeoutQueueLengthAndRun(1); // solution
73+
sys.checkTimeoutQueueLength(0);
74+
}
75+
}
76+
],
77+
watchOrSolution: builder
78+
});
79+
80+
function getCustomTransformers(project: string): CustomTransformers {
81+
const before: TransformerFactory<SourceFile> = context => {
82+
return file => visitEachChild(file, visit, context);
83+
function visit(node: Node): VisitResult<Node> {
84+
switch (node.kind) {
85+
case SyntaxKind.FunctionDeclaration:
86+
return visitFunction(node as FunctionDeclaration);
87+
default:
88+
return visitEachChild(node, visit, context);
89+
}
90+
}
91+
function visitFunction(node: FunctionDeclaration) {
92+
addSyntheticLeadingComment(node, SyntaxKind.MultiLineCommentTrivia, `@before${project}`, /*hasTrailingNewLine*/ true);
93+
return node;
94+
}
95+
};
96+
97+
const after: TransformerFactory<SourceFile> = context => {
98+
return file => visitEachChild(file, visit, context);
99+
function visit(node: Node): VisitResult<Node> {
100+
switch (node.kind) {
101+
case SyntaxKind.VariableStatement:
102+
return visitVariableStatement(node as VariableStatement);
103+
default:
104+
return visitEachChild(node, visit, context);
105+
}
106+
}
107+
function visitVariableStatement(node: VariableStatement) {
108+
addSyntheticLeadingComment(node, SyntaxKind.SingleLineCommentTrivia, `@after${project}`);
109+
return node;
110+
}
111+
};
112+
return { before: [before], after: [after] };
113+
}
114+
});
115+
}
Collapse file

‎tests/baselines/reference/api/tsserverlibrary.d.ts‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/api/tsserverlibrary.d.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5240,6 +5240,7 @@ declare namespace ts {
52405240
* writeFileCallback
52415241
*/
52425242
writeFile?(path: string, data: string, writeByteOrderMark?: boolean): void;
5243+
getCustomTransformers?: (project: string) => CustomTransformers | undefined;
52435244
getModifiedTime(fileName: string): Date | undefined;
52445245
setModifiedTime(fileName: string, date: Date): void;
52455246
deleteFile(fileName: string): void;
Collapse file

‎tests/baselines/reference/api/typescript.d.ts‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/api/typescript.d.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5240,6 +5240,7 @@ declare namespace ts {
52405240
* writeFileCallback
52415241
*/
52425242
writeFile?(path: string, data: string, writeByteOrderMark?: boolean): void;
5243+
getCustomTransformers?: (project: string) => CustomTransformers | undefined;
52435244
getModifiedTime(fileName: string): Date | undefined;
52445245
setModifiedTime(fileName: string, date: Date): void;
52455246
deleteFile(fileName: string): void;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.