UNPKG

@mheob/eslint-config

Version:
1 lines 38.5 kB
import{FlatConfigComposer as e}from"eslint-flat-config-utils";import{isPackageExists as t}from"local-pkg";import n from"node:process";import r from"eslint-plugin-command/config";import i from"@eslint-community/eslint-plugin-eslint-comments";import a from"eslint-plugin-antfu";import o from"eslint-plugin-n";import s from"eslint-plugin-perfectionist";import c from"eslint-plugin-prettier/recommended";import l from"eslint-plugin-unicorn";import u from"eslint-plugin-unused-imports";import d from"globals";import{mergeProcessors as f,processorPassThrough as p}from"eslint-merge-processors";import{configs as m}from"eslint-plugin-regexp";const h=`?([cm])[jt]s?(x)`,g=`**/*.?([cm])[jt]s?(x)`,ee=`**/*.?([cm])js`,_=`**/*.?([cm])jsx`,v=`**/*.?([cm])ts`,y=`**/*.?([cm])tsx`,te=`**/*.{c,le,sc}ss`,ne=`**/*.css`,re=`**/*.{p,post}css`,ie=`**/*.less`,ae=`**/*.scss`,b=`**/*.json`,x=`**/*.json5`,S=`**/*.jsonc`,C=`**/*.astro`,oe=`**/*.{g,graph}ql`,se=`**/*.htm?(l)`,w=`**/*.md`,T=`**/*.{j,t}sx`,E=`**/*.svelte`,D=`**/*.toml`,O=`**/*.vue`,k=`**/*.y?(a)ml`,A=`${w}/${g}`,j=`**/*.md/*.md`,M=`${w}/**/*.{json,json5,jsonc}`,N=[`**/__tests__/**/*.${h}`,`**/*.spec.${h}`,`**/*.test.${h}`,`**/*.bench.${h}`,`**/*.benchmark.${h}`],P=[g,te,b,x,S,C,oe,se,w,T,E,O,D,k],F=`**/node_modules,**/dist,**/package-lock.json,**/yarn.lock,**/pnpm-lock.yaml,**/bun.lockb,**/output,**/coverage,**/temp,**/.temp,**/tmp,**/.tmp,**/.history,**/.vitepress/cache,**/.nuxt,**/.next,**/.vercel,**/.changeset,**/.idea,**/.cache,**/.output,**/.vite-inspect,**/.yarn,**/CHANGELOG*.md,**/*.min.*,**/LICENSE*,**/__snapshots__,**/auto-import?(s).d.ts,**/components.d.ts`.split(`,`);async function ce(...e){return(await Promise.all(e)).flat()}function I(e){return Array.isArray(e)?e:[e]}function L(){return n.env.CI||R()?!1:!!(n.env.VSCODE_PID||n.env.VSCODE_CWD||n.env.JETBRAINS_IDE||n.env.VIM||n.env.NVIM)}function R(){return!!(n.env.GIT_PARAMS||n.env.VSCODE_GIT_COMMAND||n.env.npm_lifecycle_script?.startsWith(`lint-staged`))}function z(e,t){return Object.fromEntries(Object.entries(e).map(([e,n])=>{for(let[r,i]of Object.entries(t))if(e.startsWith(`${r}/`))return[i+e.slice(r.length),n];return[e,n]}))}function le(e,t){return e.map(e=>{let n={...e};return n.rules&&=z(n.rules,t),n.plugins&&=Object.fromEntries(Object.entries(n.plugins).map(([e,n])=>e in t?[t[e],n]:[e,n])),n})}async function B(e){let t=await e;return t.default??t}async function V(e){if(n.env.CI||n.stdout.isTTY===!1)return;let r=e.filter(e=>e&&!t(e));r.length!==0&&await(await import(`@clack/prompts`)).confirm({message:`${r.length===1?`Package is`:`Packages are`} required for this config: ${r.join(`, `)}. Do you want to install them?`})&&await import(`@antfu/install-pkg`).then(e=>e.installPackage(r,{dev:!0}))}const H={meta:{name:`parser-plain`},parseForESLint:e=>({ast:{body:[],comments:[],loc:{end:e.length,start:0},range:[0,e.length],tokens:[],type:`Program`},scopeManager:null,services:{isPlain:!0},visitorKeys:{Program:[]}})};async function U(e={}){let{files:t=[C],overrides:n={}}=e;await V([`eslint-plugin-astro`,`astro-eslint-parser`,`@typescript-eslint/parser`]);let[r,i,a]=await Promise.all([B(import(`eslint-plugin-astro`)),B(import(`astro-eslint-parser`)),B(import(`@typescript-eslint/parser`))]);return[{name:`mheob/astro/setup`,plugins:{astro:r}},{files:t,languageOptions:{globals:r.environments.astro.globals,parser:i,parserOptions:{extraFileExtensions:[`.astro`],parser:a},sourceType:`module`},name:`mheob/astro/rules`,processor:`astro/client-side-ts`,rules:{"astro/missing-client-only-directive-value":`error`,"astro/no-conflict-set-directives":`error`,"astro/no-deprecated-astro-canonicalurl":`error`,"astro/no-deprecated-astro-fetchcontent":`error`,"astro/no-deprecated-astro-resolve":`error`,"astro/no-deprecated-getentrybyslug":`error`,"astro/no-set-html-directive":`off`,"astro/no-unused-define-vars-in-style":`error`,"astro/semi":`off`,"astro/valid-compile":`error`,...n}}]}async function W(){return[{...r(),name:`mheob/command/rules`}]}async function G(){return[{name:`mheob/eslint-comments/rules`,plugins:{"eslint-comments":i},rules:{"eslint-comments/no-aggregating-enable":`error`,"eslint-comments/no-duplicate-disable":`error`,"eslint-comments/no-unlimited-disable":`error`,"eslint-comments/no-unused-enable":`error`}}]}async function K(){return[{files:[`**/bin/**/*`,`**/bin.${h}`],name:`mheob/disables/bin`,rules:{"antfu/no-import-dist":`off`,"antfu/no-import-node-modules-by-path":`off`}},{files:[`**/cli/${g}`,`**/cli.${h}`],name:`mheob/disables/cli`,rules:{"antfu/no-top-level-await":`off`,"no-console":`off`,"unicorn/no-process-exit":`off`}},{files:[`**/*.js`,`**/*.cjs`],name:`mheob/disables/cjs`,rules:{"ts/no-require-imports":`off`}},{files:[`**/*.config.${h}`,`**/*.config.*.${h}`],name:`mheob/disables/config-files`,rules:{"antfu/no-top-level-await":`off`,"no-console":`off`,"ts/explicit-function-return-type":`off`}},{files:[`**/*.${h}`],name:`mheob/disables/conflicts`,rules:{"sort-imports":`off`}},{files:[`**/*.d.?([cm])ts`],name:`mheob/disables/dts`,rules:{"eslint-comments/no-unlimited-disable":`off`,"no-restricted-syntax":`off`,"unused-imports/no-unused-vars":`off`}},{files:[y],name:`mheob/disables/jsx`,rules:{"ts/explicit-function-return-type":`off`}},{files:[`**/scripts/${g}`],name:`mheob/disables/scripts`,rules:{"antfu/no-top-level-await":`off`,"no-console":`off`,"ts/explicit-function-return-type":`off`,"unicorn/no-process-exit":`off`}},{files:[`**/*.{test,spec}.ts?(x)`],name:`mheob/disables/test`,rules:{"no-unused-expressions":`off`}}]}async function q(e=[]){return[{ignores:[...F,...e],name:`mheob/ignores`}]}async function J(){return[{name:`mheob/imports/rules`,plugins:{antfu:a},rules:{"antfu/import-dedupe":`error`,"antfu/no-import-dist":`error`,"antfu/no-import-node-modules-by-path":`error`}}]}async function Y(e={}){let{isInEditor:t=!1,overrides:n={}}=e;return[{languageOptions:{ecmaVersion:`latest`,globals:{...d.browser,...d.es2021,...d.node,document:`readonly`,navigator:`readonly`,window:`readonly`},parserOptions:{ecmaFeatures:{jsx:!0},ecmaVersion:`latest`,sourceType:`module`},sourceType:`module`},linterOptions:{reportUnusedDisableDirectives:!0},name:`mheob/javascript/rules`,plugins:{"unused-imports":u},rules:{"accessor-pairs":[`error`,{enforceForClassMembers:!0,setWithoutGet:!0}],"array-callback-return":`error`,"block-scoped-var":`error`,"constructor-super":`error`,curly:[`error`,`all`],"default-case-last":`error`,"dot-notation":[`error`,{allowKeywords:!0}],eqeqeq:[`error`,`smart`],"new-cap":[`error`,{capIsNew:!1,newIsCap:!0,properties:!0}],"no-alert":`error`,"no-array-constructor":`error`,"no-async-promise-executor":`error`,"no-caller":`error`,"no-case-declarations":`error`,"no-class-assign":`error`,"no-compare-neg-zero":`error`,"no-cond-assign":[`error`,`always`],"no-console":[`warn`,{allow:[`info`,`warn`,`error`]}],"no-const-assign":`error`,"no-control-regex":`error`,"no-debugger":`error`,"no-delete-var":`error`,"no-dupe-args":`error`,"no-dupe-class-members":`error`,"no-dupe-keys":`error`,"no-duplicate-case":`error`,"no-else-return":`error`,"no-empty":[`error`,{allowEmptyCatch:!0}],"no-empty-character-class":`error`,"no-empty-pattern":`error`,"no-eval":`error`,"no-ex-assign":`error`,"no-extend-native":`error`,"no-extra-bind":`error`,"no-extra-boolean-cast":`error`,"no-fallthrough":`error`,"no-func-assign":`error`,"no-global-assign":`error`,"no-implicit-coercion":[`error`,{allow:[`+`,`~`]}],"no-implied-eval":`error`,"no-import-assign":`error`,"no-invalid-regexp":`error`,"no-irregular-whitespace":`error`,"no-iterator":`error`,"no-labels":[`error`,{allowLoop:!1,allowSwitch:!1}],"no-lone-blocks":`error`,"no-lonely-if":`error`,"no-loss-of-precision":`error`,"no-misleading-character-class":`error`,"no-multi-str":`error`,"no-new":`error`,"no-new-func":`error`,"no-new-native-nonconstructor":`error`,"no-new-wrappers":`error`,"no-obj-calls":`error`,"no-octal":`error`,"no-octal-escape":`error`,"no-proto":`error`,"no-prototype-builtins":`error`,"no-redeclare":[`error`,{builtinGlobals:!1}],"no-regex-spaces":`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`,`DebuggerStatement`,`LabeledStatement`,`WithStatement`,`TSEnumDeclaration[const=true]`,`TSExportAssignment`],"no-self-assign":[`error`,{props:!0}],"no-self-compare":`error`,"no-sequences":`error`,"no-shadow-restricted-names":`error`,"no-sparse-arrays":`error`,"no-template-curly-in-string":`error`,"no-this-before-super":`error`,"no-throw-literal":`error`,"no-undef":`error`,"no-undef-init":`error`,"no-unexpected-multiline":`error`,"no-unmodified-loop-condition":`error`,"no-unneeded-ternary":[`error`,{defaultAssignment:!1}],"no-unreachable":`error`,"no-unreachable-loop":`error`,"no-unsafe-finally":`error`,"no-unsafe-negation":`error`,"no-unused-expressions":[`error`,{allowShortCircuit:!0,allowTaggedTemplates:!0,allowTernary:!0}],"no-unused-vars":[`error`,{args:`none`,caughtErrors:`none`,ignoreRestSiblings:!0,vars:`all`}],"no-use-before-define":[`error`,{classes:!1,functions:!1,variables:!0}],"no-useless-backreference":`error`,"no-useless-call":`error`,"no-useless-catch":`error`,"no-useless-computed-key":`error`,"no-useless-constructor":`error`,"no-useless-rename":`error`,"no-useless-return":`error`,"no-var":`error`,"no-with":`error`,"object-shorthand":[`error`,`always`,{avoidQuotes:!0,ignoreConstructors:!1}],"one-var":[`error`,{initialized:`never`}],"prefer-arrow-callback":[`error`,{allowNamedFunctions:!1,allowUnboundThis:!0}],"prefer-const":[t?`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`],"unused-imports/no-unused-imports":t?`warn`:`error`,"unused-imports/no-unused-vars":[`error`,{args:`after-used`,argsIgnorePattern:`^_`,ignoreRestSiblings:!0,vars:`all`,varsIgnorePattern:`^_`}],"use-isnan":[`error`,{enforceForIndexOf:!0,enforceForSwitchCase:!0}],"valid-typeof":[`error`,{requireStringLiterals:!0}],"vars-on-top":`error`,yoda:[`error`,`never`],...n}}]}async function ue(){let e=await B(import(`eslint-plugin-jsdoc`)),t=e.configs[`flat/recommended-typescript`].rules;return[{files:[ee,v],name:`mheob/jsdoc/rules`,plugins:{jsdoc:e},rules:{...t,"jsdoc/reject-any-type":`warn`,"jsdoc/reject-function-type":`warn`,"jsdoc/require-jsdoc":[`warn`,{require:{ArrowFunctionExpression:!1,FunctionDeclaration:!1}}],"jsdoc/require-next-type":`warn`,"jsdoc/tag-lines":[`warn`,`always`,{count:0,startLines:1}]}}]}async function de(e={}){let{files:t=[b,x,S],overrides:n={}}=e,[r,i]=await Promise.all([B(import(`eslint-plugin-jsonc`)),B(import(`jsonc-eslint-parser`))]);return[{name:`mheob/jsonc/setup`,plugins:{jsonc:r}},{files:t,languageOptions:{parser:i},name:`mheob/jsonc/rules`,rules:{"jsonc/no-bigint-literals":`error`,"jsonc/no-binary-expression":`error`,"jsonc/no-binary-numeric-literals":`error`,"jsonc/no-dupe-keys":`error`,"jsonc/no-escape-sequence-in-identifier":`error`,"jsonc/no-floating-decimal":`error`,"jsonc/no-hexadecimal-numeric-literals":`error`,"jsonc/no-infinity":`error`,"jsonc/no-multi-str":`error`,"jsonc/no-nan":`error`,"jsonc/no-number-props":`error`,"jsonc/no-numeric-separators":`error`,"jsonc/no-octal":`error`,"jsonc/no-octal-escape":`error`,"jsonc/no-octal-numeric-literals":`error`,"jsonc/no-parenthesized":`error`,"jsonc/no-plus-sign":`error`,"jsonc/no-regexp-literals":`error`,"jsonc/no-sparse-arrays":`error`,"jsonc/no-template-literals":`error`,"jsonc/no-undefined-value":`error`,"jsonc/no-unicode-codepoint-escapes":`error`,"jsonc/no-useless-escape":`error`,"jsonc/sort-keys":[`error`,{minKeys:2,order:{natural:!0,type:`asc`},pathPattern:`^$`},{minKeys:2,order:[`id`,{order:{natural:!0,type:`asc`}}],pathPattern:`.*`}],"jsonc/space-unary-ops":`error`,"jsonc/valid-json-number":`error`,"jsonc/vue-custom-block/no-parsing-error":`error`,...n}}]}async function fe(){return[{files:[_,y],languageOptions:{parserOptions:{ecmaFeatures:{jsx:!0}}},name:`mheob/jsx/setup`}]}async function pe(e={}){let{componentExtensions:t=[],files:n=[w],overrides:r={}}=e,i=await B(import(`@eslint/markdown`));if(!i.processors?.markdown)throw Error(`@eslint/markdown processors.markdown is not available`);let a=f([i.processors.markdown,p]);return[{name:`mheob/markdown/setup`,plugins:{markdown:i}},{files:n,ignores:[j],name:`mheob/markdown/processor`,processor:a},{files:n,languageOptions:{parser:H},name:`mheob/markdown/parser`},{files:[A,M,...t.map(e=>`${w}/**/*.${e}`)],languageOptions:{parserOptions:{ecmaFeatures:{impliedStrict:!0}}},name:`mheob/markdown/disables`,rules:{"jsonc/sort-keys":`off`,"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`,"no-unused-vars":`off`,"node/prefer-global/process":`off`,"ts/await-thenable":`off`,"ts/consistent-type-imports":`off`,"ts/dot-notation":`off`,"ts/no-floating-promises":`off`,"ts/no-for-in-array":`off`,"ts/no-implied-eval":`off`,"ts/no-misused-promises":`off`,"ts/no-namespace":`off`,"ts/no-redeclare":`off`,"ts/no-require-imports":`off`,"ts/no-throw-literal":`off`,"ts/no-unnecessary-type-assertion":`off`,"ts/no-unsafe-argument":`off`,"ts/no-unsafe-assignment":`off`,"ts/no-unsafe-call":`off`,"ts/no-unsafe-member-access":`off`,"ts/no-unsafe-return":`off`,"ts/no-unused-vars":`off`,"ts/no-use-before-define":`off`,"ts/no-var-requires":`off`,"ts/restrict-plus-operands":`off`,"ts/restrict-template-expressions":`off`,"ts/unbound-method":`off`,"unicode-bom":`off`,"unicorn/filename-case":`off`,"unused-imports/no-unused-imports":`off`,"unused-imports/no-unused-vars":`off`,...r}}]}function me(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,typeof t==`string`?[t]:t]))}async function he(e={}){let{files:t=[g],overrides:n={}}=e;await V([`@next/eslint-plugin-next`]);let r=await B(import(`@next/eslint-plugin-next`));return[{name:`mheob/nextjs/setup`,plugins:{next:r}},{files:t,languageOptions:{parserOptions:{ecmaFeatures:{jsx:!0}},sourceType:`module`},name:`mheob/nextjs/rules`,rules:{...me(r.configs.recommended.rules),...me(r.configs[`core-web-vitals`].rules),...n},settings:{react:{version:`detect`}}}]}async function ge(){return[{name:`mheob/node/rules`,plugins:{node:o},rules:{"node/handle-callback-err":[`error`,`^(err|error)$`],"node/no-deprecated-api":`error`,"node/no-exports-assign":`error`,"node/no-new-require":`error`,"node/no-path-concat":`error`,"node/prefer-global/buffer":[`error`,`never`],"node/prefer-global/process":[`error`,`never`],"node/process-exit-as-throw":`error`}}]}const X={customGroups:[{elementNamePattern:`^id$`,groupName:`top`,selector:`property`,type:`natural`}],groups:[`top`,[`multiline-optional-method`,`optional-multiline-method`],`method`,[`multiline-optional-member`,`optional-multiline-member`],`member`,`unknown`],type:`natural`};async function _e(){return[{name:`mheob/perfectionist/setup`,plugins:{perfectionist:s}},{name:`mheob/perfectionist/rules`,rules:{"perfectionist/sort-array-includes":[`error`,{groups:[`literal`],type:`natural`}],"perfectionist/sort-classes":[`error`,{type:`natural`}],"perfectionist/sort-enums":[`error`,{type:`natural`}],"perfectionist/sort-exports":[`error`,{type:`natural`}],"perfectionist/sort-imports":[`error`,{groups:[`type`,[`builtin-type`,`builtin`],[`external-type`,`external`],[`internal-type`,`internal`],[`parent-type`,`parent`,`sibling-type`,`sibling`,`index-type`,`index`],`side-effect`,`style`,`object`,`unknown`],internalPattern:[`^@/.*`,`^~/.*`],type:`natural`}],"perfectionist/sort-interfaces":[`error`,X],"perfectionist/sort-intersection-types":[`error`,{type:`natural`}],"perfectionist/sort-jsx-props":[`error`,{groups:[`multiline`,`unknown`,`shorthand`],type:`natural`}],"perfectionist/sort-maps":[`error`,{type:`natural`}],"perfectionist/sort-named-exports":[`error`,{type:`natural`}],"perfectionist/sort-named-imports":[`error`,{type:`natural`}],"perfectionist/sort-object-types":[`error`,X],"perfectionist/sort-objects":[`error`,{customGroups:X.customGroups,groups:[`top`,[`multiline-method`,`method`,`multiline-member`,`member`,`unknown`]],type:X.type}],"perfectionist/sort-union-types":[`error`,{type:`natural`}]}}]}async function ve(e={}){let{files:t=[P],overrides:n={}}=e;return[{...c,name:`mheob/prettier/setup`},{files:t,name:`mheob/prettier/rules`,rules:{...c.rules,"prettier/prettier":`warn`,...n}}]}const ye=[`vite`],be=[`@remix-run/node`,`@remix-run/react`,`@remix-run/serve`,`@remix-run/dev`],xe=[`@react-router/node`,`@react-router/react`,`@react-router/serve`,`@react-router/dev`],Se=[`next`];async function Ce(e={}){let{files:n=[v,y],overrides:r={}}=e;await V([`@eslint-react/eslint-plugin`,`eslint-plugin-react-hooks`,`eslint-plugin-react-refresh`]);let i=e?.tsconfigPath??void 0,a=!!i,[o,s,c,l]=await Promise.all([B(import(`@eslint-react/eslint-plugin`)),B(import(`eslint-plugin-react-hooks`)),B(import(`eslint-plugin-react-refresh`)),B(import(`@typescript-eslint/parser`))]),u=ye.some(e=>t(e)),d=be.some(e=>t(e)),f=xe.some(e=>t(e)),p=Se.some(e=>t(e)),m=o.configs.all.plugins;return[{name:`mheob/react/setup`,plugins:{react:m[`@eslint-react`],"react-dom":m[`@eslint-react/dom`],"react-hooks":s,"react-hooks-extra":m[`@eslint-react/hooks-extra`],"react-naming-convention":m[`@eslint-react/naming-convention`],"react-refresh":c,"react-web-api":m[`@eslint-react/web-api`]}},{files:n,languageOptions:{parser:l,parserOptions:{ecmaFeatures:{jsx:!0},...a?{project:i,projectService:!0,tsconfigRootDir:import.meta.dirname}:{}},sourceType:`module`},name:`mheob/react/rules`,rules:{"react-dom/no-dangerously-set-innerhtml":`warn`,"react-dom/no-dangerously-set-innerhtml-with-children":`error`,"react-dom/no-find-dom-node":`error`,"react-dom/no-flush-sync":`error`,"react-dom/no-hydrate":`error`,"react-dom/no-missing-button-type":`warn`,"react-dom/no-missing-iframe-sandbox":`warn`,"react-dom/no-namespace":`error`,"react-dom/no-render":`error`,"react-dom/no-render-return-value":`error`,"react-dom/no-script-url":`warn`,"react-dom/no-unsafe-iframe-sandbox":`warn`,"react-dom/no-unsafe-target-blank":`warn`,"react-dom/no-use-form-state":`error`,"react-dom/no-void-elements-with-children":`error`,"react-hooks-extra/no-direct-set-state-in-use-effect":`warn`,"react-hooks/exhaustive-deps":`warn`,"react-hooks/rules-of-hooks":`error`,"react-refresh/only-export-components":[`warn`,{allowConstantExport:u,allowExportNames:[...p?[`dynamic`,`dynamicParams`,`revalidate`,`fetchCache`,`runtime`,`preferredRegion`,`maxDuration`,`config`,`generateStaticParams`,`metadata`,`generateMetadata`,`viewport`,`generateViewport`]:[],...d||f?[`meta`,`links`,`headers`,`loader`,`action`,`clientLoader`,`clientAction`,`handle`,`shouldRevalidate`]:[]]}],"react-web-api/no-leaked-event-listener":`warn`,"react-web-api/no-leaked-interval":`warn`,"react-web-api/no-leaked-resize-observer":`warn`,"react-web-api/no-leaked-timeout":`warn`,"react/jsx-no-comment-textnodes":`warn`,"react/jsx-no-duplicate-props":`warn`,"react/jsx-uses-react":`warn`,"react/jsx-uses-vars":`warn`,"react/no-access-state-in-setstate":`error`,"react/no-array-index-key":`warn`,"react/no-children-count":`warn`,"react/no-children-for-each":`warn`,"react/no-children-map":`warn`,"react/no-children-only":`warn`,"react/no-children-to-array":`warn`,"react/no-clone-element":`warn`,"react/no-component-will-mount":`error`,"react/no-component-will-receive-props":`error`,"react/no-component-will-update":`error`,"react/no-context-provider":`warn`,"react/no-create-ref":`error`,"react/no-default-props":`error`,"react/no-direct-mutation-state":`error`,"react/no-duplicate-key":`warn`,"react/no-forward-ref":`warn`,"react/no-implicit-key":`warn`,"react/no-missing-key":`error`,"react/no-nested-component-definitions":`error`,"react/no-nested-lazy-component-declarations":`warn`,"react/no-prop-types":`error`,"react/no-redundant-should-component-update":`error`,"react/no-set-state-in-component-did-mount":`warn`,"react/no-set-state-in-component-did-update":`warn`,"react/no-set-state-in-component-will-update":`warn`,"react/no-string-refs":`error`,"react/no-unnecessary-use-prefix":`warn`,"react/no-unsafe-component-will-mount":`warn`,"react/no-unsafe-component-will-receive-props":`warn`,"react/no-unsafe-component-will-update":`warn`,"react/no-unstable-context-value":`warn`,"react/no-unstable-default-props":`warn`,"react/no-unused-class-component-members":`warn`,"react/no-unused-state":`warn`,"react/no-use-context":`warn`,"react/no-useless-forward-ref":`warn`,"react/prefer-use-state-lazy-initialization":`warn`,...r}}]}async function we(e={}){let t=m[`flat/recommended`],n={...t.rules};if(e.level===`warn`)for(let e in n)n[e]===`error`&&(n[e]=`warn`);return[{...t,name:`mheob/regexp/rules`,rules:{...n,...e.overrides}}]}async function Te(){return[{files:[`**/package.json`],name:`mheob/sort/package-json`,rules:{"jsonc/sort-array-values":[`error`,{order:{type:`asc`},pathPattern:`^files$`}],"jsonc/sort-keys":[`error`,{order:`$schema.publisher.name.displayName.version.private.description.categories.keywords.icon.homepage.bugs.repository.funding.license.author.maintainers.contributors.sideEffects.type.imports.exports.main.unpkg.jsdelivr.module.types.typesVersions.typings.bin.files.workspaces.scripts.contributes.activationEvents.husky.simple-git-hooks.commitlint.lint-staged.prettier.eslintConfig.eslintIgnore.release.stylelint.ava.jest.jest-junit.jest-stare.mocha.nyc.c8.resolutions.dependencies.devDependencies.peerDependencies.peerDependenciesMeta.optionalDependencies.bundledDependencies.bundleDependencies.packageManager.engines.pnpm`.split(`.`),pathPattern:`^$`},{order:{type:`asc`},pathPattern:`^scripts$`},{order:{type:`asc`},pathPattern:`^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$`},{order:{type:`asc`},pathPattern:`^(?:resolutions|overrides|pnpm.overrides)$`},{order:{type:`asc`},pathPattern:String.raw`^workspaces\.catalog$`},{order:{type:`asc`},pathPattern:String.raw`^workspaces\.catalogs\.[^.]+$`},{order:[`types`,`import`,`require`,`default`],pathPattern:`^exports.*$`},{order:[`pre-commit`,`prepare-commit-msg`,`commit-msg`,`post-commit`,`pre-rebase`,`post-rewrite`,`post-checkout`,`post-merge`,`pre-push`,`pre-auto-gc`],pathPattern:`^(?:gitHooks|husky|simple-git-hooks)$`}]}}]}async function Ee(){return[{files:[`pnpm-workspace.yaml`],name:`mheob/sort/pnpm-workspace`,rules:{"yaml/sort-keys":[`error`,{order:[`packages`,`overrides`,`patchedDependencies`,`hoistPattern`,`catalogMode`,`catalog`,`catalogs`,`allowedDeprecatedVersions`,`allowNonAppliedPatches`,`configDependencies`,`ignoredBuiltDependencies`,`ignoredOptionalDependencies`,`neverBuiltDependencies`,`onlyBuiltDependencies`,`onlyBuiltDependenciesFile`,`packageExtensions`,`peerDependencyRules`,`supportedArchitectures`],pathPattern:`^$`},{order:{type:`asc`},pathPattern:`.*`}]}}]}function De(){return[{files:[`**/tsconfig.json`,`**/tsconfig.*.json`],name:`mheob/sort/tsconfig-json`,rules:{"jsonc/sort-keys":[`error`,{order:[`extends`,`compilerOptions`,`references`,`files`,`include`,`exclude`],pathPattern:`^$`},{order:`incremental.composite.tsBuildInfoFile.disableSourceOfProjectReferenceRedirect.disableSolutionSearching.disableReferencedProjectLoad.target.lib.jsx.libReplacement.experimentalDecorators.emitDecoratorMetadata.jsxFactory.jsxFragmentFactory.jsxImportSource.reactNamespace.noLib.useDefineForClassFields.moduleDetection.module.rootDir.moduleResolution.baseUrl.paths.rootDirs.typeRoots.types.allowUmdGlobalAccess.moduleSuffixes.allowImportingTsExtensions.rewriteRelativeImportExtensions.resolvePackageJsonExports.resolvePackageJsonImports.customConditions.noUncheckedSideEffectImports.resolveJsonModule.allowArbitraryExtensions.noResolve.allowJs.checkJs.maxNodeModuleJsDepth.declaration.declarationMap.emitDeclarationOnly.sourceMap.inlineSourceMap.noEmit.outFile.outDir.removeComments.importHelpers.downlevelIteration.sourceRoot.mapRoot.inlineSources.emitBOM.newLine.stripInternal.noEmitHelpers.noEmitOnError.preserveConstEnums.declarationDir.isolatedModules.verbatimModuleSyntax.isolatedDeclarations.erasableSyntaxOnly.allowSyntheticDefaultImports.esModuleInterop.preserveSymlinks.forceConsistentCasingInFileNames.strict.noImplicitAny.strictNullChecks.strictFunctionTypes.strictBindCallApply.strictPropertyInitialization.strictBuiltinIteratorReturn.noImplicitThis.useUnknownInCatchVariables.alwaysStrict.noUnusedLocals.noUnusedParameters.exactOptionalPropertyTypes.noImplicitReturns.noFallthroughCasesInSwitch.noUncheckedIndexedAccess.noImplicitOverride.noPropertyAccessFromIndexSignature.allowUnusedLabels.allowUnreachableCode.skipDefaultLibCheck.skipLibCheck`.split(`.`),pathPattern:`^compilerOptions$`}]}}]}async function Oe(e={}){let{files:t=[g],overrides:n={}}=e,r=await B(import(`@stylistic/eslint-plugin`));return[{name:`mheob/stylistic/setup`,plugins:{"@stylistic":r}},{files:t,name:`mheob/stylistic/rules`,rules:{"@stylistic/lines-between-class-members":[`error`,`always`],"@stylistic/padding-line-between-statements":[`warn`,{blankLine:`always`,next:`*`,prev:`directive`},{blankLine:`any`,next:`directive`,prev:`directive`},{blankLine:`always`,next:`*`,prev:`function`},{blankLine:`always`,next:`function`,prev:`*`}],...n}}]}async function ke(e={}){let{files:t=[E],overrides:n={}}=e;await V([`eslint-plugin-svelte`]);let[r,i]=await Promise.all([B(import(`eslint-plugin-svelte`)),B(import(`svelte-eslint-parser`))]);return[{name:`mheob/svelte/setup`,plugins:{svelte:r}},{files:t,languageOptions:{parser:i,parserOptions:{extraFileExtensions:[`.svelte`],parser:e.typescript?await B(import(`@typescript-eslint/parser`)):null}},name:`mheob/svelte/rules`,processor:r.processors[`.svelte`],rules:{"no-undef":`off`,"no-unused-vars":[`error`,{args:`none`,caughtErrors:`none`,ignoreRestSiblings:!0,vars:`all`,varsIgnorePattern:String.raw`^(\$\$Props$|\$\$Events$|\$\$Slots$)`}],"svelte/comment-directive":`error`,"svelte/no-at-debug-tags":`warn`,"svelte/no-at-html-tags":`error`,"svelte/no-dupe-else-if-blocks":`error`,"svelte/no-dupe-style-properties":`error`,"svelte/no-dupe-use-directives":`error`,"svelte/no-dynamic-slot-name":`error`,"svelte/no-export-load-in-svelte-module-in-kit-pages":`error`,"svelte/no-inner-declarations":`error`,"svelte/no-not-function-handler":`error`,"svelte/no-object-in-text-mustaches":`error`,"svelte/no-reactive-functions":`error`,"svelte/no-reactive-literals":`error`,"svelte/no-shorthand-style-property-overrides":`error`,"svelte/no-unknown-style-directive-property":`error`,"svelte/no-unused-svelte-ignore":`error`,"svelte/no-useless-mustaches":`error`,"svelte/require-store-callbacks-use-set-param":`error`,"svelte/system":`error`,"svelte/valid-compile":`error`,"svelte/valid-each-key":`error`,"unused-imports/no-unused-vars":[`error`,{args:`after-used`,argsIgnorePattern:`^_`,vars:`all`,varsIgnorePattern:String.raw`^(_|\$\$Props$|\$\$Events$|\$\$Slots$)`}],...n}}]}let Ae;async function je(e={}){let{files:t=N,isInEditor:n=!1,overrides:r={}}=e,[i,a]=await Promise.all([B(import(`@vitest/eslint-plugin`)),B(import(`eslint-plugin-no-only-tests`))]);return Ae??={...i,rules:{...i.rules,...a.rules}},[{name:`mheob/test/setup`,plugins:{test:Ae}},{files:t,name:`mheob/test/rules`,rules:{"node/prefer-global/process":`off`,"test/consistent-test-it":[`error`,{fn:`it`,withinDescribe:`it`}],"test/no-identical-title":`error`,"test/no-import-node-test":`error`,"test/no-only-tests":n?`warn`:`error`,"test/prefer-hooks-in-order":`error`,"test/prefer-lowercase-title":`error`,...r}}]}async function Me(e={}){let{files:t=[D],overrides:n={}}=e,[r,i,a]=await Promise.all([B(import(`eslint-plugin-toml`)),B(import(`toml-eslint-parser`)),B(import(`prettier-plugin-toml`))]);return[{name:`mheob/toml/setup`,plugins:{toml:r}},{files:t,languageOptions:{parser:i},name:`mheob/toml/rules`,rules:{"toml/comma-style":`error`,"toml/keys-order":`error`,"toml/no-space-dots":`error`,"toml/no-unreadable-number-separator":`error`,"toml/precision-of-fractional-seconds":`error`,"toml/precision-of-integer":`error`,"toml/tables-order":`error`,"toml/vue-custom-block/no-parsing-error":`error`,...n}}]}async function Ne(e={}){let{componentExtensions:t=[],overrides:n={},parserOptions:r={}}=e,i=e.files??[g,...t.map(e=>`**/*.${e}`)],o=e.filesTypeAware??[v,y],s=e?.tsconfigPath?I(e.tsconfigPath):void 0,c=!!s,l={"dot-notation":`off`,"no-implied-eval":`off`,"no-throw-literal":`off`,"ts/await-thenable":`error`,"ts/dot-notation":[`error`,{allowKeywords:!0}],"ts/no-explicit-any":`warn`,"ts/no-floating-promises":`error`,"ts/no-for-in-array":`error`,"ts/no-implied-eval":`error`,"ts/no-misused-promises":`error`,"ts/no-throw-literal":`error`,"ts/no-unnecessary-type-assertion":`error`,"ts/no-unsafe-argument":`error`,"ts/no-unsafe-assignment":`error`,"ts/no-unsafe-call":`error`,"ts/no-unsafe-member-access":`error`,"ts/no-unsafe-return":`error`,"ts/restrict-plus-operands":`error`,"ts/restrict-template-expressions":`error`,"ts/unbound-method":`error`},[u,d]=await Promise.all([B(import(`@typescript-eslint/eslint-plugin`)),B(import(`@typescript-eslint/parser`))]);function f(e,n,i){return{files:n,...i?{ignores:i}:{},languageOptions:{parser:d,parserOptions:{extraFileExtensions:t.map(e=>`.${e}`),sourceType:`module`,...e?{project:s,projectService:!0,tsconfigRootDir:import.meta.dirname}:{},...r}},name:`mheob/typescript/${e?`type-aware-parser`:`parser`}`}}return[{name:`mheob/typescript/setup`,plugins:{antfu:a,ts:u}},...c?[f(!0,o),f(!1,i,o)]:[f(!1,i)],{files:i,name:`mheob/typescript/rules`,rules:{...z(u.configs[`eslint-recommended`].overrides?.[0].rules??{},{"@typescript-eslint":`ts`}),...z(u.configs.strict.rules??{},{"@typescript-eslint":`ts`}),"no-dupe-class-members":`off`,"no-redeclare":`off`,"no-use-before-define":`off`,"no-useless-constructor":`off`,"ts/ban-ts-comment":[`error`,{"ts-ignore":`allow-with-description`}],"ts/consistent-type-definitions":[`error`,`interface`],"ts/consistent-type-imports":[`error`,{disallowTypeAnnotations:!1,prefer:`type-imports`}],"ts/explicit-function-return-type":[`error`,{allowExpressions:!0}],"ts/method-signature-style":[`error`,`property`],"ts/no-dupe-class-members":`error`,"ts/no-dynamic-delete":`off`,"ts/no-explicit-any":`warn`,"ts/no-extraneous-class":`off`,"ts/no-import-type-side-effects":`error`,"ts/no-invalid-void-type":`off`,"ts/no-non-null-assertion":`warn`,"ts/no-redeclare":`error`,"ts/no-require-imports":`error`,"ts/no-restricted-types":`error`,"ts/no-unused-vars":`off`,"ts/no-use-before-define":[`error`,{classes:!1,functions:!1,variables:!0}],"ts/no-useless-constructor":`off`,"ts/triple-slash-reference":`off`,"ts/unified-signatures":`off`,...n}},...c?[{files:o,name:`mheob/typescript/rules-type-aware`,rules:{...s?l:{},...n}}]:[]]}async function Z(e={}){let{overrides:t={}}=e;return[{...l.configs.recommended,name:`mheob/unicorn/rules`,rules:{...l.configs.recommended.rules,"unicorn/filename-case":[`error`,{cases:{kebabCase:!0},ignore:[/.md$/i]}],"unicorn/no-array-reduce":`off`,"unicorn/no-negated-condition":`off`,"unicorn/no-null":`off`,"unicorn/prevent-abbreviations":[`warn`,{replacements:{args:!1,db:!1,doc:!1,env:!1,i:!1,idx:!1,params:!1,pkg:!1,props:!1,temp:!1,tmp:!1,utils:!1}}],...t}},{files:[T],name:`mheob/unicorn/rules/react`,rules:{"unicorn/filename-case":[`error`,{cases:{kebabCase:!0,pascalCase:!0}}]}}]}async function Pe(e={}){let{files:t=[O],overrides:n={}}=e,[r,i]=await Promise.all([B(import(`eslint-plugin-vue`)),B(import(`vue-eslint-parser`))]);return[{languageOptions:{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`}},name:`mheob/vue/setup`,plugins:{vue:r}},{files:t,languageOptions:{parser:i,parserOptions:{ecmaFeatures:{jsx:!0},extraFileExtensions:[`.vue`],parser:e.typescript?await B(import(`@typescript-eslint/parser`)):null,sourceType:`module`}},name:`mheob/vue/rules`,processor:r.processors[`.vue`],rules:{...r.configs.base.rules,...r.configs[`flat/essential`].map(e=>e.rules).reduce((e,t)=>({...e,...t}),{}),...r.configs[`flat/strongly-recommended`].map(e=>e.rules).reduce((e,t)=>({...e,...t}),{}),...r.configs[`flat/recommended`].map(e=>e.rules).reduce((e,t)=>({...e,...t}),{}),"antfu/no-top-level-await":`off`,"node/prefer-global/process":`off`,"ts/explicit-function-return-type":`off`,"vue/block-order":[`error`,{order:[`script`,`template`,`style`]}],"vue/component-name-in-template-casing":[`error`,`PascalCase`],"vue/component-options-name-casing":[`error`,`PascalCase`],"vue/component-tags-order":`off`,"vue/custom-event-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/max-attributes-per-line":`off`,"vue/multi-word-component-names":`off`,"vue/no-dupe-keys":`off`,"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/no-v-html":`off`,"vue/object-shorthand":[`error`,`always`,{avoidQuotes:!0,ignoreConstructors:!1}],"vue/prefer-separate-static-class":`error`,"vue/prefer-template":`error`,"vue/prop-name-casing":[`error`,`camelCase`],"vue/require-default-prop":`off`,"vue/require-prop-types":`off`,"vue/space-infix-ops":`error`,"vue/space-unary-ops":[`error`,{nonwords:!1,words:!0}],...n}}]}async function Fe(e={}){let{files:t=[k],overrides:n={}}=e,[r,i]=await Promise.all([B(import(`eslint-plugin-yml`)),B(import(`yaml-eslint-parser`))]);return[{name:`mheob/yaml/setup`,plugins:{yaml:r}},{files:t,languageOptions:{parser:i},name:`mheob/yaml/rules`,rules:{"yaml/block-mapping":`error`,"yaml/block-sequence":`error`,"yaml/no-empty-key":`error`,"yaml/no-empty-sequence-entry":`error`,"yaml/no-irregular-whitespace":`error`,"yaml/plain-scalar":`error`,"yaml/vue-custom-block/no-parsing-error":`error`,...n}}]}const Ie=[`name`,`files`,`ignores`,`languageOptions`,`linterOptions`,`processor`,`plugins`,`rules`,`settings`],Le=[`vue`,`nuxt`,`vitepress`],Re={"@eslint-react":`react`,"@eslint-react/dom":`react-dom`,"@eslint-react/hooks-extra":`react-hooks-extra`,"@eslint-react/naming-convention":`react-naming-convention`,"@next/next":`next`,"@typescript-eslint":`ts`,n:`node`,vitest:`test`,yml:`yaml`};function Q(e,t){return typeof e[t]==`boolean`?{}:e[t]||{}}function $(e,t){let n=Q(e,t);return{...e.overrides?.[t],...`overrides`in n?n.overrides:{}}}function ze(n={},...r){let{autoRenamePlugins:i=!0,componentExtensions:a=[],gitignore:o=!0,regexp:s=!0,typescript:c=t(`typescript`)}=n,l=n.isInEditor;l??(l=L(),l&&console.info(`[@mheob/eslint-config] Detected running in editor, some rules are disabled.`));let u=[];(n.gitignore??!!o)&&u.push(B(import(`eslint-config-flat-gitignore`)).then(e=>[e({name:`mheob/gitignore`,...typeof o==`boolean`?{strict:!1}:o})]));let d=Q(n,`typescript`),f=`tsconfigPath`in d?d.tsconfigPath:void 0;u.push(q(n.ignores),Y({isInEditor:l,overrides:$(n,`javascript`)}),G(),ge(),ue(),J(),W(),_e()),(n.astro??!1)&&u.push(U({overrides:$(n,`astro`)})),(n.jsonc??!0)&&u.push(de({overrides:$(n,`jsonc`)}),Te(),De()),((n.jsx||!!c)??!1)&&u.push(fe()),(n.nextjs??!1)&&u.push(he({overrides:$(n,`nextjs`)})),(n.react??!1)&&u.push(Ce({...d,overrides:$(n,`react`),tsconfigPath:f})),(n.regexp??!!s)&&u.push(we(typeof s==`boolean`?{}:s)),(n.stylistic??!0)&&u.push(Oe({overrides:$(n,`stylistic`)})),(n.svelte??!1)&&u.push(ke({overrides:$(n,`svelte`),typescript:!!c})),(n.test??!0)&&u.push(je({isInEditor:l,overrides:$(n,`test`)})),(n.toml??!0)&&u.push(Me({overrides:$(n,`toml`)})),(n.typescript??!!c)&&u.push(Ne({...d,componentExtensions:a,overrides:$(n,`typescript`)})),(n.unicorn??!0)&&u.push(Z({overrides:$(n,`unicorn`)})),(n.vue??Le.some(e=>t(e)))&&(a.push(`vue`),u.push(Pe({...Q(n,`vue`),overrides:$(n,`vue`),typescript:!!c}))),(n.yaml??!0)&&u.push(Fe({overrides:$(n,`yaml`)}),Ee()),(n.markdown??!0)&&u.push(pe({componentExtensions:a,overrides:$(n,`markdown`)})),u.push(ve({overrides:$(n,`prettier`)}),K());let p=Ie.reduce((e,t)=>(t in n&&(e[t]=n[t]),e),{});Object.keys(p).length>0&&u.push([p]);let m=new e;return m=m.append(...u,...r),i&&(m=m.renamePlugins(Re)),l&&(m=m.disableRulesFix([`unused-imports/no-unused-imports`,`test/no-only-tests`,`prefer-const`],{builtinRules:()=>import([`eslint`,`use-at-your-own-risk`].join(`/`)).then(e=>e.builtinRules)})),m}var Be=ze;export{P as GLOB_ALL_SRC,C as GLOB_ASTRO,ne as GLOB_CSS,F as GLOB_EXCLUDE,oe as GLOB_GRAPHQL,se as GLOB_HTML,ee as GLOB_JS,b as GLOB_JSON,x as GLOB_JSON5,S as GLOB_JSONC,_ as GLOB_JSX,ie as GLOB_LESS,w as GLOB_MARKDOWN,A as GLOB_MARKDOWN_CODE,j as GLOB_MARKDOWN_IN_MARKDOWN,M as GLOB_MARKDOWN_JSON,re as GLOB_POSTCSS,T as GLOB_REACT,ae as GLOB_SCSS,g as GLOB_SRC,h as GLOB_SRC_EXT,te as GLOB_STYLE,E as GLOB_SVELTE,N as GLOB_TESTS,D as GLOB_TOML,v as GLOB_TS,y as GLOB_TSX,O as GLOB_VUE,k as GLOB_YAML,U as astro,ce as combine,W as command,G as comments,Be as default,K as disables,V as ensurePackages,q as ignores,J as imports,B as interopDefault,L as isInEditorEnv,R as isInGitHooksOrLintStaged,Y as javascript,ue as jsdoc,de as jsonc,fe as jsx,pe as markdown,ze as mheob,he as nextjs,ge as node,H as parserPlain,_e as perfectionist,ve as prettier,Ce as react,we as regexp,le as renamePluginInConfigs,z as renameRules,Te as sortPackageJson,Ee as sortPnpmWorkspaceYaml,De as sortTsconfig,Oe as stylistic,ke as svelte,je as test,I as toArray,Me as toml,Ne as typescript,Z as unicorn,Pe as vue,Fe as yaml};