@code-pushup/eslint-plugin 0.100.1 → 0.101.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 +44 -27
- package/package.json +3 -3
- package/src/lib/config.d.ts +12 -10
- package/src/lib/config.js +13 -4
- package/src/lib/config.js.map +1 -1
- package/src/lib/eslint-plugin.d.ts +2 -2
- package/src/lib/eslint-plugin.js +1 -1
- package/src/lib/eslint-plugin.js.map +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ Detected ESLint rules are mapped to Code PushUp audits. Audit reports are calcul
|
|
|
43
43
|
|
|
44
44
|
4. Add this plugin to the `plugins` array in your Code PushUp CLI config file (e.g. `code-pushup.config.js`).
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
The simplest configuration uses default settings and lints the current directory:
|
|
47
47
|
|
|
48
48
|
```js
|
|
49
49
|
import eslintPlugin from '@code-pushup/eslint-plugin';
|
|
@@ -52,7 +52,21 @@ Detected ESLint rules are mapped to Code PushUp audits. Audit reports are calcul
|
|
|
52
52
|
// ...
|
|
53
53
|
plugins: [
|
|
54
54
|
// ...
|
|
55
|
-
await eslintPlugin(
|
|
55
|
+
await eslintPlugin(),
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
You can optionally specify a custom ESLint config file and/or glob patterns for target files (relative to `process.cwd()`):
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
import eslintPlugin from '@code-pushup/eslint-plugin';
|
|
64
|
+
|
|
65
|
+
export default {
|
|
66
|
+
// ...
|
|
67
|
+
plugins: [
|
|
68
|
+
// ...
|
|
69
|
+
await eslintPlugin({ eslintrc: './eslint.config.js', patterns: ['src/**/*.js'] }),
|
|
56
70
|
],
|
|
57
71
|
};
|
|
58
72
|
```
|
|
@@ -105,7 +119,7 @@ export default {
|
|
|
105
119
|
plugins: [
|
|
106
120
|
// ...
|
|
107
121
|
await eslintPlugin(
|
|
108
|
-
{ eslintrc: '.
|
|
122
|
+
{ eslintrc: 'eslint.config.js', patterns: ['src/**/*.js'] },
|
|
109
123
|
{
|
|
110
124
|
groups: [
|
|
111
125
|
{
|
|
@@ -239,19 +253,13 @@ The artifacts feature supports loading ESLint JSON reports that follow the stand
|
|
|
239
253
|
|
|
240
254
|
### Basic artifact configuration
|
|
241
255
|
|
|
242
|
-
Specify the path(s) to your ESLint JSON report files:
|
|
256
|
+
Specify the path(s) to your ESLint JSON report files in the artifacts option. If you don't need custom lint patterns, pass an empty object as the first parameter:
|
|
243
257
|
|
|
244
258
|
```js
|
|
245
259
|
import eslintPlugin from '@code-pushup/eslint-plugin';
|
|
246
260
|
|
|
247
261
|
export default {
|
|
248
|
-
plugins: [
|
|
249
|
-
await eslintPlugin({
|
|
250
|
-
artifacts: {
|
|
251
|
-
artifactsPaths: './eslint-report.json',
|
|
252
|
-
},
|
|
253
|
-
}),
|
|
254
|
-
],
|
|
262
|
+
plugins: [await eslintPlugin({}, { artifacts: { artifactsPaths: './eslint-report.json' } })],
|
|
255
263
|
};
|
|
256
264
|
```
|
|
257
265
|
|
|
@@ -262,11 +270,14 @@ Use glob patterns to aggregate results from multiple files:
|
|
|
262
270
|
```js
|
|
263
271
|
export default {
|
|
264
272
|
plugins: [
|
|
265
|
-
await eslintPlugin(
|
|
266
|
-
|
|
267
|
-
|
|
273
|
+
await eslintPlugin(
|
|
274
|
+
{},
|
|
275
|
+
{
|
|
276
|
+
artifacts: {
|
|
277
|
+
artifactsPaths: ['packages/**/eslint-report.json', 'apps/**/.eslint/*.json'],
|
|
278
|
+
},
|
|
268
279
|
},
|
|
269
|
-
|
|
280
|
+
),
|
|
270
281
|
],
|
|
271
282
|
};
|
|
272
283
|
```
|
|
@@ -278,12 +289,15 @@ If you need to generate the artifacts before loading them, use the `generateArti
|
|
|
278
289
|
```js
|
|
279
290
|
export default {
|
|
280
291
|
plugins: [
|
|
281
|
-
await eslintPlugin(
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
292
|
+
await eslintPlugin(
|
|
293
|
+
{},
|
|
294
|
+
{
|
|
295
|
+
artifacts: {
|
|
296
|
+
generateArtifactsCommand: 'npm run lint:report',
|
|
297
|
+
artifactsPaths: './eslint-report.json',
|
|
298
|
+
},
|
|
285
299
|
},
|
|
286
|
-
|
|
300
|
+
),
|
|
287
301
|
],
|
|
288
302
|
};
|
|
289
303
|
```
|
|
@@ -293,15 +307,18 @@ You can also specify the command with arguments:
|
|
|
293
307
|
```js
|
|
294
308
|
export default {
|
|
295
309
|
plugins: [
|
|
296
|
-
await eslintPlugin(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
310
|
+
await eslintPlugin(
|
|
311
|
+
{},
|
|
312
|
+
{
|
|
313
|
+
artifacts: {
|
|
314
|
+
generateArtifactsCommand: {
|
|
315
|
+
command: 'eslint',
|
|
316
|
+
args: ['src/**/*.{js,ts}', '--format=json', '--output-file=eslint-report.json'],
|
|
317
|
+
},
|
|
318
|
+
artifactsPaths: './eslint-report.json',
|
|
301
319
|
},
|
|
302
|
-
artifactsPaths: './eslint-report.json',
|
|
303
320
|
},
|
|
304
|
-
|
|
321
|
+
),
|
|
305
322
|
],
|
|
306
323
|
};
|
|
307
324
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/eslint-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.101.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",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"ansis": "^3.3.2",
|
|
42
42
|
"glob": "^11.0.0",
|
|
43
|
-
"@code-pushup/utils": "0.
|
|
44
|
-
"@code-pushup/models": "0.
|
|
43
|
+
"@code-pushup/utils": "0.101.0",
|
|
44
|
+
"@code-pushup/models": "0.101.0",
|
|
45
45
|
"zod": "^4.0.5"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
package/src/lib/config.d.ts
CHANGED
|
@@ -1,34 +1,36 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/** Transforms string/array patterns into normalized object format. */
|
|
2
3
|
export declare const eslintTargetSchema: z.ZodPipe<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodObject<{
|
|
3
4
|
eslintrc: z.ZodOptional<z.ZodString>;
|
|
4
|
-
patterns: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]
|
|
5
|
+
patterns: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
|
|
5
6
|
}, z.core.$strip>]>, z.ZodTransform<{
|
|
6
7
|
patterns: string | string[];
|
|
7
8
|
eslintrc?: string | undefined;
|
|
8
|
-
}, string | {
|
|
9
|
+
}, string | string[] | {
|
|
9
10
|
patterns: string | string[];
|
|
10
11
|
eslintrc?: string | undefined;
|
|
11
|
-
}
|
|
12
|
+
}>>;
|
|
12
13
|
export type ESLintTarget = z.infer<typeof eslintTargetSchema>;
|
|
13
|
-
|
|
14
|
+
/** First parameter of {@link eslintPlugin}. Defaults to current directory. */
|
|
15
|
+
export declare const eslintPluginConfigSchema: z.ZodPipe<z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodObject<{
|
|
14
16
|
eslintrc: z.ZodOptional<z.ZodString>;
|
|
15
|
-
patterns: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]
|
|
17
|
+
patterns: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
|
|
16
18
|
}, z.core.$strip>]>, z.ZodTransform<{
|
|
17
19
|
patterns: string | string[];
|
|
18
20
|
eslintrc?: string | undefined;
|
|
19
|
-
}, string | {
|
|
21
|
+
}, string | string[] | {
|
|
20
22
|
patterns: string | string[];
|
|
21
23
|
eslintrc?: string | undefined;
|
|
22
|
-
}
|
|
24
|
+
}>>, z.ZodArray<z.ZodPipe<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodObject<{
|
|
23
25
|
eslintrc: z.ZodOptional<z.ZodString>;
|
|
24
|
-
patterns: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]
|
|
26
|
+
patterns: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
|
|
25
27
|
}, z.core.$strip>]>, z.ZodTransform<{
|
|
26
28
|
patterns: string | string[];
|
|
27
29
|
eslintrc?: string | undefined;
|
|
28
|
-
}, string | {
|
|
30
|
+
}, string | string[] | {
|
|
29
31
|
patterns: string | string[];
|
|
30
32
|
eslintrc?: string | undefined;
|
|
31
|
-
}
|
|
33
|
+
}>>>]>>>, z.ZodTransform<{
|
|
32
34
|
patterns: string | string[];
|
|
33
35
|
eslintrc?: string | undefined;
|
|
34
36
|
}[], {
|
package/src/lib/config.js
CHANGED
|
@@ -7,20 +7,29 @@ const patternsSchema = z.union([z.string(), z.array(z.string()).min(1)]).meta({
|
|
|
7
7
|
const eslintrcSchema = z
|
|
8
8
|
.string()
|
|
9
9
|
.meta({ description: 'Path to ESLint config file' });
|
|
10
|
-
const eslintTargetObjectSchema = z
|
|
10
|
+
const eslintTargetObjectSchema = z
|
|
11
|
+
.object({
|
|
11
12
|
eslintrc: eslintrcSchema.optional(),
|
|
12
|
-
patterns: patternsSchema,
|
|
13
|
-
})
|
|
13
|
+
patterns: patternsSchema.optional().default('.'),
|
|
14
|
+
})
|
|
15
|
+
.meta({ title: 'ESLintTargetObject' });
|
|
16
|
+
/** Transforms string/array patterns into normalized object format. */
|
|
14
17
|
export const eslintTargetSchema = z
|
|
15
18
|
.union([patternsSchema, eslintTargetObjectSchema])
|
|
16
19
|
.transform((target) => typeof target === 'string' || Array.isArray(target)
|
|
17
20
|
? { patterns: target }
|
|
18
21
|
: target)
|
|
19
22
|
.meta({ title: 'ESLintTarget' });
|
|
23
|
+
/** First parameter of {@link eslintPlugin}. Defaults to current directory. */
|
|
20
24
|
export const eslintPluginConfigSchema = z
|
|
21
25
|
.union([eslintTargetSchema, z.array(eslintTargetSchema).min(1)])
|
|
26
|
+
.optional()
|
|
27
|
+
.default({ patterns: '.' })
|
|
22
28
|
.transform(toArray)
|
|
23
|
-
.meta({
|
|
29
|
+
.meta({
|
|
30
|
+
title: 'ESLintPluginConfig',
|
|
31
|
+
description: 'Optional configuration, defaults to linting current directory',
|
|
32
|
+
});
|
|
24
33
|
const customGroupRulesSchema = z
|
|
25
34
|
.union([
|
|
26
35
|
z
|
package/src/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,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,CAAC,CAAC,IAAI,CAAC;IAC5E,WAAW,EACT,6EAA6E;CAChF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,EAAE;KACR,IAAI,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;AAEvD,MAAM,wBAAwB,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { type ESLintPluginConfig, type ESLintPluginOptions } from './config.js';
|
|
|
11
11
|
* plugins: [
|
|
12
12
|
* // ... other plugins ...
|
|
13
13
|
* await eslintPlugin({
|
|
14
|
-
* eslintrc: '.
|
|
14
|
+
* eslintrc: 'eslint.config.js',
|
|
15
15
|
* patterns: ['src', 'test/*.spec.js']
|
|
16
16
|
* })
|
|
17
17
|
* ]
|
|
@@ -21,4 +21,4 @@ import { type ESLintPluginConfig, type ESLintPluginOptions } from './config.js';
|
|
|
21
21
|
* @param options Optional settings for customizing the plugin behavior.
|
|
22
22
|
* @returns Plugin configuration as a promise.
|
|
23
23
|
*/
|
|
24
|
-
export declare function eslintPlugin(config
|
|
24
|
+
export declare function eslintPlugin(config?: ESLintPluginConfig, options?: ESLintPluginOptions): Promise<PluginConfig>;
|
package/src/lib/eslint-plugin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint-plugin.js","sourceRoot":"","sources":["../../../src/lib/eslint-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAqB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,
|
|
1
|
+
{"version":3,"file":"eslint-plugin.js","sourceRoot":"","sources":["../../../src/lib/eslint-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAqB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA2B,EAC3B,OAA6B;IAE7B,MAAM,OAAO,GAAG,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,EACJ,MAAM,EAAE,YAAY,EACpB,SAAS,EACT,YAAY,GACb,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,mBAAmB;QAC1B,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,oBAAoB,CAAC;YAC3B,MAAM;YACN,OAAO;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC;QACF,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
|