@code-pushup/eslint-plugin 0.57.0 → 0.58.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 +36 -0
- package/package.json +4 -3
- package/src/bin.js +4 -1
- package/src/bin.js.map +1 -1
- package/src/lib/config.d.ts +59 -0
- package/src/lib/config.js +21 -0
- package/src/lib/config.js.map +1 -1
- package/src/lib/eslint-plugin.d.ts +3 -2
- package/src/lib/eslint-plugin.js +13 -4
- package/src/lib/eslint-plugin.js.map +1 -1
- package/src/lib/meta/groups.d.ts +7 -0
- package/src/lib/meta/groups.js +49 -1
- package/src/lib/meta/groups.js.map +1 -1
- package/src/lib/meta/index.d.ts +2 -2
- package/src/lib/meta/index.js +6 -2
- package/src/lib/meta/index.js.map +1 -1
- package/src/lib/meta/rules.d.ts +1 -0
- package/src/lib/meta/rules.js +4 -0
- package/src/lib/meta/rules.js.map +1 -1
- package/src/lib/runner/index.d.ts +2 -5
- package/src/lib/runner/index.js +13 -12
- package/src/lib/runner/index.js.map +1 -1
package/README.md
CHANGED
|
@@ -93,6 +93,42 @@ Detected ESLint rules are mapped to Code PushUp audits. Audit reports are calcul
|
|
|
93
93
|
|
|
94
94
|
5. Run the CLI with `npx code-pushup collect` and view or upload report (refer to [CLI docs](../cli/README.md)).
|
|
95
95
|
|
|
96
|
+
### Custom groups
|
|
97
|
+
|
|
98
|
+
You can extend the plugin configuration with custom groups to categorize ESLint rules according to your project's specific needs. Custom groups allow you to assign weights to individual rules, influencing their impact on the report. Rules can be defined as an object with explicit weights or as an array where each rule defaults to a weight of 1. Additionally, you can use wildcard patterns (`*`) to include multiple rules with similar prefixes.
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
import eslintPlugin from '@code-pushup/eslint-plugin';
|
|
102
|
+
|
|
103
|
+
export default {
|
|
104
|
+
// ...
|
|
105
|
+
plugins: [
|
|
106
|
+
// ...
|
|
107
|
+
await eslintPlugin(
|
|
108
|
+
{ eslintrc: '.eslintrc.js', patterns: ['src/**/*.js'] },
|
|
109
|
+
{
|
|
110
|
+
groups: [
|
|
111
|
+
{
|
|
112
|
+
slug: 'modern-angular',
|
|
113
|
+
title: 'Modern Angular',
|
|
114
|
+
rules: {
|
|
115
|
+
'@angular-eslint/template/prefer-control-flow': 3,
|
|
116
|
+
'@angular-eslint/template/prefer-ngsrc': 2,
|
|
117
|
+
'@angular-eslint/component-selector': 1,
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
slug: 'type-safety',
|
|
122
|
+
title: 'Type safety',
|
|
123
|
+
rules: ['@typescript-eslint/no-unsafe-*'],
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
),
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
```
|
|
131
|
+
|
|
96
132
|
### Optionally set up categories
|
|
97
133
|
|
|
98
134
|
1. Reference audits (or groups) which you wish to include in custom categories (use `npx code-pushup print-config` to list audits and groups).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/eslint-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Code PushUp plugin for detecting problems in source code using ESLint.📋",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-eslint#readme",
|
|
@@ -38,8 +38,9 @@
|
|
|
38
38
|
},
|
|
39
39
|
"type": "module",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@code-pushup/utils": "0.
|
|
42
|
-
"@code-pushup/models": "0.
|
|
41
|
+
"@code-pushup/utils": "0.58.0",
|
|
42
|
+
"@code-pushup/models": "0.58.0",
|
|
43
|
+
"yargs": "^17.7.2",
|
|
43
44
|
"zod": "^3.22.4"
|
|
44
45
|
},
|
|
45
46
|
"peerDependencies": {
|
package/src/bin.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import process from 'node:process';
|
|
2
|
+
import { Parser } from 'yargs/helpers';
|
|
1
3
|
import { executeRunner } from './lib/runner/index.js';
|
|
2
|
-
|
|
4
|
+
const { runnerConfigPath, runnerOutputPath } = Parser(process.argv);
|
|
5
|
+
await executeRunner({ runnerConfigPath, runnerOutputPath });
|
|
3
6
|
//# sourceMappingURL=bin.js.map
|
package/src/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../../packages/plugin-eslint/src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,aAAa,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../../packages/plugin-eslint/src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC"}
|
package/src/lib/config.d.ts
CHANGED
|
@@ -61,3 +61,62 @@ export type ESLintPluginRunnerConfig = {
|
|
|
61
61
|
targets: ESLintTarget[];
|
|
62
62
|
slugs: string[];
|
|
63
63
|
};
|
|
64
|
+
declare const customGroupSchema: z.ZodObject<{
|
|
65
|
+
slug: z.ZodString;
|
|
66
|
+
title: z.ZodString;
|
|
67
|
+
description: z.ZodOptional<z.ZodString>;
|
|
68
|
+
docsUrl: z.ZodOptional<z.ZodString>;
|
|
69
|
+
rules: z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodNumber>, Record<string, number>, Record<string, number>>]>;
|
|
70
|
+
}, "strip", z.ZodTypeAny, {
|
|
71
|
+
slug: string;
|
|
72
|
+
title: string;
|
|
73
|
+
rules: string[] | Record<string, number>;
|
|
74
|
+
description?: string | undefined;
|
|
75
|
+
docsUrl?: string | undefined;
|
|
76
|
+
}, {
|
|
77
|
+
slug: string;
|
|
78
|
+
title: string;
|
|
79
|
+
rules: string[] | Record<string, number>;
|
|
80
|
+
description?: string | undefined;
|
|
81
|
+
docsUrl?: string | undefined;
|
|
82
|
+
}>;
|
|
83
|
+
export type CustomGroup = z.infer<typeof customGroupSchema>;
|
|
84
|
+
export declare const eslintPluginOptionsSchema: z.ZodObject<{
|
|
85
|
+
groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
86
|
+
slug: z.ZodString;
|
|
87
|
+
title: z.ZodString;
|
|
88
|
+
description: z.ZodOptional<z.ZodString>;
|
|
89
|
+
docsUrl: z.ZodOptional<z.ZodString>;
|
|
90
|
+
rules: z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodNumber>, Record<string, number>, Record<string, number>>]>;
|
|
91
|
+
}, "strip", z.ZodTypeAny, {
|
|
92
|
+
slug: string;
|
|
93
|
+
title: string;
|
|
94
|
+
rules: string[] | Record<string, number>;
|
|
95
|
+
description?: string | undefined;
|
|
96
|
+
docsUrl?: string | undefined;
|
|
97
|
+
}, {
|
|
98
|
+
slug: string;
|
|
99
|
+
title: string;
|
|
100
|
+
rules: string[] | Record<string, number>;
|
|
101
|
+
description?: string | undefined;
|
|
102
|
+
docsUrl?: string | undefined;
|
|
103
|
+
}>, "many">>;
|
|
104
|
+
}, "strip", z.ZodTypeAny, {
|
|
105
|
+
groups?: {
|
|
106
|
+
slug: string;
|
|
107
|
+
title: string;
|
|
108
|
+
rules: string[] | Record<string, number>;
|
|
109
|
+
description?: string | undefined;
|
|
110
|
+
docsUrl?: string | undefined;
|
|
111
|
+
}[] | undefined;
|
|
112
|
+
}, {
|
|
113
|
+
groups?: {
|
|
114
|
+
slug: string;
|
|
115
|
+
title: string;
|
|
116
|
+
rules: string[] | Record<string, number>;
|
|
117
|
+
description?: string | undefined;
|
|
118
|
+
docsUrl?: string | undefined;
|
|
119
|
+
}[] | undefined;
|
|
120
|
+
}>;
|
|
121
|
+
export type ESLintPluginOptions = z.infer<typeof eslintPluginOptionsSchema>;
|
|
122
|
+
export {};
|
package/src/lib/config.js
CHANGED
|
@@ -16,4 +16,25 @@ export const eslintTargetSchema = z
|
|
|
16
16
|
export const eslintPluginConfigSchema = z
|
|
17
17
|
.union([eslintTargetSchema, z.array(eslintTargetSchema).min(1)])
|
|
18
18
|
.transform(toArray);
|
|
19
|
+
const customGroupRulesSchema = z.union([
|
|
20
|
+
z
|
|
21
|
+
.array(z.string())
|
|
22
|
+
.min(1, 'Custom group rules must contain at least 1 element'),
|
|
23
|
+
z.record(z.string(), z.number()).refine(schema => Object.keys(schema).length > 0, () => ({
|
|
24
|
+
code: 'too_small',
|
|
25
|
+
message: 'Custom group rules must contain at least 1 element',
|
|
26
|
+
})),
|
|
27
|
+
], {
|
|
28
|
+
description: 'Array of rule IDs with equal weights or object mapping rule IDs to specific weights',
|
|
29
|
+
});
|
|
30
|
+
const customGroupSchema = z.object({
|
|
31
|
+
slug: z.string({ description: 'Unique group identifier' }),
|
|
32
|
+
title: z.string({ description: 'Group display title' }),
|
|
33
|
+
description: z.string({ description: 'Group metadata' }).optional(),
|
|
34
|
+
docsUrl: z.string({ description: 'Group documentation site' }).optional(),
|
|
35
|
+
rules: customGroupRulesSchema,
|
|
36
|
+
});
|
|
37
|
+
export const eslintPluginOptionsSchema = z.object({
|
|
38
|
+
groups: z.array(customGroupSchema).optional(),
|
|
39
|
+
});
|
|
19
40
|
//# sourceMappingURL=config.js.map
|
package/src/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/plugin-eslint/src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;IACvE,WAAW,EACT,6EAA6E;CAChF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;AAE/E,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,KAAK,CAAC,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;KACjD,SAAS,CACR,CAAC,MAAM,EAAsB,EAAE,CAC7B,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IACjD,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;IACtB,CAAC,CAAC,MAAM,CACb,CAAC;AAGJ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,KAAK,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/D,SAAS,CAAC,OAAO,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/plugin-eslint/src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;IACvE,WAAW,EACT,6EAA6E;CAChF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;AAE/E,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,KAAK,CAAC,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;KACjD,SAAS,CACR,CAAC,MAAM,EAAsB,EAAE,CAC7B,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IACjD,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;IACtB,CAAC,CAAC,MAAM,CACb,CAAC;AAGJ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,KAAK,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/D,SAAS,CAAC,OAAO,CAAC,CAAC;AAQtB,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CACpC;IACE,CAAC;SACE,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,EAAE,oDAAoD,CAAC;IAC/D,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACrC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EACxC,GAAG,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,oDAAoD;KAC9D,CAAC,CACH;CACF,EACD;IACE,WAAW,EACT,qFAAqF;CACxF,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;IAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACvD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzE,KAAK,EAAE,sBAAsB;CAC9B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PluginConfig } from '@code-pushup/models';
|
|
2
|
-
import { type ESLintPluginConfig } from './config.js';
|
|
2
|
+
import { type ESLintPluginConfig, type ESLintPluginOptions } from './config.js';
|
|
3
3
|
/**
|
|
4
4
|
* Instantiates Code PushUp ESLint plugin for use in core config.
|
|
5
5
|
*
|
|
@@ -18,6 +18,7 @@ import { type ESLintPluginConfig } from './config.js';
|
|
|
18
18
|
* }
|
|
19
19
|
*
|
|
20
20
|
* @param config Configuration options.
|
|
21
|
+
* @param options Optional settings for customizing the plugin behavior.
|
|
21
22
|
* @returns Plugin configuration as a promise.
|
|
22
23
|
*/
|
|
23
|
-
export declare function eslintPlugin(config: ESLintPluginConfig): Promise<PluginConfig>;
|
|
24
|
+
export declare function eslintPlugin(config: ESLintPluginConfig, options?: ESLintPluginOptions): Promise<PluginConfig>;
|
package/src/lib/eslint-plugin.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import {
|
|
4
|
+
import { parseSchema } from '@code-pushup/utils';
|
|
5
|
+
import { eslintPluginConfigSchema, eslintPluginOptionsSchema, } from './config.js';
|
|
5
6
|
import { listAuditsAndGroups } from './meta/index.js';
|
|
6
7
|
import { createRunnerConfig } from './runner/index.js';
|
|
7
8
|
/**
|
|
@@ -22,11 +23,19 @@ import { createRunnerConfig } from './runner/index.js';
|
|
|
22
23
|
* }
|
|
23
24
|
*
|
|
24
25
|
* @param config Configuration options.
|
|
26
|
+
* @param options Optional settings for customizing the plugin behavior.
|
|
25
27
|
* @returns Plugin configuration as a promise.
|
|
26
28
|
*/
|
|
27
|
-
export async function eslintPlugin(config) {
|
|
28
|
-
const targets = eslintPluginConfigSchema
|
|
29
|
-
|
|
29
|
+
export async function eslintPlugin(config, options) {
|
|
30
|
+
const targets = parseSchema(eslintPluginConfigSchema, config, {
|
|
31
|
+
schemaType: 'ESLint plugin config',
|
|
32
|
+
});
|
|
33
|
+
const customGroups = options
|
|
34
|
+
? parseSchema(eslintPluginOptionsSchema, options, {
|
|
35
|
+
schemaType: 'ESLint plugin options',
|
|
36
|
+
}).groups
|
|
37
|
+
: undefined;
|
|
38
|
+
const { audits, groups } = await listAuditsAndGroups(targets, customGroups);
|
|
30
39
|
const runnerScriptPath = path.join(fileURLToPath(path.dirname(import.meta.url)), '..', 'bin.js');
|
|
31
40
|
const packageJson = createRequire(import.meta.url)('../../package.json');
|
|
32
41
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint-plugin.js","sourceRoot":"","sources":["../../../../../packages/plugin-eslint/src/lib/eslint-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"eslint-plugin.js","sourceRoot":"","sources":["../../../../../packages/plugin-eslint/src/lib/eslint-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAGL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA0B,EAC1B,OAA6B;IAE7B,MAAM,OAAO,GAAG,WAAW,CAAC,wBAAwB,EAAE,MAAM,EAAE;QAC5D,UAAU,EAAE,sBAAsB;KACnC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO;QAC1B,CAAC,CAAC,WAAW,CAAC,yBAAyB,EAAE,OAAO,EAAE;YAC9C,UAAU,EAAE,uBAAuB;SACpC,CAAC,CAAC,MAAM;QACX,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAI,EACJ,QAAQ,CACT,CAAC;IAEF,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,0DAA0D;QACnE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAE5B,MAAM;QACN,MAAM;QAEN,MAAM,EAAE,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;KACpE,CAAC;AACJ,CAAC"}
|
package/src/lib/meta/groups.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { Group } from '@code-pushup/models';
|
|
2
|
+
import type { CustomGroup } from '../config.js';
|
|
2
3
|
import { type RuleData } from './parse.js';
|
|
3
4
|
export declare function groupsFromRuleTypes(rules: RuleData[]): Group[];
|
|
4
5
|
export declare function groupsFromRuleCategories(rules: RuleData[]): Group[];
|
|
6
|
+
export declare function groupsFromCustomConfig(rules: RuleData[], groups: CustomGroup[]): Group[];
|
|
7
|
+
export declare function createRulesMap(rules: RuleData[]): Record<string, RuleData[]>;
|
|
8
|
+
export declare function resolveGroupRefs(groupRules: Record<string, number>, rulesMap: Record<string, RuleData[]>): {
|
|
9
|
+
refs: Group['refs'];
|
|
10
|
+
invalidRules: string[];
|
|
11
|
+
};
|
package/src/lib/meta/groups.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { objectToKeys, slugify } from '@code-pushup/utils';
|
|
1
|
+
import { objectToKeys, slugify, ui } from '@code-pushup/utils';
|
|
2
2
|
import { ruleToSlug } from './hash.js';
|
|
3
3
|
import { parseRuleId } from './parse.js';
|
|
4
|
+
import { expandWildcardRules } from './rules.js';
|
|
4
5
|
// docs on meta.type: https://eslint.org/docs/latest/extend/custom-rules#rule-structure
|
|
5
6
|
const typeGroups = {
|
|
6
7
|
problem: {
|
|
@@ -61,4 +62,51 @@ export function groupsFromRuleCategories(rules) {
|
|
|
61
62
|
})));
|
|
62
63
|
return groups.toSorted((a, b) => a.slug.localeCompare(b.slug));
|
|
63
64
|
}
|
|
65
|
+
export function groupsFromCustomConfig(rules, groups) {
|
|
66
|
+
const rulesMap = createRulesMap(rules);
|
|
67
|
+
return groups.map(group => {
|
|
68
|
+
const groupRules = Array.isArray(group.rules)
|
|
69
|
+
? Object.fromEntries(group.rules.map(rule => [rule, 1]))
|
|
70
|
+
: group.rules;
|
|
71
|
+
const { refs, invalidRules } = resolveGroupRefs(groupRules, rulesMap);
|
|
72
|
+
if (invalidRules.length > 0 && Object.entries(groupRules).length > 0) {
|
|
73
|
+
if (refs.length === 0) {
|
|
74
|
+
throw new Error(`Invalid rule configuration in group ${group.slug}. All rules are invalid.`);
|
|
75
|
+
}
|
|
76
|
+
ui().logger.warning(`Some rules in group ${group.slug} are invalid: ${invalidRules.join(', ')}`);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
slug: group.slug,
|
|
80
|
+
title: group.title,
|
|
81
|
+
refs,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export function createRulesMap(rules) {
|
|
86
|
+
return rules.reduce((acc, rule) => ({
|
|
87
|
+
...acc,
|
|
88
|
+
[rule.id]: [...(acc[rule.id] || []), rule],
|
|
89
|
+
}), {});
|
|
90
|
+
}
|
|
91
|
+
export function resolveGroupRefs(groupRules, rulesMap) {
|
|
92
|
+
return Object.entries(groupRules).reduce((acc, [rule, weight]) => {
|
|
93
|
+
const matchedRuleIds = rule.endsWith('*')
|
|
94
|
+
? expandWildcardRules(rule, Object.keys(rulesMap))
|
|
95
|
+
: [rule];
|
|
96
|
+
const matchedRefs = matchedRuleIds.flatMap(ruleId => {
|
|
97
|
+
const matchingRules = rulesMap[ruleId] || [];
|
|
98
|
+
const weightPerRule = weight / matchingRules.length;
|
|
99
|
+
return matchingRules.map(ruleData => ({
|
|
100
|
+
slug: ruleToSlug(ruleData),
|
|
101
|
+
weight: weightPerRule,
|
|
102
|
+
}));
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
refs: [...acc.refs, ...matchedRefs],
|
|
106
|
+
invalidRules: matchedRefs.length > 0
|
|
107
|
+
? acc.invalidRules
|
|
108
|
+
: [...acc.invalidRules, rule],
|
|
109
|
+
};
|
|
110
|
+
}, { refs: [], invalidRules: [] });
|
|
111
|
+
}
|
|
64
112
|
//# sourceMappingURL=groups.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/meta/groups.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/meta/groups.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIjD,uFAAuF;AACvF,MAAM,UAAU,GAA0C;IACxD,OAAO,EAAE;QACP,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,mIAAmI;KACtI;IACD,UAAU,EAAE;QACV,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,kGAAkG;KACrG;IACD,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,8JAA8J;KACjK;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE1C,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACZ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI;QACpB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC;YACE,GAAG,GAAG;YACN,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9B,UAAU,CAAC,IAAI,CAAC;aACjB;SACF,EACP,EAAE,CACH,CAAC;IAEF,OAAO,QAAQ;SACZ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,GAAG,UAAU,CAAC,IAAI,CAAC;QACnB,IAAI,EACF,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAY,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,EAAE;KACL,CAAC,CAAC;SACF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAiB;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,yFAAyF;QACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO;YACL,GAAG,GAAG;YACN,CAAC,MAAM,CAAC,EAAE;gBACR,GAAG,GAAG,CAAC,MAAM,CAAC;gBACd,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;aACnE;SACF,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAC5B,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAS,EAAE,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC/C,KAAK,EAAE,GAAG,QAAQ,KAAK,MAAM,GAAG;QAChC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;KAC/C,CAAC,CACH,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAiB,EACjB,MAAqB;IAErB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAEhB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,uCAAuC,KAAK,CAAC,IAAI,0BAA0B,CAC5E,CAAC;YACJ,CAAC;YACD,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CACjB,uBAAuB,KAAK,CAAC,IAAI,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI;SACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,GAAG,GAAG;QACN,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;KAC3C,CAAC,EACF,EAAE,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,UAAkC,EAClC,QAAoC;IAEpC,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAItC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;QACtB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvC,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEX,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;YAEpD,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;gBAC1B,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC;YACnC,YAAY,EACV,WAAW,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,GAAG,CAAC,YAAY;gBAClB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC;SAClC,CAAC;IACJ,CAAC,EACD,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAC/B,CAAC;AACJ,CAAC"}
|
package/src/lib/meta/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Audit, Group } from '@code-pushup/models';
|
|
2
|
-
import type { ESLintTarget } from '../config.js';
|
|
2
|
+
import type { CustomGroup, ESLintTarget } from '../config.js';
|
|
3
3
|
export { ruleIdToSlug } from './hash.js';
|
|
4
4
|
export { detectConfigVersion, type ConfigFormat } from './versions/index.js';
|
|
5
|
-
export declare function listAuditsAndGroups(targets: ESLintTarget[]): Promise<{
|
|
5
|
+
export declare function listAuditsAndGroups(targets: ESLintTarget[], customGroups?: CustomGroup[] | undefined): Promise<{
|
|
6
6
|
audits: Audit[];
|
|
7
7
|
groups: Group[];
|
|
8
8
|
}>;
|
package/src/lib/meta/index.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { groupsFromRuleCategories, groupsFromRuleTypes } from './groups.js';
|
|
1
|
+
import { groupsFromCustomConfig, groupsFromRuleCategories, groupsFromRuleTypes, } from './groups.js';
|
|
2
2
|
import { listRules } from './rules.js';
|
|
3
3
|
import { ruleToAudit } from './transform.js';
|
|
4
4
|
export { ruleIdToSlug } from './hash.js';
|
|
5
5
|
export { detectConfigVersion } from './versions/index.js';
|
|
6
|
-
export async function listAuditsAndGroups(targets) {
|
|
6
|
+
export async function listAuditsAndGroups(targets, customGroups) {
|
|
7
7
|
const rules = await listRules(targets);
|
|
8
|
+
const resolvedCustomGroups = customGroups
|
|
9
|
+
? groupsFromCustomConfig(rules, customGroups)
|
|
10
|
+
: [];
|
|
8
11
|
const audits = rules.map(ruleToAudit);
|
|
9
12
|
const groups = [
|
|
10
13
|
...groupsFromRuleTypes(rules),
|
|
11
14
|
...groupsFromRuleCategories(rules),
|
|
15
|
+
...resolvedCustomGroups,
|
|
12
16
|
];
|
|
13
17
|
return { audits, groups };
|
|
14
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/meta/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/meta/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,YAAwC;IAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,oBAAoB,GAAG,YAAY;QACvC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG;QACb,GAAG,mBAAmB,CAAC,KAAK,CAAC;QAC7B,GAAG,wBAAwB,CAAC,KAAK,CAAC;QAClC,GAAG,oBAAoB;KACxB,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
|
package/src/lib/meta/rules.d.ts
CHANGED
package/src/lib/meta/rules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/meta/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB;IACrD,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,OAAO,CAAC,OAAO,CAAW,EAAE,CAAC,CAAC,CAAC;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAW,MAAM,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa,EAAE,IAAc;IACrD,OAAO;QACL,GAAG,GAAG;QACN,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACT,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;SAC/B;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/meta/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB;IACrD,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,OAAO,CAAC,OAAO,CAAW,EAAE,CAAC,CAAC,CAAC;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAW,MAAM,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa,EAAE,IAAc;IACrD,OAAO;QACL,GAAG,GAAG;QACN,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACT,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,KAAe;IAEf,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import type { Audit, RunnerConfig } from '@code-pushup/models';
|
|
1
|
+
import type { Audit, RunnerConfig, RunnerFilesPaths } from '@code-pushup/models';
|
|
2
2
|
import type { ESLintTarget } from '../config.js';
|
|
3
|
-
export declare
|
|
4
|
-
export declare const RUNNER_OUTPUT_PATH: string;
|
|
5
|
-
export declare const PLUGIN_CONFIG_PATH: string;
|
|
6
|
-
export declare function executeRunner(): Promise<void>;
|
|
3
|
+
export declare function executeRunner({ runnerConfigPath, runnerOutputPath, }: RunnerFilesPaths): Promise<void>;
|
|
7
4
|
export declare function createRunnerConfig(scriptPath: string, audits: Audit[], targets: ESLintTarget[]): Promise<RunnerConfig>;
|
package/src/lib/runner/index.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { writeFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { ensureDirectoryExists, filePathToCliArg,
|
|
3
|
+
import { createRunnerFiles, ensureDirectoryExists, filePathToCliArg, objectToCliArgs, readJsonFile, ui, } from '@code-pushup/utils';
|
|
4
4
|
import { lint } from './lint.js';
|
|
5
5
|
import { lintResultsToAudits, mergeLinterOutputs } from './transform.js';
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export async function executeRunner() {
|
|
10
|
-
const { slugs, targets } = await readJsonFile(PLUGIN_CONFIG_PATH);
|
|
6
|
+
export async function executeRunner({ runnerConfigPath, runnerOutputPath, }) {
|
|
7
|
+
const { slugs, targets } = await readJsonFile(runnerConfigPath);
|
|
8
|
+
ui().logger.log(`ESLint plugin executing ${targets.length} lint targets`);
|
|
11
9
|
const linterOutputs = await targets.reduce(async (acc, target) => [...(await acc), await lint(target)], Promise.resolve([]));
|
|
12
10
|
const lintResults = mergeLinterOutputs(linterOutputs);
|
|
13
11
|
const failedAudits = lintResultsToAudits(lintResults);
|
|
@@ -18,20 +16,23 @@ export async function executeRunner() {
|
|
|
18
16
|
displayValue: 'passed',
|
|
19
17
|
details: { issues: [] },
|
|
20
18
|
});
|
|
21
|
-
await ensureDirectoryExists(path.dirname(
|
|
22
|
-
await writeFile(
|
|
19
|
+
await ensureDirectoryExists(path.dirname(runnerOutputPath));
|
|
20
|
+
await writeFile(runnerOutputPath, JSON.stringify(audits));
|
|
23
21
|
}
|
|
24
22
|
export async function createRunnerConfig(scriptPath, audits, targets) {
|
|
25
23
|
const config = {
|
|
26
24
|
targets,
|
|
27
25
|
slugs: audits.map(audit => audit.slug),
|
|
28
26
|
};
|
|
29
|
-
await
|
|
30
|
-
await writeFile(PLUGIN_CONFIG_PATH, JSON.stringify(config));
|
|
27
|
+
const { runnerConfigPath, runnerOutputPath } = await createRunnerFiles('eslint', JSON.stringify(config));
|
|
31
28
|
return {
|
|
32
29
|
command: 'node',
|
|
33
|
-
args: [
|
|
34
|
-
|
|
30
|
+
args: [
|
|
31
|
+
filePathToCliArg(scriptPath),
|
|
32
|
+
...objectToCliArgs({ runnerConfigPath, runnerOutputPath }),
|
|
33
|
+
],
|
|
34
|
+
configFile: runnerConfigPath,
|
|
35
|
+
outputFile: runnerOutputPath,
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
38
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugin-eslint/src/lib/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,EAAE,GACH,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,gBAAgB,EAChB,gBAAgB,GACC;IACjB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GACtB,MAAM,YAAY,CAA2B,gBAAgB,CAAC,CAAC;IAEjE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,MAAM,eAAe,CAAC,CAAC;IAE1E,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CACxC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,EAC3D,OAAO,CAAC,OAAO,CAAiB,EAAE,CAAC,CACpC,CAAC;IACF,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CACtB,CAAC,IAAI,EAAe,EAAE,CACpB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;QACjD,IAAI;QACJ,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,QAAQ;QACtB,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;KACxB,CACJ,CAAC;IAEF,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,MAAe,EACf,OAAuB;IAEvB,MAAM,MAAM,GAA6B;QACvC,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;KACvC,CAAC;IACF,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CACpE,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE;YACJ,gBAAgB,CAAC,UAAU,CAAC;YAC5B,GAAG,eAAe,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;SAC3D;QACD,UAAU,EAAE,gBAAgB;QAC5B,UAAU,EAAE,gBAAgB;KAC7B,CAAC;AACJ,CAAC"}
|