Skip to content

Commit e263ee1

Browse files
committed
Changes to make these commanline options work
1 parent b290297 commit e263ee1

File tree

81 files changed

+5545
-5555
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+5545
-5555
lines changed

src/compiler/builder.ts

+182-122
Large diffs are not rendered by default.

src/compiler/builderStatePublic.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ namespace ts {
99
name: string;
1010
writeByteOrderMark: boolean;
1111
text: string;
12-
/* @internal */ buildInfo?: BuildInfo
12+
/* @internal */ data?: WriteFileCallbackData;
1313
}
1414
}

src/compiler/commandLineParser.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ namespace ts {
304304
name: "declaration",
305305
shortName: "d",
306306
type: "boolean",
307-
affectsEmit: true,
307+
// Not setting affectsEmit because we calculate this flag might not affect full emit
308308
affectsMultiFileEmitBuildInfo: true,
309309
affectsBundleEmitBuildInfo: true,
310310
showInSimplifiedHelpView: true,
@@ -316,7 +316,7 @@ namespace ts {
316316
{
317317
name: "declarationMap",
318318
type: "boolean",
319-
affectsEmit: true,
319+
// Not setting affectsEmit because we calculate this flag might not affect full emit
320320
affectsMultiFileEmitBuildInfo: true,
321321
affectsBundleEmitBuildInfo: true,
322322
showInSimplifiedHelpView: true,
@@ -328,7 +328,7 @@ namespace ts {
328328
{
329329
name: "emitDeclarationOnly",
330330
type: "boolean",
331-
affectsEmit: true,
331+
// Not setting affectsEmit because we calculate this flag might not affect full emit
332332
affectsMultiFileEmitBuildInfo: true,
333333
affectsBundleEmitBuildInfo: true,
334334
showInSimplifiedHelpView: true,
@@ -340,7 +340,7 @@ namespace ts {
340340
{
341341
name: "sourceMap",
342342
type: "boolean",
343-
affectsEmit: true,
343+
// Not setting affectsEmit because we calculate this flag might not affect full emit
344344
affectsMultiFileEmitBuildInfo: true,
345345
affectsBundleEmitBuildInfo: true,
346346
showInSimplifiedHelpView: true,
@@ -351,7 +351,7 @@ namespace ts {
351351
{
352352
name: "inlineSourceMap",
353353
type: "boolean",
354-
affectsEmit: true,
354+
// Not setting affectsEmit because we calculate this flag might not affect full emit
355355
affectsMultiFileEmitBuildInfo: true,
356356
affectsBundleEmitBuildInfo: true,
357357
category: Diagnostics.Emit,
@@ -587,7 +587,7 @@ namespace ts {
587587
{
588588
name: "composite",
589589
type: "boolean",
590-
affectsEmit: true,
590+
// Not setting affectsEmit because we calculate this flag might not affect full emit
591591
affectsMultiFileEmitBuildInfo: true,
592592
affectsBundleEmitBuildInfo: true,
593593
isTSConfigOnly: true,

src/compiler/diagnosticMessages.json

+4
Original file line numberDiff line numberDiff line change
@@ -5430,6 +5430,10 @@
54305430
"category": "Message",
54315431
"code": 6405
54325432
},
5433+
"Project '{0}' is out of date because buildinfo file '{1}' indicates there is change in compilerOptions": {
5434+
"category": "Message",
5435+
"code": 6406
5436+
},
54335437

54345438
"The expected type comes from property '{0}' which is declared here on type '{1}'": {
54355439
"category": "Message",

src/compiler/emitter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ namespace ts {
838838
newBuildInfo.bundle!.dts!.sources = dts.sources;
839839
}
840840
newBuildInfo.bundle!.sourceFiles = sourceFiles;
841-
outputFiles.push({ name, text: getBuildInfoText(newBuildInfo), writeByteOrderMark, buildInfo: newBuildInfo });
841+
outputFiles.push({ name, text: getBuildInfoText(newBuildInfo), writeByteOrderMark, data: { buildInfo: newBuildInfo } });
842842
return;
843843
case declarationFilePath:
844844
if (declarationText === text) return;

src/compiler/tsbuild.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ namespace ts {
2020
OutOfDateWithSelf,
2121
OutOfDateWithUpstream,
2222
OutOfDateBuildInfo,
23+
OutOfDateOptions,
2324
UpstreamOutOfDate,
2425
UpstreamBlocked,
2526
ComputingUpstream,
@@ -116,7 +117,7 @@ namespace ts {
116117
* Buildinfo indicates that build is out of date
117118
*/
118119
export interface OutOfDateBuildInfo {
119-
type: UpToDateStatusType.OutOfDateBuildInfo,
120+
type: UpToDateStatusType.OutOfDateBuildInfo | UpToDateStatusType.OutOfDateOptions,
120121
buildInfoFile: string;
121122
}
122123

src/compiler/tsbuildPublic.ts

+25-8
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@ namespace ts {
968968
reportDeclarationDiagnostics,
969969
/*write*/ undefined,
970970
/*reportSummary*/ undefined,
971-
(name, text, writeByteOrderMark, _onError, _sourceFiles, data) => outputFiles.push({ name, text, writeByteOrderMark, buildInfo: data?.buildInfo }),
971+
(name, text, writeByteOrderMark, _onError, _sourceFiles, data) => outputFiles.push({ name, text, writeByteOrderMark, data }),
972972
cancellationToken,
973973
/*emitOnlyDts*/ false,
974974
customTransformers || state.host.getCustomTransformers?.(project)
@@ -1000,12 +1000,15 @@ namespace ts {
10001000
const isIncremental = isIncrementalCompilation(options);
10011001
let outputTimeStampMap: ESMap<Path, Date> | undefined;
10021002
let now: Date | undefined;
1003-
outputFiles.forEach(({ name, text, writeByteOrderMark, buildInfo }) => {
1003+
outputFiles.forEach(({ name, text, writeByteOrderMark, data }) => {
10041004
const path = toPath(state, name);
10051005
emittedOutputs.set(toPath(state, name), name);
1006-
if (buildInfo) setBuildInfo(state, buildInfo, projectPath, options, resultFlags);
1006+
if (data?.buildInfo) setBuildInfo(state, data.buildInfo, projectPath, options, resultFlags);
1007+
const modifiedTime = data?.differsOnlyInMap ? ts.getModifiedTime(state.host, name) : undefined;
10071008
writeFile(writeFileCallback ? { writeFile: writeFileCallback } : compilerHost, emitterDiagnostics, name, text, writeByteOrderMark);
1008-
if (!isIncremental && state.watch) {
1009+
// Revert the timestamp for the d.ts that is same
1010+
if (data?.differsOnlyInMap) state.host.setModifiedTime(name, modifiedTime!);
1011+
else if (!isIncremental && state.watch) {
10091012
(outputTimeStampMap ||= getOutputTimeStampMap(state, projectPath)!).set(path, now ||= getCurrentTime(state.host));
10101013
}
10111014
});
@@ -1122,13 +1125,13 @@ namespace ts {
11221125
const emittedOutputs = new Map<Path, string>();
11231126
let resultFlags = BuildResultFlags.DeclarationOutputUnchanged;
11241127
const existingBuildInfo = state.buildInfoCache.get(projectPath)!.buildInfo || undefined;
1125-
outputFiles.forEach(({ name, text, writeByteOrderMark, buildInfo }) => {
1128+
outputFiles.forEach(({ name, text, writeByteOrderMark, data }) => {
11261129
emittedOutputs.set(toPath(state, name), name);
1127-
if (buildInfo) {
1128-
if ((buildInfo.program as ProgramBundleEmitBuildInfo)?.outSignature !== (existingBuildInfo?.program as ProgramBundleEmitBuildInfo)?.outSignature) {
1130+
if (data?.buildInfo) {
1131+
if ((data.buildInfo.program as ProgramBundleEmitBuildInfo)?.outSignature !== (existingBuildInfo?.program as ProgramBundleEmitBuildInfo)?.outSignature) {
11291132
resultFlags &= ~BuildResultFlags.DeclarationOutputUnchanged;
11301133
}
1131-
setBuildInfo(state, buildInfo, projectPath, config.options, resultFlags);
1134+
setBuildInfo(state, data.buildInfo, projectPath, config.options, resultFlags);
11321135
}
11331136
writeFile(writeFileCallback ? { writeFile: writeFileCallback } : compilerHost, emitterDiagnostics, name, text, writeByteOrderMark);
11341137
});
@@ -1629,6 +1632,13 @@ namespace ts {
16291632
buildInfoFile: buildInfoPath
16301633
};
16311634
}
1635+
1636+
if (!project.options.noEmit && getPendingEmitKind(project.options, buildInfo.program.options || {})) {
1637+
return {
1638+
type: UpToDateStatusType.OutOfDateOptions,
1639+
buildInfoFile: buildInfoPath
1640+
};
1641+
}
16321642
buildInfoProgram = buildInfo.program;
16331643
}
16341644

@@ -2397,6 +2407,13 @@ namespace ts {
23972407
relName(state, configFileName),
23982408
relName(state, status.buildInfoFile)
23992409
);
2410+
case UpToDateStatusType.OutOfDateOptions:
2411+
return reportStatus(
2412+
state,
2413+
Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions,
2414+
relName(state, configFileName),
2415+
relName(state, status.buildInfoFile)
2416+
);
24002417
case UpToDateStatusType.UpToDate:
24012418
if (status.newestInputFileTime !== undefined) {
24022419
return reportStatus(

src/compiler/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4261,6 +4261,7 @@ namespace ts {
42614261
/*@internal*/ sourceMapUrlPos?: number;
42624262
/*@internal*/ buildInfo?: BuildInfo;
42634263
/*@internal*/ diagnostics?: readonly DiagnosticWithLocation[];
4264+
/*@internal*/ differsOnlyInMap?: true;
42644265
}
42654266
export type WriteFileCallback = (
42664267
fileName: string,

src/testRunner/unittests/tsbuild/helpers.ts

+22-8
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,14 @@ interface Symbol {
198198
}
199199

200200
type ReadableProgramBuildInfoDiagnostic = string | [string, readonly ReusableDiagnostic[]];
201-
type ReadableProgramBuilderInfoFilePendingEmit = [original: string | [string], emitKind: "DtsOnly" | "Full"];
201+
type ReadableBuilderFileEmit = string & { __readableBuilderFileEmit: any; };
202+
type ReadableProgramBuilderInfoFilePendingEmit = [original: string | [string], emitKind: ReadableBuilderFileEmit];
202203
type ReadableProgramBuildInfoEmitSignature = string | [string, string];
203204
type ReadableProgramBuildInfoFileInfo = Omit<BuilderState.FileInfo, "impliedFormat"> & { impliedFormat: string | undefined; };
204205
type ReadableProgramMultiFileEmitBuildInfo = Omit<ProgramMultiFileEmitBuildInfo,
205206
"fileIdsList" | "fileInfos" |
206207
"referencedMap" | "exportedModulesMap" | "semanticDiagnosticsPerFile" |
207-
"affectedFilesPendingEmit" | "changeFileSet" | "emitSignatures"
208+
"affectedFilesPendingEmit" | "changeFileSet" | "emitSignatures" | "emitSignatureDtsMapDiffers"
208209
> & {
209210
fileNamesList: readonly (readonly string[])[] | undefined;
210211
fileInfos: MapLike<ReadableProgramBuildInfoFileInfo>;
@@ -214,6 +215,7 @@ interface Symbol {
214215
affectedFilesPendingEmit?: readonly ReadableProgramBuilderInfoFilePendingEmit[];
215216
changeFileSet?: readonly string[];
216217
emitSignatures?: readonly ReadableProgramBuildInfoEmitSignature[];
218+
emitSignatureDtsMapDiffers?: readonly string[];
217219
};
218220
type ReadableProgramBundleEmitBuildInfo = Omit<ProgramBundleEmitBuildInfo, "fileInfos"> & {
219221
fileInfos: MapLike<string>;
@@ -240,6 +242,7 @@ interface Symbol {
240242
const fileInfos: ReadableProgramMultiFileEmitBuildInfo["fileInfos"] = {};
241243
buildInfo.program?.fileInfos?.forEach((fileInfo, index) => fileInfos[toFileName(index + 1 as ProgramBuildInfoFileId)] = toReadableFileInfo(fileInfo));
242244
fileNamesList = buildInfo.program.fileIdsList?.map(fileIdsListId => fileIdsListId.map(toFileName));
245+
const fullEmitForOptions = buildInfo.program.affectedFilesPendingEmit ? getBuilderFileEmit(buildInfo.program.options || {}) : undefined;
243246
program = buildInfo.program && {
244247
fileNames: buildInfo.program.fileNames,
245248
fileNamesList,
@@ -252,13 +255,14 @@ interface Symbol {
252255
toFileName(d) :
253256
[toFileName(d[0]), d[1]]
254257
),
255-
affectedFilesPendingEmit: buildInfo.program.affectedFilesPendingEmit?.map(toReadableProgramBuilderInfoFilePendingEmit),
258+
affectedFilesPendingEmit: buildInfo.program.affectedFilesPendingEmit?.map(value => toReadableProgramBuilderInfoFilePendingEmit(value, fullEmitForOptions!)),
256259
changeFileSet: buildInfo.program.changeFileSet?.map(toFileName),
257260
emitSignatures: buildInfo.program.emitSignatures?.map(s =>
258261
isNumber(s) ?
259262
toFileName(s) :
260263
[toFileName(s[0]), s[1]]
261264
),
265+
emitSignatureDtsMapDiffers: buildInfo.program.emitSignatureDtsMapDiffers?.map(toFileName),
262266
latestChangedDtsFile: buildInfo.program.latestChangedDtsFile,
263267
};
264268
}
@@ -312,15 +316,25 @@ interface Symbol {
312316
return result;
313317
}
314318

315-
function toReadableProgramBuilderInfoFilePendingEmit(value: ProgramBuilderInfoFilePendingEmit): ReadableProgramBuilderInfoFilePendingEmit {
316-
const emitKind = toBuilderFileEmit(value);
319+
function toReadableProgramBuilderInfoFilePendingEmit(value: ProgramBuilderInfoFilePendingEmit, fullEmitForOptions: BuilderFileEmit): ReadableProgramBuilderInfoFilePendingEmit {
317320
return [
318321
isNumber(value) ? toFileName(value) : [toFileName(value[0])],
319-
emitKind === BuilderFileEmit.DtsOnly ? "DtsOnly" :
320-
emitKind === BuilderFileEmit.Full ? "Full" :
321-
Debug.assertNever(emitKind),
322+
toReadableBuilderFileEmit(toBuilderFileEmit(value, fullEmitForOptions)),
322323
];
323324
}
325+
326+
function toReadableBuilderFileEmit(emit: BuilderFileEmit): ReadableBuilderFileEmit {
327+
let result = "";
328+
if (emit & BuilderFileEmit.Js) addFlags("Js");
329+
if (emit & BuilderFileEmit.JsMap) addFlags("JsMap");
330+
if (emit & BuilderFileEmit.JsInlineMap) addFlags("JsInlineMap");
331+
if (emit & BuilderFileEmit.Dts) addFlags("Dts");
332+
if (emit & BuilderFileEmit.DtsMap) addFlags("DtsMap");
333+
return (result || "None") as ReadableBuilderFileEmit;
334+
function addFlags(flag: string) {
335+
result = result ? `${result} | ${flag}` : flag;
336+
}
337+
}
324338
}
325339

326340
export function toPathWithSystem(sys: System, fileName: string): Path {

0 commit comments

Comments
 (0)