Skip to content

Commit 9d3367b

Browse files
committedNov 11, 2024·
Generate plugin schema file (resolves #829)
1 parent 8e6fe9e commit 9d3367b

File tree

4 files changed

+39
-18
lines changed

4 files changed

+39
-18
lines changed
 

‎packages/knip/scripts/generate-plugin-defs.js

+19
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const cc = str => str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (_m, char) => c
99
const pluginsDir = path.resolve('src/plugins');
1010
const outputFileTypes = path.resolve('src/types/PluginNames.ts');
1111
const outputFilePlugins = path.resolve('src/plugins/index.ts');
12+
const outputFileSchema = path.resolve('src/schema/plugins.ts');
1213

1314
const pluginNames = fs
1415
.readdirSync(pluginsDir, { withFileTypes: true })
@@ -28,3 +29,21 @@ const pluginsObj = `export const Plugins = {${pluginNames
2829
.join(EOL)} };`;
2930

3031
fs.writeFileSync(outputFilePlugins, HEADER + EOL + imports + EOL + EOL + pluginsObj);
32+
33+
const pluginSchemas = pluginNames.map(name => `'${name}': pluginSchema`).join(`,${EOL}`);
34+
const pluginSchema = `import { z } from 'zod';
35+
export const globSchema = z.union([z.string(), z.array(z.string())]);
36+
37+
export const pluginSchema = z.union([
38+
z.boolean(),
39+
globSchema,
40+
z.object({
41+
config: globSchema.optional(),
42+
entry: globSchema.optional(),
43+
project: globSchema.optional(),
44+
}),
45+
]);
46+
47+
export const pluginsSchema = z.object({${pluginSchemas}});`;
48+
49+
fs.writeFileSync(outputFileSchema, HEADER + EOL + pluginSchema);

‎packages/knip/src/ConfigurationValidator.ts

+1-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { z } from 'zod';
2-
import { pluginsSchema } from './schema/plugins.js';
3-
4-
const globSchema = z.union([z.string(), z.array(z.string())]);
2+
import { globSchema, pluginsSchema } from './schema/plugins.js';
53

64
const pathsSchema = z.record(z.string(), z.array(z.string()));
75

@@ -68,16 +66,6 @@ const reportConfigSchema = z.object({
6866
exclude: z.array(issueTypeSchema).optional(),
6967
});
7068

71-
export const pluginSchema = z.union([
72-
z.boolean(),
73-
globSchema,
74-
z.object({
75-
config: globSchema.optional(),
76-
entry: globSchema.optional(),
77-
project: globSchema.optional(),
78-
}),
79-
]);
80-
8169
const baseWorkspaceConfigurationSchema = z.object({
8270
entry: globSchema.optional(),
8371
project: globSchema.optional(),

‎packages/knip/src/schema/plugins.ts

+17-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1+
// This file is generated (no need to edit)
12
import { z } from 'zod';
2-
import { pluginSchema } from '../ConfigurationValidator.js';
3+
export const globSchema = z.union([z.string(), z.array(z.string())]);
4+
5+
export const pluginSchema = z.union([
6+
z.boolean(),
7+
globSchema,
8+
z.object({
9+
config: globSchema.optional(),
10+
entry: globSchema.optional(),
11+
project: globSchema.optional(),
12+
}),
13+
]);
314

415
export const pluginsSchema = z.object({
5-
astro: pluginSchema,
616
angular: pluginSchema,
17+
astro: pluginSchema,
718
ava: pluginSchema,
819
babel: pluginSchema,
920
c8: pluginSchema,
@@ -15,10 +26,12 @@ export const pluginsSchema = z.object({
1526
cucumber: pluginSchema,
1627
cypress: pluginSchema,
1728
dotenv: pluginSchema,
29+
drizzle: pluginSchema,
1830
eleventy: pluginSchema,
1931
eslint: pluginSchema,
2032
gatsby: pluginSchema,
2133
'github-actions': pluginSchema,
34+
glob: pluginSchema,
2235
'graphql-codegen': pluginSchema,
2336
husky: pluginSchema,
2437
jest: pluginSchema,
@@ -36,8 +49,8 @@ export const pluginsSchema = z.object({
3649
netlify: pluginSchema,
3750
next: pluginSchema,
3851
node: pluginSchema,
39-
nodemon: pluginSchema,
4052
'node-test-runner': pluginSchema,
53+
nodemon: pluginSchema,
4154
'npm-package-json-lint': pluginSchema,
4255
nuxt: pluginSchema,
4356
nx: pluginSchema,
@@ -75,10 +88,10 @@ export const pluginsSchema = z.object({
7588
unbuild: pluginSchema,
7689
unocss: pluginSchema,
7790
'vercel-og': pluginSchema,
78-
vue: pluginSchema,
7991
vike: pluginSchema,
8092
vite: pluginSchema,
8193
vitest: pluginSchema,
94+
vue: pluginSchema,
8295
'webdriver-io': pluginSchema,
8396
webpack: pluginSchema,
8497
wireit: pluginSchema,

‎packages/knip/src/types/config.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { z } from 'zod';
2-
import type { ConfigurationValidator, pluginSchema } from '../ConfigurationValidator.js';
2+
import type { ConfigurationValidator } from '../ConfigurationValidator.js';
33
import type { AsyncCompilers, SyncCompilers } from '../compilers/types.js';
4+
import type { pluginSchema } from '../schema/plugins.js';
45
import type { Input } from '../util/input.js';
56
import type { PluginName } from './PluginNames.js';
67
import type { Args } from './args.js';

0 commit comments

Comments
 (0)