Skip to content

Commit

Permalink
feat(plugin-eslint): validate initializer params with Zod
Browse files Browse the repository at this point in the history
  • Loading branch information
matejchalk committed Oct 9, 2023
1 parent 25bda11 commit 56e1aee
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 11 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"chalk": "^5.3.0",
"cliui": "^8.0.1",
"yargs": "^17.7.2",
"zod": "^3.22.1"
"zod": "^3.22.4"
},
"devDependencies": {
"@commitlint/cli": "^17.7.1",
Expand Down
1 change: 1 addition & 0 deletions packages/plugin-eslint/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "0.0.1",
"dependencies": {
"eslint": "~8.46.0",
"zod": "^3.22.4",
"@code-pushup/models": "*",
"@code-pushup/utils": "*"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-eslint/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ import { eslintPlugin } from './lib/eslint-plugin';

export default eslintPlugin;

export type { ESLintPluginConfig } from './lib/eslint-plugin';
export type { ESLintPluginConfig } from './lib/config';
13 changes: 13 additions & 0 deletions packages/plugin-eslint/src/lib/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { z } from 'zod';

export const eslintPluginConfigSchema = z.object({
eslintrc: z.string({
description: 'Path to .eslintrc.* config file',
}),
patterns: z.union([z.string(), z.array(z.string()).min(1)], {
description:
'Lint target files. May contain file paths, directory paths, or glob patterns',
}),
});

export type ESLintPluginConfig = z.infer<typeof eslintPluginConfigSchema>;
7 changes: 7 additions & 0 deletions packages/plugin-eslint/src/lib/eslint-plugin.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,11 @@ describe('eslintPlugin', () => {
}),
).resolves.toMatchSnapshot();
});

it('should throw when invalid parameters provided', async () => {
await expect(
// @ts-expect-error simulating invalid non-TS config
eslintPlugin({ eslintrc: '.eslintrc.json' }),
).rejects.toThrowError('patterns');
});
});
13 changes: 5 additions & 8 deletions packages/plugin-eslint/src/lib/eslint-plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,14 @@ import { PluginConfig } from '@quality-metrics/models';
import { toArray } from '@quality-metrics/utils';
import { ESLint } from 'eslint';
import { name, version } from '../../package.json';
import { ESLintPluginConfig, eslintPluginConfigSchema } from './config';
import { listAudits } from './meta/audits';

export type ESLintPluginConfig = {
eslintrc: string;
patterns: string | string[];
};
export async function eslintPlugin(
config: ESLintPluginConfig,
): Promise<PluginConfig> {
const { eslintrc, patterns } = eslintPluginConfigSchema.parse(config);

export async function eslintPlugin({
eslintrc,
patterns,
}: ESLintPluginConfig): Promise<PluginConfig> {
const eslint = new ESLint({
useEslintrc: false,
baseConfig: { extends: eslintrc },
Expand Down

0 comments on commit 56e1aee

Please sign in to comment.