@code-pushup/typescript-plugin 0.111.1 → 0.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -5
- package/package.json +9 -3
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/nx/tsconfig-paths.d.ts +10 -0
- package/src/lib/nx/tsconfig-paths.js +55 -0
- package/src/lib/nx/tsconfig-paths.js.map +1 -0
- package/src/lib/runner/runner.d.ts +2 -2
- package/src/lib/runner/runner.js +53 -26
- package/src/lib/runner/runner.js.map +1 -1
- package/src/lib/runner/ts-runner.js +6 -2
- package/src/lib/runner/ts-runner.js.map +1 -1
- package/src/lib/schema.d.ts +1 -1
- package/src/lib/schema.js +3 -1
- package/src/lib/schema.js.map +1 -1
- package/src/lib/typescript-plugin.js +1 -1
- package/src/lib/typescript-plugin.js.map +1 -1
package/README.md
CHANGED
|
@@ -84,14 +84,14 @@ Each set is also available as group in the plugin. See more under [Audits and Gr
|
|
|
84
84
|
|
|
85
85
|
The plugin accepts the following parameters:
|
|
86
86
|
|
|
87
|
-
| Option | Type
|
|
88
|
-
| ---------- |
|
|
89
|
-
| tsconfig | string
|
|
90
|
-
| onlyAudits | string[]
|
|
87
|
+
| Option | Type | Default | Description |
|
|
88
|
+
| ---------- | ------------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
89
|
+
| tsconfig | string \| string[] | `tsconfig.json` | Path(s) to your `tsconfig.json` file(s) |
|
|
90
|
+
| onlyAudits | string[] | undefined | An array of audit slugs to specify which documentation types you want to measure. Only the specified audits will be included in the results |
|
|
91
91
|
|
|
92
92
|
#### `tsconfig`
|
|
93
93
|
|
|
94
|
-
Optional parameter. The `tsconfig` option accepts a
|
|
94
|
+
Optional parameter. The `tsconfig` option accepts a path or an array of paths to your config files. Defaults to `tsconfig.json`.
|
|
95
95
|
|
|
96
96
|
```js
|
|
97
97
|
typescriptPlugin({
|
|
@@ -99,6 +99,34 @@ typescriptPlugin({
|
|
|
99
99
|
});
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
+
You can also provide multiple tsconfigs to combine results from different configurations (e.g., separate configs for source and test files):
|
|
103
|
+
|
|
104
|
+
```js
|
|
105
|
+
typescriptPlugin({
|
|
106
|
+
tsconfig: ['./tsconfig.lib.json', './tsconfig.spec.json'],
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
If you're using an Nx monorepo, a helper function is provided to auto-discover tsconfigs from all projects:
|
|
111
|
+
|
|
112
|
+
```js
|
|
113
|
+
import typescriptPlugin, { tsconfigFromAllNxProjects } from '@code-pushup/typescript-plugin';
|
|
114
|
+
|
|
115
|
+
export default {
|
|
116
|
+
plugins: [
|
|
117
|
+
await typescriptPlugin({
|
|
118
|
+
tsconfig: await tsconfigFromAllNxProjects(),
|
|
119
|
+
}),
|
|
120
|
+
],
|
|
121
|
+
};
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
You can exclude specific projects by name:
|
|
125
|
+
|
|
126
|
+
```js
|
|
127
|
+
await tsconfigFromAllNxProjects({ exclude: ['my-app-e2e'] });
|
|
128
|
+
```
|
|
129
|
+
|
|
102
130
|
#### `onlyAudits`
|
|
103
131
|
|
|
104
132
|
The `onlyAudits` option allows you to specify which documentation types you want to measure. Only the specified audits will be included in the results. All audits are included by default. Example:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/typescript-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.113.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Code PushUp plugin for incrementally adopting strict compilation flags in TypeScript projects",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-typescript#readme",
|
|
@@ -23,13 +23,19 @@
|
|
|
23
23
|
},
|
|
24
24
|
"type": "module",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@code-pushup/models": "0.
|
|
27
|
-
"@code-pushup/utils": "0.
|
|
26
|
+
"@code-pushup/models": "0.113.0",
|
|
27
|
+
"@code-pushup/utils": "0.113.0",
|
|
28
28
|
"zod": "^4.2.1"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
+
"@nx/devkit": ">=17.0.0",
|
|
31
32
|
"typescript": ">=4.0.0"
|
|
32
33
|
},
|
|
34
|
+
"peerDependenciesMeta": {
|
|
35
|
+
"@nx/devkit": {
|
|
36
|
+
"optional": true
|
|
37
|
+
}
|
|
38
|
+
},
|
|
33
39
|
"scripts": {},
|
|
34
40
|
"files": [
|
|
35
41
|
"src",
|
package/src/index.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export default typescriptPlugin;
|
|
|
3
3
|
export { TYPESCRIPT_PLUGIN_SLUG } from './lib/constants.js';
|
|
4
4
|
export { typescriptPluginConfigSchema, type TypescriptPluginConfig, type TypescriptPluginOptions, } from './lib/schema.js';
|
|
5
5
|
export { getCategories, getCategoryRefsFromGroups } from './lib/utils.js';
|
|
6
|
+
export { tsconfigFromAllNxProjects } from './lib/nx/tsconfig-paths.js';
|
package/src/index.js
CHANGED
|
@@ -3,4 +3,5 @@ export default typescriptPlugin;
|
|
|
3
3
|
export { TYPESCRIPT_PLUGIN_SLUG } from './lib/constants.js';
|
|
4
4
|
export { typescriptPluginConfigSchema, } from './lib/schema.js';
|
|
5
5
|
export { getCategories, getCategoryRefsFromGroups } from './lib/utils.js';
|
|
6
|
+
export { tsconfigFromAllNxProjects } from './lib/nx/tsconfig-paths.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,eAAe,gBAAgB,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,4BAA4B,GAG7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,eAAe,gBAAgB,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,4BAA4B,GAG7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds all tsconfig files from Nx projects in the workspace.
|
|
3
|
+
*
|
|
4
|
+
* @param options - Configuration options
|
|
5
|
+
* @param options.exclude - Array of project names to exclude
|
|
6
|
+
* @returns Array of tsconfig file paths
|
|
7
|
+
*/
|
|
8
|
+
export declare function tsconfigFromAllNxProjects(options?: {
|
|
9
|
+
exclude?: string[];
|
|
10
|
+
}): Promise<string[]>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { readdir } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readConfigFile, sys } from 'typescript';
|
|
4
|
+
import { loadNxProjectGraph, logger, pluralizeToken } from '@code-pushup/utils';
|
|
5
|
+
import { formatMetaLog } from '../format.js';
|
|
6
|
+
const TSCONFIG_PATTERN = /^tsconfig(\..+)?\.json$/;
|
|
7
|
+
/**
|
|
8
|
+
* Returns true only if config explicitly defines files or include with values.
|
|
9
|
+
*/
|
|
10
|
+
function hasFilesToCompile(tsconfigPath) {
|
|
11
|
+
const { config } = readConfigFile(tsconfigPath, sys.readFile);
|
|
12
|
+
if (!config) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const { files, include } = config;
|
|
16
|
+
const hasFiles = Array.isArray(files) && files.length > 0;
|
|
17
|
+
const hasInclude = Array.isArray(include) && include.length > 0;
|
|
18
|
+
return hasFiles || hasInclude;
|
|
19
|
+
}
|
|
20
|
+
function isProjectIncluded(project, exclude) {
|
|
21
|
+
return !exclude?.includes(project.name ?? '');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Finds non-empty tsconfig files in a project directory.
|
|
25
|
+
*/
|
|
26
|
+
async function findTsconfigsInProject(projectRoot) {
|
|
27
|
+
const absoluteRoot = path.resolve(process.cwd(), projectRoot);
|
|
28
|
+
const files = await readdir(absoluteRoot);
|
|
29
|
+
return files
|
|
30
|
+
.filter(file => TSCONFIG_PATTERN.test(file))
|
|
31
|
+
.filter(file => hasFilesToCompile(path.join(absoluteRoot, file)))
|
|
32
|
+
.map(file => path.join(projectRoot, file));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Finds all tsconfig files from Nx projects in the workspace.
|
|
36
|
+
*
|
|
37
|
+
* @param options - Configuration options
|
|
38
|
+
* @param options.exclude - Array of project names to exclude
|
|
39
|
+
* @returns Array of tsconfig file paths
|
|
40
|
+
*/
|
|
41
|
+
export async function tsconfigFromAllNxProjects(options = {}) {
|
|
42
|
+
const projectGraph = await loadNxProjectGraph();
|
|
43
|
+
const { readProjectsConfigurationFromProjectGraph } = await import('@nx/devkit');
|
|
44
|
+
const { projects } = readProjectsConfigurationFromProjectGraph(projectGraph);
|
|
45
|
+
const projectRoots = Object.values(projects)
|
|
46
|
+
.filter(project => isProjectIncluded(project, options.exclude))
|
|
47
|
+
.map(project => project.root)
|
|
48
|
+
.toSorted();
|
|
49
|
+
const tsconfigs = (await Promise.all(projectRoots.map(findTsconfigsInProject))).flat();
|
|
50
|
+
logger.info(formatMetaLog(`Found ${pluralizeToken('tsconfig', tsconfigs.length)} in ${pluralizeToken('Nx project', projectRoots.length)}${options.exclude?.length
|
|
51
|
+
? ` (excluding ${pluralizeToken('project', options.exclude.length)})`
|
|
52
|
+
: ''}`));
|
|
53
|
+
return tsconfigs;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=tsconfig-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../../../src/lib/nx/tsconfig-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RunnerFunction } from '@code-pushup/models';
|
|
2
2
|
import type { AuditSlug } from '../types.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
export type RunnerOptions = {
|
|
4
|
+
tsconfig: string[];
|
|
5
5
|
expectedAudits: {
|
|
6
6
|
slug: AuditSlug;
|
|
7
7
|
}[];
|
package/src/lib/runner/runner.js
CHANGED
|
@@ -1,33 +1,60 @@
|
|
|
1
|
-
import { formatAsciiTable, logger, pluralizeToken, toSentenceCase, } from '@code-pushup/utils';
|
|
2
|
-
import { getTypeScriptDiagnostics
|
|
1
|
+
import { formatAsciiTable, logger, pluralizeToken, stringifyError, toSentenceCase, } from '@code-pushup/utils';
|
|
2
|
+
import { getTypeScriptDiagnostics } from './ts-runner.js';
|
|
3
3
|
import { getIssueFromDiagnostic, tsCodeToAuditSlug } from './utils.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
function collectDiagnostics(tsconfigs) {
|
|
5
|
+
return tsconfigs.reduce((acc, config) => {
|
|
6
|
+
try {
|
|
7
|
+
const diagnostics = getTypeScriptDiagnostics({ tsconfig: config }).map(diag => ({
|
|
8
|
+
code: diag.code,
|
|
9
|
+
issue: getIssueFromDiagnostic(diag),
|
|
10
|
+
}));
|
|
11
11
|
return {
|
|
12
12
|
...acc,
|
|
13
|
-
[
|
|
14
|
-
slug,
|
|
15
|
-
details: {
|
|
16
|
-
issues: [...existingIssues, getIssueFromDiagnostic(diag)],
|
|
17
|
-
},
|
|
18
|
-
},
|
|
13
|
+
diagnostics: [...acc.diagnostics, ...diagnostics],
|
|
19
14
|
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (tsconfigs.length === 1) {
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
logger.warn(`Skipping ${config}: ${stringifyError(error, { oneline: true })}`);
|
|
21
|
+
return { ...acc, skipped: acc.skipped + 1 };
|
|
22
|
+
}
|
|
23
|
+
}, { diagnostics: [], skipped: 0 });
|
|
24
|
+
}
|
|
25
|
+
function groupDiagnosticsByAudit(diagnostics) {
|
|
26
|
+
return diagnostics.reduce((acc, { code, issue }) => {
|
|
27
|
+
const slug = tsCodeToAuditSlug(code);
|
|
28
|
+
const existingIssues = acc[slug]?.details?.issues ?? [];
|
|
29
|
+
return {
|
|
30
|
+
...acc,
|
|
31
|
+
[slug]: { slug, details: { issues: [...existingIssues, issue] } },
|
|
32
|
+
};
|
|
33
|
+
}, {});
|
|
34
|
+
}
|
|
35
|
+
function logDiagnosticsSummary(result) {
|
|
36
|
+
logger.debug(formatAsciiTable({
|
|
37
|
+
columns: ['left', 'right'],
|
|
38
|
+
rows: Object.values(result).map(audit => [
|
|
39
|
+
`• ${toSentenceCase(audit.slug)}`,
|
|
40
|
+
audit.details?.issues?.length ?? 0,
|
|
41
|
+
]),
|
|
42
|
+
}, { borderless: true }));
|
|
43
|
+
}
|
|
44
|
+
export function createRunnerFunction(options) {
|
|
45
|
+
const { tsconfig, expectedAudits } = options;
|
|
46
|
+
return () => {
|
|
47
|
+
const { diagnostics, skipped } = collectDiagnostics(tsconfig);
|
|
48
|
+
if (skipped === tsconfig.length) {
|
|
49
|
+
throw new Error(`All ${tsconfig.length} TypeScript configurations failed to load`);
|
|
50
|
+
}
|
|
51
|
+
logger.info(diagnostics.length === 0
|
|
52
|
+
? 'No TypeScript errors found'
|
|
53
|
+
: `TypeScript compiler found ${pluralizeToken('error', diagnostics.length)} in total`);
|
|
54
|
+
const result = groupDiagnosticsByAudit(diagnostics);
|
|
55
|
+
logDiagnosticsSummary(result);
|
|
28
56
|
return expectedAudits.map(({ slug }) => {
|
|
29
|
-
const
|
|
30
|
-
const issues = details?.issues ?? [];
|
|
57
|
+
const issues = result[slug]?.details?.issues ?? [];
|
|
31
58
|
return {
|
|
32
59
|
slug,
|
|
33
60
|
score: issues.length === 0 ? 1 : 0,
|
|
@@ -35,7 +62,7 @@ export function createRunnerFunction(options) {
|
|
|
35
62
|
displayValue: issues.length === 0
|
|
36
63
|
? 'passed'
|
|
37
64
|
: pluralizeToken('error', issues.length),
|
|
38
|
-
...(issues.length > 0 ? { details } : {}),
|
|
65
|
+
...(issues.length > 0 ? { details: { issues } } : {}),
|
|
39
66
|
};
|
|
40
67
|
});
|
|
41
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/lib/runner/runner.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,MAAM,EACN,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/lib/runner/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,15 @@ import { logger, pluralizeToken, stringifyError } from '@code-pushup/utils';
|
|
|
3
3
|
import { loadTargetConfig } from './utils.js';
|
|
4
4
|
export function getTypeScriptDiagnostics({ tsconfig, }) {
|
|
5
5
|
const { fileNames, options } = loadTargetConfig(tsconfig);
|
|
6
|
-
logger.info(`Parsed TypeScript config file ${tsconfig}, program includes ${pluralizeToken('file', fileNames.length)}`);
|
|
7
6
|
try {
|
|
8
7
|
const program = createProgram(fileNames, options);
|
|
9
8
|
const diagnostics = getPreEmitDiagnostics(program);
|
|
10
|
-
|
|
9
|
+
if (diagnostics.length > 0) {
|
|
10
|
+
logger.info(` ${tsconfig} - ${pluralizeToken('error', diagnostics.length)}`);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
logger.debug(` ${tsconfig}: ${pluralizeToken('file', fileNames.length)}, 0 errors`);
|
|
14
|
+
}
|
|
11
15
|
return diagnostics;
|
|
12
16
|
}
|
|
13
17
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-runner.js","sourceRoot":"","sources":["../../../../src/lib/runner/ts-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM9C,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,GACW;IACnB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1D,
|
|
1
|
+
{"version":3,"file":"ts-runner.js","sourceRoot":"","sources":["../../../../src/lib/runner/ts-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM9C,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,GACW;IACnB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CACT,KAAK,QAAQ,MAAM,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CACjE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CACV,KAAK,QAAQ,KAAK,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,YAAY,CACvE,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,iDAAiD,cAAc,CAAC,KAAK,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/src/lib/schema.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const typescriptPluginConfigSchema: z.ZodObject<{
|
|
3
|
-
tsconfig: z.ZodDefault<z.ZodString
|
|
3
|
+
tsconfig: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>, z.ZodTransform<string[], string | string[]>>;
|
|
4
4
|
onlyAudits: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
5
5
|
"syntax-errors": "syntax-errors";
|
|
6
6
|
"semantic-errors": "semantic-errors";
|
package/src/lib/schema.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { pluginScoreTargetsSchema } from '@code-pushup/models';
|
|
3
|
+
import { toArray } from '@code-pushup/utils';
|
|
3
4
|
import { AUDITS, DEFAULT_TS_CONFIG } from './constants.js';
|
|
4
5
|
const auditSlugs = AUDITS.map(({ slug }) => slug);
|
|
5
6
|
export const typescriptPluginConfigSchema = z
|
|
6
7
|
.object({
|
|
7
8
|
tsconfig: z
|
|
8
|
-
.string()
|
|
9
|
+
.union([z.string(), z.array(z.string()).min(1)])
|
|
9
10
|
.default(DEFAULT_TS_CONFIG)
|
|
11
|
+
.transform(toArray)
|
|
10
12
|
.meta({
|
|
11
13
|
description: `Path to a tsconfig file (default is ${DEFAULT_TS_CONFIG})`,
|
|
12
14
|
}),
|
package/src/lib/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAG/C,CAAC;AACF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAG/C,CAAC;AACF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C,OAAO,CAAC,iBAAiB,CAAC;SAC1B,SAAS,CAAC,OAAO,CAAC;SAClB,IAAI,CAAC;QACJ,WAAW,EAAE,uCAAuC,iBAAiB,GAAG;KACzE,CAAC;IACJ,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACzB,IAAI,CAAC;QACJ,WAAW,EAAE,wDAAwD;KACtE,CAAC;SACD,QAAQ,EAAE;IACb,YAAY,EAAE,wBAAwB;CACvC,CAAC;KACD,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { typescriptPluginConfigSchema, } from './schema.js';
|
|
|
7
7
|
import { getAudits, getGroups, logAuditsAndGroups } from './utils.js';
|
|
8
8
|
const packageJson = createRequire(import.meta.url)('../../package.json');
|
|
9
9
|
export function typescriptPlugin(options) {
|
|
10
|
-
const { tsconfig = DEFAULT_TS_CONFIG, onlyAudits, scoreTargets, } = parseOptions(options ?? {});
|
|
10
|
+
const { tsconfig = [DEFAULT_TS_CONFIG], onlyAudits, scoreTargets, } = parseOptions(options ?? {});
|
|
11
11
|
const audits = getAudits({ onlyAudits });
|
|
12
12
|
const groups = getGroups({ onlyAudits });
|
|
13
13
|
logAuditsAndGroups(audits, groups);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-plugin.js","sourceRoot":"","sources":["../../../src/lib/typescript-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAqB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAGL,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;AAEzC,MAAM,UAAU,gBAAgB,CAC9B,OAAiC;IAEjC,MAAM,EACJ,QAAQ,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"typescript-plugin.js","sourceRoot":"","sources":["../../../src/lib/typescript-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAqB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAGL,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;AAEzC,MAAM,UAAU,gBAAgB,CAC9B,OAAiC;IAEjC,MAAM,EACJ,QAAQ,GAAG,CAAC,iBAAiB,CAAC,EAC9B,UAAU,EACV,YAAY,GACb,GAAG,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAEzC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,uBAAuB;QAC9B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,+DAA+D;QACxE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM;QACN,MAAM;QACN,MAAM,EAAE,oBAAoB,CAAC;YAC3B,QAAQ;YACR,cAAc,EAAE,MAAM;SACvB,CAAC;QACF,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,eAAwC;IAExC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,4CAA4C,cAAc,CAAC,KAAK,CAAC,EAAE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC"}
|