types-eslintrc
Version:
Type checking for .eslintrc.json
83 lines • 2.75 kB
JavaScript
import { jsonValueSchema } from "types-json";
import { z } from "zod";
import { esLintEnvironmentSchema } from "./environment.js";
export const fileName = ".eslintrc.json";
const esLintECMAVersionSchema = z.union([
z.literal(3),
z.literal(5),
z.literal(6),
z.literal(7),
z.literal(8),
z.literal(9),
z.literal(10),
z.literal(11),
z.literal(12),
z.literal(13),
z.literal(14),
z.literal(15),
z.literal(2015),
z.literal(2016),
z.literal(2017),
z.literal(2018),
z.literal(2019),
z.literal(2020),
z.literal(2021),
z.literal(2022),
z.literal(2023),
z.literal(2024),
z.literal("latest")
]);
const esLintSeveritySchema = z.union([
z.literal("off"),
z.literal("warn"),
z.literal("error"),
z.literal(0),
z.literal(1),
z.literal(2)
]);
const esLintGlobalPermissionSchema = z.union([
z.literal("readonly"),
z.literal("writable"),
z.literal("off"),
z.literal("readable"),
z.boolean()
]);
const esLintRuleSchema = z.union([
esLintSeveritySchema,
z.tuple([esLintSeveritySchema]).rest(jsonValueSchema)
]);
export const schema = z.object({
$schema: z.string().optional(),
env: esLintEnvironmentSchema.optional(),
extends: z.union([z.string(), z.array(z.string())]).optional(),
globals: z.record(esLintGlobalPermissionSchema).optional(),
noInlineConfig: z.boolean().optional(),
ignorePatterns: z.array(z.string()).optional(),
overrides: z.array(z.object({
excludedFiles: z.union([z.string(), z.array(z.string())]).optional(),
files: z.union([z.string(), z.array(z.string())])
}).and(z.lazy(() => schema))).optional(),
parser: z.union([z.literal("esprima"), z.literal("@babel/eslint-parser"), z.literal("@typescript-eslint/parser"), z.string()]).optional(),
parserOptions: z.object({
ecmaVersion: esLintECMAVersionSchema.optional(),
sourceType: z.union([z.literal("script"), z.literal("module")]).optional(),
ecmaFeatures: z.object({
globalReturn: z.boolean().optional(),
impliedStrict: z.boolean().optional(),
jsx: z.boolean().optional(),
experimentalObjectRestSpread: z.boolean().optional()
}).optional()
}).optional(),
plugins: z.array(z.string()).optional(),
processor: z.string().optional(),
reportUnusedDisableDirectives: z.boolean().optional(),
rules: z.record(esLintRuleSchema).optional(),
settings: z.record(z.any()).optional()
}).strict();
export function isESLintConfig(value) {
return schema.safeParse(value).success;
}
export function parseESLintConfig(value) {
return isESLintConfig(value) ? value : undefined;
}
//# sourceMappingURL=index.js.map