UNPKG

@jimmy.codes/eslint-config

Version:

A simple, modern ESLint config that covers most use cases.

87 lines (86 loc) 2.94 kB
import { GLOB_JS, GLOB_JSX, GLOB_TESTS } from "./globs.mjs"; import { n as extractOptions, t as unwrapDefault } from "./interop-default-CAdBatTA.mjs"; //#region src/rules/typescript.ts const disabledEslintRules = { "no-unused-private-class-members": "off", "no-use-before-define": "off" }; const typescriptRules = (options) => { return { ...disabledEslintRules, "@typescript-eslint/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: false }], "@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "separate-type-imports" }], "@typescript-eslint/no-deprecated": "warn", "@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: { attributes: false } }], "@typescript-eslint/no-unnecessary-type-conversion": "error", "@typescript-eslint/no-unused-private-class-members": "error", "@typescript-eslint/no-unused-vars": ["error", { args: "all", argsIgnorePattern: "^_", caughtErrors: "all", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", ignoreRestSiblings: true, varsIgnorePattern: "^_" }], "@typescript-eslint/no-use-before-define": ["error", { allowNamedExports: false, classes: false, functions: false, variables: true }], "@typescript-eslint/no-useless-empty-export": "error", "@typescript-eslint/restrict-template-expressions": ["error", { allowNumber: true }], "@typescript-eslint/switch-exhaustiveness-check": "error", ...options?.overrides }; }; //#endregion //#region src/configs/typescript.ts async function typescriptConfig(options) { const { configs } = await import("typescript-eslint"); const extractedOptions = extractOptions(options); return [ ...configs.strictTypeChecked, ...configs.stylisticTypeChecked.filter((config) => { return config.name === "typescript-eslint/stylistic-type-checked"; }), { languageOptions: { parserOptions: { projectService: true, tsconfigRootDir: process.cwd() } }, name: "jimmy.codes/typescript", rules: typescriptRules(extractedOptions) }, { files: [GLOB_JS, GLOB_JSX], ...configs.disableTypeChecked, languageOptions: { parserOptions: { program: null, project: false, projectService: false } } }, { files: GLOB_TESTS, name: "jimmy.codes/typescript/testing", rules: { "@typescript-eslint/no-unsafe-argument": "off", "@typescript-eslint/no-unsafe-assignment": "off" } }, ...extractedOptions?.erasableSyntaxOnly ? [{ name: "jimmy.codes/typescript/erasable-syntax-only", plugins: { "erasable-syntax-only": await unwrapDefault(import("eslint-plugin-erasable-syntax-only")) }, rules: { "erasable-syntax-only/enums": "error", "erasable-syntax-only/import-aliases": "error", "erasable-syntax-only/namespaces": "error", "erasable-syntax-only/parameter-properties": "error" } }] : [] ]; } //#endregion export { typescriptConfig as default };