UNPKG

@bluzzi/eslint-config

Version:

ESLint configuration preset for linting and formatting all your files

2 lines (1 loc) 8.83 kB
var d=()=>({name:"bluzzi/ignore",ignores:["**/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","**/.eslint-config-inspector","**/CHANGELOG*.md","**/*.min.*","**/LICENSE*","**/__snapshots__","**/auto-import?(s).d.ts","**/components.d.ts"]});import I from"@eslint/js";import c from"globals";var g=()=>({name:"bluzzi/javascript",languageOptions:{globals:{...c.browser,...c.es2021,...c.node,document:"readonly",navigator:"readonly",window:"readonly"},parserOptions:{ecmaFeatures:{jsx:!0}}},linterOptions:{reportUnusedDisableDirectives:!0},rules:{...I.configs.recommended.rules,"array-callback-return":"error","no-constructor-return":"error","no-inner-declarations":"error","no-promise-executor-return":"error","no-self-compare":"error","no-template-curly-in-string":"error","no-unmodified-loop-condition":"error","no-unreachable-loop":"error","no-use-before-define":"error","no-useless-assignment":"error","default-case-last":"error",eqeqeq:"error","func-names":"error","func-style":"error","grouped-accessor-pairs":"error","max-classes-per-file":"error","max-depth":"error","max-nested-callbacks":["error",{max:5}],"new-cap":"off","no-array-constructor":"error","no-caller":"error","no-else-return":"error","no-empty-function":"error","no-eq-null":"error","no-eval":"error","no-implied-eval":"error","no-extend-native":"error","no-implicit-coercion":"error","no-implicit-globals":"error","no-invalid-this":"error","no-iterator":"error","no-label-var":"error","no-lone-blocks":"error","no-lonely-if":"error","no-multi-assign":"error","no-multi-str":"error","no-new-func":"error","no-new-wrappers":"error","no-param-reassign":"off","no-plusplus":"error","no-return-assign":"error","no-script-url":"error","no-sequences":"error","no-undef-init":"error","no-undefined":"off","no-unneeded-ternary":"error","no-unused-expressions":"error","no-useless-call":"error","no-useless-computed-key":"error","no-useless-constructor":"error","no-useless-return":"error","no-var":"error","prefer-arrow-callback":"error","prefer-const":"error","prefer-object-has-own":"error","prefer-object-spread":"error","prefer-promise-reject-errors":"error","prefer-rest-params":"error","prefer-spread":"error","prefer-template":"error","require-unicode-regexp":"error",yoda:"error","no-duplicate-imports":"off","no-redeclare":"off","no-restricted-syntax":["error",{selector:"CallExpression[callee.property.name='forEach']",message:"`forEach` is more limited than a for loop as it doesn't support `break` for early exits or return values for chaining operations."}]}});import{default as x}from"eslint-plugin-antfu";import{default as b}from"eslint-plugin-n";import{default as f}from"@stylistic/eslint-plugin";import{default as n}from"@typescript-eslint/eslint-plugin";import{default as p}from"@next/eslint-plugin-next";import{default as m}from"@eslint-react/eslint-plugin";import{default as C}from"eslint-plugin-react-hooks";import{default as h}from"eslint-plugin-perfectionist";import{default as w}from"@typescript-eslint/parser";var v=()=>({name:"bluzzi/nextjs",files:["**/*.ts","**/*.tsx"],plugins:{"@next/next":p},rules:{...p.configs.recommended.rules,...p.configs["core-web-vitals"].rules}});var P=()=>({name:"bluzzi/node",plugins:{n:b},rules:{"n/no-deprecated-api":"error","n/no-new-require":"error","n/no-path-concat":"error"}});var k=({tsconfigPath:t}={})=>({name:"bluzzi/perfectionist",plugins:{perfectionist:h},rules:{"perfectionist/sort-imports":["error",{type:"alphabetical",order:"asc",fallbackSort:{type:"line-length",order:"asc"},ignoreCase:!1,specialCharacters:"keep",locales:"en-US",internalPattern:["^~/.*","^#/.*"],sortSideEffects:!1,partitionByComment:!0,partitionByNewLine:!1,newlinesBetween:"never",tsconfigRootDir:t,groups:[["external-type","builtin-type","internal-type","parent-type","sibling-type","index-type"],["object","index","sibling","parent","internal","external","builtin","unknown"],["style"],["side-effect-style"],["side-effect"]]}]}});var F=()=>({name:"bluzzi/react",files:["**/*.ts","**/*.tsx"],plugins:{...m.configs.recommended.plugins,"react-hooks":C},languageOptions:{parserOptions:{ecmaFeatures:{jsx:!0}},sourceType:"module"},rules:{...m.configs.recommended.rules,"react-hooks/rules-of-hooks":"error","react-hooks/exhaustive-deps":"error"}});var T=({indent:t=2,quotes:e="double",semi:r=!0,jsx:s=!1}={})=>{let i=f.configs.customize({indent:t,quotes:e,semi:r,jsx:s});return{name:"bluzzi/stylistic",plugins:{antfu:x,"@stylistic":f},rules:{...i.rules,"@stylistic/semi-style":"error","@stylistic/no-extra-semi":"error","@stylistic/function-call-spacing":"error","@stylistic/generator-star-spacing":["error",{before:!1,after:!0}],"@stylistic/implicit-arrow-linebreak":["error","beside"],"@stylistic/wrap-regex":"error","@stylistic/nonblock-statement-body-position":"error","@stylistic/arrow-parens":["error","always",{requireForBlockBody:!1}],"@stylistic/jsx-props-no-multi-spaces":["error"],"@stylistic/jsx-self-closing-comp":["error",{component:!0,html:!0}],"@stylistic/jsx-curly-brace-presence":["error",{props:"never",children:"never"}],"@stylistic/multiline-ternary":"off","antfu/consistent-list-newline":"error"}}};import{cwd as z}from"node:process";var j=({tsconfigPath:t}={})=>{let e=typeof t<"u",r=e?n.configs["strict-type-checked"]?.rules??[]:n.configs.strict?.rules??[],s=n.configs["stylistic-type-checked"]?.rules;return{name:"bluzzi/typescript",plugins:{"@typescript-eslint":n},languageOptions:{parser:w,parserOptions:e?{projectService:{defaultProject:t},tsconfigRootDir:z()}:{}},files:["**/*.?([cm])[jt]s?(x)"],rules:{...r,...s,"@typescript-eslint/ban-ts-comment":["error",{"ts-expect-error":"allow-with-description"}],"@typescript-eslint/consistent-type-definitions":["error","type"],"@typescript-eslint/consistent-type-imports":["error",{disallowTypeAnnotations:!1,prefer:"type-imports",fixStyle:"separate-type-imports"}],"@typescript-eslint/consistent-type-exports":["error",{fixMixedExportsWithInlineTypeSpecifier:!1}],"@typescript-eslint/no-import-type-side-effects":"error","@typescript-eslint/method-signature-style":["error","property"],"@typescript-eslint/no-require-imports":"error","@typescript-eslint/no-unused-vars":["error",{argsIgnorePattern:"^_",varsIgnorePattern:"^_",caughtErrorsIgnorePattern:"^_"}],"no-use-before-define":"off","@typescript-eslint/no-use-before-define":["error",{classes:!1,functions:!1,variables:!0}],"@typescript-eslint/explicit-member-accessibility":"error","@typescript-eslint/explicit-module-boundary-types":"off","@typescript-eslint/no-invalid-void-type":"off","@typescript-eslint/prefer-enum-initializers":"error","@typescript-eslint/prefer-find":"error","@typescript-eslint/prefer-readonly":"error","@typescript-eslint/prefer-regexp-exec":"error","@typescript-eslint/promise-function-async":"error","@typescript-eslint/require-array-sort-compare":"error","no-return-await":"off","@typescript-eslint/return-await":"error","@typescript-eslint/strict-boolean-expressions":"off","@typescript-eslint/no-misused-promises":["error",{checksVoidReturn:{attributes:!1}}],"@typescript-eslint/no-non-null-assertion":"off","@typescript-eslint/no-confusing-void-expression":"off","@typescript-eslint/prefer-nullish-coalescing":"off","@typescript-eslint/no-unnecessary-type-parameters":"off"}}};var l={Reset:"\x1B[0m",Bold:"\x1B[1m",Thin:"\x1B[2m",Underscore:"\x1B[4m",Blink:"\x1B[5m",Reverse:"\x1B[7m",Hidden:"\x1B[8m"},a={Gray:"\x1B[30m",Red:"\x1B[31m",Green:"\x1B[32m",Yellow:"\x1B[33m",Blue:"\x1B[34m",Magenta:"\x1B[35m",Cyan:"\x1B[36m",White:"\x1B[37m"};var u=class{info(e){console.log(`[${a.Blue}i${l.Reset}]: ${e}`)}success(e){console.log(`[${a.Green}\u221A${l.Reset}]: ${e}`)}warn(e){console.log(`[${a.Yellow}!${l.Reset}]: ${e}`)}error(e){console.log(`[${a.Red}\xD7${l.Reset}]: ${e}`)}},o=new u;import{FlatConfigComposer as R}from"eslint-flat-config-utils";import{isPackageExists as y}from"local-pkg";var Te=async(t={},...e)=>{let r=[],s={typescript:y("typescript"),react:y("react"),nextjs:y("next")};o.info("ignore - config enabled"),r.push(d()),o.info("javascript - config enabled"),r.push(g()),s.typescript&&(o.info("typescript - config enabled (typescript package found)"),r.push(j(t.typescript))),o.info("node - config enabled"),r.push(P()),o.info("stylistic - config enabled"),r.push(T({...t.stylistic,jsx:s.react})),s.react&&(o.info("react - config enabled"),r.push(F())),s.nextjs&&(o.info("nextjs - config enabled"),r.push(v())),o.info("perfectionist - config enabled"),r.push(k({tsconfigPath:t.typescript?.tsconfigPath}));let i=new R;return await i.append(...r,...e),i};export{Te as eslintConfig};