Skip to content

Commit 322a453

Browse files
committed
fix(plugin-typescript): refined logic and types
1 parent 9e6af64 commit 322a453

File tree

3 files changed

+19
-26
lines changed

3 files changed

+19
-26
lines changed

packages/plugin-typescript/src/lib/runner/runner.ts

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type {
22
AuditOutput,
33
AuditOutputs,
4-
AuditReport,
54
Issue,
65
RunnerFunction,
76
} from '@code-pushup/models';
@@ -11,7 +10,7 @@ import {
1110
getTypeScriptDiagnostics,
1211
} from './ts-runner.js';
1312
import type { CodeRangeName } from './types.js';
14-
import { getIssueFromDiagnostic, tSCodeToAuditSlug } from './utils.js';
13+
import { getIssueFromDiagnostic, tsCodeToAuditSlug } from './utils.js';
1514

1615
export type RunnerOptions = DiagnosticsOptions & {
1716
expectedAudits: { slug: AuditSlug }[];
@@ -21,28 +20,22 @@ export function createRunnerFunction(options: RunnerOptions): RunnerFunction {
2120
const { tsconfig, expectedAudits } = options;
2221
return async (): Promise<AuditOutputs> => {
2322
const diagnostics = await getTypeScriptDiagnostics({ tsconfig });
24-
const result: Record<
25-
CodeRangeName,
26-
Pick<AuditReport, 'slug' | 'details'>
27-
> = diagnostics.reduce(
28-
(acc, diag) => {
29-
const slug = tSCodeToAuditSlug(diag.code);
30-
const existingIssues: Issue[] = acc[slug]?.details?.issues ?? [];
31-
return {
32-
...acc,
33-
[slug]: {
34-
slug,
35-
details: {
36-
issues: [...existingIssues, getIssueFromDiagnostic(diag)],
37-
},
23+
const result = diagnostics.reduce<
24+
Partial<Record<CodeRangeName, Pick<AuditOutput, 'slug' | 'details'>>>
25+
>((acc, diag) => {
26+
const slug = tsCodeToAuditSlug(diag.code);
27+
const existingIssues: Issue[] =
28+
(acc[slug] && acc[slug].details?.issues) || ([] as Issue[]);
29+
return {
30+
...acc,
31+
[slug]: {
32+
slug,
33+
details: {
34+
issues: [...existingIssues, getIssueFromDiagnostic(diag)],
3835
},
39-
};
40-
},
41-
{} as unknown as Record<
42-
CodeRangeName,
43-
Pick<AuditOutput, 'slug' | 'details'>
44-
>,
45-
);
36+
},
37+
};
38+
}, {});
4639

4740
return expectedAudits.map(({ slug }) => {
4841
const { details } = result[slug] ?? {};

packages/plugin-typescript/src/lib/runner/ts-runner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
createProgram,
44
getPreEmitDiagnostics,
55
} from 'typescript';
6+
import { stringifyError } from '@code-pushup/utils';
67
import { loadTargetConfig } from './utils.js';
78

89
export type DiagnosticsOptions = {
@@ -15,11 +16,10 @@ export async function getTypeScriptDiagnostics({
1516
const { fileNames, options } = await loadTargetConfig(tsconfig);
1617
try {
1718
const program = createProgram(fileNames, options);
18-
// @TODO use more fine-grained helpers like getSemanticDiagnostics instead of getPreEmitDiagnostics
1919
return getPreEmitDiagnostics(program);
2020
} catch (error) {
2121
throw new Error(
22-
`Can't create TS program in getDiagnostics. \n ${(error as Error).message}`,
22+
`Can't create TS program in getDiagnostics. \n ${stringifyError(error)}`,
2323
);
2424
}
2525
}

packages/plugin-typescript/src/lib/runner/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import type { CodeRangeName } from './types.js';
1919
* @returns The audit slug.
2020
* @throws Error if the code is not supported.
2121
*/
22-
export function tSCodeToAuditSlug(code: number): CodeRangeName {
22+
export function tsCodeToAuditSlug(code: number): CodeRangeName {
2323
const rangeNumber = code
2424
.toString()
2525
.slice(0, 1) as keyof typeof TS_CODE_RANGE_NAMES;

0 commit comments

Comments
 (0)