Skip to content

Commit d660ad1

Browse files
piotr-olesMark Molinaro
andauthored
fix: ensure typescript is imported only as type-only (#633)
Ensure typescript is imported only as type-only and close reporter on unsuccessful `configure` or `connect` Co-authored-by: Mark Molinaro <[email protected]>
1 parent 8d8125c commit d660ad1

10 files changed

+27
-16
lines changed

src/reporter/reporter-rpc/ReporterRpcClient.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,16 @@ function createReporterRpcClient<TConfiguration extends object>(
2929
await channel.open();
3030
}
3131
if (!rpcClient.isConnected()) {
32-
await rpcClient.connect();
33-
await rpcClient.dispatchCall(configure, configuration);
32+
try {
33+
await rpcClient.connect();
34+
await rpcClient.dispatchCall(configure, configuration);
35+
} catch (error) {
36+
// connect or configure was not successful -
37+
// close the reporter and re-throw an error
38+
await rpcClient.disconnect();
39+
await channel.close();
40+
throw error;
41+
}
3442
}
3543
},
3644
disconnect: async () => {

src/typescript-reporter/extension/TypeScriptEmbeddedExtension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { extname } from 'path';
33
import { TypeScriptExtension } from './TypeScriptExtension';
44
import { Issue } from '../../issue';

src/typescript-reporter/extension/TypeScriptExtension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { Issue } from '../../issue';
33
import { FilesMatch } from '../../reporter';
44

src/typescript-reporter/issue/TypeScriptIssueFactory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import * as os from 'os';
33
import { deduplicateAndSortIssues, Issue, IssueLocation } from '../../issue';
44

src/typescript-reporter/profile/TypeScriptPerformance.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { Performance } from '../../profile/Performance';
33

44
interface TypeScriptPerformance {

src/typescript-reporter/reporter/ControlledTypeScriptSystem.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { dirname, join } from 'path';
33
import { createPassiveFileSystem } from '../file-system/PassiveFileSystem';
44
import forwardSlash from '../../utils/path/forwardSlash';

src/typescript-reporter/reporter/ControlledWatchCompilerHost.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { TypeScriptHostExtension } from '../extension/TypeScriptExtension';
33
import { ControlledTypeScriptSystem } from './ControlledTypeScriptSystem';
44

src/typescript-reporter/reporter/ControlledWatchSolutionBuilderHost.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { createControlledWatchCompilerHost } from './ControlledWatchCompilerHost';
33
import { TypeScriptHostExtension } from '../extension/TypeScriptExtension';
44
import { ControlledTypeScriptSystem } from './ControlledTypeScriptSystem';
@@ -59,7 +59,7 @@ function createControlledWatchSolutionBuilderHost<TProgram extends ts.BuilderPro
5959
system.deleteFile(fileName);
6060
},
6161
getParsedCommandLine(fileName: string): ts.ParsedCommandLine | undefined {
62-
return ts.getParsedCommandLineOfConfigFile(
62+
return typescript.getParsedCommandLineOfConfigFile(
6363
fileName,
6464
{ skipLibCheck: true },
6565
{

src/typescript-reporter/reporter/TypeScriptConfigurationParser.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import { normalize, dirname, basename, resolve, relative } from 'path';
33
import { TypeScriptConfigurationOverwrite } from '../TypeScriptConfigurationOverwrite';
44
import { FilesMatch } from '../../reporter';
@@ -114,10 +114,10 @@ function removeJsonExtension(path: string) {
114114
}
115115
}
116116

117-
function getTsBuildInfoEmitOutputFilePath(options: ts.CompilerOptions) {
118-
if (typeof ts.getTsBuildInfoEmitOutputFilePath === 'function') {
117+
function getTsBuildInfoEmitOutputFilePath(typescript: typeof ts, options: ts.CompilerOptions) {
118+
if (typeof typescript.getTsBuildInfoEmitOutputFilePath === 'function') {
119119
// old TypeScript version doesn't provides this method
120-
return ts.getTsBuildInfoEmitOutputFilePath(options);
120+
return typescript.getTsBuildInfoEmitOutputFilePath(options);
121121
}
122122

123123
// based on the implementation from typescript
@@ -159,7 +159,10 @@ function getArtifactsFromTypeScriptConfiguration(
159159
if (parsedConfiguration.options.outFile) {
160160
files.add(resolve(configFileContext, parsedConfiguration.options.outFile));
161161
}
162-
const tsBuildInfoPath = getTsBuildInfoEmitOutputFilePath(parsedConfiguration.options);
162+
const tsBuildInfoPath = getTsBuildInfoEmitOutputFilePath(
163+
typescript,
164+
parsedConfiguration.options
165+
);
163166
if (tsBuildInfoPath) {
164167
files.add(resolve(configFileContext, tsBuildInfoPath));
165168
}

src/typescript-reporter/reporter/TypeScriptReporter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ts from 'typescript';
1+
import type * as ts from 'typescript';
22
import path from 'path';
33
import { FilesMatch, Reporter } from '../../reporter';
44
import { createIssuesFromTsDiagnostics } from '../issue/TypeScriptIssueFactory';

0 commit comments

Comments
 (0)