Skip to content

Commit 56e1aee

Browse files
committed
feat(plugin-eslint): validate initializer params with Zod
1 parent 25bda11 commit 56e1aee

File tree

7 files changed

+29
-11
lines changed

7 files changed

+29
-11
lines changed

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"chalk": "^5.3.0",
1717
"cliui": "^8.0.1",
1818
"yargs": "^17.7.2",
19-
"zod": "^3.22.1"
19+
"zod": "^3.22.4"
2020
},
2121
"devDependencies": {
2222
"@commitlint/cli": "^17.7.1",

packages/plugin-eslint/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"version": "0.0.1",
44
"dependencies": {
55
"eslint": "~8.46.0",
6+
"zod": "^3.22.4",
67
"@code-pushup/models": "*",
78
"@code-pushup/utils": "*"
89
}

packages/plugin-eslint/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ import { eslintPlugin } from './lib/eslint-plugin';
22

33
export default eslintPlugin;
44

5-
export type { ESLintPluginConfig } from './lib/eslint-plugin';
5+
export type { ESLintPluginConfig } from './lib/config';
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { z } from 'zod';
2+
3+
export const eslintPluginConfigSchema = z.object({
4+
eslintrc: z.string({
5+
description: 'Path to .eslintrc.* config file',
6+
}),
7+
patterns: z.union([z.string(), z.array(z.string()).min(1)], {
8+
description:
9+
'Lint target files. May contain file paths, directory paths, or glob patterns',
10+
}),
11+
});
12+
13+
export type ESLintPluginConfig = z.infer<typeof eslintPluginConfigSchema>;

packages/plugin-eslint/src/lib/eslint-plugin.spec.ts

+7
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,11 @@ describe('eslintPlugin', () => {
4141
}),
4242
).resolves.toMatchSnapshot();
4343
});
44+
45+
it('should throw when invalid parameters provided', async () => {
46+
await expect(
47+
// @ts-expect-error simulating invalid non-TS config
48+
eslintPlugin({ eslintrc: '.eslintrc.json' }),
49+
).rejects.toThrowError('patterns');
50+
});
4451
});

packages/plugin-eslint/src/lib/eslint-plugin.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@ import { PluginConfig } from '@quality-metrics/models';
22
import { toArray } from '@quality-metrics/utils';
33
import { ESLint } from 'eslint';
44
import { name, version } from '../../package.json';
5+
import { ESLintPluginConfig, eslintPluginConfigSchema } from './config';
56
import { listAudits } from './meta/audits';
67

7-
export type ESLintPluginConfig = {
8-
eslintrc: string;
9-
patterns: string | string[];
10-
};
8+
export async function eslintPlugin(
9+
config: ESLintPluginConfig,
10+
): Promise<PluginConfig> {
11+
const { eslintrc, patterns } = eslintPluginConfigSchema.parse(config);
1112

12-
export async function eslintPlugin({
13-
eslintrc,
14-
patterns,
15-
}: ESLintPluginConfig): Promise<PluginConfig> {
1613
const eslint = new ESLint({
1714
useEslintrc: false,
1815
baseConfig: { extends: eslintrc },

0 commit comments

Comments
 (0)