UNPKG

eslint-config-shiny

Version:

An eslint config that makes your code so clean and polished that it shines!

2 lines (1 loc) 24.2 kB
import{deepMergeObj as qr}from"compresso";import{writeError as Ur}from"node-comb";import Qe,{CanceledError as Vr}from"promeister";import{keysOf as Xe,refMergeObj as Ze}from"compresso";function re(e){return!!e.configs.recommended}function j(e){let t={plugins:{},rules:{}};if(!e)return t;let r=Xe(e),n=r.length,o,i;for(let s=0;s<n;s++)o=r[s],i=e[o],t.plugins[o]=i,re(i)&&(t.rules=Ze(t.rules,i.configs.recommended.rules));return t}import{existsSync as pt}from"node:fs";import{mkdir as gt,writeFile as ut}from"node:fs/promises";import{join as mt}from"node:path";import{copyObj as dt,keysOf as Oe,mergeArr as ht,stringify as yt,valuesOf as Ct}from"compresso";import{dirname as lt,join as xe,resolve as ft}from"node:path";import{fileURLToPath as ct}from"node:url";import{safeGetFileHandle as at}from"node-comb";import{parseJson as et}from"compresso";import tt from"strip-json-comments";async function u(e){return et(tt((await e.readFile()).toString()))}import{isArray as rt,isNumber as nt,isString as Ce,keysOf as Pe}from"compresso";var we={error:2,off:0,warn:1},ot=/\//g;function P(e,t){let{rename:r,trim:n}=e,{numericValues:o,renames:i,trims:s}=e.optimizations,a=n.length,f=0,l;for(let c of Pe(t)){if(o&&(t[c]=it(t[c])),i){for(let p of Pe(r))if(c.startsWith(p)){be(t,c,st(c,r,p));break}}if(s){for(f=a-1;f>=0;f--)if(l=n[f],c.startsWith(l)){be(t,c,c.replace(l,""));break}}}}function it(e){return e?Ce(e)?we[e]??0:(rt(e)&&Ce(e[0])&&!nt(e[1])&&(e[0]=we[e[0]]),e):0}function st(e,t,r){let n=e.replace(r,t[r]);return(n.match(ot)?.length??0)<2?n:n.replace("/","-")}function be(e,t,r){e[r]??=e[t],delete e[t]}var S=class e{_entryFile;_typesFolder;deps;meta;bugUrl;description;homepage;keywords;name;version;constructor(t){this.meta=t,this.name=t.name,this.version=t.version,this.description=t.description}isCJS(){return this.meta.type==="commonjs"}isModule(){return this.meta.type==="module"}static async parse(t){let r=await at(t,"r+");if(!r)throw new Error(`Couldn't find package.json file for path "${t}"!`);let n=await u(r);return await r.close(),new e(n)}get dependencies(){return this.deps?this.deps:this.deps=Object.keys(this.meta.dependencies??[])}get entryFile(){if(this._entryFile)return this._entryFile;let t=this.meta;return this._entryFile=t.main??t.exports?.default??"index.js"}get typesFolder(){if(this._typesFolder)return this._typesFolder;let t=this.meta;return this._typesFolder=t.types??t.exports?.types??"index.d.ts"}};var v=class{currentPJPath;handlers;constructor(){this.handlers=new Map,this.currentPJPath=xe(lt(ct(import.meta.url)),"..","package.json")}async get(t){let r=this.handlers;if(r.has(t))return r.get(t);let n=await S.parse(t);return r.set(t,n),n}async getCurrentPackage(){return this.get(this.currentPJPath)}async getCwd(){return await this.get(xe(w,"package.json"))}async getModule(t){try{return await this.get(ft("node_modules",t,"package.json"))}catch{throw new Error(`Couldn't find node module ${t}.`)}}};var M="never",E="always";var ne="warn",w=process.cwd(),m=new v,R="json/json";async function A(e,t,r){let n=mt(e.root,".temp");pt(n)||await gt(n);let o=e.rename,i=Oe(o),s=Ct(o),a=t.configs;e.externalConfigs&&ht(a,e.externalConfigs);let f=a.length,l=[],c,p,ee=[],g,h;for(let te=0;te<f;te++){g={},ee=[],p=a[te],c=p.plugins??{};for(let Ye of Oe(c))ee.push(T(wt(Ye,i,s,o),i));g.plugins=ee,g.rules=p.rules,g.files=p.files,g.ignores=p.ignores,g.settings=p.settings,g.linterOptions=p.linterOptions,h=p.languageOptions,h&&(g.languageOptions=dt(h),h.parser&&(g.languageOptions.parser=T(h.parser.meta?.name??""),h.parserOptions?.parser?.meta&&(g.languageOptions.parserOptions.parser=T(h.parserOptions.parser.meta?.name??"")))),p.processor&&(g.processor=p.processor===R?R:T(p.processor.meta?.name??"")),l.push(g)}await ut(r.cachePath,await Pt(l,t,e),"utf8")}async function Pt(e,t,r){let n;for(let o=e.length-1;o>=0;o--)n=e[o].rules,n&&P(r,n);return yt({config:bt(t.cacheOpts),data:e,version:(await m.getCurrentPackage()).version})}function wt(e,t,r,n){if(!r.includes(e))return e;for(let o of t)if(n[o]===e)return o;return e}function bt(e){let t=e.slice().filter(Boolean),r=t.length,n={mapper:{}};for(let o=0;o<r;o++)Object.assign(n.mapper,t[o].mapper);return n}function T(e,t){if(!e.includes("/")||e.includes("@"))return e;if(e.includes("parser"))return`@${e}`;if(!t)return e;let r=e.split("/"),n=`${r[0]}/`,o=t.length,i;for(let s=0;s<o;s++)if(i=t[s],`${t[s]}/`.includes(n))return`${i}/${r[1]}`;return e}import{dirname as Dt}from"node:path";import{fileURLToPath as Ft}from"node:url";import{ensureArr as le,isArray as jt,isString as Mt}from"compresso";import Et from"promeister";var xt=new Set(["base","empty","format","jest","node","react","test-base","test-react","test-vue","test-web","tsdoc","vitest","vue","web"]);function oe(e){return xt.has(e)}import{deepMergeObj as Ot,isArray as Se,isEmptyObj as St,isObj as vt,keysOf as se,uniqueMerge as ie}from"compresso";function y(e,t,r=!1){let n=Object.assign({},e);Rt(n,t);let o=r?[]:["name"],i=["extends","languageOptions"];return r&&i.push("name"),ae(n,t,o,i),kt(n),n}function ae(e,t,r,n=[]){let o=ie(se(e),se(t)),i,s,a;for(let f of o)n.includes(f)||(r.includes(f)?e[f]=t[f]??e[f]:(i=e[f],s=t[f],Se(i)?(f.startsWith("import")&&ie(i,s),a=ie(i,s)):vt(i)?a=f==="settings"?Ot(i,s):Object.assign({},i,s):a=s??i,e[f]=a))}function Rt(e,t){if(!t.languageOptions){e.languageOptions??={};return}let r=t.languageOptions,n=e.languageOptions??={};ae(n,r,["parser"],["parserOptions"]);let o=r.parserOptions;if(!o){n.parserOptions??={};return}n.parserOptions?ae(n.parserOptions,o,["parser"]):n.parserOptions=o}function kt(e){let t=se(e);for(let r of t)(Se(e[r])&&!e[r].length||St(e[r]))&&delete e[r]}var k=new Map,Tt=Dt(Ft(import.meta.url));async function L(e,t){let r=e.configs,n=r.length;n||(r.push("empty"),n++);let o=new Array(n);for(let s=0;s<n;s++)o[s]=ve(r[s],t);let i=await Et.all(o);return $t(i.flat(),t)}async function ve(e,t){if(k.has(e))return k.get(e);try{let n=(await import(`file://${Tt}/profiles/${e}.js`)).default(t);return k.set(e,n),n}catch{throw new Error(`Unknown profile "${e}". Please make sure to only use known profiles.`)}}async function fe(e,t,r){if(!e.extends)return e;let n=e,o;for(let i=e.extends.length,s=0;s<i;s++)if(o=await At(e.extends[s],r),!!o){if(jt(o))for(let a of o)n=y(a.extends?await fe(a,t,r):a,n);else o.extends&&(o=await fe(o,t,r)),n=y(o,n);o=void 0}return n}async function At(e,t){let r;return Mt(e)&&oe(e)?r=k.has(e)?k.get(e):await ve(e,t):r=Lt(e),r}function Lt(e){let t={};return e.parserOptions?t={parserOptions:e.parserOptions}:e.languageOptions&&(t=e.languageOptions,t.globals=le(e.languageOptions.globals)),{files:e.files?.flat(),ignores:e.ignores,languageOptions:t,linterOptions:e.linterOptions,name:"extended-file",plugins:e.plugins??{},processor:le(e.processor),rules:le(e.rules),settings:e.settings}}async function $t(e,t){if(!e.length)return[];let n=[];for(let o of e)n.push(await fe(o,e,t));return n}import{mergeArr as Re}from"compresso";function D(e){let t=new Map,r=e.length,n=`merged-processor:${e[0].meta?.name??"unknown"}`;for(let o=1;o<r;o++)n=`${n}+${e[o].meta?.name??"unknown"}`;return{meta:{name:n},postprocess(o,i){let s=t.get(i),a=[];t.delete(i);let f=0,l;for(let c=0;c<r;c++)l=o.slice(f,f+s[c]),f+=s[c],Re(a,e[c].postprocess?.(l,i)??[]);return a},preprocess(o,i){let s=new Array(r),a=[];t.set(i,s);let f;for(let l=0;l<r;l++)f=e[l].preprocess?.(o,i)??[],s[l]=f.length,Re(a,f);return a},supportsAutofix:!0}}import{isEmptyObj as Jt,keysOf as ce}from"compresso";function $(e,t,r){let{numericValues:n,renames:o,trims:i}=t.optimizations;if(!o&&!i&&!n)return;let s=t.rename,a=t.trim,f;for(let l=e.length-1;l>=0;l--)f=e[l],f.plugins&&(o&&Bt(f.plugins,s),i&&Wt(f.plugins,a)),f.rules&&!r&&P(t,f.rules)}function Bt(e,t){if(Jt(e))return;let r=ce(t);for(let n of ce(e))for(let o of r)if(n===o){e[t[o]]=e[o],delete e[o];break}else if(n.startsWith(o)){e[n.replace(o,t[o]).replaceAll("/","-")]=e[n],delete e[n];break}}function Wt(e,t){let r=t.length,n,o;for(let i of ce(e))for(n=r-1;n>=0;n--)if(o=t[n],i.startsWith(o)){e[i.replace(o,"")]=e[i],delete e[i];break}}import{ensureArr as De,isArray as _t,isEmptyObj as I,mergeArr as Fe,mergeObj as pe,refMergeObj as Me}from"compresso";var b="?([cm])[jt]s?(x)";var ke=`**/*${b}`,Gn=[`**/__tests__/**/*.${b}`,`**/*.spec.${b}`,`**/*.test.${b}`,`**/*.bench.${b}`,`**/*.benchmark.${b}`];var Nt=new Set(["base","node","react","test-base","test-react","test-vue","test-web","vue"]);function J(e){let t=!1;for(let r=e.configs.length-1;r>=0;r--)if(Nt.has(e.configs[r])){t=!0;break}return t}import{FSEntity as It,pathExists as Gt}from"node-comb";async function B(e,t){return e.cache&&await Gt(t.cachePath)===It.File}function W(e){return!e.apply&&!e.externalConfigs&&!e.configs.length}function N(e){return!!e.rules}function zt(e){let t=e.languageOptions;if(!t||I(t))return!0;if(t.parserOptions){let r=t.parserOptions;return I(r)?!0:!!r.project&&!r.project.length}return!!t.globals&&I(t.globals)}function Ht(e){let t={},r=e.length;for(let n=0;n<r;n++)t=Me(t,e[n]);return t}function qt(e){let t={},r=e.length,n;for(let o=0;o<r;o++)n=e[o],!(!n.rules||I(n.rules))&&Me(t,n.rules);return t}function Ut(e){if(!e)return[];let t=e.length;if(!t)return[];let r=new Array(t),n;for(let o=0;o<t;o++)n=e[o],_t(n)?r[o]=qt(n):r[o]=N(n)?n.rules:n;return r}function je(e,t,r,n,o,i){let s=t[n];s?.length?e[n]=s:o?e[n]=r[0][n]??i:e[n]=i}var Vt=[ke],Kt=[];function G(e,t,r){let n=t.length,o=new Array(n),i=new Array(n),s,a,f,l,c;for(let p=0;p<n;p++)l=t[p],a=r&&p===0,a?s=j(e.apply?pe(l.apply,e.apply):l.apply):s=l.apply?j(l.apply):{},je(s,l,t,"files",a,Vt),je(s,l,t,"ignores",a,Kt),l.languageOptions&&(f=s.languageOptions=l.languageOptions,f.globals=pe(...De(l.languageOptions.globals))),zt(s)&&delete s.languageOptions,l.linterOptions&&(s.linterOptions=l.linterOptions),l.settings&&(s.settings=l.settings),l.processor&&(s.processor=D(l.processor)),s.plugins=pe(s.plugins??{},l.plugins??{}),c=[],s.rules&&Fe(c,De(s.rules)),l.rules&&Fe(c,Ut(l.rules)),a&&(s.languageOptions.parserOptions.tsconfigRootDir=e.root),s.rules=Ht(c),o[p]=s,i[p]=l.cache;return{cacheOpts:i,configs:o}}import{join as Qt}from"node:path";function _(e){return{cachePath:Qt(e.root,".temp","shiny-config.json")}}import{join as Xt}from"node:path";import Yt from"ora";var C=class extends Error{constructor(){super("No active branch for the DisplayManager was set."),this.name="InactiveDisplayError"}};var d=class extends Error{constructor(t){super(`Unknown key "${t}" has been passed to the DisplayManager.`),this.name="UnknownDisplayKeyError"}};import*as ue from"yoctocolors";var ge=class{displayColors;name;step;texts;constructor(t,r,n){this.name=t,this.step=0,this.texts=r,this.displayColors=n}getColor(t){return this.displayColors[t]}getText(t){return z(this.texts[t],this.displayColors[t])}isDone(){return this.step>=this.texts.length}next(){this.step++}get currentColor(){return this.getColor(this.step)}get currentText(){return this.getText(this.step)}},x=class{activeBranch;branches={};messages;optionalTasks;options;spinner;startTime=-1;toolOptions;warnings;constructor(t,r){this.spinner=Yt(),this.messages=r.messages,this.optionalTasks=r.optional,this.warnings=r.warnings,this.toolOptions=t,this.handleBranches(r)}displayNewTask(t,r){if(this.toolOptions.silent)return;let n=this.spinner;n.succeed(),n.text=t,n.color=r,n.start()}handleBranches(t){let r=this.toolOptions;if(r.silent)return;let n=t.branches,o=n.generic,i=this.options=t.options,s=Object.keys(n),a;for(let f of s){a=n[f];let l=[],c=[];Te(a,l,c,r,i),o&&Te(o,l,c,r,i),this.branches[f]=new ge(f,l,c)}this.activeBranch=this.branches[s[0]]}async abort(){if(this.toolOptions.silent)return;let t=this.spinner;t.stop(),t.warn(z(`${(await m.getCurrentPackage()).name} is finishing gracefully...`,"yellow"))}finish(t){if(this.toolOptions.silent)return;let r=this.messages[t];if(!r)throw new d(t);let n=this.spinner;n.succeed(),n.color="green",n.text=ue.greenBright(Le(r,this.toolOptions,this.startTime)),n.succeed()}next(){if(this.toolOptions.silent)return;let t=this.activeBranch;if(!t)throw new C;t.isDone()||(this.displayNewTask(t.currentText,t.currentColor),t.next())}optional(t){if(this.toolOptions.silent)return;let n=this.optionalTasks?.[t];if(!n)throw new d(t);if(Array.isArray(n))throw new Error("An optional task can't be in an array format.");this.displayNewTask(z(Ae(n.text,this.toolOptions,this.options),n.color),n.color)}setBranch(t){if(this.toolOptions.silent)return;let r=this.spinner;r.isSpinning&&r.stop();let n=this.branches;if(!n[t])throw new d(t);this.activeBranch=n[t]}start(){if(this.toolOptions.silent)return;let t=this.activeBranch;if(!t)throw new C;let r=this.spinner;r.color=t.currentColor,this.startTime===-1&&(this.startTime=Date.now()),r.text=t.currentText,r.color=t.currentColor,r.start(),t.next()}warn(t){if(this.toolOptions.silent)return;let r=this.warnings[t];if(!r)throw new d(t);let n=this.spinner,o=n.color;n.color="yellow",n.warn(z(r,"yellow")),n.color=o,n.start()}};function Ee(e,t,r,n,o){t.push(Ae(e.text,n,o)),r.push(e.color)}function z(e,t){return ue[t](e)}function Ae(e,t,r){return e=Le(e,t),r&&r.dots?`${e}...`:e}function Te(e,t,r,n,o){if(Array.isArray(e)){let i=e.length;for(let s=0;s<i;s++)Ee(e[s],t,r,n,o)}else Ee(e,t,r,n,o)}function Le(e,t,r){return e.includes("%root%")?e.replaceAll("%root%",t.root):r&&e.includes("%time%")?e.replaceAll("%time%",`${Date.now()-r}ms`):e}var Zt={branches:{cached:[{color:"yellow",text:"Validating cache file"},{color:"cyan",text:"Applying cache"}],generic:{color:"magenta",text:"Optimizing configs"},uncached:[{color:"yellow",text:"Fetching configs"},{color:"cyan",fallback:"No extra plugins needed to be applied!",text:"Applying plugins"},{color:"blue",text:"Parsing profiles"}]},messages:{complete:"Ready to lint after %time%!",noRules:"No rules to lint with. Finished after %time%!"},optional:{caching:{color:"magenta",text:`Caching final config under "${Xt("%root%",".temp","shiny-config.json")}"`},patchVSCode:{color:"cyan",text:"Patching VSCode"},updateBrowserList:{color:"cyan",text:"Updating browser list"}},options:{dots:!0},warnings:{eslintFound:"eslint.options were found in your vscode settings.json. Please merge this config into your eslint.config.js!",malformedCache:"Malformed cache file found. The config needs to be parsed again!",outdatedCache:"Outdated cache file found. The config needs to be parsed again!"}};function H(e,t){let r=new x(e,Zt);return r.setBranch(t?"cached":"uncached"),r.start(),r}import{join as er}from"node:path";import{pathToFileURL as tr}from"node:url";import{isFunction as rr,mergeArr as nr}from"compresso";import me from"promeister";var $e="eslint-plugin-";async function q(e){let t=[],r=e.data;if(!r)return[];let n=e.config,o=r.length,i;for(let s=0;s<o;s++)i=r[s],await me.all([lr(i,n),sr(i),fr(i)]),t.push(i);return t}function or(e){let t=e.length,r=[],n;for(let o=0;o<t;o++)n=e[o],rr(n)?r.push(n({blocks:{customBlocks:!0,script:!1,styles:!0,template:!1}})):r.push(n);return r}async function F(e){if((await m.getCurrentPackage()).dependencies.includes(e))return(await import(e)).default;let r=(await m.getModule(e)).entryFile;try{return(await import(tr(er(w,"node_modules",e,r)).href)).default}catch{throw new Error(`Could not find package ${e}`)}}async function ir(e){return e===R?e:await F(e)}async function sr(e){if(!e.languageOptions)return;let t=e.languageOptions,r=t.parser;r&&(t.parser=await F(r));let n=t.parserOptions?.parser;n&&(t.parserOptions.parser=await F(n))}function ar(e,t){if(t.mapper[e])return t.mapper[e];if(e.includes("@")){let r=e.indexOf("/");return r>0?`${e.substring(0,r)}/${$e}${e.substring(r+1)}`:`${e}/eslint-plugin`}return`${$e}${e}`}async function lr(e,t){let r={};if(e.plugins?.length){let n=e.plugins.length,o=new Array(n);for(let s=0;s<n;s++)o[s]=F(ar(e.plugins[s],t));let i=await me.all(o);for(let s=0;s<n;s++)r[e.plugins[s]]=i[s]}e.plugins=r}async function fr(e){let t=e.processor;if(!t)return;let r=t.includes("merged-processor")?t.substring(t.indexOf(":")+1).split("+"):[t],n=[];r[0]==="eslint-plugin-vue"&&(n.push((await F(r[0])).processors[".vue"]),r.shift()),nr(n,await me.all(r.map(ir))),e.processor=n.length===1?n[0]:D(or(n))}import{open as cr}from"node:fs/promises";import de from"semver";async function U(e,t){let r=await cr(e.cachePath,"r"),n=await u(r);await r.close();let o=de.coerce(n.version),i=(await m.getCurrentPackage()).version;if(!de.valid(o)||!n.data){t.warn("malformedCache");return}if(!o||de.lt(o,i)){t.warn("outdatedCache");return}return n}import{keysOf as _r,mergeArr as zr}from"compresso";import Hr from"promeister";import{open as pr}from"node:fs/promises";import{join as gr}from"node:path";import{isBool as ur,isNumber as mr,keysOf as dr}from"compresso";var hr={arrowParens:"arrow-parens",bracketSpacing:"block-spacing",endOfLine:"linebreak-style",quoteProps:"quote-props",semi:"semi",singleQuote:"quotes",trailingComma:"comma-dangle"},yr={printWidth:"code",tabWidth:"tabWidth"},Cr=new Set(["printWidth","tabWidth","useTabs"]),Pr=new Set(["avoid","false","none","preserve"]),wr=new Set(["bracketSameLine","editorconfig","embeddedLanguageFormatting","experimentalTernaries","filepath","htmlWhitespaceSensitivity","insertPragma","jsxBracketSameLine","jsxSingleQuote","parser","plugins","proseWrap","rangeEnd","rangeStart","requirePragma","singleAttributePerLine","vueIndentScriptAndStyle"]),Je="@stylistic/max-len",Be="@stylistic/indent";function br(e,t,r){switch(t){case"semi":e["@stylistic/no-extra-semi"]=r?0:1,e["@stylistic/semi-spacing"]=r?0:1,e["@stylistic/semi-style"]=[1,r?"first":"last"],e["@stylistic/member-delimiter-style"]=r?0:[1,{multiline:{delimiter:"semi"},singleline:{delimiter:"semi",requireLast:!1}}];break;case"useTabs":e["@stylistic/no-tabs"]=r?1:0;break}}function xr(e,t,r,n){let o=r==="tabWidth";if(r==="printWidth"||o){let s=t[Je];s??=t[Je]=[1,{}],s[1][yr[r]]=n}let i=r==="useTabs";if((i||o)&&e.indent){let s=t[Be];if(s??=t[Be]=[ne,{}],i&&n&&(s[1]="tab"),o&&mr(n)&&(s[1]=s[1]==="tab"?s[1]:n,!s[1])){let a=Math.floor(n*.5);s[1]={ArrayExpression:a,CallExpression:a,flatTernaryExpressions:!1,FunctionExpression:{body:n,parameters:a},ignoreComments:!1,ImportDeclaration:a,MemberExpression:a,ObjectExpression:a,offsetTernaryExpressions:!1,StaticBlock:n,SwitchCase:a,VariableDeclarator:"first"}}e.configs.includes("vue")&&(t["vue/html-indent"]=he(t["vue/html-indent"],i,n)),e.configs.includes("react")&&typeof n=="number"&&(r="@stylistic/jsx-indent",t[r]=he(t[r],i,n,{checkAttributes:!0,indentLogicalExpressions:!0}),r="@stylistic/jsx-indent-props",t[r]=he(t[r],i,n))}}function Or(e,t,r){ur(r)&&(r=`${r}`);let n=Pr.has(r),o=hr[t],i=0;switch(o){case"arrow-parens":case"quote-props":i=n?0:[1,r];break;case"block-spacing":i=[1,n?M:E],e["@stylistic/object-curly-spacing"]=i;break;case"comma-dangle":i=n?[1,M]:[1,r==="all"?E:"only-multiline"];break;case"linebreak-style":i=[1,r==="lf"?"unix":"windows"];break;case"quotes":i=[1,n?"double":"single",{avoidEscape:!0}];break;case"semi":i=[1,n?M:E];break;default:throw new Error(`Unknown prettier option ${t}.`)}e[`@stylistic/${o}`]=i,br(e,o,n)}function he(e,t,r,n){if(e)return e;let o=[ne,t&&r?"tab":r||4];return n&&o.push(n),o}var We="prettier-apply";async function V(e){let t,r={};try{t=await pr(gr(e.root,".prettierrc"),"r")}catch{return{name:We,rules:[]}}let n=await u(t);for(let o of dr(n))wr.has(o)||(Cr.has(o)?xr(e,r,o,n[o]):Or(r,o,n[o]));return await t.close(),{name:We,rules:[r]}}import{fdir as Sr}from"fdir";async function K(e){let t;if(e.tsconfigPath)return e.tsconfigPath;let n=await new Sr().withFullPaths().withMaxDepth(1).crawl(e.root).withPromise(),o=n.length;for(let i=0;i<o&&(t=n[i],!(t.includes("tsconfig")&&t.includes("json")));i++);return t}import{dirname as vr,relative as Ge,resolve as Rr}from"node:path";import{find as kr,safeGetFileHandle as Dr}from"node-comb";import Ne from"promeister";var Fr=/(?=((?:\\.|[^{(])*))\1([{(])/guy,jr=/^(\.\.\/)+$/,Mr=new Set(["","**","**/","/**"]),Er=new Set(["",".","/"]);async function Q(e){let t=e.ignoreFiles.length,r=new Array(t);for(let i=0;i<t;i++)r[i]=kr(e.ignoreFiles[i]);let n=await Ne.all(r),o=new Array(t);for(let i=0;i<t;i++)o[i]=Ar(n[i],e.root);return[...new Set((await Ne.all(o)).flat())]}function _e(e,t){return(t?e.slice(1):e).trimEnd()}function Tr(e){let t=e[0]==="!",r=t?"!":"",n=_e(e,t);if(Mr.has(n))return`${r}${n}`;let o=n.indexOf("/"),i=o===-1||o===n.length-1?"**/":"",s=(o===0?n.slice(1):n).replaceAll(Fr,"$1\\$2");return`${r}${i}${s}${n.endsWith("/**")?"/*":""}`}async function Ar(e,t){let r=await Dr(e,"r");if(!r)return[];let n=Ge(t,vr(e)).replaceAll("\\","/"),o=[],i;for await(let s of r.readLines())!s.length||s[0]==="#"||(i=Lr(Tr(s),n,t),i&&o.push(i));return await r.close(),o}function Ie(e){return e.length>1&&e[0]==="*"&&e[1]==="*"}function Lr(e,t,r){if(Er.has(t))return e;let n=e[0]==="!",o=n?"!":"",i=_e(e,n);if(t.at(-1)!=="/"&&(t=`${t}/`),t[0]!=="."&&t[1]!==".")return`${o}${t}${i}`;if(!jr.test(t))throw new Error("The ignore file location should be either a parent or child directory");if(Ie(i))return e;let s=Ge(Rr(r,t),r).split(/[/\\]/),a=s[0];for(;s.length&&i.startsWith(`${a}/`);)i=i.slice(a.length+1),s.shift(),a=s[0];return!s.length||Ie(i)?`${o}${i}`:void 0}import{existsSync as ze}from"node:fs";import{mkdir as $r,open as Jr,writeFile as Br}from"node:fs/promises";import{join as He}from"node:path";import{keysOf as Ue,refMergeObj as Wr,stringify as ye}from"compresso";import{replaceFileContent as Nr}from"node-comb";var Y={"editor.codeActionsOnSave":{"source.fixAll.eslint":"explicit"},"editor.defaultFormatter":"rvest.vs-code-prettier-eslint","editor.formatOnPaste":!0,"editor.formatOnSave":!0,"editor.formatOnSaveMode":"file","editor.formatOnType":!1,"eslint.useFlatConfig":!0,"eslint.validate":["javascript","javascriptreact","typescript","typescriptreact","vue","html","markdown","json","json5","jsonc","yaml","toml","xml","gql","graphql","astro","css","less","scss","pcss","postcss"],"files.autoSave":"onFocusChange","prettier.enable":!1},Ir=Ue(Y),qe=["style/*","format/*","*-indent","*-spacing","*-spaces","*-order","*-dangle","*-newline","*-style","*quotes","*semi"];async function X(e,t){t.optional("patchVSCode");let r=He(e.root,".vscode"),n=He(r,"settings.json");if(ze(r)||await $r(r),Gr(),!ze(n)){await Br(n,ye(Y),"utf8");return}let o=await Jr(n,"r+"),i=await u(o),s=Ue(i),a=!0;for(let f of s)f==="eslint.options"&&t.warn("eslintFound"),Ir.includes(f)&&(a=!1);a&&await Nr(o,ye(i),ye(Wr(i,Y)),0),await o.close()}function Gr(){let e=qe.length,t=Y["eslint.rules.customizations"]=new Array(e);for(let r=0;r<e;r++)t[r]={fixable:!0,rule:qe[r],severity:"off"}}var Ve=e=>{let t=e?2:0;return{name:"strict",rules:[{"ts/no-explicit-any":t,"ts/no-non-null-assertion":t,"ts/no-unsafe-argument":t,"ts/no-unsafe-assignment":t,"ts/no-unsafe-call":t,"ts/no-unsafe-member-access":t,"ts/no-unsafe-return":t,"ts/no-unsafe-unary-minus":t,"ts/restrict-plus-operands":t,"ts/restrict-template-expressions":t}]}};var Ke={ignoreFiles:Q,tsconfig:K};async function O(e,t,r){let n=J(e);for(let l of _r(Ke))r[l]=await Ke[l](e);let o=await L(e,r);t.next();let i=[];n&&e.configs.includes("format")&&e.prettier&&i.push(V(e));let s=await Hr.all(i);s.push(Ve(e.strict)),e.patchVSCode&&await X(e,t),t.next();let a=o[0];for(let l of s)a=y(a,l,!0);o[0]=a;let f=G(e,o,n);return e.cache&&(t.optional("caching"),await A(e,f,r)),e.externalConfigs&&!e.cache&&zr(f.configs,e.externalConfigs),f.configs}async function Z(e,t,r){let n=await U(r,t);return n?(t.next(),await q(n)):(t.setBranch("uncached"),t.start(),await O(e,t,r))}Qe.UseGlobal=!0;var Kr={cache:!0,configs:["base"],ignoreFiles:[".gitignore"],indent:!1,optimizations:{numericValues:!0,renames:!0,trims:!0},patchVSCode:!0,prettier:!0,rename:{"@eslint-react":"react","@microsoft/sdl":"sdl","@stylistic":"style","@typescript-eslint":"ts","@vitest":"vitest"},root:w,silent:!1,strict:!1,trim:["@eslint-community/"]};async function Qr(e={}){try{let t=qr(Kr,e),r=_(t),n=await B(t,r),o=H(t,n);if(process.listeners("SIGINT").length<10&&process.on("SIGINT",async()=>{Qe.GlobalController.abort(),await o.abort(),process.exit(0)}),W(t)&&!n)return o.finish("noRules"),[];let i=await(n?Z:O)(t,o,r);return o.next(),$(i,t,n),o.finish("complete"),i}catch(t){t instanceof Vr||Ur(t),process.exit(1)}}export{Qr as default};