Skip to content

Commit 496a1d3

Browse files
authoredMar 12, 2021
Improvements to dts emit for tsbuildinfo (#43205)
* Test update * Use source file version as default signature for the file whenever there is no dts emit for the file * json source files from project reference should be able to calculate the signature * Dont emit declaration map when emitting dts files for force emit for signature
1 parent 9c73e04 commit 496a1d3

File tree

35 files changed

+231
-714
lines changed

35 files changed

+231
-714
lines changed
 

‎src/compiler/builderState.ts

+12-19
Original file line numberDiff line numberDiff line change
@@ -316,16 +316,8 @@ namespace ts {
316316
if (!info) return Debug.fail();
317317

318318
const prevSignature = info.signature;
319-
let latestSignature: string;
320-
if (sourceFile.isDeclarationFile) {
321-
latestSignature = sourceFile.version;
322-
if (exportedModulesMapCache && latestSignature !== prevSignature) {
323-
// All the references in this file are exported
324-
const references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
325-
exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
326-
}
327-
}
328-
else {
319+
let latestSignature: string | undefined;
320+
if (!sourceFile.isDeclarationFile) {
329321
const emitOutput = getFileEmitOutput(
330322
programOfThisState,
331323
sourceFile,
@@ -334,25 +326,26 @@ namespace ts {
334326
/*customTransformers*/ undefined,
335327
/*forceDtsEmit*/ true
336328
);
337-
const firstDts = emitOutput.outputFiles &&
338-
programOfThisState.getCompilerOptions().declarationMap ?
339-
emitOutput.outputFiles.length > 1 ? emitOutput.outputFiles[1] : undefined :
340-
emitOutput.outputFiles.length > 0 ? emitOutput.outputFiles[0] : undefined;
329+
const firstDts = firstOrUndefined(emitOutput.outputFiles);
341330
if (firstDts) {
342331
Debug.assert(fileExtensionIs(firstDts.name, Extension.Dts), "File extension for signature expected to be dts", () => `Found: ${getAnyExtensionFromPath(firstDts.name)} for ${firstDts.name}:: All output files: ${JSON.stringify(emitOutput.outputFiles.map(f => f.name))}`);
343332
latestSignature = (computeHash || generateDjb2Hash)(firstDts.text);
344333
if (exportedModulesMapCache && latestSignature !== prevSignature) {
345334
updateExportedModules(sourceFile, emitOutput.exportedModulesFromDeclarationEmit, exportedModulesMapCache);
346335
}
347336
}
348-
else {
349-
latestSignature = prevSignature!; // TODO: GH#18217
337+
}
338+
// Default is to use file version as signature
339+
if (latestSignature === undefined) {
340+
latestSignature = sourceFile.version;
341+
if (exportedModulesMapCache && latestSignature !== prevSignature) {
342+
// All the references in this file are exported
343+
const references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
344+
exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
350345
}
351-
352346
}
353347
cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
354-
355-
return !prevSignature || latestSignature !== prevSignature;
348+
return latestSignature !== prevSignature;
356349
}
357350

358351
/**

‎src/compiler/emitter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ namespace ts {
498498
declarationTransform.transformed[0],
499499
declarationPrinter,
500500
{
501-
sourceMap: compilerOptions.declarationMap,
501+
sourceMap: !forceDtsEmit && compilerOptions.declarationMap,
502502
sourceRoot: compilerOptions.sourceRoot,
503503
mapRoot: compilerOptions.mapRoot,
504504
extendedDiagnostics: compilerOptions.extendedDiagnostics,

‎src/compiler/utilities.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -4215,8 +4215,10 @@ namespace ts {
42154215
return !(options.noEmitForJsFiles && isSourceFileJS(sourceFile)) &&
42164216
!sourceFile.isDeclarationFile &&
42174217
!host.isSourceFileFromExternalLibrary(sourceFile) &&
4218-
!(isJsonSourceFile(sourceFile) && host.getResolvedProjectReferenceToRedirect(sourceFile.fileName)) &&
4219-
(forceDtsEmit || !host.isSourceOfProjectReferenceRedirect(sourceFile.fileName));
4218+
(forceDtsEmit || (
4219+
!(isJsonSourceFile(sourceFile) && host.getResolvedProjectReferenceToRedirect(sourceFile.fileName)) &&
4220+
!host.isSourceOfProjectReferenceRedirect(sourceFile.fileName)
4221+
));
42204222
}
42214223

42224224
export function getSourceFilePathInNewDir(fileName: string, host: EmitHost, newDirPath: string): string {

‎src/testRunner/unittests/tsbuild/javascriptProjectEmit.ts

+6-23
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
namespace ts {
2-
describe("unittests:: tsbuild:: javascriptProjectEmit:: loads js-based projects and emits them correctly", () => {
2+
describe("unittests:: tsbuild:: javascriptProjectEmit::", () => {
33
verifyTsc({
44
scenario: "javascriptProjectEmit",
55
subScenario: `loads js-based projects and emits them correctly`,
@@ -87,12 +87,11 @@ namespace ts {
8787
}, symbolLibContent),
8888
commandLineArgs: ["-b", "/src"]
8989
});
90-
});
9190

92-
describe("unittests:: tsbuild:: javascriptProjectEmit:: loads outfile js projects and concatenates them correctly", () => {
93-
let projFs: vfs.FileSystem;
94-
before(() => {
95-
projFs = loadProjectFromFiles({
91+
verifyTscSerializedIncrementalEdits({
92+
scenario: "javascriptProjectEmit",
93+
subScenario: `modifies outfile js projects and concatenates them correctly`,
94+
fs: () => loadProjectFromFiles({
9695
"/src/common/nominal.js": Utils.dedent`
9796
/**
9897
* @template T, Name
@@ -175,30 +174,14 @@ namespace ts {
175174
"declaration": true
176175
}
177176
}`,
178-
}, symbolLibContent);
179-
});
180-
after(() => {
181-
projFs = undefined!;
182-
});
183-
verifyTsc({
184-
scenario: "javascriptProjectEmit",
185-
subScenario: `loads outfile js projects and concatenates them correctly`,
186-
fs: () => projFs,
187-
commandLineArgs: ["-b", "/src"]
188-
});
189-
verifyTscSerializedIncrementalEdits({
190-
scenario: "javascriptProjectEmit",
191-
subScenario: `modifies outfile js projects and concatenates them correctly`,
192-
fs: () => projFs,
177+
}, symbolLibContent),
193178
commandLineArgs: ["-b", "/src"],
194179
incrementalScenarios: [{
195180
buildKind: BuildKind.IncrementalDtsUnchanged,
196181
modifyFs: fs => replaceText(fs, "/src/sub-project/index.js", "null", "undefined")
197182
}]
198183
});
199-
});
200184

201-
describe("unittests:: tsbuild:: javascriptProjectEmit:: loads js-based projects with non-moved json files and emits them correctly", () => {
202185
verifyTsc({
203186
scenario: "javascriptProjectEmit",
204187
subScenario: `loads js-based projects with non-moved json files and emits them correctly`,

0 commit comments

Comments
 (0)
Please sign in to comment.