-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy patheslint-plugin.ts
More file actions
71 lines (64 loc) · 1.95 KB
/
eslint-plugin.ts
File metadata and controls
71 lines (64 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { createRequire } from 'node:module';
import { type PluginConfig, validate } from '@code-pushup/models';
import {
type ESLintPluginConfig,
type ESLintPluginOptions,
eslintPluginConfigSchema,
eslintPluginOptionsSchema,
} from './config.js';
import { ESLINT_PLUGIN_SLUG, ESLINT_PLUGIN_TITLE } from './constants.js';
import { listAuditsAndGroups } from './meta/list.js';
import { createRunnerFunction } from './runner/runner.js';
/**
* Instantiates Code PushUp ESLint plugin for use in core config.
*
* @example
* import eslintPlugin from '@code-pushup/eslint-plugin'
*
* export default {
* // ... core config ...
* plugins: [
* // ... other plugins ...
* await eslintPlugin({
* eslintrc: 'eslint.config.js',
* patterns: ['src', 'test/*.spec.js']
* })
* ]
* }
*
* @param config Configuration options.
* @param options Optional settings for customizing the plugin behavior.
* @returns Plugin configuration as a promise.
*/
export async function eslintPlugin(
config?: ESLintPluginConfig,
options?: ESLintPluginOptions,
): Promise<PluginConfig> {
const targets = validate(eslintPluginConfigSchema, config);
const {
groups: customGroups,
artifacts,
scoreTargets,
} = options ? validate(eslintPluginOptionsSchema, options) : {};
const { audits, groups } = await listAuditsAndGroups(targets, customGroups);
const packageJson = createRequire(import.meta.url)(
'../../package.json',
) as typeof import('../../package.json');
return {
slug: ESLINT_PLUGIN_SLUG,
title: ESLINT_PLUGIN_TITLE,
icon: 'eslint',
description: 'Official Code PushUp ESLint plugin',
docsUrl: 'https://www.npmjs.com/package/@code-pushup/eslint-plugin',
packageName: packageJson.name,
version: packageJson.version,
audits,
groups,
runner: createRunnerFunction({
audits,
targets,
...(artifacts ? { artifacts } : {}),
}),
...(scoreTargets && { scoreTargets }),
};
}