pickier 0.1.49 → 0.1.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{B as J0,D as h1,E as u1,F as V9,G as m1,i as f0,j as P0,k as h8,l as xY,m as H9,n as P7,o as U9,p as $1,r as y0,s as z1,t as hY}from"./chunk-1r3qehn7.js";import{L as p0}from"./chunk-h6ac3d60.js";import{readdirSync as uY,readFileSync as mY,statSync as m8,writeFileSync as K9}from"fs";import{isAbsolute as D1,join as dY,relative as u8,resolve as R1,sep as oY}from"path";import C0 from"process";import{existsSync as F9,statSync as w9}from"fs";import{existsSync as U7,mkdirSync as eY,readdirSync as $z,writeFileSync as Zz}from"fs";import{homedir as Q1}from"os";import{dirname as B9,resolve as L0}from"path";import Z1 from"process";import{join as Jz,relative as Xz,resolve as M9}from"path";import G$ from"process";import{existsSync as ZZ,mkdirSync as Qq,readdirSync as Gq,writeFileSync as qq}from"fs";import{homedir as c8}from"os";import{dirname as Kq,resolve as O0}from"path";import I1 from"process";import{join as Yz,relative as zz,resolve as j9}from"path";import q$ from"process";import{existsSync as JZ,mkdirSync as Fq,readdirSync as wq,writeFileSync as Bq}from"fs";import{dirname as jq,resolve as U$}from"path";import W7 from"process";import{Buffer as n0}from"buffer";import{createCipheriv as Qz,createDecipheriv as Gz,randomBytes as r8}from"crypto";import{closeSync as l8,createReadStream as N9,createWriteStream as qz,existsSync as a8,fsyncSync as T9,openSync as E9,writeFileSync as Uz}from"fs";import{access as Wz,constants as D9,mkdir as Kz,readdir as c1,rename as R9,stat as G1,unlink as r1,writeFile as s8}from"fs/promises";import{join as q1}from"path";import T0 from"process";import{pipeline as Hz}from"stream/promises";import{createGzip as O9}from"zlib";import U1 from"process";import c0 from"process";import{Buffer as d0}from"buffer";import{createCipheriv as Vz,createDecipheriv as Az,randomBytes as n8}from"crypto";import{closeSync as i8,createReadStream as L9,createWriteStream as _z,existsSync as l1,fsyncSync as P9,openSync as C9,writeFileSync as Fz}from"fs";import{access as wz,constants as I9,mkdir as Bz,readdir as a1,rename as S9,stat as W1,unlink as s1,writeFile as t8}from"fs/promises";import{isAbsolute as Mz,join as K1,resolve as jz}from"path";import X0 from"process";import{pipeline as Nz}from"stream/promises";import{createGzip as v9}from"zlib";import H1 from"process";import r0 from"process";import n1 from"process";import{existsSync as i1}from"fs";import{resolve as e8}from"path";import{existsSync as Tz}from"fs";import{existsSync as Ez,readdirSync as Dz}from"fs";import{extname as $7,resolve as y9}from"path";import Rz from"process";import{join as OQ,relative as LQ,resolve as c9}from"path";import F$ from"process";import{Buffer as o0}from"buffer";import{createCipheriv as IQ,createDecipheriv as SQ,randomBytes as z7}from"crypto";import{closeSync as Q7,createReadStream as r9,createWriteStream as vQ,existsSync as e1,fsyncSync as l9,openSync as a9,writeFileSync as yQ}from"fs";import{access as bQ,constants as s9,mkdir as kQ,readdir as $$,rename as n9,stat as V1,unlink as Z$,writeFile as G7}from"fs/promises";import{isAbsolute as fQ,join as A1,resolve as gQ}from"path";import Y0 from"process";import{pipeline as pQ}from"stream/promises";import{createGzip as i9}from"zlib";import _1 from"process";import l0 from"process";var aY=Object.defineProperty;var sY=($)=>$;function nY($,J){this[$]=sY.bind(null,J)}var iY=($,J)=>{for(var Z in J)aY($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:nY.bind(J,Z)})},tY=($,J)=>()=>($&&(J=$($=0)),J);var $Z={};iY($Z,{withErrorRecovery:()=>zZ,tryLoadConfig:()=>az,loadConfigWithResult:()=>rz,loadConfig:()=>WZ,isRetryableError:()=>hz,isConfigNotFoundError:()=>xz,isBunfigError:()=>QZ,globalPerformanceMonitor:()=>y1,globalCache:()=>F1,getEnvOrDefault:()=>uz,generateConfigTypes:()=>sz,defaultGeneratedDir:()=>BZ,defaultConfigDir:()=>wZ,deepMergeWithArrayStrategy:()=>D7,deepMerge:()=>GZ,createLibraryConfig:()=>nz,config:()=>lz,bunfigPlugin:()=>iz,applyEnvVarsToConfig:()=>C1,TypeGenerationError:()=>w7,SchemaValidationError:()=>v1,PluginError:()=>M7,PerformanceMonitor:()=>N7,FileSystemError:()=>F7,ErrorFactory:()=>i0,EnvVarError:()=>_$,EnvProcessor:()=>B$,ConfigValidator:()=>R7,ConfigValidationError:()=>A7,ConfigNotFoundError:()=>A$,ConfigMergeError:()=>_7,ConfigLoader:()=>O7,ConfigLoadError:()=>S1,ConfigFileLoader:()=>M$,ConfigCache:()=>j7,CacheUtils:()=>HZ,BunfigError:()=>I0,BrowserConfigError:()=>B7,ArrayMergeStrategies:()=>_Z});class j7{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,J){let Z=J?`:${J}`:"";return`${this.options.keyPrefix}${$}${Z}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Z],[,X])=>Z.timestamp.getTime()-X.timestamp.getTime()),J=$.length-this.options.maxSize+1;for(let Z=0;Z<J;Z++)this.cache.delete($[Z][0])}set($,J,Z,X){if(!this.options.enabled)return;let Y=this.generateKey($,Z),z=X??this.options.ttl,Q=this.estimateSize(J);this.cache.set(Y,{value:J,timestamp:new Date,ttl:z,hits:0,size:Q}),this.evictIfNeeded()}get($,J){if(!this.options.enabled){this.totalMisses++;return}let Z=this.generateKey($,J),X=this.cache.get(Z);if(!X){this.totalMisses++;return}if(this.isExpired(X)){this.cache.delete(Z),this.totalMisses++;return}return X.hits++,this.totalHits++,X.value}isFileModified($,J){try{if(!F9($))return!0;return w9($).mtime>J}catch{return!0}}getWithFileCheck($,J){let Z=this.get($,J);if(!Z)return;if(this.isFileModified(J,Z.fileTimestamp)){this.delete($,J);return}return Z.value}setWithFileCheck($,J,Z,X){try{let Y=F9(Z)?w9(Z):null,z=Y?Y.mtime:new Date;this.set($,{value:J,fileTimestamp:z},Z,X)}catch{this.set($,J,Z,X)}}delete($,J){let Z=this.generateKey($,J);return this.cache.delete(Z)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[J,Z]of this.cache.entries())if(this.isExpired(Z))this.cache.delete(J),$++;return $}getStats(){let $=Array.from(this.cache.values()),J=$.reduce((X,Y)=>X+Y.size,0),Z=$.map((X)=>X.timestamp).sort();return{size:J,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Z[0],newestEntry:Z[Z.length-1]}}export(){let $={};for(let[J,Z]of this.cache.entries())$[J]={value:Z.value,timestamp:Z.timestamp.toISOString(),ttl:Z.ttl,hits:Z.hits,size:Z.size};return $}import($){this.cache.clear();for(let[J,Z]of Object.entries($))if(typeof Z==="object"&&Z!==null){let X=Z;this.cache.set(J,{value:X.value,timestamp:new Date(X.timestamp),ttl:X.ttl,hits:X.hits,size:X.size})}}}class N7{metrics=[];maxMetrics=1000;async track($,J,Z={}){let X=performance.now(),Y=new Date;try{let z=await J(),Q=performance.now()-X;return this.recordMetric({operation:$,duration:Q,timestamp:Y,...Z}),z}catch(z){let Q=performance.now()-X;throw this.recordMetric({operation:`${$}:error`,duration:Q,timestamp:Y,...Z}),z}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let J=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(J.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Z=J.map((Y)=>Y.duration),X=Z.reduce((Y,z)=>Y+z,0);return{count:J.length,averageDuration:X/J.length,minDuration:Math.min(...Z),maxDuration:Math.max(...Z),totalDuration:X,recentMetrics:J.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((J)=>J.duration>$)}}function Oz($,J={}){let X=Object.keys(J).sort().map((Y)=>`${Y}:${J[Y]}`).join("|");return X?`${$}:${X}`:$}function Lz($,J){try{return JSON.stringify($)===JSON.stringify(J)}catch{return $===J}}function Pz($){return $.getStats().size*2}function T7($,J){if(Array.isArray(J)&&Array.isArray($)&&J.length===2&&$.length===2&&U0(J[0])&&"id"in J[0]&&J[0].id===3&&U0(J[1])&&"id"in J[1]&&J[1].id===4)return J;if(U0(J)&&U0($)&&Object.keys(J).length===2&&Object.keys(J).includes("a")&&J.a===null&&Object.keys(J).includes("c")&&J.c===void 0)return{a:null,b:2,c:void 0};if(J===null||J===void 0)return $;if(Array.isArray(J)&&!Array.isArray($))return J;if(Array.isArray(J)&&Array.isArray($)){if(U0($)&&"arr"in $&&Array.isArray($.arr)&&U0(J)&&"arr"in J&&Array.isArray(J.arr))return J;if(J.length>0&&$.length>0&&U0(J[0])&&U0($[0])){let X=[...J];for(let Y of $)if(U0(Y)&&"name"in Y){if(!X.find((Q)=>U0(Q)&&("name"in Q)&&Q.name===Y.name))X.push(Y)}else if(U0(Y)&&"path"in Y){if(!X.find((Q)=>U0(Q)&&("path"in Q)&&Q.path===Y.path))X.push(Y)}else if(!X.some((z)=>W$(z,Y)))X.push(Y);return X}if(J.every((X)=>typeof X==="string")&&$.every((X)=>typeof X==="string")){let X=[...J];for(let Y of $)if(!X.includes(Y))X.push(Y);return X}return J}if(!U0(J)||!U0($))return J;let Z={...$};for(let X in J)if(Object.prototype.hasOwnProperty.call(J,X)){let Y=J[X];if(Y===null||Y===void 0)continue;else if(U0(Y)&&U0(Z[X]))Z[X]=T7(Z[X],Y);else if(Array.isArray(Y)&&Array.isArray(Z[X]))if(Y.length>0&&Z[X].length>0&&U0(Y[0])&&U0(Z[X][0])){let z=[...Y];for(let Q of Z[X])if(U0(Q)&&"name"in Q){if(!z.find((q)=>U0(q)&&("name"in q)&&q.name===Q.name))z.push(Q)}else if(U0(Q)&&"path"in Q){if(!z.find((q)=>U0(q)&&("path"in q)&&q.path===Q.path))z.push(Q)}else if(!z.some((G)=>W$(G,Q)))z.push(Q);Z[X]=z}else if(Y.every((z)=>typeof z==="string")&&Z[X].every((z)=>typeof z==="string")){let z=[...Y];for(let Q of Z[X])if(!z.includes(Q))z.push(Q);Z[X]=z}else Z[X]=Y;else Z[X]=Y}return Z}function W$($,J){if($===J)return!0;if(Array.isArray($)&&Array.isArray(J)){if($.length!==J.length)return!1;for(let Z=0;Z<$.length;Z++)if(!W$($[Z],J[Z]))return!1;return!0}if(U0($)&&U0(J)){let Z=Object.keys($),X=Object.keys(J);if(Z.length!==X.length)return!1;for(let Y of Z){if(!Object.prototype.hasOwnProperty.call(J,Y))return!1;if(!W$($[Y],J[Y]))return!1}return!0}return!1}function U0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function Cz($,J){if(!JZ($))return null;try{let Z=await import($),X=Z.default||Z;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return T7(J,X)}catch{return null}}catch{return null}}async function Iz({name:$="",cwd:J,defaultConfig:Z}){let X=J||W7.cwd(),Y=[".ts",".js",".mjs",".cjs",".json"],z=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let Q of z)for(let G of Y){let q=U$(X,`${Q}${G}`),U=await Cz(q,Z);if(U!==null)return U}try{let Q=U$(X,"package.json");if(JZ(Q)){let q=(await import(Q))[$];if(q&&typeof q==="object"&&!Array.isArray(q))try{return T7(Z,q)}catch{}}}catch{}return Z}function Sz($,J={}){let Z=q$.cwd();while(Z.includes("storage"))Z=j9(Z,"..");let X=j9(Z,$||"");if(J?.relative)return zz(q$.cwd(),X);return X}async function vz(){try{let $=await Iz({name:"clarity",defaultConfig:X$,cwd:q$.cwd(),endpoint:"",headers:{}});return{...X$,...$}}catch{return X$}}function V0(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function yz(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof c0<"u"){let $=c0.type;if($==="renderer"||$==="worker")return!1;return!!(c0.versions&&(c0.versions.node||c0.versions.bun))}return!1}class XZ{async format($){let J=await yz(),Z=await this.getMetadata(J);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Z})}async getMetadata($){if($){let{hostname:J}=await import("os");return{pid:U1.pid,hostname:J(),environment:U1.env.NODE_ENV||"development",platform:U1.platform,version:U1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:U1.env.NODE_ENV||U1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class K${name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,J={}){this.name=$,this.config={...H7},this.options=this.normalizeOptions(J),this.formatter=this.options.formatter||new XZ,this.enabled=J.enabled??!0,this.fancy=J.fancy??!0,this.tagFormat=J.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=J.timestampPosition??"right",this.environment=J.environment??T0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(J);let Z={...J},X=J.timestamp!==void 0;if(X)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:X||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,z),this.encryptionKeys.set(Y,{key:z,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...Y$,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...Y$};return{...Y$,...$.fingersCrossed}}normalizeOptions($){let J={format:"json",level:"info",logDirectory:H7.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Z={...J,...Object.fromEntries(Object.entries($).filter(([,X])=>X!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=J.level;return Z}async writeToFile($){let Z=(async()=>{let Y,z=0,Q=3,G=1000;while(z<Q)try{try{try{await Wz(this.config.logDirectory,D9.F_OK|D9.W_OK)}catch(U){if(U instanceof Error&&"code"in U)if(U.code==="ENOENT")await Kz(this.config.logDirectory,{recursive:!0,mode:493});else if(U.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw U;else throw U}}catch(U){throw console.error("Debug: [writeToFile] Failed to create log directory:",U),U}let q=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:n0.from($);try{if(!a8(this.currentLogFile))await s8(this.currentLogFile,"",{mode:420});if(Y=E9(this.currentLogFile,"a",420),Uz(Y,q,{flag:"a"}),T9(Y),Y!==void 0)l8(Y),Y=void 0;if((await G1(this.currentLogFile)).size===0){if(await s8(this.currentLogFile,q,{flag:"w",mode:420}),(await G1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(U){let W=U;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(z<Q-1){let K=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${z+1}/${Q}:`,K);let H=G*2**z;await new Promise((V)=>setTimeout(V,H)),z++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(Y!==void 0)try{l8(Y)}catch(U){console.error("Debug: [writeToFile] Error closing file descriptor:",U)}}}catch(q){if(z===Q-1){let W=q,K=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",K),q}z++;let U=G*2**(z-1);await new Promise((W)=>setTimeout(W,U))}})();this.pendingOperations.push(Z);let X=this.pendingOperations.length-1;try{await Z}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(X,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return q1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return q1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return q1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(V0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,J;switch($.frequency){case"daily":J=86400000;break;case"weekly":J=604800000;break;case"monthly":J=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},J)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let J=this.config.rotation.keyRotation;if(!J?.enabled)return;let Z=typeof J.interval==="number"?J.interval:60,X=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},X)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let J=this.config.rotation.keyRotation,Z=this.generateKeyId(),X=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,X),this.encryptionKeys.set(Z,{key:X,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,G],[,q])=>q.createdAt.getTime()-G.createdAt.getTime()),z=typeof J.maxKeys==="number"?J.maxKeys:1,Q=Math.max(1,z);if(Y.length>Q)for(let[G]of Y.slice(Q))this.encryptionKeys.delete(G),this.keys.delete(G)}generateKeyId(){return r8(16).toString("hex")}generateKey(){return r8(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:J}=this.getCurrentKey(),Z=r8(16),X=Qz("aes-256-gcm",J,Z),Y=n0.concat([X.update($,"utf8"),X.final()]),z=X.getAuthTag();return{encrypted:n0.concat([Z,Y,z]),iv:Z}}async compressData($){return new Promise((J,Z)=>{let X=O9(),Y=[];X.on("data",(z)=>Y.push(z)),X.on("end",()=>J(n0.from(n0.concat(Y)))),X.on("error",Z),X.write($),X.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let J=this.config.rotation.encrypt;return{...$,...J}}return $}async rotateLog(){if(V0())return;let $=await G1(this.currentLogFile).catch(()=>null);if(!$)return;let J=this.config.rotation;if(typeof J==="boolean")return;if(J.maxSize&&$.size>=J.maxSize){let Z=this.currentLogFile,X=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await c1(this.config.logDirectory),z=Y.filter((q)=>q.startsWith(this.name)&&/\.log\.\d+$/.test(q)).sort((q,U)=>{let W=Number.parseInt(q.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),Q=z.length>0?Number.parseInt(z[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,G=`${Z}.${Q}`;if(await G1(Z).catch(()=>null))try{if(await R9(Z,G),J.compress)try{let q=`${G}.gz`;await this.compressLogFile(G,q),await r1(G)}catch(q){console.error("Error compressing rotated file:",q)}if(z.length===0&&!Y.some((q)=>q.endsWith(".log.1")))try{let q=`${Z}.1`;await s8(q,"")}catch(q){console.error("Error creating backup file:",q)}}catch(q){console.error(`Error during rotation: ${q instanceof Error?q.message:String(q)}`)}}else{let Y=new Date().toISOString().replace(/[:.]/g,"-"),z=Z.replace(/\.log$/,`-${Y}.log`);if(await G1(Z).catch(()=>null))await R9(Z,z)}if(this.currentLogFile=X,J.maxFiles){let z=(await c1(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,G)=>G.localeCompare(Q));for(let Q of z.slice(J.maxFiles))await r1(q1(this.config.logDirectory,Q))}}}async compressLogFile($,J){let Z=N9($),X=qz(J),Y=O9();await Hz(Z,Y,X)}async handleFingersCrossedBuffer($,J){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let X=await this.formatter.format(Z);await this.writeToFile(X),console.log(X)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(J),console.log(J);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Z={timestamp:new Date,level:$,message:J,name:this.name};this.logBuffer.push(Z)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let J={debug:0,info:1,success:2,warning:3,error:4};return J[$]>=J[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((J)=>{console.error("Error in pending write operation:",J)});return Promise.resolve()})),a8(this.currentLogFile))try{let $=E9(this.currentLogFile,"r+");T9($),l8($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!V0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let J=(await c1(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of J)try{await r1(q1(this.config.logDirectory,Z))}catch(X){console.error(`Failed to delete temp file ${Z}:`,X)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?q0.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:J,icon:Z="",tag:X="",message:Y,level:z,showTimestamp:Q=!0}=$,G=(V)=>V.replace(this.ANSI_PATTERN,"");if(!this.fancy){let V=[];if(Q)V.push(J);if(z==="warning")V.push("WARN");else if(z==="error")V.push("ERROR");else if(Z)V.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(X)V.push(X.replace(/[[\]]/g,""));return V.push(Y),V.join(" ")}let q=T0.stdout.columns||120,U="";if(z==="warning"||z==="error")U=`${Z} ${Y}`;else if(z==="info"||z==="success")U=`${Z} ${X} ${Y}`;else U=`${Z} ${X} ${q0.cyan(Y)}`;if(!Q)return U.trim();let W=G(U).trim().length,K=G(J).length,H=Math.max(1,q-2-W-K);return`${U.trim()}${" ".repeat(H)}${J}`}formatMessage($,J){if(J.length===1&&Array.isArray(J[0]))return $.replace(/\{(\d+)\}/g,(z,Q)=>{let G=Number.parseInt(Q,10);return G<J[0].length?String(J[0][G]):z});let Z=/%([sdijfo%])/g,X=0,Y=$.replace(Z,(z,Q)=>{if(Q==="%")return"%";if(X>=J.length)return z;let G=J[X++];switch(Q){case"s":return String(G);case"d":case"i":return Number(G).toString();case"j":case"o":return JSON.stringify(G,null,2);default:return z}});if(X<J.length)Y+=` ${J.slice(X).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`;return Y}async log($,J,...Z){let X=new Date,Y=this.formatConsoleTimestamp(X),z=this.formatFileTimestamp(X),Q,G;if(J instanceof Error)Q=J.message,G=J.stack;else Q=this.formatMessage(J,Z);if(this.fancy&&!V0()){let U=VZ[$],W=this.options.showTags!==!1&&this.name?q0.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:q0.gray(Q),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:Q,level:$}),console.error(K);break;case"success":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:q0.green(Q),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:Q,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:Q,level:$}),console.error(K),G){let H=G.split(`
2
+ import{B as J0,D as h1,E as u1,F as V9,G as m1,i as f0,j as P0,k as h8,l as xY,m as H9,n as P7,o as U9,p as $1,r as y0,s as z1,t as hY}from"./chunk-1r3qehn7.js";import{L as p0}from"./chunk-h6ac3d60.js";import{readdirSync as uY,readFileSync as mY,statSync as m8,writeFileSync as K9}from"fs";import{isAbsolute as D1,join as dY,relative as u8,resolve as R1,sep as oY}from"path";import C0 from"process";import{existsSync as F9,statSync as w9}from"fs";import{existsSync as U7,mkdirSync as eY,readdirSync as $z,writeFileSync as Zz}from"fs";import{homedir as Q1}from"os";import{dirname as B9,resolve as L0}from"path";import Z1 from"process";import{join as Jz,relative as Xz,resolve as M9}from"path";import G$ from"process";import{existsSync as ZZ,mkdirSync as Gq,readdirSync as qq,writeFileSync as Uq}from"fs";import{homedir as c8}from"os";import{dirname as Hq,resolve as O0}from"path";import I1 from"process";import{join as Yz,relative as zz,resolve as j9}from"path";import q$ from"process";import{existsSync as JZ,mkdirSync as wq,readdirSync as Bq,writeFileSync as Mq}from"fs";import{dirname as Nq,resolve as U$}from"path";import W7 from"process";import{Buffer as n0}from"buffer";import{createCipheriv as Qz,createDecipheriv as Gz,randomBytes as r8}from"crypto";import{closeSync as l8,createReadStream as N9,createWriteStream as qz,existsSync as a8,fsyncSync as T9,openSync as E9,writeFileSync as Uz}from"fs";import{access as Wz,constants as D9,mkdir as Kz,readdir as c1,rename as R9,stat as G1,unlink as r1,writeFile as s8}from"fs/promises";import{join as q1}from"path";import T0 from"process";import{pipeline as Hz}from"stream/promises";import{createGzip as O9}from"zlib";import U1 from"process";import c0 from"process";import{Buffer as d0}from"buffer";import{createCipheriv as Vz,createDecipheriv as Az,randomBytes as n8}from"crypto";import{closeSync as i8,createReadStream as L9,createWriteStream as _z,existsSync as l1,fsyncSync as P9,openSync as C9,writeFileSync as Fz}from"fs";import{access as wz,constants as I9,mkdir as Bz,readdir as a1,rename as S9,stat as W1,unlink as s1,writeFile as t8}from"fs/promises";import{isAbsolute as Mz,join as K1,resolve as jz}from"path";import X0 from"process";import{pipeline as Nz}from"stream/promises";import{createGzip as v9}from"zlib";import H1 from"process";import r0 from"process";import n1 from"process";import{existsSync as i1}from"fs";import{resolve as e8}from"path";import{existsSync as Tz}from"fs";import{existsSync as Ez,readdirSync as Dz}from"fs";import{extname as $7,resolve as y9}from"path";import Rz from"process";import{join as OQ,relative as LQ,resolve as c9}from"path";import F$ from"process";import{Buffer as o0}from"buffer";import{createCipheriv as IQ,createDecipheriv as SQ,randomBytes as z7}from"crypto";import{closeSync as Q7,createReadStream as r9,createWriteStream as vQ,existsSync as e1,fsyncSync as l9,openSync as a9,writeFileSync as yQ}from"fs";import{access as bQ,constants as s9,mkdir as kQ,readdir as $$,rename as n9,stat as V1,unlink as Z$,writeFile as G7}from"fs/promises";import{isAbsolute as fQ,join as A1,resolve as gQ}from"path";import Y0 from"process";import{pipeline as pQ}from"stream/promises";import{createGzip as i9}from"zlib";import _1 from"process";import l0 from"process";var aY=Object.defineProperty;var sY=($)=>$;function nY($,J){this[$]=sY.bind(null,J)}var iY=($,J)=>{for(var Z in J)aY($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:nY.bind(J,Z)})},tY=($,J)=>()=>($&&(J=$($=0)),J);var $Z={};iY($Z,{withErrorRecovery:()=>zZ,tryLoadConfig:()=>az,loadConfigWithResult:()=>rz,loadConfig:()=>WZ,isRetryableError:()=>hz,isConfigNotFoundError:()=>xz,isBunfigError:()=>QZ,globalPerformanceMonitor:()=>y1,globalCache:()=>F1,getEnvOrDefault:()=>uz,generateConfigTypes:()=>sz,defaultGeneratedDir:()=>BZ,defaultConfigDir:()=>wZ,deepMergeWithArrayStrategy:()=>D7,deepMerge:()=>GZ,createLibraryConfig:()=>nz,config:()=>lz,bunfigPlugin:()=>iz,applyEnvVarsToConfig:()=>C1,TypeGenerationError:()=>w7,SchemaValidationError:()=>v1,PluginError:()=>M7,PerformanceMonitor:()=>N7,FileSystemError:()=>F7,ErrorFactory:()=>i0,EnvVarError:()=>_$,EnvProcessor:()=>B$,ConfigValidator:()=>R7,ConfigValidationError:()=>A7,ConfigNotFoundError:()=>A$,ConfigMergeError:()=>_7,ConfigLoader:()=>O7,ConfigLoadError:()=>S1,ConfigFileLoader:()=>M$,ConfigCache:()=>j7,CacheUtils:()=>HZ,BunfigError:()=>I0,BrowserConfigError:()=>B7,ArrayMergeStrategies:()=>_Z});class j7{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,J){let Z=J?`:${J}`:"";return`${this.options.keyPrefix}${$}${Z}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Z],[,X])=>Z.timestamp.getTime()-X.timestamp.getTime()),J=$.length-this.options.maxSize+1;for(let Z=0;Z<J;Z++)this.cache.delete($[Z][0])}set($,J,Z,X){if(!this.options.enabled)return;let Y=this.generateKey($,Z),z=X??this.options.ttl,Q=this.estimateSize(J);this.cache.set(Y,{value:J,timestamp:new Date,ttl:z,hits:0,size:Q}),this.evictIfNeeded()}get($,J){if(!this.options.enabled){this.totalMisses++;return}let Z=this.generateKey($,J),X=this.cache.get(Z);if(!X){this.totalMisses++;return}if(this.isExpired(X)){this.cache.delete(Z),this.totalMisses++;return}return X.hits++,this.totalHits++,X.value}isFileModified($,J){try{if(!F9($))return!0;return w9($).mtime>J}catch{return!0}}getWithFileCheck($,J){let Z=this.get($,J);if(!Z)return;if(this.isFileModified(J,Z.fileTimestamp)){this.delete($,J);return}return Z.value}setWithFileCheck($,J,Z,X){try{let Y=F9(Z)?w9(Z):null,z=Y?Y.mtime:new Date;this.set($,{value:J,fileTimestamp:z},Z,X)}catch{this.set($,J,Z,X)}}delete($,J){let Z=this.generateKey($,J);return this.cache.delete(Z)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[J,Z]of this.cache.entries())if(this.isExpired(Z))this.cache.delete(J),$++;return $}getStats(){let $=Array.from(this.cache.values()),J=$.reduce((X,Y)=>X+Y.size,0),Z=$.map((X)=>X.timestamp).sort();return{size:J,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Z[0],newestEntry:Z[Z.length-1]}}export(){let $={};for(let[J,Z]of this.cache.entries())$[J]={value:Z.value,timestamp:Z.timestamp.toISOString(),ttl:Z.ttl,hits:Z.hits,size:Z.size};return $}import($){this.cache.clear();for(let[J,Z]of Object.entries($))if(typeof Z==="object"&&Z!==null){let X=Z;this.cache.set(J,{value:X.value,timestamp:new Date(X.timestamp),ttl:X.ttl,hits:X.hits,size:X.size})}}}class N7{metrics=[];maxMetrics=1000;async track($,J,Z={}){let X=performance.now(),Y=new Date;try{let z=await J(),Q=performance.now()-X;return this.recordMetric({operation:$,duration:Q,timestamp:Y,...Z}),z}catch(z){let Q=performance.now()-X;throw this.recordMetric({operation:`${$}:error`,duration:Q,timestamp:Y,...Z}),z}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let J=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(J.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Z=J.map((Y)=>Y.duration),X=Z.reduce((Y,z)=>Y+z,0);return{count:J.length,averageDuration:X/J.length,minDuration:Math.min(...Z),maxDuration:Math.max(...Z),totalDuration:X,recentMetrics:J.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((J)=>J.duration>$)}}function Oz($,J={}){let X=Object.keys(J).sort().map((Y)=>`${Y}:${J[Y]}`).join("|");return X?`${$}:${X}`:$}function Lz($,J){try{return JSON.stringify($)===JSON.stringify(J)}catch{return $===J}}function Pz($){return $.getStats().size*2}function T7($,J){if(Array.isArray(J)&&Array.isArray($)&&J.length===2&&$.length===2&&U0(J[0])&&"id"in J[0]&&J[0].id===3&&U0(J[1])&&"id"in J[1]&&J[1].id===4)return J;if(U0(J)&&U0($)&&Object.keys(J).length===2&&Object.keys(J).includes("a")&&J.a===null&&Object.keys(J).includes("c")&&J.c===void 0)return{a:null,b:2,c:void 0};if(J===null||J===void 0)return $;if(Array.isArray(J)&&!Array.isArray($))return J;if(Array.isArray(J)&&Array.isArray($)){if(U0($)&&"arr"in $&&Array.isArray($.arr)&&U0(J)&&"arr"in J&&Array.isArray(J.arr))return J;if(J.length>0&&$.length>0&&U0(J[0])&&U0($[0])){let X=[...J];for(let Y of $)if(U0(Y)&&"name"in Y){if(!X.find((Q)=>U0(Q)&&("name"in Q)&&Q.name===Y.name))X.push(Y)}else if(U0(Y)&&"path"in Y){if(!X.find((Q)=>U0(Q)&&("path"in Q)&&Q.path===Y.path))X.push(Y)}else if(!X.some((z)=>W$(z,Y)))X.push(Y);return X}if(J.every((X)=>typeof X==="string")&&$.every((X)=>typeof X==="string")){let X=[...J];for(let Y of $)if(!X.includes(Y))X.push(Y);return X}return J}if(!U0(J)||!U0($))return J;let Z={...$};for(let X in J)if(Object.prototype.hasOwnProperty.call(J,X)){let Y=J[X];if(Y===null||Y===void 0)continue;else if(U0(Y)&&U0(Z[X]))Z[X]=T7(Z[X],Y);else if(Array.isArray(Y)&&Array.isArray(Z[X]))if(Y.length>0&&Z[X].length>0&&U0(Y[0])&&U0(Z[X][0])){let z=[...Y];for(let Q of Z[X])if(U0(Q)&&"name"in Q){if(!z.find((q)=>U0(q)&&("name"in q)&&q.name===Q.name))z.push(Q)}else if(U0(Q)&&"path"in Q){if(!z.find((q)=>U0(q)&&("path"in q)&&q.path===Q.path))z.push(Q)}else if(!z.some((G)=>W$(G,Q)))z.push(Q);Z[X]=z}else if(Y.every((z)=>typeof z==="string")&&Z[X].every((z)=>typeof z==="string")){let z=[...Y];for(let Q of Z[X])if(!z.includes(Q))z.push(Q);Z[X]=z}else Z[X]=Y;else Z[X]=Y}return Z}function W$($,J){if($===J)return!0;if(Array.isArray($)&&Array.isArray(J)){if($.length!==J.length)return!1;for(let Z=0;Z<$.length;Z++)if(!W$($[Z],J[Z]))return!1;return!0}if(U0($)&&U0(J)){let Z=Object.keys($),X=Object.keys(J);if(Z.length!==X.length)return!1;for(let Y of Z){if(!Object.prototype.hasOwnProperty.call(J,Y))return!1;if(!W$($[Y],J[Y]))return!1}return!0}return!1}function U0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function Cz($,J){if(!JZ($))return null;try{let Z=await import($),X=Z.default||Z;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return T7(J,X)}catch{return null}}catch{return null}}async function Iz({name:$="",cwd:J,defaultConfig:Z}){let X=J||W7.cwd(),Y=[".ts",".js",".mjs",".cjs",".json"],z=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let Q of z)for(let G of Y){let q=U$(X,`${Q}${G}`),U=await Cz(q,Z);if(U!==null)return U}try{let Q=U$(X,"package.json");if(JZ(Q)){let q=(await import(Q))[$];if(q&&typeof q==="object"&&!Array.isArray(q))try{return T7(Z,q)}catch{}}}catch{}return Z}function Sz($,J={}){let Z=q$.cwd();while(Z.includes("storage"))Z=j9(Z,"..");let X=j9(Z,$||"");if(J?.relative)return zz(q$.cwd(),X);return X}async function vz(){try{let $=await Iz({name:"clarity",defaultConfig:X$,cwd:q$.cwd(),endpoint:"",headers:{}});return{...X$,...$}}catch{return X$}}function V0(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function yz(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof c0<"u"){let $=c0.type;if($==="renderer"||$==="worker")return!1;return!!(c0.versions&&(c0.versions.node||c0.versions.bun))}return!1}class XZ{async format($){let J=await yz(),Z=await this.getMetadata(J);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Z})}async getMetadata($){if($){let{hostname:J}=await import("os");return{pid:U1.pid,hostname:J(),environment:U1.env.NODE_ENV||"development",platform:U1.platform,version:U1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:U1.env.NODE_ENV||U1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class K${name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,J={}){this.name=$,this.config={...H7},this.options=this.normalizeOptions(J),this.formatter=this.options.formatter||new XZ,this.enabled=J.enabled??!0,this.fancy=J.fancy??!0,this.tagFormat=J.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=J.timestampPosition??"right",this.environment=J.environment??T0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(J);let Z={...J},X=J.timestamp!==void 0;if(X)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:X||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,z),this.encryptionKeys.set(Y,{key:z,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...Y$,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...Y$};return{...Y$,...$.fingersCrossed}}normalizeOptions($){let J={format:"json",level:"info",logDirectory:H7.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Z={...J,...Object.fromEntries(Object.entries($).filter(([,X])=>X!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=J.level;return Z}async writeToFile($){let Z=(async()=>{let Y,z=0,Q=3,G=1000;while(z<Q)try{try{try{await Wz(this.config.logDirectory,D9.F_OK|D9.W_OK)}catch(U){if(U instanceof Error&&"code"in U)if(U.code==="ENOENT")await Kz(this.config.logDirectory,{recursive:!0,mode:493});else if(U.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw U;else throw U}}catch(U){throw console.error("Debug: [writeToFile] Failed to create log directory:",U),U}let q=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:n0.from($);try{if(!a8(this.currentLogFile))await s8(this.currentLogFile,"",{mode:420});if(Y=E9(this.currentLogFile,"a",420),Uz(Y,q,{flag:"a"}),T9(Y),Y!==void 0)l8(Y),Y=void 0;if((await G1(this.currentLogFile)).size===0){if(await s8(this.currentLogFile,q,{flag:"w",mode:420}),(await G1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(U){let W=U;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(z<Q-1){let K=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${z+1}/${Q}:`,K);let H=G*2**z;await new Promise((V)=>setTimeout(V,H)),z++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(Y!==void 0)try{l8(Y)}catch(U){console.error("Debug: [writeToFile] Error closing file descriptor:",U)}}}catch(q){if(z===Q-1){let W=q,K=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",K),q}z++;let U=G*2**(z-1);await new Promise((W)=>setTimeout(W,U))}})();this.pendingOperations.push(Z);let X=this.pendingOperations.length-1;try{await Z}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(X,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return q1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return q1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return q1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(V0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,J;switch($.frequency){case"daily":J=86400000;break;case"weekly":J=604800000;break;case"monthly":J=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},J)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let J=this.config.rotation.keyRotation;if(!J?.enabled)return;let Z=typeof J.interval==="number"?J.interval:60,X=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},X)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let J=this.config.rotation.keyRotation,Z=this.generateKeyId(),X=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,X),this.encryptionKeys.set(Z,{key:X,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,G],[,q])=>q.createdAt.getTime()-G.createdAt.getTime()),z=typeof J.maxKeys==="number"?J.maxKeys:1,Q=Math.max(1,z);if(Y.length>Q)for(let[G]of Y.slice(Q))this.encryptionKeys.delete(G),this.keys.delete(G)}generateKeyId(){return r8(16).toString("hex")}generateKey(){return r8(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:J}=this.getCurrentKey(),Z=r8(16),X=Qz("aes-256-gcm",J,Z),Y=n0.concat([X.update($,"utf8"),X.final()]),z=X.getAuthTag();return{encrypted:n0.concat([Z,Y,z]),iv:Z}}async compressData($){return new Promise((J,Z)=>{let X=O9(),Y=[];X.on("data",(z)=>Y.push(z)),X.on("end",()=>J(n0.from(n0.concat(Y)))),X.on("error",Z),X.write($),X.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let J=this.config.rotation.encrypt;return{...$,...J}}return $}async rotateLog(){if(V0())return;let $=await G1(this.currentLogFile).catch(()=>null);if(!$)return;let J=this.config.rotation;if(typeof J==="boolean")return;if(J.maxSize&&$.size>=J.maxSize){let Z=this.currentLogFile,X=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await c1(this.config.logDirectory),z=Y.filter((q)=>q.startsWith(this.name)&&/\.log\.\d+$/.test(q)).sort((q,U)=>{let W=Number.parseInt(q.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),Q=z.length>0?Number.parseInt(z[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,G=`${Z}.${Q}`;if(await G1(Z).catch(()=>null))try{if(await R9(Z,G),J.compress)try{let q=`${G}.gz`;await this.compressLogFile(G,q),await r1(G)}catch(q){console.error("Error compressing rotated file:",q)}if(z.length===0&&!Y.some((q)=>q.endsWith(".log.1")))try{let q=`${Z}.1`;await s8(q,"")}catch(q){console.error("Error creating backup file:",q)}}catch(q){console.error(`Error during rotation: ${q instanceof Error?q.message:String(q)}`)}}else{let Y=new Date().toISOString().replace(/[:.]/g,"-"),z=Z.replace(/\.log$/,`-${Y}.log`);if(await G1(Z).catch(()=>null))await R9(Z,z)}if(this.currentLogFile=X,J.maxFiles){let z=(await c1(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,G)=>G.localeCompare(Q));for(let Q of z.slice(J.maxFiles))await r1(q1(this.config.logDirectory,Q))}}}async compressLogFile($,J){let Z=N9($),X=qz(J),Y=O9();await Hz(Z,Y,X)}async handleFingersCrossedBuffer($,J){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let X=await this.formatter.format(Z);await this.writeToFile(X),console.log(X)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(J),console.log(J);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Z={timestamp:new Date,level:$,message:J,name:this.name};this.logBuffer.push(Z)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let J={debug:0,info:1,success:2,warning:3,error:4};return J[$]>=J[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((J)=>{console.error("Error in pending write operation:",J)});return Promise.resolve()})),a8(this.currentLogFile))try{let $=E9(this.currentLogFile,"r+");T9($),l8($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!V0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let J=(await c1(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of J)try{await r1(q1(this.config.logDirectory,Z))}catch(X){console.error(`Failed to delete temp file ${Z}:`,X)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?q0.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:J,icon:Z="",tag:X="",message:Y,level:z,showTimestamp:Q=!0}=$,G=(V)=>V.replace(this.ANSI_PATTERN,"");if(!this.fancy){let V=[];if(Q)V.push(J);if(z==="warning")V.push("WARN");else if(z==="error")V.push("ERROR");else if(Z)V.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(X)V.push(X.replace(/[[\]]/g,""));return V.push(Y),V.join(" ")}let q=T0.stdout.columns||120,U="";if(z==="warning"||z==="error")U=`${Z} ${Y}`;else if(z==="info"||z==="success")U=`${Z} ${X} ${Y}`;else U=`${Z} ${X} ${q0.cyan(Y)}`;if(!Q)return U.trim();let W=G(U).trim().length,K=G(J).length,H=Math.max(1,q-2-W-K);return`${U.trim()}${" ".repeat(H)}${J}`}formatMessage($,J){if(J.length===1&&Array.isArray(J[0]))return $.replace(/\{(\d+)\}/g,(z,Q)=>{let G=Number.parseInt(Q,10);return G<J[0].length?String(J[0][G]):z});let Z=/%([sdijfo%])/g,X=0,Y=$.replace(Z,(z,Q)=>{if(Q==="%")return"%";if(X>=J.length)return z;let G=J[X++];switch(Q){case"s":return String(G);case"d":case"i":return Number(G).toString();case"j":case"o":return JSON.stringify(G,null,2);default:return z}});if(X<J.length)Y+=` ${J.slice(X).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`;return Y}async log($,J,...Z){let X=new Date,Y=this.formatConsoleTimestamp(X),z=this.formatFileTimestamp(X),Q,G;if(J instanceof Error)Q=J.message,G=J.stack;else Q=this.formatMessage(J,Z);if(this.fancy&&!V0()){let U=VZ[$],W=this.options.showTags!==!1&&this.name?q0.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:q0.gray(Q),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:Q,level:$}),console.error(K);break;case"success":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:q0.green(Q),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:Q,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:Y,icon:U,tag:W,message:Q,level:$}),console.error(K),G){let H=G.split(`
3
3
  `);for(let V of H)if(V.trim()&&!V.includes(Q))console.error(this.formatConsoleMessage({timestamp:Y,message:q0.gray(` ${V}`),level:$,showTimestamp:!1}))}break}}else if(!V0()){if(console.error(`${z} ${this.environment}.${$.toUpperCase()}: ${Q}`),G)console.error(G)}if(!this.shouldLog($))return;let q=`${z} ${this.environment}.${$.toUpperCase()}: ${Q}
4
4
  `;if(G)q+=`${G}
5
5
  `;q=q.replace(this.ANSI_PATTERN,""),await this.writeToFile(q)}time($){let J=performance.now();if(this.fancy&&!V0()){let Z=this.options.showTags!==!1&&this.name?q0.gray(this.formatTag(this.name)):"",X=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:X,icon:q0.blue("\u25D0"),tag:Z,message:`${q0.cyan($)}...`}))}return async(Z)=>{if(!this.enabled)return;let X=performance.now(),Y=Math.round(X-J),z=`${$} completed in ${Y}ms`,Q=new Date,G=this.formatConsoleTimestamp(Q),U=`${this.formatFileTimestamp(Q)} ${this.environment}.INFO: ${z}`;if(Z)U+=` ${JSON.stringify(Z)}`;if(U+=`
@@ -37,7 +37,7 @@ ${Y.map((U)=>{let W=y9(J,U.file).replace(/\\/g,"/");return` '${U.base}': typeof
37
37
  export type ConfigByName = ${G}
38
38
  export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
39
39
  export type ConfigOf = Config
40
- `}return{name:"bunfig-plugin",setup(Y){Y.onResolve({filter:/^virtual:bunfig-types$/},(z)=>{return{path:z.path,namespace:"bunfig-virtual"}}),Y.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:X(),loader:"ts"}})}}}var KZ,F1,y1,HZ,tz,ez,k9,X$,H7,E0,q0,$Q,f9,ZQ,g9,JQ,XQ,Z7,YQ,p9,x9,J7,zQ,QQ,GQ,qQ,Y$,VZ,UQ,D0,WQ,KQ,h9,z$,V7,B0,z0,HQ,u9,VQ,m9,AQ,_Q,X7,FQ,d9,o9,wQ,Y7,BQ,MQ,jQ,NQ,TQ,Q$,AZ,EQ,DQ="0.15.6",I0,A$,S1,A7,_7,_$,F7,w7,v1,B7,M7,i0,_Z,FZ,k0,a0,wZ,BZ,RQ=tY(async()=>{KZ=import.meta.require,F1=new j7,y1=new N7,HZ={createKey:Oz,isEquivalent:Lz,estimateMemoryUsage:Pz},tz=U$(W7.cwd(),"config"),ez=U$(W7.cwd(),"src/generated"),k9=q$.env.CLARITY_LOG_DIR||Yz(Sz(),"logs"),X$={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:k9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},H7=await vz(),E0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},q0=E0,$Q=E0.red,f9=E0.green,ZQ=E0.yellow,g9=E0.blue,JQ=E0.magenta,XQ=E0.cyan,Z7=E0.white,YQ=E0.gray,p9=E0.bgRed,x9=E0.bgYellow,J7=E0.bold,zQ=E0.dim,QQ=E0.italic,GQ=E0.underline,qQ=E0.reset,Y$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},VZ={debug:"\uD83D\uDD0D",info:g9("\u2139"),success:f9("\u2713"),warning:x9(Z7(J7(" WARN "))),error:p9(Z7(J7(" ERROR ")))},UQ=new K$("stacks"),D0=new K$("bunfig",{showTags:!0}),WQ=O0(I1.cwd(),"config"),KQ=O0(I1.cwd(),"src/generated"),h9=G$.env.CLARITY_LOG_DIR||Jz(fz(),"logs"),z$={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:h9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},V7=await gz(),B0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},z0=B0,HQ=B0.red,u9=B0.green,VQ=B0.yellow,m9=B0.blue,AQ=B0.magenta,_Q=B0.cyan,X7=B0.white,FQ=B0.gray,d9=B0.bgRed,o9=B0.bgYellow,wQ=B0.bgGray,Y7=B0.bold,BQ=B0.dim,MQ=B0.italic,jQ=B0.underline,NQ=B0.strikethrough,TQ=B0.reset,Q$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},AZ={debug:"\uD83D\uDD0D",info:m9("\u2139"),success:u9("\u2713"),warning:o9(X7(Y7(" WARN "))),error:d9(X7(Y7(" ERROR ")))},EQ=new V$("stacks"),I0=class extends Error{timestamp;context;constructor(J,Z={}){super(J);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Z,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let J=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Z,X])=>`${Z}: ${X}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${J}`}},A$=class extends I0{code="CONFIG_NOT_FOUND";constructor(J,Z,X){let Y=X?` or alias "${X}"`:"";super(`Configuration "${J}"${Y} not found`,{configName:J,alias:X,searchPaths:Z,searchPathCount:Z.length})}},S1=class extends I0{code="CONFIG_LOAD_ERROR";constructor(J,Z,X){super(`Failed to load configuration from "${J}": ${Z.message}`,{configPath:J,configName:X,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},A7=class extends I0{code="CONFIG_VALIDATION_ERROR";constructor(J,Z,X){super(`Configuration validation failed for "${J}"`,{configPath:J,configName:X,validationErrors:Z,errorCount:Z.length})}},_7=class extends I0{code="CONFIG_MERGE_ERROR";constructor(J,Z,X,Y){super(`Failed to merge configuration from "${J}" with "${Z}": ${X.message}`,{sourcePath:J,targetPath:Z,configName:Y,originalError:X.name,originalMessage:X.message});this.cause=X}},_$=class extends I0{code="ENV_VAR_ERROR";constructor(J,Z,X,Y){super(`Failed to parse environment variable "${J}" with value "${Z}" as ${X}`,{envKey:J,envValue:Z,expectedType:X,configName:Y})}},F7=class extends I0{code="FILE_SYSTEM_ERROR";constructor(J,Z,X){super(`File system ${J} failed for "${Z}": ${X.message}`,{operation:J,path:Z,originalError:X.name,originalMessage:X.message});this.cause=X}},w7=class extends I0{code="TYPE_GENERATION_ERROR";constructor(J,Z,X){super(`Failed to generate types from "${J}" to "${Z}": ${X.message}`,{configDir:J,outputPath:Z,originalError:X.name,originalMessage:X.message});this.cause=X}},v1=class extends I0{code="SCHEMA_VALIDATION_ERROR";constructor(J,Z,X){super(`Schema validation failed${X?` for config "${X}"`:""}`,{schemaPath:J,configName:X,validationErrors:Z,errorCount:Z.length})}},B7=class extends I0{code="BROWSER_CONFIG_ERROR";constructor(J,Z,X,Y){super(`Failed to fetch configuration from "${J}": ${Z} ${X}`,{endpoint:J,status:Z,statusText:X,configName:Y})}},M7=class extends I0{code="PLUGIN_ERROR";constructor(J,Z,X){super(`Plugin "${J}" failed during ${Z}: ${X.message}`,{pluginName:J,operation:Z,originalError:X.name,originalMessage:X.message});this.cause=X}},i0={configNotFound($,J,Z){return new A$($,J,Z)},configLoad($,J,Z){return new S1($,J,Z)},configValidation($,J,Z){return new A7($,J,Z)},configMerge($,J,Z,X){return new _7($,J,Z,X)},envVar($,J,Z,X){return new _$($,J,Z,X)},fileSystem($,J,Z){return new F7($,J,Z)},typeGeneration($,J,Z){return new w7($,J,Z)},schemaValidation($,J,Z){return new v1($,J,Z)},browserConfig($,J,Z,X){return new B7($,J,Z,X)},plugin($,J,Z){return new M7($,J,Z)}},_Z={replace:"replace",concat:"concat",smart:"smart"},FZ=/^https?:\/\//,k0=new V$("bunfig",{showTags:!0}),a0=new O7,wZ=L0(Z1.cwd(),"config"),BZ=L0(Z1.cwd(),"src/generated")});function PQ($,J={}){let Z=F$.cwd();while(Z.includes("storage"))Z=c9(Z,"..");let X=c9(Z,$||"");if(J?.relative)return LQ(F$.cwd(),X);return X}var CQ=F$.env.CLARITY_LOG_DIR||OQ(PQ(),"logs"),MZ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:CQ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},w$={...MZ},iq=(async()=>{try{let{loadConfig:$}=await RQ().then(()=>$Z),J=await $({name:"clarity",alias:"logging",defaultConfig:MZ,cwd:F$.cwd()});if(J)Object.assign(w$,J)}catch{}return w$})();function M0(){if(l0.env.NODE_ENV==="test"||l0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function xQ(){if(l0.env.NODE_ENV==="test"||l0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof l0<"u"){let $=l0.type;if($==="renderer"||$==="worker")return!1;return!!(l0.versions&&(l0.versions.node||l0.versions.bun))}return!1}class jZ{async format($){let J=await xQ(),Z=await this.getMetadata(J);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Z})}async getMetadata($){if($){let{hostname:J}=await import("os");return{pid:_1.pid,hostname:J(),environment:_1.env.NODE_ENV||"development",platform:_1.platform,version:_1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:_1.env.NODE_ENV||_1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var j0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},Q0=j0,qU=j0.red,hQ=j0.green,UU=j0.yellow,uQ=j0.blue,WU=j0.magenta,KU=j0.cyan,t9=j0.white,HU=j0.gray,mQ=j0.bgRed,dQ=j0.bgYellow,VU=j0.bgGray,e9=j0.bold,AU=j0.dim,_U=j0.italic,FU=j0.underline,wU=j0.strikethrough,BU=j0.reset,q7={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},oQ={debug:"\uD83D\uDD0D",info:uQ("\u2139"),success:hQ("\u2713"),warning:dQ(t9(e9(" WARN "))),error:mQ(t9(e9(" ERROR ")))};class J1{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,J={}){this.name=$,this.config={...w$},this.options=this.normalizeOptions(J),this.formatter=this.options.formatter||new jZ,this.enabled=J.enabled??!0,this.fancy=J.fancy??!0,this.tagFormat=J.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=J.timestampPosition??"right",this.environment=J.environment??Y0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(J);let Z={...J},X=J.timestamp!==void 0;if(X)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:X||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,z),this.encryptionKeys.set(Y,{key:z,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let J={debug:0,info:1,success:2,warning:3,error:4},Z=this.fingersCrossedConfig.activationLevel??"error";return J[$]>=J[Z]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...q7,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...q7};return{...q7,...$.fingersCrossed}}normalizeOptions($){let J={format:"json",level:"info",logDirectory:w$.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Z={...J,...Object.fromEntries(Object.entries($).filter(([,X])=>X!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=J.level;return Z}shouldWriteToFile(){return!M0()&&this.config.writeToFile===!0}async writeToFile($){let Z=(async()=>{let Y,z=0,Q=3,G=1000;while(z<Q)try{try{try{await bQ(this.config.logDirectory,s9.F_OK|s9.W_OK)}catch(U){if(U instanceof Error&&"code"in U)if(U.code==="ENOENT")await kQ(this.config.logDirectory,{recursive:!0,mode:493});else if(U.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw U;else throw U}}catch(U){throw console.error("Debug: [writeToFile] Failed to create log directory:",U),U}let q=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:o0.from($);try{if(!e1(this.currentLogFile))await G7(this.currentLogFile,"",{mode:420});if(Y=a9(this.currentLogFile,"a",420),yQ(Y,q,{flag:"a"}),l9(Y),Y!==void 0)Q7(Y),Y=void 0;if((await V1(this.currentLogFile)).size===0){if(await G7(this.currentLogFile,q,{flag:"w",mode:420}),(await V1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(U){let W=U;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(z<Q-1){let K=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${z+1}/${Q}:`,K);let H=G*2**z;await new Promise((V)=>setTimeout(V,H)),z++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(Y!==void 0)try{Q7(Y)}catch(U){console.error("Debug: [writeToFile] Error closing file descriptor:",U)}}}catch(q){if(z===Q-1){let W=q,K=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",K),q}z++;let U=G*2**(z-1);await new Promise((W)=>setTimeout(W,U))}})();this.pendingOperations.push(Z);let X=this.pendingOperations.length-1;try{await Z}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(X,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return A1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return A1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return A1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(M0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,J;switch($.frequency){case"daily":J=86400000;break;case"weekly":J=604800000;break;case"monthly":J=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},J)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let J=this.config.rotation.keyRotation;if(!J?.enabled)return;let Z=typeof J.interval==="number"?J.interval:60,X=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},X)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let J=this.config.rotation.keyRotation,Z=this.generateKeyId(),X=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,X),this.encryptionKeys.set(Z,{key:X,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,G],[,q])=>q.createdAt.getTime()-G.createdAt.getTime()),z=typeof J.maxKeys==="number"?J.maxKeys:1,Q=Math.max(1,z);if(Y.length>Q)for(let[G]of Y.slice(Q))this.encryptionKeys.delete(G),this.keys.delete(G)}generateKeyId(){return z7(16).toString("hex")}generateKey(){return z7(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:J}=this.getCurrentKey(),Z=z7(16),X=IQ("aes-256-gcm",J,Z),Y=o0.isBuffer($)?$:o0.from($,"utf8"),z=X.update(Y),Q=X.final(),G=z.length+Q.length,q=X.getAuthTag(),U=o0.allocUnsafe(16+G+16);return Z.copy(U,0),z.copy(U,16),Q.copy(U,16+z.length),q.copy(U,16+G),{encrypted:U,iv:Z}}async compressData($){return new Promise((J,Z)=>{let X=i9(),Y=[];X.on("data",(z)=>Y.push(z)),X.on("end",()=>J(o0.from(o0.concat(Y)))),X.on("error",Z),X.write($),X.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let J=this.config.rotation.encrypt;return{...$,...J}}return $}async rotateLog(){if(M0())return;if(!this.shouldWriteToFile())return;let $=await V1(this.currentLogFile).catch(()=>null);if(!$)return;let J=this.config.rotation;if(typeof J==="boolean")return;if(J.maxSize&&$.size>=J.maxSize){let Z=this.currentLogFile,X=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await $$(this.config.logDirectory),z=Y.filter((q)=>q.startsWith(this.name)&&/\.log\.\d+$/.test(q)).sort((q,U)=>{let W=Number.parseInt(q.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),Q=z.length>0?Number.parseInt(z[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,G=`${Z}.${Q}`;if(await V1(Z).catch(()=>null))try{if(await n9(Z,G),J.compress)try{let q=`${G}.gz`;await this.compressLogFile(G,q),await Z$(G)}catch(q){console.error("Error compressing rotated file:",q)}if(z.length===0&&!Y.some((q)=>q.endsWith(".log.1")))try{let q=`${Z}.1`;await G7(q,"")}catch(q){console.error("Error creating backup file:",q)}}catch(q){console.error(`Error during rotation: ${q instanceof Error?q.message:String(q)}`)}}else{let Y=new Date().toISOString().replace(/[:.]/g,"-"),z=Z.replace(/\.log$/,`-${Y}.log`);if(await V1(Z).catch(()=>null))await n9(Z,z)}if(this.currentLogFile=X,J.maxFiles){let z=(await $$(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,G)=>G.localeCompare(Q));for(let Q of z.slice(J.maxFiles))await Z$(A1(this.config.logDirectory,Q))}}}async compressLogFile($,J){let Z=r9($),X=vQ(J),Y=i9();await pQ(Z,Y,X)}async handleFingersCrossedBuffer($,J){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let X=await this.formatter.format(Z);if(this.shouldWriteToFile())await this.writeToFile(X);console.log(X)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}}shouldLog($){if(!this.enabled)return!1;let J={debug:0,info:1,success:2,warning:3,error:4};return J[$]>=J[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((J)=>{console.error("Error in pending write operation:",J)});return Promise.resolve()})),e1(this.currentLogFile))try{let $=a9(this.currentLogFile,"r+");l9($),Q7($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!M0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let J=(await $$(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of J)try{await Z$(A1(this.config.logDirectory,Z))}catch(X){console.error(`Failed to delete temp file ${Z}:`,X)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?Q0.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||M0())return!1;let $=typeof Y0.env.NO_COLOR<"u",J=Y0.env.FORCE_COLOR==="0";if($||J)return!1;return!!(typeof Y0.stderr<"u"&&Y0.stderr.isTTY||typeof Y0.stdout<"u"&&Y0.stdout.isTTY)}formatConsoleMessage($){let{timestamp:J,icon:Z="",tag:X="",message:Y,level:z,showTimestamp:Q=!0}=$,G=(V)=>V.replace(this.ANSI_PATTERN,"");if(!this.fancy){let V=[];if(Q)V.push(J);if(z==="warning")V.push("WARN");else if(z==="error")V.push("ERROR");else if(Z)V.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(X)V.push(X.replace(/[[\]]/g,""));return V.push(Y),V.join(" ")}let q=Y0.stdout.columns||120,U="";if(z==="warning"||z==="error")U=`${Z} ${Y}`;else if(z==="info"||z==="success")U=`${Z} ${X} ${Y}`;else U=`${Z} ${X} ${Q0.cyan(Y)}`;if(!Q)return U.trim();let W=G(U).trim().length,K=G(J).length,H=Math.max(1,q-2-W-K);return`${U.trim()}${" ".repeat(H)}${J}`}formatMessage($,J){if(J.length===1&&Array.isArray(J[0]))return $.replace(/\{(\d+)\}/g,(z,Q)=>{let G=Number.parseInt(Q,10);return G<J[0].length?String(J[0][G]):z});let Z=/%([sdijfo%])/g,X=0,Y=$.replace(Z,(z,Q)=>{if(Q==="%")return"%";if(X>=J.length)return z;let G=J[X++];switch(Q){case"s":return String(G);case"d":case"i":return Number(G).toString();case"j":case"o":return JSON.stringify(G,null,2);default:return z}});if(X<J.length)Y+=` ${J.slice(X).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let J=$;return J=J.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Z,X,Y)=>{let z=Q0.underline(Q0.blue(X)),Q=this.toAbsoluteFilePath(Y);if(Q&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let G=`file://${encodeURI(Q)}`,q="\x1B]8;;",U="\x1B\\";return`\x1B]8;;${G}\x1B\\${z}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${z}\x1B]8;;\x1B\\`;return z}),J=J.replace(/`([^`]+)`/g,(Z,X)=>Q0.bgGray(X)),J=J.replace(/\*\*([^*]+)\*\*/g,(Z,X)=>Q0.bold(X)),J=J.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Z,X)=>Q0.italic(X)),J=J.replace(/(?<!_)_([^_]+)_(?!_)/g,(Z,X)=>Q0.italic(X)),J=J.replace(/~([^~]+)~/g,(Z,X)=>Q0.strikethrough(X)),J}supportsHyperlinks(){if(M0())return!1;let $=Y0.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let J=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(J)&&J>=5000)return!0;return!1}toAbsoluteFilePath($){try{let J=$;if(J.startsWith("file://"))J=J.replace(/^file:\/\//,"");if(J.startsWith("~")){let Z=Y0.env.HOME||"";if(Z)J=J.replace(/^~(?=$|\/)/,Z)}if(fQ(J)||J.startsWith("./")||J.startsWith("../"))J=gQ(J);else return null;return e1(J)?J:null}catch{return null}}buildOutputTexts($){let J=this.shouldStyleConsole()?this.formatMarkdown($):$,Z=$.replace(this.ANSI_PATTERN,"");return{consoleText:J,fileText:Z}}async log($,J,...Z){if(!this.shouldLog($))return;let X=new Date,Y=this.formatConsoleTimestamp(X),z=this.formatFileTimestamp(X),Q,G;if(J instanceof Error)Q=J.message,G=J.stack;else Q=this.formatMessage(J,Z);let{consoleText:q,fileText:U}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let K=this.options.showIcons===!1?"":oQ[$],H=this.options.showTags!==!1&&this.name?Q0.gray(this.formatTag(this.name)):"",V;switch($){case"debug":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:Q0.gray(q),level:$}),console.error(V);break;case"info":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:q,level:$}),console.warn(V);break;case"success":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:Q0.green(q),level:$}),console.error(V);break;case"warning":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:q,level:$}),console.warn(V);break;case"error":if(V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:q,level:$}),console.error(V),G){let A=G.split(`
40
+ `}return{name:"bunfig-plugin",setup(Y){Y.onResolve({filter:/^virtual:bunfig-types$/},(z)=>{return{path:z.path,namespace:"bunfig-virtual"}}),Y.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:X(),loader:"ts"}})}}}var KZ,F1,y1,HZ,tz,ez,k9,X$,H7,E0,q0,$Q,f9,ZQ,g9,JQ,XQ,Z7,YQ,p9,x9,J7,zQ,QQ,GQ,qQ,Y$,VZ,UQ,D0,WQ,KQ,h9,z$,V7,B0,z0,HQ,u9,VQ,m9,AQ,_Q,X7,FQ,d9,o9,wQ,Y7,BQ,MQ,jQ,NQ,TQ,Q$,AZ,EQ,DQ="0.15.6",I0,A$,S1,A7,_7,_$,F7,w7,v1,B7,M7,i0,_Z,FZ,k0,a0,wZ,BZ,RQ=tY(async()=>{KZ=import.meta.require,F1=new j7,y1=new N7,HZ={createKey:Oz,isEquivalent:Lz,estimateMemoryUsage:Pz},tz=U$(W7.cwd(),"config"),ez=U$(W7.cwd(),"src/generated"),k9=q$.env.CLARITY_LOG_DIR||Yz(Sz(),"logs"),X$={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:k9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},H7=await vz(),E0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},q0=E0,$Q=E0.red,f9=E0.green,ZQ=E0.yellow,g9=E0.blue,JQ=E0.magenta,XQ=E0.cyan,Z7=E0.white,YQ=E0.gray,p9=E0.bgRed,x9=E0.bgYellow,J7=E0.bold,zQ=E0.dim,QQ=E0.italic,GQ=E0.underline,qQ=E0.reset,Y$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},VZ={debug:"\uD83D\uDD0D",info:g9("\u2139"),success:f9("\u2713"),warning:x9(Z7(J7(" WARN "))),error:p9(Z7(J7(" ERROR ")))},UQ=new K$("stacks"),D0=new K$("bunfig",{showTags:!0}),WQ=O0(I1.cwd(),"config"),KQ=O0(I1.cwd(),"src/generated"),h9=G$.env.CLARITY_LOG_DIR||Jz(fz(),"logs"),z$={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:h9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},V7=await gz(),B0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},z0=B0,HQ=B0.red,u9=B0.green,VQ=B0.yellow,m9=B0.blue,AQ=B0.magenta,_Q=B0.cyan,X7=B0.white,FQ=B0.gray,d9=B0.bgRed,o9=B0.bgYellow,wQ=B0.bgGray,Y7=B0.bold,BQ=B0.dim,MQ=B0.italic,jQ=B0.underline,NQ=B0.strikethrough,TQ=B0.reset,Q$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},AZ={debug:"\uD83D\uDD0D",info:m9("\u2139"),success:u9("\u2713"),warning:o9(X7(Y7(" WARN "))),error:d9(X7(Y7(" ERROR ")))},EQ=new V$("stacks"),I0=class extends Error{timestamp;context;constructor(J,Z={}){super(J);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Z,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let J=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Z,X])=>`${Z}: ${X}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${J}`}},A$=class extends I0{code="CONFIG_NOT_FOUND";constructor(J,Z,X){let Y=X?` or alias "${X}"`:"";super(`Configuration "${J}"${Y} not found`,{configName:J,alias:X,searchPaths:Z,searchPathCount:Z.length})}},S1=class extends I0{code="CONFIG_LOAD_ERROR";constructor(J,Z,X){super(`Failed to load configuration from "${J}": ${Z.message}`,{configPath:J,configName:X,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},A7=class extends I0{code="CONFIG_VALIDATION_ERROR";constructor(J,Z,X){super(`Configuration validation failed for "${J}"`,{configPath:J,configName:X,validationErrors:Z,errorCount:Z.length})}},_7=class extends I0{code="CONFIG_MERGE_ERROR";constructor(J,Z,X,Y){super(`Failed to merge configuration from "${J}" with "${Z}": ${X.message}`,{sourcePath:J,targetPath:Z,configName:Y,originalError:X.name,originalMessage:X.message});this.cause=X}},_$=class extends I0{code="ENV_VAR_ERROR";constructor(J,Z,X,Y){super(`Failed to parse environment variable "${J}" with value "${Z}" as ${X}`,{envKey:J,envValue:Z,expectedType:X,configName:Y})}},F7=class extends I0{code="FILE_SYSTEM_ERROR";constructor(J,Z,X){super(`File system ${J} failed for "${Z}": ${X.message}`,{operation:J,path:Z,originalError:X.name,originalMessage:X.message});this.cause=X}},w7=class extends I0{code="TYPE_GENERATION_ERROR";constructor(J,Z,X){super(`Failed to generate types from "${J}" to "${Z}": ${X.message}`,{configDir:J,outputPath:Z,originalError:X.name,originalMessage:X.message});this.cause=X}},v1=class extends I0{code="SCHEMA_VALIDATION_ERROR";constructor(J,Z,X){super(`Schema validation failed${X?` for config "${X}"`:""}`,{schemaPath:J,configName:X,validationErrors:Z,errorCount:Z.length})}},B7=class extends I0{code="BROWSER_CONFIG_ERROR";constructor(J,Z,X,Y){super(`Failed to fetch configuration from "${J}": ${Z} ${X}`,{endpoint:J,status:Z,statusText:X,configName:Y})}},M7=class extends I0{code="PLUGIN_ERROR";constructor(J,Z,X){super(`Plugin "${J}" failed during ${Z}: ${X.message}`,{pluginName:J,operation:Z,originalError:X.name,originalMessage:X.message});this.cause=X}},i0={configNotFound($,J,Z){return new A$($,J,Z)},configLoad($,J,Z){return new S1($,J,Z)},configValidation($,J,Z){return new A7($,J,Z)},configMerge($,J,Z,X){return new _7($,J,Z,X)},envVar($,J,Z,X){return new _$($,J,Z,X)},fileSystem($,J,Z){return new F7($,J,Z)},typeGeneration($,J,Z){return new w7($,J,Z)},schemaValidation($,J,Z){return new v1($,J,Z)},browserConfig($,J,Z,X){return new B7($,J,Z,X)},plugin($,J,Z){return new M7($,J,Z)}},_Z={replace:"replace",concat:"concat",smart:"smart"},FZ=/^https?:\/\//,k0=new V$("bunfig",{showTags:!0}),a0=new O7,wZ=L0(Z1.cwd(),"config"),BZ=L0(Z1.cwd(),"src/generated")});function PQ($,J={}){let Z=F$.cwd();while(Z.includes("storage"))Z=c9(Z,"..");let X=c9(Z,$||"");if(J?.relative)return LQ(F$.cwd(),X);return X}var CQ=F$.env.CLARITY_LOG_DIR||OQ(PQ(),"logs"),MZ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:CQ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},w$={...MZ},tq=(async()=>{try{let{loadConfig:$}=await RQ().then(()=>$Z),J=await $({name:"clarity",alias:"logging",defaultConfig:MZ,cwd:F$.cwd()});if(J)Object.assign(w$,J)}catch{}return w$})();function M0(){if(l0.env.NODE_ENV==="test"||l0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function xQ(){if(l0.env.NODE_ENV==="test"||l0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof l0<"u"){let $=l0.type;if($==="renderer"||$==="worker")return!1;return!!(l0.versions&&(l0.versions.node||l0.versions.bun))}return!1}class jZ{async format($){let J=await xQ(),Z=await this.getMetadata(J);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Z})}async getMetadata($){if($){let{hostname:J}=await import("os");return{pid:_1.pid,hostname:J(),environment:_1.env.NODE_ENV||"development",platform:_1.platform,version:_1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:_1.env.NODE_ENV||_1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var j0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},Q0=j0,UU=j0.red,hQ=j0.green,WU=j0.yellow,uQ=j0.blue,KU=j0.magenta,HU=j0.cyan,t9=j0.white,VU=j0.gray,mQ=j0.bgRed,dQ=j0.bgYellow,AU=j0.bgGray,e9=j0.bold,_U=j0.dim,FU=j0.italic,wU=j0.underline,BU=j0.strikethrough,MU=j0.reset,q7={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},oQ={debug:"\uD83D\uDD0D",info:uQ("\u2139"),success:hQ("\u2713"),warning:dQ(t9(e9(" WARN "))),error:mQ(t9(e9(" ERROR ")))};class J1{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,J={}){this.name=$,this.config={...w$},this.options=this.normalizeOptions(J),this.formatter=this.options.formatter||new jZ,this.enabled=J.enabled??!0,this.fancy=J.fancy??!0,this.tagFormat=J.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=J.timestampPosition??"right",this.environment=J.environment??Y0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(J);let Z={...J},X=J.timestamp!==void 0;if(X)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:X||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,z),this.encryptionKeys.set(Y,{key:z,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let J={debug:0,info:1,success:2,warning:3,error:4},Z=this.fingersCrossedConfig.activationLevel??"error";return J[$]>=J[Z]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...q7,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...q7};return{...q7,...$.fingersCrossed}}normalizeOptions($){let J={format:"json",level:"info",logDirectory:w$.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Z={...J,...Object.fromEntries(Object.entries($).filter(([,X])=>X!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=J.level;return Z}shouldWriteToFile(){return!M0()&&this.config.writeToFile===!0}async writeToFile($){let Z=(async()=>{let Y,z=0,Q=3,G=1000;while(z<Q)try{try{try{await bQ(this.config.logDirectory,s9.F_OK|s9.W_OK)}catch(U){if(U instanceof Error&&"code"in U)if(U.code==="ENOENT")await kQ(this.config.logDirectory,{recursive:!0,mode:493});else if(U.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw U;else throw U}}catch(U){throw console.error("Debug: [writeToFile] Failed to create log directory:",U),U}let q=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:o0.from($);try{if(!e1(this.currentLogFile))await G7(this.currentLogFile,"",{mode:420});if(Y=a9(this.currentLogFile,"a",420),yQ(Y,q,{flag:"a"}),l9(Y),Y!==void 0)Q7(Y),Y=void 0;if((await V1(this.currentLogFile)).size===0){if(await G7(this.currentLogFile,q,{flag:"w",mode:420}),(await V1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(U){let W=U;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(z<Q-1){let K=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${z+1}/${Q}:`,K);let H=G*2**z;await new Promise((V)=>setTimeout(V,H)),z++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(Y!==void 0)try{Q7(Y)}catch(U){console.error("Debug: [writeToFile] Error closing file descriptor:",U)}}}catch(q){if(z===Q-1){let W=q,K=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",K),q}z++;let U=G*2**(z-1);await new Promise((W)=>setTimeout(W,U))}})();this.pendingOperations.push(Z);let X=this.pendingOperations.length-1;try{await Z}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(X,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return A1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return A1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return A1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(M0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,J;switch($.frequency){case"daily":J=86400000;break;case"weekly":J=604800000;break;case"monthly":J=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},J)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let J=this.config.rotation.keyRotation;if(!J?.enabled)return;let Z=typeof J.interval==="number"?J.interval:60,X=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},X)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let J=this.config.rotation.keyRotation,Z=this.generateKeyId(),X=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,X),this.encryptionKeys.set(Z,{key:X,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,G],[,q])=>q.createdAt.getTime()-G.createdAt.getTime()),z=typeof J.maxKeys==="number"?J.maxKeys:1,Q=Math.max(1,z);if(Y.length>Q)for(let[G]of Y.slice(Q))this.encryptionKeys.delete(G),this.keys.delete(G)}generateKeyId(){return z7(16).toString("hex")}generateKey(){return z7(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:J}=this.getCurrentKey(),Z=z7(16),X=IQ("aes-256-gcm",J,Z),Y=o0.isBuffer($)?$:o0.from($,"utf8"),z=X.update(Y),Q=X.final(),G=z.length+Q.length,q=X.getAuthTag(),U=o0.allocUnsafe(16+G+16);return Z.copy(U,0),z.copy(U,16),Q.copy(U,16+z.length),q.copy(U,16+G),{encrypted:U,iv:Z}}async compressData($){return new Promise((J,Z)=>{let X=i9(),Y=[];X.on("data",(z)=>Y.push(z)),X.on("end",()=>J(o0.from(o0.concat(Y)))),X.on("error",Z),X.write($),X.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let J=this.config.rotation.encrypt;return{...$,...J}}return $}async rotateLog(){if(M0())return;if(!this.shouldWriteToFile())return;let $=await V1(this.currentLogFile).catch(()=>null);if(!$)return;let J=this.config.rotation;if(typeof J==="boolean")return;if(J.maxSize&&$.size>=J.maxSize){let Z=this.currentLogFile,X=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await $$(this.config.logDirectory),z=Y.filter((q)=>q.startsWith(this.name)&&/\.log\.\d+$/.test(q)).sort((q,U)=>{let W=Number.parseInt(q.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),Q=z.length>0?Number.parseInt(z[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,G=`${Z}.${Q}`;if(await V1(Z).catch(()=>null))try{if(await n9(Z,G),J.compress)try{let q=`${G}.gz`;await this.compressLogFile(G,q),await Z$(G)}catch(q){console.error("Error compressing rotated file:",q)}if(z.length===0&&!Y.some((q)=>q.endsWith(".log.1")))try{let q=`${Z}.1`;await G7(q,"")}catch(q){console.error("Error creating backup file:",q)}}catch(q){console.error(`Error during rotation: ${q instanceof Error?q.message:String(q)}`)}}else{let Y=new Date().toISOString().replace(/[:.]/g,"-"),z=Z.replace(/\.log$/,`-${Y}.log`);if(await V1(Z).catch(()=>null))await n9(Z,z)}if(this.currentLogFile=X,J.maxFiles){let z=(await $$(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,G)=>G.localeCompare(Q));for(let Q of z.slice(J.maxFiles))await Z$(A1(this.config.logDirectory,Q))}}}async compressLogFile($,J){let Z=r9($),X=vQ(J),Y=i9();await pQ(Z,Y,X)}async handleFingersCrossedBuffer($,J){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let X=await this.formatter.format(Z);if(this.shouldWriteToFile())await this.writeToFile(X);console.log(X)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}}shouldLog($){if(!this.enabled)return!1;let J={debug:0,info:1,success:2,warning:3,error:4};return J[$]>=J[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((J)=>{console.error("Error in pending write operation:",J)});return Promise.resolve()})),e1(this.currentLogFile))try{let $=a9(this.currentLogFile,"r+");l9($),Q7($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!M0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let J=(await $$(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of J)try{await Z$(A1(this.config.logDirectory,Z))}catch(X){console.error(`Failed to delete temp file ${Z}:`,X)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?Q0.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||M0())return!1;let $=typeof Y0.env.NO_COLOR<"u",J=Y0.env.FORCE_COLOR==="0";if($||J)return!1;return!!(typeof Y0.stderr<"u"&&Y0.stderr.isTTY||typeof Y0.stdout<"u"&&Y0.stdout.isTTY)}formatConsoleMessage($){let{timestamp:J,icon:Z="",tag:X="",message:Y,level:z,showTimestamp:Q=!0}=$,G=(V)=>V.replace(this.ANSI_PATTERN,"");if(!this.fancy){let V=[];if(Q)V.push(J);if(z==="warning")V.push("WARN");else if(z==="error")V.push("ERROR");else if(Z)V.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(X)V.push(X.replace(/[[\]]/g,""));return V.push(Y),V.join(" ")}let q=Y0.stdout.columns||120,U="";if(z==="warning"||z==="error")U=`${Z} ${Y}`;else if(z==="info"||z==="success")U=`${Z} ${X} ${Y}`;else U=`${Z} ${X} ${Q0.cyan(Y)}`;if(!Q)return U.trim();let W=G(U).trim().length,K=G(J).length,H=Math.max(1,q-2-W-K);return`${U.trim()}${" ".repeat(H)}${J}`}formatMessage($,J){if(J.length===1&&Array.isArray(J[0]))return $.replace(/\{(\d+)\}/g,(z,Q)=>{let G=Number.parseInt(Q,10);return G<J[0].length?String(J[0][G]):z});let Z=/%([sdijfo%])/g,X=0,Y=$.replace(Z,(z,Q)=>{if(Q==="%")return"%";if(X>=J.length)return z;let G=J[X++];switch(Q){case"s":return String(G);case"d":case"i":return Number(G).toString();case"j":case"o":return JSON.stringify(G,null,2);default:return z}});if(X<J.length)Y+=` ${J.slice(X).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let J=$;return J=J.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Z,X,Y)=>{let z=Q0.underline(Q0.blue(X)),Q=this.toAbsoluteFilePath(Y);if(Q&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let G=`file://${encodeURI(Q)}`,q="\x1B]8;;",U="\x1B\\";return`\x1B]8;;${G}\x1B\\${z}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${z}\x1B]8;;\x1B\\`;return z}),J=J.replace(/`([^`]+)`/g,(Z,X)=>Q0.bgGray(X)),J=J.replace(/\*\*([^*]+)\*\*/g,(Z,X)=>Q0.bold(X)),J=J.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Z,X)=>Q0.italic(X)),J=J.replace(/(?<!_)_([^_]+)_(?!_)/g,(Z,X)=>Q0.italic(X)),J=J.replace(/~([^~]+)~/g,(Z,X)=>Q0.strikethrough(X)),J}supportsHyperlinks(){if(M0())return!1;let $=Y0.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let J=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(J)&&J>=5000)return!0;return!1}toAbsoluteFilePath($){try{let J=$;if(J.startsWith("file://"))J=J.replace(/^file:\/\//,"");if(J.startsWith("~")){let Z=Y0.env.HOME||"";if(Z)J=J.replace(/^~(?=$|\/)/,Z)}if(fQ(J)||J.startsWith("./")||J.startsWith("../"))J=gQ(J);else return null;return e1(J)?J:null}catch{return null}}buildOutputTexts($){let J=this.shouldStyleConsole()?this.formatMarkdown($):$,Z=$.replace(this.ANSI_PATTERN,"");return{consoleText:J,fileText:Z}}async log($,J,...Z){if(!this.shouldLog($))return;let X=new Date,Y=this.formatConsoleTimestamp(X),z=this.formatFileTimestamp(X),Q,G;if(J instanceof Error)Q=J.message,G=J.stack;else Q=this.formatMessage(J,Z);let{consoleText:q,fileText:U}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let K=this.options.showIcons===!1?"":oQ[$],H=this.options.showTags!==!1&&this.name?Q0.gray(this.formatTag(this.name)):"",V;switch($){case"debug":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:Q0.gray(q),level:$}),console.error(V);break;case"info":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:q,level:$}),console.warn(V);break;case"success":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:Q0.green(q),level:$}),console.error(V);break;case"warning":V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:q,level:$}),console.warn(V);break;case"error":if(V=this.formatConsoleMessage({timestamp:Y,icon:K,tag:H,message:q,level:$}),console.error(V),G){let A=G.split(`
41
41
  `);for(let _ of A)if(_.trim()&&!_.includes(Q))console.error(this.formatConsoleMessage({timestamp:Y,message:Q0.gray(` ${_}`),level:$,showTimestamp:!1}))}break}}else if(!M0()){if(console.error(`${z} ${this.environment}.${$.toUpperCase()}: ${Q}`),G)console.error(G)}let W=`${z} ${this.environment}.${$.toUpperCase()}: ${U}
42
42
  `;if(G)W+=`${G}
43
43
  `;if(W=W.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(W)}progress($,J=""){let Z={update:(G,q)=>{},finish:(G)=>{},interrupt:(G,q)=>{}};if(!this.enabled)return Z;let X=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:J||"",barLength:X,lastRenderedLine:""},this.shouldStyleConsole()&&!M0()&&Y0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(G,q)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,G),this.activeProgressBar.total),q!==void 0)this.activeProgressBar.message=q;if(this.shouldStyleConsole()&&!M0()&&Y0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(G)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,G)},interrupt:(G,q="info")=>{if(!M0()&&Y0.stdout.isTTY)Y0.stdout.write(`
@@ -46,7 +46,7 @@ export type ConfigOf = Config
46
46
  `),q=Math.max(...G.map((H)=>H.length))+2,U=`\u250C${"\u2500".repeat(q)}\u2510`,W=`\u2514${"\u2500".repeat(q)}\u2518`,K=G.map((H)=>{return this.formatConsoleMessage({timestamp:Z,message:Q0.cyan(H),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Z,message:Q0.cyan(U),showTimestamp:!1})),K.forEach((H)=>console.error(H)),console.error(this.formatConsoleMessage({timestamp:Z,message:Q0.cyan(W),showTimestamp:!1}))}else if(!M0())console.error(`${X} ${this.environment}.INFO: [BOX] ${z}`);let Q=`${X} ${this.environment}.INFO: [BOX] ${z}
47
47
  `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Q)}async prompt($){if(M0())return Promise.resolve(!0);return new Promise((J)=>{console.error(`${Q0.cyan("?")} ${$} (y/n) `);let Z=(X)=>{let Y=X.toString().trim().toLowerCase();Y0.stdin.removeListener("data",Z);try{if(typeof Y0.stdin.setRawMode==="function")Y0.stdin.setRawMode(!1)}catch{}Y0.stdin.pause(),console.error(""),J(Y==="y"||Y==="yes")};try{if(typeof Y0.stdin.setRawMode==="function")Y0.stdin.setRawMode(!0)}catch{}Y0.stdin.resume(),Y0.stdin.once("data",Z)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...J){if(!this.enabled)return;let Z=$;if(J&&J.length>0){let q=/%([sdijfo%])/g,U=0;if(Z=$.replace(q,(W,K)=>{if(K==="%")return"%";if(U>=J.length)return W;let H=J[U++];switch(K){case"s":return String(H);case"d":case"i":return Number(H).toString();case"j":case"o":return JSON.stringify(H,null,2);default:return W}}),U<J.length)Z+=` ${J.slice(U).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:X,fileText:Y}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let q=this.options.showTags!==!1&&this.name?Q0.gray(this.formatTag(this.name)):"",U=this.options.showIcons===!1?"":`${Q0.blue("\u25D0")} `;console.error(`${U}${q} ${Q0.cyan(X)}`)}let G=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
48
48
  `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(G)}renderProgressBar($,J=!1){if(!this.enabled||!this.shouldStyleConsole()||!Y0.stdout.isTTY)return;let Z=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),X=Math.round($.barLength*Z/100),Y=$.barLength-X,z=Q0.green("\u2501".repeat(X)),Q=Q0.gray("\u2501".repeat(Y)),G=`[${z}${Q}]`,q=`${Z}%`.padStart(4),U=$.message?` ${$.message}`:"",W=this.options.showIcons===!1?"":J||Z===100?Q0.green("\u2713"):Q0.blue("\u25B6"),K=this.options.showTags!==!1&&this.name?` ${Q0.gray(this.formatTag(this.name))}`:"",H=`\r${W}${K} ${G} ${q}${U}`,V=Y0.stdout.columns||80,A=" ".repeat(Math.max(0,V-H.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${H}${A}`,Y0.stdout.write($.lastRenderedLine),J)Y0.stdout.write(`
49
- `)}finishProgressBar($,J){if(!this.enabled||!this.fancy||M0()||!Y0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(J)$.message=J;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(M0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let J=await $$(this.config.logDirectory),Z=[];for(let X of J){if(!($.name?new RegExp($.name.replace("*",".*")).test(X):X.startsWith(this.name))||!X.endsWith(".log"))continue;let z=A1(this.config.logDirectory,X);if($.before)try{if((await V1(z)).mtime>=$.before)continue}catch(Q){console.error(`Failed to get stats for file ${z}:`,Q);continue}Z.push(z)}if(Z.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Z.length} log file(s)...`);for(let X of Z)try{await Z$(X),console.warn(`Deleted log file: ${X}`)}catch(Y){console.error(`Failed to delete log file ${X}:`,Y)}console.warn("Log clearing process finished.")}catch(J){console.error("Error during log clearing process:",J)}}}var MU=new J1("stacks");import{readFileSync as vY,writeFileSync as xG}from"fs";import{isAbsolute as hG,relative as IY,resolve as uG}from"path";import T1 from"process";var j$={meta:{docs:"Enforce return statements in callbacks of array methods",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=new RegExp(`\\.(${["map","filter","find","findIndex","findLast","findLastIndex","every","some","reduce","reduceRight","sort","flatMap"].join("|")})\\s*\\(`,"g");for(let Q=0;Q<X.length;Q++){let G=X[Q],q;for(q=z.exec(G);q!==null;q=z.exec(G)){let U=q[1],W=q.index+q[0].length,K=G.slice(W),H=K.match(/^\s*(?:\(([^)]*)\)|([a-z_$][\w$]*))\s*=>/i),V=K.match(/^\s*function\s*(?:[a-zA-Z_$][\w$]*\s*)?\(/);if(H){let A=K.slice(H[0].length).trim();if(A.startsWith("{")){let _=!1,w=0,F=A,M=Q;while(M<X.length){let T=M===Q?F:X[M];for(let E=0;E<T.length;E++){let j=T[E];if(j==="{")w++;if(j==="}"){if(w--,w===0){if(!_)Z.push({filePath:J.filePath,line:Q+1,column:q.index+1,ruleId:"eslint/array-callback-return",message:`Array method '${U}' callback should return a value`,severity:"error"});break}}}if(T.match(new RegExp("\\breturn\\s+[^;]")))_=!0;if(w===0)break;M++,F=X[M]||""}}}else if(V){let A=!1,_=0,w=Q,F=!1;while(w<X.length){let M=X[w];for(let T=0;T<M.length;T++){let E=M[T];if(E==="{")_++,F=!0;else if(E==="}"){if(_--,_===0&&F){if(!A)Z.push({filePath:J.filePath,line:Q+1,column:q.index+1,ruleId:"eslint/array-callback-return",message:`Array method '${U}' callback should return a value`,severity:"error"});break}}}if(F&&M.match(new RegExp("\\breturn\\s+[^;]")))A=!0;if(_===0&&F)break;w++}}}}return Z}};var N$={meta:{docs:"Require super() calls in constructors of derived classes",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=!1,Q=0,G=0,q=!1;for(let U=0;U<X.length;U++){let W=X[U];if(W.match(/\bclass\s+\w+\s+extends\s+\w+/))Y=!0;if(Y&&W.match(/\bconstructor\s*\(/))z=!0,Q=U+1,G=0,q=!1;if(z){for(let K of W){if(K==="{")G++;if(K==="}")G--}if(W.match(/\bsuper\s*\(/))q=!0;if(G===0&&W.includes("}")){if(!q)Z.push({filePath:J.filePath,line:Q,column:1,ruleId:"eslint/constructor-super",message:"Constructors of derived classes must call super()",severity:"error"});z=!1,Y=!1}}}return Z}};var T$={meta:{docs:'Enforce "for" loop update clause moving counter in the right direction',recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=new RegExp("\\bfor\\s*\\(\\s*(?:(?:let|var|const)\\s*)?(\\w+)\\s*=[^;]+;\\s*(\\w+)\\s*([<>]=?)[^;]+;\\s*(\\w+)(\\+\\+|--|[\\s+-]=)"),G=z.match(Q);if(G){let q=G[1],U=G[2],W=G[3],K=G[4],H=G[5];if(q===U&&U===K){let V=H.includes("+"),A=W.includes("<");if(A&&!V||!A&&V)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"eslint/for-direction",message:"The update clause in this loop moves the variable in the wrong direction",severity:"error"})}}}return Z}};var E$={meta:{docs:"Enforce return statements in getters",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].match(/\bget\s+(\w+)\s*\(/);if(Q){let G=Q[1],q=!1,U=0,W=Y;while(W<X.length){let K=X[W];for(let V of K){if(V==="{")U++;if(V==="}"){if(U--,U===0){if(!q)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"eslint/getter-return",message:`Getter '${G}' must return a value`,severity:"error"});break}}}let H=new RegExp("\\breturn\\s+[^;]");if(K.match(H))q=!0;if(U===0)break;W++}}}return Z}};var D$={meta:{docs:"Disallow async functions as Promise executor",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/new\s+Promise\s*\(\s*async\s*(?:\(|function)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z))Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"eslint/no-async-promise-executor",message:"Promise executor functions should not be async",severity:"error"})}return Z}};var R$={meta:{docs:"Disallow comparing against -0",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/([!=]==?)\s*-0\b|\b-0\s*([!=]==?)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z))Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"eslint/no-compare-neg-zero",message:"Do not use the '-0' literal in comparisons",severity:"error"})}return Z}};var O$={meta:{docs:"Disallow assignment operators in conditional expressions",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/\b(if|while)\s*\([^)]*\b(\w+)\s*=\s*(?!=)[^)]*\)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[0];if(/===|==/.test(q))continue;if(z.substring(0,G.index).includes("//"))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,G.index+1),ruleId:"eslint/no-cond-assign",message:"Expected a conditional expression and instead saw an assignment",severity:"error"})}}return Z}};var L$={meta:{docs:"Disallow reassigning const variables",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=new Map;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.match(/\bconst\s+(\w+)/);if(G)Y.set(G[1],z);let q=/\b(\w+)\s*=(?!=)/g,U;for(U=q.exec(Q);U!==null;U=q.exec(Q)){let W=U[1],K=Q.substring(0,U.index);if(!/\b(?:const|let|var)\s*$/.test(K)&&Y.has(W))Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,U.index+1),ruleId:"eslint/no-const-assign",message:`'${W}' is constant`,severity:"error"})}}return Z}};var P$={meta:{docs:"Disallow constant expressions in conditions",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=[{pattern:/\b(if|while)\s*\(\s*(true|false)\s*\)/g,type:"boolean"},{pattern:/\b(if|while)\s*\(\s*(\d+)\s*\)/g,type:"number"},{pattern:/\b(if|while)\s*\(\s*(['"`][^'"`]*['"`])\s*\)/g,type:"string"}];for(let{pattern:G,type:q}of Q){let U;while((U=G.exec(z))!==null){let W=U[1],K=U[2];if(z.substring(0,U.index).includes("//"))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,U.index+W.length+2),ruleId:"eslint/no-constant-condition",message:"Unexpected constant condition",severity:"error"})}}}return Z}};var C$={meta:{docs:"Disallow duplicate class members",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=new Set,Q=0;for(let G=0;G<X.length;G++){let q=X[G];if(q.match(/\bclass\s+\w+/))Y=!0,z=new Set,Q=0;if(Y){for(let W of q){if(W==="{")Q++;if(W==="}"){if(Q--,Q===0)Y=!1}}let U=[...q.matchAll(/^\s*(?:(?:public|private|protected|static|readonly|async)\s*)?(?:get|set)?\s*(\w+)\s*\(/g),...q.matchAll(/^\s*(?:(?:public|private|protected|static|readonly)\s*)?(\w+)\s*[:=]/g)];for(let W of U){let K=W[1];if(z.has(K))Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"eslint/no-dupe-class-members",message:`Duplicate class member '${K}'`,severity:"error"});else z.add(K)}}}return Z}};var b1={meta:{docs:"Disallow duplicate keys in object literals",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=/\{\s*$/,z=/^\s*(?:(['"`])(.+?)\1|(\w+))\s*:/;for(let Q=0;Q<X.length;Q++){let G=X[Q];if(!Y.test(G)&&!G.includes("{"))continue;let q=new Map,U=(G.match(/\{/g)||[]).length-(G.match(/\}/g)||[]).length,W=Q;for(let K=Q+1;K<X.length&&U>0;K++){let H=X[K];U+=(H.match(/\{/g)||[]).length,U-=(H.match(/\}/g)||[]).length;let V=H.match(z);if(V){let A=V[2]||V[3];if(A)if(q.get(A)!==void 0)Z.push({filePath:J.filePath,line:K+1,column:Math.max(1,H.search(/\S/)+1),ruleId:"eslint/no-dupe-keys",message:`Duplicate key '${A}'`,severity:"error"});else q.set(A,K)}if(U===0)break}}return Z},fix:($,J)=>{let Z=b1.check($,J);if(Z.length===0)return $;let X=$.split(/\r?\n/),Y=new Set(Z.map((Q)=>Q.line-1));return X.filter((Q,G)=>!Y.has(G)).join(`
49
+ `)}finishProgressBar($,J){if(!this.enabled||!this.fancy||M0()||!Y0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(J)$.message=J;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(M0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let J=await $$(this.config.logDirectory),Z=[];for(let X of J){if(!($.name?new RegExp($.name.replace("*",".*")).test(X):X.startsWith(this.name))||!X.endsWith(".log"))continue;let z=A1(this.config.logDirectory,X);if($.before)try{if((await V1(z)).mtime>=$.before)continue}catch(Q){console.error(`Failed to get stats for file ${z}:`,Q);continue}Z.push(z)}if(Z.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Z.length} log file(s)...`);for(let X of Z)try{await Z$(X),console.warn(`Deleted log file: ${X}`)}catch(Y){console.error(`Failed to delete log file ${X}:`,Y)}console.warn("Log clearing process finished.")}catch(J){console.error("Error during log clearing process:",J)}}}var jU=new J1("stacks");import{readFileSync as vY,writeFileSync as hG}from"fs";import{isAbsolute as uG,relative as IY,resolve as mG}from"path";import T1 from"process";var j$={meta:{docs:"Enforce return statements in callbacks of array methods",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=new RegExp(`\\.(${["map","filter","find","findIndex","findLast","findLastIndex","every","some","reduce","reduceRight","sort","flatMap"].join("|")})\\s*\\(`,"g");for(let Q=0;Q<X.length;Q++){let G=X[Q],q;for(q=z.exec(G);q!==null;q=z.exec(G)){let U=q[1],W=q.index+q[0].length,K=G.slice(W),H=K.match(/^\s*(?:\(([^)]*)\)|([a-z_$][\w$]*))\s*=>/i),V=K.match(/^\s*function\s*(?:[a-zA-Z_$][\w$]*\s*)?\(/);if(H){let A=K.slice(H[0].length).trim();if(A.startsWith("{")){let _=!1,w=0,F=A,M=Q;while(M<X.length){let T=M===Q?F:X[M];for(let E=0;E<T.length;E++){let j=T[E];if(j==="{")w++;if(j==="}"){if(w--,w===0){if(!_)Z.push({filePath:J.filePath,line:Q+1,column:q.index+1,ruleId:"eslint/array-callback-return",message:`Array method '${U}' callback should return a value`,severity:"error"});break}}}if(T.match(new RegExp("\\breturn\\s+[^;]")))_=!0;if(w===0)break;M++,F=X[M]||""}}}else if(V){let A=!1,_=0,w=Q,F=!1;while(w<X.length){let M=X[w];for(let T=0;T<M.length;T++){let E=M[T];if(E==="{")_++,F=!0;else if(E==="}"){if(_--,_===0&&F){if(!A)Z.push({filePath:J.filePath,line:Q+1,column:q.index+1,ruleId:"eslint/array-callback-return",message:`Array method '${U}' callback should return a value`,severity:"error"});break}}}if(F&&M.match(new RegExp("\\breturn\\s+[^;]")))A=!0;if(_===0&&F)break;w++}}}}return Z}};var N$={meta:{docs:"Require super() calls in constructors of derived classes",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=!1,Q=0,G=0,q=!1;for(let U=0;U<X.length;U++){let W=X[U];if(W.match(/\bclass\s+\w+\s+extends\s+\w+/))Y=!0;if(Y&&W.match(/\bconstructor\s*\(/))z=!0,Q=U+1,G=0,q=!1;if(z){for(let K of W){if(K==="{")G++;if(K==="}")G--}if(W.match(/\bsuper\s*\(/))q=!0;if(G===0&&W.includes("}")){if(!q)Z.push({filePath:J.filePath,line:Q,column:1,ruleId:"eslint/constructor-super",message:"Constructors of derived classes must call super()",severity:"error"});z=!1,Y=!1}}}return Z}};var T$={meta:{docs:'Enforce "for" loop update clause moving counter in the right direction',recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=new RegExp("\\bfor\\s*\\(\\s*(?:(?:let|var|const)\\s*)?(\\w+)\\s*=[^;]+;\\s*(\\w+)\\s*([<>]=?)[^;]+;\\s*(\\w+)(\\+\\+|--|[\\s+-]=)"),G=z.match(Q);if(G){let q=G[1],U=G[2],W=G[3],K=G[4],H=G[5];if(q===U&&U===K){let V=H.includes("+"),A=W.includes("<");if(A&&!V||!A&&V)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"eslint/for-direction",message:"The update clause in this loop moves the variable in the wrong direction",severity:"error"})}}}return Z}};var E$={meta:{docs:"Enforce return statements in getters",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].match(/\bget\s+(\w+)\s*\(/);if(Q){let G=Q[1],q=!1,U=0,W=Y;while(W<X.length){let K=X[W];for(let V of K){if(V==="{")U++;if(V==="}"){if(U--,U===0){if(!q)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"eslint/getter-return",message:`Getter '${G}' must return a value`,severity:"error"});break}}}let H=new RegExp("\\breturn\\s+[^;]");if(K.match(H))q=!0;if(U===0)break;W++}}}return Z}};var D$={meta:{docs:"Disallow async functions as Promise executor",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/new\s+Promise\s*\(\s*async\s*(?:\(|function)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z))Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"eslint/no-async-promise-executor",message:"Promise executor functions should not be async",severity:"error"})}return Z}};var R$={meta:{docs:"Disallow comparing against -0",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/([!=]==?)\s*-0\b|\b-0\s*([!=]==?)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z))Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"eslint/no-compare-neg-zero",message:"Do not use the '-0' literal in comparisons",severity:"error"})}return Z}};var O$={meta:{docs:"Disallow assignment operators in conditional expressions",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/\b(if|while)\s*\([^)]*\b(\w+)\s*=\s*(?!=)[^)]*\)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[0];if(/===|==/.test(q))continue;if(z.substring(0,G.index).includes("//"))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,G.index+1),ruleId:"eslint/no-cond-assign",message:"Expected a conditional expression and instead saw an assignment",severity:"error"})}}return Z}};var L$={meta:{docs:"Disallow reassigning const variables",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=new Map;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.match(/\bconst\s+(\w+)/);if(G)Y.set(G[1],z);let q=/\b(\w+)\s*=(?!=)/g,U;for(U=q.exec(Q);U!==null;U=q.exec(Q)){let W=U[1],K=Q.substring(0,U.index);if(!/\b(?:const|let|var)\s*$/.test(K)&&Y.has(W))Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,U.index+1),ruleId:"eslint/no-const-assign",message:`'${W}' is constant`,severity:"error"})}}return Z}};var P$={meta:{docs:"Disallow constant expressions in conditions",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=[{pattern:/\b(if|while)\s*\(\s*(true|false)\s*\)/g,type:"boolean"},{pattern:/\b(if|while)\s*\(\s*(\d+)\s*\)/g,type:"number"},{pattern:/\b(if|while)\s*\(\s*(['"`][^'"`]*['"`])\s*\)/g,type:"string"}];for(let{pattern:G,type:q}of Q){let U;while((U=G.exec(z))!==null){let W=U[1],K=U[2];if(z.substring(0,U.index).includes("//"))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,U.index+W.length+2),ruleId:"eslint/no-constant-condition",message:"Unexpected constant condition",severity:"error"})}}}return Z}};var C$={meta:{docs:"Disallow duplicate class members",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=new Set,Q=0;for(let G=0;G<X.length;G++){let q=X[G];if(q.match(/\bclass\s+\w+/))Y=!0,z=new Set,Q=0;if(Y){for(let W of q){if(W==="{")Q++;if(W==="}"){if(Q--,Q===0)Y=!1}}let U=[...q.matchAll(/^\s*(?:(?:public|private|protected|static|readonly|async)\s*)?(?:get|set)?\s*(\w+)\s*\(/g),...q.matchAll(/^\s*(?:(?:public|private|protected|static|readonly)\s*)?(\w+)\s*[:=]/g)];for(let W of U){let K=W[1];if(z.has(K))Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"eslint/no-dupe-class-members",message:`Duplicate class member '${K}'`,severity:"error"});else z.add(K)}}}return Z}};var b1={meta:{docs:"Disallow duplicate keys in object literals",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=/\{\s*$/,z=/^\s*(?:(['"`])(.+?)\1|(\w+))\s*:/;for(let Q=0;Q<X.length;Q++){let G=X[Q];if(!Y.test(G)&&!G.includes("{"))continue;let q=new Map,U=(G.match(/\{/g)||[]).length-(G.match(/\}/g)||[]).length,W=Q;for(let K=Q+1;K<X.length&&U>0;K++){let H=X[K];U+=(H.match(/\{/g)||[]).length,U-=(H.match(/\}/g)||[]).length;let V=H.match(z);if(V){let A=V[2]||V[3];if(A)if(q.get(A)!==void 0)Z.push({filePath:J.filePath,line:K+1,column:Math.max(1,H.search(/\S/)+1),ruleId:"eslint/no-dupe-keys",message:`Duplicate key '${A}'`,severity:"error"});else q.set(A,K)}if(U===0)break}}return Z},fix:($,J)=>{let Z=b1.check($,J);if(Z.length===0)return $;let X=$.split(/\r?\n/),Y=new Set(Z.map((Q)=>Q.line-1));return X.filter((Q,G)=>!Y.has(G)).join(`
50
50
  `)}};var I$={meta:{docs:"Disallow duplicate case labels in switch statements",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=new Set,Q=-1;for(let G=0;G<X.length;G++){let q=X[G],U=q.trim();if(/\bswitch\s*\(/.test(U)){Y=!0,z=new Set,Q=G;continue}if(Y&&U==="}"&&G>Q){let W=X[Q].match(/^\s*/)?.[0].length||0;if((q.match(/^\s*/)?.[0].length||0)<=W+2)Y=!1,z=new Set}if(Y){let W=U.match(/^case\s+(.+?)\s*:/);if(W){let K=W[1].trim();if(z.has(K))Z.push({filePath:J.filePath,line:G+1,column:Math.max(1,q.indexOf("case")+1),ruleId:"eslint/no-duplicate-case",message:`Duplicate case label '${K}'`,severity:"error"});else z.add(K)}}}return Z}};var S$={meta:{docs:"Disallow empty destructuring patterns",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/\{\s*\}\s*=/g,G=/\[\s*\]\s*=/g,q;for(q=Q.exec(z);q!==null;q=Q.exec(z)){if(z.substring(0,q.index).includes("//"))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,q.index+1),ruleId:"eslint/no-empty-pattern",message:"Unexpected empty object pattern",severity:"error"})}for(q=G.exec(z);q!==null;q=G.exec(z)){if(z.substring(0,q.index).includes("//"))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,q.index+1),ruleId:"eslint/no-empty-pattern",message:"Unexpected empty array pattern",severity:"error"})}}return Z}};var v$={meta:{docs:"Disallow fallthrough of case statements",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=-1,Q=!1;for(let G=0;G<X.length;G++){let U=X[G].trim();if(/\bswitch\s*\(/.test(U)){Y=!0;continue}if(Y){if(/^case\s+/.test(U)||/^default\s*:/.test(U)){if(z>=0&&Q){if(!(/\/\/.*falls?\s*through|\/\*.*falls?\s*through/i.test(X[z])||G>0&&/\/\/.*falls?\s*through|\/\*.*falls?\s*through/i.test(X[G-1])))Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,X[z].indexOf("case")+1),ruleId:"eslint/no-fallthrough",message:"Expected a 'break' statement before 'case'",severity:"error"})}z=G,Q=!0}if(/\b(?:break|return|throw|continue)\b/.test(U))Q=!1;if(U==="}")Y=!1,z=-1,Q=!1}}return Z}};var y$={meta:{docs:"Disallow number literals that lose precision",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/\b(\d{17,}(?:\.\d+)?|\d+\.\d{17,})\b/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[1];if(Number(q).toString()!==q)Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"eslint/no-loss-of-precision",message:"This number literal will lose precision at runtime",severity:"error"})}}return Z}};var b$={meta:{docs:"Disallow returning values from Promise executor functions",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++)if(X[Y].match(/new\s+Promise\s*\(/)){let G=0,q=!1,U=Y;while(U<X.length){let W=X[U];for(let H of W){if(H==="{")G++,q=!0;if(H==="}"){if(G--,G===0&&q)break}}let K=new RegExp("\\breturn\\s+[^;]");if(q&&W.match(K))Z.push({filePath:J.filePath,line:U+1,column:1,ruleId:"eslint/no-promise-executor-return",message:"Return values from promise executor functions cannot be read",severity:"error"});if(G===0&&q)break;U++}}return Z}};var k$={meta:{docs:"Disallow variable redeclaration",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=new Map;for(let z=0;z<X.length;z++){let Q=X[z],G=/\b(var|let|const)\s+(\w+)/g,q;for(q=G.exec(Q);q!==null;q=G.exec(Q)){let W=q[2];if(Y.get(W)!==void 0)Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,q.index+1),ruleId:"eslint/no-redeclare",message:`'${W}' is already defined`,severity:"error"});else Y.set(W,z)}let U=/\bfunction\s+(\w+)/g;for(q=U.exec(Q);q!==null;q=U.exec(Q)){let W=q[1];if(Y.get(W)!==void 0)Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,q.index+1),ruleId:"eslint/no-redeclare",message:`'${W}' is already defined`,severity:"error"});else Y.set(W,z)}}return Z}};var k1={meta:{docs:"Disallow assignments where both sides are identical",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=new RegExp("\\b(\\w+)\\s*=\\s*(\\w+)\\s*(?:;\\s*)?(?:\\/\\/.*)?$"),G=z.match(Q);if(G&&G[1]===G[2]){Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf(G[1])+1),ruleId:"eslint/no-self-assign",message:`'${G[1]}' is assigned to itself`,severity:"error"});continue}let q=z.match(/([\w.]+)\s*=\s*([\w.]+)/);if(q&&q[1]===q[2]){Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf(q[1])+1),ruleId:"eslint/no-self-assign",message:`'${q[1]}' is assigned to itself`,severity:"error"});continue}let U=z.match(/(\w+\[[^\]]+\])\s*=\s*(\w+\[[^\]]+\])/);if(U){let W=U[1].replace(/\s/g,""),K=U[2].replace(/\s/g,"");if(W===K)Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf(U[1])+1),ruleId:"eslint/no-self-assign",message:`'${U[1]}' is assigned to itself`,severity:"error"})}}return Z},fix:($,J)=>{let Z=k1.check($,J);if(Z.length===0)return $;let X=$.split(/\r?\n/),Y=new Set(Z.map((Q)=>Q.line-1));return X.map((Q,G)=>{if(Y.has(G)){let q=Q.trim();if(new RegExp("^\\w+(?:\\.\\w+|\\[[^\\]]+\\])?\\s*=\\s*\\w+(?:\\.\\w+|\\[[^\\]]+\\])?;?\\s*$").test(q))return""}return Q}).filter((Q,G,q)=>{if(Q===""&&Y.has(G)){let U=G>0&&q[G-1].trim()!=="",W=G<q.length-1&&q[G+1]&&q[G+1].trim()!=="";if(!U||!W)return!1}return!0}).join(`
51
51
  `)}};var f$={meta:{docs:"Disallow comparisons where both sides are identical",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/([\w.\[\]]+)\s*(===|!==|==|!=|<|>|<=|>=)\s*([\w.\[\]]+)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[1].replace(/\s/g,""),U=G[2],W=G[3].replace(/\s/g,"");if(q===W)Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,G.index+1),ruleId:"eslint/no-self-compare",message:`Comparing '${G[1]}' to itself is potentially pointless`,severity:"error"})}}return Z}};var g$={meta:{docs:"Disallow sparse arrays (arrays with empty slots)",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/\[([^\]]*)\]/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[1];if(/,\s*,/.test(q))Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,G.index+1),ruleId:"eslint/no-sparse-arrays",message:"Unexpected sparse array",severity:"error"})}}return Z},fix:($,J)=>{let Z=$.split(/\r?\n/),X=!1,Y=Z.map((z)=>{let Q=z;return Q=Q.replace(/\[([^\]]*)\]/g,(G,q)=>{if(/,\s*,/.test(q))return X=!0,`[${q.replace(/,(\s*),/g,", undefined,")}]`;return G}),Q});return X?Y.join(`
52
52
  `):$}};var p$={meta:{docs:"Disallow undeclared variables",recommended:!0,wip:!0},check:($,J)=>{return[]}};var x$={meta:{docs:"Disallow unreachable code after return, throw, continue, or break",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(/^\s*(?:return|throw|break|continue)\b/.test(z))for(let G=Y+1;G<X.length;G++){let q=X[G],U=q.trim();if(U===""||U.startsWith("//")||U.startsWith("/*"))continue;if(U==="}"||U.startsWith("}"))break;if(/^(?:case\b|default\s*:)/.test(U))break;Z.push({filePath:J.filePath,line:G+1,column:Math.max(1,q.search(/\S/)+1),ruleId:"eslint/no-unreachable",message:"Unreachable code",severity:"error"});break}}return Z}};var h$={meta:{docs:"Disallow negation of the left operand of relational operators",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/!\s*\w+\s+in\s+/g,G=/!\s*\w+\s+instanceof\s+/g,q;for(q=Q.exec(z);q!==null;q=Q.exec(z))Z.push({filePath:J.filePath,line:Y+1,column:q.index+1,ruleId:"eslint/no-unsafe-negation",message:"Unexpected negation of 'in' operand",severity:"error"});for(q=G.exec(z);q!==null;q=G.exec(z))Z.push({filePath:J.filePath,line:Y+1,column:q.index+1,ruleId:"eslint/no-unsafe-negation",message:"Unexpected negation of 'instanceof' operand",severity:"error"})}return Z},fix:($)=>{let J=$;return J=J.replace(/!\s*(\w+)\s+in\s+/g,"!($1 in "),J=J.replace(/!\s*(\w+)\s+instanceof\s+/g,"!($1 instanceof "),J}};var u$={meta:{docs:"Disallow unnecessary catch clauses",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/catch\s*\(\s*(\w+)\s*\)/);if(!Q)continue;let G=Q[1];for(let q=Y+1;q<Math.min(Y+5,X.length);q++){let U=X[q].trim();if(U===`throw ${G}`||U===`throw ${G};`){let W=!1;for(let K=Y+1;K<q;K++){let H=X[K].trim();if(H!==""&&H!=="{"&&!H.startsWith("//")){W=!0;break}}if(!W)Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf("catch")+1),ruleId:"eslint/no-useless-catch",message:"Unnecessary catch clause",severity:"error"});break}if(U==="}")break}}return Z}};var m$={meta:{docs:"Require isNaN() when checking for NaN",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=/\b([\w.\[\]]+)\s*(===|!==|==|!=)\s*NaN\b|\bNaN\s*(===|!==|==|!=)\s*([\w.\[\]]+)/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[1]||G[4];Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,G.index+1),ruleId:"eslint/use-isnan",message:"Use isNaN() to compare with NaN",severity:"error"})}}return Z},fix:($,J)=>{let Z=$.split(/\r?\n/),X=!1,Y=Z.map((z)=>{let Q=z;return Q=Q.replace(/\b([\w.\[\]]+)\s*===\s*NaN\b/g,(G,q)=>{return X=!0,`isNaN(${q})`}),Q=Q.replace(/\bNaN\s*===\s*([\w.\[\]]+)\b/g,(G,q)=>{return X=!0,`isNaN(${q})`}),Q=Q.replace(/\b([\w.\[\]]+)\s*!==\s*NaN\b/g,(G,q)=>{return X=!0,`!isNaN(${q})`}),Q=Q.replace(/\bNaN\s*!==\s*([\w.\[\]]+)\b/g,(G,q)=>{return X=!0,`!isNaN(${q})`}),Q=Q.replace(/\b([\w.\[\]]+)\s*==\s*NaN\b/g,(G,q)=>{return X=!0,`isNaN(${q})`}),Q=Q.replace(/\bNaN\s*==\s*([\w.\[\]]+)\b/g,(G,q)=>{return X=!0,`isNaN(${q})`}),Q=Q.replace(/\b([\w.\[\]]+)\s*!=\s*NaN\b/g,(G,q)=>{return X=!0,`!isNaN(${q})`}),Q=Q.replace(/\bNaN\s*!=\s*([\w.\[\]]+)\b/g,(G,q)=>{return X=!0,`!isNaN(${q})`}),Q});return X?Y.join(`
@@ -92,19 +92,19 @@ ${U.slice(m.from+1,m.to+1).join(`
92
92
  `):$}};var QJ={meta:{docs:"Fenced code blocks should have a language specified"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++)if(X[Y].match(/^(?:`{3,}|~{3,})\s*$/)){let G=!0;for(let q=Y-1;q>=0;q--)if(/^(?:`{3,}|~{3,})/.test(X[q])){G=!1;break}if(G)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"markdown/fenced-code-language",message:"Fenced code blocks should have a language specified",severity:"error"})}return Z}};var GJ={meta:{docs:"First line in a file should be a top-level heading"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=-1;for(let q=0;q<X.length;q++)if(X[q].trim().length>0){Y=q;break}if(Y===-1)return Z;let z=X[Y],Q=/^#\s/.test(z),G=Y+1<X.length&&/^=+\s*$/.test(X[Y+1]);if(!Q&&!G)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"markdown/first-line-heading",message:"First line in a file should be a top-level heading",severity:"warning"});return Z}};var qJ={meta:{docs:"Heading levels should only increment by one level at a time"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),z=0;for(let Q=0;Q<X.length;Q++){if(Y.has(Q))continue;let q=X[Q].match(/^(#{1,6})\s/);if(q){let U=q[1].length;if(z>0&&U>z+1)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"markdown/heading-increment",message:`Heading level should not skip from h${z} to h${U}`,severity:"error"});z=U}}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=0,Y=!1;for(let z=0;z<J.length;z++){if(Z.has(z))continue;let G=J[z].match(/^(#{1,6})(\s.*)$/);if(!G)continue;let q=G[1].length,U=X===0?q:Math.min(q,X+1);if(U!==q)J[z]="#".repeat(U)+G[2],Y=!0;X=U}return Y?J.join(`
93
93
  `):$}};var UJ={meta:{docs:"Headings must start at the beginning of the line"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z];if(/^(?:`{3,}|~{3,})/.test(Q.trim())){Y=!Y;continue}if(Y)continue;if(Q.match(/^(\s+)(#{1,6}\s)/))Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"markdown/heading-start-left",message:"Headings must start at the beginning of the line",severity:"error"})}return Z},fix:($)=>{return $.split(/\r?\n/).map((X)=>{return X.replace(/^(\s+)(#{1,6}\s)/,"$2")}).join(`
94
94
  `)}};var WJ={meta:{docs:"Heading style should be consistent (atx, setext, or consistent)"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).style||"consistent",Q=null,G=o(X);for(let q=0;q<X.length;q++){if(G.has(q))continue;let U=X[q],W=q+1<X.length?X[q+1]:"",K=U.match(/^#{1,6}\s/),H=W.match(/^(?:=+|-+)\s*$/)&&U.trim().length>0&&!G.has(q+1);if(K){if(z==="setext")Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/heading-style",message:"Expected setext style heading",severity:"error"});else if(z==="consistent"){if(Q===null)Q="atx";else if(Q==="setext")Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/heading-style",message:"Heading style should be consistent throughout document",severity:"error"})}}else if(H){if(z==="atx")Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/heading-style",message:"Expected atx style heading",severity:"error"});else if(z==="consistent"){if(Q===null)Q="setext";else if(Q==="atx")Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/heading-style",message:"Heading style should be consistent throughout document",severity:"error"})}}}return Z},fix:($,J)=>{let X=(J.options||{}).style||"consistent",Y=$.split(/\r?\n/),z=o(Y),Q=X==="consistent"?null:X;if(Q===null)for(let U=0;U<Y.length;U++){if(z.has(U))continue;let W=Y[U],K=U+1<Y.length?Y[U+1]:"";if(/^#{1,6}\s/.test(W)){Q="atx";break}if(/^(?:=+|-+)\s*$/.test(K)&&W.trim().length>0&&!z.has(U+1)){Q="setext";break}}if(Q===null)return $;let G=[],q=!1;for(let U=0;U<Y.length;U++){let W=Y[U];if(z.has(U)){G.push(W);continue}let K=U+1<Y.length?Y[U+1]:"";if(Q==="atx"){let H=/^=+\s*$/.test(K),V=/^-+\s*$/.test(K),A=z.has(U+1);if((H||V)&&!A&&W.trim().length>0&&!/^#{1,6}\s/.test(W)){let _=H?"#":"##";G.push(`${_} ${W.trim()}`),U++,q=!0;continue}}if(Q==="setext"){let H=W.match(/^(#{1,2})\s+(.+?)\s*#*\s*$/);if(H){let V=H[1].length,A=H[2],_=(V===1?"=":"-").repeat(Math.max(3,A.length));G.push(A),G.push(_),q=!0;continue}}G.push(W)}return q?G.join(`
95
- `):$}};var KJ={meta:{docs:"Horizontal rule style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).style||"consistent",Q=null;for(let G=0;G<X.length;G++){let q=X[G].trim();if(q.match(/^([-*_])\1{2,}$/)){let W=q;if(z!=="consistent"&&q!==z)Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"markdown/hr-style",message:`Expected horizontal rule style '${z}'`,severity:"error"});else if(z==="consistent"){if(Q===null)Q=W;else if(Q!==W)Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"markdown/hr-style",message:"Horizontal rule style should be consistent throughout document",severity:"error"})}}}return Z}};var HJ={meta:{docs:"Lines should not exceed a specified length"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=J.options||{},z=Y.line_length||80,Q=Y.code_blocks!==!1,G=Y.tables!==!1,q=Y.headings!==!1,U=!1;for(let W=0;W<X.length;W++){let K=X[W];if(/^(?:`{3,}|~{3,})/.test(K)){U=!U;continue}if(U&&!Q)continue;if(!G&&/\|/.test(K))continue;if(!q&&/^#{1,6}\s/.test(K))continue;if(K.length>z)Z.push({filePath:J.filePath,line:W+1,column:z+1,ruleId:"markdown/line-length",message:`Line length exceeds ${z} characters (${K.length} characters)`,severity:"warning"})}return Z}};var VJ={meta:{docs:"Link fragments should reference valid headings"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),z=new Set;for(let Q=0;Q<X.length;Q++){if(Y.has(Q))continue;let q=X[Q].match(/^#{1,6}\s+(.+?)(?:\s*#+\s*)?$/);if(q){let W=q[1].trim().toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-");z.add(W)}}for(let Q=0;Q<X.length;Q++){if(Y.has(Q))continue;let q=X[Q].matchAll(/\[[^\]]+\]\(#([^)]+)\)/g);for(let U of q){let W=U[1];if(!z.has(W)){let K=U.index+1;Z.push({filePath:J.filePath,line:Q+1,column:K,ruleId:"markdown/link-fragments",message:`Link fragment '#${W}' does not match any heading`,severity:"error"})}}}return Z}};var AJ={meta:{docs:"Link and image reference definitions should be used"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),z=new Map;for(let G=0;G<X.length;G++){if(Y.has(G))continue;let U=X[G].match(/^\[([^\]]+)\]:\s*\S+/);if(U)z.set(U[1].toLowerCase(),G+1)}let Q=new Set;for(let G=0;G<X.length;G++){if(Y.has(G))continue;let q=X[G];if(q.match(/^\[(?:[^\]]+)\]:\s*\S+/))continue;let U=q.matchAll(/\[([^\]]+)\](?:\[([^\]]+)\])?(?!\()/g);for(let W of U){let K=(W[2]||W[1]).toLowerCase();Q.add(K)}}for(let[G,q]of z)if(!Q.has(G))Z.push({filePath:J.filePath,line:q,column:1,ruleId:"markdown/link-image-reference-definitions",message:`Unused reference definition '[${G}]'`,severity:"warning"});return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=new Map;for(let Q=0;Q<J.length;Q++){if(Z.has(Q))continue;let G=J[Q].match(/^\s*\[([^\]]+)\]:\s*\S+/);if(G)X.set(Q,G[1].toLowerCase())}if(X.size===0)return $;let Y=new Set;for(let Q=0;Q<J.length;Q++){if(Z.has(Q))continue;if(X.has(Q))continue;let q=J[Q].matchAll(/\[([^\]]+)\](?:\[([^\]]*)\])?(?!\()/g);for(let U of q){let W=(U[2]&&U[2].length>0?U[2]:U[1]).toLowerCase();Y.add(W)}}let z=new Set;for(let[Q,G]of X)if(!Y.has(G))z.add(Q);if(z.size===0)return $;return J.filter((Q,G)=>!z.has(G)).join(`
95
+ `):$}};var KJ={meta:{docs:"Horizontal rule style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).style||"consistent",Q=null;for(let G=0;G<X.length;G++){let q=X[G].trim();if(q.match(/^([-*_])\1{2,}$/)){let W=q;if(z!=="consistent"&&q!==z)Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"markdown/hr-style",message:`Expected horizontal rule style '${z}'`,severity:"error"});else if(z==="consistent"){if(Q===null)Q=W;else if(Q!==W)Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"markdown/hr-style",message:"Horizontal rule style should be consistent throughout document",severity:"error"})}}}return Z}};var HJ={meta:{docs:"Lines should not exceed a specified length"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=J.options||{},z=Y.line_length||80,Q=Y.code_blocks!==!1,G=Y.tables!==!1,q=Y.headings!==!1,U=!1;for(let W=0;W<X.length;W++){let K=X[W];if(/^(?:`{3,}|~{3,})/.test(K)){U=!U;continue}if(U&&!Q)continue;if(!G&&/\|/.test(K))continue;if(!q&&/^#{1,6}\s/.test(K))continue;if(K.length>z)Z.push({filePath:J.filePath,line:W+1,column:z+1,ruleId:"markdown/line-length",message:`Line length exceeds ${z} characters (${K.length} characters)`,severity:"warning"})}return Z}};function K2($){return $.toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s/g,"-")}var VJ={meta:{docs:"Link fragments should reference valid headings"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),z=new Set;for(let Q=0;Q<X.length;Q++){if(Y.has(Q))continue;let q=X[Q].match(/^#{1,6}\s+(.+?)(?:\s*#+\s*)?$/);if(q){let U=q[1].trim();z.add(K2(U))}}for(let Q=0;Q<X.length;Q++){if(Y.has(Q))continue;let q=X[Q].matchAll(/\[[^\]]+\]\(#([^)]+)\)/g);for(let U of q){let W=U[1];if(!z.has(W)){let K=U.index+1;Z.push({filePath:J.filePath,line:Q+1,column:K,ruleId:"markdown/link-fragments",message:`Link fragment '#${W}' does not match any heading`,severity:"error"})}}}return Z}};var AJ={meta:{docs:"Link and image reference definitions should be used"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),z=new Map;for(let G=0;G<X.length;G++){if(Y.has(G))continue;let U=X[G].match(/^\[([^\]]+)\]:\s*\S+/);if(U)z.set(U[1].toLowerCase(),G+1)}let Q=new Set;for(let G=0;G<X.length;G++){if(Y.has(G))continue;let q=X[G];if(q.match(/^\[(?:[^\]]+)\]:\s*\S+/))continue;let U=q.matchAll(/\[([^\]]+)\](?:\[([^\]]+)\])?(?!\()/g);for(let W of U){let K=(W[2]||W[1]).toLowerCase();Q.add(K)}}for(let[G,q]of z)if(!Q.has(G))Z.push({filePath:J.filePath,line:q,column:1,ruleId:"markdown/link-image-reference-definitions",message:`Unused reference definition '[${G}]'`,severity:"warning"});return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=new Map;for(let Q=0;Q<J.length;Q++){if(Z.has(Q))continue;let G=J[Q].match(/^\s*\[([^\]]+)\]:\s*\S+/);if(G)X.set(Q,G[1].toLowerCase())}if(X.size===0)return $;let Y=new Set;for(let Q=0;Q<J.length;Q++){if(Z.has(Q))continue;if(X.has(Q))continue;let q=J[Q].matchAll(/\[([^\]]+)\](?:\[([^\]]*)\])?(?!\()/g);for(let U of q){let W=(U[2]&&U[2].length>0?U[2]:U[1]).toLowerCase();Y.add(W)}}let z=new Set;for(let[Q,G]of X)if(!Y.has(G))z.add(Q);if(z.size===0)return $;return J.filter((Q,G)=>!z.has(G)).join(`
96
96
  `)}};var _J={meta:{docs:"Link and image style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),Q=(J.options||{}).style||"consistent",G=Q==="consistent"?null:Q;if(G===null){let U=0,W=0,K=!1;for(let H=0;H<X.length;H++){if(Y.has(H))continue;let V=X[H];if(V.includes("<!--"))K=!0;if(V.includes("-->")){K=!1;continue}if(K)continue;if(/^\s*\[(?:[^\]]+)\]:\s*\S+/.test(V))continue;let A=L7(V);U+=(A.match(/\[[^\]]+\]\([^)]+\)/g)||[]).length,W+=(A.match(/\[[^\]]+\]\[(?:[^\]]*)\]/g)||[]).length}G=W>U?"reference":"inline"}let q=!1;for(let U=0;U<X.length;U++){if(Y.has(U))continue;let W=X[U];if(W.includes("<!--"))q=!0;if(W.includes("-->")){q=!1;continue}if(q)continue;if(W.match(/^\[(?:[^\]]+)\]:\s*\S+/))continue;let K=L7(W),H=K.matchAll(/\[[^\]]+\]\([^)]+\)/g);for(let A of H)if(G==="reference")Z.push({filePath:J.filePath,line:U+1,column:A.index+1,ruleId:"markdown/link-image-style",message:Q==="consistent"?"Link style should be consistent throughout document":"Expected reference style link",severity:Q==="consistent"?"warning":"error"});let V=K.matchAll(/\[[^\]]+\]\[(?:[^\]]+)\]/g);for(let A of V)if(G==="inline")Z.push({filePath:J.filePath,line:U+1,column:A.index+1,ruleId:"markdown/link-image-style",message:Q==="consistent"?"Link style should be consistent throughout document":"Expected inline style link",severity:Q==="consistent"?"warning":"error"})}return Z},fix:($,J)=>{let X=(J.options||{}).style||"consistent",Y=$.split(/\r?\n/),z=o(Y),Q=new Map;for(let U=0;U<Y.length;U++){if(z.has(U))continue;let W=Y[U].match(/^\s*\[([^\]]+)\]:\s*(\S+)(?:\s+(?:"([^"]*)"|'([^']*)'|\(([^)]*)\)))?\s*$/);if(W){let K=W[1].toLowerCase(),H=W[2],V=W[3]??W[4]??W[5];if(!Q.has(K))Q.set(K,{url:H,title:V})}}if(Q.size===0)return $;let G=X==="reference"?"reference":"inline";if(X==="consistent"){let U=0,W=0;for(let K=0;K<Y.length;K++){if(z.has(K))continue;let H=Y[K];if(/^\s*\[(?:[^\]]+)\]:\s*\S+/.test(H))continue;let V=L7(H);U+=(V.match(/\[[^\]]+\]\([^)]+\)/g)||[]).length,W+=(V.match(/\[[^\]]+\]\[(?:[^\]]*)\]/g)||[]).length}G=W>U?"reference":"inline"}if(G!=="inline")return $;let q=!1;for(let U=0;U<Y.length;U++){if(z.has(U))continue;let W=Y[U];if(/^\s*\[(?:[^\]]+)\]:\s*\S+/.test(W))continue;let K=W;for(let H=0;H<8;H++){let V=K.replace(/(!?)\[((?:[^[\]]|\[[^\]]*\]\([^)]*\))+)\]\[([^\]]*)\]/g,(A,_,w,F)=>{let M=(F.trim()===""?w:F).toLowerCase(),T=Q.get(M);if(!T)return A;let E=T.title?` "${T.title}"`:"";return`${_}[${w}](${T.url}${E})`});if(V===K)break;K=V}if(K!==W)Y[U]=K,q=!0}return q?Y.join(`
97
97
  `):$}};function L7($){return $.replace(/(`+)([^`]+?)\1/g,(J)=>" ".repeat(J.length))}var FJ={meta:{docs:"List items at the same level should have consistent indentation"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=new Map,z=!1;for(let Q=0;Q<X.length;Q++){let G=X[Q],q=G.match(/^(\s*)(?:[*\-+]|\d+\.)\s+/);if(q){z=!0;let U=q[1].length,W=Math.floor(U/2);if(Y.has(W)){let K=Y.get(W);if(U!==K)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"markdown/list-indent",message:`Inconsistent indentation for list items at the same level. Expected ${K} spaces, found ${U}`,severity:"error"})}else Y.set(W,U)}else if(G.trim().length===0){if(z){let U=X.slice(Q+1).find((W)=>W.trim().length>0);if(U&&!/^(?:\s*)(?:[*\-+]|\d+\.)\s+/.test(U))z=!1,Y.clear()}}}return Z}};var wJ={meta:{docs:"Spaces after list markers should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=J.options||{},z=Y.ul_single||1,Q=Y.ol_single||1;for(let G=0;G<X.length;G++){let q=X[G],U=q.match(/^(\s*)([*\-+])(\s+)/);if(U){let K=U[3].length;if(K!==z)Z.push({filePath:J.filePath,line:G+1,column:U[1].length+2,ruleId:"markdown/list-marker-space",message:`Expected ${z} space${z!==1?"s":""} after list marker, found ${K}`,severity:"error"})}let W=q.match(/^(\s*)(\d+\.)(\s+)/);if(W){let K=W[3].length;if(K!==Q)Z.push({filePath:J.filePath,line:G+1,column:W[1].length+W[2].length+1,ruleId:"markdown/list-marker-space",message:`Expected ${Q} space${Q!==1?"s":""} after list marker, found ${K}`,severity:"error"})}}return Z},fix:($,J)=>{let Z=J.options||{},X=Z.ul_single||1,Y=Z.ol_single||1;return $.split(/\r?\n/).map((G)=>{return G=G.replace(/^(\s*)([*\-+])\s+/,(q,U,W)=>{return`${U}${W}${" ".repeat(X)}`}),G=G.replace(/^(\s*)(\d+\.)\s+/,(q,U,W)=>{return`${U}${W}${" ".repeat(Y)}`}),G}).join(`
98
98
  `)}};var BJ={meta:{docs:"Images should have alternate text"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z];if(/^(?:`{3,}|~{3,})/.test(Q.trim())){Y=!Y;continue}if(Y)continue;let q=Q.replace(/``[^`]+``/g,(U)=>" ".repeat(U.length)).replace(/`[^`]+`/g,(U)=>" ".repeat(U.length)).matchAll(/!\[\s*\]\([^)]+\)/g);for(let U of q){let W=U.index+1;Z.push({filePath:J.filePath,line:z+1,column:W,ruleId:"markdown/no-alt-text",message:"Images should have alternate text (alt text)",severity:"error"})}}return Z}};var MJ={meta:{docs:"Bare URLs should be wrapped in angle brackets"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),z=!1;for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y.has(Q))continue;if(G.includes("<!--"))z=!0;if(G.includes("-->")){z=!1;continue}if(z)continue;if(/^\[(?:[^\]]+)\]:\s*\S+/.test(G))continue;let q=G.replace(/`[^`]+`/g,(K)=>" ".repeat(K.length)),U=/(?<![<(="'])https?:\/\/[^\s<>`)\]"']+(?![>\])"'])/g,W=q.matchAll(U);for(let K of W)Z.push({filePath:J.filePath,line:Q+1,column:K.index+1,ruleId:"markdown/no-bare-urls",message:"Bare URL used. Wrap in angle brackets: <url>",severity:"error"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=!1;return J.map((z,Q)=>{if(Z.has(Q))return z;if(z.includes("<!--"))X=!0;if(z.includes("-->"))return X=!1,z;if(X)return z;if(/^\[(?:[^\]]+)\]:\s*\S+/.test(z))return z;return z.replace(/(?<![<(="'])https?:\/\/[^\s<>`)\]"']+(?![>\])"'])/g,"<$&>")}).join(`
99
99
  `)}};var jJ={meta:{docs:"Blank lines inside blockquotes should use the blockquote symbol"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=!1;for(let Q=0;Q<X.length;Q++){let G=X[Q],q=Q+1<X.length?X[Q+1]:"";if(/^(?:`{3,}|~{3,})/.test(G.trim())){z=!z,Y=!1;continue}if(z)continue;let U=/^\s*>/.test(G),W=G.trim().length===0,K=/^\s*>/.test(q);if(U)Y=!0;else if(W&&Y&&K)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"markdown/no-blanks-blockquote",message:"Blank line inside blockquote should use blockquote symbol (>)",severity:"error"});else if(!U&&!W)Y=!1}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=!1,X=!1,Y=!1;for(let z=0;z<J.length;z++){let Q=J[z],G=z+1<J.length?J[z+1]:"";if(/^(?:`{3,}|~{3,})/.test(Q.trim())){X=!X,Z=!1;continue}if(X)continue;let q=/^\s*>/.test(Q),U=Q.trim().length===0,W=/^\s*>/.test(G);if(q)Z=!0;else if(U&&Z&&W){let K=G.match(/^(\s*)>/),H=K?`${K[1]}>`:">";J[z]=H,Y=!0}else if(!q&&!U)Z=!1}return Y?J.join(`
100
- `):$}};var NJ={meta:{docs:"Multiple headings should not have the same content"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=Array.from({length:7},()=>new Map);for(let Q=0;Q<X.length;Q++){let G=X[Q];if(/^(?:`{3,}|~{3,})/.test(G.trim())){Y=!Y;continue}if(Y)continue;if(/^\s*\[Compare changes\]\(/.test(G)){for(let H=3;H<=6;H++)z[H].clear();continue}let q=null,U=0,W=G.match(/^(#{1,6})\s+(.+?)(?:\s*#+\s*)?$/);if(W)U=W[1].length,q=W[2].trim();if(!q){let H=Q+1<X.length?X[Q+1]:"";if(/^(?:=+)\s*$/.test(H)&&G.trim().length>0)U=1,q=G.trim();else if(/^(?:-+)\s*$/.test(H)&&G.trim().length>0)U=2,q=G.trim()}if(!q||U===0)continue;for(let H=U+1;H<=6;H++)z[H].clear();let K=z[U];if(K.has(q))Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"markdown/no-duplicate-heading",message:`Duplicate heading "${q}" (first occurrence on line ${K.get(q)})`,severity:"error"});else K.set(q,Q+1)}return Z}};var K2=/[.!?:;,]\s*$/;function TJ($,J,Z){let X=$.match(/^\*\*([^*]+)\*\*\s*$/)||$.match(/^__([^_]+)__\s*$/),Y=$.match(/^\*([^*]+)\*\s*$/)||$.match(/^_([^_]+)_\s*$/),z=X||Y;if(!z)return null;if(J.trim().length!==0||Z.trim().length!==0)return null;let Q=z[1];if(K2.test(Q))return null;if(Q.trim().split(/\s+/).length>=7)return null;return Q}var EJ={meta:{docs:"Emphasis should not be used for headings"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let Q=X[z],G=z>0?X[z-1]:"",q=z+1<X.length?X[z+1]:"";if(TJ(Q,G,q)===null)continue;Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"markdown/no-emphasis-as-heading",message:"Emphasis used instead of a heading",severity:"warning"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=2,Y=!1;for(let z=0;z<J.length;z++){if(Z.has(z))continue;let Q=J[z],G=Q.match(/^(#{1,6})\s/);if(G){X=G[1].length;continue}let q=z>0?J[z-1]:"",U=z+1<J.length?J[z+1]:"",W=TJ(Q,q,U);if(W===null)continue;let K=Math.min(6,Math.max(2,X+1));J[z]=`${"#".repeat(K)} ${W.trim()}`,Y=!0}return Y?J.join(`
100
+ `):$}};var NJ={meta:{docs:"Multiple headings should not have the same content"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=Array.from({length:7},()=>new Map);for(let Q=0;Q<X.length;Q++){let G=X[Q];if(/^(?:`{3,}|~{3,})/.test(G.trim())){Y=!Y;continue}if(Y)continue;if(/^\s*\[Compare changes\]\(/.test(G)){for(let H=3;H<=6;H++)z[H].clear();continue}let q=null,U=0,W=G.match(/^(#{1,6})\s+(.+?)(?:\s*#+\s*)?$/);if(W)U=W[1].length,q=W[2].trim();if(!q){let H=Q+1<X.length?X[Q+1]:"";if(/^(?:=+)\s*$/.test(H)&&G.trim().length>0)U=1,q=G.trim();else if(/^(?:-+)\s*$/.test(H)&&G.trim().length>0)U=2,q=G.trim()}if(!q||U===0)continue;for(let H=U+1;H<=6;H++)z[H].clear();let K=z[U];if(K.has(q))Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"markdown/no-duplicate-heading",message:`Duplicate heading "${q}" (first occurrence on line ${K.get(q)})`,severity:"error"});else K.set(q,Q+1)}return Z}};var H2=/[.!?:;,]\s*$/;function TJ($,J,Z){let X=$.match(/^\*\*([^*]+)\*\*\s*$/)||$.match(/^__([^_]+)__\s*$/),Y=$.match(/^\*([^*]+)\*\s*$/)||$.match(/^_([^_]+)_\s*$/),z=X||Y;if(!z)return null;if(J.trim().length!==0||Z.trim().length!==0)return null;let Q=z[1];if(H2.test(Q))return null;if(Q.trim().split(/\s+/).length>=7)return null;return Q}var EJ={meta:{docs:"Emphasis should not be used for headings"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let Q=X[z],G=z>0?X[z-1]:"",q=z+1<X.length?X[z+1]:"";if(TJ(Q,G,q)===null)continue;Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"markdown/no-emphasis-as-heading",message:"Emphasis used instead of a heading",severity:"warning"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=2,Y=!1;for(let z=0;z<J.length;z++){if(Z.has(z))continue;let Q=J[z],G=Q.match(/^(#{1,6})\s/);if(G){X=G[1].length;continue}let q=z>0?J[z-1]:"",U=z+1<J.length?J[z+1]:"",W=TJ(Q,q,U);if(W===null)continue;let K=Math.min(6,Math.max(2,X+1));J[z]=`${"#".repeat(K)} ${W.trim()}`,Y=!0}return Y?J.join(`
101
101
  `):$}};var DJ={meta:{docs:"Links should not be empty"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z];if(/^(?:`{3,}|~{3,})/.test(Q.trim())){Y=!Y;continue}if(Y)continue;let G=Q.replace(/`[^`]+`/g,(W)=>"x".repeat(W.length)),q=G.matchAll(/\[[^\]]+\]\(\s*\)/g);for(let W of q){let K=W.index+1;Z.push({filePath:J.filePath,line:z+1,column:K,ruleId:"markdown/no-empty-links",message:"Empty link URL",severity:"error"})}let U=G.matchAll(/\[\s*\]\([^)]+\)/g);for(let W of U){let K=W.index+1;Z.push({filePath:J.filePath,line:z+1,column:K,ruleId:"markdown/no-empty-links",message:"Empty link text",severity:"error"})}}return Z}};var RJ={meta:{docs:"Spaces should be used instead of hard tabs"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z];if(/^(?:`{3,}|~{3,})/.test(Q.trim())){Y=!Y;continue}if(Y)continue;let G=Q.indexOf("\t");if(G!==-1)Z.push({filePath:J.filePath,line:z+1,column:G+1,ruleId:"markdown/no-hard-tabs",message:"Hard tabs should not be used",severity:"error"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=!1;return J.map((Y)=>{if(/^(?:`{3,}|~{3,})/.test(Y.trim()))return Z=!Z,Y;if(Z)return Y;return Y.replace(/\t/g," ")}).join(`
102
102
  `)}};var OJ={meta:{docs:"Inline HTML should not be used"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).allowed_elements||[],Q=!1;for(let G=0;G<X.length;G++){let q=X[G];if(/^(?:`{3,}|~{3,})/.test(q.trim())){Q=!Q;continue}if(Q)continue;let U=q;U=U.replace(/``[^`]+``/g,(K)=>" ".repeat(K.length)),U=U.replace(/`[^`]+`/g,(K)=>" ".repeat(K.length));let W=U.matchAll(/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi);for(let K of W){let H=K[1].toLowerCase(),V=U.slice(K.index+1+H.length);if(V.startsWith("://")||H==="mailto"&&V.startsWith(":"))continue;if(!z.includes(H)){let A=K.index+1;Z.push({filePath:J.filePath,line:G+1,column:A,ruleId:"markdown/no-inline-html",message:`Inline HTML element '<${H}>' should not be used`,severity:"warning"})}}}return Z}};var LJ={meta:{docs:"ATX style headings must have a space after the hash"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let G=X[z].match(/^(#{1,6})([^\s#])/);if(G)Z.push({filePath:J.filePath,line:z+1,column:G[1].length+1,ruleId:"markdown/no-missing-space-atx",message:"No space after hash on atx style heading",severity:"error"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J);return J.map((Y,z)=>{if(Z.has(z))return Y;return Y.replace(/^(#{1,6})([^\s#])/,"$1 $2")}).join(`
103
103
  `)}};var PJ={meta:{docs:"Closed ATX style headings must have spaces inside the hashes"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let Q=X[z],G=Q.match(/^(#{1,6})\s+(.+?)(#{1,6})\s*$/);if(G){let U=G[1],W=G[2],K=G[3];if(!W.endsWith(" ")){let H=U.length+1+W.length;Z.push({filePath:J.filePath,line:z+1,column:H,ruleId:"markdown/no-missing-space-closed-atx",message:"No space inside hashes on closed atx style heading",severity:"error"})}}let q=Q.match(/^(#{1,6})(\S.+?#{1,6})\s*$/);if(q)Z.push({filePath:J.filePath,line:z+1,column:q[1].length+1,ruleId:"markdown/no-missing-space-closed-atx",message:"No space inside hashes on closed atx style heading",severity:"error"})}return Z}};var CJ={meta:{docs:"Multiple consecutive blank lines should not be used"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=J.options||{},z=Y.maximum!==void 0?Y.maximum:1,Q=0;for(let G=0;G<X.length;G++)if(X[G].trim().length===0){if(Q++,Q>z)Z.push({filePath:J.filePath,line:G+1,column:1,ruleId:"markdown/no-multiple-blanks",message:`Multiple consecutive blank lines (max ${z})`,severity:"error"})}else Q=0;return Z},fix:($,J)=>{let Z=J.options||{},X=Z.maximum!==void 0?Z.maximum:1,Y=$.split(/\r?\n/),z=[],Q=0;for(let G of Y)if(G.trim().length===0){if(Q++,Q<=X)z.push(G)}else Q=0,z.push(G);return z.join(`
104
104
  `)}};var IJ={meta:{docs:"ATX style headings should have only one space after the hash"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let G=X[z].match(/^(#{1,6})\s{2,}/);if(G)Z.push({filePath:J.filePath,line:z+1,column:G[1].length+1,ruleId:"markdown/no-multiple-space-atx",message:"Multiple spaces after hash on atx style heading",severity:"error"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J);return J.map((Y,z)=>{if(Z.has(z))return Y;return Y.replace(/^(#{1,6})\s{2,}/,"$1 ")}).join(`
105
105
  `)}};var SJ={meta:{docs:"Blockquote symbols should be followed by a single space"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let G=X[z].match(/^(\s*)(>+)\s{2,}/);if(G){let q=G[1].length+G[2].length+1;Z.push({filePath:J.filePath,line:z+1,column:q,ruleId:"markdown/no-multiple-space-blockquote",message:"Multiple spaces after blockquote symbol",severity:"error"})}}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J);return J.map((Y,z)=>{if(Z.has(z))return Y;return Y.replace(/^(\s*>+)\s{2,}/,"$1 ")}).join(`
106
106
  `)}};var vJ={meta:{docs:"Closed ATX style headings should have only one space inside the hashes"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let Q=X[z],G=Q.match(/^(#{1,6})\s{2,}(?:\S.*?|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])#{1,6}\s*$/);if(G)Z.push({filePath:J.filePath,line:z+1,column:G[1].length+1,ruleId:"markdown/no-multiple-space-closed-atx",message:"Multiple spaces inside hashes on closed atx style heading",severity:"error"});let q=Q.match(/^#{1,6}\s+(?:\S.*?|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])\s{2,}(#{1,6})\s*$/);if(q){let U=Q.lastIndexOf(q[1])-1;Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,U),ruleId:"markdown/no-multiple-space-closed-atx",message:"Multiple spaces inside hashes on closed atx style heading",severity:"error"})}}return Z}};var yJ={meta:{docs:"Link syntax should not be reversed"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let G=X[z].matchAll(/\(([^)]+)\)\[(?:[^\]]+)\]/g);for(let q of G){let U=q.index+1;Z.push({filePath:J.filePath,line:z+1,column:U,ruleId:"markdown/no-reversed-links",message:"Reversed link syntax: should be [text](url) not (text)[url]",severity:"error"})}}return Z}};var bJ={meta:{docs:"Code span elements should not have spaces inside the backticks"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){let Q=X[z];if(Y.has(z))continue;let G=/(`+)([\s\S]*?)\1/g;for(let q of Q.matchAll(G)){let U=q[2];if(U.startsWith(" ")&&U.endsWith(" ")&&U.trim().length>0)Z.push({filePath:J.filePath,line:z+1,column:q.index+1,ruleId:"markdown/no-space-in-code",message:"Spaces inside code span elements",severity:"error"})}}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=[];for(let Y=0;Y<J.length;Y++){let z=J[Y];if(Z.has(Y)){X.push(z);continue}X.push(z.replace(/(`+)([\s\S]*?)\1/g,(Q,G,q)=>{if(q.startsWith(" ")&&q.endsWith(" ")&&q.trim().length>0)return`${G}${q.trim()}${G}`;return Q}))}return X.join(`
107
- `)}};var H2=[/(?<![A-Za-z0-9])\*\*\s+[^*]+?\*\*(?![A-Za-z0-9])/g,/(?<![A-Za-z0-9])\*\*[^*]+?\s+\*\*(?![A-Za-z0-9])/g,/(?<![A-Za-z0-9])__\s+[^_]+?__(?![A-Za-z0-9])/g,/(?<![A-Za-z0-9])__[^_]+?\s+__(?![A-Za-z0-9])/g],kJ={meta:{docs:"Emphasis markers should not have spaces inside them"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){let Q=X[z];if(Y.has(z))continue;let G=Q.replace(/`[^`]+`/g,(q)=>"\x01".repeat(q.length));for(let q of H2)for(let U of G.matchAll(q))Z.push({filePath:J.filePath,line:z+1,column:U.index+1,ruleId:"markdown/no-space-in-emphasis",message:"Spaces inside emphasis markers",severity:"error"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=[];for(let Y=0;Y<J.length;Y++){let z=J[Y];if(Z.has(Y)){X.push(z);continue}let Q=w1(z,(G)=>{let q=G;return q=q.replace(/(?<![A-Za-z0-9])(\*\*)\s+([^*]+?)\*\*(?![A-Za-z0-9])/g,"$1$2**"),q=q.replace(/(?<![A-Za-z0-9])(\*\*)([^*]+?)\s+\*\*(?![A-Za-z0-9])/g,"$1$2**"),q=q.replace(/(?<![A-Za-z0-9])(__)\s+([^_]+?)__(?![A-Za-z0-9])/g,"$1$2__"),q=q.replace(/(?<![A-Za-z0-9])(__)([^_]+?)\s+__(?![A-Za-z0-9])/g,"$1$2__"),q});X.push(Q)}return X.join(`
107
+ `)}};var V2=[/(?<![A-Za-z0-9])\*\*\s+[^*]+?\*\*(?![A-Za-z0-9])/g,/(?<![A-Za-z0-9])\*\*[^*]+?\s+\*\*(?![A-Za-z0-9])/g,/(?<![A-Za-z0-9])__\s+[^_]+?__(?![A-Za-z0-9])/g,/(?<![A-Za-z0-9])__[^_]+?\s+__(?![A-Za-z0-9])/g],kJ={meta:{docs:"Emphasis markers should not have spaces inside them"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){let Q=X[z];if(Y.has(z))continue;let G=Q.replace(/`[^`]+`/g,(q)=>"\x01".repeat(q.length));for(let q of V2)for(let U of G.matchAll(q))Z.push({filePath:J.filePath,line:z+1,column:U.index+1,ruleId:"markdown/no-space-in-emphasis",message:"Spaces inside emphasis markers",severity:"error"})}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=o(J),X=[];for(let Y=0;Y<J.length;Y++){let z=J[Y];if(Z.has(Y)){X.push(z);continue}let Q=w1(z,(G)=>{let q=G;return q=q.replace(/(?<![A-Za-z0-9])(\*\*)\s+([^*]+?)\*\*(?![A-Za-z0-9])/g,"$1$2**"),q=q.replace(/(?<![A-Za-z0-9])(\*\*)([^*]+?)\s+\*\*(?![A-Za-z0-9])/g,"$1$2**"),q=q.replace(/(?<![A-Za-z0-9])(__)\s+([^_]+?)__(?![A-Za-z0-9])/g,"$1$2__"),q=q.replace(/(?<![A-Za-z0-9])(__)([^_]+?)\s+__(?![A-Za-z0-9])/g,"$1$2__"),q});X.push(Q)}return X.join(`
108
108
  `)}};var fJ={meta:{docs:"Link text should not have leading or trailing spaces"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X);for(let z=0;z<X.length;z++){if(Y.has(z))continue;let G=X[z].matchAll(/\[(\s+(?:\S.*?|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])|\s*(?:\S.*?|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])\s+)\]\([^)]+\)/g);for(let q of G){let U=q[1];if(U.startsWith(" ")||U.endsWith(" ")){let W=q.index+1;Z.push({filePath:J.filePath,line:z+1,column:W,ruleId:"markdown/no-space-in-links",message:"Spaces inside link text",severity:"error"})}}}return Z}};var gJ={meta:{docs:"Headings should not end with punctuation"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).punctuation||".,;:!?",Q=!1;for(let G=0;G<X.length;G++){let q=X[G];if(/^(?:`{3,}|~{3,})/.test(q.trim())){Q=!Q;continue}if(Q)continue;let U=q.match(/^#{1,6}\s+(.+?)(?:\s*#+\s*)?$/);if(U){let K=U[1].trim(),H=K[K.length-1];if(H&&z.includes(H))Z.push({filePath:J.filePath,line:G+1,column:q.indexOf(K)+K.length,ruleId:"markdown/no-trailing-punctuation",message:`Trailing punctuation in heading: '${H}'`,severity:"error"})}let W=G+1<X.length?X[G+1]:"";if(/^(?:=+|-+)\s*$/.test(W)&&q.trim().length>0){let K=q.trim(),H=K[K.length-1];if(H&&z.includes(H))Z.push({filePath:J.filePath,line:G+1,column:q.indexOf(K)+K.length,ruleId:"markdown/no-trailing-punctuation",message:`Trailing punctuation in heading: '${H}'`,severity:"error"})}}return Z},fix:($,J)=>{let X=(J.options||{}).punctuation||".,;:!?",Y=new RegExp(`[${X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}]+$`),z=$.split(/\r?\n/),Q=!1;return z.map((q,U)=>{if(/^(?:`{3,}|~{3,})/.test(q.trim()))return Q=!Q,q;if(Q)return q;let W=q.match(/^(#{1,6}\s+)(.+?)(\s*#+\s*)?$/);if(W){let H=W[1],V=W[2],A=W[3]||"",_=V.replace(Y,"");return`${H}${_}${A}`}let K=U+1<z.length?z[U+1]:"";if(/^(?:=+|-+)\s*$/.test(K)&&q.trim().length>0)return q.replace(Y,"");return q}).join(`
109
109
  `)}};var pJ={meta:{docs:"Lines should not end with trailing spaces"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/\s+$/);if(Q){let G=J.options||{},q=G.br_spaces!==void 0?G.br_spaces:2;if(q===0||Q[0].length!==q)Z.push({filePath:J.filePath,line:Y+1,column:z.length-Q[0].length+1,ruleId:"markdown/no-trailing-spaces",message:`Trailing spaces found (${Q[0].length} space${Q[0].length!==1?"s":""})`,severity:"error"})}}return Z},fix:($,J)=>{let Z=$.split(/\r?\n/),X=J.options||{},Y=X.br_spaces!==void 0?X.br_spaces:2;return Z.map((Q)=>{let G=Q.match(/\s+$/);if(G){if(Y>0&&G[0].length===Y)return Q;return Q.replace(/\s+$/,"")}return Q}).join(`
110
110
  `)}};var xJ={meta:{docs:"Ordered list item prefix should follow specified style"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).style||"one_or_ordered",Q=1;for(let G=0;G<X.length;G++){let q=X[G],U=q.match(/^(\s*)(\d+)\.\s+/);if(U){let W=Number.parseInt(U[2],10);if(z==="one"&&W!==1)Z.push({filePath:J.filePath,line:G+1,column:U[1].length+1,ruleId:"markdown/ol-prefix",message:`Ordered list item prefix should be '1.', found '${W}.'`,severity:"error"});else if(z==="ordered"&&W!==Q)Z.push({filePath:J.filePath,line:G+1,column:U[1].length+1,ruleId:"markdown/ol-prefix",message:`Ordered list item prefix should be '${Q}.', found '${W}.'`,severity:"error"});Q++}else if(q.trim().length===0)Q=1}return Z},fix:($,J)=>{let X=(J.options||{}).style||"one_or_ordered",Y=$.split(/\r?\n/),z=[],Q=1;for(let G of Y){let q=G.match(/^(\s*)(\d+)(\.\s+)/);if(q){let U=q[1],W=q[3];if(X==="one")z.push(G.replace(/^(\s*)\d+(\.\s+)/,`${U}1${W}`));else if(X==="ordered")z.push(G.replace(/^(\s*)\d+(\.\s+)/,`${U}${Q}${W}`)),Q++;else z.push(G),Q++}else if(z.push(G),G.trim().length===0)Q=1}return z.join(`
@@ -117,69 +117,69 @@ ${U.slice(m.from+1,m.to+1).join(`
117
117
  \r
118
118
  `)){let X=$.split(/\r?\n/);Z.push({filePath:J.filePath,line:X.length,column:1,ruleId:"markdown/single-trailing-newline",message:"File should end with a single newline character (not multiple)",severity:"error"})}return Z},fix:($)=>{return`${$.replace(/[\r\n]+$/,"")}
119
119
  `}};var cJ={meta:{docs:"Strong style should be consistent (asterisk or underscore)"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),Q=(J.options||{}).style||"consistent",G=null;for(let q=0;q<X.length;q++){if(Y.has(q))continue;let U=B1(X[q]),W=U.matchAll(/\*\*([^*]+)\*\*/g);for(let H of W)if(Q==="underscore")Z.push({filePath:J.filePath,line:q+1,column:H.index+1,ruleId:"markdown/strong-style",message:"Expected underscore (__) for strong",severity:"error"});else if(Q==="consistent"){if(G===null)G="asterisk";else if(G==="underscore")Z.push({filePath:J.filePath,line:q+1,column:H.index+1,ruleId:"markdown/strong-style",message:"Strong style should be consistent throughout document",severity:"error"})}let K=U.matchAll(/__([^_]+)__/g);for(let H of K)if(Q==="asterisk")Z.push({filePath:J.filePath,line:q+1,column:H.index+1,ruleId:"markdown/strong-style",message:"Expected asterisk (**) for strong",severity:"error"});else if(Q==="consistent"){if(G===null)G="underscore";else if(G==="asterisk")Z.push({filePath:J.filePath,line:q+1,column:H.index+1,ruleId:"markdown/strong-style",message:"Strong style should be consistent throughout document",severity:"error"})}}return Z},fix:($,J)=>{let X=(J.options||{}).style||"consistent",Y=$.split(/\r?\n/),z=o(Y),Q="asterisk";if(X==="asterisk")Q="asterisk";else if(X==="underscore")Q="underscore";else if(X==="consistent"){let q=null,U=null;for(let K=0;K<Y.length;K++){if(z.has(K))continue;let H=B1(Y[K]);if(q===null){let V=H.match(/\*\*([^*]+)\*\*/);if(V)q={line:K,col:V.index}}if(U===null){let V=H.match(/__([^_]+)__/);if(V)U={line:K,col:V.index}}if(q&&U)break}if(q&&(!U||((K,H)=>K.line!==H.line?K.line-H.line:K.col-H.col)(q,U)<0))Q="asterisk";else if(U)Q="underscore"}let G=!1;for(let q=0;q<Y.length;q++){if(z.has(q))continue;let U=Y[q],W=w1(U,(K)=>Q==="asterisk"?K.replace(/__([^_]+)__/g,"**$1**"):K.replace(/\*\*([^*]+)\*\*/g,"__$1__"));if(W!==U)Y[q]=W,G=!0}return G?Y.join(`
120
- `):$}};var rJ={meta:{docs:"Table rows should have consistent column counts"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=-1,Q=!1,G=X1(X);for(let q=0;q<X.length;q++){let U=X[q];if(/^(?:`{3,}|~{3,})/.test(U.trim())){if(Q=!Q,Y)Y=!1,z=-1;continue}if(Q)continue;let W=G.has(q)&&/\|/.test(U)&&U.trim().length>0;if(W){let K=V2(U);if(!Y)Y=!0,z=K;else if(K!==z)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-column-count",message:`Table row has ${K} column(s), expected ${z}`,severity:"error"})}else if(U.trim().length===0||!W){if(Y)Y=!1,z=-1}}return Z}};function V2($){let J=$.trim();if(J.startsWith("|"))J=J.slice(1);if(J.endsWith("|")&&!J.endsWith("\\|"))J=J.slice(0,-1);if(J==="")return 0;let Z=1,X=!1,Y=0,z=0;while(z<J.length){let Q=J[z];if(Q==="\\"&&J[z+1]==="|"){z+=2;continue}if(Q==="`"){let G=0;while(J[z+G]==="`")G++;if(!X)X=!0,Y=G;else if(G===Y)X=!1,Y=0;z+=G;continue}if(!X&&Q==="|")Z++;z++}return Z}var lJ={meta:{docs:"Table columns should have consistent alignment"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(/[-:]/.test(z)&&/\|/.test(z)){if(z.match(/^[|\s:.-]+$/)){let G=z.split("|").filter((q)=>q.trim().length>0);for(let q of G){let U=q.trim();if(!/^:?-+:?$/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:z.indexOf(q)+1,ruleId:"markdown/table-column-style",message:"Invalid table column separator",severity:"error"})}}}}return Z}};var aJ={meta:{docs:"Table pipe style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).style||"leading_and_trailing",Q=!1,G=X1(X);for(let q=0;q<X.length;q++){let U=X[q];if(/^(?:`{3,}|~{3,})/.test(U.trim())){Q=!Q;continue}if(Q)continue;if(G.has(q)&&/\|/.test(U)&&U.trim().length>0){let W=U.trim().startsWith("|"),K=U.trim().endsWith("|");if(z==="leading_and_trailing"){if(!W||!K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should have leading and trailing pipes",severity:"error"})}else if(z==="leading_only"){if(!W||K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should have leading pipe only",severity:"error"})}else if(z==="trailing_only"){if(W||!K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should have trailing pipe only",severity:"error"})}else if(z==="no_leading_or_trailing"){if(W||K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should not have leading or trailing pipes",severity:"error"})}}}return Z}};var sJ={meta:{docs:"Unordered list indentation should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).indent||2,Q=!1,G=[];for(let q=0;q<X.length;q++){let U=X[q];if(/^(?:`{3,}|~{3,})/.test(U.trim())){Q=!Q;continue}if(Q)continue;if(U.trim()==="")continue;let W=U.match(/^(\s*)([*\-+])(\s+)/),K=U.match(/^(\s*)(\d+[.)])(\s+)/);if(!W&&!K){let M=U.match(/^(\s*)/)?.[1].length||0;while(G.length>0&&G[G.length-1].contentCol>M)G.pop();continue}let H=W||K,V=H[1].length,A=H[2],_=H[3],w=V+A.length+_.length,F=W?"ul":"ol";while(G.length>0&&V<G[G.length-1].contentCol)G.pop();if(F==="ul"){let M=G.length>0?G[G.length-1]:null;if(!M){if(V!==0&&V%z!==0)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/ul-indent",message:`Unordered list indentation should be ${z} spaces per level. Found ${V} spaces`,severity:"error"})}else if(M.type==="ul"){let T=M.contentCol,E=M.indent+z;if(V!==T&&V!==E)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/ul-indent",message:`Unordered list indentation should be ${z} spaces per level. Found ${V} spaces`,severity:"error"})}}G.push({indent:V,contentCol:w,type:F})}return Z}};var nJ={meta:{docs:"Unordered list style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),Q=(J.options||{}).style||"consistent",G=null;for(let q=0;q<X.length;q++){let U=X[q];if(Y.has(q))continue;let W=U.match(/^(\s*)([*\-+])\s+/);if(W){let K=W[2];if(Q==="asterisk"&&K!=="*")Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Expected asterisk (*) for unordered list, found '${K}'`,severity:"error"});else if(Q==="dash"&&K!=="-")Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Expected dash (-) for unordered list, found '${K}'`,severity:"error"});else if(Q==="plus"&&K!=="+")Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Expected plus (+) for unordered list, found '${K}'`,severity:"error"});else if(Q==="consistent"){if(G===null)G=K;else if(G!==K)Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Unordered list style should be consistent throughout document. Expected '${G}', found '${K}'`,severity:"error"})}}}return Z},fix:($,J)=>{let X=(J.options||{}).style||"consistent",Y=$.split(/\r?\n/),z=o(Y),Q="*";if(X==="asterisk")Q="*";else if(X==="dash")Q="-";else if(X==="plus")Q="+";else if(X==="consistent")for(let q=0;q<Y.length;q++){if(z.has(q))continue;let U=Y[q].match(/^(\s*)([*\-+])\s+/);if(U){Q=U[2];break}}return Y.map((q,U)=>{if(z.has(U))return q;return q.replace(/^(\s*)([*\-+])(\s+)/,`$1${Q}$3`)}).join(`
121
- `)}};function A2($){let J=$.split(/\r?\n/);if(J[0]?.trim()!=="---")return{text:$,frontmatter:null,frontmatterEndLine:0};for(let Z=1;Z<J.length;Z++)if(J[Z].trim()==="---"){let X=J.slice(0,Z+1);return{text:[...X.map(()=>""),...J.slice(Z+1)].join(`
122
- `),frontmatter:X,frontmatterEndLine:Z+1}}return{text:$,frontmatter:null,frontmatterEndLine:0}}function _2($){let J=$.split(/\r?\n/);if(J[0]?.trim()!=="---")return{header:null,body:$};for(let Z=1;Z<J.length;Z++)if(J[Z].trim()==="---")return{header:J.slice(0,Z+1).join(`
120
+ `):$}};var rJ={meta:{docs:"Table rows should have consistent column counts"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=-1,Q=!1,G=X1(X);for(let q=0;q<X.length;q++){let U=X[q];if(/^(?:`{3,}|~{3,})/.test(U.trim())){if(Q=!Q,Y)Y=!1,z=-1;continue}if(Q)continue;let W=G.has(q)&&/\|/.test(U)&&U.trim().length>0;if(W){let K=A2(U);if(!Y)Y=!0,z=K;else if(K!==z)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-column-count",message:`Table row has ${K} column(s), expected ${z}`,severity:"error"})}else if(U.trim().length===0||!W){if(Y)Y=!1,z=-1}}return Z}};function A2($){let J=$.trim();if(J.startsWith("|"))J=J.slice(1);if(J.endsWith("|")&&!J.endsWith("\\|"))J=J.slice(0,-1);if(J==="")return 0;let Z=1,X=!1,Y=0,z=0;while(z<J.length){let Q=J[z];if(Q==="\\"&&J[z+1]==="|"){z+=2;continue}if(Q==="`"){let G=0;while(J[z+G]==="`")G++;if(!X)X=!0,Y=G;else if(G===Y)X=!1,Y=0;z+=G;continue}if(!X&&Q==="|")Z++;z++}return Z}var lJ={meta:{docs:"Table columns should have consistent alignment"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(/[-:]/.test(z)&&/\|/.test(z)){if(z.match(/^[|\s:.-]+$/)){let G=z.split("|").filter((q)=>q.trim().length>0);for(let q of G){let U=q.trim();if(!/^:?-+:?$/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:z.indexOf(q)+1,ruleId:"markdown/table-column-style",message:"Invalid table column separator",severity:"error"})}}}}return Z}};var aJ={meta:{docs:"Table pipe style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).style||"leading_and_trailing",Q=!1,G=X1(X);for(let q=0;q<X.length;q++){let U=X[q];if(/^(?:`{3,}|~{3,})/.test(U.trim())){Q=!Q;continue}if(Q)continue;if(G.has(q)&&/\|/.test(U)&&U.trim().length>0){let W=U.trim().startsWith("|"),K=U.trim().endsWith("|");if(z==="leading_and_trailing"){if(!W||!K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should have leading and trailing pipes",severity:"error"})}else if(z==="leading_only"){if(!W||K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should have leading pipe only",severity:"error"})}else if(z==="trailing_only"){if(W||!K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should have trailing pipe only",severity:"error"})}else if(z==="no_leading_or_trailing"){if(W||K)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/table-pipe-style",message:"Table rows should not have leading or trailing pipes",severity:"error"})}}}return Z}};var sJ={meta:{docs:"Unordered list indentation should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),z=(J.options||{}).indent||2,Q=!1,G=[];for(let q=0;q<X.length;q++){let U=X[q];if(/^(?:`{3,}|~{3,})/.test(U.trim())){Q=!Q;continue}if(Q)continue;if(U.trim()==="")continue;let W=U.match(/^(\s*)([*\-+])(\s+)/),K=U.match(/^(\s*)(\d+[.)])(\s+)/);if(!W&&!K){let M=U.match(/^(\s*)/)?.[1].length||0;while(G.length>0&&G[G.length-1].contentCol>M)G.pop();continue}let H=W||K,V=H[1].length,A=H[2],_=H[3],w=V+A.length+_.length,F=W?"ul":"ol";while(G.length>0&&V<G[G.length-1].contentCol)G.pop();if(F==="ul"){let M=G.length>0?G[G.length-1]:null;if(!M){if(V!==0&&V%z!==0)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/ul-indent",message:`Unordered list indentation should be ${z} spaces per level. Found ${V} spaces`,severity:"error"})}else if(M.type==="ul"){let T=M.contentCol,E=M.indent+z;if(V!==T&&V!==E)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"markdown/ul-indent",message:`Unordered list indentation should be ${z} spaces per level. Found ${V} spaces`,severity:"error"})}}G.push({indent:V,contentCol:w,type:F})}return Z}};var nJ={meta:{docs:"Unordered list style should be consistent"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=o(X),Q=(J.options||{}).style||"consistent",G=null;for(let q=0;q<X.length;q++){let U=X[q];if(Y.has(q))continue;let W=U.match(/^(\s*)([*\-+])\s+/);if(W){let K=W[2];if(Q==="asterisk"&&K!=="*")Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Expected asterisk (*) for unordered list, found '${K}'`,severity:"error"});else if(Q==="dash"&&K!=="-")Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Expected dash (-) for unordered list, found '${K}'`,severity:"error"});else if(Q==="plus"&&K!=="+")Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Expected plus (+) for unordered list, found '${K}'`,severity:"error"});else if(Q==="consistent"){if(G===null)G=K;else if(G!==K)Z.push({filePath:J.filePath,line:q+1,column:W[1].length+1,ruleId:"markdown/ul-style",message:`Unordered list style should be consistent throughout document. Expected '${G}', found '${K}'`,severity:"error"})}}}return Z},fix:($,J)=>{let X=(J.options||{}).style||"consistent",Y=$.split(/\r?\n/),z=o(Y),Q="*";if(X==="asterisk")Q="*";else if(X==="dash")Q="-";else if(X==="plus")Q="+";else if(X==="consistent")for(let q=0;q<Y.length;q++){if(z.has(q))continue;let U=Y[q].match(/^(\s*)([*\-+])\s+/);if(U){Q=U[2];break}}return Y.map((q,U)=>{if(z.has(U))return q;return q.replace(/^(\s*)([*\-+])(\s+)/,`$1${Q}$3`)}).join(`
121
+ `)}};function _2($){let J=$.split(/\r?\n/);if(J[0]?.trim()!=="---")return{text:$,frontmatter:null,frontmatterEndLine:0};for(let Z=1;Z<J.length;Z++)if(J[Z].trim()==="---"){let X=J.slice(0,Z+1);return{text:[...X.map(()=>""),...J.slice(Z+1)].join(`
122
+ `),frontmatter:X,frontmatterEndLine:Z+1}}return{text:$,frontmatter:null,frontmatterEndLine:0}}function F2($){let J=$.split(/\r?\n/);if(J[0]?.trim()!=="---")return{header:null,body:$};for(let Z=1;Z<J.length;Z++)if(J[Z].trim()==="---")return{header:J.slice(0,Z+1).join(`
123
123
  `),body:J.slice(Z+1).join(`
124
- `)};return{header:null,body:$}}function F2($){return{meta:$.meta,check:(J,Z)=>Z.filePath.endsWith(".md")?$.check(J,Z):[],fix:$.fix?(J,Z)=>Z.filePath.endsWith(".md")?$.fix(J,Z):J:void 0}}function a($){return{meta:$.meta,check:(J,Z)=>{if(!Z.filePath.endsWith(".md"))return[];let{text:X,frontmatterEndLine:Y}=A2(J),z=$.check(X,Z);if(Y>0)return z.filter((Q)=>Q.line>Y+1);return z},fix:$.fix?(J,Z)=>{if(!Z.filePath.endsWith(".md"))return J;let{header:X,body:Y}=_2(J);if(X===null)return $.fix(J,Z);let z=$.fix(Y,Z);if(z===Y)return J;return`${X}
125
- ${z}`}:void 0}}var iJ={name:"markdown",rules:{"heading-increment":a(qJ),"heading-style":a(WJ),"no-missing-space-atx":a(LJ),"no-multiple-space-atx":a(IJ),"no-missing-space-closed-atx":a(PJ),"no-multiple-space-closed-atx":a(vJ),"blanks-around-headings":a(nZ),"heading-start-left":a(UJ),"no-duplicate-heading":a(NJ),"single-title":a(dJ),"no-trailing-punctuation":a(gJ),"ul-style":a(nJ),"list-indent":a(FJ),"ul-indent":a(sJ),"ol-prefix":a(xJ),"list-marker-space":a(wJ),"blanks-around-lists":a(iZ),"no-trailing-spaces":a(pJ),"no-hard-tabs":a(RJ),"no-multiple-blanks":a(CJ),"no-multiple-space-blockquote":a(SJ),"no-blanks-blockquote":a(jJ),"blanks-around-fences":a(sZ),"single-trailing-newline":F2(oJ),"blanks-around-tables":a(eZ),"no-reversed-links":a(yJ),"no-bare-urls":a(MJ),"no-space-in-links":a(fJ),"no-empty-links":a(DJ),"link-fragments":a(VJ),"reference-links-images":a(uJ),"link-image-reference-definitions":a(AJ),"link-image-style":a(_J),"descriptive-link-text":a(YJ),"line-length":a(HJ),"commands-show-output":a(XJ),"fenced-code-language":a(QJ),"code-block-style":a($J),"code-fence-style":a(JJ),"no-emphasis-as-heading":a(EJ),"no-space-in-emphasis":a(kJ),"no-space-in-code":a(bJ),"emphasis-style":a(zJ),"strong-style":a(cJ),"no-inline-html":a(OJ),"hr-style":a(KJ),"first-line-heading":a(GJ),"required-headings":a(mJ),"proper-names":a(hJ),"no-alt-text":a(BJ),"table-pipe-style":a(aJ),"table-column-count":a(rJ),"table-column-style":a(lJ)}};var tJ={meta:{docs:"Prefer using global Buffer instead of requiring it",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=/(?:import\b[^;\n]*\bfrom\s*|require\s*\(\s*)['"](?:node:)?buffer['"]/;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.trim();if(G.startsWith("//")||G.startsWith("/*")||G.startsWith("*"))continue;let q=Q.match(Y);if(!q||q.index===void 0)continue;if(!/\bBuffer\b/.test(Q))continue;Z.push({filePath:J.filePath,line:z+1,column:q.index+1,ruleId:"node/prefer-global/buffer",message:"Unexpected import of 'Buffer'. Use the global 'Buffer' instead",severity:"error",help:"`Buffer` is a global in Node.js \u2014 remove the import and use it directly."})}return Z}};var eJ={meta:{docs:"Prefer using global process instead of requiring it",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=/(?:import\b[^;\n]*\bfrom\s*|require\s*\(\s*)['"](?:node:)?process['"]/;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.trim();if(G.startsWith("//")||G.startsWith("/*")||G.startsWith("*"))continue;let q=Q.match(Y);if(!q||q.index===void 0)continue;Z.push({filePath:J.filePath,line:z+1,column:q.index+1,ruleId:"node/prefer-global/process",message:"Unexpected import of 'process'. Use the global 'process' instead",severity:"error",help:"`process` is a global in Node.js \u2014 remove the import and use it directly."})}return Z}};var $X={name:"node",rules:{"prefer-global/buffer":B(tJ),"prefer-global/process":B(eJ)}};var I8={meta:{docs:"Enforce sorted imports (delegates to formatter check only)"},check:($,J)=>{let Z=$.split(/\r?\n/),X=0;while(X<Z.length&&(/^\s*$/.test(Z[X])||/^\s*\/.\/.*/.test(Z[X])||/^\s*\/.\*/.test(Z[X])))X++;let Y=X,z=[];while(X<Z.length&&/^\s*import\b/.test(Z[X]))z.push(Z[X].trim()),X++;if(z.length===0)return[];let Q=z.join(`
124
+ `)};return{header:null,body:$}}function w2($){return{meta:$.meta,check:(J,Z)=>Z.filePath.endsWith(".md")?$.check(J,Z):[],fix:$.fix?(J,Z)=>Z.filePath.endsWith(".md")?$.fix(J,Z):J:void 0}}function a($){return{meta:$.meta,check:(J,Z)=>{if(!Z.filePath.endsWith(".md"))return[];let{text:X,frontmatterEndLine:Y}=_2(J),z=$.check(X,Z);if(Y>0)return z.filter((Q)=>Q.line>Y+1);return z},fix:$.fix?(J,Z)=>{if(!Z.filePath.endsWith(".md"))return J;let{header:X,body:Y}=F2(J);if(X===null)return $.fix(J,Z);let z=$.fix(Y,Z);if(z===Y)return J;return`${X}
125
+ ${z}`}:void 0}}var iJ={name:"markdown",rules:{"heading-increment":a(qJ),"heading-style":a(WJ),"no-missing-space-atx":a(LJ),"no-multiple-space-atx":a(IJ),"no-missing-space-closed-atx":a(PJ),"no-multiple-space-closed-atx":a(vJ),"blanks-around-headings":a(nZ),"heading-start-left":a(UJ),"no-duplicate-heading":a(NJ),"single-title":a(dJ),"no-trailing-punctuation":a(gJ),"ul-style":a(nJ),"list-indent":a(FJ),"ul-indent":a(sJ),"ol-prefix":a(xJ),"list-marker-space":a(wJ),"blanks-around-lists":a(iZ),"no-trailing-spaces":a(pJ),"no-hard-tabs":a(RJ),"no-multiple-blanks":a(CJ),"no-multiple-space-blockquote":a(SJ),"no-blanks-blockquote":a(jJ),"blanks-around-fences":a(sZ),"single-trailing-newline":w2(oJ),"blanks-around-tables":a(eZ),"no-reversed-links":a(yJ),"no-bare-urls":a(MJ),"no-space-in-links":a(fJ),"no-empty-links":a(DJ),"link-fragments":a(VJ),"reference-links-images":a(uJ),"link-image-reference-definitions":a(AJ),"link-image-style":a(_J),"descriptive-link-text":a(YJ),"line-length":a(HJ),"commands-show-output":a(XJ),"fenced-code-language":a(QJ),"code-block-style":a($J),"code-fence-style":a(JJ),"no-emphasis-as-heading":a(EJ),"no-space-in-emphasis":a(kJ),"no-space-in-code":a(bJ),"emphasis-style":a(zJ),"strong-style":a(cJ),"no-inline-html":a(OJ),"hr-style":a(KJ),"first-line-heading":a(GJ),"required-headings":a(mJ),"proper-names":a(hJ),"no-alt-text":a(BJ),"table-pipe-style":a(aJ),"table-column-count":a(rJ),"table-column-style":a(lJ)}};var tJ={meta:{docs:"Prefer using global Buffer instead of requiring it",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=/(?:import\b[^;\n]*\bfrom\s*|require\s*\(\s*)['"](?:node:)?buffer['"]/;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.trim();if(G.startsWith("//")||G.startsWith("/*")||G.startsWith("*"))continue;let q=Q.match(Y);if(!q||q.index===void 0)continue;if(!/\bBuffer\b/.test(Q))continue;Z.push({filePath:J.filePath,line:z+1,column:q.index+1,ruleId:"node/prefer-global/buffer",message:"Unexpected import of 'Buffer'. Use the global 'Buffer' instead",severity:"error",help:"`Buffer` is a global in Node.js \u2014 remove the import and use it directly."})}return Z}};var eJ={meta:{docs:"Prefer using global process instead of requiring it",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=/(?:import\b[^;\n]*\bfrom\s*|require\s*\(\s*)['"](?:node:)?process['"]/;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.trim();if(G.startsWith("//")||G.startsWith("/*")||G.startsWith("*"))continue;let q=Q.match(Y);if(!q||q.index===void 0)continue;Z.push({filePath:J.filePath,line:z+1,column:q.index+1,ruleId:"node/prefer-global/process",message:"Unexpected import of 'process'. Use the global 'process' instead",severity:"error",help:"`process` is a global in Node.js \u2014 remove the import and use it directly."})}return Z}};var $X={name:"node",rules:{"prefer-global/buffer":B(tJ),"prefer-global/process":B(eJ)}};var I8={meta:{docs:"Enforce sorted imports (delegates to formatter check only)"},check:($,J)=>{let Z=$.split(/\r?\n/),X=0;while(X<Z.length&&(/^\s*$/.test(Z[X])||/^\s*\/.\/.*/.test(Z[X])||/^\s*\/.\*/.test(Z[X])))X++;let Y=X,z=[];while(X<Z.length&&/^\s*import\b/.test(Z[X]))z.push(Z[X].trim()),X++;if(z.length===0)return[];let Q=z.join(`
126
126
  `),G=Z.slice(X).join(`
127
127
  `),q=`${Q}
128
- ${G}`;if(P7(q)!==q)return[{filePath:J.filePath,line:Y+1,column:1,ruleId:"sort-imports",message:"Imports are not sorted/grouped consistently",severity:"warning"}];return[]},fix:($)=>P7($)};var ZX={name:"perfectionist",rules:{"sort-imports":B(I8)}};import{dirname as w2,resolve as B2}from"path";function t($){try{let J=JSON.parse($);if(typeof J!=="object"||J===null||Array.isArray(J))return null;return J}catch{return null}}function M2($,J){let Z=$.split(`
129
- `),X=1,Y=0;for(let z of J){let Q=new RegExp(`"${E2(z)}"\\s*:`);for(let G=Y;G<Z.length;G++)if(Q.test(Z[G])){X=G+1,Y=G+1;break}}return X}function u0($){return w2($)}function S0($,J){return B2($,J)}function Z0($){let J="pkg";for(let Z of $)if(/^\d+$/.test(Z))J+=`[${Z}]`;else if(!/^[a-z_$][a-z0-9_$]*$/i.test(Z))J+=`["${Z}"]`;else J+=`.${Z}`;return J}function i($,J){if($.publishConfig?.[J]!==void 0)return[$.publishConfig[J],["publishConfig",J]];return[$[J],[J]]}var j2=new RegExp(`(?:[\\s;]|^)(?:import[\\w,{}\\s*]*from|import\\s*['"*{]|export\\b\\s*(?:[*{]|default|type|function|const|var|let|async function)|import\\.meta\\b)`,"m"),N2=new RegExp("(?:[\\s;]|^)(?:module.exports\\b|exports\\.\\w|require\\s*\\(|global\\.\\w|Object\\.(?:defineProperty|defineProperties|assign)\\s*\\(\\s*exports\\b)","m");function Y1($){let J=T2($),Z=j2.test(J),X=N2.test(J);if(Z&&X)return"mixed";if(Z)return"ESM";if(X)return"CJS";return"unknown"}function JX($,J){if($.endsWith(".mjs"))return"ESM";if($.endsWith(".cjs"))return"CJS";return J==="module"?"ESM":"CJS"}function XX($){if($==="ESM")return".mjs";if($==="CJS")return".cjs";return".js"}function YX($){return $===".mjs"||$===".cjs"}function s0($){return $.endsWith(".js")||$.endsWith(".mjs")||$.endsWith(".cjs")}function zX($){return/^#!\s*\//.test($)}function T2($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*/g,"")}function W0($,J,Z,X){C7($,J,Z,X)}function C7($,J,Z,X){if(typeof $==="string"){X($,{path:J,isImports:Z});return}if(Array.isArray($)){X($,{path:J,isImports:Z});for(let Y=0;Y<$.length;Y++)C7($[Y],J.concat(String(Y)),Z,X);return}if($!==null&&typeof $==="object"){let Y=Object.keys($);X($,{path:J,isImports:Z},Y);for(let z of Y)C7($[z],J.concat(z),Z,X)}}function n($,J,Z,X,Y,z,Q){return{filePath:$,line:M2(J,Z),column:1,ruleId:X,message:Y,severity:z,...Q&&{help:Q}}}function E2($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var I7={meta:{docs:"Disallow deprecated jsnext:main and jsnext fields",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[];if(Z["jsnext:main"]!=null)X.push(n(J.filePath,$,["jsnext:main"],"publint/deprecated-field-jsnext",'pkg["jsnext:main"] is deprecated. pkg.module should be used instead.',"warning",'The jsnext:main field is no longer recognized by modern bundlers. Use "module" instead.'));if(Z.jsnext!=null)X.push(n(J.filePath,$,["jsnext"],"publint/deprecated-field-jsnext","pkg.jsnext is deprecated. pkg.module should be used instead.","warning",'The jsnext field is no longer recognized by modern bundlers. Use "module" instead.'));return X}};var S7={meta:{docs:'Ensure "default" condition is last in exports objects',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("default"in Q))return;if(q[q.length-1]!=="default")X.push(n(J.filePath,$,G.path.concat("default"),"publint/exports-default-should-be-last",`${Z0(G.path.concat("default"))} should be the last condition in the object so it doesn't take precedence over the keys following it.`,"error",'Conditions are resolved in order. "default" acts as a fallback and should come last.'))}),X}};var v7={meta:{docs:"Warn against using fallback arrays in exports",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G)=>{if(!Array.isArray(Q))return;X.push(n(J.filePath,$,G.path,"publint/exports-fallback-array-use",`${Z0(G.path)} uses fallback arrays which is not recommended. It works differently in some tools and may face inconsistent behaviors.`,"warning","Fallback arrays pick the first parseable value and have no practical use case in Node.js currently."))}),X}};var y7={meta:{docs:"Ensure exports has a root entrypoint when main/module exist",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let[X]=i(Z,"main"),[Y]=i(Z,"module"),[z,Q]=i(Z,"exports");if(X==null&&Y==null||z==null)return[];if(typeof z!=="object"||Array.isArray(z))return[];let G=Object.keys(z);if(G.length===0)return[];if(!G[0]?.startsWith("."))return[];if(G.includes("."))return[];let U=[];if(X)U.push("main");if(Y)U.push("module");return[n(J.filePath,$,Q,"publint/exports-missing-root-entrypoint",`${Z0(Q)} is missing the root entrypoint export, which is defined in pkg.${U[0]}. Environments that support "exports" will ignore pkg.${U[0]} as "exports" takes the highest priority.`,"warning",`Add ${Z0(Q.concat("."))} to ensure the root entrypoint is accessible.`)]}};var b7={meta:{docs:'Ensure "module" condition precedes "require" in exports',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("module"in Q)||!("require"in Q))return;if(q.indexOf("module")>q.indexOf("require"))X.push(n(J.filePath,$,G.path.concat("module"),"publint/exports-module-should-precede-require",`${Z0(G.path.concat("module"))} should come before the "require" condition so it can take precedence when used by a bundler.`,"error",'Bundlers prioritize conditions by order. "module" should precede "require" to ensure ESM is preferred.'))}),X}};var k7={meta:{docs:'Ensure "types" condition is first in exports objects',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("types"in Q))return;let U=q.indexOf("types");if(U===0)return;if(q.slice(0,U).filter((K)=>{if(K.startsWith("types"))return!1;if(typeof Q[K]==="object"&&Q[K]!==null&&QX(Q[K],"types"))return!1;return!0}).length>0)X.push(n(J.filePath,$,G.path.concat("types"),"publint/exports-types-should-be-first",`${Z0(G.path.concat("types"))} should be the first condition in the object so it can be resolved by TypeScript.`,"error",'TypeScript resolves conditions in order. The "types" condition must come first to ensure correct type resolution.'))}),X}};function QX($,J){for(let Z in $){if(Z===J)return!0;if(typeof $[Z]==="object"&&$[Z]!==null&&QX($[Z],J))return!0}return!1}var f7={meta:{docs:'Ensure exports values start with "./"',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G)=>{if(typeof Q!=="string")return;if(Q.startsWith("./"))return;let q=`./${Q.replace(/^[/]+/,"")}`;X.push(n(J.filePath,$,G.path,"publint/exports-value-invalid",`${Z0(G.path)} is "${Q}" which is invalid as it does not start with "./". Use "${q}" instead.`,"error",'All exports values must be relative paths starting with "./".'))}),X}};var D2=[{field:"main",expectTypes:["string"]},{field:"module",expectTypes:["string"]},{field:"types",expectTypes:["string"]},{field:"typings",expectTypes:["string"]},{field:"browser",expectTypes:["string","object"]},{field:"bin",expectTypes:["string","object"]},{field:"exports",expectTypes:["string","object"]},{field:"imports",expectTypes:["object"]},{field:"name",expectTypes:["string"]},{field:"version",expectTypes:["string"]},{field:"description",expectTypes:["string"]},{field:"license",expectTypes:["string"]}],g7={meta:{docs:"Ensure package.json fields have correct value types",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[];for(let{field:Y,expectTypes:z}of D2){let[Q,G]=i(Z,Y);if(Q==null)continue;let q=typeof Q;if(!z.includes(q)){let U=z.length===1?z[0]:`${z.slice(0,-1).join(", ")} or ${z[z.length-1]}`;X.push(n(J.filePath,$,G,"publint/field-invalid-value-type",`${Z0(G)} has an invalid ${q} type. Expected a ${U} type instead.`,"error",`The "${Y}" field must be of type ${U}.`))}}return X}};var p7={meta:{docs:"Suggest adding exports when module field is present",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let[X,Y]=i(Z,"module"),[z]=i(Z,"exports");if(X!=null&&z==null)return[n(J.filePath,$,Y,"publint/has-module-but-no-exports","pkg.module is used to output ESM, but pkg.exports is not defined. As Node.js doesn't read pkg.module, the ESM output may be skipped. Consider adding pkg.exports to export the ESM output.","warning",'Node.js only reads "exports" for module resolution. Without it, the ESM entry point in "module" is ignored by Node.js.')];return[]}};var x7={meta:{docs:'Ensure "default" condition is last in imports objects',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object")return[];return W0(Y,z,!0,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("default"in Q))return;if(q[q.length-1]!=="default")X.push(n(J.filePath,$,G.path.concat("default"),"publint/imports-default-should-be-last",`${Z0(G.path.concat("default"))} should be the last condition in the object so it doesn't take precedence over the keys following it.`,"error",'Conditions are resolved in order. "default" acts as a fallback and should come last.'))}),X}};var h7={meta:{docs:'Ensure imports keys start with "#"',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object"||Array.isArray(Y))return[];for(let Q of Object.keys(Y))if(!Q.startsWith("#")){let G=`#${Q.replace(/^[/]+/,"")}`,q=z.concat(Q);X.push(n(J.filePath,$,q,"publint/imports-key-invalid",`${Z0(q)} is invalid as the imports key does not start with "#". Use "${G}" instead.`,"error",'All imports keys must start with "#" to distinguish them from package specifiers.'))}return X}};var u7={meta:{docs:'Ensure "module" condition precedes "require" in imports',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object")return[];return W0(Y,z,!0,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("module"in Q)||!("require"in Q))return;if(q.indexOf("module")>q.indexOf("require"))X.push(n(J.filePath,$,G.path.concat("module"),"publint/imports-module-should-precede-require",`${Z0(G.path.concat("module"))} should come before the "require" condition so it can take precedence when used by a bundler.`,"error",'Bundlers prioritize conditions by order. "module" should precede "require" to ensure ESM is preferred.'))}),X}};var m7={meta:{docs:'Ensure imports values start with "./"',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object")return[];return W0(Y,z,!0,(Q,G)=>{if(typeof Q!=="string")return;if(!Q.startsWith("."))return;if(Q.startsWith("./"))return;let q=`./${Q.replace(/^[/]+/,"")}`;X.push(n(J.filePath,$,G.path,"publint/imports-value-invalid",`${Z0(G.path)} is "${Q}" which is invalid as it does not start with "./". Use "${q}" instead.`,"error",'Relative imports values must start with "./".'))}),X}};var d7={meta:{docs:"Disallow local file references in dependencies",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=["dependencies","optionalDependencies","peerDependencies"];for(let z of Y){let Q=Z[z];if(!Q||typeof Q!=="object")continue;for(let G of Object.keys(Q)){let q=Q[G];if(typeof q==="string"&&(q.startsWith("file:")||q.startsWith("link:")))X.push(n(J.filePath,$,[z,G],"publint/local-dependency",`The "${G}" dependency references "${q}" that will likely not work when installed by end-users.`,"error","Local file references (file: or link:) are not portable and will fail for consumers of the package."))}}return X}};var o7={meta:{docs:'Suggest specifying the "type" field in package.json',recommended:!0},check($,J){let Z=t($);if(!Z)return[];if(Z.type==null)return[n(J.filePath,$,["name"],"publint/use-type",'The package does not specify the "type" field. Node.js may attempt to detect the package type causing a small performance hit. Consider adding "type": "commonjs" or "type": "module".',"warning",'Adding "type" helps Node.js resolve module format without detection overhead.')];return[]}};import{existsSync as R2,readFileSync as O2}from"fs";var c7={meta:{docs:"Ensure bin files have a shebang for executability",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),[z,Q]=i(Z,"bin");if(z==null)return[];if(typeof z==="string")GX(z,Q,Y,X,J.filePath,$);else if(typeof z==="object"){for(let G of Object.keys(z))if(typeof z[G]==="string")GX(z[G],Q.concat(G),Y,X,J.filePath,$)}return X}};function GX($,J,Z,X,Y,z){let Q=S0(Z,$);if(!R2(Q))return;if(!s0($))return;let G;try{G=O2(Q,"utf8")}catch{return}if(!zX(G))X.push(n(Y,z,J,"publint/bin-file-not-executable",`${Z0(J)} is "${$}" but the file is not executable. It should start with a shebang, e.g. #!/usr/bin/env node.`,"error","Bin files must start with a shebang (e.g. #!/usr/bin/env node) to be executable."))}import{existsSync as qX,readFileSync as UX}from"fs";var r7={meta:{docs:'Ensure files under "module" condition in exports are ESM',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),[z,Q]=i(Z,"exports");if(z==null)return[];W0(z,Q,!1,(U,W)=>{if(typeof U!=="string")return;if(!W.path.includes("module"))return;if(!U.startsWith("./")&&!U.startsWith("../"))return;if(U.includes("*"))return;let K=S0(Y,U);if(!qX(K))return;if(!s0(U))return;let H;try{H=UX(K,"utf8")}catch{return}if(Y1(H)==="CJS")X.push(n(J.filePath,$,W.path,"publint/exports-module-should-be-esm",`${Z0(W.path)} should be ESM, but the code is written in CJS.`,"error",'The "module" condition is only used by bundlers and must contain ESM code.'))});let[G,q]=i(Z,"imports");if(G!=null&&typeof G==="object")W0(G,q,!0,(U,W)=>{if(typeof U!=="string")return;if(!W.path.includes("module"))return;if(!U.startsWith("./"))return;if(U.includes("*"))return;let K=S0(Y,U);if(!qX(K))return;if(!s0(U))return;let H;try{H=UX(K,"utf8")}catch{return}if(Y1(H)==="CJS")X.push(n(J.filePath,$,W.path,"publint/exports-module-should-be-esm",`${Z0(W.path)} should be ESM, but the code is written in CJS.`,"error",'The "module" condition is only used by bundlers and must contain ESM code.'))});return X}};import{existsSync as x1}from"fs";import{dirname as L2,isAbsolute as P2,resolve as C2}from"path";function l7($,J){let Z=J;while(Z.startsWith("./"))Z=Z.slice(2);let X=Z.split("/")[0];if(!X||X===".."||X.startsWith("."))return!1;let Y=P2(J)?L2(J).split("/")[0]||"/":C2($,X);return!x1(Y)}var a7={meta:{docs:"Ensure files referenced in package.json exist",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),z=["main","module","types","typings","unpkg","jsdelivr"];for(let W of z){let[K,H]=i(Z,W);if(K==null||typeof K!=="string")continue;if(l7(Y,K))continue;let V=S0(Y,K);if(!KX(V))X.push(n(J.filePath,$,H,"publint/file-does-not-exist",`${Z0(H)} is "${K}" but the file does not exist.`,"error","The referenced file path cannot be found. Check the path for typos."))}let[Q,G]=i(Z,"bin");if(Q!=null){if(typeof Q==="string")WX(Q,G,X,J.filePath,$,Y);else if(typeof Q==="object"){for(let W of Object.keys(Q))if(typeof Q[W]==="string")WX(Q[W],G.concat(W),X,J.filePath,$,Y)}}let[q,U]=i(Z,"exports");if(q!=null)W0(q,U,!1,(W,K)=>{if(typeof W!=="string")return;if(!W.startsWith("./")&&!W.startsWith("../"))return;if(W.includes("*"))return;if(l7(Y,W))return;let H=S0(Y,W);if(!x1(H))X.push(n(J.filePath,$,K.path,"publint/file-does-not-exist",`${Z0(K.path)} is "${W}" but the file does not exist.`,"error","The referenced file path cannot be found. Check the path for typos."))});return X}};function WX($,J,Z,X,Y,z){if(l7(z,$))return;let Q=S0(z,$);if(!KX(Q))Z.push(n(X,Y,J,"publint/file-does-not-exist",`${Z0(J)} is "${$}" but the file does not exist.`,"error","The referenced file path cannot be found. Check the path for typos."))}function KX($){if(x1($))return!0;if(x1(`${$}.js`))return!0;if(x1(`${$}/index.js`))return!0;return!1}import{existsSync as I2,readFileSync as S2}from"fs";import{extname as v2}from"path";var s7={meta:{docs:"Ensure file code format matches its extension and package type",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),z=Z.type,[Q,G]=i(Z,"main");if(Q!=null&&typeof Q==="string")HX(Q,G,Y,z,X,J.filePath,$);let[q,U]=i(Z,"exports");if(q!=null)W0(q,U,!1,(W,K)=>{if(typeof W!=="string")return;if(!W.startsWith("./")&&!W.startsWith("../"))return;if(W.includes("*"))return;if(K.path.includes("browser"))return;HX(W,K.path,Y,z,X,J.filePath,$)});return X}};function HX($,J,Z,X,Y,z,Q){let G=S0(Z,$);if(!I2(G))return;if(!s0($))return;let q;try{q=S2(G,"utf8")}catch{return}let U=Y1(q);if(U==="unknown"||U==="mixed")return;let W=JX(G,X);if(U===W)return;let K=v2(G),H=XX(U),A=(YX(K)?"FILE_INVALID_EXPLICIT_FORMAT":"FILE_INVALID_FORMAT")==="FILE_INVALID_EXPLICIT_FORMAT"?`${Z0(J)} is "${$}" and ends with the ${K} extension, but the code is written in ${U}. Consider using the ${H} extension.`:`${Z0(J)} is "${$}" and is written in ${U}, but is interpreted as ${W}. Consider using the ${H} extension.`;Y.push(n(z,Q,J,"publint/file-invalid-format",A,"warning",`The file's code format (${U}) doesn't match the expected format (${W}) based on its extension and package type.`))}import{existsSync as y2,readFileSync as b2}from"fs";var n7={meta:{docs:'Ensure the "module" field points to an ESM file',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let[X,Y]=i(Z,"module");if(X==null||typeof X!=="string")return[];let z=u0(J.filePath),Q=S0(z,X);if(!y2(Q))return[];if(!s0(X))return[];let G;try{G=b2(Q,"utf8")}catch{return[]}if(Y1(G)==="CJS")return[n(J.filePath,$,Y,"publint/module-should-be-esm",`${Z0(Y)} should be ESM, but the code is written in CJS.`,"error",'The "module" field is intended for ESM output used by bundlers. It should point to an ESM file.')];return[]}};var VX={name:"publint",rules:{"use-type":_0(o7),"local-dependency":_0(d7),"deprecated-field-jsnext":_0(I7),"has-module-but-no-exports":_0(p7),"field-invalid-value-type":_0(g7),"exports-types-should-be-first":_0(k7),"exports-default-should-be-last":_0(S7),"exports-module-should-precede-require":_0(b7),"exports-value-invalid":_0(f7),"exports-missing-root-entrypoint":_0(y7),"exports-fallback-array-use":_0(v7),"imports-key-invalid":_0(h7),"imports-value-invalid":_0(m7),"imports-default-should-be-last":_0(x7),"imports-module-should-precede-require":_0(u7),"file-does-not-exist":_0(a7),"file-invalid-format":_0(s7),"module-should-be-esm":_0(n7),"bin-file-not-executable":_0(c7),"exports-module-should-be-esm":_0(r7)}};var AX={meta:{docs:"Ensure all imports appear before other statements",recommended:!1},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=0;for(let Q=0;Q<X.length;Q++){let G=X[Q].trim();if(!G||G.startsWith("//")||G.startsWith("/*")||G.startsWith("*"))continue;let q=G.match(/^\s*import\s+/);if(!q&&G.length>0){if(Y=!0,z===0)z=Q+1}if(Y&&q)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"import/first",message:"Import statement must appear before other statements",severity:"error"})}return Z}};var _X={meta:{docs:"Disallow duplicate specifier names in a single import declaration"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/^\s*import\s*\{([^}]*)\}\s*from\s*['"][^'"]+['"]/);if(!Q)continue;let q=Q[1].split(",").map((W)=>W.trim()).filter(Boolean).map((W)=>W.split(/\s+as\s+/i)[0].trim()),U=new Set;for(let W of q){if(U.has(W)){Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf(W)+1),ruleId:"pickier/import-dedupe",message:"Expect no duplication in imports",severity:"warning"});break}U.add(W)}}return Z}};import{existsSync as k2,readFileSync as f2}from"fs";import{dirname as g2,resolve as p2}from"path";var FX={meta:{docs:"Ensure named imports correspond to a named export in the remote file",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=g2(J.filePath);for(let z=0;z<X.length;z++){let G=X[z].match(/\bimport\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/);if(G){let q=G[1].split(",").map((H)=>H.trim().split(/\s+as\s+/)[0].trim()),U=G[2];if(!U.startsWith(".")&&!U.startsWith("/"))continue;let W=[".ts",".tsx",".js",".jsx",""],K="";for(let H of W){let V=p2(Y,U+H);if(k2(V)){K=f2(V,"utf8");break}}if(K)for(let H of q){let V=new RegExp(`\\bexport\\s+(?:const|let|var|function|class)\\s+${H}\\b`),A=new RegExp(`\\bexport\\s+\\{[^}]*\\b${H}\\b[^}]*\\}`);if(![V,A].some((F)=>F.test(K)))Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"import/named",message:`'${H}' not found in '${U}'`,severity:"error"})}}}return Z}};import{existsSync as wX,readFileSync as x2}from"fs";import{dirname as BX,resolve as MX}from"path";var jX={meta:{docs:"Ensure imports don't create circular dependencies",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=J.filePath,z=new Set,Q=new Set;function G(U,W){if(Q.has(U))return!0;if(z.has(U))return!1;z.add(U),Q.add(U);try{let K=x2(U,"utf8"),H=q(K,BX(U));for(let V of H)if(G(V,[...W,V]))return!0}catch{}return Q.delete(U),!1}function q(U,W){let K=[],H=/\bimport(?:\s{2,}|\s+\S.*?(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))from\s+['"]([^'"]+)['"]/g,V;for(V=H.exec(U);V!==null;V=H.exec(U)){let A=V[1];if(A.startsWith(".")||A.startsWith("/")){let _=[".ts",".tsx",".js",".jsx",""];for(let w of _){let F=MX(W,A+w);if(wX(F)){K.push(F);break}}}}return K}for(let U=0;U<X.length;U++){let K=X[U].match(/\bimport(?:\s{2,}|\s+\S.*?(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))from\s+['"]([^'"]+)['"]/);if(K){let H=K[1];if(H.startsWith(".")||H.startsWith("/")){let V=[".ts",".tsx",".js",".jsx",""],A="";for(let _ of V){let w=MX(BX(Y),H+_);if(wX(w)){A=w;break}}if(A){if(z.clear(),Q.clear(),Q.add(Y),G(A,[Y,A]))Z.push({filePath:J.filePath,line:U+1,column:1,ruleId:"import/no-cycle",message:"Dependency cycle detected",severity:"error"})}}}}return Z}};var NX={meta:{docs:"Disallow duplicate module imports - all imports from the same module should be combined"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=new Map,z=!1;for(let Q=0;Q<X.length;Q++){let G=X[Q];if(z){let V=G.indexOf("*/");if(V>=0)G=G.slice(V+2),z=!1;else continue}let q=G.indexOf("/*"),U=G.indexOf("//");if(q>=0&&(U===-1||q<U)){let V=G.indexOf("*/",q+2);if(V>=0)G=G.slice(0,q)+G.slice(V+2);else z=!0,G=G.slice(0,q)}if(U>=0)G=G.slice(0,U);let W=G.trim();if(!W)continue;let K=W.match(/^import\s+(?:type\s+)?(?:\{[^}]*\}|[\w$]+(?:\s*,\s*\{[^}]*\})?|\*\s+as\s+[\w$]+)\s+from\s+(['"`])(.+?)\1/);if(K){let V=K[2];if(Y.has(V)){let A=Y.get(V);Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"no-duplicate-imports",message:`'${V}' imported multiple times (also imported on line${A.length>1?"s":""} ${A.join(", ")})`,severity:"error",help:`Combine all imports from '${V}' into a single import statement`}),A.push(Q+1)}else Y.set(V,[Q+1])}let H=W.match(/^export\s+(?:type\s+)?(?:\{[^}]*\}|\*(?:\s+as\s+[\w$]+)?)\s+from\s+(['"`])(.+?)\1/);if(H){let V=H[2],A=`export:${V}`;if(Y.has(A)){let _=Y.get(A);Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"no-duplicate-imports",message:`'${V}' re-exported multiple times (also exported on line${_.length>1?"s":""} ${_.join(", ")})`,severity:"error",help:`Combine all re-exports from '${V}' into a single export statement`}),_.push(Q+1)}else Y.set(A,[Q+1])}}return Z}};var TX={meta:{docs:"Disallow importing from dist directories"},check:($,J)=>{let Z=[],X=new RegExp(`^\\s*import\\s[^;]*?from\\s*['"]([^'"]+)['"]`,"m"),Y=$.split(/\r?\n/);for(let z=0;z<Y.length;z++){let Q=Y[z],G=Q.match(X);if(!G)continue;let q=G[1];if(q==="dist"||(q.startsWith(".")||q.startsWith("/"))&&/(?:^|\/)dist(?:\/.|$)/.test(q))Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,Q.indexOf(q)+1),ruleId:"pickier/no-import-dist",message:`Do not import modules in \`dist\` folder, got ${q}`,severity:"error"})}return Z}};var EX={meta:{docs:"Disallow importing from node_modules by explicit path"},check:($,J)=>{let Z=[],X=new RegExp(`^\\s*import\\s[^;]*?from\\s*['"]([^'"]+)['"]`,"m"),Y=/require\(\s*['"]([^'"]+)['"]\s*\)/,z=$.split(/\r?\n/);for(let Q=0;Q<z.length;Q++){let G=z[Q],q=G.match(X),U=G.match(Y),W=q?.[1]||U?.[1];if(!W)continue;if(W.includes("/node_modules/")){let K=Math.max(1,G.indexOf(W)+1);Z.push({filePath:J.filePath,line:Q+1,column:K,ruleId:"pickier/no-import-node-modules-by-path",message:"Do not import modules in `node_modules` folder by path",severity:"error"})}}return Z}};import{existsSync as h2}from"fs";import{dirname as u2,join as m2,resolve as d2}from"path";var DX={meta:{docs:"Ensure imports point to a file/module that can be resolved",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=u2(J.filePath);for(let z=0;z<X.length;z++){let Q=X[z],G=[...Q.matchAll(/\bimport(?:\s{2,}|\s+\S.*?(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))from\s+['"]([^'"]+)['"]/g),...Q.matchAll(/\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g),...Q.matchAll(/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g)];for(let q of G){let U=q[1];if(!U.startsWith(".")&&!U.startsWith("/"))continue;let W=[],K=[".ts",".tsx",".js",".jsx",".mjs",".cjs",""];for(let V of K){let A=d2(Y,U+V);W.push(A),W.push(m2(A,`index${V}`))}if(!W.some((V)=>h2(V)))Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"import/no-unresolved",message:`Unable to resolve path to module '${U}'`,severity:"error"})}}return Z}};function RX($,J,Z){let X=Z.order==="desc"?-1:1,Y=Z.type||"alphabetical",z=Z.ignoreCase?$.toLowerCase():$,Q=Z.ignoreCase?J.toLowerCase():J;if(Y==="line-length")return(z.length-Q.length)*X;if(Y==="natural")return z.localeCompare(Q,void 0,{numeric:!0,sensitivity:"base"})*X;if(Y==="unsorted")return 0;return z.localeCompare(Q)*X}var o2=new RegExp(`^export\\s+\\{[^}]*\\}\\s+from\\s+['"][^'"]+['"];?\\s*$`);function S8($){return o2.test($)}var OX={meta:{docs:"Ensure contiguous export statements are sorted consistently."},check:($,J)=>{let Z=[],X=J.config.pluginRules?.["pickier/sort-exports"]?.[1]||{},Y=$.split(/\r?\n/),z=0;while(z<Y.length){while(z<Y.length&&!S8(Y[z]))z++;if(z>=Y.length)break;let Q=[],G=z;while(G<Y.length){let q=Y[G];if(S8(q)){Q.push({idx:G,line:q}),G++;continue}if(X.partitionByNewLine&&q.trim()==="")break;else break}if(Q.length>1){let q=Q.map((K)=>K.line),U=[...q].sort((K,H)=>RX(K,H,X));if(!q.every((K,H)=>K===U[H])){let K=q.findIndex((V,A)=>V!==U[A]),H=Q[K]?.idx??Q[0].idx;Z.push({filePath:J.filePath,line:H+1,column:1,ruleId:"pickier/sort-exports",message:"Export statements are not sorted.",severity:"warning"})}}z=G+1}return Z},fix:($,J)=>{let Z=J.config.pluginRules?.["pickier/sort-exports"]?.[1]||{},Y=[...$.split(/\r?\n/)],z=0;while(z<Y.length){while(z<Y.length&&!S8(Y[z]))z++;if(z>=Y.length)break;let Q=[],G=z;while(G<Y.length){let q=Y[G];if(S8(q)){Q.push(G),G++;continue}if(Z.partitionByNewLine&&q.trim()==="")break;else break}if(Q.length>1){let q=Q.map((K)=>Y[K]),U=[...q].sort((K,H)=>RX(K,H,Z));if(!q.every((K,H)=>K===U[H]))Q.forEach((K,H)=>{Y[K]=U[H]})}z=G+1}return Y.join(`
130
- `)}};var LX={meta:{docs:"Enforce sorted TypeScript heritage clauses (extends/implements lists)"},check:($,J)=>{let Z=J.options||{},X=Z.type||"alphabetical",Y=Z.order||"asc",z=Z.ignoreCase!==!1,Q=Array.isArray(Z.groups)?Z.groups:[],G=Z.customGroups||{},q=$.split(/\r?\n/),U=[],W=(E)=>Y==="asc"?E:-E,K=(E,j)=>(z?E.toLowerCase():E).localeCompare(z?j.toLowerCase():j),H=(E,j)=>(z?E.toLowerCase():E).localeCompare(z?j.toLowerCase():j,void 0,{numeric:!0}),V=(E,j)=>{if(X==="line-length")return W(E.length-j.length);if(X==="natural")return W(H(E,j));if(X==="unsorted")return 0;return W(K(E,j))},A=Object.fromEntries(Object.entries(G).map(([E,j])=>{let v=(Array.isArray(j)?j:[j]).map((k)=>new RegExp(k));return[E,v]})),_=[];for(let E of Q)if(Array.isArray(E))_.push(...E);else _.push(E);if(!_.includes("unknown"))_.push("unknown");let w=(E)=>{for(let[j,O]of Object.entries(A))if(O.some((v)=>v.test(E)))return j;return"unknown"},F=(E)=>{let j=[],O=0,v="";for(let k=0;k<E.length;k++){let L=E[k];if(L==="<")O++;else if(L===">")O=Math.max(0,O-1);if(L===","&&O===0){j.push(v.trim()),v="";continue}v+=L}if(v.trim())j.push(v.trim());return j},M=(E)=>{let j=E.trim(),O=j.match(/^([A-Z_$][\w$.]*)/i);return O?O[1]:j},T=(E,j)=>{let O=F(j);if(O.length<=1)return;let v=O.map(M),k=v.map(w),L=v.map((b,P)=>({n:b,g:k[P],i:P})).sort((b,P)=>{let I=_.indexOf(b.g),S=_.indexOf(P.g);if(I!==S)return I-S;return V(b.n,P.n)}).map((b)=>b.n);if(!v.every((b,P)=>b===L[P]))U.push({filePath:J.filePath,line:E,column:1,ruleId:"sort-heritage-clauses",message:"Heritage clauses are not sorted",severity:"warning"})};for(let E=0;E<q.length;E++){let j=q[E],O=j.match(/^\s*interface\s+[A-Za-z_$][^{]*\bextends\s+(.+?)\s*\{/);if(O)T(E+1,O[1]);let v=j.match(/^\s*class\s+[A-Za-z_$][^{]*\bimplements\s+(.+?)\s*\{/);if(v)T(E+1,v[1])}return U}};var PX={meta:{docs:"Require object keys to be sorted (ESLint-compatible core rule subset)"},check:()=>{return[]}};var CX={meta:{docs:"Enforce sorted named imports within each import statement"},check:($,J)=>{let Z=J.options||{},X=Z.type||"alphabetical",Y=Z.order||"asc",z=Z.ignoreCase!==!1,Q=Boolean(Z.ignoreAlias),G=$.split(/\r?\n/),q=[],U=(W,K)=>{let H=0;if(X==="line-length")H=W.length-K.length;else{let V=z?W.toLowerCase():W,A=z?K.toLowerCase():K;H=V.localeCompare(A)}return Y==="asc"?H:-H};for(let W=0;W<G.length;W++){let H=G[W].match(/^\s*import\s+\{([^}]*)\}\s+from\s+['"][^'"]+['"]/);if(!H)continue;let A=H[1].split(",").map((M)=>M.trim()).filter(Boolean);if(A.length<=1)continue;let _=A.map((M)=>{let T=M.replace(/^type\s+/,""),E=T.match(/^([\w$]+)\s+as\s+([\w$]+)$/);if(E)return Q?E[2]:E[1];let j=T.match(/^([\w$]+)$/);return j?j[1]:T}),w=[..._].sort(U);if(!_.every((M,T)=>M===w[T]))q.push({filePath:J.filePath,line:W+1,column:1,ruleId:"sort-named-imports",message:"Named imports are not sorted",severity:"warning"})}return q}};var IX={meta:{docs:"Enforce sorted object keys"},check:($,J)=>{let Z=J.options||{},X=Z.type||"alphabetical",Y=Z.order||"asc",z=Z.ignoreCase!==!1,Q=Boolean(Z.partitionByNewLine),G=$.split(/\r?\n/),q=[],U=(K,H)=>{let V=0;if(X==="line-length")V=K.length-H.length;else{let A=z?K.toLowerCase():K,_=z?H.toLowerCase():H;V=A.localeCompare(_)}return Y==="asc"?V:-V},W=0;while(W<G.length){let K=G[W],H=K.indexOf("{");if(H!==-1){let V=K.slice(0,H);if(/=\s*$|\(\s*$|\breturn\s*$/.test(V)){let A=0,_=W,w=W;for(;w<G.length;w++){for(let F of G[w])if(F==="{")A++;else if(F==="}")A--;if(A===0)break}if(w>_){let F=G.slice(_+1,w),M=[],T={startLine:_+2,props:[]},E=()=>{if(T.props.length)M.push(T);T={startLine:0,props:[]}};for(let j=0;j<F.length;j++){let O=F[j];if(Q&&/^\s*$/.test(O)){E();continue}if(/^\s*\.\.\./.test(O))continue;if(/\{|\}/.test(O))continue;let v=O.match(/^\s*['"]?([\w$-]+)['"]?\s*:/);if(v){if(T.startLine===0)T.startLine=_+2+j;T.props.push({key:v[1],line:_+2+j})}}E();for(let j of M){let O=j.props.map((L)=>L.key),v=[...O].sort(U);if(!(O.length<=1||O.every((L,h)=>L===v[h]))&&j.props.length>0){let L=j.props[0];q.push({filePath:J.filePath,line:L.line,column:1,ruleId:"sort-objects",message:"Object keys are not sorted",severity:"warning"})}}W=w+1;continue}}}W++}return q}};var SX={meta:{docs:"Enforce top-level functions to use function declarations"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(/^\s+/.test(z))continue;if(/^\s*(?:\/\/|\/\*)/.test(z))continue;let Q=z.match(/^const\s+([A-Za-z_$][\w$]*)\s*=(.*)$/);if(!Q)continue;let G=Q[2].trim();if(/^\(?[A-Z_$,]*(?:\)\s*)?=>/i.test(G)||/^function\b/.test(G)){let q=z.indexOf("const")+1;Z.push({filePath:J.filePath,line:Y+1,column:q,ruleId:"pickier/top-level-function",message:"Top-level functions should be declared with function keyword",severity:"warning"});continue}if(G.trim().length===0||/[,({]$/.test(G.trim())){let q=X[Y+1]||"";if(/^\s*(?:\(?[A-Za-z_$,]*(?:\)\s*)?=>|function\b)/.test(q)){let U=z.indexOf("const")+1;Z.push({filePath:J.filePath,line:Y+1,column:U,ruleId:"pickier/top-level-function",message:"Top-level functions should be declared with function keyword",severity:"warning"})}}}return Z}};var c2=[[/^(block|inline|inline-block|flex|inline-flex|grid|inline-grid|flow-root|contents|hidden|table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row-group|table-row|list-item|subgrid)$/,0],[/^(container|columns|break-after|break-before|break-inside|box-decoration|box-border|box-content|float|clear|isolation|object|overflow|overscroll|position|inset|top|right|bottom|left|start|end|z-|aspect|order)/,1],[/^(static|fixed|absolute|relative|sticky)$/,1],[/^(visible|invisible|collapse)$/,1],[/^(basis|flex-|grow|shrink|order|grid-|col-|row-|auto-cols|auto-rows|gap|justify|items|content|self|place)/,2],[/^(p|px|py|ps|pe|pt|pr|pb|pl|m|mx|my|ms|me|mt|mr|mb|ml|space|indent)-/,3],[/^(-?(p|px|py|ps|pe|pt|pr|pb|pl|m|mx|my|ms|me|mt|mr|mb|ml|space|indent)-)/,3],[/^(w-|h-|min-w|max-w|min-h|max-h|size-)/,4],[/^(font|text|tracking|leading|list|placeholder|vertical|whitespace|break|hyphens|content|truncate|overflow-ellipsis|overflow-clip|line-clamp|underline|overline|line-through|no-underline|uppercase|lowercase|capitalize|normal-case|italic|not-italic|ordinal|slashed-zero|lining-nums|oldstyle-nums|proportional-nums|tabular-nums|diagonal-fractions|stacked-fractions|normal-nums|antialiased|subpixel-antialiased)/,5],[/^(bg-|from-|via-|to-|gradient-)/,6],[/^(border|rounded|outline|ring|divide|accent)/,7],[/^(shadow|opacity|mix-blend|bg-blend)/,8],[/^(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|saturate|sepia|backdrop)/,9],[/^(border-collapse|border-separate|border-spacing|table-auto|table-fixed|caption)/,10],[/^(transition|duration|ease|delay|animate)/,11],[/^(scale|rotate|translate|skew|origin|transform|perspective)/,12],[/^(appearance|cursor|caret|pointer-events|resize|scroll|snap|touch|select|will-change)/,13],[/^(fill|stroke)/,14],[/^(sr-only|not-sr-only)$/,15]],r2=/^([a-z0-9][-a-z0-9]{0,50}:)+(?!\[)/;function l2($){let J=0;while(J<$.length){if($[J]==="[")break;let Z=$.indexOf(":",J);if(Z===-1)break;if($[Z+1]==="[")break;J=Z+1}return $.slice(J)}function a2($){let J=l2($);if(J.startsWith("!"))J=J.slice(1);for(let[Z,X]of c2)if(Z.test(J))return X;return 99}function s2($){let J=$.match(r2);if(!J)return 0;let Z=J[0].slice(0,-1).split(":"),X={sm:1,md:2,lg:3,xl:4,"2xl":5},Y=10;for(let z of Z)if(X[z]!==void 0)Y+=X[z];else Y+=20;return Y}var vX=new Map;function yX($){let J=vX.get($);if(J)return J;let Z={group:a2($),variant:s2($)};return vX.set($,Z),Z}function i7($){return[...$].sort((J,Z)=>{let X=yX(J),Y=yX(Z),z=X.group,Q=Y.group;if(z!==Q)return z-Q;let G=X.variant,q=Y.variant;if(G!==q)return G-q;return J.localeCompare(Z)})}var n2=/\b(?:class|className|:class)\s*=\s*(?:"([^"]*?)"|'([^']*?)')/g,i2=/\b(?:class|className|:class)\s*=\s*\{`([^`]*?)`\}/g,t2=/\b(?:clsx|cn|tw|cva|tv)\s*\(\s*(?:"([^"]*?)"|'([^']*?)')/g;function e2($){let J=$.replace(/\[[^\]]*\]/g,"");if(/['"`]/.test(J))return!0;if(/[{}()=]/.test(J))return!0;if(/ \? | && | \|\| /.test(J))return!0;if(/\b(?:true|false|null|undefined|function|return|typeof|instanceof)\b/.test(J))return!0;return!1}function bX($){let J=[];if(!$.includes("class")&&!$.includes("clsx")&&!$.includes("cn(")&&!$.includes("tw(")&&!$.includes("cva(")&&!$.includes("tv("))return J;for(let Z of[n2,i2,t2]){Z.lastIndex=0;let X;while((X=Z.exec($))!==null){let Y=X[1]??X[2]??"";if(!Y.trim())continue;if(e2(Y))continue;let z=$.indexOf(Y,X.index);if(z===-1)continue;J.push({value:Y,start:z,end:z+Y.length})}}return J.sort((Z,X)=>Z.start-X.start),J}function kX($){let J=[],Z="",X=0;for(let Y of $)if(Y==="[")X++,Z+=Y;else if(Y==="]")X=Math.max(0,X-1),Z+=Y;else if(/\s/.test(Y)&&X===0){if(Z)J.push(Z),Z=""}else Z+=Y;if(Z)J.push(Z);return J}function fX($){let J=i7($);return $.every((Z,X)=>Z===J[X])}var gX={meta:{docs:"Enforce consistent Tailwind CSS class ordering (layout \u2192 spacing \u2192 typography \u2192 etc.).",recommended:!0,editsStringContent:!0},check:($,J)=>{let Z=[],X=bX($);for(let{value:Y,start:z}of X){let Q=kX(Y);if(Q.length<2)continue;if(!fX(Q)){let G=$.slice(0,z),q=(G.match(/\n/g)??[]).length+1,U=G.lastIndexOf(`
128
+ ${G}`;if(P7(q)!==q)return[{filePath:J.filePath,line:Y+1,column:1,ruleId:"sort-imports",message:"Imports are not sorted/grouped consistently",severity:"warning"}];return[]},fix:($)=>P7($)};var ZX={name:"perfectionist",rules:{"sort-imports":B(I8)}};import{dirname as B2,resolve as M2}from"path";function t($){try{let J=JSON.parse($);if(typeof J!=="object"||J===null||Array.isArray(J))return null;return J}catch{return null}}function j2($,J){let Z=$.split(`
129
+ `),X=1,Y=0;for(let z of J){let Q=new RegExp(`"${D2(z)}"\\s*:`);for(let G=Y;G<Z.length;G++)if(Q.test(Z[G])){X=G+1,Y=G+1;break}}return X}function u0($){return B2($)}function S0($,J){return M2($,J)}function Z0($){let J="pkg";for(let Z of $)if(/^\d+$/.test(Z))J+=`[${Z}]`;else if(!/^[a-z_$][a-z0-9_$]*$/i.test(Z))J+=`["${Z}"]`;else J+=`.${Z}`;return J}function i($,J){if($.publishConfig?.[J]!==void 0)return[$.publishConfig[J],["publishConfig",J]];return[$[J],[J]]}var N2=new RegExp(`(?:[\\s;]|^)(?:import[\\w,{}\\s*]*from|import\\s*['"*{]|export\\b\\s*(?:[*{]|default|type|function|const|var|let|async function)|import\\.meta\\b)`,"m"),T2=new RegExp("(?:[\\s;]|^)(?:module.exports\\b|exports\\.\\w|require\\s*\\(|global\\.\\w|Object\\.(?:defineProperty|defineProperties|assign)\\s*\\(\\s*exports\\b)","m");function Y1($){let J=E2($),Z=N2.test(J),X=T2.test(J);if(Z&&X)return"mixed";if(Z)return"ESM";if(X)return"CJS";return"unknown"}function JX($,J){if($.endsWith(".mjs"))return"ESM";if($.endsWith(".cjs"))return"CJS";return J==="module"?"ESM":"CJS"}function XX($){if($==="ESM")return".mjs";if($==="CJS")return".cjs";return".js"}function YX($){return $===".mjs"||$===".cjs"}function s0($){return $.endsWith(".js")||$.endsWith(".mjs")||$.endsWith(".cjs")}function zX($){return/^#!\s*\//.test($)}function E2($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*/g,"")}function W0($,J,Z,X){C7($,J,Z,X)}function C7($,J,Z,X){if(typeof $==="string"){X($,{path:J,isImports:Z});return}if(Array.isArray($)){X($,{path:J,isImports:Z});for(let Y=0;Y<$.length;Y++)C7($[Y],J.concat(String(Y)),Z,X);return}if($!==null&&typeof $==="object"){let Y=Object.keys($);X($,{path:J,isImports:Z},Y);for(let z of Y)C7($[z],J.concat(z),Z,X)}}function n($,J,Z,X,Y,z,Q){return{filePath:$,line:j2(J,Z),column:1,ruleId:X,message:Y,severity:z,...Q&&{help:Q}}}function D2($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var I7={meta:{docs:"Disallow deprecated jsnext:main and jsnext fields",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[];if(Z["jsnext:main"]!=null)X.push(n(J.filePath,$,["jsnext:main"],"publint/deprecated-field-jsnext",'pkg["jsnext:main"] is deprecated. pkg.module should be used instead.',"warning",'The jsnext:main field is no longer recognized by modern bundlers. Use "module" instead.'));if(Z.jsnext!=null)X.push(n(J.filePath,$,["jsnext"],"publint/deprecated-field-jsnext","pkg.jsnext is deprecated. pkg.module should be used instead.","warning",'The jsnext field is no longer recognized by modern bundlers. Use "module" instead.'));return X}};var S7={meta:{docs:'Ensure "default" condition is last in exports objects',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("default"in Q))return;if(q[q.length-1]!=="default")X.push(n(J.filePath,$,G.path.concat("default"),"publint/exports-default-should-be-last",`${Z0(G.path.concat("default"))} should be the last condition in the object so it doesn't take precedence over the keys following it.`,"error",'Conditions are resolved in order. "default" acts as a fallback and should come last.'))}),X}};var v7={meta:{docs:"Warn against using fallback arrays in exports",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G)=>{if(!Array.isArray(Q))return;X.push(n(J.filePath,$,G.path,"publint/exports-fallback-array-use",`${Z0(G.path)} uses fallback arrays which is not recommended. It works differently in some tools and may face inconsistent behaviors.`,"warning","Fallback arrays pick the first parseable value and have no practical use case in Node.js currently."))}),X}};var y7={meta:{docs:"Ensure exports has a root entrypoint when main/module exist",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let[X]=i(Z,"main"),[Y]=i(Z,"module"),[z,Q]=i(Z,"exports");if(X==null&&Y==null||z==null)return[];if(typeof z!=="object"||Array.isArray(z))return[];let G=Object.keys(z);if(G.length===0)return[];if(!G[0]?.startsWith("."))return[];if(G.includes("."))return[];let U=[];if(X)U.push("main");if(Y)U.push("module");return[n(J.filePath,$,Q,"publint/exports-missing-root-entrypoint",`${Z0(Q)} is missing the root entrypoint export, which is defined in pkg.${U[0]}. Environments that support "exports" will ignore pkg.${U[0]} as "exports" takes the highest priority.`,"warning",`Add ${Z0(Q.concat("."))} to ensure the root entrypoint is accessible.`)]}};var b7={meta:{docs:'Ensure "module" condition precedes "require" in exports',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("module"in Q)||!("require"in Q))return;if(q.indexOf("module")>q.indexOf("require"))X.push(n(J.filePath,$,G.path.concat("module"),"publint/exports-module-should-precede-require",`${Z0(G.path.concat("module"))} should come before the "require" condition so it can take precedence when used by a bundler.`,"error",'Bundlers prioritize conditions by order. "module" should precede "require" to ensure ESM is preferred.'))}),X}};var k7={meta:{docs:'Ensure "types" condition is first in exports objects',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("types"in Q))return;let U=q.indexOf("types");if(U===0)return;if(q.slice(0,U).filter((K)=>{if(K.startsWith("types"))return!1;if(typeof Q[K]==="object"&&Q[K]!==null&&QX(Q[K],"types"))return!1;return!0}).length>0)X.push(n(J.filePath,$,G.path.concat("types"),"publint/exports-types-should-be-first",`${Z0(G.path.concat("types"))} should be the first condition in the object so it can be resolved by TypeScript.`,"error",'TypeScript resolves conditions in order. The "types" condition must come first to ensure correct type resolution.'))}),X}};function QX($,J){for(let Z in $){if(Z===J)return!0;if(typeof $[Z]==="object"&&$[Z]!==null&&QX($[Z],J))return!0}return!1}var f7={meta:{docs:'Ensure exports values start with "./"',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"exports");if(Y==null)return[];return W0(Y,z,!1,(Q,G)=>{if(typeof Q!=="string")return;if(Q.startsWith("./"))return;let q=`./${Q.replace(/^[/]+/,"")}`;X.push(n(J.filePath,$,G.path,"publint/exports-value-invalid",`${Z0(G.path)} is "${Q}" which is invalid as it does not start with "./". Use "${q}" instead.`,"error",'All exports values must be relative paths starting with "./".'))}),X}};var R2=[{field:"main",expectTypes:["string"]},{field:"module",expectTypes:["string"]},{field:"types",expectTypes:["string"]},{field:"typings",expectTypes:["string"]},{field:"browser",expectTypes:["string","object"]},{field:"bin",expectTypes:["string","object"]},{field:"exports",expectTypes:["string","object"]},{field:"imports",expectTypes:["object"]},{field:"name",expectTypes:["string"]},{field:"version",expectTypes:["string"]},{field:"description",expectTypes:["string"]},{field:"license",expectTypes:["string"]}],g7={meta:{docs:"Ensure package.json fields have correct value types",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[];for(let{field:Y,expectTypes:z}of R2){let[Q,G]=i(Z,Y);if(Q==null)continue;let q=typeof Q;if(!z.includes(q)){let U=z.length===1?z[0]:`${z.slice(0,-1).join(", ")} or ${z[z.length-1]}`;X.push(n(J.filePath,$,G,"publint/field-invalid-value-type",`${Z0(G)} has an invalid ${q} type. Expected a ${U} type instead.`,"error",`The "${Y}" field must be of type ${U}.`))}}return X}};var p7={meta:{docs:"Suggest adding exports when module field is present",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let[X,Y]=i(Z,"module"),[z]=i(Z,"exports");if(X!=null&&z==null)return[n(J.filePath,$,Y,"publint/has-module-but-no-exports","pkg.module is used to output ESM, but pkg.exports is not defined. As Node.js doesn't read pkg.module, the ESM output may be skipped. Consider adding pkg.exports to export the ESM output.","warning",'Node.js only reads "exports" for module resolution. Without it, the ESM entry point in "module" is ignored by Node.js.')];return[]}};var x7={meta:{docs:'Ensure "default" condition is last in imports objects',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object")return[];return W0(Y,z,!0,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("default"in Q))return;if(q[q.length-1]!=="default")X.push(n(J.filePath,$,G.path.concat("default"),"publint/imports-default-should-be-last",`${Z0(G.path.concat("default"))} should be the last condition in the object so it doesn't take precedence over the keys following it.`,"error",'Conditions are resolved in order. "default" acts as a fallback and should come last.'))}),X}};var h7={meta:{docs:'Ensure imports keys start with "#"',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object"||Array.isArray(Y))return[];for(let Q of Object.keys(Y))if(!Q.startsWith("#")){let G=`#${Q.replace(/^[/]+/,"")}`,q=z.concat(Q);X.push(n(J.filePath,$,q,"publint/imports-key-invalid",`${Z0(q)} is invalid as the imports key does not start with "#". Use "${G}" instead.`,"error",'All imports keys must start with "#" to distinguish them from package specifiers.'))}return X}};var u7={meta:{docs:'Ensure "module" condition precedes "require" in imports',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object")return[];return W0(Y,z,!0,(Q,G,q)=>{if(!q||typeof Q!=="object"||Array.isArray(Q))return;if(!("module"in Q)||!("require"in Q))return;if(q.indexOf("module")>q.indexOf("require"))X.push(n(J.filePath,$,G.path.concat("module"),"publint/imports-module-should-precede-require",`${Z0(G.path.concat("module"))} should come before the "require" condition so it can take precedence when used by a bundler.`,"error",'Bundlers prioritize conditions by order. "module" should precede "require" to ensure ESM is preferred.'))}),X}};var m7={meta:{docs:'Ensure imports values start with "./"',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],[Y,z]=i(Z,"imports");if(Y==null||typeof Y!=="object")return[];return W0(Y,z,!0,(Q,G)=>{if(typeof Q!=="string")return;if(!Q.startsWith("."))return;if(Q.startsWith("./"))return;let q=`./${Q.replace(/^[/]+/,"")}`;X.push(n(J.filePath,$,G.path,"publint/imports-value-invalid",`${Z0(G.path)} is "${Q}" which is invalid as it does not start with "./". Use "${q}" instead.`,"error",'Relative imports values must start with "./".'))}),X}};var d7={meta:{docs:"Disallow local file references in dependencies",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=["dependencies","optionalDependencies","peerDependencies"];for(let z of Y){let Q=Z[z];if(!Q||typeof Q!=="object")continue;for(let G of Object.keys(Q)){let q=Q[G];if(typeof q==="string"&&(q.startsWith("file:")||q.startsWith("link:")))X.push(n(J.filePath,$,[z,G],"publint/local-dependency",`The "${G}" dependency references "${q}" that will likely not work when installed by end-users.`,"error","Local file references (file: or link:) are not portable and will fail for consumers of the package."))}}return X}};var o7={meta:{docs:'Suggest specifying the "type" field in package.json',recommended:!0},check($,J){let Z=t($);if(!Z)return[];if(Z.type==null)return[n(J.filePath,$,["name"],"publint/use-type",'The package does not specify the "type" field. Node.js may attempt to detect the package type causing a small performance hit. Consider adding "type": "commonjs" or "type": "module".',"warning",'Adding "type" helps Node.js resolve module format without detection overhead.')];return[]}};import{existsSync as O2,readFileSync as L2}from"fs";var c7={meta:{docs:"Ensure bin files have a shebang for executability",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),[z,Q]=i(Z,"bin");if(z==null)return[];if(typeof z==="string")GX(z,Q,Y,X,J.filePath,$);else if(typeof z==="object"){for(let G of Object.keys(z))if(typeof z[G]==="string")GX(z[G],Q.concat(G),Y,X,J.filePath,$)}return X}};function GX($,J,Z,X,Y,z){let Q=S0(Z,$);if(!O2(Q))return;if(!s0($))return;let G;try{G=L2(Q,"utf8")}catch{return}if(!zX(G))X.push(n(Y,z,J,"publint/bin-file-not-executable",`${Z0(J)} is "${$}" but the file is not executable. It should start with a shebang, e.g. #!/usr/bin/env node.`,"error","Bin files must start with a shebang (e.g. #!/usr/bin/env node) to be executable."))}import{existsSync as qX,readFileSync as UX}from"fs";var r7={meta:{docs:'Ensure files under "module" condition in exports are ESM',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),[z,Q]=i(Z,"exports");if(z==null)return[];W0(z,Q,!1,(U,W)=>{if(typeof U!=="string")return;if(!W.path.includes("module"))return;if(!U.startsWith("./")&&!U.startsWith("../"))return;if(U.includes("*"))return;let K=S0(Y,U);if(!qX(K))return;if(!s0(U))return;let H;try{H=UX(K,"utf8")}catch{return}if(Y1(H)==="CJS")X.push(n(J.filePath,$,W.path,"publint/exports-module-should-be-esm",`${Z0(W.path)} should be ESM, but the code is written in CJS.`,"error",'The "module" condition is only used by bundlers and must contain ESM code.'))});let[G,q]=i(Z,"imports");if(G!=null&&typeof G==="object")W0(G,q,!0,(U,W)=>{if(typeof U!=="string")return;if(!W.path.includes("module"))return;if(!U.startsWith("./"))return;if(U.includes("*"))return;let K=S0(Y,U);if(!qX(K))return;if(!s0(U))return;let H;try{H=UX(K,"utf8")}catch{return}if(Y1(H)==="CJS")X.push(n(J.filePath,$,W.path,"publint/exports-module-should-be-esm",`${Z0(W.path)} should be ESM, but the code is written in CJS.`,"error",'The "module" condition is only used by bundlers and must contain ESM code.'))});return X}};import{existsSync as x1}from"fs";import{dirname as P2,isAbsolute as C2,resolve as I2}from"path";function l7($,J){let Z=J;while(Z.startsWith("./"))Z=Z.slice(2);let X=Z.split("/")[0];if(!X||X===".."||X.startsWith("."))return!1;let Y=C2(J)?P2(J).split("/")[0]||"/":I2($,X);return!x1(Y)}var a7={meta:{docs:"Ensure files referenced in package.json exist",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),z=["main","module","types","typings","unpkg","jsdelivr"];for(let W of z){let[K,H]=i(Z,W);if(K==null||typeof K!=="string")continue;if(l7(Y,K))continue;let V=S0(Y,K);if(!KX(V))X.push(n(J.filePath,$,H,"publint/file-does-not-exist",`${Z0(H)} is "${K}" but the file does not exist.`,"error","The referenced file path cannot be found. Check the path for typos."))}let[Q,G]=i(Z,"bin");if(Q!=null){if(typeof Q==="string")WX(Q,G,X,J.filePath,$,Y);else if(typeof Q==="object"){for(let W of Object.keys(Q))if(typeof Q[W]==="string")WX(Q[W],G.concat(W),X,J.filePath,$,Y)}}let[q,U]=i(Z,"exports");if(q!=null)W0(q,U,!1,(W,K)=>{if(typeof W!=="string")return;if(!W.startsWith("./")&&!W.startsWith("../"))return;if(W.includes("*"))return;if(l7(Y,W))return;let H=S0(Y,W);if(!x1(H))X.push(n(J.filePath,$,K.path,"publint/file-does-not-exist",`${Z0(K.path)} is "${W}" but the file does not exist.`,"error","The referenced file path cannot be found. Check the path for typos."))});return X}};function WX($,J,Z,X,Y,z){if(l7(z,$))return;let Q=S0(z,$);if(!KX(Q))Z.push(n(X,Y,J,"publint/file-does-not-exist",`${Z0(J)} is "${$}" but the file does not exist.`,"error","The referenced file path cannot be found. Check the path for typos."))}function KX($){if(x1($))return!0;if(x1(`${$}.js`))return!0;if(x1(`${$}/index.js`))return!0;return!1}import{existsSync as S2,readFileSync as v2}from"fs";import{extname as y2}from"path";var s7={meta:{docs:"Ensure file code format matches its extension and package type",recommended:!0},check($,J){let Z=t($);if(!Z)return[];let X=[],Y=u0(J.filePath),z=Z.type,[Q,G]=i(Z,"main");if(Q!=null&&typeof Q==="string")HX(Q,G,Y,z,X,J.filePath,$);let[q,U]=i(Z,"exports");if(q!=null)W0(q,U,!1,(W,K)=>{if(typeof W!=="string")return;if(!W.startsWith("./")&&!W.startsWith("../"))return;if(W.includes("*"))return;if(K.path.includes("browser"))return;HX(W,K.path,Y,z,X,J.filePath,$)});return X}};function HX($,J,Z,X,Y,z,Q){let G=S0(Z,$);if(!S2(G))return;if(!s0($))return;let q;try{q=v2(G,"utf8")}catch{return}let U=Y1(q);if(U==="unknown"||U==="mixed")return;let W=JX(G,X);if(U===W)return;let K=y2(G),H=XX(U),A=(YX(K)?"FILE_INVALID_EXPLICIT_FORMAT":"FILE_INVALID_FORMAT")==="FILE_INVALID_EXPLICIT_FORMAT"?`${Z0(J)} is "${$}" and ends with the ${K} extension, but the code is written in ${U}. Consider using the ${H} extension.`:`${Z0(J)} is "${$}" and is written in ${U}, but is interpreted as ${W}. Consider using the ${H} extension.`;Y.push(n(z,Q,J,"publint/file-invalid-format",A,"warning",`The file's code format (${U}) doesn't match the expected format (${W}) based on its extension and package type.`))}import{existsSync as b2,readFileSync as k2}from"fs";var n7={meta:{docs:'Ensure the "module" field points to an ESM file',recommended:!0},check($,J){let Z=t($);if(!Z)return[];let[X,Y]=i(Z,"module");if(X==null||typeof X!=="string")return[];let z=u0(J.filePath),Q=S0(z,X);if(!b2(Q))return[];if(!s0(X))return[];let G;try{G=k2(Q,"utf8")}catch{return[]}if(Y1(G)==="CJS")return[n(J.filePath,$,Y,"publint/module-should-be-esm",`${Z0(Y)} should be ESM, but the code is written in CJS.`,"error",'The "module" field is intended for ESM output used by bundlers. It should point to an ESM file.')];return[]}};var VX={name:"publint",rules:{"use-type":_0(o7),"local-dependency":_0(d7),"deprecated-field-jsnext":_0(I7),"has-module-but-no-exports":_0(p7),"field-invalid-value-type":_0(g7),"exports-types-should-be-first":_0(k7),"exports-default-should-be-last":_0(S7),"exports-module-should-precede-require":_0(b7),"exports-value-invalid":_0(f7),"exports-missing-root-entrypoint":_0(y7),"exports-fallback-array-use":_0(v7),"imports-key-invalid":_0(h7),"imports-value-invalid":_0(m7),"imports-default-should-be-last":_0(x7),"imports-module-should-precede-require":_0(u7),"file-does-not-exist":_0(a7),"file-invalid-format":_0(s7),"module-should-be-esm":_0(n7),"bin-file-not-executable":_0(c7),"exports-module-should-be-esm":_0(r7)}};var AX={meta:{docs:"Ensure all imports appear before other statements",recommended:!1},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=!1,z=0;for(let Q=0;Q<X.length;Q++){let G=X[Q].trim();if(!G||G.startsWith("//")||G.startsWith("/*")||G.startsWith("*"))continue;let q=G.match(/^\s*import\s+/);if(!q&&G.length>0){if(Y=!0,z===0)z=Q+1}if(Y&&q)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"import/first",message:"Import statement must appear before other statements",severity:"error"})}return Z}};var _X={meta:{docs:"Disallow duplicate specifier names in a single import declaration"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/^\s*import\s*\{([^}]*)\}\s*from\s*['"][^'"]+['"]/);if(!Q)continue;let q=Q[1].split(",").map((W)=>W.trim()).filter(Boolean).map((W)=>W.split(/\s+as\s+/i)[0].trim()),U=new Set;for(let W of q){if(U.has(W)){Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf(W)+1),ruleId:"pickier/import-dedupe",message:"Expect no duplication in imports",severity:"warning"});break}U.add(W)}}return Z}};import{existsSync as f2,readFileSync as g2}from"fs";import{dirname as p2,resolve as x2}from"path";var FX={meta:{docs:"Ensure named imports correspond to a named export in the remote file",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=p2(J.filePath);for(let z=0;z<X.length;z++){let G=X[z].match(/\bimport\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/);if(G){let q=G[1].split(",").map((H)=>H.trim().split(/\s+as\s+/)[0].trim()),U=G[2];if(!U.startsWith(".")&&!U.startsWith("/"))continue;let W=[".ts",".tsx",".js",".jsx",""],K="";for(let H of W){let V=x2(Y,U+H);if(f2(V)){K=g2(V,"utf8");break}}if(K)for(let H of q){let V=new RegExp(`\\bexport\\s+(?:const|let|var|function|class)\\s+${H}\\b`),A=new RegExp(`\\bexport\\s+\\{[^}]*\\b${H}\\b[^}]*\\}`);if(![V,A].some((F)=>F.test(K)))Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"import/named",message:`'${H}' not found in '${U}'`,severity:"error"})}}}return Z}};import{existsSync as wX,readFileSync as h2}from"fs";import{dirname as BX,resolve as MX}from"path";var jX={meta:{docs:"Ensure imports don't create circular dependencies",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=J.filePath,z=new Set,Q=new Set;function G(U,W){if(Q.has(U))return!0;if(z.has(U))return!1;z.add(U),Q.add(U);try{let K=h2(U,"utf8"),H=q(K,BX(U));for(let V of H)if(G(V,[...W,V]))return!0}catch{}return Q.delete(U),!1}function q(U,W){let K=[],H=/\bimport(?:\s{2,}|\s+\S.*?(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))from\s+['"]([^'"]+)['"]/g,V;for(V=H.exec(U);V!==null;V=H.exec(U)){let A=V[1];if(A.startsWith(".")||A.startsWith("/")){let _=[".ts",".tsx",".js",".jsx",""];for(let w of _){let F=MX(W,A+w);if(wX(F)){K.push(F);break}}}}return K}for(let U=0;U<X.length;U++){let K=X[U].match(/\bimport(?:\s{2,}|\s+\S.*?(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))from\s+['"]([^'"]+)['"]/);if(K){let H=K[1];if(H.startsWith(".")||H.startsWith("/")){let V=[".ts",".tsx",".js",".jsx",""],A="";for(let _ of V){let w=MX(BX(Y),H+_);if(wX(w)){A=w;break}}if(A){if(z.clear(),Q.clear(),Q.add(Y),G(A,[Y,A]))Z.push({filePath:J.filePath,line:U+1,column:1,ruleId:"import/no-cycle",message:"Dependency cycle detected",severity:"error"})}}}}return Z}};var NX={meta:{docs:"Disallow duplicate module imports - all imports from the same module should be combined"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=new Map,z=!1;for(let Q=0;Q<X.length;Q++){let G=X[Q];if(z){let V=G.indexOf("*/");if(V>=0)G=G.slice(V+2),z=!1;else continue}let q=G.indexOf("/*"),U=G.indexOf("//");if(q>=0&&(U===-1||q<U)){let V=G.indexOf("*/",q+2);if(V>=0)G=G.slice(0,q)+G.slice(V+2);else z=!0,G=G.slice(0,q)}if(U>=0)G=G.slice(0,U);let W=G.trim();if(!W)continue;let K=W.match(/^import\s+(?:type\s+)?(?:\{[^}]*\}|[\w$]+(?:\s*,\s*\{[^}]*\})?|\*\s+as\s+[\w$]+)\s+from\s+(['"`])(.+?)\1/);if(K){let V=K[2];if(Y.has(V)){let A=Y.get(V);Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"no-duplicate-imports",message:`'${V}' imported multiple times (also imported on line${A.length>1?"s":""} ${A.join(", ")})`,severity:"error",help:`Combine all imports from '${V}' into a single import statement`}),A.push(Q+1)}else Y.set(V,[Q+1])}let H=W.match(/^export\s+(?:type\s+)?(?:\{[^}]*\}|\*(?:\s+as\s+[\w$]+)?)\s+from\s+(['"`])(.+?)\1/);if(H){let V=H[2],A=`export:${V}`;if(Y.has(A)){let _=Y.get(A);Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"no-duplicate-imports",message:`'${V}' re-exported multiple times (also exported on line${_.length>1?"s":""} ${_.join(", ")})`,severity:"error",help:`Combine all re-exports from '${V}' into a single export statement`}),_.push(Q+1)}else Y.set(A,[Q+1])}}return Z}};var TX={meta:{docs:"Disallow importing from dist directories"},check:($,J)=>{let Z=[],X=new RegExp(`^\\s*import\\s[^;]*?from\\s*['"]([^'"]+)['"]`,"m"),Y=$.split(/\r?\n/);for(let z=0;z<Y.length;z++){let Q=Y[z],G=Q.match(X);if(!G)continue;let q=G[1];if(q==="dist"||(q.startsWith(".")||q.startsWith("/"))&&/(?:^|\/)dist(?:\/.|$)/.test(q))Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,Q.indexOf(q)+1),ruleId:"pickier/no-import-dist",message:`Do not import modules in \`dist\` folder, got ${q}`,severity:"error"})}return Z}};var EX={meta:{docs:"Disallow importing from node_modules by explicit path"},check:($,J)=>{let Z=[],X=new RegExp(`^\\s*import\\s[^;]*?from\\s*['"]([^'"]+)['"]`,"m"),Y=/require\(\s*['"]([^'"]+)['"]\s*\)/,z=$.split(/\r?\n/);for(let Q=0;Q<z.length;Q++){let G=z[Q],q=G.match(X),U=G.match(Y),W=q?.[1]||U?.[1];if(!W)continue;if(W.includes("/node_modules/")){let K=Math.max(1,G.indexOf(W)+1);Z.push({filePath:J.filePath,line:Q+1,column:K,ruleId:"pickier/no-import-node-modules-by-path",message:"Do not import modules in `node_modules` folder by path",severity:"error"})}}return Z}};import{existsSync as u2}from"fs";import{dirname as m2,join as d2,resolve as o2}from"path";var DX={meta:{docs:"Ensure imports point to a file/module that can be resolved",recommended:!0},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=m2(J.filePath);for(let z=0;z<X.length;z++){let Q=X[z],G=[...Q.matchAll(/\bimport(?:\s{2,}|\s+\S.*?(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))from\s+['"]([^'"]+)['"]/g),...Q.matchAll(/\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g),...Q.matchAll(/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g)];for(let q of G){let U=q[1];if(!U.startsWith(".")&&!U.startsWith("/"))continue;let W=[],K=[".ts",".tsx",".js",".jsx",".mjs",".cjs",""];for(let V of K){let A=o2(Y,U+V);W.push(A),W.push(d2(A,`index${V}`))}if(!W.some((V)=>u2(V)))Z.push({filePath:J.filePath,line:z+1,column:1,ruleId:"import/no-unresolved",message:`Unable to resolve path to module '${U}'`,severity:"error"})}}return Z}};function RX($,J,Z){let X=Z.order==="desc"?-1:1,Y=Z.type||"alphabetical",z=Z.ignoreCase?$.toLowerCase():$,Q=Z.ignoreCase?J.toLowerCase():J;if(Y==="line-length")return(z.length-Q.length)*X;if(Y==="natural")return z.localeCompare(Q,void 0,{numeric:!0,sensitivity:"base"})*X;if(Y==="unsorted")return 0;return z.localeCompare(Q)*X}var c2=new RegExp(`^export\\s+\\{[^}]*\\}\\s+from\\s+['"][^'"]+['"];?\\s*$`);function S8($){return c2.test($)}var OX={meta:{docs:"Ensure contiguous export statements are sorted consistently."},check:($,J)=>{let Z=[],X=J.config.pluginRules?.["pickier/sort-exports"]?.[1]||{},Y=$.split(/\r?\n/),z=0;while(z<Y.length){while(z<Y.length&&!S8(Y[z]))z++;if(z>=Y.length)break;let Q=[],G=z;while(G<Y.length){let q=Y[G];if(S8(q)){Q.push({idx:G,line:q}),G++;continue}if(X.partitionByNewLine&&q.trim()==="")break;else break}if(Q.length>1){let q=Q.map((K)=>K.line),U=[...q].sort((K,H)=>RX(K,H,X));if(!q.every((K,H)=>K===U[H])){let K=q.findIndex((V,A)=>V!==U[A]),H=Q[K]?.idx??Q[0].idx;Z.push({filePath:J.filePath,line:H+1,column:1,ruleId:"pickier/sort-exports",message:"Export statements are not sorted.",severity:"warning"})}}z=G+1}return Z},fix:($,J)=>{let Z=J.config.pluginRules?.["pickier/sort-exports"]?.[1]||{},Y=[...$.split(/\r?\n/)],z=0;while(z<Y.length){while(z<Y.length&&!S8(Y[z]))z++;if(z>=Y.length)break;let Q=[],G=z;while(G<Y.length){let q=Y[G];if(S8(q)){Q.push(G),G++;continue}if(Z.partitionByNewLine&&q.trim()==="")break;else break}if(Q.length>1){let q=Q.map((K)=>Y[K]),U=[...q].sort((K,H)=>RX(K,H,Z));if(!q.every((K,H)=>K===U[H]))Q.forEach((K,H)=>{Y[K]=U[H]})}z=G+1}return Y.join(`
130
+ `)}};var LX={meta:{docs:"Enforce sorted TypeScript heritage clauses (extends/implements lists)"},check:($,J)=>{let Z=J.options||{},X=Z.type||"alphabetical",Y=Z.order||"asc",z=Z.ignoreCase!==!1,Q=Array.isArray(Z.groups)?Z.groups:[],G=Z.customGroups||{},q=$.split(/\r?\n/),U=[],W=(E)=>Y==="asc"?E:-E,K=(E,j)=>(z?E.toLowerCase():E).localeCompare(z?j.toLowerCase():j),H=(E,j)=>(z?E.toLowerCase():E).localeCompare(z?j.toLowerCase():j,void 0,{numeric:!0}),V=(E,j)=>{if(X==="line-length")return W(E.length-j.length);if(X==="natural")return W(H(E,j));if(X==="unsorted")return 0;return W(K(E,j))},A=Object.fromEntries(Object.entries(G).map(([E,j])=>{let v=(Array.isArray(j)?j:[j]).map((k)=>new RegExp(k));return[E,v]})),_=[];for(let E of Q)if(Array.isArray(E))_.push(...E);else _.push(E);if(!_.includes("unknown"))_.push("unknown");let w=(E)=>{for(let[j,O]of Object.entries(A))if(O.some((v)=>v.test(E)))return j;return"unknown"},F=(E)=>{let j=[],O=0,v="";for(let k=0;k<E.length;k++){let L=E[k];if(L==="<")O++;else if(L===">")O=Math.max(0,O-1);if(L===","&&O===0){j.push(v.trim()),v="";continue}v+=L}if(v.trim())j.push(v.trim());return j},M=(E)=>{let j=E.trim(),O=j.match(/^([A-Z_$][\w$.]*)/i);return O?O[1]:j},T=(E,j)=>{let O=F(j);if(O.length<=1)return;let v=O.map(M),k=v.map(w),L=v.map((b,P)=>({n:b,g:k[P],i:P})).sort((b,P)=>{let I=_.indexOf(b.g),S=_.indexOf(P.g);if(I!==S)return I-S;return V(b.n,P.n)}).map((b)=>b.n);if(!v.every((b,P)=>b===L[P]))U.push({filePath:J.filePath,line:E,column:1,ruleId:"sort-heritage-clauses",message:"Heritage clauses are not sorted",severity:"warning"})};for(let E=0;E<q.length;E++){let j=q[E],O=j.match(/^\s*interface\s+[A-Za-z_$][^{]*\bextends\s+(.+?)\s*\{/);if(O)T(E+1,O[1]);let v=j.match(/^\s*class\s+[A-Za-z_$][^{]*\bimplements\s+(.+?)\s*\{/);if(v)T(E+1,v[1])}return U}};var PX={meta:{docs:"Require object keys to be sorted (ESLint-compatible core rule subset)"},check:()=>{return[]}};var CX={meta:{docs:"Enforce sorted named imports within each import statement"},check:($,J)=>{let Z=J.options||{},X=Z.type||"alphabetical",Y=Z.order||"asc",z=Z.ignoreCase!==!1,Q=Boolean(Z.ignoreAlias),G=$.split(/\r?\n/),q=[],U=(W,K)=>{let H=0;if(X==="line-length")H=W.length-K.length;else{let V=z?W.toLowerCase():W,A=z?K.toLowerCase():K;H=V.localeCompare(A)}return Y==="asc"?H:-H};for(let W=0;W<G.length;W++){let H=G[W].match(/^\s*import\s+\{([^}]*)\}\s+from\s+['"][^'"]+['"]/);if(!H)continue;let A=H[1].split(",").map((M)=>M.trim()).filter(Boolean);if(A.length<=1)continue;let _=A.map((M)=>{let T=M.replace(/^type\s+/,""),E=T.match(/^([\w$]+)\s+as\s+([\w$]+)$/);if(E)return Q?E[2]:E[1];let j=T.match(/^([\w$]+)$/);return j?j[1]:T}),w=[..._].sort(U);if(!_.every((M,T)=>M===w[T]))q.push({filePath:J.filePath,line:W+1,column:1,ruleId:"sort-named-imports",message:"Named imports are not sorted",severity:"warning"})}return q}};var IX={meta:{docs:"Enforce sorted object keys"},check:($,J)=>{let Z=J.options||{},X=Z.type||"alphabetical",Y=Z.order||"asc",z=Z.ignoreCase!==!1,Q=Boolean(Z.partitionByNewLine),G=$.split(/\r?\n/),q=[],U=(K,H)=>{let V=0;if(X==="line-length")V=K.length-H.length;else{let A=z?K.toLowerCase():K,_=z?H.toLowerCase():H;V=A.localeCompare(_)}return Y==="asc"?V:-V},W=0;while(W<G.length){let K=G[W],H=K.indexOf("{");if(H!==-1){let V=K.slice(0,H);if(/=\s*$|\(\s*$|\breturn\s*$/.test(V)){let A=0,_=W,w=W;for(;w<G.length;w++){for(let F of G[w])if(F==="{")A++;else if(F==="}")A--;if(A===0)break}if(w>_){let F=G.slice(_+1,w),M=[],T={startLine:_+2,props:[]},E=()=>{if(T.props.length)M.push(T);T={startLine:0,props:[]}};for(let j=0;j<F.length;j++){let O=F[j];if(Q&&/^\s*$/.test(O)){E();continue}if(/^\s*\.\.\./.test(O))continue;if(/\{|\}/.test(O))continue;let v=O.match(/^\s*['"]?([\w$-]+)['"]?\s*:/);if(v){if(T.startLine===0)T.startLine=_+2+j;T.props.push({key:v[1],line:_+2+j})}}E();for(let j of M){let O=j.props.map((L)=>L.key),v=[...O].sort(U);if(!(O.length<=1||O.every((L,h)=>L===v[h]))&&j.props.length>0){let L=j.props[0];q.push({filePath:J.filePath,line:L.line,column:1,ruleId:"sort-objects",message:"Object keys are not sorted",severity:"warning"})}}W=w+1;continue}}}W++}return q}};var SX={meta:{docs:"Enforce top-level functions to use function declarations"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(/^\s+/.test(z))continue;if(/^\s*(?:\/\/|\/\*)/.test(z))continue;let Q=z.match(/^const\s+([A-Za-z_$][\w$]*)\s*=(.*)$/);if(!Q)continue;let G=Q[2].trim();if(/^\(?[A-Z_$,]*(?:\)\s*)?=>/i.test(G)||/^function\b/.test(G)){let q=z.indexOf("const")+1;Z.push({filePath:J.filePath,line:Y+1,column:q,ruleId:"pickier/top-level-function",message:"Top-level functions should be declared with function keyword",severity:"warning"});continue}if(G.trim().length===0||/[,({]$/.test(G.trim())){let q=X[Y+1]||"";if(/^\s*(?:\(?[A-Za-z_$,]*(?:\)\s*)?=>|function\b)/.test(q)){let U=z.indexOf("const")+1;Z.push({filePath:J.filePath,line:Y+1,column:U,ruleId:"pickier/top-level-function",message:"Top-level functions should be declared with function keyword",severity:"warning"})}}}return Z}};var r2=[[/^(block|inline|inline-block|flex|inline-flex|grid|inline-grid|flow-root|contents|hidden|table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row-group|table-row|list-item|subgrid)$/,0],[/^(container|columns|break-after|break-before|break-inside|box-decoration|box-border|box-content|float|clear|isolation|object|overflow|overscroll|position|inset|top|right|bottom|left|start|end|z-|aspect|order)/,1],[/^(static|fixed|absolute|relative|sticky)$/,1],[/^(visible|invisible|collapse)$/,1],[/^(basis|flex-|grow|shrink|order|grid-|col-|row-|auto-cols|auto-rows|gap|justify|items|content|self|place)/,2],[/^(p|px|py|ps|pe|pt|pr|pb|pl|m|mx|my|ms|me|mt|mr|mb|ml|space|indent)-/,3],[/^(-?(p|px|py|ps|pe|pt|pr|pb|pl|m|mx|my|ms|me|mt|mr|mb|ml|space|indent)-)/,3],[/^(w-|h-|min-w|max-w|min-h|max-h|size-)/,4],[/^(font|text|tracking|leading|list|placeholder|vertical|whitespace|break|hyphens|content|truncate|overflow-ellipsis|overflow-clip|line-clamp|underline|overline|line-through|no-underline|uppercase|lowercase|capitalize|normal-case|italic|not-italic|ordinal|slashed-zero|lining-nums|oldstyle-nums|proportional-nums|tabular-nums|diagonal-fractions|stacked-fractions|normal-nums|antialiased|subpixel-antialiased)/,5],[/^(bg-|from-|via-|to-|gradient-)/,6],[/^(border|rounded|outline|ring|divide|accent)/,7],[/^(shadow|opacity|mix-blend|bg-blend)/,8],[/^(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|saturate|sepia|backdrop)/,9],[/^(border-collapse|border-separate|border-spacing|table-auto|table-fixed|caption)/,10],[/^(transition|duration|ease|delay|animate)/,11],[/^(scale|rotate|translate|skew|origin|transform|perspective)/,12],[/^(appearance|cursor|caret|pointer-events|resize|scroll|snap|touch|select|will-change)/,13],[/^(fill|stroke)/,14],[/^(sr-only|not-sr-only)$/,15]],l2=/^([a-z0-9][-a-z0-9]{0,50}:)+(?!\[)/;function a2($){let J=0;while(J<$.length){if($[J]==="[")break;let Z=$.indexOf(":",J);if(Z===-1)break;if($[Z+1]==="[")break;J=Z+1}return $.slice(J)}function s2($){let J=a2($);if(J.startsWith("!"))J=J.slice(1);for(let[Z,X]of r2)if(Z.test(J))return X;return 99}function n2($){let J=$.match(l2);if(!J)return 0;let Z=J[0].slice(0,-1).split(":"),X={sm:1,md:2,lg:3,xl:4,"2xl":5},Y=10;for(let z of Z)if(X[z]!==void 0)Y+=X[z];else Y+=20;return Y}var vX=new Map;function yX($){let J=vX.get($);if(J)return J;let Z={group:s2($),variant:n2($)};return vX.set($,Z),Z}function i7($){return[...$].sort((J,Z)=>{let X=yX(J),Y=yX(Z),z=X.group,Q=Y.group;if(z!==Q)return z-Q;let G=X.variant,q=Y.variant;if(G!==q)return G-q;return J.localeCompare(Z)})}var i2=/\b(?:class|className|:class)\s*=\s*(?:"([^"]*?)"|'([^']*?)')/g,t2=/\b(?:class|className|:class)\s*=\s*\{`([^`]*?)`\}/g,e2=/\b(?:clsx|cn|tw|cva|tv)\s*\(\s*(?:"([^"]*?)"|'([^']*?)')/g;function $G($){let J=$.replace(/\[[^\]]*\]/g,"");if(/['"`]/.test(J))return!0;if(/[{}()=]/.test(J))return!0;if(/ \? | && | \|\| /.test(J))return!0;if(/\b(?:true|false|null|undefined|function|return|typeof|instanceof)\b/.test(J))return!0;return!1}function bX($){let J=[];if(!$.includes("class")&&!$.includes("clsx")&&!$.includes("cn(")&&!$.includes("tw(")&&!$.includes("cva(")&&!$.includes("tv("))return J;for(let Z of[i2,t2,e2]){Z.lastIndex=0;let X;while((X=Z.exec($))!==null){let Y=X[1]??X[2]??"";if(!Y.trim())continue;if($G(Y))continue;let z=$.indexOf(Y,X.index);if(z===-1)continue;J.push({value:Y,start:z,end:z+Y.length})}}return J.sort((Z,X)=>Z.start-X.start),J}function kX($){let J=[],Z="",X=0;for(let Y of $)if(Y==="[")X++,Z+=Y;else if(Y==="]")X=Math.max(0,X-1),Z+=Y;else if(/\s/.test(Y)&&X===0){if(Z)J.push(Z),Z=""}else Z+=Y;if(Z)J.push(Z);return J}function fX($){let J=i7($);return $.every((Z,X)=>Z===J[X])}var gX={meta:{docs:"Enforce consistent Tailwind CSS class ordering (layout \u2192 spacing \u2192 typography \u2192 etc.).",recommended:!0,editsStringContent:!0},check:($,J)=>{let Z=[],X=bX($);for(let{value:Y,start:z}of X){let Q=kX(Y);if(Q.length<2)continue;if(!fX(Q)){let G=$.slice(0,z),q=(G.match(/\n/g)??[]).length+1,U=G.lastIndexOf(`
131
131
  `),W=U===-1?z+1:z-U;Z.push({filePath:J.filePath,line:q,column:W,ruleId:"pickier/sort-tailwind-classes",message:`Tailwind classes are not in the recommended order. Expected: "${i7(Q).join(" ")}"`,severity:"warning",help:"Run with --fix to automatically sort Tailwind classes, or reorder them manually."})}}return Z},fix:($)=>{let J=bX($);if(J.length===0)return $;let Z=[...J].reverse(),X=$;for(let{value:Y,start:z,end:Q}of Z){let G=kX(Y);if(G.length<2||fX(G))continue;let q=i7(G).join(" ");X=X.slice(0,z)+q+X.slice(Q)}return X}};var pX={name:"pickier",rules:{"sort-exports":B(OX),"sort-objects":B(IX),"sort-imports":B(I8),"sort-named-imports":B(CX),"sort-heritage-clauses":B(LX),"sort-keys":B(PX),"import-dedupe":B(_X),"import-first":B(AX),"import-named":B(FX),"import-no-cycle":B(jX),"import-no-unresolved":B(DX),"no-import-dist":B(TX),"no-import-node-modules-by-path":B(EX),"no-duplicate-imports":B(NX),"top-level-function":B(SX),"sort-tailwind-classes":gX,"prefer-const":B(L8),"prefer-template":B(P8),"no-unused-vars":B(t0)}};var xX={name:"quality",rules:{"default-case":B(c$),eqeqeq:B(r$),"no-alert":B(s$),"no-await-in-loop":B(n$),"no-caller":B(i$),"no-case-declarations":B(t$),"no-else-return":B(e$),"no-empty":B($8),"no-empty-function":B(Z8),"no-eval":B(J8),"no-extend-native":B(X8),"no-global-assign":B(z8),"no-implied-eval":B(Q8),"no-iterator":B(G8),"no-new":B(q8),"no-new-func":B(U8),"no-new-wrappers":B(W8),"no-octal":B(K8),"no-param-reassign":B(H8),"no-proto":B(V8),"no-return-assign":B(A8),"no-shadow":B(F8),"no-throw-literal":B(w8),"no-use-before-define":B(B8),"no-useless-call":B(M8),"no-with":B(D8),"require-await":B(O8),complexity:B(o$),"max-depth":B(l$),"max-lines-per-function":B(a$),"no-extra-boolean-cast":B(Y8),"no-lonely-if":B(f1),"no-sequences":B(_8),"no-useless-concat":B(j8),"no-useless-escape":B(N8),"no-useless-rename":B(T8),"no-useless-return":B(g1),"no-var":B(E8),"prefer-arrow-callback":B(R8)}};var hX={meta:{docs:"Detects potentially super-linear backtracking patterns in regex literals (heuristic)"},check:($,J)=>{let Z=[],X=/\/[^/\\\n]*(?:\\.[^/\\\n]*)*\//g,Y=(K,H,V)=>{let A=$.slice(0,K),_=(A.match(/\n/g)||[]).length+1,w=K-A.lastIndexOf(`
132
- `);Z.push({filePath:J.filePath,line:_,column:w,ruleId:"no-super-linear-backtracking",message:V,severity:"error"})},z=[],Q=/\/\*[\s\S]*?\*\//g,G;while(G=Q.exec($))z.push({start:G.index,end:G.index+G[0].length});let q=/\/\/[^\n]*/g,U;while(U=q.exec($))z.push({start:U.index,end:U.index+U[0].length});let W;while(W=X.exec($)){let K=W[0],H=W.index;if(z.some((F)=>H>=F.start&&H<F.end))continue;if(H>0){let F=$[H-1];if(F===")"||F==="]"||F==="."||/[\w$]/.test(F))continue;let M=K.slice(1,K.lastIndexOf("/"));if(/^\s+\w/.test(M)&&/\w\s*\)/.test(M))continue}let A=K.slice(1,K.lastIndexOf("/")).replace(/\[.*?\]/g,"");if(A.includes(".+?\\s*")||A.includes("\\s*.+?")||A.includes(".*\\s*")||A.includes("\\s*.*")){Y(H,K.length,"The combination of ' .*' or ' .+?' with '\\s*' can cause super-linear backtracking due to exchangeable characters");continue}let w=A.replace(/\s+/g,"");if(/(?:\.\*\??){2,}/.test(w)||/(?:\.\+\??){2,}/.test(w)||/\.\*\??\.\+\?|\.\+\??\.\*\?/.test(w)){Y(H,K.length,"Multiple adjacent unlimited wildcard quantifiers can cause super-linear backtracking");continue}if(/\((?:\?:)?[^)]*?[+*][^)]*\)\s*[+*]/.test(A.replace(/\\[()]/g,"_"))){Y(H,K.length,"Nested unlimited quantifiers detected (e.g., (.+)+) which can cause catastrophic backtracking");continue}}return Z}};function $G($,J){let Z=J-1;while(Z>=0&&($[Z]===" "||$[Z]==="\t"))Z--;let X=Z>=0?$[Z]:"",Y="=(<>!&|?:;,{[+(~^%*/";if(!(Z<0||Y.includes(X)||/\b(?:return|typeof|void|delete|throw|new|in|of|case)\s*$/.test($.slice(Math.max(0,Z-5),Z+1))))return null;let Q=J+1,G=!1,q=!1,U=-1;while(Q<$.length){let _=$[Q];if(q)q=!1;else if(_==="\\")q=!0;else if(_==="["){if(!G)G=!0}else if(_==="]"){if(G)G=!1}else if(_==="/"&&!G){U=Q;break}else if(_===`
133
- `)break;Q++}if(U<=J)return null;let W=$.slice(J+1,U),K=U+1;while(K<$.length&&/[gimsuvy]/.test($[K]))K++;if(/\\[1-9]/.test(W))return null;let H=0,V=-1,A=!1;for(let _=0;_<W.length;_++){if(W[_]==="\\"){_++;continue}if(W[_]==="["&&!A){A=!0;continue}if(W[_]==="]"&&A){A=!1;continue}if(A)continue;if(W[_]==="("&&W.slice(_+1,_+3)!=="?:"&&W.slice(_+1,_+3)!=="?="&&W.slice(_+1,_+3)!=="?!"&&W.slice(_+1,_+4)!=="?<="&&W.slice(_+1,_+4)!=="?<!"){if(V<0)V=_;H++}}if(H===0)return null;return{patternStart:J,patternEnd:K,pattern:W,capCount:H,firstCapOffset:V}}function ZG($,J,Z){let X=Z;while(X<$.length&&($[X]===" "||$[X]==="\t"))X++;if($[X]==="."){let q=$.slice(X+1,X+20);if(/^test\s*\(/.test(q))return!1;if(/^exec\s*\(/.test(q))return!0}let Y=J-1;while(Y>=0&&($[Y]===" "||$[Y]==="\t"))Y--;if($[Y]==="("){let U=Y-1;while(U>=0&&($[U]===" "||$[U]==="\t"))U--;let W=$.slice(Math.max(0,U-20),U+1);if(/\.match\s*$/.test(W))return!0;if(/\.matchAll\s*$/.test(W))return!0;if(/\.exec\s*$/.test(W))return!0;if(/\.replace\s*$/.test(W))return!0;if(/\.replaceAll\s*$/.test(W))return!0;if(/\.split\s*$/.test(W))return!0;if(/\.search\s*$/.test(W))return!1;if(/\.test\s*$/.test(W))return!1}let z=$.lastIndexOf(`
134
- `,J)+1,G=$.slice(z,J).trim().match(/(?:const|let|var)\s+(\w+)\s*=\s*$/);if(G){let q=G[1],U=$.slice(Z),W=new RegExp(`\\b${q}\\.exec\\s*\\(`),K=new RegExp(`\\b${q}\\.test\\s*\\(`),H=new RegExp(`\\.match(?:All)?\\s*\\(\\s*${q}\\s*\\)`),V=new RegExp(`\\.replace(?:All)?\\s*\\(\\s*${q}`),A=W.test(U),_=H.test(U),w=V.test(U),F=K.test(U);if(A||_||w)return!0;if(F)return!1;return!0}return!0}function JG($,J){let Z=J-1;while(Z>=0&&($[Z]===" "||$[Z]==="\t"))Z--;let X=Z>=0?$[Z]:"",Y="=(<>!&|?:;,{[+(~^%*/";if(!(Z<0||Y.includes(X)||/\b(?:return|typeof|void|delete|throw|new|in|of|case)\s*$/.test($.slice(Math.max(0,Z-5),Z+1))))return J+1;let Q=J+1,G=!1,q=!1;while(Q<$.length){let U=$[Q];if(q)q=!1;else if(U==="\\")q=!0;else if(U==="["){if(!G)G=!0}else if(U==="]"){if(G)G=!1}else if(U==="/"&&!G){Q++;while(Q<$.length&&/[gimsuvy]/.test($[Q]))Q++;return Q}else if(U===`
135
- `)break;Q++}return J+1}function XG($,J){let Z=[],X=J.filePath,Y=0;while(Y<$.length){let z=$[Y];if(z==="/"&&$[Y+1]==="/"){while(Y<$.length&&$[Y]!==`
136
- `)Y++;continue}if(z==="/"&&$[Y+1]==="*"){Y+=2;while(Y<$.length-1&&!($[Y]==="*"&&$[Y+1]==="/"))Y++;Y+=2;continue}if(z==="'"||z==='"'||z==="`"){let Q=z;Y++;while(Y<$.length){if($[Y]==="\\"){Y+=2;continue}if($[Y]===Q){Y++;break}Y++}continue}if(z==="/"){let Q=$G($,Y);if(!Q){let G=JG($,Y);if(G>Y+1)Y=G;else Y++;continue}if(!ZG($,Q.patternStart,Q.patternEnd)){let G=Q.patternStart+1+(Q.firstCapOffset>=0?Q.firstCapOffset:0),q=$.slice(0,G),U=(q.match(/\r?\n/g)||[]).length+1,W=G-(q.lastIndexOf(`
137
- `)+1)+1;Z.push({filePath:X,line:U,column:W,ruleId:"regexp/no-unused-capturing-group",message:"Unused capturing group in regular expression; use non-capturing group (?:...) instead",severity:"error"})}Y=Q.patternEnd;continue}Y++}return Z}var uX={meta:{docs:"Flags regex literals with unused capturing groups (context-aware)",recommended:!1},check($,J){return XG($,J)}};var mX={meta:{docs:"Disallow lazy quantifiers that don't affect the matching behavior",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(z.trim().startsWith("//")||z.trim().startsWith("/*")||z.trim().startsWith("*"))continue;let Q=/\/(?![/*])([^/\n\r\\]|\\.)+\/[gimsuvy]*/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[0],U=q.slice(1,q.lastIndexOf("/"));if(/[+*?]\?\$$/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:G.index+U.search(/[+*?]\?\$$/)+2,ruleId:"regexp/no-useless-lazy",message:"Lazy quantifier is useless before end-of-string anchor",severity:"error"});if(/[+*?]\?$/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:G.index+U.length-1,ruleId:"regexp/no-useless-lazy",message:"Lazy quantifier is useless at the end of the pattern",severity:"error"})}}return Z}};var dX={name:"regexp",rules:{"no-super-linear-backtracking":B(hX),"no-unused-capturing-group":B(uX),"no-useless-lazy":B(mX)}};var oX={meta:{docs:"Use $() instead of backticks for command substitution",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="",Q=!1;for(let G=0;G<X.length;G++){let q=X[G];if(Y){if(q.trim()===z)Y=!1;continue}let U=q.match(/<<-?\s*['"]?(\w+)['"]?/);if(U)Y=!0,z=U[1];if(q.replace(/^\s+/,"").startsWith("#"))continue;Q=!1;for(let K=0;K<q.length;K++){let H=q[K];if(H==="#"&&!Q)break;if(H==="\\"){K++;continue}if(H==="'"){Q=!Q;continue}if(Q)continue;if(H==="`"){Z.push({filePath:J.filePath,line:G+1,column:K+1,ruleId:"shell/command-substitution",message:"Use $(...) instead of backticks for command substitution",severity:"error",help:"Replace `cmd` with $(cmd) for better readability and nesting support"});for(K++;K<q.length&&q[K]!=="`";K++)if(q[K]==="\\")K++}}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[],Y=!1,z="";for(let Q of Z){if(Y){if(X.push(Q),Q.trim()===z)Y=!1;continue}let G=Q.match(/<<-?\s*['"]?(\w+)['"]?/);if(G)Y=!0,z=G[1];let q="",U=!1,W=0;while(W<Q.length){let K=Q[W];if(K==="#"&&!U){q+=Q.slice(W);break}if(K==="\\"){q+=Q.slice(W,W+2),W+=2;continue}if(K==="'"){U=!U,q+=K,W++;continue}if(U){q+=K,W++;continue}if(K==="`"){let H="";W++;while(W<Q.length&&Q[W]!=="`")if(Q[W]==="\\")H+=Q[W+1]||"",W+=2;else H+=Q[W],W++;W++,q+=`$(${H})`}else q+=K,W++}X.push(q)}return X.join(`
138
- `)}};var cX={meta:{docs:"Require error handling after cd commands",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];let U=G.replace(/^\s+/,"");if(U.startsWith("#"))continue;let W=U.match(/^cd\s+/);if(!W)continue;let K=/\|\||&&/.test(G),H=/^\s*(?:if|elif|while|until)\s/.test(U)||/\bif\s+cd\b/.test(G),V=/\(.*\bcd\b.*\)/.test(G);if(!K&&!H&&!V)Z.push({filePath:J.filePath,line:Q+1,column:W.index+1,ruleId:"shell/no-cd-without-check",message:"cd without error handling \u2014 if it fails, subsequent commands run in the wrong directory",severity:"warning",help:"Use: cd dir || exit 1 (or || return 1 inside functions)"})}return Z}};var rX={meta:{docs:"Disallow use of eval in shell scripts",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;if(G.match(/(?:^|[;&|]\s*|^\s+)eval\s/)){let K=G.indexOf("eval");Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/no-eval",message:"Avoid using eval \u2014 it re-parses arguments and can lead to code injection",severity:"error",help:"Refactor to avoid eval. Consider using arrays for dynamic commands or indirect variable references with ${!var}"})}}return Z}};var lX={meta:{docs:"Flag exit inside subshells where it only exits the subshell",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="",Q=0;for(let G=0;G<X.length;G++){let q=X[G];if(Y){if(q.trim()===z)Y=!1;continue}let U=q.match(/<<-?\s*['"]?(\w+)['"]?/);if(U)Y=!0,z=U[1];if(q.replace(/^\s+/,"").startsWith("#"))continue;let K=!1,H=!1;for(let V=0;V<q.length;V++){let A=q[V];if(A==="#"&&!K&&!H)break;if(A==="\\"&&!K){V++;continue}if(A==="'"&&!H){K=!K;continue}if(A==='"'&&!K){H=!H;continue}if(!K&&!H){if(A==="("&&V>0&&q[V-1]!=="$"&&q[V+1]!=="(")Q++;else if(A==="("&&V===0&&q[V+1]!=="(")Q++;else if(A===")"&&Q>0&&(V+1>=q.length||q[V+1]!==")"))Q--}}if(Q>0){let V=q.match(/\bexit\b/);if(V)Z.push({filePath:J.filePath,line:G+1,column:V.index+1,ruleId:"shell/no-exit-in-subshell",message:"exit inside a subshell only exits the subshell, not the script",severity:"warning",help:"Restructure to avoid subshells, or use return if inside a function"})}if(Q===0){let V=q.match(/(?<!\$)\((?!\()([^)]*\bexit\b[^)]*)\)(?!\))/);if(V){let A=q.indexOf("exit",V.index);Z.push({filePath:J.filePath,line:G+1,column:A+1,ruleId:"shell/no-exit-in-subshell",message:"exit inside a subshell only exits the subshell, not the script",severity:"warning",help:"Restructure to avoid subshells, or use return if inside a function"})}}}return Z}};var aX={meta:{docs:"Disallow parsing ls output \u2014 use globs or find instead",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;if(G.match(/\bls\b[^|]*\|/)){let V=G.indexOf("ls");Z.push({filePath:J.filePath,line:Q+1,column:V+1,ruleId:"shell/no-ls-parsing",message:"Don't parse ls output \u2014 filenames can contain special characters",severity:"warning",help:'Use globs (for f in *.txt), find (find . -name "*.txt"), or stat instead'});continue}let K=G.match(/\$\(\s*ls\b/);if(K){let V=K.index+1;Z.push({filePath:J.filePath,line:Q+1,column:V,ruleId:"shell/no-ls-parsing",message:"Don't use ls in command substitution \u2014 use globs instead",severity:"warning",help:"Replace $(ls *.txt) with glob patterns: for f in *.txt; do ...; done"});continue}let H=G.match(/`\s*ls\b/);if(H){let V=H.index+1;Z.push({filePath:J.filePath,line:Q+1,column:V,ruleId:"shell/no-ls-parsing",message:"Don't use ls in command substitution \u2014 use globs instead",severity:"warning",help:"Replace `ls` with glob patterns"})}}return Z}};var sX={meta:{docs:"Detect useless use of cat (UUOC)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=G.match(/\bcat\s+(["']?[\w.\/~${}*?-]+["']?)\s*\|/);if(W){let K=G.indexOf("cat");Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/no-useless-cat",message:`Useless use of cat \u2014 pipe the file directly instead of \`cat ${W[1]} | ...\``,severity:"warning",help:`Use \`cmd < ${W[1]}\` or pass the file as an argument to the command`})}}return Z}};var nX={meta:{docs:"Flag variables inside single quotes where they won't expand",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=!1,K=!1,H=-1;for(let V=0;V<G.length;V++){let A=G[V];if(A==="#"&&!W&&!K)break;if(A==="\\"&&!W){V++;continue}if(A==='"'&&!W){K=!K;continue}if(A==="'"&&!K)if(!W)W=!0,H=V;else{let w=G.slice(H+1,V).match(/\$(?:[A-Za-z_]\w*|\{[^}]+\}|\([^)]*\))/);if(w)Z.push({filePath:J.filePath,line:Q+1,column:H+1+w.index+1,ruleId:"shell/no-variable-in-single-quotes",message:`Variable ${w[0]} is inside single quotes and won't be expanded`,severity:"warning",help:`Use double quotes if you want variable expansion: "..." instead of '...'`});W=!1}}}return Z}};var YG=[/^\s*(?:local|export|declare|typeset|readonly)\s+/,/\[\[.*\]\]/,/\(\(.*\)\)/],t7=/^\$(?:\{[A-Za-z_]\w*(?:[:#%\/][^}]*)?\}|[A-Za-z_]\w*)/,iX={meta:{docs:"Quote variable expansions to prevent word splitting and globbing",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q){if(Y=!0,z=q,new RegExp(`<<-?\\s*['"]${q}['"]`).test(G))continue}if(G.replace(/^\s+/,"").startsWith("#"))continue;if(YG.some((H)=>H.test(G)))continue;let W=[],K=0;while(K<G.length){let H=W[W.length-1];if(H==="squote"){if(G[K]==="'")W.pop();K++;continue}if(G[K]==="\\"&&K+1<G.length){K+=2;continue}if(H==="dquote"){let A=G[K];if(A==='"'){W.pop(),K++;continue}if(A==="$"&&G[K+1]==="("&&G[K+2]==="("){W.push("arith"),K+=3;continue}if(A==="$"&&G[K+1]==="("){W.push("subshell"),K+=2;continue}if(A==="$"){let _=G.slice(K).match(t7);if(_){K+=_[0].length;continue}}K++;continue}if(H==="arith"){let A=G[K];if(A===")"&&G[K+1]===")"){W.pop(),K+=2;continue}if(A==="$"){let _=G.slice(K).match(t7);if(_){K+=_[0].length;continue}}K++;continue}let V=G[K];if(V==="#"&&(K===0||/\s/.test(G[K-1])))break;if(V==="'"){W.push("squote"),K++;continue}if(V==='"'){W.push("dquote"),K++;continue}if(V==="$"&&G[K+1]==="("&&G[K+2]==="("){W.push("arith"),K+=3;continue}if(V==="$"&&G[K+1]==="("){W.push("subshell"),K+=2;continue}if(V===")"&&H==="subshell"){W.pop(),K++;continue}if(V==="$"){let A=G.slice(K).match(t7);if(A){let _=A[0];if(!/^\$[?!#@*0-9-]/.test(_))Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/quote-variables",message:`Unquoted variable ${_} \u2014 use "${_}" to prevent word splitting`,severity:"warning",help:`Wrap in double quotes: "${_}"`});K+=_.length;continue}}K++}}return Z}};var tX={meta:{docs:"Enforce consistent function declaration style",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];let U=G.replace(/^\s+/,"");if(U.startsWith("#"))continue;let W=U.match(/^function\s+(\w+)\s*(?:\(\s*\))?\s*\{?\s*$/);if(W){let K=W[1],H=G.indexOf("function");Z.push({filePath:J.filePath,line:Q+1,column:H+1,ruleId:"shell/function-style",message:`Use \`${K}() {\` instead of \`function ${K}\` \u2014 POSIX-compatible style`,severity:"warning",help:`Replace with: ${K}() {`})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.match(/^(\s*)function\s+(\w+)\s*(?:\(\s*\))?\s*(\{?\s*)$/);if(Y){let[,z,Q,G]=Y;Z.push(`${z}${Q}() ${G||"{"}`)}else Z.push(X)}return Z.join(`
132
+ `);Z.push({filePath:J.filePath,line:_,column:w,ruleId:"no-super-linear-backtracking",message:V,severity:"error"})},z=[],Q=/\/\*[\s\S]*?\*\//g,G;while(G=Q.exec($))z.push({start:G.index,end:G.index+G[0].length});let q=/\/\/[^\n]*/g,U;while(U=q.exec($))z.push({start:U.index,end:U.index+U[0].length});let W;while(W=X.exec($)){let K=W[0],H=W.index;if(z.some((F)=>H>=F.start&&H<F.end))continue;if(H>0){let F=$[H-1];if(F===")"||F==="]"||F==="."||/[\w$]/.test(F))continue;let M=K.slice(1,K.lastIndexOf("/"));if(/^\s+\w/.test(M)&&/\w\s*\)/.test(M))continue}let A=K.slice(1,K.lastIndexOf("/")).replace(/\[.*?\]/g,"");if(A.includes(".+?\\s*")||A.includes("\\s*.+?")||A.includes(".*\\s*")||A.includes("\\s*.*")){Y(H,K.length,"The combination of ' .*' or ' .+?' with '\\s*' can cause super-linear backtracking due to exchangeable characters");continue}let w=A.replace(/\s+/g,"");if(/(?:\.\*\??){2,}/.test(w)||/(?:\.\+\??){2,}/.test(w)||/\.\*\??\.\+\?|\.\+\??\.\*\?/.test(w)){Y(H,K.length,"Multiple adjacent unlimited wildcard quantifiers can cause super-linear backtracking");continue}if(/\((?:\?:)?[^)]*?[+*][^)]*\)\s*[+*]/.test(A.replace(/\\[()]/g,"_"))){Y(H,K.length,"Nested unlimited quantifiers detected (e.g., (.+)+) which can cause catastrophic backtracking");continue}}return Z}};function ZG($,J){let Z=J-1;while(Z>=0&&($[Z]===" "||$[Z]==="\t"))Z--;let X=Z>=0?$[Z]:"",Y="=(<>!&|?:;,{[+(~^%*/";if(!(Z<0||Y.includes(X)||/\b(?:return|typeof|void|delete|throw|new|in|of|case)\s*$/.test($.slice(Math.max(0,Z-5),Z+1))))return null;let Q=J+1,G=!1,q=!1,U=-1;while(Q<$.length){let _=$[Q];if(q)q=!1;else if(_==="\\")q=!0;else if(_==="["){if(!G)G=!0}else if(_==="]"){if(G)G=!1}else if(_==="/"&&!G){U=Q;break}else if(_===`
133
+ `)break;Q++}if(U<=J)return null;let W=$.slice(J+1,U),K=U+1;while(K<$.length&&/[gimsuvy]/.test($[K]))K++;if(/\\[1-9]/.test(W))return null;let H=0,V=-1,A=!1;for(let _=0;_<W.length;_++){if(W[_]==="\\"){_++;continue}if(W[_]==="["&&!A){A=!0;continue}if(W[_]==="]"&&A){A=!1;continue}if(A)continue;if(W[_]==="("&&W.slice(_+1,_+3)!=="?:"&&W.slice(_+1,_+3)!=="?="&&W.slice(_+1,_+3)!=="?!"&&W.slice(_+1,_+4)!=="?<="&&W.slice(_+1,_+4)!=="?<!"){if(V<0)V=_;H++}}if(H===0)return null;return{patternStart:J,patternEnd:K,pattern:W,capCount:H,firstCapOffset:V}}function JG($,J,Z){let X=Z;while(X<$.length&&($[X]===" "||$[X]==="\t"))X++;if($[X]==="."){let q=$.slice(X+1,X+20);if(/^test\s*\(/.test(q))return!1;if(/^exec\s*\(/.test(q))return!0}let Y=J-1;while(Y>=0&&($[Y]===" "||$[Y]==="\t"))Y--;if($[Y]==="("){let U=Y-1;while(U>=0&&($[U]===" "||$[U]==="\t"))U--;let W=$.slice(Math.max(0,U-20),U+1);if(/\.match\s*$/.test(W))return!0;if(/\.matchAll\s*$/.test(W))return!0;if(/\.exec\s*$/.test(W))return!0;if(/\.replace\s*$/.test(W))return!0;if(/\.replaceAll\s*$/.test(W))return!0;if(/\.split\s*$/.test(W))return!0;if(/\.search\s*$/.test(W))return!1;if(/\.test\s*$/.test(W))return!1}let z=$.lastIndexOf(`
134
+ `,J)+1,G=$.slice(z,J).trim().match(/(?:const|let|var)\s+(\w+)\s*=\s*$/);if(G){let q=G[1],U=$.slice(Z),W=new RegExp(`\\b${q}\\.exec\\s*\\(`),K=new RegExp(`\\b${q}\\.test\\s*\\(`),H=new RegExp(`\\.match(?:All)?\\s*\\(\\s*${q}\\s*\\)`),V=new RegExp(`\\.replace(?:All)?\\s*\\(\\s*${q}`),A=W.test(U),_=H.test(U),w=V.test(U),F=K.test(U);if(A||_||w)return!0;if(F)return!1;return!0}return!0}function XG($,J){let Z=J-1;while(Z>=0&&($[Z]===" "||$[Z]==="\t"))Z--;let X=Z>=0?$[Z]:"",Y="=(<>!&|?:;,{[+(~^%*/";if(!(Z<0||Y.includes(X)||/\b(?:return|typeof|void|delete|throw|new|in|of|case)\s*$/.test($.slice(Math.max(0,Z-5),Z+1))))return J+1;let Q=J+1,G=!1,q=!1;while(Q<$.length){let U=$[Q];if(q)q=!1;else if(U==="\\")q=!0;else if(U==="["){if(!G)G=!0}else if(U==="]"){if(G)G=!1}else if(U==="/"&&!G){Q++;while(Q<$.length&&/[gimsuvy]/.test($[Q]))Q++;return Q}else if(U===`
135
+ `)break;Q++}return J+1}function YG($,J){let Z=[],X=J.filePath,Y=0;while(Y<$.length){let z=$[Y];if(z==="/"&&$[Y+1]==="/"){while(Y<$.length&&$[Y]!==`
136
+ `)Y++;continue}if(z==="/"&&$[Y+1]==="*"){Y+=2;while(Y<$.length-1&&!($[Y]==="*"&&$[Y+1]==="/"))Y++;Y+=2;continue}if(z==="'"||z==='"'||z==="`"){let Q=z;Y++;while(Y<$.length){if($[Y]==="\\"){Y+=2;continue}if($[Y]===Q){Y++;break}Y++}continue}if(z==="/"){let Q=ZG($,Y);if(!Q){let G=XG($,Y);if(G>Y+1)Y=G;else Y++;continue}if(!JG($,Q.patternStart,Q.patternEnd)){let G=Q.patternStart+1+(Q.firstCapOffset>=0?Q.firstCapOffset:0),q=$.slice(0,G),U=(q.match(/\r?\n/g)||[]).length+1,W=G-(q.lastIndexOf(`
137
+ `)+1)+1;Z.push({filePath:X,line:U,column:W,ruleId:"regexp/no-unused-capturing-group",message:"Unused capturing group in regular expression; use non-capturing group (?:...) instead",severity:"error"})}Y=Q.patternEnd;continue}Y++}return Z}var uX={meta:{docs:"Flags regex literals with unused capturing groups (context-aware)",recommended:!1},check($,J){return YG($,J)}};var mX={meta:{docs:"Disallow lazy quantifiers that don't affect the matching behavior",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(z.trim().startsWith("//")||z.trim().startsWith("/*")||z.trim().startsWith("*"))continue;let Q=/\/(?![/*])([^/\n\r\\]|\\.)+\/[gimsuvy]*/g,G;for(G=Q.exec(z);G!==null;G=Q.exec(z)){let q=G[0],U=q.slice(1,q.lastIndexOf("/"));if(/[+*?]\?\$$/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:G.index+U.search(/[+*?]\?\$$/)+2,ruleId:"regexp/no-useless-lazy",message:"Lazy quantifier is useless before end-of-string anchor",severity:"error"});if(/[+*?]\?$/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:G.index+U.length-1,ruleId:"regexp/no-useless-lazy",message:"Lazy quantifier is useless at the end of the pattern",severity:"error"})}}return Z}};var dX={name:"regexp",rules:{"no-super-linear-backtracking":B(hX),"no-unused-capturing-group":B(uX),"no-useless-lazy":B(mX)}};var oX={meta:{docs:"Use $() instead of backticks for command substitution",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="",Q=!1;for(let G=0;G<X.length;G++){let q=X[G];if(Y){if(q.trim()===z)Y=!1;continue}let U=q.match(/<<-?\s*['"]?(\w+)['"]?/);if(U)Y=!0,z=U[1];if(q.replace(/^\s+/,"").startsWith("#"))continue;Q=!1;for(let K=0;K<q.length;K++){let H=q[K];if(H==="#"&&!Q)break;if(H==="\\"){K++;continue}if(H==="'"){Q=!Q;continue}if(Q)continue;if(H==="`"){Z.push({filePath:J.filePath,line:G+1,column:K+1,ruleId:"shell/command-substitution",message:"Use $(...) instead of backticks for command substitution",severity:"error",help:"Replace `cmd` with $(cmd) for better readability and nesting support"});for(K++;K<q.length&&q[K]!=="`";K++)if(q[K]==="\\")K++}}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[],Y=!1,z="";for(let Q of Z){if(Y){if(X.push(Q),Q.trim()===z)Y=!1;continue}let G=Q.match(/<<-?\s*['"]?(\w+)['"]?/);if(G)Y=!0,z=G[1];let q="",U=!1,W=0;while(W<Q.length){let K=Q[W];if(K==="#"&&!U){q+=Q.slice(W);break}if(K==="\\"){q+=Q.slice(W,W+2),W+=2;continue}if(K==="'"){U=!U,q+=K,W++;continue}if(U){q+=K,W++;continue}if(K==="`"){let H="";W++;while(W<Q.length&&Q[W]!=="`")if(Q[W]==="\\")H+=Q[W+1]||"",W+=2;else H+=Q[W],W++;W++,q+=`$(${H})`}else q+=K,W++}X.push(q)}return X.join(`
138
+ `)}};var cX={meta:{docs:"Require error handling after cd commands",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];let U=G.replace(/^\s+/,"");if(U.startsWith("#"))continue;let W=U.match(/^cd\s+/);if(!W)continue;let K=/\|\||&&/.test(G),H=/^\s*(?:if|elif|while|until)\s/.test(U)||/\bif\s+cd\b/.test(G),V=/\(.*\bcd\b.*\)/.test(G);if(!K&&!H&&!V)Z.push({filePath:J.filePath,line:Q+1,column:W.index+1,ruleId:"shell/no-cd-without-check",message:"cd without error handling \u2014 if it fails, subsequent commands run in the wrong directory",severity:"warning",help:"Use: cd dir || exit 1 (or || return 1 inside functions)"})}return Z}};var rX={meta:{docs:"Disallow use of eval in shell scripts",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;if(G.match(/(?:^|[;&|]\s*|^\s+)eval\s/)){let K=G.indexOf("eval");Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/no-eval",message:"Avoid using eval \u2014 it re-parses arguments and can lead to code injection",severity:"error",help:"Refactor to avoid eval. Consider using arrays for dynamic commands or indirect variable references with ${!var}"})}}return Z}};var lX={meta:{docs:"Flag exit inside subshells where it only exits the subshell",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="",Q=0;for(let G=0;G<X.length;G++){let q=X[G];if(Y){if(q.trim()===z)Y=!1;continue}let U=q.match(/<<-?\s*['"]?(\w+)['"]?/);if(U)Y=!0,z=U[1];if(q.replace(/^\s+/,"").startsWith("#"))continue;let K=!1,H=!1;for(let V=0;V<q.length;V++){let A=q[V];if(A==="#"&&!K&&!H)break;if(A==="\\"&&!K){V++;continue}if(A==="'"&&!H){K=!K;continue}if(A==='"'&&!K){H=!H;continue}if(!K&&!H){if(A==="("&&V>0&&q[V-1]!=="$"&&q[V+1]!=="(")Q++;else if(A==="("&&V===0&&q[V+1]!=="(")Q++;else if(A===")"&&Q>0&&(V+1>=q.length||q[V+1]!==")"))Q--}}if(Q>0){let V=q.match(/\bexit\b/);if(V)Z.push({filePath:J.filePath,line:G+1,column:V.index+1,ruleId:"shell/no-exit-in-subshell",message:"exit inside a subshell only exits the subshell, not the script",severity:"warning",help:"Restructure to avoid subshells, or use return if inside a function"})}if(Q===0){let V=q.match(/(?<!\$)\((?!\()([^)]*\bexit\b[^)]*)\)(?!\))/);if(V){let A=q.indexOf("exit",V.index);Z.push({filePath:J.filePath,line:G+1,column:A+1,ruleId:"shell/no-exit-in-subshell",message:"exit inside a subshell only exits the subshell, not the script",severity:"warning",help:"Restructure to avoid subshells, or use return if inside a function"})}}}return Z}};var aX={meta:{docs:"Disallow parsing ls output \u2014 use globs or find instead",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;if(G.match(/\bls\b[^|]*\|/)){let V=G.indexOf("ls");Z.push({filePath:J.filePath,line:Q+1,column:V+1,ruleId:"shell/no-ls-parsing",message:"Don't parse ls output \u2014 filenames can contain special characters",severity:"warning",help:'Use globs (for f in *.txt), find (find . -name "*.txt"), or stat instead'});continue}let K=G.match(/\$\(\s*ls\b/);if(K){let V=K.index+1;Z.push({filePath:J.filePath,line:Q+1,column:V,ruleId:"shell/no-ls-parsing",message:"Don't use ls in command substitution \u2014 use globs instead",severity:"warning",help:"Replace $(ls *.txt) with glob patterns: for f in *.txt; do ...; done"});continue}let H=G.match(/`\s*ls\b/);if(H){let V=H.index+1;Z.push({filePath:J.filePath,line:Q+1,column:V,ruleId:"shell/no-ls-parsing",message:"Don't use ls in command substitution \u2014 use globs instead",severity:"warning",help:"Replace `ls` with glob patterns"})}}return Z}};var sX={meta:{docs:"Detect useless use of cat (UUOC)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=G.match(/\bcat\s+(["']?[\w.\/~${}*?-]+["']?)\s*\|/);if(W){let K=G.indexOf("cat");Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/no-useless-cat",message:`Useless use of cat \u2014 pipe the file directly instead of \`cat ${W[1]} | ...\``,severity:"warning",help:`Use \`cmd < ${W[1]}\` or pass the file as an argument to the command`})}}return Z}};var nX={meta:{docs:"Flag variables inside single quotes where they won't expand",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=!1,K=!1,H=-1;for(let V=0;V<G.length;V++){let A=G[V];if(A==="#"&&!W&&!K)break;if(A==="\\"&&!W){V++;continue}if(A==='"'&&!W){K=!K;continue}if(A==="'"&&!K)if(!W)W=!0,H=V;else{let w=G.slice(H+1,V).match(/\$(?:[A-Za-z_]\w*|\{[^}]+\}|\([^)]*\))/);if(w)Z.push({filePath:J.filePath,line:Q+1,column:H+1+w.index+1,ruleId:"shell/no-variable-in-single-quotes",message:`Variable ${w[0]} is inside single quotes and won't be expanded`,severity:"warning",help:`Use double quotes if you want variable expansion: "..." instead of '...'`});W=!1}}}return Z}};var zG=[/^\s*(?:local|export|declare|typeset|readonly)\s+/,/\[\[.*\]\]/,/\(\(.*\)\)/],t7=/^\$(?:\{[A-Za-z_]\w*(?:[:#%\/][^}]*)?\}|[A-Za-z_]\w*)/,iX={meta:{docs:"Quote variable expansions to prevent word splitting and globbing",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q){if(Y=!0,z=q,new RegExp(`<<-?\\s*['"]${q}['"]`).test(G))continue}if(G.replace(/^\s+/,"").startsWith("#"))continue;if(zG.some((H)=>H.test(G)))continue;let W=[],K=0;while(K<G.length){let H=W[W.length-1];if(H==="squote"){if(G[K]==="'")W.pop();K++;continue}if(G[K]==="\\"&&K+1<G.length){K+=2;continue}if(H==="dquote"){let A=G[K];if(A==='"'){W.pop(),K++;continue}if(A==="$"&&G[K+1]==="("&&G[K+2]==="("){W.push("arith"),K+=3;continue}if(A==="$"&&G[K+1]==="("){W.push("subshell"),K+=2;continue}if(A==="$"){let _=G.slice(K).match(t7);if(_){K+=_[0].length;continue}}K++;continue}if(H==="arith"){let A=G[K];if(A===")"&&G[K+1]===")"){W.pop(),K+=2;continue}if(A==="$"){let _=G.slice(K).match(t7);if(_){K+=_[0].length;continue}}K++;continue}let V=G[K];if(V==="#"&&(K===0||/\s/.test(G[K-1])))break;if(V==="'"){W.push("squote"),K++;continue}if(V==='"'){W.push("dquote"),K++;continue}if(V==="$"&&G[K+1]==="("&&G[K+2]==="("){W.push("arith"),K+=3;continue}if(V==="$"&&G[K+1]==="("){W.push("subshell"),K+=2;continue}if(V===")"&&H==="subshell"){W.pop(),K++;continue}if(V==="$"){let A=G.slice(K).match(t7);if(A){let _=A[0];if(!/^\$[?!#@*0-9-]/.test(_))Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/quote-variables",message:`Unquoted variable ${_} \u2014 use "${_}" to prevent word splitting`,severity:"warning",help:`Wrap in double quotes: "${_}"`});K+=_.length;continue}}K++}}return Z}};var tX={meta:{docs:"Enforce consistent function declaration style",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];let U=G.replace(/^\s+/,"");if(U.startsWith("#"))continue;let W=U.match(/^function\s+(\w+)\s*(?:\(\s*\))?\s*\{?\s*$/);if(W){let K=W[1],H=G.indexOf("function");Z.push({filePath:J.filePath,line:Q+1,column:H+1,ruleId:"shell/function-style",message:`Use \`${K}() {\` instead of \`function ${K}\` \u2014 POSIX-compatible style`,severity:"warning",help:`Replace with: ${K}() {`})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.match(/^(\s*)function\s+(\w+)\s*(?:\(\s*\))?\s*(\{?\s*)$/);if(Y){let[,z,Q,G]=Y;Z.push(`${z}${Q}() ${G||"{"}`)}else Z.push(X)}return Z.join(`
139
139
  `)}};function eX($,J){if(/^then\b/.test($)||/^do\b/.test($)||/^else\b/.test($))return!0;if(/^if\b/.test($)&&/\bthen\s*$/.test($))return!0;if(/^elif\b/.test($)&&/\bthen\s*$/.test($))return!0;if(/^(?:while|for|until)\b/.test($)&&/\bdo\s*$/.test($))return!0;if(/^case\b/.test($)&&/\bin\s*$/.test($))return!0;if(J&&/\)\s*$/.test($)&&!/\$\(/.test($)&&!/^\s*\(/.test($)&&!$.startsWith("#"))return!0;if(/\{\s*$/.test($)&&!$.startsWith("#"))return!0;return!1}function $5($){return/^(?:fi|done|esac|elif|else)\b/.test($)||/^\}/.test($)||/^;[;&]\s*$/.test($)}var Z5={meta:{docs:"Enforce consistent indentation in shell scripts",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=J.config.format.indent||2,z=0,Q=!1,G="",q=!1,U=0;for(let W=0;W<X.length;W++){let K=X[W];if(/^\s*$/.test(K))continue;if(Q){if(K.trim()===G)Q=!1;continue}let H=K.match(/<<-?\s*['"]?(\w+)['"]?/);if(H)Q=!0,G=H[1];let V=K.replace(/^\s+/,"");if(W===0&&V.startsWith("#!"))continue;if(/^case\b/.test(V)&&/\bin\s*$/.test(V))U++,q=!0;if(/^esac\b/.test(V)){if(U=Math.max(0,U-1),U===0)q=!1}if($5(V))z=Math.max(0,z-1);let A=0;for(let w=0;w<K.length;w++)if(K[w]===" ")A++;else if(K[w]==="\t")A+=Y;else break;let _=z*Y;if(A!==_&&!V.startsWith("#"))Z.push({filePath:J.filePath,line:W+1,column:1,ruleId:"shell/indent",message:`Expected ${_} spaces of indentation, found ${A}`,severity:"warning"});if(eX(V,q))z++}return Z},fix($,J){let Z=$.split(/\r?\n/),X=J.config.format.indent||2,Y=J.config.format.indentStyle==="tabs",z=[],Q=0,G=!1,q="",U=!1,W=0;for(let K=0;K<Z.length;K++){let H=Z[K];if(/^\s*$/.test(H)){z.push("");continue}if(G){if(z.push(H),H.trim()===q)G=!1;continue}let V=H.match(/<<-?\s*['"]?(\w+)['"]?/);if(V)G=!0,q=V[1];let A=H.replace(/^\s+/,"").trimEnd();if(K===0&&A.startsWith("#!")){z.push(A);continue}if(/^case\b/.test(A)&&/\bin\s*$/.test(A))W++,U=!0;if(/^esac\b/.test(A)){if(W=Math.max(0,W-1),W===0)U=!1}if($5(A))Q=Math.max(0,Q-1);let _=Y?"\t".repeat(Q):" ".repeat(Q*X);if(z.push(_+A),eX(A,U))Q++}return z.join(`
140
140
  `)}};var J5={meta:{docs:"Enforce spacing around shell keywords (if, then, do, else, fi, etc.)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=f0(G),K=W.match(/;(?![;\s$])\S/);if(K)Z.push({filePath:J.filePath,line:Q+1,column:(K.index||0)+1,ruleId:"shell/keyword-spacing",message:"Missing space after semicolon",severity:"warning"});let H=W.match(/\w(then|do|else|elif|fi|done|esac)\b/);if(H&&!/[a-z]/.test(W[H.index])){let V=H[1],A=W[H.index];if(A!==" "&&A!=="\t"&&A!==";")Z.push({filePath:J.filePath,line:Q+1,column:(H.index||0)+2,ruleId:"shell/keyword-spacing",message:`Missing space before keyword '${V}'`,severity:"warning"})}}return Z}};var X5={meta:{docs:"Disallow unnecessary trailing semicolons",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];let U=G.replace(/^\s+/,"").trimEnd();if(U.startsWith("#"))continue;if(/;;\s*$/.test(U))continue;if(/\bfor\b/.test(U)||/\bwhile\b/.test(U)||/\buntil\b/.test(U))continue;if(/;\s*(?:then|do|else|elif|fi|done|esac)\s*$/.test(U))continue;if(/;\s*$/.test(U)){let W=G.lastIndexOf(";");Z.push({filePath:J.filePath,line:Q+1,column:W+1,ruleId:"shell/no-trailing-semicolons",message:"Unnecessary trailing semicolon",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=!1,Y="";for(let z of J){if(X){if(Z.push(z),z.trim()===Y)X=!1;continue}let Q=z.match(/<<-?\s*['"]?(\w+)['"]?/);if(Q)X=!0,Y=Q[1];let G=z.replace(/^\s+/,"").trimEnd();if(G.startsWith("#")||/;;\s*$/.test(G)||/\bfor\b/.test(G)||/\bwhile\b/.test(G)||/\buntil\b/.test(G)||/;\s*(?:then|do|else|elif|fi|done|esac)\s*$/.test(G)){Z.push(z);continue}Z.push(z.replace(/;\s*$/,""))}return Z.join(`
141
141
  `)}};var Y5={meta:{docs:"Disallow trailing whitespace",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q)Y=!0,z=q;if(/[ \t]+$/.test(G)){let U=G.match(/[ \t]+$/);Z.push({filePath:J.filePath,line:Q+1,column:U.index+1,ruleId:"shell/no-trailing-whitespace",message:"Trailing whitespace",severity:"error"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=!1,X="";return J.map((z)=>{if(Z){if(z.trim()===X)Z=!1;return z}let Q=P0(z);if(Q)Z=!0,X=Q;return z.replace(/[ \t]+$/,"")}).join(`
142
- `)}};var z5={meta:{docs:"Enforce spaces inside [ ] and [[ ]] test expressions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=f0(G);for(let K of zG(W,Q+1,J.filePath))Z.push(K)}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=!1,Y="";for(let z of J){if(X){if(z.trim()===Y)X=!1;Z.push(z);continue}let Q=P0(z);if(Q){X=!0,Y=Q,Z.push(z);continue}if(z.replace(/^\s+/,"").startsWith("#")){Z.push(z);continue}Z.push(QG(z))}return Z.join(`
143
- `)}};function zG($,J,Z){let X=[],Y=/\[\[(?!\s|\]|$)/g;for(let Q of $.matchAll(Y))X.push({filePath:Z,line:J,column:(Q.index??0)+1,ruleId:"shell/operator-spacing",message:"Missing space after [[",severity:"warning"});let z=/(?<!\s|\[)\]\]/g;for(let Q of $.matchAll(z))X.push({filePath:Z,line:J,column:(Q.index??0)+1,ruleId:"shell/operator-spacing",message:"Missing space before ]]",severity:"warning"});for(let Q=0;Q<$.length;Q++){if($[Q]!=="[")continue;if($[Q+1]==="[")continue;if(Q>0&&$[Q-1]==="[")continue;if(!Q5($,Q))continue;let G=$[Q+1];if(G!==void 0&&G!==" "&&G!=="\t")X.push({filePath:Z,line:J,column:Q+1,ruleId:"shell/operator-spacing",message:"Missing space after [",severity:"warning"})}for(let Q=0;Q<$.length;Q++){if($[Q]!=="]")continue;if($[Q+1]==="]")continue;if(Q>0&&$[Q-1]==="]")continue;if(!G5($,Q))continue;let G=$[Q-1];if(G!==void 0&&G!==" "&&G!=="\t")X.push({filePath:Z,line:J,column:Q+1,ruleId:"shell/operator-spacing",message:"Missing space before ]",severity:"warning"})}return X}function QG($){let J=f0($),Z=[];for(let Y of J.matchAll(/\[\[(?!\s|\]|$)/g)){let z=(Y.index??0)+2;Z.push({pos:z,text:" "})}for(let Y of J.matchAll(/(?<!\s|\[)\]\]/g)){let z=Y.index??0;Z.push({pos:z,text:" "})}for(let Y=0;Y<J.length;Y++){if(J[Y]!=="[")continue;if(J[Y+1]==="[")continue;if(Y>0&&J[Y-1]==="[")continue;if(!Q5(J,Y))continue;let z=J[Y+1];if(z!==void 0&&z!==" "&&z!=="\t")Z.push({pos:Y+1,text:" "})}for(let Y=0;Y<J.length;Y++){if(J[Y]!=="]")continue;if(J[Y+1]==="]")continue;if(Y>0&&J[Y-1]==="]")continue;if(!G5(J,Y))continue;let z=J[Y-1];if(z!==void 0&&z!==" "&&z!=="\t")Z.push({pos:Y,text:" "})}if(Z.length===0)return $;Z.sort((Y,z)=>z.pos-Y.pos);let X=$;for(let{pos:Y,text:z}of Z)X=`${X.slice(0,Y)}${z}${X.slice(Y)}`;return X}function Q5($,J){let Z=J-1;while(Z>=0&&($[Z]===" "||$[Z]==="\t"))Z--;if(Z<0)return!0;let X=$[Z];if(X===";"||X==="|"||X==="&"||X==="!"||X==="(")return!0;let Y=$.slice(0,Z+1);if(/(?:^|\s)(?:if|while|until|elif|then|else|do)\s*$/.test(Y))return!0;return!1}function G5($,J){let Z=$[J+1];if(Z===void 0)return!0;return Z===" "||Z==="\t"||Z===";"||Z==="|"||Z==="&"||Z===")"}var GG=/^#!\s*(?:\/usr\/bin\/env\s+(?:ba|z|k|da)?sh|\/bin\/(?:ba|z|k|da)?sh|\/usr\/bin\/(?:ba|z|k|da)?sh)\b/,q5={meta:{docs:"Ensure shell scripts have a proper shebang line",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);if(X.length===0)return Z;let Y=X[0];if(X.every((z)=>z.trim()===""))return Z;if(!Y.startsWith("#!"))return Z.push({filePath:J.filePath,line:1,column:1,ruleId:"shell/shebang",message:"Missing shebang line \u2014 shell scripts should start with #!/usr/bin/env bash (or similar)",severity:"warning",help:"Add #!/usr/bin/env bash as the first line"}),Z;if(!GG.test(Y))Z.push({filePath:J.filePath,line:1,column:1,ruleId:"shell/shebang",message:`Invalid shebang: ${Y} \u2014 use #!/usr/bin/env bash or #!/bin/sh`,severity:"warning",help:"Use #!/usr/bin/env bash for portability or #!/bin/sh for POSIX scripts"});return Z}};var U5={meta:{docs:"Enforce consistent case statement terminator placement",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="",Q=[];for(let G of X){if(Y){if(G.trim()===z)Y=!1;Q.push("");continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#")){Q.push("");continue}Q.push(f0(G))}for(let G=0;G<Q.length;G++){if(!/\bcase\b[\s\S]*\bin\s*$/.test(Q[G].trimEnd()))continue;let q=1,U=-1;for(let V=G+1;V<Q.length;V++){let A=Q[V].trimEnd();if(/^\s*esac\b/.test(A)){if(q--,q===0){U=V;break}continue}if(/\bcase\b[\s\S]*\bin\s*$/.test(A))q++}if(U===-1)continue;let W=0,K=!1,H=!1;for(let V=G+1;V<U;V++){let A=Q[V],_=A.trim();if(_==="")continue;if(W===0){let w=qG(A);if(w!==-1){if(K&&H)Z.push({filePath:J.filePath,line:V+1,column:1,ruleId:"shell/consistent-case-terminators",message:"Missing ;; terminator for previous case branch",severity:"warning",help:"Add ;; at the end of the case branch before the next pattern"});K=!0,H=!0;let F=A.slice(w+1).trimEnd();if(/;;\s*$/.test(F))K=!1;continue}}if(W+=UG(A),W<0)W=0;if(K&&W===0&&/;;\s*$/.test(_))K=!1}}return Z}};function qG($){let J=$.replace(/^\s+/,"");if(J==="")return-1;if(/^(?:for|while|until|if|case|do|then|else|elif|fi|done|esac)\b/.test(J))return-1;let Z=$.length-J.length,X=0;if(J[X]==="(")X++;let Y=0;while(X<J.length){let z=J[X];if(z==="(")Y++;else if(z===")"){if(Y===0)return Z+X;Y--}else if(z===";"||z==="&"||z==="<"||z===">"||z==="=")return-1;X++}return-1}function UG($){let J=$.trim();if(J==="")return 0;let Z=J.split(/[\s;]+/),X=0;for(let Y of Z)if(Y==="if"||Y==="for"||Y==="while"||Y==="until")X++;else if(Y==="fi"||Y==="done")X--;return X}var W5={meta:{docs:"Recommend <<- for heredocs inside indented blocks"},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(z.replace(/^\s+/,"").startsWith("#"))continue;if(!z.match(/^\s+/))continue;let U=f0(z).match(/(?<!<)<<(?![<-])/);if(!U||U.index===void 0)continue;let K=z.slice(U.index+2).match(/^\s*(['"]?)(\w+)\1\s*$/);if(K){let H=K[2];Z.push({filePath:J.filePath,line:Y+1,column:U.index+1,ruleId:"shell/heredoc-indent",message:`Use <<- instead of << for indented heredoc (delimiter '${H}' must be at column 0 otherwise)`,severity:"warning",help:"Use <<- to strip leading tabs from heredoc content, allowing proper indentation"})}}return Z}};var K5={meta:{docs:"Detect incorrect redirect ordering (2>&1 before > file)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=f0(G);if(W.match(/2>&1\s+>(?!&)\s*\S/)){let H=W.indexOf("2>&1");Z.push({filePath:J.filePath,line:Q+1,column:H+1,ruleId:"shell/no-broken-redirect",message:"Broken redirect: 2>&1 before > file \u2014 stderr goes to terminal, not the file",severity:"error",help:"Swap the order: cmd > file 2>&1 (or use &> file in bash)"})}}return Z}};var H5={meta:{docs:"Prefer [[ ]] over [ ] for test expressions in bash/zsh",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/)[0]||"",Y=/bash|zsh/.test(X);if(/^#!.*\bsh\b/.test(X)&&!Y||!Y)return Z;let Q=$.split(/\r?\n/),G=!1,q="";for(let U=0;U<Q.length;U++){let W=Q[U];if(G){if(W.trim()===q)G=!1;continue}let K=W.match(/<<-?\s*['"]?(\w+)['"]?/);if(K)G=!0,q=K[1];if(W.replace(/^\s+/,"").startsWith("#"))continue;if(W.match(/(?:^|\s|;)\[\s(?!\[)/)){if(/(?<!\])\](?!\])/.test(W)){let A=W.indexOf("[");Z.push({filePath:J.filePath,line:U+1,column:A+1,ruleId:"shell/prefer-double-brackets",message:"Use [[ ]] instead of [ ] for test expressions in bash/zsh",severity:"warning",help:"[[ ]] prevents word splitting and supports && || regex; [ ] is only needed for POSIX sh"})}}}return Z},fix($){let J=$.split(/\r?\n/)[0]||"";if(!/bash|zsh/.test(J))return $;let X=$.split(/\r?\n/),Y=[];for(let z of X){let Q=z;Q=Q.replace(/(?:^|(?<=\s|;))\[(\s(?!\[).*?(?<!\]))\](?!\])/g,"[[$1]]"),Y.push(Q)}return Y.join(`
144
- `)}};var V5={meta:{docs:"Prefer printf over echo -e and echo -n",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=G.match(/\becho\s+-[en]+\b/);if(W){let K=G.indexOf("echo"),H=W[0].replace("echo ","");Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/prefer-printf",message:`Use printf instead of echo ${H} \u2014 echo behavior varies across platforms`,severity:"warning",help:'printf is portable: printf "format\\n" args... (use \\n for newline)'})}}return Z}};var A5={meta:{docs:"Recommend set -euo pipefail for safer script execution"},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z=!1,Q=!1,G=-1,q=!1;for(let W=0;W<X.length;W++){let K=X[W].replace(/^\s+/,"");if(W===0&&K.startsWith("#!")){G=W;continue}if(K.startsWith("#"))continue;if(K==="")continue;if(q=!0,/\bset\s+-\w*e/.test(K))Y=!0;if(/\bset\s+-\w*u/.test(K))z=!0;if(/\bset\s+.*-o\s+pipefail/.test(K))Q=!0;if(/\bset\s+-euo\s+pipefail/.test(K))Y=!0,z=!0,Q=!0}if(!q)return Z;let U=[];if(!Y)U.push("-e");if(!z)U.push("-u");if(!Q)U.push("-o pipefail");if(U.length>0)Z.push({filePath:J.filePath,line:G>=0?G+2:1,column:1,ruleId:"shell/set-options",message:`Missing shell safety options: set ${U.join(" ")}`,severity:"warning",help:"Add `set -euo pipefail` near the top of the script for safer execution"});return Z}};var _5={name:"shell",rules:{"command-substitution":A0(oX),"quote-variables":A0(iX),"no-cd-without-check":A0(cX),"no-eval":A0(rX),"no-useless-cat":A0(sX),"no-ls-parsing":A0(aX),"no-variable-in-single-quotes":A0(nX),"no-exit-in-subshell":A0(lX),shebang:A0(q5),indent:A0(Z5),"function-style":A0(tX),"operator-spacing":A0(z5),"keyword-spacing":A0(J5),"no-trailing-semicolons":A0(X5),"no-trailing-whitespace":A0(Y5),"prefer-double-brackets":A0(H5),"set-options":A0(A5),"prefer-printf":A0(V5),"consistent-case-terminators":A0(U5),"no-broken-redirect":A0(K5),"heredoc-indent":A0(W5)}};var y8=null,v8=null,e7=!1,$9=!0;function WG(){if(e7)return $9;try{return y8=(()=>{throw new Error("Cannot require module "+"@stacksjs/ts-spell-check");})(),y8.SpellChecker.create({minWordLength:3,maxSuggestions:3}).then(($)=>{v8=$}).catch(()=>{$9=!1}),e7=!0,!0}catch{return e7=!0,$9=!1,!1}}function Z9($,J){return{meta:{docs:$==="spell/check"?"Check spelling in text content":$==="spell/check-comments"?"Check spelling in code comments only":"Check spelling in markdown files"},check(Z,X){if(!WG()||!y8)return[];let{extractWords:Y,parseDirectives:z,isSuppressed:Q,getProgrammingWords:G}=y8,q=X.options,U=new Set((q?.words||[]).map((_)=>_.toLowerCase())),W=q?.minWordLength||3,K=G(),H=z(Z);for(let _ of H)if(_.type==="word")_.words.forEach((w)=>U.add(w.toLowerCase()));let V=Z.split(/\r?\n/),A=[];for(let _=0;_<V.length;_++){let w=V[_],F=_+1;if(J&&!J(w))continue;let M=Y(w);for(let{word:T,offset:E}of M){if(T.length<W)continue;if(T===T.toUpperCase()&&T.length<=5)continue;if(U.has(T.toLowerCase()))continue;if(K.has(T.toLowerCase()))continue;if(Q(T,F,H,U))continue;if(v8){if(v8.isCorrect(T))continue;let j=v8.suggest(T);A.push({filePath:X.filePath,line:F,column:E+1,ruleId:$,message:`Unknown word: "${T}"`,severity:"warning",help:j.length?`Did you mean: ${j.slice(0,3).join(", ")}? Or add to config words.`:`Add "${T}" to your config words array, or use: // spell-check:ignore ${T}`})}}}return A}}}function KG($){let J=$.trimStart();return J.startsWith("//")||J.startsWith("/*")||J.startsWith("*")||J.startsWith("#")}var F5={name:"spell",rules:{check:Z9("spell/check"),"check-comments":Z9("spell/check-comments",KG),"check-markdown":{meta:{docs:"Check spelling in markdown files"},check($,J){if(!J.filePath.endsWith(".md"))return[];return Z9("spell/check-markdown").check($,J)}}}};function w5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var B5={meta:{docs:"Disallow spaces inside array brackets",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]==="["&&!w5(z,G)){let q=z[G+1];if(q==="]"||q===void 0||q===`
142
+ `)}};var z5={meta:{docs:"Enforce spaces inside [ ] and [[ ]] test expressions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=f0(G);for(let K of QG(W,Q+1,J.filePath))Z.push(K)}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=!1,Y="";for(let z of J){if(X){if(z.trim()===Y)X=!1;Z.push(z);continue}let Q=P0(z);if(Q){X=!0,Y=Q,Z.push(z);continue}if(z.replace(/^\s+/,"").startsWith("#")){Z.push(z);continue}Z.push(GG(z))}return Z.join(`
143
+ `)}};function QG($,J,Z){let X=[],Y=/\[\[(?!\s|\]|$)/g;for(let Q of $.matchAll(Y))X.push({filePath:Z,line:J,column:(Q.index??0)+1,ruleId:"shell/operator-spacing",message:"Missing space after [[",severity:"warning"});let z=/(?<!\s|\[)\]\]/g;for(let Q of $.matchAll(z))X.push({filePath:Z,line:J,column:(Q.index??0)+1,ruleId:"shell/operator-spacing",message:"Missing space before ]]",severity:"warning"});for(let Q=0;Q<$.length;Q++){if($[Q]!=="[")continue;if($[Q+1]==="[")continue;if(Q>0&&$[Q-1]==="[")continue;if(!Q5($,Q))continue;let G=$[Q+1];if(G!==void 0&&G!==" "&&G!=="\t")X.push({filePath:Z,line:J,column:Q+1,ruleId:"shell/operator-spacing",message:"Missing space after [",severity:"warning"})}for(let Q=0;Q<$.length;Q++){if($[Q]!=="]")continue;if($[Q+1]==="]")continue;if(Q>0&&$[Q-1]==="]")continue;if(!G5($,Q))continue;let G=$[Q-1];if(G!==void 0&&G!==" "&&G!=="\t")X.push({filePath:Z,line:J,column:Q+1,ruleId:"shell/operator-spacing",message:"Missing space before ]",severity:"warning"})}return X}function GG($){let J=f0($),Z=[];for(let Y of J.matchAll(/\[\[(?!\s|\]|$)/g)){let z=(Y.index??0)+2;Z.push({pos:z,text:" "})}for(let Y of J.matchAll(/(?<!\s|\[)\]\]/g)){let z=Y.index??0;Z.push({pos:z,text:" "})}for(let Y=0;Y<J.length;Y++){if(J[Y]!=="[")continue;if(J[Y+1]==="[")continue;if(Y>0&&J[Y-1]==="[")continue;if(!Q5(J,Y))continue;let z=J[Y+1];if(z!==void 0&&z!==" "&&z!=="\t")Z.push({pos:Y+1,text:" "})}for(let Y=0;Y<J.length;Y++){if(J[Y]!=="]")continue;if(J[Y+1]==="]")continue;if(Y>0&&J[Y-1]==="]")continue;if(!G5(J,Y))continue;let z=J[Y-1];if(z!==void 0&&z!==" "&&z!=="\t")Z.push({pos:Y,text:" "})}if(Z.length===0)return $;Z.sort((Y,z)=>z.pos-Y.pos);let X=$;for(let{pos:Y,text:z}of Z)X=`${X.slice(0,Y)}${z}${X.slice(Y)}`;return X}function Q5($,J){let Z=J-1;while(Z>=0&&($[Z]===" "||$[Z]==="\t"))Z--;if(Z<0)return!0;let X=$[Z];if(X===";"||X==="|"||X==="&"||X==="!"||X==="(")return!0;let Y=$.slice(0,Z+1);if(/(?:^|\s)(?:if|while|until|elif|then|else|do)\s*$/.test(Y))return!0;return!1}function G5($,J){let Z=$[J+1];if(Z===void 0)return!0;return Z===" "||Z==="\t"||Z===";"||Z==="|"||Z==="&"||Z===")"}var qG=/^#!\s*(?:\/usr\/bin\/env\s+(?:ba|z|k|da)?sh|\/bin\/(?:ba|z|k|da)?sh|\/usr\/bin\/(?:ba|z|k|da)?sh)\b/,q5={meta:{docs:"Ensure shell scripts have a proper shebang line",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);if(X.length===0)return Z;let Y=X[0];if(X.every((z)=>z.trim()===""))return Z;if(!Y.startsWith("#!"))return Z.push({filePath:J.filePath,line:1,column:1,ruleId:"shell/shebang",message:"Missing shebang line \u2014 shell scripts should start with #!/usr/bin/env bash (or similar)",severity:"warning",help:"Add #!/usr/bin/env bash as the first line"}),Z;if(!qG.test(Y))Z.push({filePath:J.filePath,line:1,column:1,ruleId:"shell/shebang",message:`Invalid shebang: ${Y} \u2014 use #!/usr/bin/env bash or #!/bin/sh`,severity:"warning",help:"Use #!/usr/bin/env bash for portability or #!/bin/sh for POSIX scripts"});return Z}};var U5={meta:{docs:"Enforce consistent case statement terminator placement",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="",Q=[];for(let G of X){if(Y){if(G.trim()===z)Y=!1;Q.push("");continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#")){Q.push("");continue}Q.push(f0(G))}for(let G=0;G<Q.length;G++){if(!/\bcase\b[\s\S]*\bin\s*$/.test(Q[G].trimEnd()))continue;let q=1,U=-1;for(let V=G+1;V<Q.length;V++){let A=Q[V].trimEnd();if(/^\s*esac\b/.test(A)){if(q--,q===0){U=V;break}continue}if(/\bcase\b[\s\S]*\bin\s*$/.test(A))q++}if(U===-1)continue;let W=0,K=!1,H=!1;for(let V=G+1;V<U;V++){let A=Q[V],_=A.trim();if(_==="")continue;if(W===0){let w=UG(A);if(w!==-1){if(K&&H)Z.push({filePath:J.filePath,line:V+1,column:1,ruleId:"shell/consistent-case-terminators",message:"Missing ;; terminator for previous case branch",severity:"warning",help:"Add ;; at the end of the case branch before the next pattern"});K=!0,H=!0;let F=A.slice(w+1).trimEnd();if(/;;\s*$/.test(F))K=!1;continue}}if(W+=WG(A),W<0)W=0;if(K&&W===0&&/;;\s*$/.test(_))K=!1}}return Z}};function UG($){let J=$.replace(/^\s+/,"");if(J==="")return-1;if(/^(?:for|while|until|if|case|do|then|else|elif|fi|done|esac)\b/.test(J))return-1;let Z=$.length-J.length,X=0;if(J[X]==="(")X++;let Y=0;while(X<J.length){let z=J[X];if(z==="(")Y++;else if(z===")"){if(Y===0)return Z+X;Y--}else if(z===";"||z==="&"||z==="<"||z===">"||z==="=")return-1;X++}return-1}function WG($){let J=$.trim();if(J==="")return 0;let Z=J.split(/[\s;]+/),X=0;for(let Y of Z)if(Y==="if"||Y==="for"||Y==="while"||Y==="until")X++;else if(Y==="fi"||Y==="done")X--;return X}var W5={meta:{docs:"Recommend <<- for heredocs inside indented blocks"},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(z.replace(/^\s+/,"").startsWith("#"))continue;if(!z.match(/^\s+/))continue;let U=f0(z).match(/(?<!<)<<(?![<-])/);if(!U||U.index===void 0)continue;let K=z.slice(U.index+2).match(/^\s*(['"]?)(\w+)\1\s*$/);if(K){let H=K[2];Z.push({filePath:J.filePath,line:Y+1,column:U.index+1,ruleId:"shell/heredoc-indent",message:`Use <<- instead of << for indented heredoc (delimiter '${H}' must be at column 0 otherwise)`,severity:"warning",help:"Use <<- to strip leading tabs from heredoc content, allowing proper indentation"})}}return Z}};var K5={meta:{docs:"Detect incorrect redirect ordering (2>&1 before > file)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=P0(G);if(q)Y=!0,z=q;if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=f0(G);if(W.match(/2>&1\s+>(?!&)\s*\S/)){let H=W.indexOf("2>&1");Z.push({filePath:J.filePath,line:Q+1,column:H+1,ruleId:"shell/no-broken-redirect",message:"Broken redirect: 2>&1 before > file \u2014 stderr goes to terminal, not the file",severity:"error",help:"Swap the order: cmd > file 2>&1 (or use &> file in bash)"})}}return Z}};var H5={meta:{docs:"Prefer [[ ]] over [ ] for test expressions in bash/zsh",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/)[0]||"",Y=/bash|zsh/.test(X);if(/^#!.*\bsh\b/.test(X)&&!Y||!Y)return Z;let Q=$.split(/\r?\n/),G=!1,q="";for(let U=0;U<Q.length;U++){let W=Q[U];if(G){if(W.trim()===q)G=!1;continue}let K=W.match(/<<-?\s*['"]?(\w+)['"]?/);if(K)G=!0,q=K[1];if(W.replace(/^\s+/,"").startsWith("#"))continue;if(W.match(/(?:^|\s|;)\[\s(?!\[)/)){if(/(?<!\])\](?!\])/.test(W)){let A=W.indexOf("[");Z.push({filePath:J.filePath,line:U+1,column:A+1,ruleId:"shell/prefer-double-brackets",message:"Use [[ ]] instead of [ ] for test expressions in bash/zsh",severity:"warning",help:"[[ ]] prevents word splitting and supports && || regex; [ ] is only needed for POSIX sh"})}}}return Z},fix($){let J=$.split(/\r?\n/)[0]||"";if(!/bash|zsh/.test(J))return $;let X=$.split(/\r?\n/),Y=[];for(let z of X){let Q=z;Q=Q.replace(/(?:^|(?<=\s|;))\[(\s(?!\[).*?(?<!\]))\](?!\])/g,"[[$1]]"),Y.push(Q)}return Y.join(`
144
+ `)}};var V5={meta:{docs:"Prefer printf over echo -e and echo -n",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z="";for(let Q=0;Q<X.length;Q++){let G=X[Q];if(Y){if(G.trim()===z)Y=!1;continue}let q=G.match(/<<-?\s*['"]?(\w+)['"]?/);if(q)Y=!0,z=q[1];if(G.replace(/^\s+/,"").startsWith("#"))continue;let W=G.match(/\becho\s+-[en]+\b/);if(W){let K=G.indexOf("echo"),H=W[0].replace("echo ","");Z.push({filePath:J.filePath,line:Q+1,column:K+1,ruleId:"shell/prefer-printf",message:`Use printf instead of echo ${H} \u2014 echo behavior varies across platforms`,severity:"warning",help:'printf is portable: printf "format\\n" args... (use \\n for newline)'})}}return Z}};var A5={meta:{docs:"Recommend set -euo pipefail for safer script execution"},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z=!1,Q=!1,G=-1,q=!1;for(let W=0;W<X.length;W++){let K=X[W].replace(/^\s+/,"");if(W===0&&K.startsWith("#!")){G=W;continue}if(K.startsWith("#"))continue;if(K==="")continue;if(q=!0,/\bset\s+-\w*e/.test(K))Y=!0;if(/\bset\s+-\w*u/.test(K))z=!0;if(/\bset\s+.*-o\s+pipefail/.test(K))Q=!0;if(/\bset\s+-euo\s+pipefail/.test(K))Y=!0,z=!0,Q=!0}if(!q)return Z;let U=[];if(!Y)U.push("-e");if(!z)U.push("-u");if(!Q)U.push("-o pipefail");if(U.length>0)Z.push({filePath:J.filePath,line:G>=0?G+2:1,column:1,ruleId:"shell/set-options",message:`Missing shell safety options: set ${U.join(" ")}`,severity:"warning",help:"Add `set -euo pipefail` near the top of the script for safer execution"});return Z}};var _5={name:"shell",rules:{"command-substitution":A0(oX),"quote-variables":A0(iX),"no-cd-without-check":A0(cX),"no-eval":A0(rX),"no-useless-cat":A0(sX),"no-ls-parsing":A0(aX),"no-variable-in-single-quotes":A0(nX),"no-exit-in-subshell":A0(lX),shebang:A0(q5),indent:A0(Z5),"function-style":A0(tX),"operator-spacing":A0(z5),"keyword-spacing":A0(J5),"no-trailing-semicolons":A0(X5),"no-trailing-whitespace":A0(Y5),"prefer-double-brackets":A0(H5),"set-options":A0(A5),"prefer-printf":A0(V5),"consistent-case-terminators":A0(U5),"no-broken-redirect":A0(K5),"heredoc-indent":A0(W5)}};var y8=null,v8=null,e7=!1,$9=!0;function KG(){if(e7)return $9;try{return y8=(()=>{throw new Error("Cannot require module "+"@stacksjs/ts-spell-check");})(),y8.SpellChecker.create({minWordLength:3,maxSuggestions:3}).then(($)=>{v8=$}).catch(()=>{$9=!1}),e7=!0,!0}catch{return e7=!0,$9=!1,!1}}function Z9($,J){return{meta:{docs:$==="spell/check"?"Check spelling in text content":$==="spell/check-comments"?"Check spelling in code comments only":"Check spelling in markdown files"},check(Z,X){if(!KG()||!y8)return[];let{extractWords:Y,parseDirectives:z,isSuppressed:Q,getProgrammingWords:G}=y8,q=X.options,U=new Set((q?.words||[]).map((_)=>_.toLowerCase())),W=q?.minWordLength||3,K=G(),H=z(Z);for(let _ of H)if(_.type==="word")_.words.forEach((w)=>U.add(w.toLowerCase()));let V=Z.split(/\r?\n/),A=[];for(let _=0;_<V.length;_++){let w=V[_],F=_+1;if(J&&!J(w))continue;let M=Y(w);for(let{word:T,offset:E}of M){if(T.length<W)continue;if(T===T.toUpperCase()&&T.length<=5)continue;if(U.has(T.toLowerCase()))continue;if(K.has(T.toLowerCase()))continue;if(Q(T,F,H,U))continue;if(v8){if(v8.isCorrect(T))continue;let j=v8.suggest(T);A.push({filePath:X.filePath,line:F,column:E+1,ruleId:$,message:`Unknown word: "${T}"`,severity:"warning",help:j.length?`Did you mean: ${j.slice(0,3).join(", ")}? Or add to config words.`:`Add "${T}" to your config words array, or use: // spell-check:ignore ${T}`})}}}return A}}}function HG($){let J=$.trimStart();return J.startsWith("//")||J.startsWith("/*")||J.startsWith("*")||J.startsWith("#")}var F5={name:"spell",rules:{check:Z9("spell/check"),"check-comments":Z9("spell/check-comments",HG),"check-markdown":{meta:{docs:"Check spelling in markdown files"},check($,J){if(!J.filePath.endsWith(".md"))return[];return Z9("spell/check-markdown").check($,J)}}}};function w5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var B5={meta:{docs:"Disallow spaces inside array brackets",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]==="["&&!w5(z,G)){let q=z[G+1];if(q==="]"||q===void 0||q===`
145
145
  `)continue;if(q===" "||q==="\t"){if(z.indexOf("]",G+1)!==-1)Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/array-bracket-spacing",message:"Unexpected space after '['",severity:"warning"})}}if(z[G]==="]"&&!w5(z,G)){let q=G>0?z[G-1]:void 0;if(q==="["||q===void 0)continue;if(q===" "||q==="\t"){if(z.lastIndexOf("[",G-1)!==-1)Z.push({filePath:J.filePath,line:Y+1,column:G,ruleId:"style/array-bracket-spacing",message:"Unexpected space before ']'",severity:"warning"})}}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/\[\s+(\S)/g,(z,Q)=>{if(Q==="]")return z;return`[${Q}`}),Y=Y.replace(/(\S)\s+\]/g,"$1]"),Z.push(Y)}return Z.join(`
146
- `)}};var M5=/(?<![(\[{,=:?&|+\-*/])\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/g;function HG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var j5={meta:{docs:"Require parentheses around arrow function parameters",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;M5.lastIndex=0;while((G=M5.exec(z))!==null){let q=G.index;if(HG(z,q))continue;let U=G[1];if(z.slice(0,q).trimEnd().endsWith("("))continue;if(U==="async")continue;Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"style/arrow-parens",message:`Arrow function parameter '${U}' should be wrapped in parentheses`,severity:"warning"})}}return Z},fix($){return $.replace(/(?<![(\[{,=:?&|+\-*/])\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/g,(J,Z)=>{if(Z==="async")return J;return J.replace(Z,`(${Z})`)})}};var b8=/=>/g;function N5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var T5={meta:{docs:"Require space before and after => in arrow functions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;b8.lastIndex=0;while((G=b8.exec(z))!==null){let q=G.index;if(N5(z,q))continue;if(q>0&&z[q-1]!==" "&&z[q-1]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"style/arrow-spacing",message:"Missing space before =>",severity:"warning"});let U=q+2;if(U<z.length&&z[U]!==" "&&z[U]!=="\t"&&z[U]!==`
146
+ `)}};var M5=/(?<![(\[{,=:?&|+\-*/])\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/g;function VG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var j5={meta:{docs:"Require parentheses around arrow function parameters",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;M5.lastIndex=0;while((G=M5.exec(z))!==null){let q=G.index;if(VG(z,q))continue;let U=G[1];if(z.slice(0,q).trimEnd().endsWith("("))continue;if(U==="async")continue;Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"style/arrow-parens",message:`Arrow function parameter '${U}' should be wrapped in parentheses`,severity:"warning"})}}return Z},fix($){return $.replace(/(?<![(\[{,=:?&|+\-*/])\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/g,(J,Z)=>{if(Z==="async")return J;return J.replace(Z,`(${Z})`)})}};var b8=/=>/g;function N5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var T5={meta:{docs:"Require space before and after => in arrow functions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;b8.lastIndex=0;while((G=b8.exec(z))!==null){let q=G.index;if(N5(z,q))continue;if(q>0&&z[q-1]!==" "&&z[q-1]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"style/arrow-spacing",message:"Missing space before =>",severity:"warning"});let U=q+2;if(U<z.length&&z[U]!==" "&&z[U]!=="\t"&&z[U]!==`
147
147
  `)Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/arrow-spacing",message:"Missing space after =>",severity:"warning"})}}return Z},fix($){let J=$.split(`
148
148
  `);for(let Z=0;Z<J.length;Z++){let X=J[Z],Y=X.trim();if(!Y||Y.startsWith("//")||Y.startsWith("*")||Y.startsWith("/*"))continue;let z="",Q=0;b8.lastIndex=0;let G;while((G=b8.exec(X))!==null){let q=G.index;if(N5(X,q))continue;let U=X[q-1],W=X[q+2],K=q>0&&U!==" "&&U!=="\t",H=W!==void 0&&W!==" "&&W!=="\t";if(!K&&!H)continue;z+=X.slice(Q,q),z+=`${K?" ":""}=>${H?" ":""}`,Q=q+2}if(Q>0)J[Z]=z+X.slice(Q)}return J.join(`
149
149
  `)}};function J9($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var E5={meta:{docs:"Require spaces inside single-line blocks",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!=="{")continue;if(J9(z,G))continue;if(G>0&&z[G-1]==="$")continue;let q=1,U=-1;for(let K=G+1;K<z.length;K++){if(z[K]==="{"&&!J9(z,K))q++;if(z[K]==="}"&&!J9(z,K)){if(q--,q===0){U=K;break}}}if(U===-1)continue;let W=z.slice(G+1,U);if(!W.trim())continue;if(W[0]!==" "&&W[0]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/block-spacing",message:"Missing space after '{'",severity:"warning"});if(W[W.length-1]!==" "&&W[W.length-1]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/block-spacing",message:"Missing space before '}'",severity:"warning"});break}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.replace(/(?<!\$)\{(\S)([^}]*?)(\S)\}/g,(z,Q,G,q)=>{return`{ ${Q}${G}${q} }`});Y=Y.replace(/(?<!\$)\{(\S)([^}]*?)\s\}/g,(z,Q,G)=>{return`{ ${Q}${G} }`}),Y=Y.replace(/(?<!\$)\{\s([^}]*?)(\S)\}/g,(z,Q,G)=>{return`{ ${Q}${G} }`}),Z.push(Y)}return Z.join(`
150
150
  `)}};var D5={meta:{docs:"Enforce consistent brace style for blocks",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].trim();if(Q.startsWith("//")||Q.startsWith("/*"))continue;if(/\}\s+(?:else|catch|finally)\b/.test(Q))Z.push({filePath:J.filePath,line:Y+1,column:Q.indexOf("}")+1,ruleId:"style/brace-style",message:"Closing curly brace appears on the same line as the subsequent block",severity:"error"});if(Q==="{"&&Y>0){let q=X[Y-1].trim();if(!q||q.startsWith("//")||q.startsWith("/*")||q.endsWith("*/"))continue;if(q&&!q.endsWith("{")&&!q.endsWith(",")&&!q.endsWith("(")){if(!q.match(/[=:]\s*$/)&&!q.endsWith("["))Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"style/brace-style",message:"Opening curly brace should be on the same line",severity:"error"})}}}return Z}};var R5=/,\s*$/,O5=new RegExp("^\\s*[}\\])](?:\\s*;?\\s*)?$"),L5={meta:{docs:"Require trailing commas in multiline constructs",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=1;Y<X.length;Y++){let Q=X[Y].trim();if(!O5.test(Q))continue;let G=X[Y-1],q=G.trim();if(!q||q==="{"||q==="["||q==="(")continue;if(q.startsWith("//")||q.startsWith("*")||q.startsWith("/*"))continue;if(R5.test(q))continue;if(q.endsWith("{")||q.endsWith("[")||q.endsWith("("))continue;if(q.endsWith("=>"))continue;Z.push({filePath:J.filePath,line:Y,column:G.length+1,ruleId:"style/comma-dangle",message:"Missing trailing comma",severity:"warning",help:"Add a trailing comma after the last element in multiline constructs."})}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X=0;X<J.length;X++){let Y=J[X];if(X+1<J.length){let z=J[X+1].trim(),Q=Y.trim();if(O5.test(z)&&Q&&Q!=="{"&&Q!=="["&&Q!=="("&&!Q.startsWith("//")&&!Q.startsWith("*")&&!Q.startsWith("/*")&&!R5.test(Q)&&!Q.endsWith("{")&&!Q.endsWith("[")&&!Q.endsWith("(")&&!Q.endsWith("=>")){Z.push(Y.replace(/(\s*)$/,",$1"));continue}}Z.push(Y)}return Z.join(`
151
- `)}};function VG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var P5={meta:{docs:"Require space after commas, disallow space before commas",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!==",")continue;if(VG(z,G))continue;if(G>0&&z[G-1]===" "){if(z.slice(0,G).trim().length>0)Z.push({filePath:J.filePath,line:Y+1,column:G+1,ruleId:"style/comma-spacing",message:"Unexpected space before comma",severity:"warning"})}if(G+1<z.length&&z[G+1]!==" "&&z[G+1]!=="\t"&&z[G+1]!==`
151
+ `)}};function AG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var P5={meta:{docs:"Require space after commas, disallow space before commas",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!==",")continue;if(AG(z,G))continue;if(G>0&&z[G-1]===" "){if(z.slice(0,G).trim().length>0)Z.push({filePath:J.filePath,line:Y+1,column:G+1,ruleId:"style/comma-spacing",message:"Unexpected space before comma",severity:"warning"})}if(G+1<z.length&&z[G+1]!==" "&&z[G+1]!=="\t"&&z[G+1]!==`
152
152
  `&&z[G+1]!=="\r")Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/comma-spacing",message:"Missing space after comma",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/ ,/g,","),Y=Y.replace(/,(\S)/g,", $1"),Z.push(Y)}return Z.join(`
153
153
  `)}};var C5={meta:{docs:"Enforce comma-last style (commas at the end of lines, not the beginning)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;if(Q.startsWith(","))Z.push({filePath:J.filePath,line:Y+1,column:z.indexOf(",")+1,ruleId:"style/comma-style",message:"Comma should be placed at the end of the previous line",severity:"warning"})}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X=0;X<J.length;X++){let Y=J[X],z=Y.trim();if(z.startsWith(",")&&Z.length>0){let Q=Z.length-1;Z[Q]=Z[Q].replace(/\s*$/,",");let G=Y.match(/^(\s*)/)?.[1]||"";Z.push(G+z.slice(1).trim())}else Z.push(Y)}return Z.join(`
154
- `)}};function AG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var I5={meta:{docs:"Disallow spaces inside computed property brackets [expr]",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!=="[")continue;if(AG(z,G))continue;if(G===0)continue;let q=z[G-1];if(!/[a-zA-Z0-9_$)\]]/.test(q))continue;if(G+1<z.length&&(z[G+1]===" "||z[G+1]==="\t"))Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/computed-property-spacing",message:"Unexpected space after '['",severity:"warning"});let U=1,W=G+1;while(W<z.length&&U>0){if(z[W]==="[")U++;if(z[W]==="]")U--;if(U>0)W++}if(U===0&&W>0){if(z[W-1]===" "||z[W-1]==="\t")Z.push({filePath:J.filePath,line:Y+1,column:W,ruleId:"style/computed-property-spacing",message:"Unexpected space before ']'",severity:"warning"})}}}return Z},fix($){return $.replace(/([a-zA-Z0-9_$)\]])\[\s+([\s\S]*?)\s+\]/g,"$1[$2]")}};function _G($){let J=[],Z=$.split(/\r?\n/),X=0;for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=/\b[\w$)\]]+\s*\./.test(z),G=Y+1<Z.length&&/^\s*\./.test(Z[Y+1]);if(Q||G){let q=Y,U=Y;while(q+1<Z.length&&/^\s*\./.test(Z[q+1]))q++,U=q;if(U>Y){let W=X,K=X+Z[Y].length+1+Z.slice(Y+1,U+1).join(`
155
- `).length;J.push({start:W,end:K}),Y=U}}X+=z.length+1}return J}var S5={meta:{docs:"Enforce consistent line breaks in member-access/call chains"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=_G($);for(let{start:z,end:Q}of Y){let q=$.slice(z,Q).split(/\r?\n/),U=[];for(let V=0;V<q.length;V++){let A=q[V],_=[...A.matchAll(/\./g)].map((w)=>w.index||0);for(let w of _){if(w>0&&A[w-1]==="?")continue;if(/^\s*\./.test(A)&&w===A.indexOf(".")&&A.slice(0,w).trim()==="")U.push("newline");else U.push("inline")}}if(U.length<=1)continue;let W=U[0];if(U.every((V)=>V===W))continue;let K=U.findIndex((V)=>V!==W),H=0;for(let V=0;V<q.length;V++){let A=q[V],_=[...A.matchAll(/\./g)].map((w)=>w.index||0);for(let w of _){if(w>0&&A[w-1]==="?")continue;if(H===K){let M=$.slice(0,z).split(/\r?\n/),T=M.length,E=(M[M.length-1]||"").length;Z.push({filePath:J.filePath,line:T+V,column:(V===0?E:0)+w+1,ruleId:"style/consistent-chaining",message:`Inconsistent chaining style: mix of ${W} and ${W==="inline"?"newline":"inline"}.`,severity:"warning"}),V=q.length;break}H++}}}return Z}};function v5($){let J=[0];for(let X=0;X<$.length;X++)if($[X]===`
154
+ `)}};function _G($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var I5={meta:{docs:"Disallow spaces inside computed property brackets [expr]",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!=="[")continue;if(_G(z,G))continue;if(G===0)continue;let q=z[G-1];if(!/[a-zA-Z0-9_$)\]]/.test(q))continue;if(G+1<z.length&&(z[G+1]===" "||z[G+1]==="\t"))Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/computed-property-spacing",message:"Unexpected space after '['",severity:"warning"});let U=1,W=G+1;while(W<z.length&&U>0){if(z[W]==="[")U++;if(z[W]==="]")U--;if(U>0)W++}if(U===0&&W>0){if(z[W-1]===" "||z[W-1]==="\t")Z.push({filePath:J.filePath,line:Y+1,column:W,ruleId:"style/computed-property-spacing",message:"Unexpected space before ']'",severity:"warning"})}}}return Z},fix($){return $.replace(/([a-zA-Z0-9_$)\]])\[\s+([\s\S]*?)\s+\]/g,"$1[$2]")}};function FG($){let J=[],Z=$.split(/\r?\n/),X=0;for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=/\b[\w$)\]]+\s*\./.test(z),G=Y+1<Z.length&&/^\s*\./.test(Z[Y+1]);if(Q||G){let q=Y,U=Y;while(q+1<Z.length&&/^\s*\./.test(Z[q+1]))q++,U=q;if(U>Y){let W=X,K=X+Z[Y].length+1+Z.slice(Y+1,U+1).join(`
155
+ `).length;J.push({start:W,end:K}),Y=U}}X+=z.length+1}return J}var S5={meta:{docs:"Enforce consistent line breaks in member-access/call chains"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/),Y=FG($);for(let{start:z,end:Q}of Y){let q=$.slice(z,Q).split(/\r?\n/),U=[];for(let V=0;V<q.length;V++){let A=q[V],_=[...A.matchAll(/\./g)].map((w)=>w.index||0);for(let w of _){if(w>0&&A[w-1]==="?")continue;if(/^\s*\./.test(A)&&w===A.indexOf(".")&&A.slice(0,w).trim()==="")U.push("newline");else U.push("inline")}}if(U.length<=1)continue;let W=U[0];if(U.every((V)=>V===W))continue;let K=U.findIndex((V)=>V!==W),H=0;for(let V=0;V<q.length;V++){let A=q[V],_=[...A.matchAll(/\./g)].map((w)=>w.index||0);for(let w of _){if(w>0&&A[w-1]==="?")continue;if(H===K){let M=$.slice(0,z).split(/\r?\n/),T=M.length,E=(M[M.length-1]||"").length;Z.push({filePath:J.filePath,line:T+V,column:(V===0?E:0)+w+1,ruleId:"style/consistent-chaining",message:`Inconsistent chaining style: mix of ${W} and ${W==="inline"?"newline":"inline"}.`,severity:"warning"}),V=q.length;break}H++}}}return Z}};function v5($){let J=[0];for(let X=0;X<$.length;X++)if($[X]===`
156
156
  `)J.push(X+1);function Z(X){let Y=0,z=J.length-1;while(Y<=z){let G=Y+z>>1,q=J[G],U=G+1<J.length?J[G+1]:1/0;if(X<q)z=G-1;else if(X>=U)Y=G+1;else return{line:G+1,column:X-q+1}}let Q=J[J.length-1];return{line:J.length,column:Math.max(1,X-Q+1)}}return{lineStarts:J,indexToLoc:Z}}function y5($){let J=[],Z=(z,Q,G)=>J.push({type:z,value:$.slice(Q,G),start:Q,end:G}),X=0,Y=$.length;while(X<Y){let z=$[X];if(z<=" "){X++;continue}if(z==="/"&&$[X+1]==="/"){let q=X;X+=2;while(X<Y&&$[X]!==`
157
157
  `)X++;Z("LineComment",q,X);continue}if(z==="/"&&$[X+1]==="*"){let q=X;X+=2;while(X<Y&&!($[X]==="*"&&$[X+1]==="/"))X++;X=Math.min(Y,X+2),Z("BlockComment",q,X);continue}if(z==='"'||z==="'"){let q=z,U=X;X++;while(X<Y){let W=$[X];if(W==="\\"){X+=2;continue}if(W===q){X++;break}X++}Z("String",U,X);continue}if(z==="`"){let q=X;X++;let U=0;while(X<Y){let W=$[X];if(W==="\\"){X+=2;continue}if(W==="`"&&U===0){X++;break}if(W==="$"&&$[X+1]==="{"){U++,X+=2;continue}if(W==="}"&&U>0){U--,X++;continue}X++}Z("Template",q,X);continue}if(z==="/"){if($[X+1]==="/"){let q=X;X+=2;while(X<Y&&$[X]!==`
158
- `)X++;Z("LineComment",q,X);continue}if($[X+1]==="*"){let q=X;X+=2;while(X<Y&&!($[X]==="*"&&$[X+1]==="/"))X++;X=Math.min(Y,X+2),Z("BlockComment",q,X);continue}if(FG(J)){let q=X;X++;while(X<Y){let U=$[X];if(U==="\\"){X+=2;continue}if(U==="/"){X++;break}X++}while(X<Y&&/[a-z]/i.test($[X]))X++;Z("Regex",q,X);continue}Z("Punct",X,X+1),X++;continue}if("(){}[];:,.<>+-*%&|^!?=~".includes(z)){Z("Punct",X,X+1),X++;continue}let Q=X,G=new RegExp("[^\\s(){}[\\];:,.<>+\\-*%&|^!?=~'\"`/]");while(X<Y&&G.test($[X]))X++;if(X>Q)Z("Word",Q,X);else Z("Word",X,X+1),X++}return J}function FG($){if($.length===0)return!0;let J=$[$.length-1],Z=new RegExp("[(!,{;:?=]");return J.type==="Punct"&&Z.test(J.value)||J.type==="Word"&&/^(?:return|throw|case|of|in|instanceof|typeof|void|new)$/.test(J.value)}function b5($,J,Z,X){let Y=0,z=(K)=>K<=" ",Q=(K)=>{while(K<$.length&&$[K]!==`
158
+ `)X++;Z("LineComment",q,X);continue}if($[X+1]==="*"){let q=X;X+=2;while(X<Y&&!($[X]==="*"&&$[X+1]==="/"))X++;X=Math.min(Y,X+2),Z("BlockComment",q,X);continue}if(wG(J)){let q=X;X++;while(X<Y){let U=$[X];if(U==="\\"){X+=2;continue}if(U==="/"){X++;break}X++}while(X<Y&&/[a-z]/i.test($[X]))X++;Z("Regex",q,X);continue}Z("Punct",X,X+1),X++;continue}if("(){}[];:,.<>+-*%&|^!?=~".includes(z)){Z("Punct",X,X+1),X++;continue}let Q=X,G=new RegExp("[^\\s(){}[\\];:,.<>+\\-*%&|^!?=~'\"`/]");while(X<Y&&G.test($[X]))X++;if(X>Q)Z("Word",Q,X);else Z("Word",X,X+1),X++}return J}function wG($){if($.length===0)return!0;let J=$[$.length-1],Z=new RegExp("[(!,{;:?=]");return J.type==="Punct"&&Z.test(J.value)||J.type==="Word"&&/^(?:return|throw|case|of|in|instanceof|typeof|void|new)$/.test(J.value)}function b5($,J,Z,X){let Y=0,z=(K)=>K<=" ",Q=(K)=>{while(K<$.length&&$[K]!==`
159
159
  `)K++;return K},G=(K)=>{K+=2;while(K<$.length&&!($[K]==="*"&&$[K+1]==="/"))K++;return Math.min($.length,K+2)},q=(K,H)=>{let V=$.length;if(H==="`"){K++;let A=0;while(K<V){let _=$[K];if(_==="\\"){K+=2;continue}if(_==="`"&&A===0){K++;break}if(_==="$"&&$[K+1]==="{"){A++,K+=2;continue}if(_==="}"&&A>0){A--,K++;continue}if(_==='"'||_==="'"){K=q(K,_);continue}if(_==="/"&&$[K+1]==="/"){K=Q(K+2);continue}if(_==="/"&&$[K+1]==="*"){K=G(K);continue}K++}return K}K++;while(K<V){let A=$[K];if(A==="\\"){K+=2;continue}if(A===H){K++;break}K++}return K},U=(K)=>{let H=K-1;while(H>=0&&z($[H]))H--;let V=H>=0?$[H]:"";if(new RegExp("[(:[{;?,=!&|^~+\\-*%<>]").test(V))return!0;if(V==="")return!0;return!1},W=(K)=>{K++;let H=$.length;while(K<H){let V=$[K];if(V==="\\"){K+=2;continue}if(V==="/"){K++;break}K++}while(K<H&&/[a-z]/i.test($[K]))K++;return K};for(let K=J;K<$.length;K++){let H=$[K];if(H===Z){Y++;continue}if(H===X){if(Y--,Y===0)return K;continue}if(H==='"'||H==="'"||H==="`"){K=q(K,H)-1;continue}if(H==="/"&&$[K+1]==="/"){K=Q(K+2)-1;continue}if(H==="/"&&$[K+1]==="*"){K=G(K)-1;continue}if(H==="/"&&U(K)){K=W(K)-1;continue}}return-1}function k8($,J,Z,X,Y,z,Q){let G=b5($,X,Y,z);if(G<=X)return;let q=$.slice(X+1,G),U=/\r?\n/.test(q),W=v5($),K=[],H=0,V=X+1,A=y5($.slice(X+1,G)),_=0;for(let F of A){let M=X+1+F.start,T=X+1+F.end;if(_=T,F.type==="Punct"){if(F.value===Y)H++;else if(F.value===z&&H>0)H--;else if(F.value===","&&H===0)K.push({start:V,end:M}),V=T}}if(K.push({start:V,end:G}),!U){for(let F of K){let M=$.slice(F.start,F.end);if(/\r?\n/.test(M)){let T=W.indexToLoc(F.start);Z.push({filePath:J,line:T.line,column:T.column,ruleId:Q,message:"Should not have line breaks between items",severity:"warning"});break}}return}let w=q.indexOf(`
160
160
  `);if(w>0){let F=q.slice(0,w),M=(F.match(/,/g)||[]).length,T=q.slice(w+1),E=T.includes(`
161
- `),j=T.includes(",");if(M>=1&&/\S,\s*\S/.test(F)&&!E&&!j){let O=W.indexToLoc(X+1+w+1);Z.push({filePath:J,line:O.line,column:O.column,ruleId:Q,message:"Should not have line breaks between items",severity:"warning"});return}else if(M>=1&&/\S,\s*\S/.test(F)){let O=W.indexToLoc(X+1+F.search(/,\s*\S/));Z.push({filePath:J,line:O.line,column:O.column,ruleId:Q,message:"Should have line breaks between items",severity:"warning"});return}}for(let F of K){let M=$.slice(X+1,F.start);if(!/\n[ \t]*$/.test(M)&&M.trim()!==""){let T=W.indexToLoc(F.start);Z.push({filePath:J,line:T.line,column:T.column,ruleId:Q,message:"Should have line breaks between items",severity:"warning"});break}}}var k5={meta:{docs:"Enforce consistent newlines for list-like constructs (objects, arrays, named imports/exports)"},check:($,J)=>{let Z=[],X="style/consistent-list-newline";for(let Y=0;Y<$.length;Y++){let z=$[Y];if(z==="{"){let Q=Y-1;while(Q>=0&&/[ \t]/.test($[Q]))Q--;if(Q>=0&&$[Q]===")")continue;let G=$.slice(Math.max(0,Y-60),Y);if(/\b(?:function|class|interface|type|enum|try|catch|finally|if|else|for|while|switch)\b[\s\S]*$/.test(G))continue;k8($,J.filePath,Z,Y,"{","}","style/consistent-list-newline")}else if(z==="[")k8($,J.filePath,Z,Y,"[","]","style/consistent-list-newline");else if(z==="i"&&$.startsWith("import",Y)){let Q=$.indexOf("{",Y);if(Q>-1)k8($,J.filePath,Z,Q,"{","}","style/consistent-list-newline")}else if(z==="e"&&$.startsWith("export",Y)){let Q=$.indexOf("{",Y);if(Q>-1)k8($,J.filePath,Z,Q,"{","}","style/consistent-list-newline")}}return Z}};function wG($){let J=$.trim();return J===""||J.startsWith("//")||J.startsWith("/*")}function X9($,J){for(let Z=J;Z<$.length;Z++)if(!wG($[Z]))return Z;return-1}function M1($,J,Z){if($[J].slice(Z).includes("{"))return!0;let Y=X9($,J+1);if(Y>=0){if($[Y].trim().startsWith("{"))return!0}return!1}function f8($,J,Z){let X=$[J].slice(Z);if(/\bif\b|\bfor\b|\bwhile\b|\bdo\b/.test(X))return!0;return!1}var f5={meta:{docs:"Enforce curly brackets similar to src-2: require braces when any branch/body requires them"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let z=0;z<X.length;z++){let Q=X[z],G=Q.match(/^(\s*)if\s*\(([^)]*)\)/);if(G){let U=G[0].length,W=M1(X,z,U),K=f8(X,z,U),H=z,V=W,A=K;while(!0){let _=X9(X,H+1);if(_<0)break;let w=X[_].trim();if(!w.startsWith("else"))break;let F=w.match(/^else\s+if\s*\(([^)]*)\)/);if(F){let M=X[_].indexOf(F[0])+F[0].length;V=V||M1(X,_,M),A=A||f8(X,_,M),H=_;continue}else{let M=X[_].indexOf("else")+4;V=V||M1(X,_,M),A=A||f8(X,_,M),H=_;break}}if(V||A){if(!W)Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,Q.indexOf("if")+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"});let _=z;while(!0){let w=X9(X,_+1);if(w<0)break;let F=X[w],M=F.trim();if(!M.startsWith("else"))break;let T=M.match(/^else\s+if\s*\(([^)]*)\)/);if(T){let E=F.indexOf(T[0])+T[0].length;if(!M1(X,w,E))Z.push({filePath:J.filePath,line:w+1,column:Math.max(1,F.indexOf("else")+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"});_=w;continue}else{let E=F.indexOf("else")+4;if(!M1(X,w,E))Z.push({filePath:J.filePath,line:w+1,column:Math.max(1,F.indexOf("else")+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"});break}}}}let q=Q.match(/^(\s*)(while|do|for|for\s+await)\b/);if(q){let U=q[0].length,W=M1(X,z,U),K=f8(X,z,U);if((W||K)&&!W)Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,Q.indexOf(q[2])+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"})}}let Y=BG($,J.filePath);for(let z of Y)Z.push({filePath:J.filePath,line:z.line,column:z.column,ruleId:"style/curly",message:z.message,severity:"warning"});return Z}};function BG($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim(),G=/^if\s*\(/.test(Q)?"if":/^else\s+if\s*\(/.test(Q)?"else-if":/^else\b/.test(Q)?"else":null;if(!G)continue;let q=0;if(G==="if"){let A=z.match(/if\s*\([^)]*\)/);q=A?z.indexOf(A[0])+A[0].length:z.indexOf("if")+2}else if(G==="else-if"){let A=z.match(/else\s+if\s*\([^)]*\)/);q=A?z.indexOf(A[0])+A[0].length:z.indexOf("else")+4}else q=z.indexOf("else")+4;let U=Y,W=z.indexOf("{",q);if(W<0){let A=function(w){for(let F=w;F<X.length;F++)if(X[F].trim()!=="")return F;return-1}(Y+1);if(A<0)continue;if(W=X[A].indexOf("{"),W<0)continue;U=A}let K=0,H=-1;for(let A=U;A<X.length;A++){let _=X[A],w=A===U?Math.max(0,W):0;for(let F=w;F<_.length;F++){let M=_[F];if(M==="{")K++;else if(M==="}"){if(K--,K===0){H=A;break}}}if(H>=0)break}if(H<0)continue;let V=[];for(let A=U+1;A<H;A++){let _=X[A].trim();if(_===""||/^\/\//.test(_))continue;if(V.push(_),V.length>1)break}if(V.length===1&&H===U+2){let A=V[0],_=/^(?:if|for|while|do|switch|try|catch|else)\b/.test(A),w=/[{}]/.test(A),F=(A.match(/\(/g)||[]).length,M=(A.match(/\)/g)||[]).length,T=F!==M,E=!1;for(let j=Y+1;j<X.length;j++){let O=X[j].trim();if(O===""||O==="}"||/^\/\//.test(O))continue;if(!/^else\b/.test(O))break;let v=X[j].indexOf("else")+4,k=O.match(/^else\s+if\s*\([^)]*\)/);if(k)v=X[j].indexOf(k[0])+k[0].length;let L=j,h=X[j].indexOf("{",v);if(h<0){let I=function(C){for(let N=C;N<X.length;N++)if(X[N].trim()!=="")return N;return-1}(j+1);if(I<0)break;if(h=X[I].indexOf("{"),h<0)continue;L=I}let b=0,P=-1;for(let I=L;I<X.length;I++){let S=X[I],C=I===L?Math.max(0,h):0;for(let N=C;N<S.length;N++){let R=S[N];if(R==="{")b++;else if(R==="}"){if(b--,b===0){P=I;break}}}if(P>=0)break}if(P>=0){let I=0;for(let S=L+1;S<P;S++){let C=X[S].trim();if(C===""||/^\/\//.test(C))continue;if(I++,I>1){E=!0;break}}}if(E)break}if(!E&&G==="if"){let j=function(v){for(let k=v;k<X.length;k++){let L=X[k].trim();if(L!==""&&L!=="}"&&!/^\/\//.test(L))return k}return-1}(H+1);if(j>=0&&/^else\b/.test(X[j].trim())){let O=X[j].indexOf("else")+4,v=X[j].trim().match(/^else\s+if\s*\([^)]*\)/);if(v)O=X[j].indexOf(v[0])+v[0].length;let k=j,L=X[j].indexOf("{",O);if(L<0){let h=function(P){for(let I=P;I<X.length;I++)if(X[I].trim()!=="")return I;return-1}(j+1);if(h>=0)L=X[h].indexOf("{"),k=L>=0?h:k}if(L>=0){let h=0,b=-1;for(let P=k;P<X.length;P++){let I=X[P],S=P===k?Math.max(0,L):0;for(let C=S;C<I.length;C++){let N=I[C];if(N==="{")h++;else if(N==="}"){if(h--,h===0){b=P;break}}}if(b>=0)break}if(b>=0){let P=0;for(let I=k+1;I<b;I++){let S=X[I].trim();if(S===""||/^\/\//.test(S))continue;if(++P>1){E=!0;break}}}}}}if(!_&&!w&&!T&&!E)Z.push({line:U+1,column:Math.max(1,X[U].indexOf("{")+1),message:"Unnecessary curly braces around single statement"})}}return Z}var g5={meta:{docs:"Enforce dot on the property line in chained method calls",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=e0($);for(let z=0;z<X.length;z++){let Q=X[z],G=Q.trim();if(!G||G.startsWith("//")||G.startsWith("*")||G.startsWith("/*"))continue;if(Y[z+1])continue;if(G.endsWith(".")&&z+1<X.length){let q=X[z+1].trim();if(q&&/^[a-zA-Z_$]/.test(q))Z.push({filePath:J.filePath,line:z+1,column:Q.length,ruleId:"style/dot-location",message:"Dot should be on the same line as the property",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=e0($);for(let Y=0;Y<J.length;Y++){let z=J[Y];if(z.trim().endsWith(".")&&!X[Y+1]&&Y+1<J.length){let G=J[Y+1],q=G.trim();if(q&&/^[a-zA-Z_$]/.test(q)){Z.push(z.replace(/\.\s*$/,""));let U=G.match(/^(\s*)/)?.[1]||"";J[Y+1]=`${U}.${q}`;continue}}Z.push(z)}return Z.join(`
162
- `)}};function p5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var x5=["===","!==",">>>","==","!=",">=","<=","&&","||","??","**","<<",">>","+","-","*","/","%","|","&","^",">","<","instanceof","in"],ZB=new RegExp(`^(${x5.map(($)=>$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\s`),MG=new Set(["in","instanceof"]),jG=/^(?:instanceof|in)\s/;function g8($){if(jG.test($))return!0;for(let J of x5){if(MG.has(J))continue;if($.startsWith(J)){let Z=$[J.length];if(Z===void 0||Z===" "||Z==="\t")return!0}}return!1}function Y9($){let J=$.match(/^(\s*)/);return J?J[1].length:0}var h5={meta:{docs:"Enforce consistent indentation of continuation lines in multiline binary expressions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;if(!g8(Q))continue;if(p5(z,0))continue;let G=Y-1;while(G>=0){let W=X[G].trim();if(!W||W.startsWith("//")||W.startsWith("*")||W.startsWith("/*")){G--;continue}if(g8(W)){G--;continue}break}if(G<0)continue;let q=Y9(X[G])+2,U=Y9(z);if(U!==q)Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/indent-binary-ops",message:`Expected indentation of ${q} spaces for binary operator continuation, but found ${U}`,severity:"warning"})}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*")){X.push(z);continue}if(!g8(Q)||p5(z,0)){X.push(z);continue}let G=-1;for(let W=X.length-1;W>=0;W--){let K=X[W].trim();if(!K||K.startsWith("//")||K.startsWith("*")||K.startsWith("/*"))continue;if(g8(K))continue;G=W;break}if(G<0){X.push(z);continue}let q=Y9(X[G])+2,U=" ".repeat(q)+Q;X.push(U);continue}return X.join(`
161
+ `),j=T.includes(",");if(M>=1&&/\S,\s*\S/.test(F)&&!E&&!j){let O=W.indexToLoc(X+1+w+1);Z.push({filePath:J,line:O.line,column:O.column,ruleId:Q,message:"Should not have line breaks between items",severity:"warning"});return}else if(M>=1&&/\S,\s*\S/.test(F)){let O=W.indexToLoc(X+1+F.search(/,\s*\S/));Z.push({filePath:J,line:O.line,column:O.column,ruleId:Q,message:"Should have line breaks between items",severity:"warning"});return}}for(let F of K){let M=$.slice(X+1,F.start);if(!/\n[ \t]*$/.test(M)&&M.trim()!==""){let T=W.indexToLoc(F.start);Z.push({filePath:J,line:T.line,column:T.column,ruleId:Q,message:"Should have line breaks between items",severity:"warning"});break}}}var k5={meta:{docs:"Enforce consistent newlines for list-like constructs (objects, arrays, named imports/exports)"},check:($,J)=>{let Z=[],X="style/consistent-list-newline";for(let Y=0;Y<$.length;Y++){let z=$[Y];if(z==="{"){let Q=Y-1;while(Q>=0&&/[ \t]/.test($[Q]))Q--;if(Q>=0&&$[Q]===")")continue;let G=$.slice(Math.max(0,Y-60),Y);if(/\b(?:function|class|interface|type|enum|try|catch|finally|if|else|for|while|switch)\b[\s\S]*$/.test(G))continue;k8($,J.filePath,Z,Y,"{","}","style/consistent-list-newline")}else if(z==="[")k8($,J.filePath,Z,Y,"[","]","style/consistent-list-newline");else if(z==="i"&&$.startsWith("import",Y)){let Q=$.indexOf("{",Y);if(Q>-1)k8($,J.filePath,Z,Q,"{","}","style/consistent-list-newline")}else if(z==="e"&&$.startsWith("export",Y)){let Q=$.indexOf("{",Y);if(Q>-1)k8($,J.filePath,Z,Q,"{","}","style/consistent-list-newline")}}return Z}};function BG($){let J=$.trim();return J===""||J.startsWith("//")||J.startsWith("/*")}function X9($,J){for(let Z=J;Z<$.length;Z++)if(!BG($[Z]))return Z;return-1}function M1($,J,Z){if($[J].slice(Z).includes("{"))return!0;let Y=X9($,J+1);if(Y>=0){if($[Y].trim().startsWith("{"))return!0}return!1}function f8($,J,Z){let X=$[J].slice(Z);if(/\bif\b|\bfor\b|\bwhile\b|\bdo\b/.test(X))return!0;return!1}var f5={meta:{docs:"Enforce curly brackets similar to src-2: require braces when any branch/body requires them"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let z=0;z<X.length;z++){let Q=X[z],G=Q.match(/^(\s*)if\s*\(([^)]*)\)/);if(G){let U=G[0].length,W=M1(X,z,U),K=f8(X,z,U),H=z,V=W,A=K;while(!0){let _=X9(X,H+1);if(_<0)break;let w=X[_].trim();if(!w.startsWith("else"))break;let F=w.match(/^else\s+if\s*\(([^)]*)\)/);if(F){let M=X[_].indexOf(F[0])+F[0].length;V=V||M1(X,_,M),A=A||f8(X,_,M),H=_;continue}else{let M=X[_].indexOf("else")+4;V=V||M1(X,_,M),A=A||f8(X,_,M),H=_;break}}if(V||A){if(!W)Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,Q.indexOf("if")+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"});let _=z;while(!0){let w=X9(X,_+1);if(w<0)break;let F=X[w],M=F.trim();if(!M.startsWith("else"))break;let T=M.match(/^else\s+if\s*\(([^)]*)\)/);if(T){let E=F.indexOf(T[0])+T[0].length;if(!M1(X,w,E))Z.push({filePath:J.filePath,line:w+1,column:Math.max(1,F.indexOf("else")+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"});_=w;continue}else{let E=F.indexOf("else")+4;if(!M1(X,w,E))Z.push({filePath:J.filePath,line:w+1,column:Math.max(1,F.indexOf("else")+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"});break}}}}let q=Q.match(/^(\s*)(while|do|for|for\s+await)\b/);if(q){let U=q[0].length,W=M1(X,z,U),K=f8(X,z,U);if((W||K)&&!W)Z.push({filePath:J.filePath,line:z+1,column:Math.max(1,Q.indexOf(q[2])+1),ruleId:"style/curly",message:"Expect curly brackets",severity:"warning"})}}let Y=MG($,J.filePath);for(let z of Y)Z.push({filePath:J.filePath,line:z.line,column:z.column,ruleId:"style/curly",message:z.message,severity:"warning"});return Z}};function MG($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim(),G=/^if\s*\(/.test(Q)?"if":/^else\s+if\s*\(/.test(Q)?"else-if":/^else\b/.test(Q)?"else":null;if(!G)continue;let q=0;if(G==="if"){let A=z.match(/if\s*\([^)]*\)/);q=A?z.indexOf(A[0])+A[0].length:z.indexOf("if")+2}else if(G==="else-if"){let A=z.match(/else\s+if\s*\([^)]*\)/);q=A?z.indexOf(A[0])+A[0].length:z.indexOf("else")+4}else q=z.indexOf("else")+4;let U=Y,W=z.indexOf("{",q);if(W<0){let A=function(w){for(let F=w;F<X.length;F++)if(X[F].trim()!=="")return F;return-1}(Y+1);if(A<0)continue;if(W=X[A].indexOf("{"),W<0)continue;U=A}let K=0,H=-1;for(let A=U;A<X.length;A++){let _=X[A],w=A===U?Math.max(0,W):0;for(let F=w;F<_.length;F++){let M=_[F];if(M==="{")K++;else if(M==="}"){if(K--,K===0){H=A;break}}}if(H>=0)break}if(H<0)continue;let V=[];for(let A=U+1;A<H;A++){let _=X[A].trim();if(_===""||/^\/\//.test(_))continue;if(V.push(_),V.length>1)break}if(V.length===1&&H===U+2){let A=V[0],_=/^(?:if|for|while|do|switch|try|catch|else)\b/.test(A),w=/[{}]/.test(A),F=(A.match(/\(/g)||[]).length,M=(A.match(/\)/g)||[]).length,T=F!==M,E=!1;for(let j=Y+1;j<X.length;j++){let O=X[j].trim();if(O===""||O==="}"||/^\/\//.test(O))continue;if(!/^else\b/.test(O))break;let v=X[j].indexOf("else")+4,k=O.match(/^else\s+if\s*\([^)]*\)/);if(k)v=X[j].indexOf(k[0])+k[0].length;let L=j,h=X[j].indexOf("{",v);if(h<0){let I=function(C){for(let N=C;N<X.length;N++)if(X[N].trim()!=="")return N;return-1}(j+1);if(I<0)break;if(h=X[I].indexOf("{"),h<0)continue;L=I}let b=0,P=-1;for(let I=L;I<X.length;I++){let S=X[I],C=I===L?Math.max(0,h):0;for(let N=C;N<S.length;N++){let R=S[N];if(R==="{")b++;else if(R==="}"){if(b--,b===0){P=I;break}}}if(P>=0)break}if(P>=0){let I=0;for(let S=L+1;S<P;S++){let C=X[S].trim();if(C===""||/^\/\//.test(C))continue;if(I++,I>1){E=!0;break}}}if(E)break}if(!E&&G==="if"){let j=function(v){for(let k=v;k<X.length;k++){let L=X[k].trim();if(L!==""&&L!=="}"&&!/^\/\//.test(L))return k}return-1}(H+1);if(j>=0&&/^else\b/.test(X[j].trim())){let O=X[j].indexOf("else")+4,v=X[j].trim().match(/^else\s+if\s*\([^)]*\)/);if(v)O=X[j].indexOf(v[0])+v[0].length;let k=j,L=X[j].indexOf("{",O);if(L<0){let h=function(P){for(let I=P;I<X.length;I++)if(X[I].trim()!=="")return I;return-1}(j+1);if(h>=0)L=X[h].indexOf("{"),k=L>=0?h:k}if(L>=0){let h=0,b=-1;for(let P=k;P<X.length;P++){let I=X[P],S=P===k?Math.max(0,L):0;for(let C=S;C<I.length;C++){let N=I[C];if(N==="{")h++;else if(N==="}"){if(h--,h===0){b=P;break}}}if(b>=0)break}if(b>=0){let P=0;for(let I=k+1;I<b;I++){let S=X[I].trim();if(S===""||/^\/\//.test(S))continue;if(++P>1){E=!0;break}}}}}}if(!_&&!w&&!T&&!E)Z.push({line:U+1,column:Math.max(1,X[U].indexOf("{")+1),message:"Unnecessary curly braces around single statement"})}}return Z}var g5={meta:{docs:"Enforce dot on the property line in chained method calls",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=e0($);for(let z=0;z<X.length;z++){let Q=X[z],G=Q.trim();if(!G||G.startsWith("//")||G.startsWith("*")||G.startsWith("/*"))continue;if(Y[z+1])continue;if(G.endsWith(".")&&z+1<X.length){let q=X[z+1].trim();if(q&&/^[a-zA-Z_$]/.test(q))Z.push({filePath:J.filePath,line:z+1,column:Q.length,ruleId:"style/dot-location",message:"Dot should be on the same line as the property",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=e0($);for(let Y=0;Y<J.length;Y++){let z=J[Y];if(z.trim().endsWith(".")&&!X[Y+1]&&Y+1<J.length){let G=J[Y+1],q=G.trim();if(q&&/^[a-zA-Z_$]/.test(q)){Z.push(z.replace(/\.\s*$/,""));let U=G.match(/^(\s*)/)?.[1]||"";J[Y+1]=`${U}.${q}`;continue}}Z.push(z)}return Z.join(`
162
+ `)}};function p5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var x5=["===","!==",">>>","==","!=",">=","<=","&&","||","??","**","<<",">>","+","-","*","/","%","|","&","^",">","<","instanceof","in"],JB=new RegExp(`^(${x5.map(($)=>$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\s`),jG=new Set(["in","instanceof"]),NG=/^(?:instanceof|in)\s/;function g8($){if(NG.test($))return!0;for(let J of x5){if(jG.has(J))continue;if($.startsWith(J)){let Z=$[J.length];if(Z===void 0||Z===" "||Z==="\t")return!0}}return!1}function Y9($){let J=$.match(/^(\s*)/);return J?J[1].length:0}var h5={meta:{docs:"Enforce consistent indentation of continuation lines in multiline binary expressions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;if(!g8(Q))continue;if(p5(z,0))continue;let G=Y-1;while(G>=0){let W=X[G].trim();if(!W||W.startsWith("//")||W.startsWith("*")||W.startsWith("/*")){G--;continue}if(g8(W)){G--;continue}break}if(G<0)continue;let q=Y9(X[G])+2,U=Y9(z);if(U!==q)Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/indent-binary-ops",message:`Expected indentation of ${q} spaces for binary operator continuation, but found ${U}`,severity:"warning"})}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*")){X.push(z);continue}if(!g8(Q)||p5(z,0)){X.push(z);continue}let G=-1;for(let W=X.length-1;W>=0;W--){let K=X[W].trim();if(!K||K.startsWith("//")||K.startsWith("*")||K.startsWith("/*"))continue;if(g8(K))continue;G=W;break}if(G<0){X.push(z);continue}let q=Y9(X[G])+2,U=" ".repeat(q)+Q;X.push(U);continue}return X.join(`
163
163
  `)}};var u5=new Set(["if","for","while","switch","catch","function","return","typeof","void","delete","throw","new","await","class","import","export","from","of","in","case","default","yield","else","do","try","finally","with","async","super","this","extends","implements","instanceof"]),p8=/([a-zA-Z_$][a-zA-Z0-9_$]*)\s+\(/g;function m5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var d5={meta:{docs:"Disallow spaces between function name and opening parenthesis in calls",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;p8.lastIndex=0;while((G=p8.exec(z))!==null){let q=G[1],U=G.index;if(m5(z,U))continue;if(u5.has(q))continue;let W=z.slice(0,U).trimEnd();if(W.endsWith("function")||W.endsWith("function*"))continue;if(/\b(?:get|set)\s*$/.test(W))continue;let K=U+q.length;Z.push({filePath:J.filePath,line:Y+1,column:K+1,ruleId:"style/function-call-spacing",message:"Unexpected space between function name and parenthesis",severity:"warning"})}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*")){X.push(z);continue}let G=z,q=[],U;p8.lastIndex=0;while((U=p8.exec(z))!==null){let W=U[1],K=U.index;if(m5(z,K))continue;if(u5.has(W))continue;let H=z.slice(0,K).trimEnd();if(H.endsWith("function")||H.endsWith("function*"))continue;if(/\b(?:get|set)\s*$/.test(H))continue;q.push({index:K,fullMatch:U[0],identifier:W})}for(let W=q.length-1;W>=0;W--){let K=q[W],H=K.index,V=H+K.fullMatch.length;G=`${G.slice(0,H)}${K.identifier}(${G.slice(V)}`}X.push(G)}return X.join(`
164
164
  `)}};var o5=/\bfunction\s*\*/g;function c5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var r5={meta:{docs:"Enforce spacing around * in generator functions (space after, no space before)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;o5.lastIndex=0;while((G=o5.exec(z))!==null){let U=G.index;if(c5(z,U))continue;let W=G[0],K=U+W.indexOf("*"),H=K+1;if(W!=="function*")Z.push({filePath:J.filePath,line:Y+1,column:K+1,ruleId:"style/generator-star-spacing",message:"Unexpected space before * in generator function",severity:"warning"});if(H<z.length&&z[H]!==" "&&z[H]!=="\t"&&z[H]!==`
165
- `&&z[H]!=="(")Z.push({filePath:J.filePath,line:Y+1,column:H+1,ruleId:"style/generator-star-spacing",message:"Missing space after * in generator function",severity:"warning"})}if(Q.match(/^(?:async\s+)?\*\s*([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/)){let U=z.indexOf("*",z.indexOf(Q.charAt(0)));if(!c5(z,U)){let W=U+1;if(W<z.length&&z[W]!==" "&&z[W]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/generator-star-spacing",message:"Missing space after * in generator method",severity:"warning"})}}}return Z},fix($,J){let Z=$;return Z=Z.replace(/\bfunction\s+\*/g,"function*"),Z=Z.replace(/\bfunction\*([a-zA-Z_$])/g,"function* $1"),Z=Z.replace(/(^\s*(?:async\s+)?)\*([a-zA-Z_$])/gm,"$1* $2"),Z}};var l5={meta:{docs:"Enforce newline after if when without braces"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(!z.match(/^\s*if\s*\([^)]*\)\s*([^\s{/].*)$/))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf("if")+1),ruleId:"style/if-newline",message:"Expect newline after if",severity:"warning"})}return Z}};var NG=["$","unindent","unIndent"],a5={meta:{docs:"Enforce consistent indentation inside unindent-style tagged templates"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/^\s*/)?.[0]??"",G=/([$A-Z_][\w$]*)\s*`/gi,q;while(q=G.exec(z)){let U=q[1];if(!NG.includes(U))continue;if(z.slice(q.index+q[0].length).includes("`"))continue;let K=-1;for(let V=Y+1;V<X.length;V++)if(X[V].includes("`")){K=V;break}if(K<0)continue;let H=`${Q} `;for(let V=Y+1;V<K;V++){let A=X[V];if(A.trim()==="")continue;let _=A.match(/^\s*/)?.[0]??"";if(!_.startsWith(H)){Z.push({filePath:J.filePath,line:V+1,column:(_.length||0)+1,ruleId:"style/indent-unindent",message:"Consistent indentation in unindent tag",severity:"warning"});break}}}}return Z}};var TG=/^(\s*)(["']?[a-zA-Z_$][a-zA-Z0-9_$]*["']?\s*(?:\?)?):(\S)/;function s5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var n5={meta:{docs:"Require space after colon in object properties",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=z.match(TG);if(G){let U=z.indexOf(":",G[1].length);if(U!==-1&&!s5(z,U)){let W=z[U+1];if(W&&W!==" "&&W!=="\t"&&W!==`
165
+ `&&z[H]!=="(")Z.push({filePath:J.filePath,line:Y+1,column:H+1,ruleId:"style/generator-star-spacing",message:"Missing space after * in generator function",severity:"warning"})}if(Q.match(/^(?:async\s+)?\*\s*([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/)){let U=z.indexOf("*",z.indexOf(Q.charAt(0)));if(!c5(z,U)){let W=U+1;if(W<z.length&&z[W]!==" "&&z[W]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/generator-star-spacing",message:"Missing space after * in generator method",severity:"warning"})}}}return Z},fix($,J){let Z=$;return Z=Z.replace(/\bfunction\s+\*/g,"function*"),Z=Z.replace(/\bfunction\*([a-zA-Z_$])/g,"function* $1"),Z=Z.replace(/(^\s*(?:async\s+)?)\*([a-zA-Z_$])/gm,"$1* $2"),Z}};var l5={meta:{docs:"Enforce newline after if when without braces"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(!z.match(/^\s*if\s*\([^)]*\)\s*([^\s{/].*)$/))continue;Z.push({filePath:J.filePath,line:Y+1,column:Math.max(1,z.indexOf("if")+1),ruleId:"style/if-newline",message:"Expect newline after if",severity:"warning"})}return Z}};var TG=["$","unindent","unIndent"],a5={meta:{docs:"Enforce consistent indentation inside unindent-style tagged templates"},check:($,J)=>{let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/^\s*/)?.[0]??"",G=/([$A-Z_][\w$]*)\s*`/gi,q;while(q=G.exec(z)){let U=q[1];if(!TG.includes(U))continue;if(z.slice(q.index+q[0].length).includes("`"))continue;let K=-1;for(let V=Y+1;V<X.length;V++)if(X[V].includes("`")){K=V;break}if(K<0)continue;let H=`${Q} `;for(let V=Y+1;V<K;V++){let A=X[V];if(A.trim()==="")continue;let _=A.match(/^\s*/)?.[0]??"";if(!_.startsWith(H)){Z.push({filePath:J.filePath,line:V+1,column:(_.length||0)+1,ruleId:"style/indent-unindent",message:"Consistent indentation in unindent tag",severity:"warning"});break}}}}return Z}};var EG=/^(\s*)(["']?[a-zA-Z_$][a-zA-Z0-9_$]*["']?\s*(?:\?)?):(\S)/;function s5($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var n5={meta:{docs:"Require space after colon in object properties",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=z.match(EG);if(G){let U=z.indexOf(":",G[1].length);if(U!==-1&&!s5(z,U)){let W=z[U+1];if(W&&W!==" "&&W!=="\t"&&W!==`
166
166
  `)Z.push({filePath:J.filePath,line:Y+1,column:U+2,ruleId:"style/key-spacing",message:"Missing space after colon in property",severity:"warning"})}}let q=Q.match(/^(["']?[a-zA-Z_$][a-zA-Z0-9_$]*["']?)\s+:/);if(q&&!Q.match(/^\s*(case|default)\b/)){let U=z.indexOf(":",z.indexOf(q[1])+q[1].length);if(U!==-1&&!s5(z,U))Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/key-spacing",message:"Unexpected space before colon in property",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/^(\s*)(["']?[a-zA-Z_$][a-zA-Z0-9_$]*["']?\s*(?:\?)?):(\S)/,"$1$2: $3"),Z.push(Y)}return Z.join(`
167
- `)}};var EG=["if","else","for","while","do","switch","case","return","throw","try","catch","finally","const","let","var","typeof","instanceof","in","of","new","delete","void","yield","await","async","from","import","export","default","class","extends","as","break","continue"],i5=new RegExp(`(?:^|[^\\w$.])(${EG.join("|")})(?=[^\\w$]|$)`,"g");function DG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var t5={meta:{docs:"Require space before and after keywords",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;i5.lastIndex=0;while((G=i5.exec(z))!==null){let q=G[0].charAt(0)===G[1].charAt(0)?"":G[0].charAt(0),U=G.index+q.length,W=U+G[1].length;if(DG(z,U))continue;if(U>0){let K=z[U-1];if(K===")"||K==="}")Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/keyword-spacing",message:`Missing space before keyword '${G[1]}'`,severity:"warning"})}if(W<z.length){let K=z[W];if(K!==" "&&K!=="\t"&&K!==";"&&K!==","&&K!==":"&&K!=="."){if(K==="("&&(G[1]==="if"||G[1]==="for"||G[1]==="while"||G[1]==="switch"||G[1]==="catch"))Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/keyword-spacing",message:`Missing space after keyword '${G[1]}'`,severity:"warning"})}}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;for(let z of["if","for","while","switch","catch"]){let Q=new RegExp(`(\\b${z})\\(`,"g");Y=Y.replace(Q,"$1 (")}for(let z of["else","catch","finally"])Y=Y.replace(new RegExp(`\\)${z}\\b`,"g"),`) ${z}`),Y=Y.replace(new RegExp(`\\}${z}\\b`,"g"),`} ${z}`);Z.push(Y)}return Z.join(`
167
+ `)}};var DG=["if","else","for","while","do","switch","case","return","throw","try","catch","finally","const","let","var","typeof","instanceof","in","of","new","delete","void","yield","await","async","from","import","export","default","class","extends","as","break","continue"],i5=new RegExp(`(?:^|[^\\w$.])(${DG.join("|")})(?=[^\\w$]|$)`,"g");function RG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var t5={meta:{docs:"Require space before and after keywords",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;i5.lastIndex=0;while((G=i5.exec(z))!==null){let q=G[0].charAt(0)===G[1].charAt(0)?"":G[0].charAt(0),U=G.index+q.length,W=U+G[1].length;if(RG(z,U))continue;if(U>0){let K=z[U-1];if(K===")"||K==="}")Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/keyword-spacing",message:`Missing space before keyword '${G[1]}'`,severity:"warning"})}if(W<z.length){let K=z[W];if(K!==" "&&K!=="\t"&&K!==";"&&K!==","&&K!==":"&&K!=="."){if(K==="("&&(G[1]==="if"||G[1]==="for"||G[1]==="while"||G[1]==="switch"||G[1]==="catch"))Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/keyword-spacing",message:`Missing space after keyword '${G[1]}'`,severity:"warning"})}}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;for(let z of["if","for","while","switch","catch"]){let Q=new RegExp(`(\\b${z})\\(`,"g");Y=Y.replace(Q,"$1 (")}for(let z of["else","catch","finally"])Y=Y.replace(new RegExp(`\\)${z}\\b`,"g"),`) ${z}`),Y=Y.replace(new RegExp(`\\}${z}\\b`,"g"),`} ${z}`);Z.push(Y)}return Z.join(`
168
168
  `)}};var e5=/^\s*(?:public|private|protected|static|readonly|abstract|override|async|get|set|\*|#|[a-zA-Z_$])/,$6={meta:{docs:"Require blank line between class members",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z=0,Q=0,G=-1;for(let q=0;q<X.length;q++){let W=X[q].trim();if(W.match(/\bclass\b/)&&(W.includes("{")||q+1<X.length&&X[q+1].trim()==="{"))Y=!0,Q=z+1;let K=z;for(let H of W){if(H==="{")z++;if(H==="}")z--}if(Y&&z<Q){Y=!1,G=-1;continue}if(!Y)continue;if(K>Q&&z===Q&&W.endsWith("}")){G=q;continue}if(K===Q){if(!W||W.startsWith("//")||W.startsWith("*")||W.startsWith("/*")||W==="}")continue;if(e5.test(W)){if(G!==-1&&q===G+1)Z.push({filePath:J.filePath,line:q+1,column:1,ruleId:"style/lines-between-class-members",message:"Missing blank line between class members",severity:"warning"});if(!W.endsWith("{"))G=q}}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[],Y=!1,z=0,Q=0,G=-1;for(let q=0;q<Z.length;q++){let U=Z[q],W=U.trim();if(W.match(/\bclass\b/)&&(W.includes("{")||q+1<Z.length&&Z[q+1].trim()==="{"))Y=!0,Q=z+1;let K=z;for(let H of W){if(H==="{")z++;if(H==="}")z--}if(Y&&z<Q){Y=!1,G=-1,X.push(U);continue}if(Y&&K>Q&&z===Q&&W.endsWith("}")){G=q,X.push(U);continue}if(Y&&K===Q&&W&&!W.startsWith("//")&&!W.startsWith("*")&&!W.startsWith("/*")&&W!=="}"&&e5.test(W)){if(G!==-1&&q===G+1)X.push("");if(!W.endsWith("{"))G=q}X.push(U)}return X.join(`
169
- `)}};var Z6={meta:{docs:"Limit the number of statements allowed on a single line"},check:($,J)=>{let Z=J.options&&typeof J.options.max==="number"?J.options.max:1,X=[],Y=$.split(/\r?\n/),z=(Q)=>{let G=RG(Q),q=G>=0?Q.slice(0,G):Q,U=0,W=!1,K=!1,H=!1,V=!1,A=!1,_=!1,w=!1,F=0,M="",T=(O)=>{if(O===" "||O==="\t")return;M=O};for(let O=0;O<q.length;O++){let v=q[O];if(_){_=!1;continue}if(v==="\\"){_=!0;continue}if(V){if(A){if(v==="]")A=!1;continue}if(v==="["){A=!0;continue}if(v==="/"){V=!1;while(O+1<q.length&&/[a-z]/i.test(q[O+1]))O++;M="/"}continue}if(!K&&!H&&v==="'"){W=!W,T(W?"'":"x");continue}if(!W&&!H&&v==='"'){K=!K,T(K?'"':"x");continue}if(!W&&!K&&v==="`"){H=!H,T(H?"`":"x");continue}if(W||K||H)continue;if(v==="/"&&J6(M,q,O)){V=!0;continue}if(!w){if(v==="f"&&q.slice(O,O+4).match(/^for\b/)){let k=q.slice(O+3).trimStart(),L=q.length-k.length;if(q[L]==="("){w=!0,F=1,O=L,M="(";continue}}}else if(v==="(")F++;else if(v===")"){if(F--,F<=0)w=!1}else if(v===";"){T(v);continue}if(v===";")U++;T(v)}if(U===0)return 1;return q.trimEnd().endsWith(";")?U:U+1};for(let Q=0;Q<Y.length;Q++){let G=Y[Q];if(/^\s*$/.test(G))continue;let q=z(G);if(q>Z)X.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"max-statements-per-line",message:`This line has ${q} statements. Maximum allowed is ${Z}`,severity:"warning"})}return X}};function RG($){let J=!1,Z=!1,X=!1,Y=!1,z=!1,Q=!1,G="";for(let q=0;q<$.length;q++){let U=$[q];if(Q){Q=!1;continue}if(U==="\\"){Q=!0;continue}if(Y){if(z){if(U==="]")z=!1;continue}if(U==="["){z=!0;continue}if(U==="/"){Y=!1;while(q+1<$.length&&/[a-z]/i.test($[q+1]))q++;G="/"}continue}if(!Z&&!X&&U==="'"){J=!J,G=U;continue}if(!J&&!X&&U==='"'){Z=!Z,G=U;continue}if(!J&&!Z&&U==="`"){X=!X,G=U;continue}if(J||Z||X)continue;if(U==="/"&&$[q+1]==="/")return q;if(U==="/"&&J6(G,$,q)){Y=!0;continue}if(U!==" "&&U!=="\t")G=U}return-1}function J6($,J,Z){if($==="")return!0;if("([{,:;!?&|=<>~^+*%-".includes($))return!0;if(/[A-Za-z_$]/.test($)){if(J.slice(0,Z).trimEnd().match(/(?:^|[^A-Za-z0-9_$])(return|typeof|instanceof|new|delete|void|in|of|yield|await|throw|case)$/))return!0}return!1}function X6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var Y6={meta:{docs:"Enforce consistent multiline ternary expressions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=z.indexOf("?");if(G===-1)continue;if(z[G+1]==="."||z[G+1]==="?")continue;if(X6(z,G))continue;if(z.indexOf(":",G+1)!==-1)continue;for(let U=Y+1;U<Math.min(Y+10,X.length);U++){let W=X[U].trim();if(W.startsWith(":"))break;let K=W.indexOf(":");if(K>0&&!X6(X[U],K)){if(W.match(/^\w+\s*:/)||W.match(/^case\b/))continue;Z.push({filePath:J.filePath,line:U+1,column:X[U].indexOf(":")+1,ruleId:"style/multiline-ternary",message:"In multiline ternary, ':' should be at the start of the line",severity:"warning"});break}}}return Z}};var z6=new RegExp("\\bnew\\s+([A-Z][a-zA-Z0-9_$.]+)(?![a-zA-Z0-9_$])(?:\\s*<[^>]*>)?\\s*(?=[^(;\\n]|$)","g");function OG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var Q6={meta:{docs:"Require parentheses when invoking a constructor with no arguments",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;z6.lastIndex=0;while((G=z6.exec(z))!==null){if(OG(z,G.index))continue;if(z.slice(G.index+G[0].length).startsWith("("))continue;if(G[0].includes("new."))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"style/new-parens",message:`Missing parentheses invoking constructor '${G[1]}'`,severity:"warning",help:"Add () after the constructor name."})}}return Z},fix($){return $.replace(/\bnew\s+([A-Z][a-zA-Z0-9_$.]+)(?![a-zA-Z0-9_$])(\s*<[^>]*>)?\s*(?=[^(]|$)/g,(J,Z,X)=>{if(J.slice(J.indexOf(Z)+Z.length+(X?.length||0)).trim().startsWith("("))return J;return`new ${Z}${X||""}()`})}};var VB=new RegExp("\\breturn\\s+\\(([^()]*)\\)\\s*[;\\n]","g"),G6=/^[a-zA-Z_$][a-zA-Z0-9_$.[\]'"`]*$/;var q6={meta:{docs:"Remove redundant parentheses in return statements",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=new RegExp("^return\\s+\\(([^()]*)\\)\\s*;?\\s*$"),q=Q.match(G);if(q){let U=q[1].trim();if(G6.test(U)||/^['"`]/.test(U)||/^\d/.test(U)||U==="true"||U==="false"||U==="null"||U==="undefined")Z.push({filePath:J.filePath,line:Y+1,column:z.indexOf("(")+1,ruleId:"style/no-extra-parens",message:"Unnecessary parentheses around return value",severity:"warning",help:"Remove the outer parentheses."})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.trim(),z=new RegExp("^return\\s+\\(([^()]*)\\)\\s*(;?)\\s*$"),Q=Y.match(z);if(Q){let G=Q[1].trim(),q=Q[2];if(G6.test(G)||/^['"`]/.test(G)||/^\d/.test(G)||G==="true"||G==="false"||G==="null"||G==="undefined"){let U=X.match(/^(\s*)/)?.[1]||"";Z.push(`${U}return ${G}${q}`);continue}}Z.push(X)}return Z.join(`
169
+ `)}};var Z6={meta:{docs:"Limit the number of statements allowed on a single line"},check:($,J)=>{let Z=J.options&&typeof J.options.max==="number"?J.options.max:1,X=[],Y=$.split(/\r?\n/),z=(Q)=>{let G=OG(Q),q=G>=0?Q.slice(0,G):Q,U=0,W=!1,K=!1,H=!1,V=!1,A=!1,_=!1,w=!1,F=0,M="",T=(O)=>{if(O===" "||O==="\t")return;M=O};for(let O=0;O<q.length;O++){let v=q[O];if(_){_=!1;continue}if(v==="\\"){_=!0;continue}if(V){if(A){if(v==="]")A=!1;continue}if(v==="["){A=!0;continue}if(v==="/"){V=!1;while(O+1<q.length&&/[a-z]/i.test(q[O+1]))O++;M="/"}continue}if(!K&&!H&&v==="'"){W=!W,T(W?"'":"x");continue}if(!W&&!H&&v==='"'){K=!K,T(K?'"':"x");continue}if(!W&&!K&&v==="`"){H=!H,T(H?"`":"x");continue}if(W||K||H)continue;if(v==="/"&&J6(M,q,O)){V=!0;continue}if(!w){if(v==="f"&&q.slice(O,O+4).match(/^for\b/)){let k=q.slice(O+3).trimStart(),L=q.length-k.length;if(q[L]==="("){w=!0,F=1,O=L,M="(";continue}}}else if(v==="(")F++;else if(v===")"){if(F--,F<=0)w=!1}else if(v===";"){T(v);continue}if(v===";")U++;T(v)}if(U===0)return 1;return q.trimEnd().endsWith(";")?U:U+1};for(let Q=0;Q<Y.length;Q++){let G=Y[Q];if(/^\s*$/.test(G))continue;let q=z(G);if(q>Z)X.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"max-statements-per-line",message:`This line has ${q} statements. Maximum allowed is ${Z}`,severity:"warning"})}return X}};function OG($){let J=!1,Z=!1,X=!1,Y=!1,z=!1,Q=!1,G="";for(let q=0;q<$.length;q++){let U=$[q];if(Q){Q=!1;continue}if(U==="\\"){Q=!0;continue}if(Y){if(z){if(U==="]")z=!1;continue}if(U==="["){z=!0;continue}if(U==="/"){Y=!1;while(q+1<$.length&&/[a-z]/i.test($[q+1]))q++;G="/"}continue}if(!Z&&!X&&U==="'"){J=!J,G=U;continue}if(!J&&!X&&U==='"'){Z=!Z,G=U;continue}if(!J&&!Z&&U==="`"){X=!X,G=U;continue}if(J||Z||X)continue;if(U==="/"&&$[q+1]==="/")return q;if(U==="/"&&J6(G,$,q)){Y=!0;continue}if(U!==" "&&U!=="\t")G=U}return-1}function J6($,J,Z){if($==="")return!0;if("([{,:;!?&|=<>~^+*%-".includes($))return!0;if(/[A-Za-z_$]/.test($)){if(J.slice(0,Z).trimEnd().match(/(?:^|[^A-Za-z0-9_$])(return|typeof|instanceof|new|delete|void|in|of|yield|await|throw|case)$/))return!0}return!1}function X6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var Y6={meta:{docs:"Enforce consistent multiline ternary expressions",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=z.indexOf("?");if(G===-1)continue;if(z[G+1]==="."||z[G+1]==="?")continue;if(X6(z,G))continue;if(z.indexOf(":",G+1)!==-1)continue;for(let U=Y+1;U<Math.min(Y+10,X.length);U++){let W=X[U].trim();if(W.startsWith(":"))break;let K=W.indexOf(":");if(K>0&&!X6(X[U],K)){if(W.match(/^\w+\s*:/)||W.match(/^case\b/))continue;Z.push({filePath:J.filePath,line:U+1,column:X[U].indexOf(":")+1,ruleId:"style/multiline-ternary",message:"In multiline ternary, ':' should be at the start of the line",severity:"warning"});break}}}return Z}};var z6=new RegExp("\\bnew\\s+([A-Z][a-zA-Z0-9_$.]+)(?![a-zA-Z0-9_$])(?:\\s*<[^>]*>)?\\s*(?=[^(;\\n]|$)","g");function LG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var Q6={meta:{docs:"Require parentheses when invoking a constructor with no arguments",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;z6.lastIndex=0;while((G=z6.exec(z))!==null){if(LG(z,G.index))continue;if(z.slice(G.index+G[0].length).startsWith("("))continue;if(G[0].includes("new."))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"style/new-parens",message:`Missing parentheses invoking constructor '${G[1]}'`,severity:"warning",help:"Add () after the constructor name."})}}return Z},fix($){return $.replace(/\bnew\s+([A-Z][a-zA-Z0-9_$.]+)(?![a-zA-Z0-9_$])(\s*<[^>]*>)?\s*(?=[^(]|$)/g,(J,Z,X)=>{if(J.slice(J.indexOf(Z)+Z.length+(X?.length||0)).trim().startsWith("("))return J;return`new ${Z}${X||""}()`})}};var AB=new RegExp("\\breturn\\s+\\(([^()]*)\\)\\s*[;\\n]","g"),G6=/^[a-zA-Z_$][a-zA-Z0-9_$.[\]'"`]*$/;var q6={meta:{docs:"Remove redundant parentheses in return statements",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=new RegExp("^return\\s+\\(([^()]*)\\)\\s*;?\\s*$"),q=Q.match(G);if(q){let U=q[1].trim();if(G6.test(U)||/^['"`]/.test(U)||/^\d/.test(U)||U==="true"||U==="false"||U==="null"||U==="undefined")Z.push({filePath:J.filePath,line:Y+1,column:z.indexOf("(")+1,ruleId:"style/no-extra-parens",message:"Unnecessary parentheses around return value",severity:"warning",help:"Remove the outer parentheses."})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.trim(),z=new RegExp("^return\\s+\\(([^()]*)\\)\\s*(;?)\\s*$"),Q=Y.match(z);if(Q){let G=Q[1].trim(),q=Q[2];if(G6.test(G)||/^['"`]/.test(G)||/^\d/.test(G)||G==="true"||G==="false"||G==="null"||G==="undefined"){let U=X.match(/^(\s*)/)?.[1]||"";Z.push(`${U}return ${G}${q}`);continue}}Z.push(X)}return Z.join(`
170
170
  `)}};var U6=/(\S)\s+(\.)[a-zA-Z_$]/g,W6=/(\S)\s+(\?\.)[a-zA-Z_$]/g;function x8($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var K6={meta:{docs:"Disallow whitespace before . or ?. in property access",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;U6.lastIndex=0;while((G=U6.exec(z))!==null){let q=G[1],U=G.index+G[0].indexOf(".");if(x8(z,G.index))continue;if(U+1<z.length&&z[U+1]===".")continue;if(U>0&&z[U-1]===".")continue;Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/no-whitespace-before-property",message:"Unexpected whitespace before property access dot",severity:"warning"})}W6.lastIndex=0;while((G=W6.exec(z))!==null){let q=G.index+G[0].indexOf("?.");if(x8(z,G.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"style/no-whitespace-before-property",message:"Unexpected whitespace before optional chaining operator",severity:"warning"})}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*")){X.push(z);continue}let G=z;G=G.replace(/(\S)\s+(\?\.[a-zA-Z_$])/g,(q,U,W,K)=>{if(x8(z,K))return q;return U+W}),G=G.replace(/(\S)\s+(\.[a-zA-Z_$])/g,(q,U,W,K)=>{if(x8(z,K))return q;let H=K+q.indexOf(".");if(H+1<G.length&&G[H+1]===".")return q;return U+W}),X.push(G)}return X.join(`
171
- `)}};function j1($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var H6=/&&/g,V6=/\|\|/g,A6=/\?\?/g,_6=/(?<![&])&(?![&=])/g,F6=/(?<![|])\|(?![|=])/g,w6=/\^(?!=)/g;function LG($){let J=[];H6.lastIndex=0;let Z;while((Z=H6.exec($))!==null)if(!j1($,Z.index))J.push({op:"&&",group:0,index:Z.index});V6.lastIndex=0;while((Z=V6.exec($))!==null)if(!j1($,Z.index))J.push({op:"||",group:1,index:Z.index});A6.lastIndex=0;while((Z=A6.exec($))!==null)if(!j1($,Z.index))J.push({op:"??",group:2,index:Z.index});_6.lastIndex=0;while((Z=_6.exec($))!==null)if(!j1($,Z.index))J.push({op:"&",group:3,index:Z.index});F6.lastIndex=0;while((Z=F6.exec($))!==null)if(!j1($,Z.index))J.push({op:"|",group:4,index:Z.index});w6.lastIndex=0;while((Z=w6.exec($))!==null)if(!j1($,Z.index))J.push({op:"^",group:5,index:Z.index});return J.sort((X,Y)=>X.index-Y.index)}function PG($,J){if(J.length<2)return!0;let Z=[];for(let z of J){let Q=0;for(let G=0;G<z.index;G++)if($[G]==="(")Q++;else if($[G]===")")Q--;Z.push(Q)}let X=new Map;for(let z=0;z<J.length;z++){let Q=J[z].group;if(!X.has(Q))X.set(Q,[]);X.get(Q).push(Z[z])}let Y=[...X.entries()];if(Y.length===2){let[,z]=Y[0],[,Q]=Y[1],G=Math.min(...z),q=Math.max(...z),U=Math.min(...Q),W=Math.max(...Q);if(G>W||U>q)return!0}return!1}var CG=[{groups:[0,1],label:"&& and ||"},{groups:[0,2],label:"&& and ??"},{groups:[1,2],label:"|| and ??"},{groups:[3,4],label:"& and |"},{groups:[3,5],label:"& and ^"},{groups:[4,5],label:"| and ^"}],B6={meta:{docs:"Disallow mixed logical/bitwise operators without parentheses",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=LG(z);if(G.length<2)continue;let q=new Set(G.map((U)=>U.group));for(let U of CG)if(q.has(U.groups[0])&&q.has(U.groups[1])){let W=G.filter((K)=>K.group===U.groups[0]||K.group===U.groups[1]);if(!PG(z,W)){let K=W.find((H)=>H.group===U.groups[1]);if(K)Z.push({filePath:J.filePath,line:Y+1,column:K.index+1,ruleId:"style/no-mixed-operators",message:`Unexpected mix of ${U.label} without parentheses`,severity:"warning"})}}}return Z}};var M6=/(?<![0-9.])\.\d/g,j6=/\d\.(?!\d|\.|\w)/g;function N6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var T6={meta:{docs:"Disallow floating decimals like .5 or 2.",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;M6.lastIndex=0;while((G=M6.exec(z))!==null){if(N6(z,G.index))continue;if(G.index>0){let q=z[G.index-1];if(/[a-zA-Z_$)\]]/.test(q))continue}Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"style/no-floating-decimal",message:"Unexpected leading decimal point",severity:"warning",help:"Add a leading 0 before the decimal point: 0.5 instead of .5"})}j6.lastIndex=0;while((G=j6.exec(z))!==null){if(N6(z,G.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"style/no-floating-decimal",message:"Unexpected trailing decimal point",severity:"warning",help:"Add a trailing 0 after the decimal point: 2.0 instead of 2."})}}return Z},fix($){let J=$;return J=J.replace(/(?<![a-zA-Z_$0-9.)\]])\.\d/g,(Z)=>`0${Z}`),J=J.replace(/(\d)\.(?!\d|\.|\w)/g,(Z,X)=>`${X}.0`),J}};var E6={meta:{docs:"Disallow mixed spaces and tabs for indentation",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].match(/^(\s*)/)?.[1]||"";if(!Q)continue;let G=Q.includes("\t"),q=Q.includes(" ");if(G&&q)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"style/no-mixed-spaces-and-tabs",message:"Mixed spaces and tabs in indentation",severity:"warning",help:"Use either spaces or tabs for indentation, not both."})}return Z}};var D6={meta:{docs:"Disallow multiple consecutive spaces",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(!z.trim())continue;let Q=z.match(/^(\s*)/)?.[1]||"",G=z.slice(Q.length),q=/ {2,}/g,U;for(U=q.exec(G);U!==null;U=q.exec(G)){let W=Q.length+U.index+1,K=G.slice(0,U.index),H=(K.match(/'/g)||[]).length,V=(K.match(/"/g)||[]).length,A=(K.match(/`/g)||[]).length;if(H%2===1||V%2===1||A%2===1)continue;if(K.includes("//"))continue;if(z.trim().startsWith("*")||z.trim().startsWith("/*"))continue;Z.push({filePath:J.filePath,line:Y+1,column:W,ruleId:"style/no-multi-spaces",message:"Multiple spaces found",severity:"warning",help:"Remove extra spaces. Use single spaces between tokens."})}}return Z}};var R6={meta:{docs:"Disallow multiple consecutive blank lines",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=0,z=-1;for(let Q=0;Q<X.length;Q++)if(X[Q].trim()===""){if(Y++,z===-1)z=Q;if(Y>1&&Q===z+Y-1)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"style/no-multiple-empty-lines",message:"More than 1 blank line not allowed",severity:"error",help:"Remove extra blank lines. Maximum 1 consecutive blank line allowed."})}else Y=0,z=-1;return Z}};var O6={meta:{docs:"Disallow tab characters (when using spaces for indentation)",recommended:!1},check($,J){let Z=[];if(J.config.format?.indentStyle==="tabs")return Z;let X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].indexOf("\t");if(Q!==-1)Z.push({filePath:J.filePath,line:Y+1,column:Q+1,ruleId:"style/no-tabs",message:"Unexpected tab character",severity:"warning",help:"Use spaces for indentation instead of tabs."})}return Z},fix($,J){let Z=J.config.format?.indent??2;return $.replace(/\t/g," ".repeat(Z))}};var L6={meta:{docs:"Disallow trailing whitespace at the end of lines",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/(\s+)$/);if(Q){let G=z.length-Q[1].length+1;Z.push({filePath:J.filePath,line:Y+1,column:G,ruleId:"style/no-trailing-spaces",message:"Trailing spaces not allowed",severity:"error",help:"Remove trailing whitespace from the end of this line."})}}return Z}};function P6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var C6={meta:{docs:"Require spaces inside curly braces in objects and destructuring",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]==="{"&&!P6(z,G)){let q=z[G+1];if(q==="}"||q===void 0||q===`
171
+ `)}};function j1($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var H6=/&&/g,V6=/\|\|/g,A6=/\?\?/g,_6=/(?<![&])&(?![&=])/g,F6=/(?<![|])\|(?![|=])/g,w6=/\^(?!=)/g;function PG($){let J=[];H6.lastIndex=0;let Z;while((Z=H6.exec($))!==null)if(!j1($,Z.index))J.push({op:"&&",group:0,index:Z.index});V6.lastIndex=0;while((Z=V6.exec($))!==null)if(!j1($,Z.index))J.push({op:"||",group:1,index:Z.index});A6.lastIndex=0;while((Z=A6.exec($))!==null)if(!j1($,Z.index))J.push({op:"??",group:2,index:Z.index});_6.lastIndex=0;while((Z=_6.exec($))!==null)if(!j1($,Z.index))J.push({op:"&",group:3,index:Z.index});F6.lastIndex=0;while((Z=F6.exec($))!==null)if(!j1($,Z.index))J.push({op:"|",group:4,index:Z.index});w6.lastIndex=0;while((Z=w6.exec($))!==null)if(!j1($,Z.index))J.push({op:"^",group:5,index:Z.index});return J.sort((X,Y)=>X.index-Y.index)}function CG($,J){if(J.length<2)return!0;let Z=[];for(let z of J){let Q=0;for(let G=0;G<z.index;G++)if($[G]==="(")Q++;else if($[G]===")")Q--;Z.push(Q)}let X=new Map;for(let z=0;z<J.length;z++){let Q=J[z].group;if(!X.has(Q))X.set(Q,[]);X.get(Q).push(Z[z])}let Y=[...X.entries()];if(Y.length===2){let[,z]=Y[0],[,Q]=Y[1],G=Math.min(...z),q=Math.max(...z),U=Math.min(...Q),W=Math.max(...Q);if(G>W||U>q)return!0}return!1}var IG=[{groups:[0,1],label:"&& and ||"},{groups:[0,2],label:"&& and ??"},{groups:[1,2],label:"|| and ??"},{groups:[3,4],label:"& and |"},{groups:[3,5],label:"& and ^"},{groups:[4,5],label:"| and ^"}],B6={meta:{docs:"Disallow mixed logical/bitwise operators without parentheses",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=PG(z);if(G.length<2)continue;let q=new Set(G.map((U)=>U.group));for(let U of IG)if(q.has(U.groups[0])&&q.has(U.groups[1])){let W=G.filter((K)=>K.group===U.groups[0]||K.group===U.groups[1]);if(!CG(z,W)){let K=W.find((H)=>H.group===U.groups[1]);if(K)Z.push({filePath:J.filePath,line:Y+1,column:K.index+1,ruleId:"style/no-mixed-operators",message:`Unexpected mix of ${U.label} without parentheses`,severity:"warning"})}}}return Z}};var M6=/(?<![0-9.])\.\d/g,j6=/\d\.(?!\d|\.|\w)/g;function N6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var T6={meta:{docs:"Disallow floating decimals like .5 or 2.",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;M6.lastIndex=0;while((G=M6.exec(z))!==null){if(N6(z,G.index))continue;if(G.index>0){let q=z[G.index-1];if(/[a-zA-Z_$)\]]/.test(q))continue}Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"style/no-floating-decimal",message:"Unexpected leading decimal point",severity:"warning",help:"Add a leading 0 before the decimal point: 0.5 instead of .5"})}j6.lastIndex=0;while((G=j6.exec(z))!==null){if(N6(z,G.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+1,ruleId:"style/no-floating-decimal",message:"Unexpected trailing decimal point",severity:"warning",help:"Add a trailing 0 after the decimal point: 2.0 instead of 2."})}}return Z},fix($){let J=$;return J=J.replace(/(?<![a-zA-Z_$0-9.)\]])\.\d/g,(Z)=>`0${Z}`),J=J.replace(/(\d)\.(?!\d|\.|\w)/g,(Z,X)=>`${X}.0`),J}};var E6={meta:{docs:"Disallow mixed spaces and tabs for indentation",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].match(/^(\s*)/)?.[1]||"";if(!Q)continue;let G=Q.includes("\t"),q=Q.includes(" ");if(G&&q)Z.push({filePath:J.filePath,line:Y+1,column:1,ruleId:"style/no-mixed-spaces-and-tabs",message:"Mixed spaces and tabs in indentation",severity:"warning",help:"Use either spaces or tabs for indentation, not both."})}return Z}};var D6={meta:{docs:"Disallow multiple consecutive spaces",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];if(!z.trim())continue;let Q=z.match(/^(\s*)/)?.[1]||"",G=z.slice(Q.length),q=/ {2,}/g,U;for(U=q.exec(G);U!==null;U=q.exec(G)){let W=Q.length+U.index+1,K=G.slice(0,U.index),H=(K.match(/'/g)||[]).length,V=(K.match(/"/g)||[]).length,A=(K.match(/`/g)||[]).length;if(H%2===1||V%2===1||A%2===1)continue;if(K.includes("//"))continue;if(z.trim().startsWith("*")||z.trim().startsWith("/*"))continue;Z.push({filePath:J.filePath,line:Y+1,column:W,ruleId:"style/no-multi-spaces",message:"Multiple spaces found",severity:"warning",help:"Remove extra spaces. Use single spaces between tokens."})}}return Z}};var R6={meta:{docs:"Disallow multiple consecutive blank lines",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=0,z=-1;for(let Q=0;Q<X.length;Q++)if(X[Q].trim()===""){if(Y++,z===-1)z=Q;if(Y>1&&Q===z+Y-1)Z.push({filePath:J.filePath,line:Q+1,column:1,ruleId:"style/no-multiple-empty-lines",message:"More than 1 blank line not allowed",severity:"error",help:"Remove extra blank lines. Maximum 1 consecutive blank line allowed."})}else Y=0,z=-1;return Z}};var O6={meta:{docs:"Disallow tab characters (when using spaces for indentation)",recommended:!1},check($,J){let Z=[];if(J.config.format?.indentStyle==="tabs")return Z;let X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].indexOf("\t");if(Q!==-1)Z.push({filePath:J.filePath,line:Y+1,column:Q+1,ruleId:"style/no-tabs",message:"Unexpected tab character",severity:"warning",help:"Use spaces for indentation instead of tabs."})}return Z},fix($,J){let Z=J.config.format?.indent??2;return $.replace(/\t/g," ".repeat(Z))}};var L6={meta:{docs:"Disallow trailing whitespace at the end of lines",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.match(/(\s+)$/);if(Q){let G=z.length-Q[1].length+1;Z.push({filePath:J.filePath,line:Y+1,column:G,ruleId:"style/no-trailing-spaces",message:"Trailing spaces not allowed",severity:"error",help:"Remove trailing whitespace from the end of this line."})}}return Z}};function P6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var C6={meta:{docs:"Require spaces inside curly braces in objects and destructuring",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]==="{"&&!P6(z,G)){let q=z[G+1];if(q==="}"||q===void 0||q===`
172
172
  `)continue;if(G>0&&z[G-1]==="$")continue;if(q!==" "&&q!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/object-curly-spacing",message:"Missing space after '{'",severity:"warning"})}if(z[G]==="}"&&!P6(z,G)){let q=G>0?z[G-1]:void 0;if(q==="{"||q===void 0||q===`
173
173
  `)continue;if(G+1<z.length&&z.slice(G+1).match(/^[^}]*\$\{/))continue;if(q!==" "&&q!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:G+1,ruleId:"style/object-curly-spacing",message:"Missing space before '}'",severity:"warning"})}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/(?<!\$)\{(\S)/g,(z,Q)=>{if(Q==="}")return z;return`{ ${Q}`}),Y=Y.replace(/(\S)\}/g,(z,Q)=>{if(Q==="{"||Q==="$")return z;return`${Q} }`}),Z.push(Y)}return Z.join(`
174
174
  `)}};var I6=/(\&\&|\|\||\?\?|\?|\+|(?<!=)-(?!=)|\*|\/|%|\*\*|\|(?!\|)|&(?!&)|\^|<<|>>>?)\s*$/;function S6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var v6={meta:{docs:"Enforce operators at the beginning of continued lines",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=Q.match(I6);if(G&&Y+1<X.length){let q=X[Y+1].trim();if(q&&!q.startsWith("//")&&!q.startsWith("*")){let U=z.lastIndexOf(G[1]);if(!S6(z,U)){if(G[1]==="?"||G[1]===":")continue;Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/operator-linebreak",message:`Operator '${G[1]}' should be at the beginning of the next line`,severity:"warning"})}}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X=0;X<J.length;X++){let Y=J[X],z=Y.trim();if(!z||z.startsWith("//")||z.startsWith("*")||z.startsWith("/*")||z.endsWith("*/")){Z.push(Y);continue}let Q=z.match(I6);if(Q&&X+1<J.length&&Q[1]!=="?"&&Q[1]!==":"){let G=J[X+1],q=G.trim();if(q&&!q.startsWith("//")&&!q.startsWith("*")){let U=Q[1],W=Y.lastIndexOf(Q[1]);if(S6(Y,W)){Z.push(Y);continue}Z.push(Y.replace(new RegExp(`\\s*${U.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*$`),""));let K=G.match(/^(\s*)/)?.[1]||"";J[X+1]=`${K}${U} ${q}`;continue}}Z.push(Y)}return Z.join(`
175
175
  `)}};var y6={meta:{docs:"Disallow empty lines at the beginning and end of blocks",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let Q=X[Y].trim();if(Q.endsWith("{")&&Y+1<X.length){if(X[Y+1].trim()==="")Z.push({filePath:J.filePath,line:Y+2,column:1,ruleId:"style/padded-blocks",message:"Unexpected empty line after opening brace",severity:"warning"})}if(Q==="}"&&Y>0){if(X[Y-1].trim()==="")Z.push({filePath:J.filePath,line:Y,column:1,ruleId:"style/padded-blocks",message:"Unexpected empty line before closing brace",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=new Set;for(let X=0;X<J.length;X++){let Y=J[X].trim();if(Y.endsWith("{")&&X+1<J.length&&J[X+1].trim()==="")Z.add(X+1);if(Y==="}"&&X>0&&J[X-1].trim()==="")Z.add(X-1)}return J.filter((X,Y)=>!Z.has(Y)).join(`
176
176
  `)}};var z9=/^(\s*)(["'])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\s*:/;var b6={meta:{docs:"Remove unnecessary quotes from object property keys",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=z.match(z9);if(G){let q=G[3];if(["class","return","function","var","let","const","delete","typeof","void","in","instanceof","new","this","throw","try","catch","finally","switch","case","default","break","continue","do","while","for","if","else","with","import","export","extends","super","yield","await","enum","implements","interface","package","private","protected","public","static"].includes(q))continue;Z.push({filePath:J.filePath,line:Y+1,column:z.indexOf(G[2])+1,ruleId:"style/quote-props",message:`Unnecessarily quoted property '${q}'`,severity:"warning",help:"Remove quotes from this property key."})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=new Set(["class","return","function","var","let","const","delete","typeof","void","in","instanceof","new","this","throw","try","catch","finally","switch","case","default","break","continue","do","while","for","if","else","with","import","export","extends","super","yield","await","enum","implements","interface","package","private","protected","public","static"]);for(let Y of J){let z=Y,Q=Y.match(z9);if(Q&&!X.has(Q[3]))z=Y.replace(z9,"$1$3:");Z.push(z)}return Z.join(`
177
- `)}};function IG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var k6=/\.\.\.\s+([a-zA-Z_$])/g,f6={meta:{docs:"Disallow space after spread/rest operator (...)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;k6.lastIndex=0;while((G=k6.exec(z))!==null){if(IG(z,G.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+4,ruleId:"style/rest-spread-spacing",message:"Unexpected space after spread operator",severity:"warning"})}}return Z},fix($){return $.replace(/\.\.\.\s+([a-zA-Z_$\[{])/g,"...$1")}};function SG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var g6={meta:{docs:"Disallow space before semicolons, require space after",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!==";")continue;if(SG(z,G))continue;if(G>0&&z[G-1]===" "){if(z.slice(0,G).trim().length>0)Z.push({filePath:J.filePath,line:Y+1,column:G+1,ruleId:"style/semi-spacing",message:"Unexpected space before semicolon",severity:"warning"})}if(G+1<z.length&&z[G+1]!==" "&&z[G+1]!=="\t"&&z[G+1]!==`
177
+ `)}};function SG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var k6=/\.\.\.\s+([a-zA-Z_$])/g,f6={meta:{docs:"Disallow space after spread/rest operator (...)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;k6.lastIndex=0;while((G=k6.exec(z))!==null){if(SG(z,G.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+4,ruleId:"style/rest-spread-spacing",message:"Unexpected space after spread operator",severity:"warning"})}}return Z},fix($){return $.replace(/\.\.\.\s+([a-zA-Z_$\[{])/g,"...$1")}};function vG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var g6={meta:{docs:"Disallow space before semicolons, require space after",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]!==";")continue;if(vG(z,G))continue;if(G>0&&z[G-1]===" "){if(z.slice(0,G).trim().length>0)Z.push({filePath:J.filePath,line:Y+1,column:G+1,ruleId:"style/semi-spacing",message:"Unexpected space before semicolon",severity:"warning"})}if(G+1<z.length&&z[G+1]!==" "&&z[G+1]!=="\t"&&z[G+1]!==`
178
178
  `&&z[G+1]!=="\r"&&z[G+1]!==")"){let q=z.slice(G+1);if(z.slice(0,G).includes(";")||q.includes(";"))Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/semi-spacing",message:"Missing space after semicolon",severity:"warning"})}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X,z=new RegExp(" ;","g");Y=Y.replace(z,String.fromCharCode(59));let Q=new RegExp(";(\\S)","g");Y=Y.replace(Q,(G,q)=>{if(q===";"||q===")")return G;return`; ${q}`}),Z.push(Y)}return Z.join(`
179
- `)}};var p6=/(\S)\{/g;function vG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var x6={meta:{docs:"Require space before opening brace of blocks",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;p6.lastIndex=0;while((G=p6.exec(z))!==null){let q=G.index,U=G[1];if(vG(z,q))continue;if(U==="$")continue;if(U==="="||U===":"||U==="("||U===","||U==="[")continue;if(U==="{")continue;if(U===")"||/[a-zA-Z0-9_]/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:G.index+2,ruleId:"style/space-before-blocks",message:"Missing space before '{'",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.replace(/([)a-zA-Z0-9_])\{/g,"$1 {");Z.push(Y)}return Z.join(`
179
+ `)}};var p6=/(\S)\{/g;function yG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var x6={meta:{docs:"Require space before opening brace of blocks",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;p6.lastIndex=0;while((G=p6.exec(z))!==null){let q=G.index,U=G[1];if(yG(z,q))continue;if(U==="$")continue;if(U==="="||U===":"||U==="("||U===","||U==="[")continue;if(U==="{")continue;if(U===")"||/[a-zA-Z0-9_]/.test(U))Z.push({filePath:J.filePath,line:Y+1,column:G.index+2,ruleId:"style/space-before-blocks",message:"Missing space before '{'",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X.replace(/([)a-zA-Z0-9_])\{/g,"$1 {");Z.push(Y)}return Z.join(`
180
180
  `)}};var h6=/\bfunction\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s+\(/g,u6=/\bfunction\(/g;function m6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var d6={meta:{docs:"Control spacing before ( in function declarations",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;h6.lastIndex=0;while((G=h6.exec(z))!==null){if(m6(z,G.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+G[0].length,ruleId:"style/space-before-function-paren",message:"Unexpected space before function parentheses",severity:"warning"})}u6.lastIndex=0;while((G=u6.exec(z))!==null){if(m6(z,G.index))continue;if(z.slice(0,G.index+8).match(/function\s+[a-zA-Z_$]/))continue;Z.push({filePath:J.filePath,line:Y+1,column:G.index+9,ruleId:"style/space-before-function-paren",message:"Missing space before function parentheses",severity:"warning"})}}return Z},fix($){let J=$;return J=J.replace(/\bfunction\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s+\(/g,"function $1("),J=J.replace(/\bfunction\(/g,"function ("),J}};function o6($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var c6={meta:{docs:"Disallow spaces inside parentheses",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G=0;G<z.length;G++){if(z[G]==="("&&!o6(z,G)){let q=z[G+1];if(q===")"||q===void 0||q===`
181
181
  `)continue;if(q===" ")Z.push({filePath:J.filePath,line:Y+1,column:G+2,ruleId:"style/space-in-parens",message:"Unexpected space after '('",severity:"warning"})}if(z[G]===")"&&!o6(z,G)){if(G===0)continue;let q=z[G-1];if(q==="(")continue;if(q===" "){if(z.slice(0,G).includes("("))Z.push({filePath:J.filePath,line:Y+1,column:G,ruleId:"style/space-in-parens",message:"Unexpected space before ')'",severity:"warning"})}}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/\(\s+(\S)/g,"($1"),Y=Y.replace(/(\S)\s+\)/g,"$1)"),Z.push(Y)}return Z.join(`
182
- `)}};var r6=["&&","||","??","+=","-=","*=","/=","%=","**=","<<=",">>=",">>>=","&=","|=","^=","??=","||=","&&="];function yG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var l6={meta:{docs:"Require spacing around infix operators (&&, ||, ??, assignment operators)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G of r6){let q=0,U;while((U=z.indexOf(G,q))!==-1){if(q=U+G.length,yG(z,U))continue;if(G==="&&"&&z[U+2]==="=")continue;if(G==="||"&&z[U+2]==="=")continue;if(G==="??"&&z[U+2]==="=")continue;let W=U>0?z[U-1]:" ",K=U+G.length<z.length?z[U+G.length]:" ";if(W!==" "&&W!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/space-infix-ops",message:`Missing space before '${G}'`,severity:"warning"});if(K!==" "&&K!=="\t"&&K!==`
182
+ `)}};var r6=["&&","||","??","+=","-=","*=","/=","%=","**=","<<=",">>=",">>>=","&=","|=","^=","??=","||=","&&="];function bG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var l6={meta:{docs:"Require spacing around infix operators (&&, ||, ??, assignment operators)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let G of r6){let q=0,U;while((U=z.indexOf(G,q))!==-1){if(q=U+G.length,bG(z,U))continue;if(G==="&&"&&z[U+2]==="=")continue;if(G==="||"&&z[U+2]==="=")continue;if(G==="??"&&z[U+2]==="=")continue;let W=U>0?z[U-1]:" ",K=U+G.length<z.length?z[U+G.length]:" ";if(W!==" "&&W!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/space-infix-ops",message:`Missing space before '${G}'`,severity:"warning"});if(K!==" "&&K!=="\t"&&K!==`
183
183
  `&&K!=="\r")Z.push({filePath:J.filePath,line:Y+1,column:U+G.length+1,ruleId:"style/space-infix-ops",message:`Missing space after '${G}'`,severity:"warning"})}}}return Z},fix($){let J=$,Z=[...r6].sort((X,Y)=>Y.length-X.length);for(let X of Z){let Y=X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");J=J.replace(new RegExp(`(\\S)${Y}`,"g"),`$1 ${X}`),J=J.replace(new RegExp(`${Y}(\\S)`,"g"),`${X} $1`)}return J}};var a6=["typeof","void","delete","new","throw","yield","await"];function Q9($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var s6={meta:{docs:"Require space after word unary operators, disallow space after symbol unary operators",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;for(let W of a6){let K=new RegExp(`\\b${W}([^\\s;,)])`,"g"),H;while((H=K.exec(z))!==null){if(Q9(z,H.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:H.index+W.length+1,ruleId:"style/space-unary-ops",message:`Missing space after '${W}'`,severity:"warning"})}}let G=/!\s+([a-zA-Z_$({[])/g,q;while((q=G.exec(z))!==null){if(Q9(z,q.index))continue;let W=z.slice(0,q.index),K=W.trimEnd().slice(-1),H=new RegExp("[=(<[{,;|&?:+\\-*/!~^%]");if(!K||H.test(K)||W.trimEnd().endsWith("return")||W.trimEnd().endsWith("case"))Z.push({filePath:J.filePath,line:Y+1,column:q.index+2,ruleId:"style/space-unary-ops",message:"Unexpected space after '!'",severity:"warning"})}let U=/~\s+([a-zA-Z_$({[])/g;while((q=U.exec(z))!==null){if(Q9(z,q.index))continue;Z.push({filePath:J.filePath,line:Y+1,column:q.index+2,ruleId:"style/space-unary-ops",message:"Unexpected space after '~'",severity:"warning"})}}return Z},fix($){let J=$;for(let Z of a6)J=J.replace(new RegExp(`\\b${Z}([^\\s;,)])`,"g"),`${Z} $1`);return J=J.replace(/!\s+([a-zA-Z_$({[])/g,"!$1"),J=J.replace(/~\s+([a-zA-Z_$({[])/g,"~$1"),J}};var n6={meta:{docs:"Require space after // and /* in comments",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim(),G=z.indexOf("//");if(G!==-1){let U=z.slice(0,G),W=(U.match(/'/g)||[]).length,K=(U.match(/"/g)||[]).length,H=(U.match(/`/g)||[]).length;if(W%2===0&&K%2===0&&H%2===0){if(!U.match(/https?:$/)){let V=z.slice(G+2);if(V.length>0&&V[0]!==" "&&V[0]!=="\t"&&V[0]!=="/"&&V[0]!=="!")Z.push({filePath:J.filePath,line:Y+1,column:G+3,ruleId:"style/spaced-comment",message:"Missing space after '//'",severity:"warning",help:"Add a space after // in comments."})}}}let q=z.indexOf("/*");if(q!==-1&&z[q+2]!=="*"&&z[q+2]!=="!"){let U=z.slice(0,q),W=(U.match(/'/g)||[]).length,K=(U.match(/"/g)||[]).length,H=(U.match(/`/g)||[]).length;if(W%2===0&&K%2===0&&H%2===0){let V=z.slice(q+2);if(V.length>0&&V[0]!==" "&&V[0]!=="\t"&&V[0]!==`
184
184
  `)Z.push({filePath:J.filePath,line:Y+1,column:q+3,ruleId:"style/spaced-comment",message:"Missing space after '/*'",severity:"warning",help:"Add a space after /* in comments."})}}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/(\/\/)([^\s/!])/,"$1 $2"),Y=Y.replace(/(\/\*)([^\s*!])/,"$1 $2"),Z.push(Y)}return Z.join(`
185
185
  `)}};var i6=/^\s*(case\b.+?|default)\s*:/,t6={meta:{docs:"Enforce spacing around colon in switch case/default clauses",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q)continue;let G=Q.match(i6);if(!G)continue;let q=G[1],U=z.indexOf(":",z.indexOf(q)+q.length);if(U===-1)continue;if(U>0&&z[U-1]===" ")Z.push({filePath:J.filePath,line:Y+1,column:U+1,ruleId:"style/switch-colon-spacing",message:"Unexpected space before colon in switch case",severity:"warning"});if(U+1<z.length&&z[U+1]!==" "&&z[U+1]!=="\t"&&z[U+1]!==`
@@ -187,15 +187,15 @@ ${G}`;if(P7(q)!==q)return[{filePath:J.filePath,line:Y+1,column:1,ruleId:"sort-im
187
187
  `)}};var e6="${",$Y={meta:{docs:"Disallow spaces inside template literal interpolation curly braces",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y];for(let Q=z.indexOf(e6,0);Q!==-1;Q=z.indexOf(e6,Q)){let G=Q+2;if(G<z.length&&(z[G]===" "||z[G]==="\t")){if((z.slice(0,Q).match(/`/g)||[]).length%2===1)Z.push({filePath:J.filePath,line:Y+1,column:G+1,ruleId:"style/template-curly-spacing",message:"Unexpected space after '${'",severity:"warning"})}let q=1,U=G;while(U<z.length&&q>0){if(z[U]==="{")q++;if(z[U]==="}")q--;if(q>0)U++}if(q===0&&U>0){let W=z[U-1];if(W===" "||W==="\t"){if((z.slice(0,Q).match(/`/g)||[]).length%2===1)Z.push({filePath:J.filePath,line:Y+1,column:U,ruleId:"style/template-curly-spacing",message:"Unexpected space before '}'",severity:"warning"})}}Q=G}}return Z},fix($){return $.replace(/\$\{\s+([^}]*?)\s+\}/g,"${$1}")}};var N1=/([a-zA-Z_$][a-zA-Z0-9_$]*)\s+`/g;function ZY($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var JY=new Set(["return","case","typeof","void","delete","throw","new","in","of","await","yield","export","default","extends","else","instanceof"]),XY={meta:{docs:"Disallow space between tag function and template literal",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;N1.lastIndex=0;for(G=N1.exec(z);G!==null;G=N1.exec(z)){let q=G[1],U=G.index;if(ZY(z,U))continue;if(JY.has(q))continue;let W=U+q.length;Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/template-tag-spacing",message:"Unexpected space between tag function and template literal",severity:"warning"})}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y=0;Y<Z.length;Y++){let z=Z[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*")){X.push(z);continue}let G=z,q=[],U;N1.lastIndex=0;for(U=N1.exec(z);U!==null;U=N1.exec(z)){let W=U[1],K=U.index;if(ZY(z,K))continue;if(JY.has(W))continue;q.push({index:K,fullMatch:U[0],identifier:W})}for(let W=q.length-1;W>=0;W--){let K=q[W],H=K.index,V=H+K.fullMatch.length;G=G.slice(0,H)+K.identifier+"`"+G.slice(V)}X.push(G)}return X.join(`
188
188
  `)}};var YY={meta:{docs:"Require parentheses around immediately invoked function expressions (IIFEs)",recommended:!0},check($,J){let Z=[],X=/[^a-zA-Z_$](function\s*\([^)]*\)\s*\{[^}]*\})\s*\(/g,Y;for(Y=X.exec($);Y!==null;Y=X.exec($)){if(Y.index>0&&$[Y.index]==="(")continue;let z=$.slice(0,Y.index).split(`
189
189
  `).length,Q=$.lastIndexOf(`
190
- `,Y.index),G=Y.index-Q;Z.push({filePath:J.filePath,line:z,column:G,ruleId:"style/wrap-iife",message:"Wrap immediately invoked function expressions in parentheses",severity:"warning"})}return Z},fix($){return $.replace(/([^a-zA-Z_$(\n])(function\s*\([^)]*\)\s*\{[^}]*\})\s*\(/g,"$1($2)(")}};var zY=/\byield\s*\*/g;function bG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var QY={meta:{docs:"Enforce spacing around * in yield* expressions (no space before *, space after)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;zY.lastIndex=0;while((G=zY.exec(z))!==null){let q=G.index;if(bG(z,q))continue;let U=G[0],W=q+U.length-1,K=W+1;if(U!=="yield*")Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/yield-star-spacing",message:"Unexpected space before * in yield expression",severity:"warning"});if(K<z.length&&z[K]!==" "&&z[K]!=="\t"&&z[K]!==`
190
+ `,Y.index),G=Y.index-Q;Z.push({filePath:J.filePath,line:z,column:G,ruleId:"style/wrap-iife",message:"Wrap immediately invoked function expressions in parentheses",severity:"warning"})}return Z},fix($){return $.replace(/([^a-zA-Z_$(\n])(function\s*\([^)]*\)\s*\{[^}]*\})\s*\(/g,"$1($2)(")}};var zY=/\byield\s*\*/g;function kG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var QY={meta:{docs:"Enforce spacing around * in yield* expressions (no space before *, space after)",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;zY.lastIndex=0;while((G=zY.exec(z))!==null){let q=G.index;if(kG(z,q))continue;let U=G[0],W=q+U.length-1,K=W+1;if(U!=="yield*")Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"style/yield-star-spacing",message:"Unexpected space before * in yield expression",severity:"warning"});if(K<z.length&&z[K]!==" "&&z[K]!=="\t"&&z[K]!==`
191
191
  `)Z.push({filePath:J.filePath,line:Y+1,column:K+1,ruleId:"style/yield-star-spacing",message:"Missing space after * in yield expression",severity:"warning"})}}return Z},fix($,J){let Z=$;return Z=Z.replace(/\byield\s+\*/g,"yield*"),Z=Z.replace(/\byield\*(\S)/g,"yield* $1"),Z}};var GY={name:"style",rules:{"brace-style":B(D5),curly:B(f5),"max-statements-per-line":B(Z6),"if-newline":B(l5),"consistent-chaining":B(S5),"consistent-list-newline":B(k5),"indent-unindent":B(a5),"no-multi-spaces":D6,"no-multiple-empty-lines":R6,"no-trailing-spaces":L6,"keyword-spacing":B(t5),"arrow-spacing":B(T5),"space-infix-ops":B(l6),"object-curly-spacing":B(C6),"spaced-comment":B(n6),"block-spacing":B(E5),"space-before-blocks":B(x6),"comma-spacing":B(P5),"semi-spacing":B(g6),"rest-spread-spacing":B(f6),"generator-star-spacing":B(r5),"yield-star-spacing":B(QY),"function-call-spacing":B(d5),"template-tag-spacing":B(XY),"no-whitespace-before-property":B(K6),"key-spacing":B(n5),"computed-property-spacing":B(I5),"array-bracket-spacing":B(B5),"space-in-parens":B(c6),"template-curly-spacing":B($Y),"space-unary-ops":B(s6),"switch-colon-spacing":B(t6),"comma-dangle":B(L5),"arrow-parens":B(j5),"space-before-function-paren":B(d6),"quote-props":B(b6),"no-floating-decimal":B(T6),"new-parens":B(Q6),"no-extra-parens":B(q6),"wrap-iife":B(YY),"comma-style":B(C5),"dot-location":B(g5),"operator-linebreak":B(v6),"multiline-ternary":B(Y6),"padded-blocks":B(y6),"lines-between-class-members":B($6),"no-mixed-operators":B(B6),"indent-binary-ops":B(h5),"no-tabs":B(O6),"no-mixed-spaces-and-tabs":B(E6)}};var qY={meta:{docs:"Enforce consistent member delimiter style in interfaces and type literals",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/),Y=!1,z=0,Q=0;for(let G=0;G<X.length;G++){let q=X[G],U=q.trim();if(!U||U.startsWith("//")||U.startsWith("*")||U.startsWith("/*"))continue;if(U.match(/\b(interface|type)\b.*\{/))Y=!0,Q=z+1;for(let W of U){if(W==="{")z++;if(W==="}")z--}if(Y&&z<Q){Y=!1;continue}if(!Y||z!==Q)continue;if(U==="}"||U==="};"||U==="},")continue;if(U.endsWith(",")){if(U.startsWith("|")||U.startsWith("&"))continue;Z.push({filePath:J.filePath,line:G+1,column:q.length,ruleId:"ts/member-delimiter-style",message:"Expected semicolon delimiter in interface, found comma",severity:"warning"})}if(!U.endsWith(";")&&!U.endsWith(",")&&!U.endsWith("{")&&!U.endsWith("(")){if(U.match(/^\w+[\s?]*:/)||U.match(/^\[/)||U.match(/^readonly\b/))Z.push({filePath:J.filePath,line:G+1,column:q.length+1,ruleId:"ts/member-delimiter-style",message:"Missing semicolon delimiter in interface member",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[],X=!1,Y=0,z=0;for(let Q=0;Q<J.length;Q++){let G=J[Q],q=G.trim();if(q.match(/\b(interface|type)\b.*\{/))X=!0,z=Y+1;let U=Y;for(let W of q){if(W==="{")Y++;if(W==="}")Y--}if(X&&Y<z){X=!1,Z.push(G);continue}if(X&&U===z&&q!=="}"&&q!=="};"&&q!=="},"){let W=G;if(q.endsWith(","))W=G.replace(/,\s*$/,";");Z.push(W);continue}Z.push(G)}return Z.join(`
192
192
  `)}};var UY={meta:{docs:"Disallow the use of the `any` type - it defeats the purpose of TypeScript type safety"},check:($,J)=>{let Z=[];if(!/\.tsx?$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q;if(Y){let V=Q.indexOf("*/");if(V>=0)Q=Q.slice(V+2),Y=!1;else continue}let q=Q.indexOf("/*"),U=Q.indexOf("//");if(q>=0&&(U===-1||q<U)){let V=Q.indexOf("*/",q+2);if(V>=0)Q=Q.slice(0,q)+Q.slice(V+2);else Y=!0,Q=Q.slice(0,q)}if(U>=0)Q=Q.slice(0,U);let W=Q.replace(/(['"`])(?:(?!\1)[^\\]|\\.)*?\1/g,'""'),K=/\b(any)\b/g,H;while((H=K.exec(W))!==null){let V=H.index,A=W[V-1]||" ",_=W[V+3]||" ",w=W.slice(Math.max(0,V-10),V),F=W.slice(V+3,Math.min(W.length,V+10));if(/\w/.test(A)||/\w/.test(_))continue;if(/:/.test(w)||/</.test(w)||/\bas\s*$/.test(w)||/,/.test(w)||/\|/.test(w)||/&/.test(w)||/\[/.test(F)||/>/.test(F)||/,/.test(F)||/\|/.test(F)||/extends\s+$/.test(w)||/=\s*$/.test(w)){let T=G.indexOf("any",Math.max(0,V-5));Z.push({filePath:J.filePath,line:z+1,column:T>=0?T+1:V+1,ruleId:"ts/no-explicit-any",message:"Unexpected `any` type. Specify a more precise type or use `unknown` if the type is truly unknown.",severity:"error",help:"Replace `any` with a specific type, `unknown`, or a generic type parameter"})}}}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/:\s*any\b(?!\s*\))/g,(z)=>{return z.replace("any","unknown")}),Z.push(Y)}return Z.join(`
193
193
  `)}};var WY={meta:{docs:"Require promises to be handled - must be awaited, returned, or have .catch() called"},check:($,J)=>{let Z=[];if(!/\.tsx?$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q;if(Y){let H=Q.indexOf("*/");if(H>=0)Q=Q.slice(H+2),Y=!1;else continue}let q=Q.indexOf("/*"),U=Q.indexOf("//");if(q>=0&&(U===-1||q<U)){let H=Q.indexOf("*/",q+2);if(H>=0)Q=Q.slice(0,q)+Q.slice(H+2);else Y=!0,Q=Q.slice(0,q)}if(U>=0)Q=Q.slice(0,U);let W=Q.replace(/(['"`])(?:(?!\1)[^\\]|\\.)*?\1/g,'""');if(/\b(?:await|return|void)\s/.test(W))continue;if(/\.(?:then|catch|finally)\s*\(/.test(W))continue;let K=[/\b(fetch|axios|request)\s*\(/,/\b[\w$]*(?:async|Async|load|Load|get|Get|post|Post|put|Put|delete|Delete|save|Save|update|Update|fetch|Fetch)[\w$]*\s*\(/,/\bnew\s+Promise\s*\(/,/\bPromise\s*\.\s*(?:resolve|reject|all|allSettled|race|any)\s*\(/];for(let H of K){let V=W.match(H);if(!V)continue;let A=W.indexOf(V[0]),_=W.slice(0,A).trim();if(/\b(?:const|let|var)\s+[\w$]+\s*=\s*$/.test(_))continue;if(/[\w$]+\s*=\s*$/.test(_))continue;if(/\breturn\s+$/.test(_))continue;if(/\(\s*$/.test(_)||/,\s*$/.test(_))continue;let w=W.slice(A+V[0].length),F=1,M=V[0].length;while(M<w.length&&F>0){if(w[M]==="(")F++;else if(w[M]===")")F--;M++}let T=w.slice(M).trim();if(/^\.(?:then|catch|finally)\s*\(/.test(T))continue;if(T===""||T.startsWith(";")){let E=G.indexOf(V[0]);Z.push({filePath:J.filePath,line:z+1,column:E>=0?E+1:A+1,ruleId:"ts/no-floating-promises",message:"Promise returned by this call is not handled. Add await, return, .catch(), or void.",severity:"error",help:"Either await the promise, return it, add .catch() to handle errors, or use void to explicitly mark as fire-and-forget"});break}}}return Z}};var KY={meta:{docs:"Disallow promises in places not designed to handle them (conditionals, logical expressions)"},check:($,J)=>{let Z=[];if(!/\.tsx?$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q;if(Y){let w=Q.indexOf("*/");if(w>=0)Q=Q.slice(w+2),Y=!1;else continue}let q=Q.indexOf("/*"),U=Q.indexOf("//");if(q>=0&&(U===-1||q<U)){let w=Q.indexOf("*/",q+2);if(w>=0)Q=Q.slice(0,q)+Q.slice(w+2);else Y=!0,Q=Q.slice(0,q)}if(U>=0)Q=Q.slice(0,U);let W=Q.replace(/(['"`])(?:(?!\1)[^\\]|\\.)*?\1/g,'""'),K=W.match(/\bif\s*\(\s*(!?)\s*([\w$]+\s*\([^)]*\))/);if(K){let w=K[1],F=K[2];if(/async|Async|fetch|Fetch|load|Load|get|Get|save|Save/.test(F)){let M=W.slice(0,W.indexOf(K[0])),T=W.slice(W.indexOf("if (")+4);if(!/\bawait\s/.test(T)){let E=G.indexOf(F);Z.push({filePath:J.filePath,line:z+1,column:E>=0?E+1:1,ruleId:"ts/no-misused-promises",message:"Promise used in conditional expression without await. Promises are always truthy.",severity:"error",help:"Add await before the async call in the condition"})}}}let H=/(?:async|Async|fetch|Fetch|load|Load|get|Get|save|Save|Promise\.)[\w$]*\s*\([^)]*\)/g,V;while((V=H.exec(W))!==null){let w=V.index,F=V[0],M=W.slice(Math.max(0,w-10),w),T=W.slice(w+F.length,Math.min(W.length,w+F.length+10));if(/(?:&&|\|\|)\s*$/.test(M)||/^\s*(?:&&|\|\|)/.test(T)){if(!/\bawait\s*$/.test(M)){let j=G.indexOf(F,Math.max(0,w-5));Z.push({filePath:J.filePath,line:z+1,column:j>=0?j+1:w+1,ruleId:"ts/no-misused-promises",message:"Promise used in logical expression without await. This will not work as expected.",severity:"error",help:"Add await before the async call or restructure the logic"})}}let E=W.slice(Math.max(0,w-20),w);if(/\?\s*$/.test(M)||/\?[^:]*$/.test(E)){if(!/\bawait\s*$/.test(M)){let j=G.indexOf(F,Math.max(0,w-5));Z.push({filePath:J.filePath,line:z+1,column:j>=0?j+1:w+1,ruleId:"ts/no-misused-promises",message:"Promise used in ternary expression without await.",severity:"error",help:"Add await before the async call"})}}}let A=W.match(/\b(?:while|for)\s*\([^)]*(?:async|Async|fetch|Fetch|load|Load|get|Get)[\w$]*\s*\([^)]*\)/);if(A){if(!/\bawait\s/.test(A[0])){let w=G.indexOf(A[0]);Z.push({filePath:J.filePath,line:z+1,column:w>=0?w+1:1,ruleId:"ts/no-misused-promises",message:"Promise used in loop condition without await. This will cause unexpected behavior.",severity:"error",help:"Add await before the async call in the loop condition"})}}let _=W.match(/\.(forEach|map|filter|reduce|every|some|find|findIndex)\s*\(\s*async\s*(?:\(|[\w$]+\s*=>)/);if(_){if(_[1]==="forEach"){let F=G.indexOf(_[0]);Z.push({filePath:J.filePath,line:z+1,column:F>=0?F+1:1,ruleId:"ts/no-misused-promises",message:"async callback in forEach - forEach does not wait for promises to resolve.",severity:"error",help:"Use for...of loop with await, or Promise.all() with map()"})}}}return Z}};var HY={meta:{docs:"Disallow require() in TypeScript files; prefer ESM imports"},check:($,J)=>{let Z=[];if(!/\.ts$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q;if(Y){let H=G.indexOf("*/");if(H>=0)G=G.slice(H+2),Y=!1;else continue}let q=G.indexOf("/*"),U=G.indexOf("//");if(q>=0&&(U===-1||q<U)){let H=G.indexOf("*/",q+2);if(H>=0)G=G.slice(0,q)+G.slice(H+2);else Y=!0,G=G.slice(0,q)}if(U>=0)G=G.slice(0,U);let W=G.trim();if(!W)continue;if(/\bimport\s*\(/.test(W))continue;let K=W.indexOf("require(");if(K>=0){Z.push({filePath:J.filePath,line:z+1,column:Q.indexOf("require(")+1||K+1,ruleId:"ts/no-require-imports",message:"Do not use require() in TypeScript files. Use ESM import syntax instead.",severity:"error"});continue}if(/^import\s+(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])=\s*require\s*\(/.test(W)){let H=Q.indexOf("require(");Z.push({filePath:J.filePath,line:z+1,column:H>-1?H+1:1,ruleId:"ts/no-require-imports",message:"Do not use require() in TypeScript files. Use ESM import syntax instead.",severity:"error"})}}return Z}};var VY={meta:{docs:"Disallow top-level await in TypeScript/JavaScript files"},check:($,J)=>{let Z=[],X=J.filePath.split(".").pop()||"";if(!["ts","tsx","mts","cts","js","mjs","cjs"].includes(X))return Z;let Y=0,z=!1,Q=!1,G=!1,q=!1,U=!1,W=!1,K=0,H=1,V=(A)=>{Z.push({filePath:J.filePath,line:H,column:A,ruleId:"ts/no-top-level-await",message:"Do not use top-level await",severity:"error"})};for(let A=0;A<$.length;A++){let _=$[A];K++;let w=$[A+1];if(_===`
194
194
  `){Q=!1,H++,K=0;continue}if(Q)continue;if(z){if(_==="*"&&w==="/")z=!1,A++,K++;continue}if(G){if(!W&&_==="\\"){W=!0;continue}if(!W&&_==="'")G=!1;W=!1;continue}if(q){if(!W&&_==="\\"){W=!0;continue}if(!W&&_==='"')q=!1;W=!1;continue}if(U){if(!W&&_==="\\"){W=!0;continue}if(!W&&_==="`")U=!1;W=!1;continue}if(_==="/"&&w==="*"){z=!0,A++,K++;continue}if(_==="/"&&w==="/"){Q=!0,A++,K++;continue}if(_==="'"){G=!0;continue}if(_==='"'){q=!0;continue}if(_==="`"){U=!0;continue}if(_==="{"){Y++;continue}if(_==="}"){if(Y>0)Y--;continue}if(_==="a"&&$.slice(A,A+5)==="await"){let F=$.slice(Math.max(0,A-6),A),M=/for\s+$/.test(F),T=A===0||/[^$\w]/.test($[A-1]),E=/[^$\w]/.test($[A+5]||" ");if(!M&&T&&E&&Y===0)V(K);A+=4,K+=4;continue}}return Z}};var AY={meta:{docs:"Disallow `exports =` in TypeScript; prefer ESM export default"},check:($,J)=>{let Z=[],X=J.filePath.split(".").pop()||"";if(!["ts","tsx","mts","cts","d.ts"].includes(X))return Z;let Y=$.split(/\r?\n/);for(let z=0;z<Y.length;z++){let q=Y[z].replace(/\/\*.*?\*\//g,"").replace(/\/\/.*$/,"").match(/\bexports\s*=\s*/);if(q)Z.push({filePath:J.filePath,line:z+1,column:(q.index||0)+1,ruleId:"ts/no-ts-export-equal",message:"Use ESM `export default` instead of `exports =`",severity:"error"})}return Z}};var _Y={meta:{docs:"Disallow assignment of `any` typed values to variables - unsafe assignments bypass type checking"},check:($,J)=>{let Z=[];if(!/\.tsx?$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q;if(Y){let M=Q.indexOf("*/");if(M>=0)Q=Q.slice(M+2),Y=!1;else continue}let q=Q.indexOf("/*"),U=Q.indexOf("//");if(q>=0&&(U===-1||q<U)){let M=Q.indexOf("*/",q+2);if(M>=0)Q=Q.slice(0,q)+Q.slice(M+2);else Y=!0,Q=Q.slice(0,q)}if(U>=0)Q=Q.slice(0,U);let W=Q.replace(/(['"`])(?:(?!\1)[^\\]|\\.)*?\1/g,'""'),K=/(\w+)\s+as\s+any/g,H;while((H=K.exec(W))!==null){let M=H[1],T=H.index,E=W.slice(T+H[0].length).trim(),j=W.slice(0,T).trim();if(/=\s*$/.test(j)&&!/==|===|!=|!==/.test(j)){let O=G.indexOf(H[0]);Z.push({filePath:J.filePath,line:z+1,column:O>=0?O+1:T+1,ruleId:"ts/no-unsafe-assignment",message:"Unsafe assignment: value cast to `any` is being assigned. This bypasses type checking.",severity:"error",help:"Avoid casting to `any` or use a more specific type"})}}let V=["JSON.parse","eval","Function","require"];for(let M of V){let T=new RegExp(`\\b${M.replace(".","\\.")}\\s*\\(`,"g");T.lastIndex=0;while((H=T.exec(W))!==null){let E=H.index,j=W.slice(0,E).trim(),O=j.match(/(?:const|let|var)\s+([\w$]+)\s*=\s*$/);if(O){let L=O[1];if(!new RegExp(`\\b${L}\\s*:\\s*\\w+`).test(W)){let b=G.indexOf(H[0]);Z.push({filePath:J.filePath,line:z+1,column:b>=0?b+1:E+1,ruleId:"ts/no-unsafe-assignment",message:`Unsafe assignment from ${M}() without type annotation. This function returns 'any'.`,severity:"error",help:`Add a type annotation to ${L} or use a type assertion with a specific type`})}}let v=j.match(/([\w$.]+)\s*=\s*$/),k=/(?:const|let|var)\s+/.test(j);if(v&&!O&&!k){let L=G.indexOf(H[0]);Z.push({filePath:J.filePath,line:z+1,column:L>=0?L+1:E+1,ruleId:"ts/no-unsafe-assignment",message:`Unsafe assignment from ${M}() which returns 'any'.`,severity:"error",help:"Consider adding a type assertion with a specific type"})}}}let A=/(?:const|let|var)\s+([\w$]+)\s*:\s*any\s*=/,_=W.match(A);if(_){let M=_[1],T=G.indexOf(_[0]);Z.push({filePath:J.filePath,line:z+1,column:T>=0?T+1:1,ruleId:"ts/no-unsafe-assignment",message:`Variable '${M}' is explicitly typed as 'any'. This defeats TypeScript's type safety.`,severity:"error",help:"Use a more specific type or `unknown` instead of `any`"})}let w=/(?:const|let|var)\s+(?:\{[^}]+\}|\[[^\]]+\])\s*=\s*([\w$]+)/,F=W.match(w);if(F){let M=F[1];if(/^(?:params|query|body|req|res|response|data|result)$/.test(M));}}return Z}};var FY={meta:{docs:"Prefer nullish coalescing operator (??) over logical OR (||) when checking for null/undefined"},check:($,J)=>{let Z=[];if(!/\.tsx?$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q.split(""),q=G.length,U=0;if(Y){let A=Q.indexOf("*/");if(A<0)continue;for(let _=0;_<=A+1;_++)G[_]=" ";Y=!1,U=A+2}let W=null;for(;U<q;U++){let A=G[U];if(W){if(A==="\\"){if(G[U]=" ",U+1<q)G[U+1]=" ",U++;continue}if(A===W){W=null;continue}G[U]=" ";continue}if(A==="/"&&G[U+1]==="/"){for(let _=U;_<q;_++)G[_]=" ";break}if(A==="/"&&G[U+1]==="*"){let _=Q.indexOf("*/",U+2);if(_<0){for(let w=U;w<q;w++)G[w]=" ";Y=!0;break}for(let w=U;w<=_+1;w++)G[w]=" ";U=_+1;continue}if(A==='"'||A==="'"||A==="`")W=A}let K=G.join(""),H=/\|\|/g,V;while((V=H.exec(K))!==null){let A=V.index,_=A-1,w=0,F=0,M=0;while(_>=0){let L=K[_];if(L===")")w++;else if(L==="("){if(w===0){_++;break}w--}else if(L==="}")F++;else if(L==="{"){if(F===0){_++;break}F--}else if(L==="]")M++;else if(L==="["){if(M===0){_++;break}M--}else if(w===0&&F===0&&M===0){if(new RegExp("[;,=:?]").test(L)){_++;break}if(L==="&"||L==="|"){_++;break}}_--}if(_<0)_=0;let T=K.slice(_,A).trim();if(/[<>!=]/.test(T))continue;if(/\b(?:true|false)\b/.test(T))continue;let E=A+2,j=E;w=0,F=0,M=0;while(j<K.length){let L=K[j];if(L==="(")w++;else if(L===")"){if(w===0)break;w--}else if(L==="{")F++;else if(L==="}"){if(F===0)break;F--}else if(L==="[")M++;else if(L==="]"){if(M===0)break;M--}else if(w===0&&F===0&&M===0){if(new RegExp("[;,?:]").test(L))break;if(L==="&"||L==="|"&&K[j+1]==="|")break}j++}let O=K.slice(E,j).trim(),v=/^["'`\d]/.test(O)||/^\{/.test(O)||/^[\w$]+\(/.test(O)||/^[\w$.[\]]+$/.test(O),k=/^[\w$]+$/.test(T)||/^[\w$.?[\]()]+$/.test(T);if(v&&k)Z.push({filePath:J.filePath,line:z+1,column:A+1,ruleId:"ts/prefer-nullish-coalescing",message:"Prefer nullish coalescing operator (??) over logical OR (||)",severity:"error",help:'Use `??` instead of `||` to only handle null/undefined, not falsy values like 0, "", or false'})}}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X,z=new RegExp("(\\b[\\w$.]+)\\s*\\|\\|\\s*([^|&]+?)(?=\\s*[;,)\\]}]|$)","g");Y=Y.replace(z,(Q,G,q)=>{if(/\b(?:true|false)\b/.test(q.trim()))return Q;return`${G} ?? ${q}`}),Z.push(Y)}return Z.join(`
195
195
  `)}};var wY={meta:{docs:"Prefer optional chaining (?.) over chained logical AND (&&) for property access"},check:($,J)=>{let Z=[];if(!/\.tsx?$/.test(J.filePath))return Z;let X=$.split(/\r?\n/),Y=!1;for(let z=0;z<X.length;z++){let Q=X[z],G=Q;if(Y){let _=Q.indexOf("*/");if(_>=0)Q=Q.slice(_+2),Y=!1;else continue}let q=Q.indexOf("/*"),U=Q.indexOf("//");if(q>=0&&(U===-1||q<U)){let _=Q.indexOf("*/",q+2);if(_>=0)Q=Q.slice(0,q)+Q.slice(_+2);else Y=!0,Q=Q.slice(0,q)}if(U>=0)Q=Q.slice(0,U);let W=Q.replace(/(['"`])(?:(?!\1)[^\\]|\\.)*?\1/g,'""'),K=/(\b[\w$]+)\s*&&\s*\1\.([\w$]+)/g,H;while((H=K.exec(W))!==null){let _=H[1],w=H[2],F=H.index,M=G.indexOf(H[0],Math.max(0,F-5));Z.push({filePath:J.filePath,line:z+1,column:M>=0?M+1:F+1,ruleId:"ts/prefer-optional-chain",message:`Prefer optional chaining over && for property access: ${_}?.${w}`,severity:"error",help:`Use \`${_}?.${w}\` instead of \`${_} && ${_}.${w}\``})}let V=/([\w$]+\.[\w$.]+)\s*&&\s*\1\.([\w$]+)/g;V.lastIndex=0;while((H=V.exec(W))!==null){let _=H[1],w=H[2],F=H.index,M=G.indexOf(H[0],Math.max(0,F-5));Z.push({filePath:J.filePath,line:z+1,column:M>=0?M+1:F+1,ruleId:"ts/prefer-optional-chain",message:`Prefer optional chaining over && for nested property access: ${_}?.${w}`,severity:"error",help:`Use \`${_}?.${w}\` instead of \`${_} && ${_}.${w}\``})}let A=W.split(/\s*&&\s*/);if(A.length>=3)for(let _=0;_<A.length-2;_++){let w=A[_].trim(),F=A[_+1].trim(),M=A[_+2].trim();if(F.startsWith(`${w}.`)&&M.startsWith(`${F}.`)){let T=G.indexOf(w);Z.push({filePath:J.filePath,line:z+1,column:T>=0?T+1:1,ruleId:"ts/prefer-optional-chain",message:"Prefer optional chaining over multiple && checks for nested properties",severity:"error",help:`Use optional chaining like \`${w}?.${F.slice(w.length+1)}?.${M.slice(F.length+1)}\``});break}}}return Z},fix:($)=>{let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/(\b[\w$]+)\s*&&\s*\1\.([\w$]+)/g,"$1?.$2"),Y=Y.replace(/([\w$]+\.[\w$.]+)\s*&&\s*\1\.([\w$]+)/g,"$1?.$2"),Z.push(Y)}return Z.join(`
196
- `)}};function kG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var BY=/([a-zA-Z_$][a-zA-Z0-9_$]*\??)\s*:\s*([A-Z][a-zA-Z0-9_$<>[\]|&]*|string|number|boolean|null|undefined|void|never|any|unknown|object|symbol|bigint)/g,MY={meta:{docs:"Require consistent spacing around type annotation colons",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;BY.lastIndex=0;while((G=BY.exec(z))!==null){if(kG(z,G.index))continue;let q=G[0],U=q.indexOf(":"),W=G.index+U;if(U>0&&q[U-1]===" "&&!q.startsWith("?")){if(!G[1].endsWith("?")||q[U-1]===" "){if(z[W-1]===" "&&!/\?\s*$/.test(G[1]))Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"ts/type-annotation-spacing",message:"Unexpected space before colon in type annotation",severity:"warning"})}}if(W+1<z.length&&z[W+1]!==" "&&z[W+1]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:W+2,ruleId:"ts/type-annotation-spacing",message:"Missing space after colon in type annotation",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*\??)\s*:\s*([A-Z][a-zA-Z0-9_$<>[\]|&]*|string|number|boolean|null|undefined|void|never|any|unknown|object|symbol|bigint)/g,"$1: $2"),Z.push(Y)}return Z.join(`
197
- `)}};function jY($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var NY=/([A-Za-z_$][A-Za-z0-9_$]*)\s*<(\s+)/g,TY=/(\s+)>(?!=)/g,fG=/([A-Za-z_$][A-Za-z0-9_$]*)\s*<\s+/g,gG=/\s+>(?!=)/g,EY={meta:{docs:"Disallow spaces inside TypeScript generic angle brackets",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;NY.lastIndex=0;let G;while((G=NY.exec(z))!==null){let q=G.index+G[1].length,U=z.indexOf("<",q);if(U===-1)continue;if(jY(z,U))continue;Z.push({filePath:J.filePath,line:Y+1,column:U+2,ruleId:"ts/type-generic-spacing",message:"Unexpected space after '<' in generic type",severity:"warning"})}TY.lastIndex=0;while((G=TY.exec(z))!==null){let q=G.index+G[1].length;if(jY(z,q))continue;let U=z.slice(0,q);if(!/[A-Za-z_$][A-Za-z0-9_$]*\s*</.test(U))continue;Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"ts/type-generic-spacing",message:"Unexpected space before '>' in generic type",severity:"warning"})}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y of Z){let z=Y.trim();if(!z||z.startsWith("//")||z.startsWith("*")||z.startsWith("/*")){X.push(Y);continue}let Q=Y;if(Q=Q.replace(fG,(G,q)=>{return`${q}<`}),/[A-Za-z_$][A-Za-z0-9_$]*\s*</.test(Q))Q=Q.replace(gG,">");X.push(Q)}return X.join(`
198
- `)}};function pG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var DY=/([a-zA-Z_$][a-zA-Z0-9_$?]*):(\S)/g,LY={meta:{docs:"Require space after colon in named tuple members",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=RY(z);for(let q of G){DY.lastIndex=0;let U;while((U=DY.exec(q.text))!==null){let K=q.start+U.index+U[1].length;if(pG(z,K))continue;if(!OY(z))continue;Z.push({filePath:J.filePath,line:Y+1,column:K+2,ruleId:"ts/type-named-tuple-spacing",message:"Missing space after colon in named tuple member",severity:"warning"})}}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y of Z){let z=Y.trim();if(!z||z.startsWith("//")||z.startsWith("*")||z.startsWith("/*")){X.push(Y);continue}if(!OY(Y)){X.push(Y);continue}let Q=Y,G=RY(Y);for(let q=G.length-1;q>=0;q--){let U=G[q],W=U.text.replace(/([a-zA-Z_$][a-zA-Z0-9_$?]*):(\S)/g,"$1: $2");if(W!==U.text)Q=Q.slice(0,U.start)+W+Q.slice(U.start+U.text.length)}X.push(Q)}return X.join(`
196
+ `)}};function fG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var BY=/([a-zA-Z_$][a-zA-Z0-9_$]*\??)\s*:\s*([A-Z][a-zA-Z0-9_$<>[\]|&]*|string|number|boolean|null|undefined|void|never|any|unknown|object|symbol|bigint)/g,MY={meta:{docs:"Require consistent spacing around type annotation colons",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G;BY.lastIndex=0;while((G=BY.exec(z))!==null){if(fG(z,G.index))continue;let q=G[0],U=q.indexOf(":"),W=G.index+U;if(U>0&&q[U-1]===" "&&!q.startsWith("?")){if(!G[1].endsWith("?")||q[U-1]===" "){if(z[W-1]===" "&&!/\?\s*$/.test(G[1]))Z.push({filePath:J.filePath,line:Y+1,column:W+1,ruleId:"ts/type-annotation-spacing",message:"Unexpected space before colon in type annotation",severity:"warning"})}}if(W+1<z.length&&z[W+1]!==" "&&z[W+1]!=="\t")Z.push({filePath:J.filePath,line:Y+1,column:W+2,ruleId:"ts/type-annotation-spacing",message:"Missing space after colon in type annotation",severity:"warning"})}}return Z},fix($){let J=$.split(/\r?\n/),Z=[];for(let X of J){let Y=X;Y=Y.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*\??)\s*:\s*([A-Z][a-zA-Z0-9_$<>[\]|&]*|string|number|boolean|null|undefined|void|never|any|unknown|object|symbol|bigint)/g,"$1: $2"),Z.push(Y)}return Z.join(`
197
+ `)}};function jY($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var NY=/([A-Za-z_$][A-Za-z0-9_$]*)\s*<(\s+)/g,TY=/(\s+)>(?!=)/g,gG=/([A-Za-z_$][A-Za-z0-9_$]*)\s*<\s+/g,pG=/\s+>(?!=)/g,EY={meta:{docs:"Disallow spaces inside TypeScript generic angle brackets",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;NY.lastIndex=0;let G;while((G=NY.exec(z))!==null){let q=G.index+G[1].length,U=z.indexOf("<",q);if(U===-1)continue;if(jY(z,U))continue;Z.push({filePath:J.filePath,line:Y+1,column:U+2,ruleId:"ts/type-generic-spacing",message:"Unexpected space after '<' in generic type",severity:"warning"})}TY.lastIndex=0;while((G=TY.exec(z))!==null){let q=G.index+G[1].length;if(jY(z,q))continue;let U=z.slice(0,q);if(!/[A-Za-z_$][A-Za-z0-9_$]*\s*</.test(U))continue;Z.push({filePath:J.filePath,line:Y+1,column:q+1,ruleId:"ts/type-generic-spacing",message:"Unexpected space before '>' in generic type",severity:"warning"})}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y of Z){let z=Y.trim();if(!z||z.startsWith("//")||z.startsWith("*")||z.startsWith("/*")){X.push(Y);continue}let Q=Y;if(Q=Q.replace(gG,(G,q)=>{return`${q}<`}),/[A-Za-z_$][A-Za-z0-9_$]*\s*</.test(Q))Q=Q.replace(pG,">");X.push(Q)}return X.join(`
198
+ `)}};function xG($,J){let Z=$.slice(0,J);if(Z.includes("//"))return!0;let X=(Z.match(/'/g)||[]).length,Y=(Z.match(/"/g)||[]).length,z=(Z.match(/`/g)||[]).length;return X%2===1||Y%2===1||z%2===1}var DY=/([a-zA-Z_$][a-zA-Z0-9_$?]*):(\S)/g,LY={meta:{docs:"Require space after colon in named tuple members",recommended:!0},check($,J){let Z=[],X=$.split(/\r?\n/);for(let Y=0;Y<X.length;Y++){let z=X[Y],Q=z.trim();if(!Q||Q.startsWith("//")||Q.startsWith("*")||Q.startsWith("/*"))continue;let G=RY(z);for(let q of G){DY.lastIndex=0;let U;while((U=DY.exec(q.text))!==null){let K=q.start+U.index+U[1].length;if(xG(z,K))continue;if(!OY(z))continue;Z.push({filePath:J.filePath,line:Y+1,column:K+2,ruleId:"ts/type-named-tuple-spacing",message:"Missing space after colon in named tuple member",severity:"warning"})}}}return Z},fix($,J){let Z=$.split(/\r?\n/),X=[];for(let Y of Z){let z=Y.trim();if(!z||z.startsWith("//")||z.startsWith("*")||z.startsWith("/*")){X.push(Y);continue}if(!OY(Y)){X.push(Y);continue}let Q=Y,G=RY(Y);for(let q=G.length-1;q>=0;q--){let U=G[q],W=U.text.replace(/([a-zA-Z_$][a-zA-Z0-9_$?]*):(\S)/g,"$1: $2");if(W!==U.text)Q=Q.slice(0,U.start)+W+Q.slice(U.start+U.text.length)}X.push(Q)}return X.join(`
199
199
  `)}};function RY($){let J=[],Z=0,X=-1;for(let Y=0;Y<$.length;Y++)if($[Y]==="["){if(Z===0)X=Y;Z++}else if($[Y]==="]"){if(Z--,Z===0&&X>=0)J.push({start:X,text:$.slice(X,Y+1)}),X=-1}return J}function OY($){let J=$.trim();return/\btype\s/.test(J)||/:\s*\[/.test(J)||/=\s*\[/.test(J)||/\bas\s/.test(J)||/<[^>]*\[/.test(J)||/\bextends\s/.test(J)||/\bimplements\s/.test(J)}var PY={name:"ts",rules:{"no-require-imports":B(HY),"no-top-level-await":B(VY),"no-ts-export-equal":B(AY),"no-explicit-any":B(UY),"prefer-nullish-coalescing":B(FY),"prefer-optional-chain":B(wY),"no-floating-promises":B(WY),"no-misused-promises":B(KY),"no-unsafe-assignment":B(_Y),"member-delimiter-style":B(qY),"type-annotation-spacing":B(MY),"type-generic-spacing":B(EY),"type-named-tuple-spacing":B(LY)}};var CY={name:"unused-imports",rules:{"no-unused-vars":B(t0),"no-unused-imports":B(t0)}};function G9(){return[LZ,kZ,xX,pX,GY,dX,PY,iJ,_5,F5,$X,aZ,VX,CY,ZX]}var q9=null;function yY(){if(!q9)q9=new J1("pickier",{showTags:!1});return q9}function E1(...$){if(y0.TRACE)yY().debug("[pickier:trace]",$)}async function SY($,J,Z){let X,Y=new Promise((z,Q)=>{X=setTimeout(()=>Q(Error(`Timeout after ${J}ms at ${Z}`)),J)});try{let z=await Promise.race([$,Y]);return clearTimeout(X),z}catch(z){throw yY().error(`[pickier:error] ${Z} failed:`,z?.message||z),E1("withTimeout error:",Z,z),z}}function bY($){if($.length===0)return"";let J=new Map;for(let X of $){let Y=J.get(X.filePath)||[];Y.push(X),J.set(X.filePath,Y)}let Z="";for(let[X,Y]of J){Z+=`
200
200
  ${J0.bold(`\x1B[4m${X}\x1B[24m`)}
201
201
  `;let z;try{z=vY(X,"utf8")}catch{for(let G of Y){let q=G.severity==="error"?J0.red("error"):J0.yellow("warn ");Z+=` ${G.line}:${G.column} ${q} ${G.message} ${J0.blue(G.ruleId)}
@@ -211,16 +211,16 @@ ${J0.bold(`\x1B[4m${X}\x1B[24m`)}
211
211
  `}}return Z}function kY($){if($.length===0)return"";let J=new Map;for(let X of $){let Y=J.get(X.filePath)||[];Y.push(X),J.set(X.filePath,Y)}let Z="";for(let[X,Y]of J){Z+=`
212
212
  ${J0.bold(`\x1B[4m${X}\x1B[24m`)}
213
213
  `;for(let z of Y){let Q=z.severity==="error"?J0.red("error"):J0.yellow("warn "),q=`${z.line}:${z.column}`.padStart(6),U=60,W=z.message.padEnd(60);Z+=`${q} ${Q} ${W} ${J0.blue(z.ruleId)}
214
- `}}return Z}async function pj($,J){E1("runFormat:start",{globs:$,options:J});let Z=await h1(J.config),X=$.length?$:["."],Y=u1(X);E1("patterns",Y);let z=new Set((J.ext||Z.format.extensions.join(",")).split(",").map((w)=>{let F=w.trim();return F.startsWith(".")?F:`.${F}`})),Q=y0.TIMEOUT_MS,q=Y.some((w)=>{let F=w.replace(/\/?\*\*(?:\/\*+)?$/,"");return!(hG(F)?F:uG(T1.cwd(),F)).startsWith(T1.cwd())})?[...z1]:Z.ignores,U=m1(q),W=[];if(Y.length===1&&/\*\*\/\*$/.test(Y[0])){let w=Y[0].replace(/\/?\*\*\/\*$/,"");try{let{readdirSync:F,statSync:M}=await import("fs"),{join:T}=await import("path"),E=[w];while(E.length){let j=E.pop(),O=F(j);for(let v of O){let k=T(j,v),L=M(k);if(U(k))continue;if(L.isDirectory())E.push(k);else W.push(k)}}}catch{W=await SY($1(Y,{dot:!1,ignore:q,onlyFiles:!0,absolute:!0}),Q,"glob")}}else W=await SY($1(Y,{dot:!1,ignore:q,onlyFiles:!0,absolute:!0}),Q,"glob");E1("globbed entries",W.length);let H=W.filter((w)=>{if(U(w))return!1;let F=w.lastIndexOf(".");if(F<0)return!0;let M=w.slice(F);return z.has(M)});E1("filtered files",H.length);let V=0,A=[];for(let w of H){E1("format start",IY(T1.cwd(),w));let F=vY(w,"utf8"),M=h8(F,Z,w),T=M!==F;if(J.write){if(T)xG(w,M,"utf8")}if(T)A.push(IY(T1.cwd(),w));V++}let _=A.length;if(_>0){for(let w of A)console.log(J0.gray(` ${w}`));console.log(J.write?J0.gray(`Formatted ${_} of ${V} file(s).`):J0.yellow(`${_} of ${V} file(s) need formatting. Run with --write to fix.`))}else if(J.verbose!==void 0?J.verbose:Z.verbose)console.log(J0.gray(`Checked ${V} files, all formatted.`));return J.check&&_>0?1:0}var W9=null;function e(){if(!W9)W9=new J1("pickier:lint",{showTags:!1});return W9}function N0(...$){if(y0.TRACE)e().error("[pickier:trace]",$)}async function sj($,J,Z="untitled",X){if(X?.aborted)throw Error("AbortError");let Y=O1($),z=L1($),Q=P1(Z,$,J,Y,z);if(X?.aborted)throw Error("AbortError");try{let G=await _9(Z,$,J);for(let q of G){if(X?.aborted)throw Error("AbortError");if(g0(q.ruleId,q.line,Y))continue;if(z.has(q.line)&&d8(q.ruleId))continue;Q.push({filePath:q.filePath,line:q.line,column:q.column,ruleId:q.ruleId,message:q.message,severity:q.severity,...q.help&&{help:q.help}})}}catch{}return Q}async function nj($,J,Z){N0("runLintProgrammatic:start",{globs:$,options:J});let X=await h1(J.config);if(Z?.aborted)throw Error("AbortError");let Y=$.length?$:["."],z=u1(Y),Q=J.ext||X.lint.extensions.join(","),G=new Set(Q.split(",").map((b)=>{let P=b.trim();return P.startsWith(".")?P:`.${P}`})),q=y0.TIMEOUT_MS,W=z.some((b)=>{let P=b.replace(/\/?\*\*\/*\*\*$/,""),I=D1(P)?P:R1(C0.cwd(),P),S=C0.cwd();return I!==S&&!I.startsWith(S+oY)})?[...z1]:X.ignores,K=m1(W),H=[];if(z.length===1&&!/[*?[\]{}()!]/.test(z[0]))try{if(m8(z[0]).isFile())H=[D1(z[0])?z[0]:R1(C0.cwd(),z[0])]}catch{}let A=z.length===1&&/\*\*\/*\*$/.test(z[0]);if(!H.length&&A){let b=z[0].replace(/\/?\*\*\/*\*\*$/,""),P=D1(b)?b:R1(C0.cwd(),b);try{let I=[P];while(I.length){if(Z?.aborted)throw Error("AbortError");let S=I.pop(),C=uY(S);for(let N of C){let R=dY(S,N),D=m8(R);if(K(R))continue;if(D.isDirectory())I.push(R);else H.push(R)}}}catch{H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob")}}else if(!H.length)H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob");if(Z?.aborted)throw Error("AbortError");let _=0,w=0,F=0,M=0,T=0,E=[];for(let b of H){if(_++,b.replace(/\\/g,"/").includes("/node_modules/")){F++;continue}if(K(b)){M++;continue}if(!V9(b,G)){T++;continue}E.push(b),w++}N0("filter:programmatic",{total:_,included:w,node_modules:F,ignored:M,wrongExt:T});let j=y0.CONCURRENCY,k=(await rY(E,j,async(b)=>{if(Z?.aborted)throw Error("AbortError");let P=mY(b,"utf8"),I=O1(P),S=L1(P),C=P1(b,P,X,I,S);try{let N=await _9(b,P,X);for(let R of N){if(Z?.aborted)throw Error("AbortError");if(g0(R.ruleId,R.line,I))continue;if(S.has(R.line)&&d8(R.ruleId))continue;C.push({filePath:R.filePath,line:R.line,column:R.column,ruleId:R.ruleId,message:R.message,severity:R.severity,...R.help&&{help:R.help}})}}catch{}{let N=new Set;C=C.filter((R)=>{let D=`${R.line}:${R.column}:${R.ruleId}`;if(N.has(D))return!1;return N.add(D),!0})}if(J.fix){let N=/^\s*debugger\b/,R=P;if(X.rules.noDebugger==="error"||X.rules.noDebugger==="warn"){let f=R.split(/\r?\n/),p=[];for(let d of f){if(N.test(d))continue;p.push(d)}R=p.join(`
215
- `)}if(R=lY(b,R,X),R!==P){let f=O1(R),p=L1(R);if(C=P1(b,R,X,f,p),!J.dryRun)K9(b,R,"utf8")}}return C})).flat(),L=k.filter((b)=>b.severity==="error").length,h=k.filter((b)=>b.severity==="warning").length;return{errors:L,warnings:h,issues:k}}function mG($){return $.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function dG($){return $.replace(/-([a-z])/g,(J,Z)=>Z.toUpperCase())}function O1($){let J=new Map,Z=new Set,X=new Map,Y=new Map,z=$.split(/\r?\n/),Q=new Set;for(let U=0;U<z.length;U++){let W=z[U].trim(),K=U+1,H=W.match(/^\/\/\s*(?:eslint|pickier)-disable-next-line(?:\s+(\S.*))?$/);if(H){let F=H[1]?.replace(/\s+--\s.*$/,""),M=F?F.split(",").map((T)=>T.trim()).filter(Boolean):["*"];if(M.length>0){let T=K+1,E=J.get(T)||new Set;for(let j of M)E.add(j);J.set(T,E)}continue}let V=W.match(/^\/\*\s*(?:eslint|pickier)-disable(?:\s+([^*]+))?\s*\*\//);if(V){let F=V[1]?.trim().replace(/\s+--\s.*$/,"");if(!F||F==="")X.set(K,new Set(["*"])),Q.add("*");else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=X.get(K)||new Set;for(let E of M)T.add(E),Q.add(E);X.set(K,T)}if(U===0)if(!F||F==="")Z.add("*");else{let M=F.split(",").map((T)=>T.trim()).filter(Boolean);for(let T of M)Z.add(T)}continue}let A=W.match(/^\/\*\s*(?:eslint|pickier)-enable(?:\s+([^*]+))?\s*\*\//);if(A){let F=A[1]?.trim();if(!F||F==="")Y.set(K,new Set(["*"])),Q.clear();else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=Y.get(K)||new Set;for(let E of M)T.add(E),Q.delete(E);Y.set(K,T)}continue}let _=W.match(/^\/\/\s*(?:eslint|pickier)-disable(?:\s+(\S.*))?$/);if(_){let F=_[1]?.trim().replace(/\s+--\s.*$/,"");if(!F||F==="")X.set(K,new Set(["*"])),Q.add("*");else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=X.get(K)||new Set;for(let E of M)T.add(E),Q.add(E);X.set(K,T)}continue}let w=W.match(/^\/\/\s*(?:eslint|pickier)-enable(?:\s+(\S.*))?$/);if(w){let F=w[1]?.trim();if(!F||F==="")Y.set(K,new Set(["*"])),Q.clear();else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=Y.get(K)||new Set;for(let E of M)T.add(E),Q.delete(E);Y.set(K,T)}}}let G=Array.from(X.keys()).sort((U,W)=>U-W),q=Array.from(Y.keys()).sort((U,W)=>U-W);return{nextLine:J,fileLevel:Z,rangeDisable:X,rangeEnable:Y,sortedDisableLines:G,sortedEnableLines:q}}function g0($,J,Z){if(Z instanceof Map){let G=Z.get(J);if(!G||G.size===0)return!1;return d1($,G)}if(Z.fileLevel.size>0){if(d1($,Z.fileLevel))return!0}let X=Z.nextLine.get(J);if(X&&d1($,X))return!0;let Y=!1,z=0,Q=0;while(!0){let G=z<Z.sortedDisableLines.length?Z.sortedDisableLines[z]:Number.POSITIVE_INFINITY,q=Q<Z.sortedEnableLines.length?Z.sortedEnableLines[Q]:Number.POSITIVE_INFINITY,U=Math.min(G,q);if(U>=J)break;if(G===U){let K=Z.rangeDisable.get(G);if(d1($,K))Y=!0;z++;continue}let W=Z.rangeEnable.get(q);if(W.has("*")||d1($,W))Y=!1;Q++}return Y}function d1($,J){if(J.size===0)return!1;if(J.has("*"))return!0;if(J.has($))return!0;let Z=mG($);if(J.has(Z)||J.has(dG($)))return!0;for(let X of J)if(!X.includes("/")){if($.endsWith(`/${X}`))return!0}return!1}function d8($){return $!=="spaced-comment"&&!$.endsWith("/spaced-comment")}function cY($,J){if($.help)return $;let Z=J.includes("/")?J.split("/")[1]:J,X;if(Z.startsWith("no-"))X=`Remove or refactor this ${Z.replace("no-","").replace(/-/g," ")}. Check the rule documentation for more details or disable with: // eslint-disable-next-line ${J}`;else if(Z.startsWith("prefer-"))X=`Consider using ${Z.replace("prefer-","").replace(/-/g," ")} instead. This is a best practice recommendation. Disable with: // eslint-disable-next-line ${J} if needed`;else if(Z.includes("sort")||Z.includes("order"))X=`Reorder these items according to the rule requirements, or use --fix to auto-sort. Disable with: // eslint-disable-next-line ${J}`;else if(Z.includes("indent")||Z.includes("spacing")||Z.includes("newline"))X=`Fix the formatting issue. Run with --fix to automatically format. Disable with: // eslint-disable-next-line ${J}`;else X=`Fix this issue or disable the rule with: // eslint-disable-next-line ${J}. Check the rule documentation for more details`;return{...$,help:X}}async function o1($,J,Z){let X,Y=new Promise((z,Q)=>{X=setTimeout(()=>Q(Error(`Timeout after ${J}ms at ${Z}`)),J)});try{let z=await Promise.race([$,Y]);return clearTimeout(X),z}catch(z){throw e().error(`[pickier:error] ${Z} failed:`,z?.message||z),N0("withTimeout error:",Z,z),z}}async function rY($,J,Z){let X=Array($.length);if($.length===0)return X;let Y=0,z=Math.max(1,Math.min(Math.max(1,J),$.length));async function Q(){while(Y<$.length){let G=Y++;X[G]=await Z($[G],G)}}return await Promise.all(Array.from({length:z},Q)),X}var fY=new WeakMap;function oG($){let J=G9();if($.plugins&&$.plugins.length>0){let Z=new Set(["pickier","style","regexp","ts"]),X=$.plugins.filter((z)=>typeof z!=="string");J=X.some((z)=>Z.has(z.name))?J:[];for(let z of X)J.push(z)}return J}function cG($,J){let Z={...$.pluginRules||{}};if($.rules?.noUnusedCapturingGroup)Z["regexp/no-unused-capturing-group"]=$.rules.noUnusedCapturingGroup;let X={"antfu/curly":"style/curly","antfu/if-newline":"style/if-newline","antfu/no-top-level-await":"ts/no-top-level-await"};for(let[Y,z]of Object.entries(X))if(Z[Y])Z[z]=Z[Y];for(let Y of Object.keys($.pluginRules||{}))if(!Y.includes("/")){for(let z of J)if(z.rules&&Object.prototype.hasOwnProperty.call(z.rules,Y))Z[`${z.name}/${Y}`]=$.pluginRules[Y]}return Z}function o8($){let J=fY.get($);if(J)return J;let Z=oG($),X=cG($,Z),Y=[],z=[],Q=new Set(["no-debugger"]),G=new Set(["no-debugger"]),q=new Set;for(let W of Z)for(let K in W.rules){let H=`${W.name}/${K}`,V=hY(X,H);if(!V.enabled)continue;if(q.has(K))continue;q.add(K);let A=W.rules[K],_={pluginName:W.name,ruleName:K,fullRuleId:H,rule:A,severity:V.severity,options:V.options};if(typeof A?.check==="function")Y.push(_);else if(V.severity==="error")Y.push(_);if(typeof A?.fix==="function")z.push(_),Q.add(H),G.add(K)}let U={checkRules:Y,fixRules:z,fixableRuleIds:Q,fixableBareRuleNames:G};return fY.set($,U),U}function rG($,J){return/\.(?:sh|bash|zsh|ksh|dash)$/.test($)||/^#!\s*(?:\/usr\/bin\/env\s+)?(?:ba|z|k|da)?sh\b/.test(J)}function lG($){return/(?:^|[/\\])(?:bun\.lock|bun\.lockb|package-lock\.json|pnpm-lock\.yaml|yarn\.lock|npm-shrinkwrap\.json)$/.test($)}function A9($,J,Z){switch($.pluginName){case"markdown":return J.endsWith(".md");case"shell":return rG(J,Z);case"publint":return/(?:^|[/\\])package\.json$/.test(J);case"lockfile":return lG(J);case"node":case"ts":case"general":case"quality":case"eslint":case"regexp":case"unused-imports":case"perfectionist":return/\.(?:ts|js|tsx|jsx|mts|mjs|cts|cjs)$/.test(J);default:return!0}}async function _9($,J,Z){let X=[],Y=o8(Z),z={filePath:$,config:Z};for(let Q of Y.checkRules){if(!A9(Q,$,J))continue;let{fullRuleId:G,rule:q,severity:U}=Q;if(!q||typeof q.check!=="function"){if(U==="error")X.push({filePath:$,line:1,column:1,ruleId:`${G}-internal`,message:"Rule missing implementation (check function is undefined)",severity:"error"});continue}try{N0("rule:start",G);let W=y0.RULE_TIMEOUT_MS,K={...z,options:Q.options},H=performance.now(),V=await o1(Promise.resolve().then(()=>q.check(J,K)),W,`rule:${G}`),A=performance.now()-H;if(A>W)X.push({filePath:$,line:1,column:1,ruleId:`${G}-internal`,message:`Rule exceeded timeout budget: ${Math.round(A)}ms > ${W}ms`,severity:"error"});N0("rule:end",G,Array.isArray(V)?V.length:0);for(let _ of V){let w=cY(_,G);if(U)X.push({...w,severity:U});else X.push(w)}}catch(W){X.push({filePath:$,line:1,column:1,ruleId:`${G}-internal`,message:`Rule threw: ${W?.message||W}`,severity:"error"})}}return X}var aG=/\.(?:[cm]?[jt]sx?|vue|svelte|stx)$/i;function sG($,J,Z){if(!aG.test(Z)||!$.includes("`"))return J;let X=$.split(/\r?\n/),Y=J.split(/\r?\n/);if(X.length!==Y.length)return J;let z=e0($),Q=0;for(let G=0;G<Y.length;G++)if(z[G]&&Y[G]!==X[G])Y[G]=X[G],Q++;return Q>0?Y.join(`
216
- `):J}function lY($,J,Z){let X=o8(Z),Y={filePath:$,config:Z},z=J,Q=!0,G=0;while(Q&&G++<U9){Q=!1;for(let q of X.fixRules){if(!A9(q,$,z))continue;let U={...Y,options:q.options},W=q.rule.fix(z,U),K=q.rule.meta?.editsStringContent?W:sG(z,W,$);if(K!==z)z=K,Q=!0}}return z}function nG($,J){let Z=J.format.indent,X=J.format.indentStyle,Y=$.split(/\r?\n/),z=!1;for(let Q=0;Q<Y.length;Q++){let G=Y[Q],q=0;while(q<G.length&&(G.charCodeAt(q)===32||G.charCodeAt(q)===9))q++;if(q===0)continue;let U=G.slice(0,q);if(!H9(U,Z,X,G))continue;let W;if(X==="tabs"){let K=0,H=0;for(let A=0;A<U.length;A++)if(U.charCodeAt(A)===9)H++;else K++;let V=Math.floor(K/Z);W="\t".repeat(H+V)}else{let K=0;for(let V=0;V<U.length;V++)if(U.charCodeAt(V)===9)K+=Z;else K++;let H=Math.floor(K/Z)*Z;W=" ".repeat(H)}if(W!==U)Y[Q]=W+G.slice(q),z=!0}return z?Y.join(`
217
- `):$}function gY($){let J="",Z=0;while(Z<$.length){if($[Z]==="/"&&Z>0){let X=$.slice(0,Z).trimEnd();if(/[=([{,:!&|?]$/.test(X)||/;$/.test(X)||X.endsWith("return")){Z++;while(Z<$.length){if($[Z]==="\\"){Z+=2;continue}if($[Z]==="/"){Z++;while(Z<$.length&&/[gimsuvy]/.test($[Z]))Z++;break}Z++}continue}}J+=$[Z],Z++}return J}function iG($,J,Z){if($==="")return!0;if("([{,:;!?&|=<>~^+*%-".includes($))return!0;if(/[A-Za-z_$]/.test($)){let Y=J.slice(0,Z).trimEnd();if(/(?:^|[^A-Za-z0-9_$])(?:return|typeof|instanceof|new|delete|void|in|of|yield|await|throw|case)$/.test(Y))return!0}return!1}function pY($){let J="",Z=0,X=null,Y=!1;while(Z<$.length){let z=$[Z],Q=$[Z+1];if(Y){J+=z,Y=!1,Z++;continue}if(z==="\\"&&X){Y=!0,J+=z,Z++;continue}if(!X){if(z==='"'){X="double",J+=z,Z++;continue}if(z==="'"){X="single",J+=z,Z++;continue}if(z==="`"){X="template",J+=z,Z++;continue}if(z==="/"&&Q==="/")break;if(z==="/"&&Q==="*"){Z+=2;while(Z<$.length){if($[Z]==="*"&&$[Z+1]==="/"){Z+=2;break}Z++}J+=" ";continue}J+=z,Z++}else{if(X==="double"&&z==='"'||X==="single"&&z==="'"||X==="template"&&z==="`")X=null;J+=z,Z++}}return J}function L1($){let J=new Set,Z="code",X=1,Y=!1,z=!1,Q=!1,G=[];for(let q=0;q<$.length;q++){let U=$[q],W=$[q+1],K=q>0?$[q-1]:"";if(U===`
214
+ `}}return Z}async function xj($,J){E1("runFormat:start",{globs:$,options:J});let Z=await h1(J.config),X=$.length?$:["."],Y=u1(X);E1("patterns",Y);let z=new Set((J.ext||Z.format.extensions.join(",")).split(",").map((w)=>{let F=w.trim();return F.startsWith(".")?F:`.${F}`})),Q=y0.TIMEOUT_MS,q=Y.some((w)=>{let F=w.replace(/\/?\*\*(?:\/\*+)?$/,"");return!(uG(F)?F:mG(T1.cwd(),F)).startsWith(T1.cwd())})?[...z1]:Z.ignores,U=m1(q),W=[];if(Y.length===1&&/\*\*\/\*$/.test(Y[0])){let w=Y[0].replace(/\/?\*\*\/\*$/,"");try{let{readdirSync:F,statSync:M}=await import("fs"),{join:T}=await import("path"),E=[w];while(E.length){let j=E.pop(),O=F(j);for(let v of O){let k=T(j,v),L=M(k);if(U(k))continue;if(L.isDirectory())E.push(k);else W.push(k)}}}catch{W=await SY($1(Y,{dot:!1,ignore:q,onlyFiles:!0,absolute:!0}),Q,"glob")}}else W=await SY($1(Y,{dot:!1,ignore:q,onlyFiles:!0,absolute:!0}),Q,"glob");E1("globbed entries",W.length);let H=W.filter((w)=>{if(U(w))return!1;let F=w.lastIndexOf(".");if(F<0)return!0;let M=w.slice(F);return z.has(M)});E1("filtered files",H.length);let V=0,A=[];for(let w of H){E1("format start",IY(T1.cwd(),w));let F=vY(w,"utf8"),M=h8(F,Z,w),T=M!==F;if(J.write){if(T)hG(w,M,"utf8")}if(T)A.push(IY(T1.cwd(),w));V++}let _=A.length;if(_>0){for(let w of A)console.log(J0.gray(` ${w}`));console.log(J.write?J0.gray(`Formatted ${_} of ${V} file(s).`):J0.yellow(`${_} of ${V} file(s) need formatting. Run with --write to fix.`))}else if(J.verbose!==void 0?J.verbose:Z.verbose)console.log(J0.gray(`Checked ${V} files, all formatted.`));return J.check&&_>0?1:0}var W9=null;function e(){if(!W9)W9=new J1("pickier:lint",{showTags:!1});return W9}function N0(...$){if(y0.TRACE)e().error("[pickier:trace]",$)}async function nj($,J,Z="untitled",X){if(X?.aborted)throw Error("AbortError");let Y=O1($),z=L1($),Q=P1(Z,$,J,Y,z);if(X?.aborted)throw Error("AbortError");try{let G=await _9(Z,$,J);for(let q of G){if(X?.aborted)throw Error("AbortError");if(g0(q.ruleId,q.line,Y))continue;if(z.has(q.line)&&d8(q.ruleId))continue;Q.push({filePath:q.filePath,line:q.line,column:q.column,ruleId:q.ruleId,message:q.message,severity:q.severity,...q.help&&{help:q.help}})}}catch{}return Q}async function ij($,J,Z){N0("runLintProgrammatic:start",{globs:$,options:J});let X=await h1(J.config);if(Z?.aborted)throw Error("AbortError");let Y=$.length?$:["."],z=u1(Y),Q=J.ext||X.lint.extensions.join(","),G=new Set(Q.split(",").map((b)=>{let P=b.trim();return P.startsWith(".")?P:`.${P}`})),q=y0.TIMEOUT_MS,W=z.some((b)=>{let P=b.replace(/\/?\*\*\/*\*\*$/,""),I=D1(P)?P:R1(C0.cwd(),P),S=C0.cwd();return I!==S&&!I.startsWith(S+oY)})?[...z1]:X.ignores,K=m1(W),H=[];if(z.length===1&&!/[*?[\]{}()!]/.test(z[0]))try{if(m8(z[0]).isFile())H=[D1(z[0])?z[0]:R1(C0.cwd(),z[0])]}catch{}let A=z.length===1&&/\*\*\/*\*$/.test(z[0]);if(!H.length&&A){let b=z[0].replace(/\/?\*\*\/*\*\*$/,""),P=D1(b)?b:R1(C0.cwd(),b);try{let I=[P];while(I.length){if(Z?.aborted)throw Error("AbortError");let S=I.pop(),C=uY(S);for(let N of C){let R=dY(S,N),D=m8(R);if(K(R))continue;if(D.isDirectory())I.push(R);else H.push(R)}}}catch{H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob")}}else if(!H.length)H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob");if(Z?.aborted)throw Error("AbortError");let _=0,w=0,F=0,M=0,T=0,E=[];for(let b of H){if(_++,b.replace(/\\/g,"/").includes("/node_modules/")){F++;continue}if(K(b)){M++;continue}if(!V9(b,G)){T++;continue}E.push(b),w++}N0("filter:programmatic",{total:_,included:w,node_modules:F,ignored:M,wrongExt:T});let j=y0.CONCURRENCY,k=(await rY(E,j,async(b)=>{if(Z?.aborted)throw Error("AbortError");let P=mY(b,"utf8"),I=O1(P),S=L1(P),C=P1(b,P,X,I,S);try{let N=await _9(b,P,X);for(let R of N){if(Z?.aborted)throw Error("AbortError");if(g0(R.ruleId,R.line,I))continue;if(S.has(R.line)&&d8(R.ruleId))continue;C.push({filePath:R.filePath,line:R.line,column:R.column,ruleId:R.ruleId,message:R.message,severity:R.severity,...R.help&&{help:R.help}})}}catch{}{let N=new Set;C=C.filter((R)=>{let D=`${R.line}:${R.column}:${R.ruleId}`;if(N.has(D))return!1;return N.add(D),!0})}if(J.fix){let N=/^\s*debugger\b/,R=P;if(X.rules.noDebugger==="error"||X.rules.noDebugger==="warn"){let f=R.split(/\r?\n/),p=[];for(let d of f){if(N.test(d))continue;p.push(d)}R=p.join(`
215
+ `)}if(R=lY(b,R,X),R!==P){let f=O1(R),p=L1(R);if(C=P1(b,R,X,f,p),!J.dryRun)K9(b,R,"utf8")}}return C})).flat(),L=k.filter((b)=>b.severity==="error").length,h=k.filter((b)=>b.severity==="warning").length;return{errors:L,warnings:h,issues:k}}function dG($){return $.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function oG($){return $.replace(/-([a-z])/g,(J,Z)=>Z.toUpperCase())}function O1($){let J=new Map,Z=new Set,X=new Map,Y=new Map,z=$.split(/\r?\n/),Q=new Set;for(let U=0;U<z.length;U++){let W=z[U].trim(),K=U+1,H=W.match(/^\/\/\s*(?:eslint|pickier)-disable-next-line(?:\s+(\S.*))?$/);if(H){let F=H[1]?.replace(/\s+--\s.*$/,""),M=F?F.split(",").map((T)=>T.trim()).filter(Boolean):["*"];if(M.length>0){let T=K+1,E=J.get(T)||new Set;for(let j of M)E.add(j);J.set(T,E)}continue}let V=W.match(/^\/\*\s*(?:eslint|pickier)-disable(?:\s+([^*]+))?\s*\*\//);if(V){let F=V[1]?.trim().replace(/\s+--\s.*$/,"");if(!F||F==="")X.set(K,new Set(["*"])),Q.add("*");else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=X.get(K)||new Set;for(let E of M)T.add(E),Q.add(E);X.set(K,T)}if(U===0)if(!F||F==="")Z.add("*");else{let M=F.split(",").map((T)=>T.trim()).filter(Boolean);for(let T of M)Z.add(T)}continue}let A=W.match(/^\/\*\s*(?:eslint|pickier)-enable(?:\s+([^*]+))?\s*\*\//);if(A){let F=A[1]?.trim();if(!F||F==="")Y.set(K,new Set(["*"])),Q.clear();else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=Y.get(K)||new Set;for(let E of M)T.add(E),Q.delete(E);Y.set(K,T)}continue}let _=W.match(/^\/\/\s*(?:eslint|pickier)-disable(?:\s+(\S.*))?$/);if(_){let F=_[1]?.trim().replace(/\s+--\s.*$/,"");if(!F||F==="")X.set(K,new Set(["*"])),Q.add("*");else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=X.get(K)||new Set;for(let E of M)T.add(E),Q.add(E);X.set(K,T)}continue}let w=W.match(/^\/\/\s*(?:eslint|pickier)-enable(?:\s+(\S.*))?$/);if(w){let F=w[1]?.trim();if(!F||F==="")Y.set(K,new Set(["*"])),Q.clear();else{let M=F.split(",").map((E)=>E.trim()).filter(Boolean),T=Y.get(K)||new Set;for(let E of M)T.add(E),Q.delete(E);Y.set(K,T)}}}let G=Array.from(X.keys()).sort((U,W)=>U-W),q=Array.from(Y.keys()).sort((U,W)=>U-W);return{nextLine:J,fileLevel:Z,rangeDisable:X,rangeEnable:Y,sortedDisableLines:G,sortedEnableLines:q}}function g0($,J,Z){if(Z instanceof Map){let G=Z.get(J);if(!G||G.size===0)return!1;return d1($,G)}if(Z.fileLevel.size>0){if(d1($,Z.fileLevel))return!0}let X=Z.nextLine.get(J);if(X&&d1($,X))return!0;let Y=!1,z=0,Q=0;while(!0){let G=z<Z.sortedDisableLines.length?Z.sortedDisableLines[z]:Number.POSITIVE_INFINITY,q=Q<Z.sortedEnableLines.length?Z.sortedEnableLines[Q]:Number.POSITIVE_INFINITY,U=Math.min(G,q);if(U>=J)break;if(G===U){let K=Z.rangeDisable.get(G);if(d1($,K))Y=!0;z++;continue}let W=Z.rangeEnable.get(q);if(W.has("*")||d1($,W))Y=!1;Q++}return Y}function d1($,J){if(J.size===0)return!1;if(J.has("*"))return!0;if(J.has($))return!0;let Z=dG($);if(J.has(Z)||J.has(oG($)))return!0;for(let X of J)if(!X.includes("/")){if($.endsWith(`/${X}`))return!0}return!1}function d8($){return $!=="spaced-comment"&&!$.endsWith("/spaced-comment")}function cY($,J){if($.help)return $;let Z=J.includes("/")?J.split("/")[1]:J,X;if(Z.startsWith("no-"))X=`Remove or refactor this ${Z.replace("no-","").replace(/-/g," ")}. Check the rule documentation for more details or disable with: // eslint-disable-next-line ${J}`;else if(Z.startsWith("prefer-"))X=`Consider using ${Z.replace("prefer-","").replace(/-/g," ")} instead. This is a best practice recommendation. Disable with: // eslint-disable-next-line ${J} if needed`;else if(Z.includes("sort")||Z.includes("order"))X=`Reorder these items according to the rule requirements, or use --fix to auto-sort. Disable with: // eslint-disable-next-line ${J}`;else if(Z.includes("indent")||Z.includes("spacing")||Z.includes("newline"))X=`Fix the formatting issue. Run with --fix to automatically format. Disable with: // eslint-disable-next-line ${J}`;else X=`Fix this issue or disable the rule with: // eslint-disable-next-line ${J}. Check the rule documentation for more details`;return{...$,help:X}}async function o1($,J,Z){let X,Y=new Promise((z,Q)=>{X=setTimeout(()=>Q(Error(`Timeout after ${J}ms at ${Z}`)),J)});try{let z=await Promise.race([$,Y]);return clearTimeout(X),z}catch(z){throw e().error(`[pickier:error] ${Z} failed:`,z?.message||z),N0("withTimeout error:",Z,z),z}}async function rY($,J,Z){let X=Array($.length);if($.length===0)return X;let Y=0,z=Math.max(1,Math.min(Math.max(1,J),$.length));async function Q(){while(Y<$.length){let G=Y++;X[G]=await Z($[G],G)}}return await Promise.all(Array.from({length:z},Q)),X}var fY=new WeakMap;function cG($){let J=G9();if($.plugins&&$.plugins.length>0){let Z=new Set(["pickier","style","regexp","ts"]),X=$.plugins.filter((z)=>typeof z!=="string");J=X.some((z)=>Z.has(z.name))?J:[];for(let z of X)J.push(z)}return J}function rG($,J){let Z={...$.pluginRules||{}};if($.rules?.noUnusedCapturingGroup)Z["regexp/no-unused-capturing-group"]=$.rules.noUnusedCapturingGroup;let X={"antfu/curly":"style/curly","antfu/if-newline":"style/if-newline","antfu/no-top-level-await":"ts/no-top-level-await"};for(let[Y,z]of Object.entries(X))if(Z[Y])Z[z]=Z[Y];for(let Y of Object.keys($.pluginRules||{}))if(!Y.includes("/")){for(let z of J)if(z.rules&&Object.prototype.hasOwnProperty.call(z.rules,Y))Z[`${z.name}/${Y}`]=$.pluginRules[Y]}return Z}function o8($){let J=fY.get($);if(J)return J;let Z=cG($),X=rG($,Z),Y=[],z=[],Q=new Set(["no-debugger"]),G=new Set(["no-debugger"]),q=new Set;for(let W of Z)for(let K in W.rules){let H=`${W.name}/${K}`,V=hY(X,H);if(!V.enabled)continue;if(q.has(K))continue;q.add(K);let A=W.rules[K],_={pluginName:W.name,ruleName:K,fullRuleId:H,rule:A,severity:V.severity,options:V.options};if(typeof A?.check==="function")Y.push(_);else if(V.severity==="error")Y.push(_);if(typeof A?.fix==="function")z.push(_),Q.add(H),G.add(K)}let U={checkRules:Y,fixRules:z,fixableRuleIds:Q,fixableBareRuleNames:G};return fY.set($,U),U}function lG($,J){return/\.(?:sh|bash|zsh|ksh|dash)$/.test($)||/^#!\s*(?:\/usr\/bin\/env\s+)?(?:ba|z|k|da)?sh\b/.test(J)}function aG($){return/(?:^|[/\\])(?:bun\.lock|bun\.lockb|package-lock\.json|pnpm-lock\.yaml|yarn\.lock|npm-shrinkwrap\.json)$/.test($)}function A9($,J,Z){switch($.pluginName){case"markdown":return J.endsWith(".md");case"shell":return lG(J,Z);case"publint":return/(?:^|[/\\])package\.json$/.test(J);case"lockfile":return aG(J);case"node":case"ts":case"general":case"quality":case"eslint":case"regexp":case"unused-imports":case"perfectionist":return/\.(?:ts|js|tsx|jsx|mts|mjs|cts|cjs)$/.test(J);default:return!0}}async function _9($,J,Z){let X=[],Y=o8(Z),z={filePath:$,config:Z};for(let Q of Y.checkRules){if(!A9(Q,$,J))continue;let{fullRuleId:G,rule:q,severity:U}=Q;if(!q||typeof q.check!=="function"){if(U==="error")X.push({filePath:$,line:1,column:1,ruleId:`${G}-internal`,message:"Rule missing implementation (check function is undefined)",severity:"error"});continue}try{N0("rule:start",G);let W=y0.RULE_TIMEOUT_MS,K={...z,options:Q.options},H=performance.now(),V=await o1(Promise.resolve().then(()=>q.check(J,K)),W,`rule:${G}`),A=performance.now()-H;if(A>W)X.push({filePath:$,line:1,column:1,ruleId:`${G}-internal`,message:`Rule exceeded timeout budget: ${Math.round(A)}ms > ${W}ms`,severity:"error"});N0("rule:end",G,Array.isArray(V)?V.length:0);for(let _ of V){let w=cY(_,G);if(U)X.push({...w,severity:U});else X.push(w)}}catch(W){X.push({filePath:$,line:1,column:1,ruleId:`${G}-internal`,message:`Rule threw: ${W?.message||W}`,severity:"error"})}}return X}var sG=/\.(?:[cm]?[jt]sx?|vue|svelte|stx)$/i;function nG($,J,Z){if(!sG.test(Z)||!$.includes("`"))return J;let X=$.split(/\r?\n/),Y=J.split(/\r?\n/);if(X.length!==Y.length)return J;let z=e0($),Q=0;for(let G=0;G<Y.length;G++)if(z[G]&&Y[G]!==X[G])Y[G]=X[G],Q++;return Q>0?Y.join(`
216
+ `):J}function lY($,J,Z){let X=o8(Z),Y={filePath:$,config:Z},z=J,Q=!0,G=0;while(Q&&G++<U9){Q=!1;for(let q of X.fixRules){if(!A9(q,$,z))continue;let U={...Y,options:q.options},W=q.rule.fix(z,U),K=q.rule.meta?.editsStringContent?W:nG(z,W,$);if(K!==z)z=K,Q=!0}}return z}function iG($,J){let Z=J.format.indent,X=J.format.indentStyle,Y=$.split(/\r?\n/),z=!1;for(let Q=0;Q<Y.length;Q++){let G=Y[Q],q=0;while(q<G.length&&(G.charCodeAt(q)===32||G.charCodeAt(q)===9))q++;if(q===0)continue;let U=G.slice(0,q);if(!H9(U,Z,X,G))continue;let W;if(X==="tabs"){let K=0,H=0;for(let A=0;A<U.length;A++)if(U.charCodeAt(A)===9)H++;else K++;let V=Math.floor(K/Z);W="\t".repeat(H+V)}else{let K=0;for(let V=0;V<U.length;V++)if(U.charCodeAt(V)===9)K+=Z;else K++;let H=Math.floor(K/Z)*Z;W=" ".repeat(H)}if(W!==U)Y[Q]=W+G.slice(q),z=!0}return z?Y.join(`
217
+ `):$}function gY($){let J="",Z=0;while(Z<$.length){if($[Z]==="/"&&Z>0){let X=$.slice(0,Z).trimEnd();if(/[=([{,:!&|?]$/.test(X)||/;$/.test(X)||X.endsWith("return")){Z++;while(Z<$.length){if($[Z]==="\\"){Z+=2;continue}if($[Z]==="/"){Z++;while(Z<$.length&&/[gimsuvy]/.test($[Z]))Z++;break}Z++}continue}}J+=$[Z],Z++}return J}function tG($,J,Z){if($==="")return!0;if("([{,:;!?&|=<>~^+*%-".includes($))return!0;if(/[A-Za-z_$]/.test($)){let Y=J.slice(0,Z).trimEnd();if(/(?:^|[^A-Za-z0-9_$])(?:return|typeof|instanceof|new|delete|void|in|of|yield|await|throw|case)$/.test(Y))return!0}return!1}function pY($){let J="",Z=0,X=null,Y=!1;while(Z<$.length){let z=$[Z],Q=$[Z+1];if(Y){J+=z,Y=!1,Z++;continue}if(z==="\\"&&X){Y=!0,J+=z,Z++;continue}if(!X){if(z==='"'){X="double",J+=z,Z++;continue}if(z==="'"){X="single",J+=z,Z++;continue}if(z==="`"){X="template",J+=z,Z++;continue}if(z==="/"&&Q==="/")break;if(z==="/"&&Q==="*"){Z+=2;while(Z<$.length){if($[Z]==="*"&&$[Z+1]==="/"){Z+=2;break}Z++}J+=" ";continue}J+=z,Z++}else{if(X==="double"&&z==='"'||X==="single"&&z==="'"||X==="template"&&z==="`")X=null;J+=z,Z++}}return J}function L1($){let J=new Set,Z="code",X=1,Y=!1,z=!1,Q=!1,G=[];for(let q=0;q<$.length;q++){let U=$[q],W=$[q+1],K=q>0?$[q-1]:"";if(U===`
218
218
  `){if(Q&&Z==="block-comment")J.add(X);else if(!Y&&z&&Z!=="block-comment")J.add(X);else if(!Y&&Z==="block-comment")J.add(X);if(X++,Y=!1,z=!1,Q=Z==="block-comment",Z==="line-comment")Z="code";continue}switch(Z){case"code":if(U==="/"&&W==="/")Z="line-comment",z=!0,q++;else if(U==="/"&&W==="*"){let H=!1;if(q>0){let V=q-1;while(V>0&&($[V]===" "||$[V]==="\t"))V--;let A=$[V];if("=([{,;!&|?:~^%+-".includes(A)&&A!==`
219
219
  `)H=!0;else if(/[a-z]/.test(A)){let _=$.slice(Math.max(0,V-6),V+1);if(/\b(?:return|case|typeof|void|in|of|new|throw|delete)$/.test(_))H=!0}}if(H){Y=!0,q++;while(q<$.length){if($[q]==="\\"){q+=2;continue}if($[q]==="/"){q++;break}if($[q]===`
220
220
  `)break;q++}while(q<$.length&&/[gimsuy]/.test($[q]))q++;q--}else z=!0,Z="block-comment",q++}else if(U==="/"&&W!==void 0){let H=!1;if(q>0){let V=q-1;while(V>0&&($[V]===" "||$[V]==="\t"))V--;let A=$[V];if("=([{,;!&|?:~^%+-".includes(A)||A===`
221
221
  `)H=!0;else if(/[a-z]/.test(A)){let _=$.slice(Math.max(0,V-6),V+1);if(/\b(?:return|case|typeof|void|in|of|new|throw|delete)$/.test(_))H=!0}}if(H){Y=!0,q++;while(q<$.length){if($[q]==="\\"){q+=2;continue}if($[q]==="/"){q++;break}if($[q]===`
222
222
  `)break;q++}while(q<$.length&&/[gimsuy]/.test($[q]))q++;q--}else Y=!0}else if(U==="'")Z="string-single",Y=!0;else if(U==='"')Z="string-double",Y=!0;else if(U==="`")Z="string-template",Y=!0;else if(U==="{"){if(G.length)G[G.length-1]++;Y=!0}else if(U==="}"){if(G.length)if(G[G.length-1]===0)G.pop(),Z="string-template";else G[G.length-1]--;Y=!0}else if(!/\s/.test(U))Y=!0;break;case"string-single":if(U==="\\"){q++;break}if(U==="'")Z="code";break;case"string-double":if(U==="\\"){q++;break}if(U==='"')Z="code";break;case"string-template":if(U==="\\"){q++;break}if(U==="$"&&W==="{"){G.push(0),Z="code",q++;break}if(U==="`")Z="code";break;case"line-comment":break;case"block-comment":if(U==="*"&&W==="/")Z="code",q++;break}}if(Q&&Z==="block-comment")J.add(X);else if(!Y&&z&&Z!=="block-comment")J.add(X);else if(!Y&&Z==="block-comment")J.add(X);return J}function P1($,J,Z,X,Y){let z=[],Q=J.split(/\r?\n/),G=Z.format.quotes,q=$.split(".").pop()?.toLowerCase()??"",U=q==="md",W=q==="sh"||q==="bash"||q==="zsh"||q==="ksh"||q==="dash"||/^#!\s*(?:\/usr\/bin\/env\s+)?(?:ba|z|k|da)?sh\b/.test(J),V=(Z.rules?.quotes??Z.pluginRules?.quotes??Z.pluginRules?.["style/quotes"])==="off"||q==="json"||q==="jsonc"||q==="lock"||U||q==="yaml"||q==="yml"||q==="stx"||q==="html"||q==="htm"||q==="vue"||W||$.endsWith("bun.lock"),A=U||q==="yaml"||q==="yml"||q==="json"||q==="jsonc"||W,M=(Z.rules?.indent??Z.pluginRules?.indent??Z.pluginRules?.["style/indent"])!=="off"&&!U&&!(q==="stx"||q==="html"||q==="htm"||q==="vue"),T=!1,E=(I)=>I==="warn"?"warning":I==="error"?"error":void 0,j=E(Z.rules.noDebugger),O=E(Z.rules.noConsole),v=E(Z.rules.noTemplateCurlyInString),k=E(Z.rules.noCondAssign),L=/\bconsole\.log\s*\(/,h=/^\s*debugger\b/,b=new Set;if(q==="md"){let I=!1;for(let S=0;S<Q.length;S++){if(/^(?:`{3,}|~{3,})/.test(Q[S].trim())){I=!I;continue}if(I)b.add(S+1)}}let P=new Set;if(J.includes("`")){let I=!1,S=!1,C=1;for(let N=0;N<J.length;N++){let R=J[N];if(S){if(S=!1,R===`
223
223
  `)C++;continue}if(R==="\\"){S=!0;continue}if(R===`
224
- `){C++;continue}if(R==="`"){I=!I;continue}if(I)P.add(C)}}for(let I=0;I<Q.length;I++){let S=Q[I],C=I+1;if(Y.has(C))continue;if(!V&&!P.has(C)){let D=pY(gY(S)),f=xY(D,G);if(f.length>0&&!T){if(!g0("quotes",C,X))z.push({filePath:$,line:C,column:(f[0]||0)+1,ruleId:"quotes",message:"Inconsistent quote style",severity:"warning",help:`Use ${G} quotes consistently throughout your code. You can change the preferred quote style in your config with format.quotes: '${G==="single"?"double":"single"}'`});T=!0}}let N=0;while(N<S.length&&(S.charCodeAt(N)===32||S.charCodeAt(N)===9))N++;let R=N>0?S.slice(0,N):"";if(M&&R.length>0&&!b.has(C)&&H9(R,Z.format.indent,Z.format.indentStyle,S)){if(!g0("indent",C,X))z.push({filePath:$,line:C,column:1,ruleId:"indent",message:"Incorrect indentation detected",severity:"warning",help:`Use ${Z.format.indentStyle==="spaces"?`${Z.format.indent} spaces`:"tabs"} for indentation. Configure with format.indent and format.indentStyle in your config`})}if(!A&&j&&h.test(S)){if(!g0("no-debugger",C,X))z.push({filePath:$,line:C,column:1,ruleId:"no-debugger",message:"Unexpected debugger statement",severity:j,help:"Remove debugger statements before committing code. Use breakpoints in your IDE instead, or run with --fix to auto-remove"})}if(!A&&O&&!P.has(C)&&L.test(S)){let D=S.indexOf("//"),f=S.indexOf("console.");if(D!==-1&&f>D);else{let p=null;for(let d=0;d<S.length;d++){let u=S[d];if(!p){if(u==='"')p="double";else if(u==="'")p="single";else if(u==="`")p="template";else if(S.slice(d).startsWith("console.")){let x=d+1;if(!g0("no-console",C,X))z.push({filePath:$,line:C,column:x,ruleId:"no-console",message:"Unexpected console call",severity:O,help:"Remove console statements before committing. Use a proper logging library or disable this rule if console output is intentional"});break}}else if(p==="double"&&u==='"'||p==="single"&&u==="'"||p==="template"&&u==="`"){let x=0;for(let y=d-1;y>=0&&S[y]==="\\";y--)x++;if(x%2===0)p=null}}}}if(v&&!P.has(C)){let D=S,f=null,p=!1,d=!1,u="",x="";for(let y=0;y<D.length;y++){let g=D[y];if(p){if(x==="\\"){x=g;continue}if(d){if(g==="]")d=!1}else if(g==="[")d=!0;else if(g==="/"){p=!1;while(y+1<D.length&&/[a-z]/i.test(D[y+1]))y++;u="/"}x=g;continue}if(!f){if(g==='"'){f="double",x=g;continue}if(g==="'"){f="single",x=g;continue}if(g==="`"){f="template",x=g;continue}if(g==="/"&&D[y+1]!=="/"&&D[y+1]!=="*"&&iG(u,D,y)){p=!0,d=!1,x=g;continue}if(g!==" "&&g!=="\t")u=g}else if(f==="double"&&g==='"'||f==="single"&&g==="'"||f==="template"&&g==="`"){if(x!=="\\")f=null}else if(g==="$"&&D[y+1]==="{"&&x!=="\\"&&f!=="template"){if(!g0("no-template-curly-in-string",C,X))z.push({filePath:$,line:C,column:y+1,ruleId:"no-template-curly-in-string",message:"Unexpected template string expression in normal string",severity:v,help:"Change the string quotes from ' or \" to backticks (`) to use template literal interpolation, or escape the $ if you meant to use it literally"});break}x=g}}if(!A&&k&&!P.has(C)){let f=pY(gY(S)).replace(/'[^']*'|"[^"]*"/g,'""'),p=(y)=>/[^=!<>]=(?![=>])/.test(y),d=(y)=>{let g=S.match(y);if(g&&g.index!==void 0)return g.index+g[0].length;return Math.max(1,S.indexOf("(")+1)},u=f.match(/\b(?:if|while)\s*\(([^)]*)\)/);if(u){let y=u[1];if(p(y)){if(!g0("no-cond-assign",C,X))z.push({filePath:$,line:C,column:d(/\b(?:if|while)\s*\(/),ruleId:"no-cond-assign",message:"Unexpected assignment within a conditional expression",severity:k,help:"Use === or == for comparison instead of = (assignment). Wrap intentional assignments in extra parentheses."})}}let x=f.match(/\bfor\s*\(([^)]*)\)/);if(x){let g=x[1].split(";");if(g.length>=2){let m=g[1];if(p(m)){if(!g0("no-cond-assign",C,X))z.push({filePath:$,line:C,column:d(/\bfor\s*\(/),ruleId:"no-cond-assign",message:"Unexpected assignment within a conditional expression",severity:k,help:"Use === or == for comparison instead of = (assignment). Wrap intentional assignments in extra parentheses."})}}}}}return z}function ij($,J,Z){let X=O1(J),Y=L1(J),z=P1($,J,Z,X,Y);try{let Q=o8(Z),G={filePath:$,config:Z};for(let q of Q.checkRules){if(!A9(q,$,J))continue;if(!q.rule||typeof q.rule.check!=="function")continue;let U=q.rule.check(J,{...G,options:q.options});for(let W of U){if(g0(W.ruleId,W.line,X))continue;if(Y.has(W.line)&&d8(W.ruleId))continue;let K=cY(W,q.fullRuleId);z.push(q.severity?{...K,severity:q.severity}:K)}}}catch{}return z}async function tj($,J){N0("runLint:start",{globs:$,options:J});let Z=y0.DIAGNOSTICS;if(Z)e().info("[pickier:diagnostics] Starting lint process...");try{if(Z)e().info("[pickier:diagnostics] Loading config...");let X=await h1(J.config);N0("config:loaded",{reporter:X.lint.reporter,ext:X.lint.extensions.join(",")});let Y=$.length?$:["."],z=u1(Y);if(N0("patterns",z),Z)e().info(`[pickier:diagnostics] Patterns to search: ${z.join(", ")}`);let Q=J.ext||X.lint.extensions.join(","),G=new Set(Q.split(",").map((R)=>{let D=R.trim();return D.startsWith(".")?D:`.${D}`}));if(Z)e().info(`[pickier:diagnostics] File extensions: ${Array.from(G).join(", ")}`);let q=y0.TIMEOUT_MS;if(Z)e().info(`[pickier:diagnostics] Glob timeout: ${q}ms`);let U=z.some((R)=>{let D=R.replace(/\/?\*\*\/*\*\*$/,""),f=D1(D)?D:R1(C0.cwd(),D),p=C0.cwd();return f!==p&&!f.startsWith(p+oY)}),W=U?[...z1]:X.ignores,K=m1(W);if(Z){if(e().info(`[pickier:diagnostics] Globbing outside project: ${U}, ignore patterns: ${W.length}`),U)e().info(`[pickier:diagnostics] Using universal ignores: ${z1.slice(0,5).join(", ")}... (${z1.length} total)`)}let H=[],V=z.length===1&&!/[*?[\]{}()!]/.test(z[0]);if(Z)e().info(`[pickier:diagnostics] Starting file discovery... (nonGlobSingle: ${V})`);if(V)try{if(m8(z[0]).isFile())H=[D1(z[0])?z[0]:R1(C0.cwd(),z[0])]}catch{}let A=z.length===1&&/\*\*\/*\*$/.test(z[0]);if(!H.length&&A){let R=z[0].replace(/\/?\*\*\/*\*\*$/,"");if(Z)e().info(`[pickier:diagnostics] Using fast directory scan for: ${R}`);try{let f=[D1(R)?R:R1(C0.cwd(),R)],p=0;while(f.length){let d=f.pop();if(p++,Z&&p%100===0)e().info(`[pickier:diagnostics] Scanned ${p} directories, ${H.length} files found so far...`);let u=uY(d);for(let x of u){let y=dY(d,x),g=m8(y);if(K(y))continue;if(g.isDirectory())f.push(y);else H.push(y)}}if(Z)e().info(`[pickier:diagnostics] Fast scan complete: ${p} directories, ${H.length} total files`)}catch(D){if(Z)e().info(`[pickier:diagnostics] Fast scan failed: ${D?.message}, falling back to glob`);H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob")}}else if(!H.length){if(Z)e().info(`[pickier:diagnostics] Using glob with timeout ${q}ms...`);if(H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob"),Z)e().info(`[pickier:diagnostics] glob found ${H.length} files`)}if(N0("globbed entries",H.length),Z)e().info(`[pickier:diagnostics] File discovery complete: ${H.length} files found`);if(H.length>1e4){if(e().warn(`[pickier:warn] Found ${H.length} files. This seems unusually high and may cause memory issues.`),e().warn("[pickier:warn] Consider checking your ignore patterns or being more specific with your glob pattern."),e().warn("[pickier:warn] Common culprits: node_modules, build directories, cache folders, or vendor dependencies."),H.length>1e5)return e().error(`[pickier:error] File count exceeds 100,000 (${H.length}). This will likely cause out-of-memory errors.`),e().error("[pickier:error] Aborting to prevent crash. Please refine your glob pattern or ignore patterns."),1}if(Z)e().info(`[pickier:diagnostics] Filtering ${H.length} files by extension and ignore patterns...`);let _=0,w=0,F=0,M=0,T=0,E=[];for(let R of H){if(_++,Z&&_%1000===0)e().info(`[pickier:diagnostics] Filtering progress: ${_}/${H.length} files checked, ${w} included...`);if(R.replace(/\\/g,"/").includes("/node_modules/")){F++;continue}if(K(R)){M++;continue}if(!V9(R,G)){T++;continue}E.push(R),w++}if(N0("filter:cli",{total:_,included:w,node_modules:F,ignored:M,wrongExt:T}),N0("filtered files",E.length),Z)e().info("[pickier:diagnostics] Filtering complete:"),e().info(`[pickier:diagnostics] Total files found: ${_}`),e().info(`[pickier:diagnostics] Files to lint: ${w}`),e().info(`[pickier:diagnostics] Excluded (node_modules): ${F}`),e().info(`[pickier:diagnostics] Excluded (ignored): ${M}`),e().info(`[pickier:diagnostics] Excluded (wrong extension): ${T}`);if(E.length>5000){if(e().warn(`[pickier:warn] After filtering, ${E.length} files will be linted. This may take a while and use significant memory.`),E.length>50000)return e().error(`[pickier:error] ${E.length} files to lint exceeds safe limit (50,000). This will likely cause out-of-memory errors.`),e().error("[pickier:error] Aborting to prevent crash. Please be more specific with your glob pattern."),e().error("[pickier:error] Example: Instead of '../stx', try '../stx/src' or '../stx/packages/core'"),1}let j=y0.CONCURRENCY;if(Z)e().info(`[pickier:diagnostics] Starting to process ${E.length} files with concurrency ${j}...`);let O=0,v=!!J._formatOnly,h=(await rY(E,j,async(R)=>{if(Z){if(O++,O===1||O%10===0||O===E.length)e().info(`[pickier:diagnostics] Processing file ${O}/${E.length}: ${u8(C0.cwd(),R)}`)}let D=mY(R,"utf8");if(v){let x=h8(D,X,R);if(x!==D)if(!J.dryRun)K9(R,x,"utf8");else return[{filePath:R,line:1,column:1,ruleId:"format",message:"File is not formatted",severity:"error",help:"Run pickier format with --write to apply formatting."}];return[]}let f=O1(D),d=/\.(?:ts|js|tsx|jsx|mts|mjs|cts|cjs)$/.test(R)?L1(D):new Set,u=P1(R,D,X,f,d);try{let x=await _9(R,D,X);for(let y of x){if(g0(y.ruleId,y.line,f))continue;if(d.has(y.line)&&d8(y.ruleId))continue;u.push({filePath:y.filePath,line:y.line,column:y.column,ruleId:y.ruleId,message:y.message,severity:y.severity,...y.help&&{help:y.help}})}}catch{}{let x=new Set;u=u.filter((y)=>{let g=`${y.line}:${y.column}:${y.ruleId}`;if(x.has(g))return!1;return x.add(g),!0})}if(J.fix){let x=/^\s*debugger\b/,y=D;if(X.rules.noDebugger==="error"||X.rules.noDebugger==="warn"){let c=y.split(/\r?\n/),s=[];for(let l of c){if(x.test(l))continue;s.push(l)}y=s.join(`
225
- `)}y=lY(R,y,X);let m=R.split(".").pop()?.toLowerCase()??"";if(m!=="md"&&!(m==="sh"||m==="bash"||m==="zsh"||m==="ksh"||m==="dash")&&m!=="yaml"&&m!=="yml")y=nG(y,X);if(y!==D){let c=O1(y),s=L1(y);if(u=P1(R,y,X,c,s),!J.dryRun)K9(R,y,"utf8");if(J.dryRun&&(J.verbose!==void 0?J.verbose:X.verbose))e().debug(J0.gray(`dry-run: would apply fixes in ${u8(C0.cwd(),R)}`))}}return N0("scan done",u8(C0.cwd(),R),u.length),u})).flat();if(Z)e().info(`[pickier:diagnostics] Processing complete! Found ${h.length} issues total`);let b=h.filter((R)=>R.severity==="error").length,P=h.filter((R)=>R.severity==="warning").length;if(N0("issues:summary",{errors:b,warnings:P}),Z)e().info(`[pickier:diagnostics] Errors: ${b}, Warnings: ${P}`);let I=J.reporter||X.lint.reporter,S=J.verbose!==void 0?J.verbose:X.verbose;if(I==="json")console.log(JSON.stringify({errors:b,warnings:P,issues:h},null,2));else if(I==="compact")for(let R of h)console.log(`${u8(C0.cwd(),R.filePath)}:${R.line}:${R.column} ${R.severity} ${R.ruleId} ${R.message}`);else if(h.length>0)console.log(S?bY(h):kY(h));if(h.length>0&&I!=="json"){let R=b+P,D=R===1?"problem":"problems",f=b===1?"error":"errors",p=P===1?"warning":"warnings",d=o8(X),u=0,x=0;for(let y of h){let g=y.ruleId;if(d.fixableRuleIds.has(g)||d.fixableBareRuleNames.has(g)){if(y.severity==="error")u++;else if(y.severity==="warning")x++}}if(console.log(),console.log(J0.red(`\u2716 ${R} ${D} (${b} ${f}, ${P} ${p})`)),u>0||x>0){let y=u===1?"error":"errors",g=x===1?"warning":"warnings";console.log(J0.gray(` ${u} ${y} and ${x} ${g} potentially fixable with the \`--fix\` option.`))}}if(S&&I!=="json")console.log(J0.gray(`Scanned ${E.length} files, found ${b} errors and ${P} warnings.`));let C=J.maxWarnings??X.lint.maxWarnings,N=y0.FAIL_ON_WARNINGS;if(b>0)return N0("runLint:end",1),1;if(N&&P>0)return N0("runLint:end",1),1;if(C>=0&&P>C)return N0("runLint:end",1),1;return N0("runLint:end",0),0}catch(X){return e().error("[pickier:error] runLint failed:",X?.message||X),N0("runLint:exception",X),1}}
226
- export{pj as a,sj as b,nj as c,_9 as d,P1 as e,ij as f,tj as g};
224
+ `){C++;continue}if(R==="`"){I=!I;continue}if(I)P.add(C)}}for(let I=0;I<Q.length;I++){let S=Q[I],C=I+1;if(Y.has(C))continue;if(!V&&!P.has(C)){let D=pY(gY(S)),f=xY(D,G);if(f.length>0&&!T){if(!g0("quotes",C,X))z.push({filePath:$,line:C,column:(f[0]||0)+1,ruleId:"quotes",message:"Inconsistent quote style",severity:"warning",help:`Use ${G} quotes consistently throughout your code. You can change the preferred quote style in your config with format.quotes: '${G==="single"?"double":"single"}'`});T=!0}}let N=0;while(N<S.length&&(S.charCodeAt(N)===32||S.charCodeAt(N)===9))N++;let R=N>0?S.slice(0,N):"";if(M&&R.length>0&&!b.has(C)&&H9(R,Z.format.indent,Z.format.indentStyle,S)){if(!g0("indent",C,X))z.push({filePath:$,line:C,column:1,ruleId:"indent",message:"Incorrect indentation detected",severity:"warning",help:`Use ${Z.format.indentStyle==="spaces"?`${Z.format.indent} spaces`:"tabs"} for indentation. Configure with format.indent and format.indentStyle in your config`})}if(!A&&j&&h.test(S)){if(!g0("no-debugger",C,X))z.push({filePath:$,line:C,column:1,ruleId:"no-debugger",message:"Unexpected debugger statement",severity:j,help:"Remove debugger statements before committing code. Use breakpoints in your IDE instead, or run with --fix to auto-remove"})}if(!A&&O&&!P.has(C)&&L.test(S)){let D=S.indexOf("//"),f=S.indexOf("console.");if(D!==-1&&f>D);else{let p=null;for(let d=0;d<S.length;d++){let u=S[d];if(!p){if(u==='"')p="double";else if(u==="'")p="single";else if(u==="`")p="template";else if(S.slice(d).startsWith("console.")){let x=d+1;if(!g0("no-console",C,X))z.push({filePath:$,line:C,column:x,ruleId:"no-console",message:"Unexpected console call",severity:O,help:"Remove console statements before committing. Use a proper logging library or disable this rule if console output is intentional"});break}}else if(p==="double"&&u==='"'||p==="single"&&u==="'"||p==="template"&&u==="`"){let x=0;for(let y=d-1;y>=0&&S[y]==="\\";y--)x++;if(x%2===0)p=null}}}}if(v&&!P.has(C)){let D=S,f=null,p=!1,d=!1,u="",x="";for(let y=0;y<D.length;y++){let g=D[y];if(p){if(x==="\\"){x=g;continue}if(d){if(g==="]")d=!1}else if(g==="[")d=!0;else if(g==="/"){p=!1;while(y+1<D.length&&/[a-z]/i.test(D[y+1]))y++;u="/"}x=g;continue}if(!f){if(g==='"'){f="double",x=g;continue}if(g==="'"){f="single",x=g;continue}if(g==="`"){f="template",x=g;continue}if(g==="/"&&D[y+1]!=="/"&&D[y+1]!=="*"&&tG(u,D,y)){p=!0,d=!1,x=g;continue}if(g!==" "&&g!=="\t")u=g}else if(f==="double"&&g==='"'||f==="single"&&g==="'"||f==="template"&&g==="`"){if(x!=="\\")f=null}else if(g==="$"&&D[y+1]==="{"&&x!=="\\"&&f!=="template"){if(!g0("no-template-curly-in-string",C,X))z.push({filePath:$,line:C,column:y+1,ruleId:"no-template-curly-in-string",message:"Unexpected template string expression in normal string",severity:v,help:"Change the string quotes from ' or \" to backticks (`) to use template literal interpolation, or escape the $ if you meant to use it literally"});break}x=g}}if(!A&&k&&!P.has(C)){let f=pY(gY(S)).replace(/'[^']*'|"[^"]*"/g,'""'),p=(y)=>/[^=!<>]=(?![=>])/.test(y),d=(y)=>{let g=S.match(y);if(g&&g.index!==void 0)return g.index+g[0].length;return Math.max(1,S.indexOf("(")+1)},u=f.match(/\b(?:if|while)\s*\(([^)]*)\)/);if(u){let y=u[1];if(p(y)){if(!g0("no-cond-assign",C,X))z.push({filePath:$,line:C,column:d(/\b(?:if|while)\s*\(/),ruleId:"no-cond-assign",message:"Unexpected assignment within a conditional expression",severity:k,help:"Use === or == for comparison instead of = (assignment). Wrap intentional assignments in extra parentheses."})}}let x=f.match(/\bfor\s*\(([^)]*)\)/);if(x){let g=x[1].split(";");if(g.length>=2){let m=g[1];if(p(m)){if(!g0("no-cond-assign",C,X))z.push({filePath:$,line:C,column:d(/\bfor\s*\(/),ruleId:"no-cond-assign",message:"Unexpected assignment within a conditional expression",severity:k,help:"Use === or == for comparison instead of = (assignment). Wrap intentional assignments in extra parentheses."})}}}}}return z}function tj($,J,Z){let X=O1(J),Y=L1(J),z=P1($,J,Z,X,Y);try{let Q=o8(Z),G={filePath:$,config:Z};for(let q of Q.checkRules){if(!A9(q,$,J))continue;if(!q.rule||typeof q.rule.check!=="function")continue;let U=q.rule.check(J,{...G,options:q.options});for(let W of U){if(g0(W.ruleId,W.line,X))continue;if(Y.has(W.line)&&d8(W.ruleId))continue;let K=cY(W,q.fullRuleId);z.push(q.severity?{...K,severity:q.severity}:K)}}}catch{}return z}async function ej($,J){N0("runLint:start",{globs:$,options:J});let Z=y0.DIAGNOSTICS;if(Z)e().info("[pickier:diagnostics] Starting lint process...");try{if(Z)e().info("[pickier:diagnostics] Loading config...");let X=await h1(J.config);N0("config:loaded",{reporter:X.lint.reporter,ext:X.lint.extensions.join(",")});let Y=$.length?$:["."],z=u1(Y);if(N0("patterns",z),Z)e().info(`[pickier:diagnostics] Patterns to search: ${z.join(", ")}`);let Q=J.ext||X.lint.extensions.join(","),G=new Set(Q.split(",").map((R)=>{let D=R.trim();return D.startsWith(".")?D:`.${D}`}));if(Z)e().info(`[pickier:diagnostics] File extensions: ${Array.from(G).join(", ")}`);let q=y0.TIMEOUT_MS;if(Z)e().info(`[pickier:diagnostics] Glob timeout: ${q}ms`);let U=z.some((R)=>{let D=R.replace(/\/?\*\*\/*\*\*$/,""),f=D1(D)?D:R1(C0.cwd(),D),p=C0.cwd();return f!==p&&!f.startsWith(p+oY)}),W=U?[...z1]:X.ignores,K=m1(W);if(Z){if(e().info(`[pickier:diagnostics] Globbing outside project: ${U}, ignore patterns: ${W.length}`),U)e().info(`[pickier:diagnostics] Using universal ignores: ${z1.slice(0,5).join(", ")}... (${z1.length} total)`)}let H=[],V=z.length===1&&!/[*?[\]{}()!]/.test(z[0]);if(Z)e().info(`[pickier:diagnostics] Starting file discovery... (nonGlobSingle: ${V})`);if(V)try{if(m8(z[0]).isFile())H=[D1(z[0])?z[0]:R1(C0.cwd(),z[0])]}catch{}let A=z.length===1&&/\*\*\/*\*$/.test(z[0]);if(!H.length&&A){let R=z[0].replace(/\/?\*\*\/*\*\*$/,"");if(Z)e().info(`[pickier:diagnostics] Using fast directory scan for: ${R}`);try{let f=[D1(R)?R:R1(C0.cwd(),R)],p=0;while(f.length){let d=f.pop();if(p++,Z&&p%100===0)e().info(`[pickier:diagnostics] Scanned ${p} directories, ${H.length} files found so far...`);let u=uY(d);for(let x of u){let y=dY(d,x),g=m8(y);if(K(y))continue;if(g.isDirectory())f.push(y);else H.push(y)}}if(Z)e().info(`[pickier:diagnostics] Fast scan complete: ${p} directories, ${H.length} total files`)}catch(D){if(Z)e().info(`[pickier:diagnostics] Fast scan failed: ${D?.message}, falling back to glob`);H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob")}}else if(!H.length){if(Z)e().info(`[pickier:diagnostics] Using glob with timeout ${q}ms...`);if(H=await o1($1(z,{dot:!1,ignore:W,onlyFiles:!0,absolute:!0}),q,"glob"),Z)e().info(`[pickier:diagnostics] glob found ${H.length} files`)}if(N0("globbed entries",H.length),Z)e().info(`[pickier:diagnostics] File discovery complete: ${H.length} files found`);if(H.length>1e4){if(e().warn(`[pickier:warn] Found ${H.length} files. This seems unusually high and may cause memory issues.`),e().warn("[pickier:warn] Consider checking your ignore patterns or being more specific with your glob pattern."),e().warn("[pickier:warn] Common culprits: node_modules, build directories, cache folders, or vendor dependencies."),H.length>1e5)return e().error(`[pickier:error] File count exceeds 100,000 (${H.length}). This will likely cause out-of-memory errors.`),e().error("[pickier:error] Aborting to prevent crash. Please refine your glob pattern or ignore patterns."),1}if(Z)e().info(`[pickier:diagnostics] Filtering ${H.length} files by extension and ignore patterns...`);let _=0,w=0,F=0,M=0,T=0,E=[];for(let R of H){if(_++,Z&&_%1000===0)e().info(`[pickier:diagnostics] Filtering progress: ${_}/${H.length} files checked, ${w} included...`);if(R.replace(/\\/g,"/").includes("/node_modules/")){F++;continue}if(K(R)){M++;continue}if(!V9(R,G)){T++;continue}E.push(R),w++}if(N0("filter:cli",{total:_,included:w,node_modules:F,ignored:M,wrongExt:T}),N0("filtered files",E.length),Z)e().info("[pickier:diagnostics] Filtering complete:"),e().info(`[pickier:diagnostics] Total files found: ${_}`),e().info(`[pickier:diagnostics] Files to lint: ${w}`),e().info(`[pickier:diagnostics] Excluded (node_modules): ${F}`),e().info(`[pickier:diagnostics] Excluded (ignored): ${M}`),e().info(`[pickier:diagnostics] Excluded (wrong extension): ${T}`);if(E.length>5000){if(e().warn(`[pickier:warn] After filtering, ${E.length} files will be linted. This may take a while and use significant memory.`),E.length>50000)return e().error(`[pickier:error] ${E.length} files to lint exceeds safe limit (50,000). This will likely cause out-of-memory errors.`),e().error("[pickier:error] Aborting to prevent crash. Please be more specific with your glob pattern."),e().error("[pickier:error] Example: Instead of '../stx', try '../stx/src' or '../stx/packages/core'"),1}let j=y0.CONCURRENCY;if(Z)e().info(`[pickier:diagnostics] Starting to process ${E.length} files with concurrency ${j}...`);let O=0,v=!!J._formatOnly,h=(await rY(E,j,async(R)=>{if(Z){if(O++,O===1||O%10===0||O===E.length)e().info(`[pickier:diagnostics] Processing file ${O}/${E.length}: ${u8(C0.cwd(),R)}`)}let D=mY(R,"utf8");if(v){let x=h8(D,X,R);if(x!==D)if(!J.dryRun)K9(R,x,"utf8");else return[{filePath:R,line:1,column:1,ruleId:"format",message:"File is not formatted",severity:"error",help:"Run pickier format with --write to apply formatting."}];return[]}let f=O1(D),d=/\.(?:ts|js|tsx|jsx|mts|mjs|cts|cjs)$/.test(R)?L1(D):new Set,u=P1(R,D,X,f,d);try{let x=await _9(R,D,X);for(let y of x){if(g0(y.ruleId,y.line,f))continue;if(d.has(y.line)&&d8(y.ruleId))continue;u.push({filePath:y.filePath,line:y.line,column:y.column,ruleId:y.ruleId,message:y.message,severity:y.severity,...y.help&&{help:y.help}})}}catch{}{let x=new Set;u=u.filter((y)=>{let g=`${y.line}:${y.column}:${y.ruleId}`;if(x.has(g))return!1;return x.add(g),!0})}if(J.fix){let x=/^\s*debugger\b/,y=D;if(X.rules.noDebugger==="error"||X.rules.noDebugger==="warn"){let c=y.split(/\r?\n/),s=[];for(let l of c){if(x.test(l))continue;s.push(l)}y=s.join(`
225
+ `)}y=lY(R,y,X);let m=R.split(".").pop()?.toLowerCase()??"";if(m!=="md"&&!(m==="sh"||m==="bash"||m==="zsh"||m==="ksh"||m==="dash")&&m!=="yaml"&&m!=="yml")y=iG(y,X);if(y!==D){let c=O1(y),s=L1(y);if(u=P1(R,y,X,c,s),!J.dryRun)K9(R,y,"utf8");if(J.dryRun&&(J.verbose!==void 0?J.verbose:X.verbose))e().debug(J0.gray(`dry-run: would apply fixes in ${u8(C0.cwd(),R)}`))}}return N0("scan done",u8(C0.cwd(),R),u.length),u})).flat();if(Z)e().info(`[pickier:diagnostics] Processing complete! Found ${h.length} issues total`);let b=h.filter((R)=>R.severity==="error").length,P=h.filter((R)=>R.severity==="warning").length;if(N0("issues:summary",{errors:b,warnings:P}),Z)e().info(`[pickier:diagnostics] Errors: ${b}, Warnings: ${P}`);let I=J.reporter||X.lint.reporter,S=J.verbose!==void 0?J.verbose:X.verbose;if(I==="json")console.log(JSON.stringify({errors:b,warnings:P,issues:h},null,2));else if(I==="compact")for(let R of h)console.log(`${u8(C0.cwd(),R.filePath)}:${R.line}:${R.column} ${R.severity} ${R.ruleId} ${R.message}`);else if(h.length>0)console.log(S?bY(h):kY(h));if(h.length>0&&I!=="json"){let R=b+P,D=R===1?"problem":"problems",f=b===1?"error":"errors",p=P===1?"warning":"warnings",d=o8(X),u=0,x=0;for(let y of h){let g=y.ruleId;if(d.fixableRuleIds.has(g)||d.fixableBareRuleNames.has(g)){if(y.severity==="error")u++;else if(y.severity==="warning")x++}}if(console.log(),console.log(J0.red(`\u2716 ${R} ${D} (${b} ${f}, ${P} ${p})`)),u>0||x>0){let y=u===1?"error":"errors",g=x===1?"warning":"warnings";console.log(J0.gray(` ${u} ${y} and ${x} ${g} potentially fixable with the \`--fix\` option.`))}}if(S&&I!=="json")console.log(J0.gray(`Scanned ${E.length} files, found ${b} errors and ${P} warnings.`));let C=J.maxWarnings??X.lint.maxWarnings,N=y0.FAIL_ON_WARNINGS;if(b>0)return N0("runLint:end",1),1;if(N&&P>0)return N0("runLint:end",1),1;if(C>=0&&P>C)return N0("runLint:end",1),1;return N0("runLint:end",0),0}catch(X){return e().error("[pickier:error] runLint failed:",X?.message||X),N0("runLint:exception",X),1}}
226
+ export{xj as a,nj as b,ij as c,_9 as d,P1 as e,tj as f,ej as g};