UNPKG

@dovenv/eslint-config

Version:
2 lines (1 loc) 12.7 kB
import b from"@eslint/css";import{tailwind4 as H,tailwind3 as G}from"tailwind-csstree";import{fixupPluginRules as n,includeIgnoreFile as K}from"@eslint/compat";import W from"@eslint/js";import j from"@stylistic/eslint-plugin";import Y from"eslint-plugin-align-assignments";import B from"eslint-plugin-align-import";import z from"eslint-plugin-canonical";import Q from"eslint-plugin-import";import v from"eslint-plugin-promise";import i from"globals";export{default as globals}from"globals";import h from"typescript-eslint";import X from"@html-eslint/eslint-plugin";import{resolve as Z}from"node:path";import C from"eslint-plugin-jsdoc";import ee from"eslint-plugin-jsonc";import S from"eslint-plugin-package-json";import re from"jsonc-eslint-parser";import E from"eslint-plugin-markdownlint";import te from"eslint-plugin-markdownlint/parser.js";import se from"eslint-plugin-json-schema-validator";import x from"eslint-plugin-playwright";import oe from"eslint-plugin-toml";import ne from"eslint-plugin-vue";import ie from"eslint-plugin-yml";const le=e=>(e.map(r=>{if(r.name==="css:standard")return[];r.name==="svelte:recommended:rules"&&(r.files=["**/*.js","**/*.ts","**/*.svelte","*.svelte.js","*.svelte.ts","**/*.svelte.js","**/*.svelte.ts"]);const s=r.rules?Object.keys(r.rules):[];return!s||!s.length||(s.filter(o=>o==="json-schema-validator/no-invalid").length&&(r.files=["**/*.json"]),r.rules&&s.filter(o=>o==="@typescript-eslint/no-unused-vars").length&&(r.rules["@typescript-eslint/no-unused-vars"]="off"),s.filter(o=>o.startsWith("@typescript-eslint")).length&&(r.files=["**/*.ts","**/*.tsx","**/*.svelte","**/*.svelte.ts"]),r.rules&&s.filter(o=>o==="svelte/no-unused-svelte-ignore").length&&(r.files=["**/*.svelte"],r.rules["svelte/no-unused-svelte-ignore"]="off"),s.filter(o=>o==="jsdoc/valid-types").length&&(r.files=["**/*.js","**/*.ts"]),s.filter(o=>o==="vue/no-reserved-component-names").length&&(r.files=["**/*.vue"])),r}),e),t={JS:"**/*.{js,jsx,cjs,mjs}",TS:"**/*.{ts,tsx,cts,mts}",ESM:"**/*.{mjs,mts}",COMMON:"**/*.{cjs,cts}",CSS:"**/*.css",HTML:"**/*.html",JSON:"**/*.{json,json5,jsonc}",PACKAGEJSON:"**/package.json",SVELTE:"**/*.svelte",SVELTE_FILE:"**/*.svelte.{js,cjs,mjs,ts,cts,mts}",MARKDOWN:"**/*.md",TOML:"**/*.{toml,tml}",YAML:"**/*.{yaml,yml}",VUE:"**/*.vue",TEST_UNIT:"**/*.{spec,test}.{js,jsx,cjs,mjs,ts,tsx,cts,mts}",TEST_E2E:"tests/**/*.{js,jsx,cjs,mjs,ts,tsx,cts,mts}"},O=[t.JS,t.TS,t.SVELTE,t.VUE,t.HTML],l=e=>[{files:[t.CSS],language:"css/css",plugins:{css:b},...e?.tailwind||e?.postcss?{languageOptions:{...e?.tailwind?{customSyntax:e.tailwind===3?G:H}:{},...e?.postcss?{tolerant:!0}:{}}}:{},rules:{...b.configs.recommended.rules,...e?.rules?e.rules:{}}}],T=l({postcss:!0,tailwind:!0}),ae=(e=import.meta.dirname)=>({languageOptions:{parserOptions:{projectService:!0,tsconfigRootDir:e}}}),ce={"@stylistic/space-infix-ops":["error",{int32Hint:!1}],"@stylistic/key-spacing":["error",{multiLine:{beforeColon:!0,afterColon:!0},align:{beforeColon:!0,afterColon:!0,on:"colon"}}],"@stylistic/no-multi-spaces":["error",{exceptions:{ImportDeclaration:!0,VariableDeclarator:!0,AssignmentExpression:!0,TSPropertySignature:!0,PropertyDefinition:!0}}],"@stylistic/type-annotation-spacing":"off"},k=e=>[{files:[t.COMMON],languageOptions:{globals:{...i.commonjs},sourceType:"commonjs"}},{files:[t.ESM],languageOptions:{globals:{...i.es2025},sourceType:"module"}},{plugins:{...v.configs["flat/recommended"].plugins,...j.configs.recommended.plugins,import:n(Q),canonical:n(z),"align-import":n(B),"align-assignments":n(Y)}},{files:O,languageOptions:{globals:{...i.browser,...i.node,...i.jquery}},rules:{...W.configs.recommended.rules,...j.configs.recommended.rules,...v.configs["flat/recommended"].rules,camelcase:"warn","vars-on-top":"warn","default-case-last":"error","default-case":"error","no-prototype-builtins":"off","no-inline-comments":"off","no-unused-vars":["error",{args:"all",argsIgnorePattern:"^_",caughtErrorsIgnorePattern:"^_",ignoreRestSiblings:!0}],"one-var":["error",{var:"always",let:"always",const:"never"}],"prefer-const":["error",{destructuring:"any",ignoreReadBeforeAssign:!1}],"func-style":["error","declaration",{allowArrowFunctions:!0}],"prefer-arrow-callback":"error","no-async-promise-executor":"off","@stylistic/switch-colon-spacing":["error",{after:!0,before:!0}],"@stylistic/comma-dangle":["error","always-multiline"],"@stylistic/comma-spacing":["error",{after:!0}],"@stylistic/no-multiple-empty-lines":["error",{max:1,maxEOF:1,maxBOF:1}],"@stylistic/padded-blocks":["error","always"],"@stylistic/space-in-parens":["error","always"],"@stylistic/function-call-spacing":["error","never"],"@stylistic/object-curly-spacing":["error","always"],"@stylistic/object-curly-newline":["error",{minProperties:2}],"@stylistic/object-property-newline":["error",{allowAllPropertiesOnSameLine:!1}],"@stylistic/array-bracket-spacing":["error","always"],"@stylistic/array-bracket-newline":["error",{multiline:!0,minItems:3}],"@stylistic/array-element-newline":["error",{multiline:!0,minItems:3}],"@stylistic/keyword-spacing":["error",{after:!0}],"@stylistic/indent":["error","tab"],"@stylistic/indent-binary-ops":["error","tab"],"@stylistic/no-tabs":"off","@stylistic/spaced-comment":"off","@stylistic/linebreak-style":["error","unix"],"@stylistic/semi":["error","never"],"@stylistic/operator-linebreak":["error","before"],"@stylistic/arrow-parens":["error","as-needed"],"@stylistic/eol-last":["error","always"],"import/newline-after-import":"error","import/order":["error",{groups:[["builtin","external"],["internal","parent","sibling","index","object"],["type"]],alphabetize:{order:"asc",caseInsensitive:!0},"newlines-between":"always",warnOnUnassignedImports:!0}],"align-import/align-import":"error","align-import/trim-import":"error","align-assignments/align-assignments":["error"],"canonical/import-specifier-newline":"error","canonical/export-specifier-newline":"error",...ce,...e?.rules||{}}}],a=k(),L=e=>[...a,...h.configs.recommended.map(r=>({files:[t.TS],...r})),{files:[t.TS],rules:{"no-unused-vars":"off","@typescript-eslint/no-unused-vars":["error",{args:"all",argsIgnorePattern:"^_",caughtErrors:"all",caughtErrorsIgnorePattern:"^_",destructuredArrayIgnorePattern:"^_",varsIgnorePattern:"^_",ignoreRestSiblings:!0}],"@typescript-eslint/ban-ts-comment":["error",{"ts-ignore":!1}],"@typescript-eslint/prefer-as-const":"error","@typescript-eslint/method-signature-style":"error","no-unused-expressions":"off","@typescript-eslint/no-unused-expressions":"off","no-empty-function":"off","@typescript-eslint/no-empty-function":"off","@typescript-eslint/consistent-type-imports":"off","@typescript-eslint/no-useless-empty-export":"error",...e?.rules||{}}},{files:[t.COMMON],rules:{"@typescript-eslint/no-require-imports":"off"}}],c=L(),I=e=>[{...X.configs["flat/recommended"],files:[t.HTML],rules:{"@html-eslint/indent":["error","tab"],"@html-eslint/sort-attrs":["error"],"@html-eslint/quotes":["error","double"],"@html-eslint/element-newline":["error",{skip:["li"]}],"@html-eslint/attrs-newline":"error","@html-eslint/no-script-style-type":"error","@html-eslint/no-duplicate-id":"error","@html-eslint/no-obsolete-tags":"error","@html-eslint/require-li-container":"error","@html-eslint/no-multiple-h1":"error","@html-eslint/require-closing-tags":"error","@html-eslint/lowercase":"error","@html-eslint/require-attrs":["error",{tag:"img",attr:"alt"},{tag:"img",attr:"src"},{tag:"svg",attr:"viewBox"}],...e?.rules?e.rules:{}}}],m=I(),M=(e=Z(".gitignore"))=>K(e),P=e=>({ignores:[...e,"**/static/*","**/public/*"]}),A=e=>[{files:O,plugins:{jsdoc:C},rules:{...C.configs["flat/recommended"].rules,"jsdoc/sort-tags":"error","jsdoc/require-jsdoc":["error",{require:{}}],"jsdoc/require-description":["error",{descriptionStyle:"body"}],"jsdoc/require-hyphen-before-param-description":["error","always"],"jsdoc/check-line-alignment":["error","always"],"jsdoc/require-example":"off","jsdoc/tag-lines":["error","any",{startLines:1}],...e?.rules||{}}}],f=A(),_=e=>[{...S.configs.recommended,files:[t.PACKAGEJSON],rules:{...S.configs.recommended.rules,"jsonc/sort-array-values":["error",{pathPattern:"^files$",order:{type:"asc"}},{pathPattern:"^keywords$",order:["eslint","eslintplugin","eslint-plugin",{order:{type:"asc"}}]}],"package-json/no-redundant-files":"error","package-json/require-version":"off",...e?.rules||{}}}],q=e=>[...ee.configs["flat/recommended-with-jsonc"].map(r=>({...r,files:[t.JSON]})),{files:[t.JSON],languageOptions:{parser:re},rules:{"@stylistic/no-trailing-spaces":"error","@stylistic/no-multiple-empty-lines":["error",{max:0,maxEOF:0}],"jsonc/indent":["error","tab",{}],"jsonc/quotes":["error","double"],"jsonc/key-spacing":["error",{mode:"strict"}],"jsonc/array-bracket-newline":["error","always"],"jsonc/array-element-newline":["error","always"],"jsonc/object-property-newline":["error",{}],...e?.rules||{}}}],p=q(),u=_(),V=e=>[{files:[t.MARKDOWN],plugins:{markdownlint:n(E)},languageOptions:{parser:te},rules:{...E.configs.recommended.rules,"markdownlint/md001":"error","markdownlint/md013":"off","markdownlint/md033":"off","markdownlint/md024":"off",...e?.rules||{}}}],g=V(),$=()=>[...se.configs["flat/recommended"]],J=$(),me=async()=>{try{const{default:e}=await import("eslint-plugin-svelte");return e}catch(e){console.warn("[setSvelteConfig] Failed to import eslint-plugin-svelte",e);return}},fe=async e=>{const r=await me();return r?[...r.configs.recommended.map(s=>s.rules?{...s,files:[t.SVELTE]}:s),{files:[t.SVELTE,t.SVELTE_FILE],languageOptions:{parserOptions:{...e?.ts?{projectService:!0,extraFileExtensions:[".svelte"],parser:h.parser,...typeof e.ts=="boolean"?{}:e.ts}:{},svelteConfig:e?.svelteConfig}}},{files:[t.SVELTE],rules:{"align-import/align-import":"off","align-import/trim-import":"off","no-undef":"off","one-var":"off","svelte/require-each-key":"off","svelte/sort-attributes":"error","svelte/max-attributes-per-line":"error","svelte/mustache-spacing":"error","svelte/first-attribute-linebreak":"error","svelte/html-closing-bracket-spacing":"error","svelte/html-closing-bracket-new-line":"error","svelte/button-has-type":["error",{button:!0,submit:!0,reset:!0}],"svelte/spaced-html-comment":["error","always"],"svelte/indent":["error",{indent:"tab",ignoredNodes:[],switchCase:1,alignAttributesVertically:!1}],"prefer-const":"off","svelte/no-at-html-tags":"off","import/order":["error",{groups:[["builtin","external"],["internal","parent","sibling","index"],["type"],["object"]],pathGroups:[{pattern:"$*/**",group:"index",position:"after"},{pattern:"**/*.{css,sass,scss,postcss}",group:"internal",position:"before"}],named:!0,alphabetize:{order:"asc",caseInsensitive:!1},"newlines-between":"always",warnOnUnassignedImports:!0,distinctGroup:!1}],...e?.rules||{}}},{files:[t.SVELTE],rules:{"jsdoc/require-jsdoc":"off"}}]:[]},d=(e={})=>[{...x.configs["flat/recommended"],rules:{...x.configs["flat/recommended"].rules,...e.rules??{}},files:e.files?e.files:[t.TEST_E2E]}],pe=d(),N=e=>[...oe.configs["flat/standard"].map(r=>({files:[t.TOML],...r})),{files:[t.TOML],rules:{"toml/indent":["error","tab",{subTables:1,keyValuePairs:1}],...e?.rules||{}}}],y=N(),F=()=>[...ne.configs["flat/strongly-recommended"].map(e=>({files:[t.VUE],...e})),{files:[t.VUE],rules:{"jsdoc/require-jsdoc":"off","vue/html-indent":["error","tab",{}],"vue/html-comment-indent":["error","tab"],"vue/multi-word-component-names":["off"]}}],D=F(),R=e=>[...ie.configs["flat/prettier"].map(r=>({...r,files:[t.YAML]})),{files:[t.YAML],rules:{...e?.rules??{}}}],w=R(),ue=(e,r)=>{const s=[...e.general==="ts"?c:a,...e.jsdoc?f:[],...e.css?typeof e.css=="boolean"?T:l(e.css):[],...e.html?m:[],...e.md?g:[],...e.json?p:[],...e.package?u:[],...e.yaml?w:[],...e.toml?y:[],...e.schema?J:[],...e.vue?D:[],...e.playwright?d(typeof e.playwright=="boolean"?void 0:e.playwright):[],...e.gitignore?[M(typeof e.gitignore=="string"?e.gitignore:void 0)]:[],...e.ignore&&Array.isArray(e.ignore)?[P(e.ignore)]:[]];return r?r(s):s},U=[...c,...f,...m,...g,...w,...p,...u,...y];export{t as FILES,U as config,T as cssConfig,U as default,le as experimental__eslintEncreasePerformance,m as htmlConfig,M as includeGitIgnore,a as jsConfig,f as jsdocConfig,p as jsonConfig,g as mdConfig,u as packageJsonConfig,pe as playwrightConfig,J as schemaConfig,ue as setConfig,l as setCssConfig,I as setHtmlConfig,P as setIgnoreConfig,A as setJSDocConfig,k as setJsConfig,q as setJsonConfig,V as setMdConfig,_ as setPackageJsonConfig,d as setPlaywrightConfig,$ as setSchemaConfig,fe as setSvelteConfig,N as setTomlConfig,L as setTsConfig,ae as setTsConfigDir,F as setVueConfig,R as setYamlConfig,y as tomlConfig,c as tsConfig,D as vueConfig,w as yamlConfig};