Skip to content

Commit 6f702d7

Browse files
committed
wip
1 parent 64876ed commit 6f702d7

File tree

12 files changed

+169
-156
lines changed

12 files changed

+169
-156
lines changed

code-pushup.config.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,15 @@ const config: CoreConfig = {
3434

3535
export default mergeConfigs(
3636
config,
37-
/* await coverageCoreConfigNx(),
37+
/* await coverageCoreConfigNx(),
3838
await jsPackagesCoreConfig(),
3939
await lighthouseCoreConfig(
4040
'https://github.com/code-pushup/cli?tab=readme-ov-file#code-pushup-cli/',
4141
),
4242
await eslintCoreConfigNx(),*/
4343
await typescriptPluginConfigNx({
44-
tsConfigPath: 'packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json',
44+
tsConfigPath:
45+
'packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json',
4546
// onlyAudits: ['verbatim-module-syntax-typescript']
4647
}),
4748
);

code-pushup.preset.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { loadTsConfig } from 'bundle-require';
2+
import { a } from 'vitest/dist/suite-UrZdHRff';
13
import type {
24
CategoryConfig,
35
CoreConfig,
@@ -17,14 +19,17 @@ import {
1719
type TypescriptPluginOptions,
1820
typescriptPlugin,
1921
} from './packages/plugin-typescript/src/index.js';
20-
import {AUDITS, GROUPS} from './packages/plugin-typescript/src/lib/constants';
22+
import { AUDITS, GROUPS } from './packages/plugin-typescript/src/lib/constants';
2123
import {
2224
filterGroupsByAuditSlug,
23-
filterGroupsByTsOptions, getCategorieReferences, getCategoryReferences, getCompilerOptionsToDetermineListedAudits,
24-
getFinalAuditSlugs, loadTargetConfig, getCategoryRefsFromGroups
25+
filterGroupsByTsOptions,
26+
getCategorieReferences,
27+
getCategoryReferences,
28+
getCategoryRefsFromGroups,
29+
getCompilerOptionsToDetermineListedAudits,
30+
getFinalAuditSlugs,
31+
loadTargetConfig,
2532
} from './packages/plugin-typescript/src/lib/utils.js';
26-
import {a} from "vitest/dist/suite-UrZdHRff";
27-
import {loadTsConfig} from "bundle-require";
2833

2934
export const jsPackagesCategories: CategoryConfig[] = [
3035
{
@@ -83,14 +88,14 @@ export const eslintCategories: CategoryConfig[] = [
8388
slug: 'bug-prevention',
8489
title: 'Bug prevention',
8590
description: 'Lint rules that find **potential bugs** in your code.',
86-
refs: [{type: 'group', plugin: 'eslint', slug: 'problems', weight: 1}],
91+
refs: [{ type: 'group', plugin: 'eslint', slug: 'problems', weight: 1 }],
8792
},
8893
{
8994
slug: 'code-style',
9095
title: 'Code style',
9196
description:
9297
'Lint rules that promote **good practices** and consistency in your code.',
93-
refs: [{type: 'group', plugin: 'eslint', slug: 'suggestions', weight: 1}],
98+
refs: [{ type: 'group', plugin: 'eslint', slug: 'suggestions', weight: 1 }],
9499
},
95100
];
96101

@@ -153,7 +158,7 @@ export const typescriptPluginConfigNx = async (
153158
{
154159
slug: 'typescript',
155160
title: 'Typescript',
156-
refs: (await getCategoryRefsFromGroups(opt))
161+
refs: await getCategoryRefsFromGroups(opt),
157162
},
158163
],
159164
};

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

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
1-
import type {Audit, AuditOutput, AuditOutputs, AuditReport, Issue, RunnerFunction,} from '@code-pushup/models';
2-
import type {CompilerOptionName, TypescriptPluginOptions} from '../types.js';
3-
import {getDiagnostics,} from './typescript-runner.js';
4-
import {AUDIT_LOOKUP, getIssueFromDiagnostic, tSCodeToAuditSlug, validateDiagnostics} from './utils.js';
5-
export type RunnerOptions = TypescriptPluginOptions & {filteredAudits: Audit[]};
1+
import type {
2+
Audit,
3+
AuditOutput,
4+
AuditOutputs,
5+
AuditReport,
6+
Issue,
7+
RunnerFunction,
8+
} from '@code-pushup/models';
9+
import type { CompilerOptionName, TypescriptPluginOptions } from '../types.js';
10+
import { getDiagnostics } from './typescript-runner.js';
11+
import {
12+
AUDIT_LOOKUP,
13+
getIssueFromDiagnostic,
14+
tSCodeToAuditSlug,
15+
validateDiagnostics,
16+
} from './utils.js';
17+
18+
export type RunnerOptions = TypescriptPluginOptions & {
19+
filteredAudits: Audit[];
20+
};
621

722
export function createRunnerFunction(options: RunnerOptions): RunnerFunction {
823
return async (): Promise<AuditOutputs> => {
9-
1024
const diagnostics = await getDiagnostics(options.tsConfigPath);
1125
validateDiagnostics(diagnostics);
1226
const result: Record<

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
// eslint-disable-next-line unicorn/import-style
2-
import {describe, expect} from 'vitest';
3-
import {
4-
getTsConfigurationFromPath,
5-
} from './typescript-runner.js';
2+
import { describe, expect } from 'vitest';
3+
import { getTsConfigurationFromPath } from './typescript-runner.js';
64

75
describe('getTsConfigurationFromPath', () => {
86
it('should accept valid options', async () => {
97
await expect(
108
getTsConfigurationFromPath({
11-
tsConfigPath: 'packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json',
9+
tsConfigPath:
10+
'packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json',
1211
}),
1312
).resolves.toStrictEqual({
1413
compilerOptions: {
@@ -26,7 +25,6 @@ describe('getTsConfigurationFromPath', () => {
2625
]),
2726
});
2827
});
29-
3028
});
3129

3230
/*

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,29 @@ import {
1111
sys,
1212
} from 'typescript';
1313
import type { TypescriptPluginOptions } from '../types.js';
14-
import {loadTargetConfig} from "../utils.js";
14+
import { loadTargetConfig } from '../utils.js';
1515

1616
export type DiagnosticsOptions = {
1717
fileNames: string[];
1818
compilerOptions: CompilerOptions;
1919
};
2020

21-
export async function getDiagnostics(tsConfigPath: string): Promise<readonly Diagnostic[]> {
21+
export async function getDiagnostics(
22+
tsConfigPath: string,
23+
): Promise<readonly Diagnostic[]> {
2224
try {
23-
const {fileNames, options}= await loadTargetConfig(tsConfigPath);
24-
const program = createProgram(fileNames, options);
25-
return getPreEmitDiagnostics(program);
25+
const { fileNames, options } = await loadTargetConfig(tsConfigPath);
26+
const program = createProgram(fileNames, options);
27+
return getPreEmitDiagnostics(program);
2628
} catch (error) {
27-
throw new Error(`Can't create TS program in getDiagnostics. \n ${(error as Error).message}`);
29+
throw new Error(
30+
`Can't create TS program in getDiagnostics. \n ${(error as Error).message}`,
31+
);
2832
}
2933
}
3034

3135
export async function getTsConfigurationFromPath(
32-
options: Pick<TypescriptPluginOptions, 'tsConfigPath'>
36+
options: Pick<TypescriptPluginOptions, 'tsConfigPath'>,
3337
): Promise<DiagnosticsOptions> {
3438
const { tsConfigPath } = options;
3539
const configPath = resolve(process.cwd(), tsConfigPath);
@@ -44,11 +48,7 @@ export async function getTsConfigurationFromPath(
4448
const configFile = (await readFile(configPath)).toString();
4549

4650
const { config } = parseConfigFileTextToJson(configPath, configFile);
47-
const parsed = parseJsonConfigFileContent(
48-
config,
49-
sys,
50-
basePath
51-
);
51+
const parsed = parseJsonConfigFileContent(config, sys, basePath);
5252

5353
const { options: compilerOptions, fileNames } = parsed;
5454
if (fileNames.length === 0) {

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
flattenDiagnosticMessageText,
55
} from 'typescript';
66
import type { Issue } from '@code-pushup/models';
7-
import {camelCaseToKebabCase, truncateIssueMessage} from '@code-pushup/utils';
7+
import { camelCaseToKebabCase, truncateIssueMessage } from '@code-pushup/utils';
88
import type { CompilerOptionName } from '../types.js';
99
import { TS_ERROR_CODES } from './ts-error-codes.js';
1010

@@ -34,10 +34,14 @@ export function tSCodeToAuditSlug(code: number): CompilerOptionName {
3434

3535
//OK DOOONE, now it's more beautiful, goodbye! let me know when u finish if u want
3636
// I was getting so frustrated of with webstorm sry xD
37-
export function validateDiagnostics(diagnostics: readonly Diagnostic[]){
38-
diagnostics.filter(({code}) => !AUDIT_LOOKUP.has(code)).forEach(({code, messageText}) => {
39-
console.warn(`Diagnostic Warning: The code ${code} is not supported. ${messageText}`)
40-
})
37+
export function validateDiagnostics(diagnostics: readonly Diagnostic[]) {
38+
diagnostics
39+
.filter(({ code }) => !AUDIT_LOOKUP.has(code))
40+
.forEach(({ code, messageText }) => {
41+
console.warn(
42+
`Diagnostic Warning: The code ${code} is not supported. ${messageText}`,
43+
);
44+
});
4145
}
4246

4347
/**

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from 'zod';
22
import { AUDITS, DEFAULT_TS_CONFIG } from './constants.js';
3-
import type {AuditSlug, CompilerOptionName} from './types.js';
3+
import type { AuditSlug, CompilerOptionName } from './types.js';
44

55
const auditSlugs = AUDITS.map(({ slug }) => slug) as [string, ...string[]];
66
export const typescriptPluginConfigSchema = z.object({
@@ -13,7 +13,7 @@ export const typescriptPluginConfigSchema = z.object({
1313
.array(z.enum(auditSlugs), {
1414
description: 'Array with specific TsCodes to measure',
1515
})
16-
.optional()
16+
.optional(),
1717
});
1818

1919
export type TypescriptPluginOptions = z.infer<
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import {z} from 'zod';
2-
import {TS_ERROR_CODES} from './runner/ts-error-codes.js';
3-
import {typescriptPluginConfigSchema} from './schema.js';
1+
import { z } from 'zod';
2+
import { TS_ERROR_CODES } from './runner/ts-error-codes.js';
3+
import { typescriptPluginConfigSchema } from './schema.js';
44

5-
type CamelCaseToKebabCase<S extends string> = S extends `${infer First}${infer Rest}`
6-
? Rest extends Uncapitalize<Rest>
7-
? `${Lowercase<First>}${CamelCaseToKebabCase<Rest>}`
8-
: `${Lowercase<First>}-${CamelCaseToKebabCase<Rest>}`
9-
: S;
5+
type CamelCaseToKebabCase<S extends string> =
6+
S extends `${infer First}${infer Rest}`
7+
? Rest extends Uncapitalize<Rest>
8+
? `${Lowercase<First>}${CamelCaseToKebabCase<Rest>}`
9+
: `${Lowercase<First>}-${CamelCaseToKebabCase<Rest>}`
10+
: S;
1011

1112
export type SemVerString = `${number}.${number}.${number}`;
1213

@@ -18,7 +19,6 @@ export type CompilerOptionName = {
1819

1920
export type AuditSlug = CamelCaseToKebabCase<CompilerOptionName>;
2021

21-
2222
export type TypescriptPluginOptions = z.infer<
2323
typeof typescriptPluginConfigSchema
2424
> & { onlyAudits?: (string | AuditSlug)[] | undefined };
Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,38 @@
1-
import type {PluginConfig} from '@code-pushup/models';
2-
import {name as packageName, version} from '../../package.json';
3-
import {AUDITS, DEFAULT_TS_CONFIG, TYPESCRIPT_PLUGIN_SLUG,} from './constants.js';
4-
import {createRunnerFunction} from './runner/runner.js';
5-
import type {TypescriptPluginOptions} from './types.js';
6-
import {filterAuditsByTsOptions, getCompilerOptionsToDetermineListedAudits, getGroups} from './utils.js';
7-
import {kebabCaseToCamelCase} from "@code-pushup/utils";
1+
import type { PluginConfig } from '@code-pushup/models';
2+
import { kebabCaseToCamelCase } from '@code-pushup/utils';
3+
import { name as packageName, version } from '../../package.json';
4+
import {
5+
AUDITS,
6+
DEFAULT_TS_CONFIG,
7+
TYPESCRIPT_PLUGIN_SLUG,
8+
} from './constants.js';
9+
import { createRunnerFunction } from './runner/runner.js';
10+
import type { TypescriptPluginOptions } from './types.js';
11+
import {
12+
filterAuditsByTsOptions,
13+
getCompilerOptionsToDetermineListedAudits,
14+
getGroups,
15+
} from './utils.js';
816

917
export async function typescriptPlugin(
1018
options?: TypescriptPluginOptions,
1119
): Promise<PluginConfig> {
12-
13-
const {tsConfigPath} = options ?? {tsConfigPath: DEFAULT_TS_CONFIG};
20+
const { tsConfigPath } = options ?? { tsConfigPath: DEFAULT_TS_CONFIG };
1421
const definitive = await getCompilerOptionsToDetermineListedAudits(options);
1522

16-
const filteredAudits = AUDITS
17-
.filter(filterAuditsByTsOptions(definitive, options?.onlyAudits));
18-
const filteredGroups = getGroups(definitive, options);
23+
const filteredAudits = AUDITS.filter(
24+
filterAuditsByTsOptions(definitive, options?.onlyAudits),
25+
);
26+
const filteredGroups = getGroups(definitive, options?.onlyAudits);
1927

20-
const skippedAudits = AUDITS
21-
.filter(audit => !filteredAudits.some(filtered => filtered.slug === audit.slug))
22-
.map(audit => kebabCaseToCamelCase(audit.slug));
28+
const skippedAudits = AUDITS.filter(
29+
audit => !filteredAudits.some(filtered => filtered.slug === audit.slug),
30+
).map(audit => kebabCaseToCamelCase(audit.slug));
2331

24-
if(skippedAudits.length > 0){
25-
console.warn(`Some audits were skipped because the configuration of the compiler options [${skippedAudits.join(', ')}]`);
32+
if (skippedAudits.length > 0) {
33+
console.warn(
34+
`Some audits were skipped because the configuration of the compiler options [${skippedAudits.join(', ')}]`,
35+
);
2636
}
2737

2838
return {
@@ -37,7 +47,7 @@ export async function typescriptPlugin(
3747
groups: filteredGroups,
3848
runner: createRunnerFunction({
3949
tsConfigPath,
40-
filteredAudits
50+
filteredAudits,
4151
}),
4252
};
4353
}

0 commit comments

Comments
 (0)