UNPKG

eslint-config-shiny

Version:

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

6 lines (5 loc) 27.2 kB
function Oe(e){return!!e.configs.recommended}function G(e){let t=Object.keys(e),r=t.length,n={plugins:{},rules:{}},o,s;for(let i=0;i<r;i++)o=t[i],s=e[o],n.plugins[o]=s,Oe(s)&&(n.rules=Object.assign(n.rules,s.configs.recommended.rules));return n}import{existsSync as Rt}from"node:fs";import{mkdir as jt,writeFile as At}from"node:fs/promises";import{join as Ft}from"node:path";import{dirname as vt,join as $e,resolve as Tt}from"node:path";import{fileURLToPath as kt}from"node:url";var Ee="\x1B[";function H(){process.stdout.write(`${Ee}A`),process.stdout.write(`${Ee}K`)}function h(e){return e?Array.isArray(e)?e.slice():[e]:[]}import ft from"strip-json-comments";async function d(e){return JSON.parse(ft((await e.readFile()).toString()))}import{basename as ut,dirname as mt,isAbsolute as dt,join as Se,parse as ht}from"node:path";var S=class extends Error{constructor(){super("No active branch for the DisplayManager was set."),this.name="InactiveDisplayError"}};var v=class extends Error{path;constructor(t){super(`The path "${t}" is neither a file nor a directory and therefore can not be processed.`),this.name="InvalidPathTypeError",this.path=t}};var y=class extends Error{constructor(){super("Process has been cancelled."),this.name="OperationCancelledError"}};var k=class extends Error{path;constructor(t){super(`Path ${t} does not exist.`),this.name="PathNotFoundError",this.path=t}};var C=class extends Error{constructor(t){super(`Unknown key "${t}" has been passed to the DisplayManager.`),this.name="InactiveDisplayError"}};import{access as pt,stat as gt}from"node:fs/promises";async function T(e){try{await pt(e);let t=await gt(e);return t.isFile()?1:t.isDirectory()?2:3}catch{return 0}}async function yt(e,t){let r=ht(e).root,n=ut(e),o=t?2:1,s,i=e;for(;i!==r&&s!==o;)if(i=mt(i),s=await T(Se(i,n)),s===3)throw new v(e);if(s===void 0)throw new k(e);return Se(i,n)}async function U(e,t,r=w){let n=dt(e)?e:Se(r,e);switch(await T(n)){case 0:return await yt(n,t);case 1:case 2:return n;case 3:throw new v(n)}}function x(...e){return Object.assign({},...e)}function g(e,t){return Array.prototype.push.apply(e,t),e}import{open as Ct}from"node:fs/promises";async function R(e,t){try{return await Ct(e,t)}catch{return}}var De={error:2,off:0,warn:1},Pt=/\//g;function bt(e,t,r){let n=e.replace(r,t[r]);return(n.match(Pt)?.length??0)<2?n:n.replace("/","-")}function Le(e,t,r){e[r]===void 0&&(e[r]=e[t]),delete e[t]}function wt(e){return e?typeof e=="string"?De[e]??0:(Array.isArray(e)&&typeof e[0]=="string"&&typeof e[1]!="number"&&(e[0]=De[e[0]]),e):0}function j(e,t,r){let n=r.length,o=0,s;for(let i of Object.keys(e)){e[i]=wt(e[i]);for(let a of Object.keys(t))if(i.startsWith(a)){Le(e,i,bt(i,t,a));break}for(o=n-1;o>=0;o--)if(s=r[o],i.startsWith(s)){Le(e,i,i.replace(s,""));break}}}import{exec as xt}from"node:child_process";import{promisify as Ot}from"node:util";var St=Ot(xt);async function q(e){return St(e)}import*as Me from"yoctocolors";function z(e){process.stderr.write(Buffer.from(` ${Me.red(e.stack??e.message)} `))}function _(e){process.stdout.write(Buffer.from(` ${e} `))}var M=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 R(t,"r+");if(!r)throw new Error(`Couldn't find package.json file for path "${t}"!`);let n=await d(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 $=class{currentPJPath;handlers;constructor(){this.handlers=new Map,this.currentPJPath=$e(vt(kt(import.meta.url)),"..","package.json")}async get(t){let r=this.handlers;if(r.has(t))return r.get(t);let n=await M.parse(t);return r.set(t,n),n}async getCurrentPackage(){return this.get(this.currentPJPath)}async getCwd(){return await this.get($e(w,"package.json"))}async getModule(t){try{return await this.get(Tt("node_modules",t,"package.json"))}catch{throw new Error(`Couldn't find node module ${t}.`)}}};var V="never",K="always";var ve="warn",w=process.cwd(),P=new $,A=new AbortController,J="json/json";function Et(e,t,r,n){if(!r.includes(e))return e;for(let o of t)if(n[o]===e)return o;return e}function Q(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,s;for(let i=0;i<o;i++)if(s=t[i],`${t[i]}/`.includes(n))return`${s}/${r[1]}`;return e}function Dt(e){let t=[...e].filter(Boolean),r=t.length,n={mapper:{}};for(let o=0;o<r;o++)Object.assign(n.mapper,t[o].mapper);return n}async function Lt(e,t,r){let n=r.rename,o=r.trim,s;for(let i=e.length-1;i>=0;i--)s=e[i].rules,s&&j(s,n,o);return JSON.stringify({config:Dt(t.cacheOpts),data:e,version:(await P.getCurrentPackage()).version})}async function Y(e,t,r){let n=Ft(e.root,".temp");Rt(n)||await jt(n);let o=e.rename,s=o?Object.keys(o):[],i=o?Object.values(o):[],a=t.configs;e.externalConfigs&&g(a,e.externalConfigs);let l=a.length,c=[],p,f,we=[],m,O;for(let xe=0;xe<l;xe++){m={},we=[],f=a[xe],p=f.plugins??{};for(let ct of Object.keys(p))we.push(Q(Et(ct,s,i,o),s));m.plugins=we,m.rules=f.rules,m.files=f.files,m.ignores=f.ignores,m.settings=f.settings,m.linterOptions=f.linterOptions,O=f.languageOptions,O&&(m.languageOptions=Object.assign({},O),O.parser&&(m.languageOptions.parser=Q(O.parser.meta?.name??""),O.parserOptions?.parser?.meta&&(m.languageOptions.parserOptions.parser=Q(O.parserOptions.parser.meta?.name??"")))),f.processor&&(m.processor=f.processor===J?J:Q(f.processor.meta?.name??"")),c.push(m)}await At(r.cachePath,await Lt(c,t,e),"utf8")}import{dirname as It}from"node:path";import{fileURLToPath as Wt}from"node:url";var Mt=new Set(["base","empty","format","jest","node","react","test-base","test-react","test-vue","test-web","tsdoc","vitest","vue","web"]);function Te(e){return Mt.has(e)}function b(e){for(let t in e)return!1;return!0}function Je(e,t){return[...new Set((e??[]).slice().concat(t??[]))]}function Be(e,t){for(let r in t)Array.isArray(t[r])?e[r]=Array.isArray(e[r])?e[r].concat(t[r]):t[r]:t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])?e[r]=Be(e[r]||{},t[r]):e[r]=t[r];return e}function ke(e,t,r,n=[]){let o=[...new Set(Object.keys(e??[]).concat(Object.keys(t)??[]))],s,i,a;for(let l of o)n.includes(l)||(r.includes(l)?e[l]=t[l]??e[l]:(s=e[l],i=t[l],Array.isArray(s)?(l.startsWith("import")&&Je(s,i),a=Je(s,i)):typeof s=="object"&&s!==null?a=l==="settings"?Be(s,i):Object.assign({},s,i):a=i??s,e[l]=a))}function $t(e,t){if(!t.languageOptions){e.languageOptions??={};return}let r=t.languageOptions,n=e.languageOptions??={};ke(n,r,["parser"],["parserOptions"]);let o=r.parserOptions;if(!o){n.parserOptions??={};return}n.parserOptions?ke(n.parserOptions,o,["parser"]):n.parserOptions=o}function Jt(e){let t=Object.keys(e);for(let r of t)(Array.isArray(e[r])&&!e[r].length||b(e[r]))&&delete e[r]}function F(e,t,r=!1){let n=Object.assign({},e);$t(n,t);let o=r?[]:["name"],s=["extends","languageOptions"];return r&&s.push("name"),ke(n,t,o,s),Jt(n),n}var Ne=()=>{};function B(){return{isCanceled:!1,onCancelList:[]}}function Ie(e){for(let t of e)if(typeof t=="function")try{t()}catch(r){console.error(r)}}var Bt={once:!0},u=class e{#e;#t;#n;#r;[Symbol.toStringTag]="CancelablePromise";constructor(t=Ne,r={internals:B(),signal:A.signal}){this.cancel=this.cancel.bind(this);let n=this.#e=r.internals,o=this.#n=r.signal;this.#t=r.promise||new Promise((s,i)=>{o&&(this.#r=()=>{this.cancel(),i(new y)},o.addEventListener("abort",this.#r,Bt)),t(s,i,a=>{n.onCancelList.push(a)})})}cancel(){let t=this.#e,r=t.onCancelList;t.isCanceled=!0,Ie(r),r=[],this.cleanup()}cleanup(){this.#n?.removeEventListener("abort",this.#r)}catch(t){let r=this.#e;return e.From(this.#t.catch(X(this.#e,t)),r)}finally(t,r){let n=this.#e,o=n.onCancelList;return r&&o.push(t),e.From(this.#t.finally(X(n,()=>{t&&(r&&(o=o.filter(s=>s!==t)),t(),this.cleanup())})),n)}isCanceled(){return this.#e.isCanceled}then(t,r){let n=this.#e;return e.From(this.#t.then(X(n,t),X(n,r)),n)}static all(t){return Z(t,Promise.all(t))}static allSettled(t){return Z(t,Promise.allSettled(t))}static any(t){return Z(t,Promise.any(t))}static From(t,r=B()){return new e(Ne,{internals:r,promise:t})}static race(t){return Z(t,Promise.race(t))}static reject(t){return e.From(Promise.reject(t),B())}static resolve(t){return e.From(Promise.resolve(t),B())}};function We(e){return e instanceof u}function X(e,t){if(t)return r=>{if(e.isCanceled)return r;let n=t(r);return We(n)&&e.onCancelList.push(n.cancel),n}}function Nt(e){e.isCanceled&&Ie(e.onCancelList)}function Z(e,t){let r=B();r.onCancelList.push(()=>{for(let o of e)We(o)&&o.cancel()});let n=A.signal;return u.From(new Promise((o,s)=>{let i=()=>s(new y);A.signal.addEventListener("abort",i),t.then(a=>{n.removeEventListener("abort",i),o(a)}).catch(s).finally(()=>Nt(r))}),r)}var N=new Map,Gt=It(Wt(import.meta.url));async function Ge(e){if(N.has(e))return N.get(e);try{let t=await import(`file://${Gt}/profiles/${e}.js`);return N.set(e,t.config),t.default??t.config}catch{throw new Error(`Unknown profile "${e}". Please make sure to only use known profiles.`)}}function Ht(e){let t={};return e.parserOptions?t={parserOptions:e.parserOptions}:e.languageOptions&&(t=e.languageOptions,t.globals=h(e.languageOptions.globals)),{files:e.files,ignores:e.ignores,languageOptions:t,linterOptions:e.linterOptions,name:"extended-file",plugins:e.plugins??{},processor:h(e.processor),rules:h(e.rules),settings:e.settings}}async function Ut(e,t){let r;if(typeof e=="string"&&Te(e))if(N.has(e))r=N.get(e);else{let n=await Ge(e);Array.isArray(n)?(r=n.shift(),g(t,n)):r=n}else typeof e!="string"&&(r=Ht(e));return r}async function He(e,t){if(!e.extends)return e;let r=e.extends.length,n=e,o;for(let s=0;s<r;s++)o=await Ut(e.extends[s],t),o&&(o.extends&&(o=await He(o,t)),n=F(o,n),o=void 0);return n}async function qt(e){if(!e.length)return[];let r=[];for(let n of e)r.push(await He(n,e));return r}async function ee(e){let t=e.configs,r=t.length;r||(t.push("empty"),r++);let n=new Array(r);for(let s=0;s<r;s++)n[s]=Ge(t[s]);let o=await u.all(n);return qt(o.flat())}function I(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,s){let i=t.get(s),a=[];t.delete(s);let l=0,c;for(let p=0;p<r;p++)c=o.slice(l,l+i[p]),l+=i[p],g(a,e[p].postprocess?.(c,s)??[]);return a},preprocess(o,s){let i=new Array(r),a=[];t.set(s,i);let l;for(let c=0;c<r;c++)l=e[c].preprocess?.(o,s)??[],i[c]=l.length,g(a,l);return a},supportsAutofix:!0}}function zt(e,t){if(e){for(let r of Object.keys(e))for(let n of Object.keys(t))if(r===n){e[t[n]]=e[n],delete e[n];break}else if(r.startsWith(n)){e[r.replace(n,t[n]).replaceAll("/","-")]=e[r],delete e[r];break}}}function _t(e,t){let r=t.length,n,o;for(let s of Object.keys(e))for(n=r-1;n>=0;n--)if(o=t[n],s.startsWith(o)){e[s.replace(o,"")]=e[s],delete e[s];break}}function te(e,t,r){let n=t.rename,o=t.trim,s;for(let i=e.length-1;i>=0;i--)s=e[i],s.plugins&&(zt(s.plugins,n),_t(s.plugins,o)),s.rules&&!r&&j(s.rules,n,o)}var E="?([cm])[jt]s?(x)";var Ue=`**/*${E}`,yo=[`**/__tests__/**/*.${E}`,`**/*.spec.${E}`,`**/*.test.${E}`,`**/*.bench.${E}`,`**/*.benchmark.${E}`];var Vt=new Set(["base","node","react","test-base","test-react","test-vue","test-web","vue"]);function re(e){let t=!1;for(let r=e.configs.length-1;r>=0;r--)if(Vt.has(e.configs[r])){t=!0;break}return t}async function ne(e,t){return e.cache&&await T(t.cachePath)===1}function oe(e){return!e.apply&&!e.externalConfigs&&!e.configs.length}function ie(e){return!!e.rules}function Kt(e){let t=e.languageOptions;if(!t||b(t))return!0;if(t.parserOptions){let r=t.parserOptions;return b(r)?!0:!!r.project&&!r.project.length}return!!t.globals&&b(t.globals)}function qe(e,t,r,n,o,s){let i=t[n];i?.length?e[n]=i:o?e[n]=r[0][n]??s:e[n]=s}function Qt(e){let t={},r=e.length,n;for(let o=0;o<r;o++)n=e[o],!(!n.rules||b(n.rules))&&x(t,n.rules);return t}function Yt(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],Array.isArray(n)?r[o]=Qt(n):r[o]=ie(n)?n.rules:n;return r}function Xt(e){let t={},r=e.length;for(let n=0;n<r;n++)t=x(t,e[n]);return t}var Zt=[Ue],er=[];function se(e,t,r){let n=t.length,o=new Array(n),s=new Array(n),i,a,l,c,p;for(let f=0;f<n;f++)c=t[f],a=r&&f===0,a?i=G(e.apply?x(c.apply,e.apply):c.apply):i=c.apply?G(c.apply):{},qe(i,c,t,"files",a,Zt),qe(i,c,t,"ignores",a,er),c.languageOptions&&(l=i.languageOptions=c.languageOptions,l.globals=x(...h(c.languageOptions.globals))),Kt(i)&&delete i.languageOptions,c.linterOptions&&(i.linterOptions=c.linterOptions),c.settings&&(i.settings=c.settings),c.processor&&(i.processor=I(c.processor)),i.plugins=x(i.plugins??{},c.plugins??{}),p=[],i.rules&&g(p,h(i.rules)),c.rules&&g(p,Yt(c.rules)),a&&(i.languageOptions.parserOptions.tsconfigRootDir=e.root),i.rules=Xt(p),o[f]=i,s[f]=c.cache;return{cacheOpts:s,configs:o}}import{join as tr}from"node:path";import{pathToFileURL as rr}from"node:url";var ze="eslint-plugin-";async function W(e){if((await P.getCurrentPackage()).dependencies.includes(e))return(await import(e)).default;let r=(await P.getModule(e)).entryFile;try{return(await import(rr(tr(w,"node_modules",e,r)).href)).default}catch{throw new Error(`Could not find package ${e}`)}}function nr(e,t){if(t.mapper[e])return t.mapper[e];if(e.includes("@")){let r=e.indexOf("/");return r>0?`${e.substring(0,r)}/${ze}${e.substring(r+1)}`:`${e}/eslint-plugin`}return`${ze}${e}`}async function or(e,t){let r={};if(e.plugins?.length){let n=e.plugins.length,o=new Array(n);for(let i=0;i<n;i++)o[i]=W(nr(e.plugins[i],t));let s=await u.all(o);for(let i=0;i<n;i++)r[e.plugins[i]]=s[i]}e.plugins=r}async function ir(e){if(!e.languageOptions)return;let t=e.languageOptions,r=t.parser;r&&(t.parser=await W(r));let n=t.parserOptions?.parser;n&&(t.parserOptions.parser=await W(n))}function sr(e){let t=e.length,r=[],n;for(let o=0;o<t;o++)n=e[o],typeof n=="function"?r.push(n({blocks:{customBlocks:!0,script:!1,styles:!0,template:!1}})):r.push(n);return r}async function ar(e){return e===J?e:await W(e)}async function lr(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 W(r[0])).processors[".vue"]),r.shift()),n.push(...await u.all(r.map(ar))),e.processor=n.length===1?n[0]:I(sr(n))}async function ae(e){let t=[],r=e.data,n=e.config,o=r.length,s;for(let i=0;i<o;i++)s=r[i],await u.all([or(s,n),ir(s),lr(s)]),t.push(s);return t}import{open as cr}from"node:fs/promises";import Re from"semver";async function le(e,t){let r=await cr(e.cachePath,"r"),n=await d(r);await r.close();let o=Re.coerce(n.version),s=(await P.getCurrentPackage()).version;if(!Re.valid(o)||!n.data){t.warn("malformedCache");return}if(!o||Re.lt(o,s)){t.warn("outdatedCache");return}return n}import{join as fr}from"node:path";function ce(e){return{cachePath:fr(e.root,".temp","shiny-config.json")}}var fe={cache:!0,configs:["base"],ignoreFiles:[".gitignore"],indent:!1,patchVSCode:!0,prettier:!0,rename:{"@eslint-react":"react","@microsoft/sdl":"sdl","@stylistic/js":"styleJs","@stylistic/jsx":"styleJsx","@stylistic/ts":"styleTs","@typescript-eslint":"ts","@vitest":"vitest"},root:w,strict:!1,trim:["@eslint-community/"],updateBrowsersList:!1};function pe(e){let t=Object.assign({},fe,e);return t.rename=Object.assign({},fe.rename,e?.rename??{}),t.trim=e?.trim?g(fe.trim,e.trim):fe.trim,t}import{join as gr}from"node:path";import pr from"ora";import*as Ae from"yoctocolors";function Ke(e,t,r){return e.includes("%root%")?e.replaceAll("%root%",t.root):r&&e.includes("%time%")?e.replaceAll("%time%",`${Date.now()-r}ms`):e}function Qe(e,t,r){return e=Ke(e,t),r&&r.dots?`${e}...`:e}function ge(e,t){return Ae[t](e)}function _e(e,t,r,n,o){t.push(Qe(e.text,n,o)),r.push(e.color)}function Ve(e,t,r,n,o){if(Array.isArray(e)){let s=e.length;for(let i=0;i<s;i++)_e(e[i],t,r,n,o)}else _e(e,t,r,n,o)}var je=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 ge(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)}},D=class{activeBranch;branches={};messages;warnings;optionalTasks;options;spinner;startTime=-1;toolOptions;constructor(t,r){this.spinner=pr(),this.messages=r.messages,this.optionalTasks=r.optional,this.warnings=r.warnings,this.toolOptions=t,this.handleBranches(r)}displayNewTask(t,r){let n=this.spinner;n.succeed(),n.text=t,n.color=r,n.start()}handleBranches(t){let r=this.toolOptions,n=t.branches,o=n.generic,s=this.options=t.options,i=Object.keys(n),a;for(let l of i){a=n[l];let c=[],p=[];Ve(a,c,p,r,s),o&&Ve(o,c,p,r,s),this.branches[l]=new je(l,c,p)}this.activeBranch=this.branches[i[0]]}async abort(){let t=this.spinner;t.stop(),t.warn(ge(`${(await P.getCurrentPackage()).name} is finishing gracefully...`,"yellow"))}finish(t){let r=this.messages[t];if(!r)throw new C(t);let n=this.spinner;n.succeed(),n.color="green",n.text=Ae.greenBright(Ke(r,this.toolOptions,this.startTime)),n.succeed()}next(){let t=this.activeBranch;if(!t)throw new S;t.isDone()||(this.displayNewTask(t.currentText,t.currentColor),t.next())}optional(t){let n=this.optionalTasks?.[t];if(!n)throw new C(t);if(Array.isArray(n))throw new Error("An optional task can't be in an array format.");this.displayNewTask(ge(Qe(n.text,this.toolOptions,this.options),n.color),n.color)}setBranch(t){let r=this.spinner;r.isSpinning&&r.stop();let n=this.branches;if(!n[t])throw new C(t);this.activeBranch=n[t]}start(){let t=this.activeBranch;if(!t)throw new S;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){let r=this.warnings[t];if(!r)throw new C(t);let n=this.spinner,o=n.color;n.color="yellow",n.warn(ge(r,"yellow")),n.color=o,n.start()}};var ur={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%!"},warnings:{malformedCache:"Malformed cache file found. The config needs to be parsed again!",outdatedCache:"Outdated cache file found. The config needs to be parsed again!",eslintFound:"eslint.options were found in your vscode settings.json. Please merge this config into your eslint.config.js!"},optional:{caching:{color:"magenta",text:`Caching final config under "${gr("%root%",".temp","shiny-config.json")}"`},patchVSCode:{color:"cyan",text:"Patching VSCode"},updateBrowserList:{color:"cyan",text:"Updating browser list"}},options:{dots:!0}};function ue(e,t){let r=new D(e,ur);return r.setBranch(t?"cached":"uncached"),r.start(),r}import{open as mr}from"node:fs/promises";import{join as dr}from"node:path";var hr={arrowParens:"arrow-parens",bracketSpacing:"block-spacing",endOfLine:"linebreak-style",quoteProps:"quote-props",semi:"semi",singleQuote:"quotes",trailingComma:"comma-dangle"},yr=new Set(["block-spacing","comma-dangle","quote-props","quotes"]),Cr={printWidth:"code",tabWidth:"tabWidth"},Pr=new Set(["printWidth","tabWidth","useTabs"]),br=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"]),et="@stylistic/js",tt="@stylistic/ts",Ye=`${et}/max-len`,Xe=`${tt}/indent`;function Fe(e,t,r,n){if(e)return e;let o=[ve,t&&r?"tab":r||4];return n&&o.push(n),o}function xr(e,t,r,n){let o=r==="tabWidth";if(r==="printWidth"||o){let i=t[Ye];i||(i=t[Ye]=[1,{}]),i[1][Cr[r]]=n}let s=r==="useTabs";if((s||o)&&e.indent){let i=t[Xe];if(i||(i=t[Xe]=[ve,{}]),s&&n&&(i[1]="tab"),o&&typeof n=="number"&&(i[1]=i[1]==="tab"?i[1]:n,!i[1])){let a=Math.floor(n/2);i[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"}}if(e.configs.includes("vue")&&(t["vue/html-indent"]=Fe(t["vue/html-indent"],s,n)),e.configs.includes("react")&&typeof n=="number"){let a="@stylistic/jsx/jsx-indent";t[a]=Fe(t[a],s,n,{checkAttributes:!0,indentLogicalExpressions:!0}),a="@stylistic/jsx/jsx-indent-props",t[a]=Fe(t[a],s,n)}}}function Or(e,t,r,n){switch(r){case"semi":e[`${t}/no-extra-semi`]=n?0:1,e["@stylistic/js/semi-spacing"]=n?0:1,e["@stylistic/js/semi-style"]=[1,n?"first":"last"],e["@stylistic/ts/member-delimiter-style"]=n?0:[1,{multiline:{delimiter:"semi"},singleline:{delimiter:"semi",requireLast:!1}}];break;case"useTabs":e["@stylistic/js/no-tabs"]=n?1:0;break}}function Sr(e,t,r){typeof r=="boolean"&&(r=`${r}`);let n=br.has(r),o=hr[t],s=yr.has(o)?tt:et,i=0;switch(o){case"arrow-parens":case"quote-props":i=n?0:[1,r];break;case"block-spacing":i=[1,n?V:K],e[`${s}/object-curly-spacing`]=i;break;case"comma-dangle":i=n?[1,V]:[1,r==="all"?K:"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?V:K];break;default:throw new Error(`Unknown prettier option ${t}.`)}e[`${s}/${o}`]=i,Or(e,s,o,n)}var Ze="prettier-apply";async function me(e){let t,r={};try{t=await mr(dr(e.root,".prettierrc"),"r")}catch{return{name:Ze,rules:[]}}let n=await d(t);for(let o of Object.keys(n))wr.has(o)||(Pr.has(o)?xr(e,r,o,n[o]):Sr(r,o,n[o]));return await t.close(),{name:Ze,rules:[r]}}import{fdir as vr}from"fdir";async function de(e){let t,r=!1;if(e.tsconfigPath)t=e.tsconfigPath,r=!0;else{let o=await new vr().withFullPaths().withMaxDepth(1).crawl(e.root).withPromise(),s=o.length;for(let i=0;i<s;i++)if(t=o[i],t.includes("tsconfig")&&t.includes("json")){r=!0;break}}return{languageOptions:{parserOptions:{projectService:{defaultProject:t&&r?t:"tsconfig.json"}}},name:"tsconfig-resolve"}}import{dirname as Tr,relative as nt,resolve as kr}from"node:path";var Rr=/(?=((?:\\.|[^{(])*))\1([{(])/guy,jr=/^(\.\.\/)+$/,Ar=new Set(["","**","**/","/**"]),Fr=new Set(["",".","/"]);function ot(e,t){return(t?e.slice(1):e).trimEnd()}function rt(e){return e.length>1&&e.startsWith("*")&&e[1]==="*"}function Er(e){let t=e.startsWith("!"),r=t?"!":"",n=ot(e,t);if(Ar.has(n))return`${r}${n}`;let o=n.indexOf("/"),s=o===-1||o===n.length-1?"**/":"",i=(o===0?n.slice(1):n).replaceAll(Rr,"$1\\$2");return`${r}${s}${i}${n.endsWith("/**")?"/*":""}`}function Dr(e,t,r){if(Fr.has(t))return e;let n=e.startsWith("!"),o=n?"!":"",s=ot(e,n);if(t.at(-1)!=="/"&&(t=`${t}/`),!t.startsWith(".."))return`${o}${t}${s}`;if(!jr.test(t))throw new Error("The ignore file location should be either a parent or child directory");if(rt(s))return e;let i=nt(kr(r,t),r).split(/[/\\]/),a=i[0];for(;i.length&&s.startsWith(`${a}/`);)s=s.slice(a.length+1),i.shift(),a=i[0];return!i.length||rt(s)?`${o}${s}`:void 0}async function Lr(e,t){let r=await R(e,"r");if(!r)return[];let n=nt(t,Tr(e)).replaceAll("\\","/"),o=[],s;for await(let i of r.readLines())!i.length||i.startsWith("#")||(s=Dr(Er(i),n,t),s&&o.push(s));return await r.close(),o}async function he(e,t){let r=e.length,n=new Array(r);for(let i=0;i<r;i++)n[i]=U(e[i]);let o=await u.all(n),s=new Array(r);for(let i=0;i<r;i++)s[i]=Lr(o[i],t);return{ignores:[...new Set((await u.all(s)).flat())],name:"parse-ignore-files"}}import{existsSync as it}from"node:fs";import{mkdir as Mr,open as $r,writeFile as Jr}from"node:fs/promises";import{join as st}from"node:path";var ye={"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},Br=Object.keys(ye),at=["style/*","format/*","*-indent","*-spacing","*-spaces","*-order","*-dangle","*-newline","*-style","*quotes","*semi"];function Nr(){let e=at.length,t=ye["eslint.rules.customizations"]=new Array(e);for(let r=0;r<e;r++)t[r]={fixable:!0,rule:at[r],severity:"off"}}async function Ce(e,t){t.optional("patchVSCode");let r=st(e.root,".vscode"),n=st(r,"settings.json");if(it(r)||await Mr(r),Nr(),!it(n)){await Jr(n,JSON.stringify(ye),"utf8");return}let o=await $r(n,"r+"),s=await d(o),i=Object.keys(s),a=!0;for(let l of i)l==="eslint.options"&&t.warn("eslintFound"),Br.includes(l)&&(a=!1);if(a){let l=Buffer.from(JSON.stringify(Object.assign(s,ye)));await o.truncate(0),await o.write(l,0,l.byteLength,0)}await o.close()}async function Pe(e){e.optional("updateBrowserList");let{stderr:t,stdout:r}=await q("npx update-browserslist-db@latest");H(),_(t.length?t:r)}var lt=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}]}};async function L(e,t,r){let n=re(e),o=await ee(e);t.next();let s=[de(e)];n&&e.configs.includes("format")&&e.prettier&&s.push(me(e)),e.ignoreFiles.length&&s.push(he(e.ignoreFiles,e.root));let i=await u.all(s);i.push(lt(e.strict)),e.patchVSCode&&await Ce(e,t),e.updateBrowsersList&&await Pe(t),t.next();let a=o[0];for(let c of i)a=F(a,c,!0);o[0]=a;let l=se(e,o,n);return e.cache&&(t.optional("caching"),await Y(e,l,r)),e.externalConfigs&&!e.cache?g(l.configs,e.externalConfigs):l.configs}async function be(e,t,r){let n=await le(r,t);return n?(t.next(),await ae(n)):(t.setBranch("uncached"),t.start(),await L(e,t,r))}async function Ir(e){try{let t=pe(e),r=ce(t),n=await ne(t,r),o=ue(t,n);if(process.on("SIGINT",async()=>{A.abort(),await o.abort(),process.exit(0)}),oe(t)&&!n)return o.finish("noRules"),[];let s=await(n?be:L)(t,o,r);return o.next(),te(s,t,n),o.finish("complete"),s}catch(t){t instanceof y||z(t),process.exit(1)}}export{Ir as default};