@directus/eslint-config
Version:
Shared ESLint config used in Directus projects
2 lines (1 loc) • 20.7 kB
JavaScript
import{FlatConfigComposer as Me}from"eslint-flat-config-utils";import pe from"eslint-plugin-command/config";function C(){let e=pe();return{name:"directus/command",plugins:e.plugins,rules:e.rules}}var c="?(c|m)[jt]s",l=`**/*.${c}`,j="**/*.?(c|m)ts",a="**/*.vue",u="**/*.json?(c|5)",f="**/*.y?(a)ml",d="**/*.toml",p="**/*.md",O="**/*.{c,sc}ss",I="**/*.html",h="**/*.{g,graph}ql",o=[l,a],k=[u,f,d],_=[`**/__tests__/**/*.${c}`,`**/*.spec.${c}`,`**/*.test.${c}`],L=["**/node_modules","**/dist","**/package-lock.json","**/pnpm-lock.yaml","**/output","**/coverage","**/temp","**/.temp","**/tmp","**/.tmp","**/.history","**/.vitepress/cache","**/.nuxt","**/.vercel","**/.changeset","**/.idea","**/.cache","**/.output","**/.vite-inspect","**/vite.config.*.timestamp-*","**/__snapshots__","**/auto-import?(s).d.ts","**/components.d.ts"];function F(){return[{name:"directus/disables/scripts",files:[`**/scripts/${l}`],rules:{"no-console":"off"}}]}import*as ye from"eslint-parser-plain";import{fileURLToPath as le}from"node:url";import{messages as ce,reportDifferences as me}from"eslint-formatting-reporter";import{createSyncFn as ue}from"synckit";var fe=!1,g,de={meta:{type:"layout",docs:{description:"Use dprint to format code",url:"https://dprint.dev"},fixable:"whitespace",schema:[{type:"object",properties:{languageOptions:{type:"object"}},additionalProperties:!0}],messages:ce},create(e){return g||(g=ue(le(new URL("worker.js",import.meta.url)),{...fe&&{tsRunner:"tsx"}})),{Program(){let r=e.sourceCode.text;try{let t=g(r,e.filename,e.options[0]||{});me(e,r,t)}catch(t){e.report({loc:{start:{line:1,column:0},end:{line:1,column:0}},message:`Failed to format the code: ${t}`})}}}}},S=de;var ge={meta:{name:"dprint"},rules:{dprint:S}},E=ge;function T(){let e={useTabs:!0,lineWidth:120};return[{name:"directus/dprint",plugins:{dprint:E}},r("html",[I],{whitespaceSensitivity:"ignore",formatComments:!0}),r("style",[O],{quotes:"preferSingle",formatComments:!0}),r("markdown",[p],{textWrap:"always"}),r("graphql",[h],{formatComments:!0})];function r(t,m,w){let ae={...e,...w&&{languageOptions:w}};return{name:`directus/dprint/${t}`,files:m,languageOptions:{parser:ye},rules:{"dprint/dprint":["error",ae]}}}}import D from"@eslint-community/eslint-plugin-eslint-comments";function P(){return{name:"directus/eslint-comments",plugins:{"@eslint-community/eslint-comments":D},rules:D.configs.recommended.rules}}import ve from"eslint-config-flat-gitignore";function G(){let{ignores:e}=ve({strict:!1});return{name:"directus/ignores",ignores:[...e,...L]}}import xe from"eslint-plugin-import-x";function B(){return[{name:"directus/imports",files:o,plugins:{"import-x":xe},rules:{"import-x/first":"error","import-x/consistent-type-specifier-style":["error","prefer-top-level"],"import-x/no-duplicates":"error","import-x/no-mutable-exports":"error","import-x/no-named-as-default":"error","import-x/no-self-import":"error"}},{name:"directus/imports/vue",files:[a],rules:{"import-x/first":"off"}}]}import be from"@eslint/js";import we from"eslint-plugin-unused-imports";import y from"globals";function R(){return{name:"directus/javascript",files:o,languageOptions:{ecmaVersion:2023,globals:{...y.browser,...y.es2023,...y.node}},plugins:{"unused-imports":we},rules:{...be.configs.recommended.rules,"accessor-pairs":["error",{enforceForClassMembers:!0,setWithoutGet:!0}],"array-callback-return":"error","block-scoped-var":"error","default-case-last":"error",eqeqeq:["error","smart"],"new-cap":["error",{capIsNew:!1,newIsCap:!0,properties:!0}],"no-alert":"error","no-array-constructor":"error","no-caller":"error","no-console":["error",{allow:["warn","error"]}],"no-empty":["error",{allowEmptyCatch:!0}],"no-eval":"error","no-extend-native":"error","no-extra-bind":"error","no-implied-eval":"error","no-iterator":"error","no-labels":["error",{allowLoop:!1,allowSwitch:!1}],"no-lone-blocks":"error","no-multi-str":"error","no-new":"error","no-new-func":"error","no-new-wrappers":"error","no-octal-escape":"error","no-proto":"error","no-restricted-globals":["error",{message:"Use `globalThis` instead.",name:"global"},{message:"Use `globalThis` instead.",name:"self"}],"no-restricted-properties":["error",{message:"Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.",property:"__proto__"},{message:"Use `Object.defineProperty` instead.",property:"__defineGetter__"},{message:"Use `Object.defineProperty` instead.",property:"__defineSetter__"},{message:"Use `Object.getOwnPropertyDescriptor` instead.",property:"__lookupGetter__"},{message:"Use `Object.getOwnPropertyDescriptor` instead.",property:"__lookupSetter__"}],"no-restricted-syntax":["error","TSEnumDeclaration[const=true]","TSExportAssignment"],"no-self-compare":"error","no-sequences":"error","no-template-curly-in-string":"error","no-throw-literal":"error","no-undef-init":"error","no-unmodified-loop-condition":"error","no-unneeded-ternary":["error",{defaultAssignment:!1}],"no-unreachable-loop":"error","no-unused-expressions":["error",{allowShortCircuit:!0,allowTaggedTemplates:!0,allowTernary:!0}],"no-use-before-define":["error",{classes:!1,functions:!1,variables:!0}],"no-useless-call":"error","no-useless-computed-key":"error","no-useless-constructor":"error","no-useless-rename":"error","no-useless-return":"error","no-var":"error","object-shorthand":["error","always",{avoidQuotes:!0,ignoreConstructors:!1}],"one-var":["error",{initialized:"never"}],"prefer-arrow-callback":["error",{allowNamedFunctions:!1,allowUnboundThis:!0}],"prefer-const":[n?"warn":"error",{destructuring:"all",ignoreReadBeforeAssign:!0}],"prefer-exponentiation-operator":"error","prefer-promise-reject-errors":"error","prefer-regex-literals":["error",{disallowRedundantWrapping:!0}],"prefer-rest-params":"error","prefer-spread":"error","prefer-template":"error","symbol-description":"error","unicode-bom":["error","never"],"use-isnan":["error",{enforceForIndexOf:!0,enforceForSwitchCase:!0}],"valid-typeof":["error",{requireStringLiterals:!0}],"vars-on-top":"error",yoda:["error","never"],"no-unused-vars":"off","unused-imports/no-unused-imports":n?"warn":"error","unused-imports/no-unused-vars":["error",{args:"after-used",argsIgnorePattern:"^_",ignoreRestSiblings:!0,vars:"all",varsIgnorePattern:"^_"}]}}}import Ce from"eslint-plugin-jsdoc";function M(){return{name:"directus/jsdoc",files:o,plugins:{jsdoc:Ce},rules:{"jsdoc/check-access":"warn","jsdoc/check-param-names":"warn","jsdoc/check-property-names":"warn","jsdoc/check-types":"warn","jsdoc/empty-tags":"warn","jsdoc/implements-on-classes":"warn","jsdoc/no-defaults":"warn","jsdoc/no-multi-asterisks":"warn","jsdoc/require-param-name":"warn","jsdoc/require-property":"warn","jsdoc/require-property-description":"warn","jsdoc/require-property-name":"warn","jsdoc/require-returns-check":"warn","jsdoc/require-returns-description":"warn","jsdoc/require-yields-check":"warn","jsdoc/check-alignment":"warn","jsdoc/multiline-blocks":"warn"}}}import q from"eslint-plugin-jsonc";import Oe from"jsonc-eslint-parser";import s from"node:process";function U(){return s.env.CI||je()?!1:!!(s.env.VSCODE_PID||s.env.VSCODE_CWD||s.env.JETBRAINS_IDE||s.env.VIM||s.env.NVIM)}function je(){return!!(s.env.GIT_PARAMS||s.env.VSCODE_GIT_COMMAND)}function i(e){let r={};for(let t of e)Object.assign(r,t.rules);return r}function A(){return[{name:"directus/jsonc",files:[u],plugins:{jsonc:q},languageOptions:{parser:Oe},rules:{...i(q.configs["flat/recommended-with-jsonc"]),"jsonc/no-octal-escape":"error","jsonc/array-bracket-spacing":["error","never"],"jsonc/comma-dangle":["error","never"],"jsonc/comma-style":["error","last"],"jsonc/indent":["error","tab"],"jsonc/key-spacing":["error",{afterColon:!0,beforeColon:!1}],"jsonc/object-curly-newline":["error",{consistent:!0,multiline:!0}],"jsonc/object-curly-spacing":["error","always"],"jsonc/object-property-newline":["error",{allowMultiplePropertiesPerLine:!0}]}}]}import Ie from"@eslint/markdown";import{mergeProcessors as he,processorPassThrough as ke}from"eslint-merge-processors";import*as _e from"eslint-parser-plain";function N(){let e=[p],r=`${p}/*.md`,t=o.map(m=>`${p}/${m}`);return[{name:"directus/markdown/processor",files:e,ignores:[r],processor:he([Ie.processors.markdown,ke])},{name:"directus/markdown/parser",files:e,languageOptions:{parser:_e}},{name:"directus/markdown/code-blocks",files:t,languageOptions:{parserOptions:{ecmaFeatures:{impliedStrict:!0}}},rules:{"no-alert":"off","no-console":"off","no-labels":"off","no-lone-blocks":"off","no-restricted-syntax":"off","no-undef":"off","no-unused-expressions":"off","no-unused-labels":"off","unicode-bom":"off","unused-imports/no-unused-imports":"off","unused-imports/no-unused-vars":"off","n/prefer-global/process":"off","@stylistic/comma-dangle":"off","@stylistic/eol-last":"off","@typescript-eslint/consistent-type-imports":"off","@typescript-eslint/explicit-function-return-type":"off","@typescript-eslint/no-namespace":"off","@typescript-eslint/no-redeclare":"off","@typescript-eslint/no-require-imports":"off","@typescript-eslint/no-unused-expressions":"off","@typescript-eslint/no-unused-vars":"off","@typescript-eslint/no-use-before-define":"off"}}]}import Le from"eslint-plugin-n";function J(){return{name:"directus/node",files:[l],plugins:{n:Le},rules:{"n/handle-callback-err":["error","^(err|error)$"],"n/no-deprecated-api":"error","n/no-exports-assign":"error","n/no-new-require":"error","n/no-path-concat":"error","n/prefer-global/buffer":["error","never"],"n/prefer-global/process":["error","never"],"n/process-exit-as-throw":"error"}}}import Fe from"eslint-plugin-perfectionist";function V(){return{name:"directus/perfectionist",files:o,plugins:{perfectionist:Fe},rules:{"perfectionist/sort-exports":["error",{order:"asc",type:"natural"}],"perfectionist/sort-imports":["error",{groups:["type",["parent-type","sibling-type","index-type","internal-type"],"builtin","external","internal",["parent","sibling","index"],"side-effect","object","unknown"],newlinesBetween:"ignore",order:"asc",type:"natural"}],"perfectionist/sort-named-exports":["error",{order:"asc",type:"natural"}],"perfectionist/sort-named-imports":["error",{order:"asc",type:"natural"}]}}}import*as v from"eslint-plugin-regexp";function $(){return{name:"directus/regexp",files:o,plugins:{regexp:v},rules:v.configs["flat/recommended"].rules}}function W(){return{name:"directus/sort/package.json",files:["**/package.json"],rules:{"jsonc/sort-keys":["error",{order:["name","type","version","private","packageManager","description","author","contributors","license","funding","homepage","repository","bugs","keywords","sideEffects","exports","main","module","types","bin","files","engines","scripts","peerDependencies","peerDependenciesMeta","dependencies","optionalDependencies","devDependencies","pnpm"],pathPattern:"^$"},{order:{type:"asc"},pathPattern:"^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$"},{order:{type:"asc"},pathPattern:"^pnpm.overrides$"},{order:["types","import","require","default"],pathPattern:"^exports.*$"}],"jsonc/sort-array-values":["error",{order:{type:"asc"},pathPattern:"^files$"}]}}}function H(){return{name:"directus/sort/tsconfig.json",files:["**/tsconfig.json","**/tsconfig.*.json"],rules:{"jsonc/sort-keys":["error",{order:["extends","compilerOptions","references","files","include","exclude"],pathPattern:"^$"},{order:["incremental","composite","tsBuildInfoFile","disableSourceOfProjectReferenceRedirect","disableSolutionSearching","disableReferencedProjectLoad","target","jsx","jsxFactory","jsxFragmentFactory","jsxImportSource","lib","moduleDetection","noLib","reactNamespace","useDefineForClassFields","emitDecoratorMetadata","experimentalDecorators","baseUrl","rootDir","rootDirs","customConditions","module","moduleResolution","moduleSuffixes","noResolve","paths","resolveJsonModule","resolvePackageJsonExports","resolvePackageJsonImports","typeRoots","types","allowArbitraryExtensions","allowImportingTsExtensions","allowUmdGlobalAccess","allowJs","checkJs","maxNodeModuleJsDepth","strict","strictBindCallApply","strictFunctionTypes","strictNullChecks","strictPropertyInitialization","allowUnreachableCode","allowUnusedLabels","alwaysStrict","exactOptionalPropertyTypes","noFallthroughCasesInSwitch","noImplicitAny","noImplicitOverride","noImplicitReturns","noImplicitThis","noPropertyAccessFromIndexSignature","noUncheckedIndexedAccess","noUnusedLocals","noUnusedParameters","useUnknownInCatchVariables","declaration","declarationDir","declarationMap","downlevelIteration","emitBOM","emitDeclarationOnly","importHelpers","importsNotUsedAsValues","inlineSourceMap","inlineSources","mapRoot","newLine","noEmit","noEmitHelpers","noEmitOnError","outDir","outFile","preserveConstEnums","preserveValueImports","removeComments","sourceMap","sourceRoot","stripInternal","allowSyntheticDefaultImports","esModuleInterop","forceConsistentCasingInFileNames","isolatedDeclarations","isolatedModules","preserveSymlinks","verbatimModuleSyntax","skipDefaultLibCheck","skipLibCheck"],pathPattern:"^compilerOptions$"}]}}}import Y from"@stylistic/eslint-plugin";import Se from"eslint-plugin-antfu";function K(){let e=Y.configs.customize({indent:"tab",semi:!0,arrowParens:!0});return{name:"directus/stylistic",files:[...o,...k],plugins:{"@stylistic":Y,antfu:Se},rules:{...e.rules,"@stylistic/brace-style":["error","stroustrup",{allowSingleLine:!1}],"@stylistic/quotes":["error","single",{avoidEscape:!0,allowTemplateLiterals:"avoidEscape"}],"@stylistic/padding-line-between-statements":["error",{blankLine:"always",prev:["block","block-like","class","import","export","multiline-block-like","multiline-expression"],next:"*"},{blankLine:"always",prev:["const","let"],next:["block","block-like","class","export"]},{blankLine:"always",prev:"*",next:["multiline-block-like","multiline-expression"]},{blankLine:"any",prev:["case"],next:["case","default"]},{blankLine:"any",prev:["import"],next:["import"]},{blankLine:"any",prev:["export"],next:["export"]}],"@stylistic/operator-linebreak":["error","before",{overrides:{"=":"after"}}],"antfu/curly":"error","antfu/consistent-chaining":"error","antfu/consistent-list-newline":"error"}}}import Q from"@vitest/eslint-plugin";function X(){return{name:"directus/test",plugins:{vitest:Q},files:_,rules:{...Q.configs.recommended.rules,"vitest/valid-title":"off","vitest/prefer-hooks-in-order":"error","vitest/consistent-test-it":["error",{fn:"it",withinDescribe:"it"}],"vitest/prefer-lowercase-title":["error",{ignore:["describe"]}],"vitest/no-focused-tests":n?"warn":"error","vitest/no-disabled-tests":n?"warn":"error","no-unused-expressions":"off","n/prefer-global/process":"off"}}}import z from"eslint-plugin-toml";import Ee from"toml-eslint-parser";function Z(){return{name:"directus/toml",files:[d],plugins:{toml:z},languageOptions:{parser:Ee},rules:{...i(z.configs["flat/standard"]),"@stylistic/spaced-comment":"off"}}}import x from"@typescript-eslint/eslint-plugin";import Te from"@typescript-eslint/parser";function ee(){return{name:"directus/typescript",files:[j,a],plugins:{"@typescript-eslint":x},languageOptions:{parser:Te,parserOptions:{extraFileExtensions:[".vue"],sourceType:"module"}},rules:{...x.configs["eslint-recommended"].overrides[0].rules,...x.configs.strict.rules,"@typescript-eslint/no-dynamic-delete":"off","@typescript-eslint/no-non-null-assertion":"off","@typescript-eslint/no-explicit-any":"off","@typescript-eslint/unified-signatures":"off","@typescript-eslint/no-unused-vars":"off","@typescript-eslint/ban-ts-comment":["error",{"ts-expect-error":"allow-with-description"}],"@typescript-eslint/consistent-type-definitions":["error","interface"],"@typescript-eslint/consistent-type-imports":["error",{disallowTypeAnnotations:!1,fixStyle:"separate-type-imports",prefer:"type-imports"}],"@typescript-eslint/method-signature-style":["error","property"],"@typescript-eslint/no-dupe-class-members":"error","@typescript-eslint/no-empty-object-type":["error",{allowInterfaces:"always"}],"@typescript-eslint/no-import-type-side-effects":"error","@typescript-eslint/no-unused-expressions":["error",{allowShortCircuit:!0,allowTaggedTemplates:!0,allowTernary:!0}],"no-use-before-define":"off","@typescript-eslint/no-use-before-define":["error",{classes:!1,functions:!1,variables:!0}]}}}import re from"eslint-plugin-unicorn";function oe(){return{name:"directus/unicorn",files:o,plugins:{unicorn:re},rules:{...re.configs.recommended.rules,"unicorn/filename-case":"off","unicorn/prevent-abbreviations":"off","unicorn/no-null":"off","unicorn/no-array-reduce":"off","unicorn/no-unnecessary-polyfills":"off","unicorn/prefer-global-this":"off","unicorn/no-process-exit":"off","unicorn/no-negated-condition":"off","unicorn/switch-case-braces":"off"}}}import De from"@typescript-eslint/parser";import{mergeProcessors as Pe}from"eslint-merge-processors";import b from"eslint-plugin-vue";import Ge from"eslint-processor-vue-blocks";import Be from"vue-eslint-parser";function te(){return{name:"directus/vue",files:[a],languageOptions:{parser:Be,parserOptions:{extraFileExtensions:[".vue"],parser:De,sourceType:"module"},globals:{computed:"readonly",defineEmits:"readonly",defineExpose:"readonly",defineProps:"readonly",onMounted:"readonly",onUnmounted:"readonly",reactive:"readonly",ref:"readonly",shallowReactive:"readonly",shallowRef:"readonly",toRef:"readonly",toRefs:"readonly",watch:"readonly",watchEffect:"readonly"}},plugins:{vue:b},processor:Pe([b.processors[".vue"],Ge({blocks:{styles:!0}})]),rules:{...i(b.configs["flat/recommended"]),"vue/require-default-prop":"off","vue/max-attributes-per-line":"off","vue/multi-word-component-names":"off","vue/component-tags-order":"off","vue/prefer-true-attribute-shorthand":"error","vue/no-unused-vars":["error",{ignorePattern:"^_"}],"vue/block-order":["error",{order:["script","template","style"]}],"vue/component-name-in-template-casing":["error","PascalCase"],"vue/component-options-name-casing":["error","PascalCase"],"vue/custom-event-name-casing":["error","camelCase"],"vue/prop-name-casing":["error","camelCase"],"vue/define-macros-order":["error",{order:["defineOptions","defineProps","defineEmits","defineSlots"]}],"vue/dot-location":["error","property"],"vue/dot-notation":["error",{allowKeywords:!0}],"vue/eqeqeq":["error","smart"],"vue/no-empty-pattern":"error","vue/no-irregular-whitespace":"error","vue/no-loss-of-precision":"error","vue/no-restricted-syntax":["error","DebuggerStatement","LabeledStatement","WithStatement"],"vue/no-restricted-v-bind":["error","/^v-/"],"vue/no-setup-props-reactivity-loss":"off","vue/no-sparse-arrays":"error","vue/no-unused-refs":"error","vue/no-useless-v-bind":"error","vue/object-shorthand":["error","always",{avoidQuotes:!0,ignoreConstructors:!1}],"vue/prefer-separate-static-class":"error","vue/prefer-template":"error","vue/space-infix-ops":"error","vue/space-unary-ops":["error",{nonwords:!1,words:!0}],"vue/html-indent":["error","tab"],"vue/html-quotes":["error","double"],"vue/array-bracket-spacing":["error","never"],"vue/arrow-spacing":["error",{after:!0,before:!0}],"vue/block-spacing":["error","always"],"vue/block-tag-newline":["error",{multiline:"always",singleline:"always"}],"vue/brace-style":["error","stroustrup",{allowSingleLine:!1}],"vue/comma-dangle":["error","always-multiline"],"vue/comma-spacing":["error",{after:!0,before:!1}],"vue/comma-style":["error","last"],"vue/html-comment-content-spacing":["error","always",{exceptions:["-"]}],"vue/key-spacing":["error",{afterColon:!0,beforeColon:!1}],"vue/keyword-spacing":["error",{after:!0,before:!0}],"vue/object-curly-newline":"off","vue/object-curly-spacing":["error","always"],"vue/object-property-newline":["error",{allowMultiplePropertiesPerLine:!0}],"vue/operator-linebreak":["error","before",{overrides:{"=":"after"}}],"vue/padding-line-between-blocks":["error","always"],"vue/quote-props":["error","consistent-as-needed"],"vue/space-in-parens":["error","never"],"vue/template-curly-spacing":"error"}}}import ne from"eslint-plugin-yml";import Re from"yaml-eslint-parser";function se(){return{name:"directus/yaml",files:[f],plugins:{yml:ne},languageOptions:{parser:Re},rules:{...i(ne.configs["flat/standard"]),"yml/quotes":["error",{avoidEscape:!0,prefer:"single"}],"@stylistic/spaced-comment":"off"}}}var n=U();function ie(){n&&console.log("[@directus/eslint-config] Detected running in editor, some rules are disabled.");let e=[G(),R(),P(),J(),M(),B(),C(),V(),oe(),ee(),K(),$(),X(),te(),A(),W(),H(),T(),se(),Z(),N(),F()],r=new Me(...e);return n&&(r=r.disableRulesFix(["prefer-const","unused-imports/no-unused-imports"],{builtinRules:()=>import(["eslint","use-at-your-own-risk"].join("/")).then(t=>t.builtinRules)})),r}var Ue=await ie(),Yo=Ue;export{Yo as default};