Skip to content

Commit b9cfa4c

Browse files
committed
Dont emit dts if we want to emit only js files even though options suggest emitting d.ts files as well
1 parent f8a1edd commit b9cfa4c

11 files changed

+118
-121
lines changed

src/compiler/builder.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,13 @@ namespace ts {
13491349
getPendingEmitKind(state.programEmitPending, emitKind) :
13501350
undefined;
13511351
}
1352+
let emitOnly: EmitOnly | undefined;
1353+
if (emitKind & BuilderFileEmit.AllJs) {
1354+
emitOnly = EmitOnly.Js;
1355+
}
1356+
if (emitKind & BuilderFileEmit.AllDts) {
1357+
emitOnly = emitOnly === undefined ? EmitOnly.Dts : undefined;
1358+
}
13521359
return toAffectedFileEmitResult(
13531360
state,
13541361
// When whole program is affected, do emit only once (eg when --out or --outFile is specified)
@@ -1359,7 +1366,7 @@ namespace ts {
13591366
getWriteFileCallback(writeFile, customTransformers) :
13601367
writeFile || maybeBind(host, host.writeFile),
13611368
cancellationToken,
1362-
emitOnlyDtsFiles || !(emitKind & BuilderFileEmit.AllJs),
1369+
emitOnly,
13631370
customTransformers
13641371
),
13651372
affected,

src/compiler/emitter.ts

+13-11
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ namespace ts {
278278

279279
/*@internal*/
280280
// targetSourceFile is when users only want one file in entire project to be emitted. This is used in compileOnSave feature
281-
export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile | undefined, { scriptTransformers, declarationTransformers }: EmitTransformers, emitOnlyDtsFiles?: boolean, onlyBuildInfo?: boolean, forceDtsEmit?: boolean): EmitResult {
281+
export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile | undefined, { scriptTransformers, declarationTransformers }: EmitTransformers, emitOnly?: boolean | EmitOnly, onlyBuildInfo?: boolean, forceDtsEmit?: boolean): EmitResult {
282282
const compilerOptions = host.getCompilerOptions();
283283
const sourceMapDataList: SourceMapEmitResult[] | undefined = (compilerOptions.sourceMap || compilerOptions.inlineSourceMap || getAreDeclarationMapsEnabled(compilerOptions)) ? [] : undefined;
284284
const emittedFilesList: string[] | undefined = compilerOptions.listEmittedFiles ? [] : undefined;
@@ -331,7 +331,7 @@ namespace ts {
331331
tracing?.pop();
332332

333333
if (!emitSkipped && emittedFilesList) {
334-
if (!emitOnlyDtsFiles) {
334+
if (!emitOnly) {
335335
if (jsFilePath) {
336336
emittedFilesList.push(jsFilePath);
337337
}
@@ -342,11 +342,13 @@ namespace ts {
342342
emittedFilesList.push(buildInfoPath);
343343
}
344344
}
345-
if (declarationFilePath) {
346-
emittedFilesList.push(declarationFilePath);
347-
}
348-
if (declarationMapPath) {
349-
emittedFilesList.push(declarationMapPath);
345+
if (emitOnly !== EmitOnly.Js) {
346+
if (declarationFilePath) {
347+
emittedFilesList.push(declarationFilePath);
348+
}
349+
if (declarationMapPath) {
350+
emittedFilesList.push(declarationMapPath);
351+
}
350352
}
351353
}
352354

@@ -372,7 +374,7 @@ namespace ts {
372374
jsFilePath: string | undefined,
373375
sourceMapFilePath: string | undefined,
374376
relativeToBuildInfo: (path: string) => string) {
375-
if (!sourceFileOrBundle || emitOnlyDtsFiles || !jsFilePath) {
377+
if (!sourceFileOrBundle || emitOnly || !jsFilePath) {
376378
return;
377379
}
378380

@@ -422,16 +424,16 @@ namespace ts {
422424
declarationFilePath: string | undefined,
423425
declarationMapPath: string | undefined,
424426
relativeToBuildInfo: (path: string) => string) {
425-
if (!sourceFileOrBundle) return;
427+
if (!sourceFileOrBundle || emitOnly === EmitOnly.Js) return;
426428
if (!declarationFilePath) {
427-
if (emitOnlyDtsFiles || compilerOptions.emitDeclarationOnly) emitSkipped = true;
429+
if (emitOnly || compilerOptions.emitDeclarationOnly) emitSkipped = true;
428430
return;
429431
}
430432
const sourceFiles = isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles;
431433
const filesForEmit = forceDtsEmit ? sourceFiles : filter(sourceFiles, isSourceFileNotJson);
432434
// Setup and perform the transformation to retrieve declarations from the input files
433435
const inputListOrBundle = outFile(compilerOptions) ? [factory.createBundle(filesForEmit, !isSourceFile(sourceFileOrBundle) ? sourceFileOrBundle.prepends : undefined)] : filesForEmit;
434-
if (emitOnlyDtsFiles && !getEmitDeclarations(compilerOptions)) {
436+
if (emitOnly && !getEmitDeclarations(compilerOptions)) {
435437
// Checker wont collect the linked aliases since thats only done when declaration is enabled.
436438
// Do that here when emitting only dts files
437439
filesForEmit.forEach(collectLinkedAliases);

src/compiler/program.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -2038,9 +2038,9 @@ namespace ts {
20382038
return typeChecker || (typeChecker = createTypeChecker(program));
20392039
}
20402040

2041-
function emit(sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, transformers?: CustomTransformers, forceDtsEmit?: boolean): EmitResult {
2041+
function emit(sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnly?: boolean | EmitOnly, transformers?: CustomTransformers, forceDtsEmit?: boolean): EmitResult {
20422042
tracing?.push(tracing.Phase.Emit, "emit", { path: sourceFile?.path }, /*separateBeginAndEnd*/ true);
2043-
const result = runWithCancellationToken(() => emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers, forceDtsEmit));
2043+
const result = runWithCancellationToken(() => emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit));
20442044
tracing?.pop();
20452045
return result;
20462046
}
@@ -2049,7 +2049,7 @@ namespace ts {
20492049
return hasEmitBlockingDiagnostics.has(toPath(emitFileName));
20502050
}
20512051

2052-
function emitWorker(program: Program, sourceFile: SourceFile | undefined, writeFileCallback: WriteFileCallback | undefined, cancellationToken: CancellationToken | undefined, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers, forceDtsEmit?: boolean): EmitResult {
2052+
function emitWorker(program: Program, sourceFile: SourceFile | undefined, writeFileCallback: WriteFileCallback | undefined, cancellationToken: CancellationToken | undefined, emitOnly?: boolean | EmitOnly, customTransformers?: CustomTransformers, forceDtsEmit?: boolean): EmitResult {
20532053
if (!forceDtsEmit) {
20542054
const result = handleNoEmitOptions(program, sourceFile, writeFileCallback, cancellationToken);
20552055
if (result) return result;
@@ -2071,8 +2071,8 @@ namespace ts {
20712071
emitResolver,
20722072
getEmitHost(writeFileCallback),
20732073
sourceFile,
2074-
getTransformers(options, customTransformers, emitOnlyDtsFiles),
2075-
emitOnlyDtsFiles,
2074+
getTransformers(options, customTransformers, emitOnly),
2075+
emitOnly,
20762076
/*onlyBuildInfo*/ false,
20772077
forceDtsEmit
20782078
);

src/compiler/transformer.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ namespace ts {
3131

3232
export const noTransformers: EmitTransformers = { scriptTransformers: emptyArray, declarationTransformers: emptyArray };
3333

34-
export function getTransformers(compilerOptions: CompilerOptions, customTransformers?: CustomTransformers, emitOnlyDtsFiles?: boolean): EmitTransformers {
34+
export function getTransformers(compilerOptions: CompilerOptions, customTransformers?: CustomTransformers, emitOnly?: boolean | EmitOnly): EmitTransformers {
3535
return {
36-
scriptTransformers: getScriptTransformers(compilerOptions, customTransformers, emitOnlyDtsFiles),
36+
scriptTransformers: getScriptTransformers(compilerOptions, customTransformers, emitOnly),
3737
declarationTransformers: getDeclarationTransformers(customTransformers),
3838
};
3939
}
4040

41-
function getScriptTransformers(compilerOptions: CompilerOptions, customTransformers?: CustomTransformers, emitOnlyDtsFiles?: boolean) {
42-
if (emitOnlyDtsFiles) return emptyArray;
41+
function getScriptTransformers(compilerOptions: CompilerOptions, customTransformers?: CustomTransformers, emitOnly?: boolean | EmitOnly) {
42+
if (emitOnly) return emptyArray;
4343

4444
const languageVersion = getEmitScriptTarget(compilerOptions);
4545
const moduleKind = getEmitModuleKind(compilerOptions);

src/compiler/types.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -4370,6 +4370,11 @@ namespace ts {
43704370
/*@internal*/
43714371
export type FilePreprocessingDiagnostics = FilePreprocessingReferencedDiagnostic | FilePreprocessingFileExplainingDiagnostic;
43724372

4373+
/*@internal*/
4374+
export const enum EmitOnly{
4375+
Js,
4376+
Dts,
4377+
}
43734378
export interface Program extends ScriptReferenceHost {
43744379
getCurrentDirectory(): string;
43754380
/**
@@ -4405,7 +4410,7 @@ namespace ts {
44054410
*/
44064411
emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers): EmitResult;
44074412
/*@internal*/
4408-
emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers, forceDtsEmit?: boolean): EmitResult; // eslint-disable-line @typescript-eslint/unified-signatures
4413+
emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnly?: boolean | EmitOnly, customTransformers?: CustomTransformers, forceDtsEmit?: boolean): EmitResult; // eslint-disable-line @typescript-eslint/unified-signatures
44094414

44104415
getOptionsDiagnostics(cancellationToken?: CancellationToken): readonly Diagnostic[];
44114416
getGlobalDiagnostics(cancellationToken?: CancellationToken): readonly Diagnostic[];

tests/baselines/reference/tsbuild/commandLine/emitDeclarationOnly-false-on-commandline-with-declaration-and-incremental-with-outFile.js

+15-16
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,9 @@ Output::
351351

352352
[12:00:46 AM] Building project '/src/project1/src/tsconfig.json'...
353353

354-
[[90m12:00:53 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
354+
[[90m12:00:52 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
355355

356-
[[90m12:00:54 AM[0m] Building project '/src/project2/src/tsconfig.json'...
356+
[[90m12:00:53 AM[0m] Building project '/src/project2/src/tsconfig.json'...
357357

358358
src/project2/src/tsconfig.json:1:142 - error TS6306: Referenced project '/src/project1/src' must have setting "composite": true.
359359

@@ -393,7 +393,6 @@ No cached semantic diagnostics in the builder::
393393
No shapes updated in the builder::
394394

395395

396-
//// [/src/project1/outFile.d.ts] file written with same contents
397396
//// [/src/project1/outFile.js]
398397
define("a", ["require", "exports"], function (require, exports) {
399398
"use strict";
@@ -545,15 +544,15 @@ Input::
545544

546545
Output::
547546
/lib/tsc --b /src/project2/src --verbose
548-
[[90m12:00:55 AM[0m] Projects in this build:
547+
[[90m12:00:54 AM[0m] Projects in this build:
549548
* src/project1/src/tsconfig.json
550549
* src/project2/src/tsconfig.json
551550

552-
[[90m12:00:56 AM[0m] Project 'src/project1/src/tsconfig.json' is up to date because newest input 'src/project1/src/a.ts' is older than output 'src/project1/outFile.tsbuildinfo'
551+
[[90m12:00:55 AM[0m] Project 'src/project1/src/tsconfig.json' is up to date because newest input 'src/project1/src/a.ts' is older than output 'src/project1/outFile.tsbuildinfo'
553552

554-
[[90m12:00:57 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
553+
[[90m12:00:56 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
555554

556-
[[90m12:00:58 AM[0m] Building project '/src/project2/src/tsconfig.json'...
555+
[[90m12:00:57 AM[0m] Building project '/src/project2/src/tsconfig.json'...
557556

558557
src/project2/src/tsconfig.json:1:142 - error TS6306: Referenced project '/src/project1/src' must have setting "composite": true.
559558

@@ -587,15 +586,15 @@ Input::
587586

588587
Output::
589588
/lib/tsc --b /src/project2/src --verbose --emitDeclarationOnly false
590-
[[90m12:00:59 AM[0m] Projects in this build:
589+
[[90m12:00:58 AM[0m] Projects in this build:
591590
* src/project1/src/tsconfig.json
592591
* src/project2/src/tsconfig.json
593592

594-
[[90m12:01:00 AM[0m] Project 'src/project1/src/tsconfig.json' is up to date because newest input 'src/project1/src/a.ts' is older than output 'src/project1/outFile.tsbuildinfo'
593+
[[90m12:00:59 AM[0m] Project 'src/project1/src/tsconfig.json' is up to date because newest input 'src/project1/src/a.ts' is older than output 'src/project1/outFile.tsbuildinfo'
595594

596-
[[90m12:01:01 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
595+
[[90m12:01:00 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
597596

598-
[[90m12:01:02 AM[0m] Building project '/src/project2/src/tsconfig.json'...
597+
[[90m12:01:01 AM[0m] Building project '/src/project2/src/tsconfig.json'...
599598

600599
src/project2/src/tsconfig.json:1:142 - error TS6306: Referenced project '/src/project1/src' must have setting "composite": true.
601600

@@ -632,17 +631,17 @@ export const b = 10;const bLocal = 10;const blocal = 10;
632631

633632
Output::
634633
/lib/tsc --b /src/project2/src --verbose --emitDeclarationOnly false
635-
[[90m12:01:04 AM[0m] Projects in this build:
634+
[[90m12:01:03 AM[0m] Projects in this build:
636635
* src/project1/src/tsconfig.json
637636
* src/project2/src/tsconfig.json
638637

639-
[[90m12:01:05 AM[0m] Project 'src/project1/src/tsconfig.json' is out of date because output 'src/project1/outFile.tsbuildinfo' is older than input 'src/project1/src/b.ts'
638+
[[90m12:01:04 AM[0m] Project 'src/project1/src/tsconfig.json' is out of date because output 'src/project1/outFile.tsbuildinfo' is older than input 'src/project1/src/b.ts'
640639

641-
[[90m12:01:06 AM[0m] Building project '/src/project1/src/tsconfig.json'...
640+
[[90m12:01:05 AM[0m] Building project '/src/project1/src/tsconfig.json'...
642641

643-
[[90m12:01:13 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
642+
[[90m12:01:12 AM[0m] Project 'src/project2/src/tsconfig.json' is out of date because output file 'src/project2/outFile.tsbuildinfo' does not exist
644643

645-
[[90m12:01:14 AM[0m] Building project '/src/project2/src/tsconfig.json'...
644+
[[90m12:01:13 AM[0m] Building project '/src/project2/src/tsconfig.json'...
646645

647646
src/project2/src/tsconfig.json:1:142 - error TS6306: Referenced project '/src/project1/src' must have setting "composite": true.
648647

0 commit comments

Comments
 (0)