Skip to content

Commit

Permalink
Generate plugin schema file (resolves #829)
Browse files Browse the repository at this point in the history
  • Loading branch information
webpro committed Nov 11, 2024
1 parent 8e6fe9e commit 9d3367b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 18 deletions.
19 changes: 19 additions & 0 deletions packages/knip/scripts/generate-plugin-defs.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const cc = str => str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (_m, char) => c
const pluginsDir = path.resolve('src/plugins');
const outputFileTypes = path.resolve('src/types/PluginNames.ts');
const outputFilePlugins = path.resolve('src/plugins/index.ts');
const outputFileSchema = path.resolve('src/schema/plugins.ts');

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

fs.writeFileSync(outputFilePlugins, HEADER + EOL + imports + EOL + EOL + pluginsObj);

const pluginSchemas = pluginNames.map(name => `'${name}': pluginSchema`).join(`,${EOL}`);
const pluginSchema = `import { z } from 'zod';
export const globSchema = z.union([z.string(), z.array(z.string())]);
export const pluginSchema = z.union([
z.boolean(),
globSchema,
z.object({
config: globSchema.optional(),
entry: globSchema.optional(),
project: globSchema.optional(),
}),
]);
export const pluginsSchema = z.object({${pluginSchemas}});`;

fs.writeFileSync(outputFileSchema, HEADER + EOL + pluginSchema);
14 changes: 1 addition & 13 deletions packages/knip/src/ConfigurationValidator.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { z } from 'zod';
import { pluginsSchema } from './schema/plugins.js';

const globSchema = z.union([z.string(), z.array(z.string())]);
import { globSchema, pluginsSchema } from './schema/plugins.js';

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

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

export const pluginSchema = z.union([
z.boolean(),
globSchema,
z.object({
config: globSchema.optional(),
entry: globSchema.optional(),
project: globSchema.optional(),
}),
]);

const baseWorkspaceConfigurationSchema = z.object({
entry: globSchema.optional(),
project: globSchema.optional(),
Expand Down
21 changes: 17 additions & 4 deletions packages/knip/src/schema/plugins.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
// This file is generated (no need to edit)
import { z } from 'zod';
import { pluginSchema } from '../ConfigurationValidator.js';
export const globSchema = z.union([z.string(), z.array(z.string())]);

export const pluginSchema = z.union([
z.boolean(),
globSchema,
z.object({
config: globSchema.optional(),
entry: globSchema.optional(),
project: globSchema.optional(),
}),
]);

export const pluginsSchema = z.object({
astro: pluginSchema,
angular: pluginSchema,
astro: pluginSchema,
ava: pluginSchema,
babel: pluginSchema,
c8: pluginSchema,
Expand All @@ -15,10 +26,12 @@ export const pluginsSchema = z.object({
cucumber: pluginSchema,
cypress: pluginSchema,
dotenv: pluginSchema,
drizzle: pluginSchema,
eleventy: pluginSchema,
eslint: pluginSchema,
gatsby: pluginSchema,
'github-actions': pluginSchema,
glob: pluginSchema,
'graphql-codegen': pluginSchema,
husky: pluginSchema,
jest: pluginSchema,
Expand All @@ -36,8 +49,8 @@ export const pluginsSchema = z.object({
netlify: pluginSchema,
next: pluginSchema,
node: pluginSchema,
nodemon: pluginSchema,
'node-test-runner': pluginSchema,
nodemon: pluginSchema,
'npm-package-json-lint': pluginSchema,
nuxt: pluginSchema,
nx: pluginSchema,
Expand Down Expand Up @@ -75,10 +88,10 @@ export const pluginsSchema = z.object({
unbuild: pluginSchema,
unocss: pluginSchema,
'vercel-og': pluginSchema,
vue: pluginSchema,
vike: pluginSchema,
vite: pluginSchema,
vitest: pluginSchema,
vue: pluginSchema,
'webdriver-io': pluginSchema,
webpack: pluginSchema,
wireit: pluginSchema,
Expand Down
3 changes: 2 additions & 1 deletion packages/knip/src/types/config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { z } from 'zod';
import type { ConfigurationValidator, pluginSchema } from '../ConfigurationValidator.js';
import type { ConfigurationValidator } from '../ConfigurationValidator.js';
import type { AsyncCompilers, SyncCompilers } from '../compilers/types.js';
import type { pluginSchema } from '../schema/plugins.js';
import type { Input } from '../util/input.js';
import type { PluginName } from './PluginNames.js';
import type { Args } from './args.js';
Expand Down

0 comments on commit 9d3367b

Please sign in to comment.