pickety 0.2.2 → 0.3.0

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.
package/out/extension.js CHANGED
@@ -1,8 +1,8 @@
1
- "use strict";var In=Object.create;var $e=Object.defineProperty;var Ln=Object.getOwnPropertyDescriptor;var Pn=Object.getOwnPropertyNames;var Nn=Object.getPrototypeOf,Dn=Object.prototype.hasOwnProperty;var Cn=(e,t)=>{for(var s in t)$e(e,s,{get:t[s],enumerable:!0})},St=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pn(t))!Dn.call(e,i)&&i!==s&&$e(e,i,{get:()=>t[i],enumerable:!(n=Ln(t,i))||n.enumerable});return e};var S=(e,t,s)=>(s=e!=null?In(Nn(e)):{},St(t||!e||!e.__esModule?$e(s,"default",{value:e,enumerable:!0}):s,e)),jn=e=>St($e({},"__esModule",{value:!0}),e);var si={};Cn(si,{activate:()=>ti,deactivate:()=>ni});module.exports=jn(si);var V=S(require("vscode"));var F=S(require("vscode"));var oe=S(require("vscode")),Le=S(require("fs"));var Oe=S(require("path"));var tt=(e,t,s)=>{let n=e instanceof RegExp?Tt(e,s):e,i=t instanceof RegExp?Tt(t,s):t,o=n!==null&&i!=null&&Fn(n,i,s);return o&&{start:o[0],end:o[1],pre:s.slice(0,o[0]),body:s.slice(o[0]+n.length,o[1]),post:s.slice(o[1]+i.length)}},Tt=(e,t)=>{let s=t.match(e);return s?s[0]:null},Fn=(e,t,s)=>{let n,i,o,r,c,a=s.indexOf(e),l=s.indexOf(t,a+1),p=a;if(a>=0&&l>0){if(e===t)return[a,l];for(n=[],o=s.length;p>=0&&!c;){if(p===a)n.push(p),a=s.indexOf(e,p+1);else if(n.length===1){let f=n.pop();f!==void 0&&(c=[f,l])}else i=n.pop(),i!==void 0&&i<o&&(o=i,r=l),l=s.indexOf(t,p+1);p=a<l&&a>=0?a:l}n.length&&r!==void 0&&(c=[o,r])}return c};var Et="\0SLASH"+Math.random()+"\0",At="\0OPEN"+Math.random()+"\0",st="\0CLOSE"+Math.random()+"\0",$t="\0COMMA"+Math.random()+"\0",Rt="\0PERIOD"+Math.random()+"\0",_n=new RegExp(Et,"g"),Vn=new RegExp(At,"g"),Wn=new RegExp(st,"g"),Bn=new RegExp($t,"g"),Hn=new RegExp(Rt,"g"),Gn=/\\\\/g,zn=/\\{/g,Un=/\\}/g,qn=/\\,/g,Jn=/\\./g,Xn=1e5;function nt(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function Qn(e){return e.replace(Gn,Et).replace(zn,At).replace(Un,st).replace(qn,$t).replace(Jn,Rt)}function Zn(e){return e.replace(_n,"\\").replace(Vn,"{").replace(Wn,"}").replace(Bn,",").replace(Hn,".")}function Ot(e){if(!e)return[""];let t=[],s=tt("{","}",e);if(!s)return e.split(",");let{pre:n,body:i,post:o}=s,r=n.split(",");r[r.length-1]+="{"+i+"}";let c=Ot(o);return o.length&&(r[r.length-1]+=c.shift(),r.push.apply(r,c)),t.push.apply(t,r),t}function Mt(e,t={}){if(!e)return[];let{max:s=Xn}=t;return e.slice(0,2)==="{}"&&(e="\\{\\}"+e.slice(2)),me(Qn(e),s,!0).map(Zn)}function Yn(e){return"{"+e+"}"}function Kn(e){return/^-?0\d/.test(e)}function es(e,t){return e<=t}function ts(e,t){return e>=t}function me(e,t,s){let n=[],i=tt("{","}",e);if(!i)return[e];let o=i.pre,r=i.post.length?me(i.post,t,!1):[""];if(/\$$/.test(i.pre))for(let c=0;c<r.length&&c<t;c++){let a=o+"{"+i.body+"}"+r[c];n.push(a)}else{let c=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),a=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),l=c||a,p=i.body.indexOf(",")>=0;if(!l&&!p)return i.post.match(/,(?!,).*\}/)?(e=i.pre+"{"+i.body+st+i.post,me(e,t,!0)):[e];let f;if(l)f=i.body.split(/\.\./);else if(f=Ot(i.body),f.length===1&&f[0]!==void 0&&(f=me(f[0],t,!1).map(Yn),f.length===1))return r.map(d=>i.pre+f[0]+d);let u;if(l&&f[0]!==void 0&&f[1]!==void 0){let d=nt(f[0]),h=nt(f[1]),g=Math.max(f[0].length,f[1].length),b=f.length===3&&f[2]!==void 0?Math.abs(nt(f[2])):1,x=es;h<d&&(b*=-1,x=ts);let y=f.some(Kn);u=[];for(let w=d;x(w,h);w+=b){let v;if(a)v=String.fromCharCode(w),v==="\\"&&(v="");else if(v=String(w),y){let k=g-v.length;if(k>0){let m=new Array(k+1).join("0");w<0?v="-"+m+v.slice(1):v=m+v}}u.push(v)}}else{u=[];for(let d=0;d<f.length;d++)u.push.apply(u,me(f[d],t,!1))}for(let d=0;d<u.length;d++)for(let h=0;h<r.length&&n.length<t;h++){let g=o+u[d]+r[h];(!s||l||g)&&n.push(g)}}return n}var ye=e=>{if(typeof e!="string")throw new TypeError("invalid pattern");if(e.length>65536)throw new TypeError("pattern is too long")};var ns={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},be=e=>e.replace(/[[\]\\-]/g,"\\$&"),ss=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),It=e=>e.join(""),Lt=(e,t)=>{let s=t;if(e.charAt(s)!=="[")throw new Error("not in a brace expression");let n=[],i=[],o=s+1,r=!1,c=!1,a=!1,l=!1,p=s,f="";e:for(;o<e.length;){let g=e.charAt(o);if((g==="!"||g==="^")&&o===s+1){l=!0,o++;continue}if(g==="]"&&r&&!a){p=o+1;break}if(r=!0,g==="\\"&&!a){a=!0,o++;continue}if(g==="["&&!a){for(let[b,[x,$,y]]of Object.entries(ns))if(e.startsWith(b,o)){if(f)return["$.",!1,e.length-s,!0];o+=b.length,y?i.push(x):n.push(x),c=c||$;continue e}}if(a=!1,f){g>f?n.push(be(f)+"-"+be(g)):g===f&&n.push(be(g)),f="",o++;continue}if(e.startsWith("-]",o+1)){n.push(be(g+"-")),o+=2;continue}if(e.startsWith("-",o+1)){f=g,o+=2;continue}n.push(be(g)),o++}if(p<o)return["",!1,0,!1];if(!n.length&&!i.length)return["$.",!1,e.length-s,!0];if(i.length===0&&n.length===1&&/^\\?.$/.test(n[0])&&!l){let g=n[0].length===2?n[0].slice(-1):n[0];return[ss(g),!1,p-s,!1]}let u="["+(l?"^":"")+It(n)+"]",d="["+(l?"":"^")+It(i)+"]";return[n.length&&i.length?"("+u+"|"+d+")":n.length?u:d,c,p-s,!0]};var z=(e,{windowsPathsNoEscape:t=!1,magicalBraces:s=!0}={})=>s?t?e.replace(/\[([^\/\\])\]/g,"$1"):e.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1"):t?e.replace(/\[([^\/\\{}])\]/g,"$1"):e.replace(/((?!\\).|^)\[([^\/\\{}])\]/g,"$1$2").replace(/\\([^\/{}])/g,"$1");var is=new Set(["!","?","+","*","@"]),Pt=e=>is.has(e),os="(?!(?:^|/)\\.\\.?(?:$|/))",Re="(?!\\.)",rs=new Set(["[","."]),as=new Set(["..","."]),cs=new Set("().*{}+?[]^$\\!"),ls=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),it="[^/]",Nt=it+"*?",Dt=it+"+?",te=class e{type;#n;#s;#o=!1;#e=[];#t;#r;#c;#a=!1;#i;#l;#f=!1;constructor(t,s,n={}){this.type=t,t&&(this.#s=!0),this.#t=s,this.#n=this.#t?this.#t.#n:this,this.#i=this.#n===this?n:this.#n.#i,this.#c=this.#n===this?[]:this.#n.#c,t==="!"&&!this.#n.#a&&this.#c.push(this),this.#r=this.#t?this.#t.#e.length:0}get hasMagic(){if(this.#s!==void 0)return this.#s;for(let t of this.#e)if(typeof t!="string"&&(t.type||t.hasMagic))return this.#s=!0;return this.#s}toString(){return this.#l!==void 0?this.#l:this.type?this.#l=this.type+"("+this.#e.map(t=>String(t)).join("|")+")":this.#l=this.#e.map(t=>String(t)).join("")}#d(){if(this!==this.#n)throw new Error("should only call on root");if(this.#a)return this;this.toString(),this.#a=!0;let t;for(;t=this.#c.pop();){if(t.type!=="!")continue;let s=t,n=s.#t;for(;n;){for(let i=s.#r+1;!n.type&&i<n.#e.length;i++)for(let o of t.#e){if(typeof o=="string")throw new Error("string part in extglob AST??");o.copyIn(n.#e[i])}s=n,n=s.#t}}return this}push(...t){for(let s of t)if(s!==""){if(typeof s!="string"&&!(s instanceof e&&s.#t===this))throw new Error("invalid part: "+s);this.#e.push(s)}}toJSON(){let t=this.type===null?this.#e.slice().map(s=>typeof s=="string"?s:s.toJSON()):[this.type,...this.#e.map(s=>s.toJSON())];return this.isStart()&&!this.type&&t.unshift([]),this.isEnd()&&(this===this.#n||this.#n.#a&&this.#t?.type==="!")&&t.push({}),t}isStart(){if(this.#n===this)return!0;if(!this.#t?.isStart())return!1;if(this.#r===0)return!0;let t=this.#t;for(let s=0;s<this.#r;s++){let n=t.#e[s];if(!(n instanceof e&&n.type==="!"))return!1}return!0}isEnd(){if(this.#n===this||this.#t?.type==="!")return!0;if(!this.#t?.isEnd())return!1;if(!this.type)return this.#t?.isEnd();let t=this.#t?this.#t.#e.length:0;return this.#r===t-1}copyIn(t){typeof t=="string"?this.push(t):this.push(t.clone(this))}clone(t){let s=new e(this.type,t);for(let n of this.#e)s.copyIn(n);return s}static#p(t,s,n,i){let o=!1,r=!1,c=-1,a=!1;if(s.type===null){let d=n,h="";for(;d<t.length;){let g=t.charAt(d++);if(o||g==="\\"){o=!o,h+=g;continue}if(r){d===c+1?(g==="^"||g==="!")&&(a=!0):g==="]"&&!(d===c+2&&a)&&(r=!1),h+=g;continue}else if(g==="["){r=!0,c=d,a=!1,h+=g;continue}if(!i.noext&&Pt(g)&&t.charAt(d)==="("){s.push(h),h="";let b=new e(g,s);d=e.#p(t,b,d,i),s.push(b);continue}h+=g}return s.push(h),d}let l=n+1,p=new e(null,s),f=[],u="";for(;l<t.length;){let d=t.charAt(l++);if(o||d==="\\"){o=!o,u+=d;continue}if(r){l===c+1?(d==="^"||d==="!")&&(a=!0):d==="]"&&!(l===c+2&&a)&&(r=!1),u+=d;continue}else if(d==="["){r=!0,c=l,a=!1,u+=d;continue}if(Pt(d)&&t.charAt(l)==="("){p.push(u),u="";let h=new e(d,p);p.push(h),l=e.#p(t,h,l,i);continue}if(d==="|"){p.push(u),u="",f.push(p),p=new e(null,s);continue}if(d===")")return u===""&&s.#e.length===0&&(s.#f=!0),p.push(u),u="",s.push(...f,p),l;u+=d}return s.type=null,s.#s=void 0,s.#e=[t.substring(n-1)],l}static fromGlob(t,s={}){let n=new e(null,void 0,s);return e.#p(t,n,0,s),n}toMMPattern(){if(this!==this.#n)return this.#n.toMMPattern();let t=this.toString(),[s,n,i,o]=this.toRegExpSource();if(!(i||this.#s||this.#i.nocase&&!this.#i.nocaseMagicOnly&&t.toUpperCase()!==t.toLowerCase()))return n;let c=(this.#i.nocase?"i":"")+(o?"u":"");return Object.assign(new RegExp(`^${s}$`,c),{_src:s,_glob:t})}get options(){return this.#i}toRegExpSource(t){let s=t??!!this.#i.dot;if(this.#n===this&&this.#d(),!this.type){let a=this.isStart()&&this.isEnd()&&!this.#e.some(d=>typeof d!="string"),l=this.#e.map(d=>{let[h,g,b,x]=typeof d=="string"?e.#h(d,this.#s,a):d.toRegExpSource(t);return this.#s=this.#s||b,this.#o=this.#o||x,h}).join(""),p="";if(this.isStart()&&typeof this.#e[0]=="string"&&!(this.#e.length===1&&as.has(this.#e[0]))){let h=rs,g=s&&h.has(l.charAt(0))||l.startsWith("\\.")&&h.has(l.charAt(2))||l.startsWith("\\.\\.")&&h.has(l.charAt(4)),b=!s&&!t&&h.has(l.charAt(0));p=g?os:b?Re:""}let f="";return this.isEnd()&&this.#n.#a&&this.#t?.type==="!"&&(f="(?:$|\\/)"),[p+l+f,z(l),this.#s=!!this.#s,this.#o]}let n=this.type==="*"||this.type==="+",i=this.type==="!"?"(?:(?!(?:":"(?:",o=this.#u(s);if(this.isStart()&&this.isEnd()&&!o&&this.type!=="!"){let a=this.toString();return this.#e=[a],this.type=null,this.#s=void 0,[a,z(this.toString()),!1,!1]}let r=!n||t||s||!Re?"":this.#u(!0);r===o&&(r=""),r&&(o=`(?:${o})(?:${r})*?`);let c="";if(this.type==="!"&&this.#f)c=(this.isStart()&&!s?Re:"")+Dt;else{let a=this.type==="!"?"))"+(this.isStart()&&!s&&!t?Re:"")+Nt+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&r?")":this.type==="*"&&r?")?":`)${this.type}`;c=i+o+a}return[c,z(o),this.#s=!!this.#s,this.#o]}#u(t){return this.#e.map(s=>{if(typeof s=="string")throw new Error("string type in extglob ast??");let[n,i,o,r]=s.toRegExpSource(t);return this.#o=this.#o||r,n}).filter(s=>!(this.isStart()&&this.isEnd())||!!s).join("|")}static#h(t,s,n=!1){let i=!1,o="",r=!1,c=!1;for(let a=0;a<t.length;a++){let l=t.charAt(a);if(i){i=!1,o+=(cs.has(l)?"\\":"")+l;continue}if(l==="*"){if(c)continue;c=!0,o+=n&&/^[*]+$/.test(t)?Dt:Nt,s=!0;continue}else c=!1;if(l==="\\"){a===t.length-1?o+="\\\\":i=!0;continue}if(l==="["){let[p,f,u,d]=Lt(t,a);if(u){o+=p,r=r||f,a+=u-1,s=s||d;continue}}if(l==="?"){o+=it,s=!0;continue}o+=ls(l)}return[o,z(t),!!s,r]}};var ot=(e,{windowsPathsNoEscape:t=!1,magicalBraces:s=!1}={})=>s?t?e.replace(/[?*()[\]{}]/g,"[$&]"):e.replace(/[?*()[\]\\{}]/g,"\\$&"):t?e.replace(/[?*()[\]]/g,"[$&]"):e.replace(/[?*()[\]\\]/g,"\\$&");var E=(e,t,s={})=>(ye(t),!s.nocomment&&t.charAt(0)==="#"?!1:new ne(t,s).match(e)),ps=/^\*+([^+@!?\*\[\(]*)$/,fs=e=>t=>!t.startsWith(".")&&t.endsWith(e),us=e=>t=>t.endsWith(e),ds=e=>(e=e.toLowerCase(),t=>!t.startsWith(".")&&t.toLowerCase().endsWith(e)),hs=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),gs=/^\*+\.\*+$/,ms=e=>!e.startsWith(".")&&e.includes("."),ys=e=>e!=="."&&e!==".."&&e.includes("."),bs=/^\.\*+$/,vs=e=>e!=="."&&e!==".."&&e.startsWith("."),ks=/^\*+$/,ws=e=>e.length!==0&&!e.startsWith("."),xs=e=>e.length!==0&&e!=="."&&e!=="..",Ss=/^\?+([^+@!?\*\[\(]*)?$/,Ts=([e,t=""])=>{let s=Ft([e]);return t?(t=t.toLowerCase(),n=>s(n)&&n.toLowerCase().endsWith(t)):s},Es=([e,t=""])=>{let s=_t([e]);return t?(t=t.toLowerCase(),n=>s(n)&&n.toLowerCase().endsWith(t)):s},As=([e,t=""])=>{let s=_t([e]);return t?n=>s(n)&&n.endsWith(t):s},$s=([e,t=""])=>{let s=Ft([e]);return t?n=>s(n)&&n.endsWith(t):s},Ft=([e])=>{let t=e.length;return s=>s.length===t&&!s.startsWith(".")},_t=([e])=>{let t=e.length;return s=>s.length===t&&s!=="."&&s!==".."},Vt=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",Ct={win32:{sep:"\\"},posix:{sep:"/"}},Rs=Vt==="win32"?Ct.win32.sep:Ct.posix.sep;E.sep=Rs;var P=Symbol("globstar **");E.GLOBSTAR=P;var Os="[^/]",Ms=Os+"*?",Is="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",Ls="(?:(?!(?:\\/|^)\\.).)*?",Ps=(e,t={})=>s=>E(s,e,t);E.filter=Ps;var L=(e,t={})=>Object.assign({},e,t),Ns=e=>{if(!e||typeof e!="object"||!Object.keys(e).length)return E;let t=E;return Object.assign((n,i,o={})=>t(n,i,L(e,o)),{Minimatch:class extends t.Minimatch{constructor(i,o={}){super(i,L(e,o))}static defaults(i){return t.defaults(L(e,i)).Minimatch}},AST:class extends t.AST{constructor(i,o,r={}){super(i,o,L(e,r))}static fromGlob(i,o={}){return t.AST.fromGlob(i,L(e,o))}},unescape:(n,i={})=>t.unescape(n,L(e,i)),escape:(n,i={})=>t.escape(n,L(e,i)),filter:(n,i={})=>t.filter(n,L(e,i)),defaults:n=>t.defaults(L(e,n)),makeRe:(n,i={})=>t.makeRe(n,L(e,i)),braceExpand:(n,i={})=>t.braceExpand(n,L(e,i)),match:(n,i,o={})=>t.match(n,i,L(e,o)),sep:t.sep,GLOBSTAR:P})};E.defaults=Ns;var Wt=(e,t={})=>(ye(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:Mt(e,{max:t.braceExpandMax}));E.braceExpand=Wt;var Ds=(e,t={})=>new ne(e,t).makeRe();E.makeRe=Ds;var Cs=(e,t,s={})=>{let n=new ne(t,s);return e=e.filter(i=>n.match(i)),n.options.nonull&&!e.length&&e.push(t),e};E.match=Cs;var jt=/[?*]|[+@!]\(.*?\)|\[|\]/,js=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),ne=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,s={}){ye(t),s=s||{},this.options=s,this.pattern=t,this.platform=s.platform||Vt,this.isWindows=this.platform==="win32";let n="allowWindowsEscape";this.windowsPathsNoEscape=!!s.windowsPathsNoEscape||s[n]===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!s.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!s.nonegate,this.comment=!1,this.empty=!1,this.partial=!!s.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=s.windowsNoMagicRoot!==void 0?s.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let t of this.set)for(let s of t)if(typeof s!="string")return!0;return!1}debug(...t){}make(){let t=this.pattern,s=this.options;if(!s.nocomment&&t.charAt(0)==="#"){this.comment=!0;return}if(!t){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],s.debug&&(this.debug=(...o)=>console.error(...o)),this.debug(this.pattern,this.globSet);let n=this.globSet.map(o=>this.slashSplit(o));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let i=this.globParts.map((o,r,c)=>{if(this.isWindows&&this.windowsNoMagicRoot){let a=o[0]===""&&o[1]===""&&(o[2]==="?"||!jt.test(o[2]))&&!jt.test(o[3]),l=/^[a-z]:/i.test(o[0]);if(a)return[...o.slice(0,4),...o.slice(4).map(p=>this.parse(p))];if(l)return[o[0],...o.slice(1).map(p=>this.parse(p))]}return o.map(a=>this.parse(a))});if(this.debug(this.pattern,i),this.set=i.filter(o=>o.indexOf(!1)===-1),this.isWindows)for(let o=0;o<this.set.length;o++){let r=this.set[o];r[0]===""&&r[1]===""&&this.globParts[o][2]==="?"&&typeof r[3]=="string"&&/^[a-z]:$/i.test(r[3])&&(r[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let n=0;n<t.length;n++)for(let i=0;i<t[n].length;i++)t[n][i]==="**"&&(t[n][i]="*");let{optimizationLevel:s=1}=this.options;return s>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):s>=1?t=this.levelOneOptimize(t):t=this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map(s=>{let n=-1;for(;(n=s.indexOf("**",n+1))!==-1;){let i=n;for(;s[i+1]==="**";)i++;i!==n&&s.splice(n,i-n)}return s})}levelOneOptimize(t){return t.map(s=>(s=s.reduce((n,i)=>{let o=n[n.length-1];return i==="**"&&o==="**"?n:i===".."&&o&&o!==".."&&o!=="."&&o!=="**"?(n.pop(),n):(n.push(i),n)},[]),s.length===0?[""]:s))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let s=!1;do{if(s=!1,!this.preserveMultipleSlashes){for(let i=1;i<t.length-1;i++){let o=t[i];i===1&&o===""&&t[0]===""||(o==="."||o==="")&&(s=!0,t.splice(i,1),i--)}t[0]==="."&&t.length===2&&(t[1]==="."||t[1]==="")&&(s=!0,t.pop())}let n=0;for(;(n=t.indexOf("..",n+1))!==-1;){let i=t[n-1];i&&i!=="."&&i!==".."&&i!=="**"&&(s=!0,t.splice(n-1,2),n-=2)}}while(s);return t.length===0?[""]:t}firstPhasePreProcess(t){let s=!1;do{s=!1;for(let n of t){let i=-1;for(;(i=n.indexOf("**",i+1))!==-1;){let r=i;for(;n[r+1]==="**";)r++;r>i&&n.splice(i+1,r-i);let c=n[i+1],a=n[i+2],l=n[i+3];if(c!==".."||!a||a==="."||a===".."||!l||l==="."||l==="..")continue;s=!0,n.splice(i,1);let p=n.slice(0);p[i]="**",t.push(p),i--}if(!this.preserveMultipleSlashes){for(let r=1;r<n.length-1;r++){let c=n[r];r===1&&c===""&&n[0]===""||(c==="."||c==="")&&(s=!0,n.splice(r,1),r--)}n[0]==="."&&n.length===2&&(n[1]==="."||n[1]==="")&&(s=!0,n.pop())}let o=0;for(;(o=n.indexOf("..",o+1))!==-1;){let r=n[o-1];if(r&&r!=="."&&r!==".."&&r!=="**"){s=!0;let a=o===1&&n[o+1]==="**"?["."]:[];n.splice(o-1,2,...a),n.length===0&&n.push(""),o-=2}}}}while(s);return t}secondPhasePreProcess(t){for(let s=0;s<t.length-1;s++)for(let n=s+1;n<t.length;n++){let i=this.partsMatch(t[s],t[n],!this.preserveMultipleSlashes);if(i){t[s]=[],t[n]=i;break}}return t.filter(s=>s.length)}partsMatch(t,s,n=!1){let i=0,o=0,r=[],c="";for(;i<t.length&&o<s.length;)if(t[i]===s[o])r.push(c==="b"?s[o]:t[i]),i++,o++;else if(n&&t[i]==="**"&&s[o]===t[i+1])r.push(t[i]),i++;else if(n&&s[o]==="**"&&t[i]===s[o+1])r.push(s[o]),o++;else if(t[i]==="*"&&s[o]&&(this.options.dot||!s[o].startsWith("."))&&s[o]!=="**"){if(c==="b")return!1;c="a",r.push(t[i]),i++,o++}else if(s[o]==="*"&&t[i]&&(this.options.dot||!t[i].startsWith("."))&&t[i]!=="**"){if(c==="a")return!1;c="b",r.push(s[o]),i++,o++}else return!1;return t.length===s.length&&r}parseNegate(){if(this.nonegate)return;let t=this.pattern,s=!1,n=0;for(let i=0;i<t.length&&t.charAt(i)==="!";i++)s=!s,n++;n&&(this.pattern=t.slice(n)),this.negate=s}matchOne(t,s,n=!1){let i=this.options;if(this.isWindows){let g=typeof t[0]=="string"&&/^[a-z]:$/i.test(t[0]),b=!g&&t[0]===""&&t[1]===""&&t[2]==="?"&&/^[a-z]:$/i.test(t[3]),x=typeof s[0]=="string"&&/^[a-z]:$/i.test(s[0]),$=!x&&s[0]===""&&s[1]===""&&s[2]==="?"&&typeof s[3]=="string"&&/^[a-z]:$/i.test(s[3]),y=b?3:g?0:void 0,w=$?3:x?0:void 0;if(typeof y=="number"&&typeof w=="number"){let[v,k]=[t[y],s[w]];v.toLowerCase()===k.toLowerCase()&&(s[w]=v,w>y?s=s.slice(w):y>w&&(t=t.slice(y)))}}let{optimizationLevel:o=1}=this.options;o>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:s}),this.debug("matchOne",t.length,s.length);for(var r=0,c=0,a=t.length,l=s.length;r<a&&c<l;r++,c++){this.debug("matchOne loop");var p=s[c],f=t[r];if(this.debug(s,p,f),p===!1)return!1;if(p===P){this.debug("GLOBSTAR",[s,p,f]);var u=r,d=c+1;if(d===l){for(this.debug("** at the end");r<a;r++)if(t[r]==="."||t[r]===".."||!i.dot&&t[r].charAt(0)===".")return!1;return!0}for(;u<a;){var h=t[u];if(this.debug(`
2
- globstar while`,t,u,s,d,h),this.matchOne(t.slice(u),s.slice(d),n))return this.debug("globstar found match!",u,a,h),!0;if(h==="."||h===".."||!i.dot&&h.charAt(0)==="."){this.debug("dot detected!",t,u,s,d);break}this.debug("globstar swallow a segment, and continue"),u++}return!!(n&&(this.debug(`
3
- >>> no match, partial?`,t,u,s,d),u===a))}let g;if(typeof p=="string"?(g=f===p,this.debug("string match",p,f,g)):(g=p.test(f),this.debug("pattern match",p,f,g)),!g)return!1}if(r===a&&c===l)return!0;if(r===a)return n;if(c===l)return r===a-1&&t[r]==="";throw new Error("wtf?")}braceExpand(){return Wt(this.pattern,this.options)}parse(t){ye(t);let s=this.options;if(t==="**")return P;if(t==="")return"";let n,i=null;(n=t.match(ks))?i=s.dot?xs:ws:(n=t.match(ps))?i=(s.nocase?s.dot?hs:ds:s.dot?us:fs)(n[1]):(n=t.match(Ss))?i=(s.nocase?s.dot?Es:Ts:s.dot?As:$s)(n):(n=t.match(gs))?i=s.dot?ys:ms:(n=t.match(bs))&&(i=vs);let o=te.fromGlob(t,this.options).toMMPattern();return i&&typeof o=="object"&&Reflect.defineProperty(o,"test",{value:i}),o}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let t=this.set;if(!t.length)return this.regexp=!1,this.regexp;let s=this.options,n=s.noglobstar?Ms:s.dot?Is:Ls,i=new Set(s.nocase?["i"]:[]),o=t.map(a=>{let l=a.map(f=>{if(f instanceof RegExp)for(let u of f.flags.split(""))i.add(u);return typeof f=="string"?js(f):f===P?P:f._src});l.forEach((f,u)=>{let d=l[u+1],h=l[u-1];f!==P||h===P||(h===void 0?d!==void 0&&d!==P?l[u+1]="(?:\\/|"+n+"\\/)?"+d:l[u]=n:d===void 0?l[u-1]=h+"(?:\\/|\\/"+n+")?":d!==P&&(l[u-1]=h+"(?:\\/|\\/"+n+"\\/)"+d,l[u+1]=P))});let p=l.filter(f=>f!==P);if(this.partial&&p.length>=1){let f=[];for(let u=1;u<=p.length;u++)f.push(p.slice(0,u).join("/"));return"(?:"+f.join("|")+")"}return p.join("/")}).join("|"),[r,c]=t.length>1?["(?:",")"]:["",""];o="^"+r+o+c+"$",this.partial&&(o="^(?:\\/|"+r+o.slice(1,-1)+c+")$"),this.negate&&(o="^(?!"+o+").+$");try{this.regexp=new RegExp(o,[...i].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,s=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return t==="";if(t==="/"&&s)return!0;let n=this.options;this.isWindows&&(t=t.split("\\").join("/"));let i=this.slashSplit(t);this.debug(this.pattern,"split",i);let o=this.set;this.debug(this.pattern,"set",o);let r=i[i.length-1];if(!r)for(let c=i.length-2;!r&&c>=0;c--)r=i[c];for(let c=0;c<o.length;c++){let a=o[c],l=i;if(n.matchBase&&a.length===1&&(l=[r]),this.matchOne(l,a,s))return n.flipNegate?!0:!this.negate}return n.flipNegate?!1:this.negate}static defaults(t){return E.defaults(t).Minimatch}};E.AST=te;E.Minimatch=ne;E.escape=ot;E.unescape=z;var C="pickety.json",Me=["ts","tsx","js","jsx","mjs","cjs"],X=`**/*.{${Me.join(",")}}`,se=new Set(["node_modules",".git",".next","dist","out","build",".turbo",".cache",".nx","coverage"]);function A(e){let t=e.replace(/\\/g,"/");return/^[a-zA-Z]:/.test(t)&&(t=t[0].toLowerCase()+t.slice(1)),t}function Ie(e,t){return Oe.relative(e,t).replace(/\\/g,"/")}function Bt(e,t){return E(e,t)||e===t}function ie(e){return Oe.join(e,C)}function W(e,t){return e==="instability"?t.toFixed(2):String(t)}async function Ht(e,t){let s=ie(e);if(Le.existsSync(s)&&await oe.window.showWarningMessage("pickety.json already exists. Overwrite?","Yes","No")!=="Yes")return;Le.writeFileSync(s,JSON.stringify({$schema:"https://raw.githubusercontent.com/DanielSerio/pickety/main/resources/pickety.schema.json",modules:{features:"src/features/*",components:"src/components/**/*",utils:"src/utils/**/*"},rules:{"module-boundaries":{severity:"error",rules:[{importer:"features",imports:"features",allow:!0,message:"Features can import from their own module."},{importer:"features",imports:"components",allow:!0},{importer:"features",imports:"utils",allow:!0}]}},"boundary-diagrams":!0},null,2)),oe.window.showInformationMessage("Pickety: pickety.json created.");let i=await oe.workspace.openTextDocument(s);await oe.window.showTextDocument(i),t()}var lt=S(require("vscode"));var q=S(require("path"));function ve(e,t,s){let n=rt(e);return{allow:e.allow??!1,severity:e.severity??s,name:e.name??`rule[${t}]`,effectiveImporter:n?.path||e.importer||"*",isOnly:e.only||!!e.containedTo,isAllowStyle:(e.allow??!1)||!!e.containedTo||e.only}}function U(e,t,s){return!!(Bt(e,s)||s.includes("/")&&(E(t,s)||E(t,`**/${s}`)||E(t,`**/${s}/**`)))}function rt(e){if(e.containedTo)return typeof e.containedTo=="object"?e.containedTo:{path:e.containedTo}}function Q(e,t,s,n,i,o,r){return{file:e,line:t.line,character:t.character,length:t.length,message:`[${s}] ${n} (importing "${t.specifier}")`,severity:i,ruleName:s,sourceModule:o,targetModule:r}}function Gt(e){let t=[],s=new Set,n=new Set,i=[];function o(r){s.add(r),n.add(r),i.push(r);let c=e.get(r);if(c){for(let a of c)if(!s.has(a))o(a);else if(n.has(a)){let l=i.indexOf(a);l!==-1&&t.push([...i.slice(l),a])}}n.delete(r),i.pop()}for(let r of e.keys())s.has(r)||o(r);return t}var Ut=Me.map(e=>`.${e}`),Fs=Ut.map(e=>`index${e}`),zt=/(\/\*[\s\S]*?\*\/|\/\/.*)|(['"`](?:\\.|[^'"`])*['"`])|((?:import|export)\s+(?:[\s\S]*?from\s+)?['"`]([^'"`]+)['"`])|(import\s*\(\s*['"`]([^'"`]+)['"`]\s*\))/gm;function _s(e){let t=[],s=e.split(`
4
- `),n=[],i=0;for(let c of s)n.push(i),i+=c.length+1;let o=c=>{let a=0;for(let l=1;l<n.length&&!(n[l]>c);l++)a=l;return{line:a,character:c-n[a]}},r;for(zt.lastIndex=0;(r=zt.exec(e))!==null;){let[c,a,l,p,f,u,d]=r;if(!(a||l)){if(p&&f){let h=o(r.index);t.push({specifier:f,line:h.line,character:h.character,length:p.length})}else if(u&&d){let h=o(r.index);t.push({specifier:d,line:h.line,character:h.character,length:u.length})}}}return t}function Vs(e,t,s){let{knownFiles:n,root:i,aliases:o}=s;for(let[r,c]of Object.entries(o))if(r.endsWith("/*")){let a=r.slice(0,-2),l=c.endsWith("/*")?c.slice(0,-2):c==="*"?"./":c;if(e.startsWith(a)){let p=e.replace(a,l);return at(q.resolve(i,p),n)}}else if(e===r)return at(q.resolve(i,c),n);if(e.startsWith(".")){let r=q.dirname(t),c=q.resolve(r,e);return at(c,n)}}function at(e,t){let s=A(e);if(t.has(s))return s;for(let n of Ut){let i=s+n;if(t.has(i))return i}for(let n of Fs){let i=s+"/"+n;if(t.has(i))return i}}function N(e,t,s){let n=A(q.relative(s,e));for(let[i,o]of Object.entries(t)){let r=o.endsWith("/*")?o.slice(0,-2)+"/**/*":o;if(E(n,r)||E(n,o))return i}}function Pe(e,t,s){let n=_s(t),i=[];for(let o of n){let r=Vs(o.specifier,e,s);r&&i.push({statement:o,resolvedPath:r})}return i}function re(e,t,s){let{root:n,knownFiles:i}=s,o=e.getModuleLevelGraph(t,n),r=Object.keys(t),c=new Map;for(let f of r)c.set(f,0);for(let f of i){let u=N(f,t,n);u&&c.set(u,(c.get(u)??0)+1)}let a=new Map;for(let f of r)a.set(f,0);for(let[,f]of o)for(let u of f)a.set(u,(a.get(u)??0)+1);let l=Ws(o,r),p=r.map(f=>{let u=a.get(f)??0,d=o.get(f)?.size??0,h=u+d;return{moduleName:f,fileCount:c.get(f)??0,afferentCoupling:u,efferentCoupling:d,instability:h===0?0:d/h,dependencyDepth:l.get(f)??0}});return p.sort((f,u)=>f.instability-u.instability),p}function Ws(e,t){let s=new Map,n=new Set;function i(o){if(s.has(o))return s.get(o);if(n.has(o))return 0;n.add(o);let r=e.get(o),c=0;if(r&&r.size>0)for(let a of r)c=Math.max(c,1+i(a));return n.delete(o),s.set(o,c),c}for(let o of t)i(o);return s}function qt(e,t){let s=[],n=[{key:"maxAfferentCoupling",label:"afferent coupling",getValue:i=>i.afferentCoupling},{key:"maxEfferentCoupling",label:"efferent coupling",getValue:i=>i.efferentCoupling},{key:"maxInstability",label:"instability",getValue:i=>i.instability},{key:"maxDepth",label:"dependency depth",getValue:i=>i.dependencyDepth}];for(let i of e)for(let o of n){let r=t[o.key],c=o.getValue(i);r!==void 0&&c>r&&s.push({moduleName:i.moduleName,metric:o.label,value:c,threshold:r})}return s}var H=S(require("fs")),B=S(require("path"));function Ne(e,t,s){let n=e["boundary-diagrams"];if(!n)return;let i="picket-boundaries.mermaid",o;if(typeof n=="string"){let l=B.resolve(t,n);try{H.existsSync(l)&&H.statSync(l).isDirectory()?o=B.join(l,i):o=l}catch{o=l}}else o=B.join(t,i);let r=A(B.resolve(t));if(!A(B.resolve(o)).startsWith(r+"/")){console.error(`Pickety: Diagram output path "${n}" escapes the workspace root. Ignoring.`);return}let a=Bs(e,s);try{let l=B.dirname(o);return H.existsSync(l)||H.mkdirSync(l,{recursive:!0}),H.writeFileSync(o,a,"utf-8"),o}catch(l){console.error(`Pickety: Failed to write Mermaid diagram to ${o}`,l);return}}function ct(e){return e.replace(/"/g,"#quot;").replace(/\[/g,"#lsqb;").replace(/\]/g,"#rsqb;").replace(/\|/g,"#vert;").replace(/</g,"#lt;").replace(/>/g,"#gt;")}function Bs(e,t){let s=["graph LR"],n=e.modules,i=e.rules["module-boundaries"].rules,o=e.rules["module-boundaries"].severity,r=new Map;if(t)for(let h of t)r.set(h.moduleName,h);s.push(""),s.push(" %% Node Styles"),s.push(" classDef module fill:#f1f5f9,stroke:#64748b,stroke-width:2px;"),s.push(" classDef external fill:#ffffff,stroke:#94a3b8,stroke-width:1px,stroke-dasharray: 5 5;");let c=new Map,a=new Set(Object.keys(n));i.forEach((h,g)=>{let{effectiveImporter:b}=ve(h,g,o);a.add(b),a.add(h.imports)}),a.forEach(h=>{let g=h.split("/"),b=g.length>1?g[0]:"Base";c.has(b)||c.set(b,[]),c.get(b).push(h)});let l=new Map,p=0,f=h=>(l.has(h)||l.set(h,`n${p++}`),l.get(h));c.forEach((h,g)=>{s.push(""),s.push(` subgraph c${p++} [" ${ct(g)} "]`),h.forEach(b=>{let x=f(b),$=!!n[b],y=r.get(b),w=ct(b);y&&(w+=`<br/><small>Ca:${y.afferentCoupling} Ce:${y.efferentCoupling} I:${y.instability.toFixed(2)}</small>`);let v=b.includes("$")?`(["${w}"])`:`["${w}"]`,k=$?"module":"external";s.push(` ${x}${v}:::${k}`)}),s.push(" end")}),s.push(""),s.push(" %% Boundary Rules");let u=[],d=0;return i.forEach((h,g)=>{let{allow:b,name:x,effectiveImporter:$,isAllowStyle:y,isOnly:w}=ve(h,g,o),v=f($),k=f(h.imports),m=y?"-->":"-.->",D=b?"ALLOW":"DENY",he=h.message||`${D}: ${x}`;s.push(` ${v} ${m}|"${ct(he)}"| ${k}`);let ge=y?"#22c55e":"#ef4444",Ye=w?"4px":"2px",Ke=y?"":",stroke-dasharray:5";u.push(` linkStyle ${d++} stroke:${ge},stroke-width:${Ye}${Ke}`)}),s.concat(u).join(`
5
- `)}var Jt=S(require("vscode"));function ae(e){return e?!0:(Jt.window.showErrorMessage("Pickety: No active configuration. Check pickety.json for errors."),!1)}function Xt(e,t,s){if(!ae(e))return;let n=re(t,e.modules,s),i=Ne(e,s.root,n);i?lt.window.showInformationMessage(`Pickety: Generated boundary diagram at ${i}`):lt.window.showErrorMessage("Pickety: Failed to generate diagram. Is 'boundary-diagrams' enabled in pickety.json?")}var je=S(require("vscode"));var Z;function Zt(e,t){if(Z){Z.reveal(),Z.webview.html=Qt(e,t);return}Z=je.window.createWebviewPanel("picketyHealth","Pickety: Module Health",je.ViewColumn.One,{enableScripts:!1}),Z.webview.html=Qt(e,t),Z.onDidDispose(()=>{Z=void 0})}function De(e){let t=Math.max(0,Math.min(1,e));return`background-color: hsla(${Math.round((1-t)*140)}, 75%, 40%, 0.9); color: white; text-shadow: 0 1px 1px rgba(0,0,0,0.3);`}function Ce(e,t){return t===void 0?"":e>t?"exceeds":e>=t*.8?"approaching":""}function Qt(e,t){let s=Math.max(1,...e.map(r=>r.afferentCoupling)),n=Math.max(1,...e.map(r=>r.efferentCoupling)),i=Math.max(1,...e.map(r=>r.dependencyDepth));return`<!DOCTYPE html>
1
+ "use strict";var qn=Object.create;var Pe=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Xn=Object.getOwnPropertyNames;var Qn=Object.getPrototypeOf,Zn=Object.prototype.hasOwnProperty;var Yn=(e,t)=>{for(var s in t)Pe(e,s,{get:t[s],enumerable:!0})},Ot=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Xn(t))!Zn.call(e,o)&&o!==s&&Pe(e,o,{get:()=>t[o],enumerable:!(n=Jn(t,o))||n.enumerable});return e};var R=(e,t,s)=>(s=e!=null?qn(Qn(e)):{},Ot(t||!e||!e.__esModule?Pe(s,"default",{value:e,enumerable:!0}):s,e)),Kn=e=>Ot(Pe({},"__esModule",{value:!0}),e);var Co={};Yn(Co,{activate:()=>Oo,deactivate:()=>Io});module.exports=Kn(Co);var _=R(require("vscode"));var B=R(require("vscode"));var re=R(require("vscode")),Le=R(require("fs"));var Oe=R(require("path"));var ot=(e,t,s)=>{let n=e instanceof RegExp?It(e,s):e,o=t instanceof RegExp?It(t,s):t,i=n!==null&&o!=null&&es(n,o,s);return i&&{start:i[0],end:i[1],pre:s.slice(0,i[0]),body:s.slice(i[0]+n.length,i[1]),post:s.slice(i[1]+o.length)}},It=(e,t)=>{let s=t.match(e);return s?s[0]:null},es=(e,t,s)=>{let n,o,i,r,c,a=s.indexOf(e),u=s.indexOf(t,a+1),p=a;if(a>=0&&u>0){if(e===t)return[a,u];for(n=[],i=s.length;p>=0&&!c;){if(p===a)n.push(p),a=s.indexOf(e,p+1);else if(n.length===1){let l=n.pop();l!==void 0&&(c=[l,u])}else o=n.pop(),o!==void 0&&o<i&&(i=o,r=u),u=s.indexOf(t,p+1);p=a<u&&a>=0?a:u}n.length&&r!==void 0&&(c=[i,r])}return c};var Ct="\0SLASH"+Math.random()+"\0",Lt="\0OPEN"+Math.random()+"\0",rt="\0CLOSE"+Math.random()+"\0",Nt="\0COMMA"+Math.random()+"\0",Dt="\0PERIOD"+Math.random()+"\0",ts=new RegExp(Ct,"g"),ns=new RegExp(Lt,"g"),ss=new RegExp(rt,"g"),os=new RegExp(Nt,"g"),is=new RegExp(Dt,"g"),rs=/\\\\/g,as=/\\{/g,cs=/\\}/g,ls=/\\,/g,us=/\\./g,ps=1e5;function it(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function fs(e){return e.replace(rs,Ct).replace(as,Lt).replace(cs,rt).replace(ls,Nt).replace(us,Dt)}function ds(e){return e.replace(ts,"\\").replace(ns,"{").replace(ss,"}").replace(os,",").replace(is,".")}function jt(e){if(!e)return[""];let t=[],s=ot("{","}",e);if(!s)return e.split(",");let{pre:n,body:o,post:i}=s,r=n.split(",");r[r.length-1]+="{"+o+"}";let c=jt(i);return i.length&&(r[r.length-1]+=c.shift(),r.push.apply(r,c)),t.push.apply(t,r),t}function Vt(e,t={}){if(!e)return[];let{max:s=ps}=t;return e.slice(0,2)==="{}"&&(e="\\{\\}"+e.slice(2)),ve(fs(e),s,!0).map(ds)}function hs(e){return"{"+e+"}"}function gs(e){return/^-?0\d/.test(e)}function ms(e,t){return e<=t}function ys(e,t){return e>=t}function ve(e,t,s){let n=[],o=ot("{","}",e);if(!o)return[e];let i=o.pre,r=o.post.length?ve(o.post,t,!1):[""];if(/\$$/.test(o.pre))for(let c=0;c<r.length&&c<t;c++){let a=i+"{"+o.body+"}"+r[c];n.push(a)}else{let c=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),a=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),u=c||a,p=o.body.indexOf(",")>=0;if(!u&&!p)return o.post.match(/,(?!,).*\}/)?(e=o.pre+"{"+o.body+rt+o.post,ve(e,t,!0)):[e];let l;if(u)l=o.body.split(/\.\./);else if(l=jt(o.body),l.length===1&&l[0]!==void 0&&(l=ve(l[0],t,!1).map(hs),l.length===1))return r.map(d=>o.pre+l[0]+d);let f;if(u&&l[0]!==void 0&&l[1]!==void 0){let d=it(l[0]),h=it(l[1]),g=Math.max(l[0].length,l[1].length),b=l.length===3&&l[2]!==void 0?Math.abs(it(l[2])):1,x=ms;h<d&&(b*=-1,x=ys);let m=l.some(gs);f=[];for(let w=d;x(w,h);w+=b){let k;if(a)k=String.fromCharCode(w),k==="\\"&&(k="");else if(k=String(w),m){let v=g-k.length;if(v>0){let y=new Array(v+1).join("0");w<0?k="-"+y+k.slice(1):k=y+k}}f.push(k)}}else{f=[];for(let d=0;d<l.length;d++)f.push.apply(f,ve(l[d],t,!1))}for(let d=0;d<f.length;d++)for(let h=0;h<r.length&&n.length<t;h++){let g=i+f[d]+r[h];(!s||u||g)&&n.push(g)}}return n}var ke=e=>{if(typeof e!="string")throw new TypeError("invalid pattern");if(e.length>65536)throw new TypeError("pattern is too long")};var bs={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},we=e=>e.replace(/[[\]\\-]/g,"\\$&"),vs=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Ft=e=>e.join(""),Wt=(e,t)=>{let s=t;if(e.charAt(s)!=="[")throw new Error("not in a brace expression");let n=[],o=[],i=s+1,r=!1,c=!1,a=!1,u=!1,p=s,l="";e:for(;i<e.length;){let g=e.charAt(i);if((g==="!"||g==="^")&&i===s+1){u=!0,i++;continue}if(g==="]"&&r&&!a){p=i+1;break}if(r=!0,g==="\\"&&!a){a=!0,i++;continue}if(g==="["&&!a){for(let[b,[x,T,m]]of Object.entries(bs))if(e.startsWith(b,i)){if(l)return["$.",!1,e.length-s,!0];i+=b.length,m?o.push(x):n.push(x),c=c||T;continue e}}if(a=!1,l){g>l?n.push(we(l)+"-"+we(g)):g===l&&n.push(we(g)),l="",i++;continue}if(e.startsWith("-]",i+1)){n.push(we(g+"-")),i+=2;continue}if(e.startsWith("-",i+1)){l=g,i+=2;continue}n.push(we(g)),i++}if(p<i)return["",!1,0,!1];if(!n.length&&!o.length)return["$.",!1,e.length-s,!0];if(o.length===0&&n.length===1&&/^\\?.$/.test(n[0])&&!u){let g=n[0].length===2?n[0].slice(-1):n[0];return[vs(g),!1,p-s,!1]}let f="["+(u?"^":"")+Ft(n)+"]",d="["+(u?"":"^")+Ft(o)+"]";return[n.length&&o.length?"("+f+"|"+d+")":n.length?f:d,c,p-s,!0]};var q=(e,{windowsPathsNoEscape:t=!1,magicalBraces:s=!0}={})=>s?t?e.replace(/\[([^\/\\])\]/g,"$1"):e.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1"):t?e.replace(/\[([^\/\\{}])\]/g,"$1"):e.replace(/((?!\\).|^)\[([^\/\\{}])\]/g,"$1$2").replace(/\\([^\/{}])/g,"$1");var ks=new Set(["!","?","+","*","@"]),Bt=e=>ks.has(e),ws="(?!(?:^|/)\\.\\.?(?:$|/))",$e="(?!\\.)",xs=new Set(["[","."]),Ss=new Set(["..","."]),Rs=new Set("().*{}+?[]^$\\!"),Es=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),at="[^/]",_t=at+"*?",Ht=at+"+?",ne=class e{type;#n;#s;#i=!1;#e=[];#t;#r;#c;#a=!1;#o;#l;#p=!1;constructor(t,s,n={}){this.type=t,t&&(this.#s=!0),this.#t=s,this.#n=this.#t?this.#t.#n:this,this.#o=this.#n===this?n:this.#n.#o,this.#c=this.#n===this?[]:this.#n.#c,t==="!"&&!this.#n.#a&&this.#c.push(this),this.#r=this.#t?this.#t.#e.length:0}get hasMagic(){if(this.#s!==void 0)return this.#s;for(let t of this.#e)if(typeof t!="string"&&(t.type||t.hasMagic))return this.#s=!0;return this.#s}toString(){return this.#l!==void 0?this.#l:this.type?this.#l=this.type+"("+this.#e.map(t=>String(t)).join("|")+")":this.#l=this.#e.map(t=>String(t)).join("")}#d(){if(this!==this.#n)throw new Error("should only call on root");if(this.#a)return this;this.toString(),this.#a=!0;let t;for(;t=this.#c.pop();){if(t.type!=="!")continue;let s=t,n=s.#t;for(;n;){for(let o=s.#r+1;!n.type&&o<n.#e.length;o++)for(let i of t.#e){if(typeof i=="string")throw new Error("string part in extglob AST??");i.copyIn(n.#e[o])}s=n,n=s.#t}}return this}push(...t){for(let s of t)if(s!==""){if(typeof s!="string"&&!(s instanceof e&&s.#t===this))throw new Error("invalid part: "+s);this.#e.push(s)}}toJSON(){let t=this.type===null?this.#e.slice().map(s=>typeof s=="string"?s:s.toJSON()):[this.type,...this.#e.map(s=>s.toJSON())];return this.isStart()&&!this.type&&t.unshift([]),this.isEnd()&&(this===this.#n||this.#n.#a&&this.#t?.type==="!")&&t.push({}),t}isStart(){if(this.#n===this)return!0;if(!this.#t?.isStart())return!1;if(this.#r===0)return!0;let t=this.#t;for(let s=0;s<this.#r;s++){let n=t.#e[s];if(!(n instanceof e&&n.type==="!"))return!1}return!0}isEnd(){if(this.#n===this||this.#t?.type==="!")return!0;if(!this.#t?.isEnd())return!1;if(!this.type)return this.#t?.isEnd();let t=this.#t?this.#t.#e.length:0;return this.#r===t-1}copyIn(t){typeof t=="string"?this.push(t):this.push(t.clone(this))}clone(t){let s=new e(this.type,t);for(let n of this.#e)s.copyIn(n);return s}static#u(t,s,n,o){let i=!1,r=!1,c=-1,a=!1;if(s.type===null){let d=n,h="";for(;d<t.length;){let g=t.charAt(d++);if(i||g==="\\"){i=!i,h+=g;continue}if(r){d===c+1?(g==="^"||g==="!")&&(a=!0):g==="]"&&!(d===c+2&&a)&&(r=!1),h+=g;continue}else if(g==="["){r=!0,c=d,a=!1,h+=g;continue}if(!o.noext&&Bt(g)&&t.charAt(d)==="("){s.push(h),h="";let b=new e(g,s);d=e.#u(t,b,d,o),s.push(b);continue}h+=g}return s.push(h),d}let u=n+1,p=new e(null,s),l=[],f="";for(;u<t.length;){let d=t.charAt(u++);if(i||d==="\\"){i=!i,f+=d;continue}if(r){u===c+1?(d==="^"||d==="!")&&(a=!0):d==="]"&&!(u===c+2&&a)&&(r=!1),f+=d;continue}else if(d==="["){r=!0,c=u,a=!1,f+=d;continue}if(Bt(d)&&t.charAt(u)==="("){p.push(f),f="";let h=new e(d,p);p.push(h),u=e.#u(t,h,u,o);continue}if(d==="|"){p.push(f),f="",l.push(p),p=new e(null,s);continue}if(d===")")return f===""&&s.#e.length===0&&(s.#p=!0),p.push(f),f="",s.push(...l,p),u;f+=d}return s.type=null,s.#s=void 0,s.#e=[t.substring(n-1)],u}static fromGlob(t,s={}){let n=new e(null,void 0,s);return e.#u(t,n,0,s),n}toMMPattern(){if(this!==this.#n)return this.#n.toMMPattern();let t=this.toString(),[s,n,o,i]=this.toRegExpSource();if(!(o||this.#s||this.#o.nocase&&!this.#o.nocaseMagicOnly&&t.toUpperCase()!==t.toLowerCase()))return n;let c=(this.#o.nocase?"i":"")+(i?"u":"");return Object.assign(new RegExp(`^${s}$`,c),{_src:s,_glob:t})}get options(){return this.#o}toRegExpSource(t){let s=t??!!this.#o.dot;if(this.#n===this&&this.#d(),!this.type){let a=this.isStart()&&this.isEnd()&&!this.#e.some(d=>typeof d!="string"),u=this.#e.map(d=>{let[h,g,b,x]=typeof d=="string"?e.#h(d,this.#s,a):d.toRegExpSource(t);return this.#s=this.#s||b,this.#i=this.#i||x,h}).join(""),p="";if(this.isStart()&&typeof this.#e[0]=="string"&&!(this.#e.length===1&&Ss.has(this.#e[0]))){let h=xs,g=s&&h.has(u.charAt(0))||u.startsWith("\\.")&&h.has(u.charAt(2))||u.startsWith("\\.\\.")&&h.has(u.charAt(4)),b=!s&&!t&&h.has(u.charAt(0));p=g?ws:b?$e:""}let l="";return this.isEnd()&&this.#n.#a&&this.#t?.type==="!"&&(l="(?:$|\\/)"),[p+u+l,q(u),this.#s=!!this.#s,this.#i]}let n=this.type==="*"||this.type==="+",o=this.type==="!"?"(?:(?!(?:":"(?:",i=this.#f(s);if(this.isStart()&&this.isEnd()&&!i&&this.type!=="!"){let a=this.toString();return this.#e=[a],this.type=null,this.#s=void 0,[a,q(this.toString()),!1,!1]}let r=!n||t||s||!$e?"":this.#f(!0);r===i&&(r=""),r&&(i=`(?:${i})(?:${r})*?`);let c="";if(this.type==="!"&&this.#p)c=(this.isStart()&&!s?$e:"")+Ht;else{let a=this.type==="!"?"))"+(this.isStart()&&!s&&!t?$e:"")+_t+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&r?")":this.type==="*"&&r?")?":`)${this.type}`;c=o+i+a}return[c,q(i),this.#s=!!this.#s,this.#i]}#f(t){return this.#e.map(s=>{if(typeof s=="string")throw new Error("string type in extglob ast??");let[n,o,i,r]=s.toRegExpSource(t);return this.#i=this.#i||r,n}).filter(s=>!(this.isStart()&&this.isEnd())||!!s).join("|")}static#h(t,s,n=!1){let o=!1,i="",r=!1,c=!1;for(let a=0;a<t.length;a++){let u=t.charAt(a);if(o){o=!1,i+=(Rs.has(u)?"\\":"")+u;continue}if(u==="*"){if(c)continue;c=!0,i+=n&&/^[*]+$/.test(t)?Ht:_t,s=!0;continue}else c=!1;if(u==="\\"){a===t.length-1?i+="\\\\":o=!0;continue}if(u==="["){let[p,l,f,d]=Wt(t,a);if(f){i+=p,r=r||l,a+=f-1,s=s||d;continue}}if(u==="?"){i+=at,s=!0;continue}i+=Es(u)}return[i,q(t),!!s,r]}};var ct=(e,{windowsPathsNoEscape:t=!1,magicalBraces:s=!1}={})=>s?t?e.replace(/[?*()[\]{}]/g,"[$&]"):e.replace(/[?*()[\]\\{}]/g,"\\$&"):t?e.replace(/[?*()[\]]/g,"[$&]"):e.replace(/[?*()[\]\\]/g,"\\$&");var A=(e,t,s={})=>(ke(t),!s.nocomment&&t.charAt(0)==="#"?!1:new se(t,s).match(e)),Ts=/^\*+([^+@!?\*\[\(]*)$/,As=e=>t=>!t.startsWith(".")&&t.endsWith(e),Ms=e=>t=>t.endsWith(e),Ps=e=>(e=e.toLowerCase(),t=>!t.startsWith(".")&&t.toLowerCase().endsWith(e)),$s=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),Os=/^\*+\.\*+$/,Is=e=>!e.startsWith(".")&&e.includes("."),Cs=e=>e!=="."&&e!==".."&&e.includes("."),Ls=/^\.\*+$/,Ns=e=>e!=="."&&e!==".."&&e.startsWith("."),Ds=/^\*+$/,js=e=>e.length!==0&&!e.startsWith("."),Vs=e=>e.length!==0&&e!=="."&&e!=="..",Fs=/^\?+([^+@!?\*\[\(]*)?$/,Ws=([e,t=""])=>{let s=zt([e]);return t?(t=t.toLowerCase(),n=>s(n)&&n.toLowerCase().endsWith(t)):s},Bs=([e,t=""])=>{let s=qt([e]);return t?(t=t.toLowerCase(),n=>s(n)&&n.toLowerCase().endsWith(t)):s},_s=([e,t=""])=>{let s=qt([e]);return t?n=>s(n)&&n.endsWith(t):s},Hs=([e,t=""])=>{let s=zt([e]);return t?n=>s(n)&&n.endsWith(t):s},zt=([e])=>{let t=e.length;return s=>s.length===t&&!s.startsWith(".")},qt=([e])=>{let t=e.length;return s=>s.length===t&&s!=="."&&s!==".."},Jt=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",Gt={win32:{sep:"\\"},posix:{sep:"/"}},Gs=Jt==="win32"?Gt.win32.sep:Gt.posix.sep;A.sep=Gs;var L=Symbol("globstar **");A.GLOBSTAR=L;var Us="[^/]",zs=Us+"*?",qs="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",Js="(?:(?!(?:\\/|^)\\.).)*?",Xs=(e,t={})=>s=>A(s,e,t);A.filter=Xs;var C=(e,t={})=>Object.assign({},e,t),Qs=e=>{if(!e||typeof e!="object"||!Object.keys(e).length)return A;let t=A;return Object.assign((n,o,i={})=>t(n,o,C(e,i)),{Minimatch:class extends t.Minimatch{constructor(o,i={}){super(o,C(e,i))}static defaults(o){return t.defaults(C(e,o)).Minimatch}},AST:class extends t.AST{constructor(o,i,r={}){super(o,i,C(e,r))}static fromGlob(o,i={}){return t.AST.fromGlob(o,C(e,i))}},unescape:(n,o={})=>t.unescape(n,C(e,o)),escape:(n,o={})=>t.escape(n,C(e,o)),filter:(n,o={})=>t.filter(n,C(e,o)),defaults:n=>t.defaults(C(e,n)),makeRe:(n,o={})=>t.makeRe(n,C(e,o)),braceExpand:(n,o={})=>t.braceExpand(n,C(e,o)),match:(n,o,i={})=>t.match(n,o,C(e,i)),sep:t.sep,GLOBSTAR:L})};A.defaults=Qs;var Xt=(e,t={})=>(ke(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:Vt(e,{max:t.braceExpandMax}));A.braceExpand=Xt;var Zs=(e,t={})=>new se(e,t).makeRe();A.makeRe=Zs;var Ys=(e,t,s={})=>{let n=new se(t,s);return e=e.filter(o=>n.match(o)),n.options.nonull&&!e.length&&e.push(t),e};A.match=Ys;var Ut=/[?*]|[+@!]\(.*?\)|\[|\]/,Ks=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),se=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,s={}){ke(t),s=s||{},this.options=s,this.pattern=t,this.platform=s.platform||Jt,this.isWindows=this.platform==="win32";let n="allowWindowsEscape";this.windowsPathsNoEscape=!!s.windowsPathsNoEscape||s[n]===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!s.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!s.nonegate,this.comment=!1,this.empty=!1,this.partial=!!s.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=s.windowsNoMagicRoot!==void 0?s.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let t of this.set)for(let s of t)if(typeof s!="string")return!0;return!1}debug(...t){}make(){let t=this.pattern,s=this.options;if(!s.nocomment&&t.charAt(0)==="#"){this.comment=!0;return}if(!t){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],s.debug&&(this.debug=(...i)=>console.error(...i)),this.debug(this.pattern,this.globSet);let n=this.globSet.map(i=>this.slashSplit(i));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let o=this.globParts.map((i,r,c)=>{if(this.isWindows&&this.windowsNoMagicRoot){let a=i[0]===""&&i[1]===""&&(i[2]==="?"||!Ut.test(i[2]))&&!Ut.test(i[3]),u=/^[a-z]:/i.test(i[0]);if(a)return[...i.slice(0,4),...i.slice(4).map(p=>this.parse(p))];if(u)return[i[0],...i.slice(1).map(p=>this.parse(p))]}return i.map(a=>this.parse(a))});if(this.debug(this.pattern,o),this.set=o.filter(i=>i.indexOf(!1)===-1),this.isWindows)for(let i=0;i<this.set.length;i++){let r=this.set[i];r[0]===""&&r[1]===""&&this.globParts[i][2]==="?"&&typeof r[3]=="string"&&/^[a-z]:$/i.test(r[3])&&(r[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let n=0;n<t.length;n++)for(let o=0;o<t[n].length;o++)t[n][o]==="**"&&(t[n][o]="*");let{optimizationLevel:s=1}=this.options;return s>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):s>=1?t=this.levelOneOptimize(t):t=this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map(s=>{let n=-1;for(;(n=s.indexOf("**",n+1))!==-1;){let o=n;for(;s[o+1]==="**";)o++;o!==n&&s.splice(n,o-n)}return s})}levelOneOptimize(t){return t.map(s=>(s=s.reduce((n,o)=>{let i=n[n.length-1];return o==="**"&&i==="**"?n:o===".."&&i&&i!==".."&&i!=="."&&i!=="**"?(n.pop(),n):(n.push(o),n)},[]),s.length===0?[""]:s))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let s=!1;do{if(s=!1,!this.preserveMultipleSlashes){for(let o=1;o<t.length-1;o++){let i=t[o];o===1&&i===""&&t[0]===""||(i==="."||i==="")&&(s=!0,t.splice(o,1),o--)}t[0]==="."&&t.length===2&&(t[1]==="."||t[1]==="")&&(s=!0,t.pop())}let n=0;for(;(n=t.indexOf("..",n+1))!==-1;){let o=t[n-1];o&&o!=="."&&o!==".."&&o!=="**"&&(s=!0,t.splice(n-1,2),n-=2)}}while(s);return t.length===0?[""]:t}firstPhasePreProcess(t){let s=!1;do{s=!1;for(let n of t){let o=-1;for(;(o=n.indexOf("**",o+1))!==-1;){let r=o;for(;n[r+1]==="**";)r++;r>o&&n.splice(o+1,r-o);let c=n[o+1],a=n[o+2],u=n[o+3];if(c!==".."||!a||a==="."||a===".."||!u||u==="."||u==="..")continue;s=!0,n.splice(o,1);let p=n.slice(0);p[o]="**",t.push(p),o--}if(!this.preserveMultipleSlashes){for(let r=1;r<n.length-1;r++){let c=n[r];r===1&&c===""&&n[0]===""||(c==="."||c==="")&&(s=!0,n.splice(r,1),r--)}n[0]==="."&&n.length===2&&(n[1]==="."||n[1]==="")&&(s=!0,n.pop())}let i=0;for(;(i=n.indexOf("..",i+1))!==-1;){let r=n[i-1];if(r&&r!=="."&&r!==".."&&r!=="**"){s=!0;let a=i===1&&n[i+1]==="**"?["."]:[];n.splice(i-1,2,...a),n.length===0&&n.push(""),i-=2}}}}while(s);return t}secondPhasePreProcess(t){for(let s=0;s<t.length-1;s++)for(let n=s+1;n<t.length;n++){let o=this.partsMatch(t[s],t[n],!this.preserveMultipleSlashes);if(o){t[s]=[],t[n]=o;break}}return t.filter(s=>s.length)}partsMatch(t,s,n=!1){let o=0,i=0,r=[],c="";for(;o<t.length&&i<s.length;)if(t[o]===s[i])r.push(c==="b"?s[i]:t[o]),o++,i++;else if(n&&t[o]==="**"&&s[i]===t[o+1])r.push(t[o]),o++;else if(n&&s[i]==="**"&&t[o]===s[i+1])r.push(s[i]),i++;else if(t[o]==="*"&&s[i]&&(this.options.dot||!s[i].startsWith("."))&&s[i]!=="**"){if(c==="b")return!1;c="a",r.push(t[o]),o++,i++}else if(s[i]==="*"&&t[o]&&(this.options.dot||!t[o].startsWith("."))&&t[o]!=="**"){if(c==="a")return!1;c="b",r.push(s[i]),o++,i++}else return!1;return t.length===s.length&&r}parseNegate(){if(this.nonegate)return;let t=this.pattern,s=!1,n=0;for(let o=0;o<t.length&&t.charAt(o)==="!";o++)s=!s,n++;n&&(this.pattern=t.slice(n)),this.negate=s}matchOne(t,s,n=!1){let o=this.options;if(this.isWindows){let g=typeof t[0]=="string"&&/^[a-z]:$/i.test(t[0]),b=!g&&t[0]===""&&t[1]===""&&t[2]==="?"&&/^[a-z]:$/i.test(t[3]),x=typeof s[0]=="string"&&/^[a-z]:$/i.test(s[0]),T=!x&&s[0]===""&&s[1]===""&&s[2]==="?"&&typeof s[3]=="string"&&/^[a-z]:$/i.test(s[3]),m=b?3:g?0:void 0,w=T?3:x?0:void 0;if(typeof m=="number"&&typeof w=="number"){let[k,v]=[t[m],s[w]];k.toLowerCase()===v.toLowerCase()&&(s[w]=k,w>m?s=s.slice(w):m>w&&(t=t.slice(m)))}}let{optimizationLevel:i=1}=this.options;i>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:s}),this.debug("matchOne",t.length,s.length);for(var r=0,c=0,a=t.length,u=s.length;r<a&&c<u;r++,c++){this.debug("matchOne loop");var p=s[c],l=t[r];if(this.debug(s,p,l),p===!1)return!1;if(p===L){this.debug("GLOBSTAR",[s,p,l]);var f=r,d=c+1;if(d===u){for(this.debug("** at the end");r<a;r++)if(t[r]==="."||t[r]===".."||!o.dot&&t[r].charAt(0)===".")return!1;return!0}for(;f<a;){var h=t[f];if(this.debug(`
2
+ globstar while`,t,f,s,d,h),this.matchOne(t.slice(f),s.slice(d),n))return this.debug("globstar found match!",f,a,h),!0;if(h==="."||h===".."||!o.dot&&h.charAt(0)==="."){this.debug("dot detected!",t,f,s,d);break}this.debug("globstar swallow a segment, and continue"),f++}return!!(n&&(this.debug(`
3
+ >>> no match, partial?`,t,f,s,d),f===a))}let g;if(typeof p=="string"?(g=l===p,this.debug("string match",p,l,g)):(g=p.test(l),this.debug("pattern match",p,l,g)),!g)return!1}if(r===a&&c===u)return!0;if(r===a)return n;if(c===u)return r===a-1&&t[r]==="";throw new Error("wtf?")}braceExpand(){return Xt(this.pattern,this.options)}parse(t){ke(t);let s=this.options;if(t==="**")return L;if(t==="")return"";let n,o=null;(n=t.match(Ds))?o=s.dot?Vs:js:(n=t.match(Ts))?o=(s.nocase?s.dot?$s:Ps:s.dot?Ms:As)(n[1]):(n=t.match(Fs))?o=(s.nocase?s.dot?Bs:Ws:s.dot?_s:Hs)(n):(n=t.match(Os))?o=s.dot?Cs:Is:(n=t.match(Ls))&&(o=Ns);let i=ne.fromGlob(t,this.options).toMMPattern();return o&&typeof i=="object"&&Reflect.defineProperty(i,"test",{value:o}),i}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let t=this.set;if(!t.length)return this.regexp=!1,this.regexp;let s=this.options,n=s.noglobstar?zs:s.dot?qs:Js,o=new Set(s.nocase?["i"]:[]),i=t.map(a=>{let u=a.map(l=>{if(l instanceof RegExp)for(let f of l.flags.split(""))o.add(f);return typeof l=="string"?Ks(l):l===L?L:l._src});u.forEach((l,f)=>{let d=u[f+1],h=u[f-1];l!==L||h===L||(h===void 0?d!==void 0&&d!==L?u[f+1]="(?:\\/|"+n+"\\/)?"+d:u[f]=n:d===void 0?u[f-1]=h+"(?:\\/|\\/"+n+")?":d!==L&&(u[f-1]=h+"(?:\\/|\\/"+n+"\\/)"+d,u[f+1]=L))});let p=u.filter(l=>l!==L);if(this.partial&&p.length>=1){let l=[];for(let f=1;f<=p.length;f++)l.push(p.slice(0,f).join("/"));return"(?:"+l.join("|")+")"}return p.join("/")}).join("|"),[r,c]=t.length>1?["(?:",")"]:["",""];i="^"+r+i+c+"$",this.partial&&(i="^(?:\\/|"+r+i.slice(1,-1)+c+")$"),this.negate&&(i="^(?!"+i+").+$");try{this.regexp=new RegExp(i,[...o].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,s=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return t==="";if(t==="/"&&s)return!0;let n=this.options;this.isWindows&&(t=t.split("\\").join("/"));let o=this.slashSplit(t);this.debug(this.pattern,"split",o);let i=this.set;this.debug(this.pattern,"set",i);let r=o[o.length-1];if(!r)for(let c=o.length-2;!r&&c>=0;c--)r=o[c];for(let c=0;c<i.length;c++){let a=i[c],u=o;if(n.matchBase&&a.length===1&&(u=[r]),this.matchOne(u,a,s))return n.flipNegate?!0:!this.negate}return n.flipNegate?!1:this.negate}static defaults(t){return A.defaults(t).Minimatch}};A.AST=ne;A.Minimatch=se;A.escape=ct;A.unescape=q;var N="pickety.json",Ie=["ts","tsx","js","jsx","mjs","cjs"],Q=`**/*.{${Ie.join(",")}}`,oe=new Set(["node_modules",".git",".next","dist","out","build",".turbo",".cache",".nx","coverage"]);function E(e){let t=e.replace(/\\/g,"/");return/^[a-zA-Z]:/.test(t)&&(t=t[0].toLowerCase()+t.slice(1)),t}function Ce(e,t){return Oe.relative(e,t).replace(/\\/g,"/")}function lt(e,t){return A(e,t)||e===t}function ie(e){return Oe.join(e,N)}function H(e,t){return e==="instability"?t.toFixed(2):String(t)}async function Qt(e,t){let s=ie(e);if(Le.existsSync(s)&&await re.window.showWarningMessage("pickety.json already exists. Overwrite?","Yes","No")!=="Yes")return;Le.writeFileSync(s,JSON.stringify({$schema:"https://raw.githubusercontent.com/DanielSerio/pickety/main/resources/pickety.schema.json",modules:{features:"src/features/*",components:"src/components/**/*",utils:"src/utils/**/*"},rules:{"module-boundaries":{severity:"error",rules:[{importer:"features",imports:"features",allow:!0,message:"Features can import from their own module."},{importer:"features",imports:"components",allow:!0},{importer:"features",imports:"utils",allow:!0}]}},"boundary-diagrams":!0},null,2)),re.window.showInformationMessage("Pickety: pickety.json created.");let o=await re.workspace.openTextDocument(s);await re.window.showTextDocument(o),t()}var dt=R(require("vscode"));var J=R(require("path"));function Ne(e,t,s){let n=ut(e),o=e.name??`rule[${t}]`,i=e.group,r=i?`${i}: ${o}`:o;return{allow:e.allow??!1,severity:e.severity??s,name:o,group:i,label:r,effectiveImporter:n?.path||e.importer||"*",isOnly:e.only||!!e.containedTo,isAllowStyle:(e.allow??!1)||!!e.containedTo||!!e.only}}function Zt(e,t,s){let n=Ne(e,t,s),o=Array.isArray(e.imports)?e.imports:[e.imports];return{rule:e,...n,importPatterns:o.filter(i=>typeof i=="string")}}function F(e,t,s){let n=e.includes("[")?e.slice(0,e.indexOf("[")):e;return!!(lt(e,s)||lt(n,s)||s.includes("/")&&(A(t,s)||A(t,`**/${s}`)||A(t,`**/${s}/**`)))}function ut(e){if(e.containedTo)return typeof e.containedTo=="object"?e.containedTo:{path:e.containedTo}}function Z(e,t,s,n,o,i,r,c,a){return{file:e,line:t.line,character:t.character,length:t.length,message:`[${n}] ${o} (importing "${t.specifier}")`,severity:i,ruleName:s,ruleGroup:a,sourceModule:r,targetModule:c}}function Yt(e){let t=[],s=new Set,n=new Set,o=[];function i(r){s.add(r),n.add(r),o.push(r);let c=e.get(r);if(c){for(let a of c)if(!s.has(a))i(a);else if(n.has(a)){let u=o.indexOf(a);u!==-1&&t.push([...o.slice(u),a])}}n.delete(r),o.pop()}for(let r of e.keys())s.has(r)||i(r);return t}function W(e){return e.match(/\$[\w-]+/g)||[]}function Kt(e){let t=new Set;for(let s of e)for(let n of W(s))t.add(n);return[...t]}function xe(e,t,s){let n=e.split("/"),o=t.split("/"),i=0,r=n.filter(a=>a!=="**").length,c=o.length-r;for(let a=i;a<=c;a++){let u=en(n,o,a,s);if(u)return u}}function en(e,t,s,n){let o={},i=s;for(let r=0;r<e.length;r++){let c=e[r];if(c==="**"){let l=e.slice(r+1);if(l.length===0)return o;for(let f=i;f<=t.length-l.length;f++){let d=en(l,t,f,n);if(d)return{...o,...d}}return}if(i>=t.length)return;let a=c,u=[];for(let l of n)a.includes(l)&&(a=a.replace(l,`__VAR_${u.length}__`),u.push(l));a=a.replace(/[.+?^{}()|[\]\\]/g,"\\$&"),a=a.replace(/\*/g,"[^/]*");for(let l=0;l<u.length;l++)a=a.replace(`__VAR_${l}__`,"([^/]+)");let p=t[i].match(new RegExp(`^${a}$`));if(!p)return;for(let l=0;l<u.length;l++)o[u[l]]=p[l+1];i++}return o}function Y(e,t,s){let n=e;for(let o of t){let i=typeof s=="string"?s:s[o];n=n.replaceAll(o,i)}return n}var nn=Ie.map(e=>`.${e}`),eo=nn.map(e=>`index${e}`),tn=/(\/\*[\s\S]*?\*\/|\/\/.*)|(['"`](?:\\.|[^'"`])*['"`])|((?:import|export)\s+(?:[\s\S]*?from\s+)?['"`]([^'"`]+)['"`])|(import\s*\(\s*['"`]([^'"`]+)['"`]\s*\))/gm;function to(e){let t=[],s=e.split(`
4
+ `),n=[],o=0;for(let c of s)n.push(o),o+=c.length+1;let i=c=>{let a=0;for(let u=1;u<n.length&&!(n[u]>c);u++)a=u;return{line:a,character:c-n[a]}},r;for(tn.lastIndex=0;(r=tn.exec(e))!==null;){let[c,a,u,p,l,f,d]=r;if(!(a||u)){if(p&&l){let h=i(r.index);t.push({specifier:l,line:h.line,character:h.character,length:p.length})}else if(f&&d){let h=i(r.index);t.push({specifier:d,line:h.line,character:h.character,length:f.length})}}}return t}function no(e,t,s){let{knownFiles:n,root:o,aliases:i}=s;for(let[r,c]of Object.entries(i))if(r.endsWith("/*")){let a=r.slice(0,-2),u=c.endsWith("/*")?c.slice(0,-2):c==="*"?"./":c;if(e.startsWith(a)){let p=e.replace(a,u);return pt(J.resolve(o,p),n)}}else if(e===r)return pt(J.resolve(o,c),n);if(e.startsWith(".")){let r=J.dirname(t),c=J.resolve(r,e);return pt(c,n)}}function pt(e,t){let s=E(e);if(t.has(s))return s;for(let n of nn){let o=s+n;if(t.has(o))return o}for(let n of eo){let o=s+"/"+n;if(t.has(o))return o}}function so(e){return e.endsWith("/*")?e.slice(0,-2)+"/**/*":e}function oo(e,t,s){if(t.length===0)return e;let n=t.map(o=>s[o]);return`${e}[${n.join(",")}]`}function io(e,t,s){let n=E(J.relative(s,e));for(let[o,i]of Object.entries(t)){let r=so(i),c=W(i);if(c.length>0){let a=xe(r,n,c)||(r!==i?xe(i,n,c):void 0);if(a)return{name:oo(o,c,a),pattern:i,relativePath:n,variables:a};continue}if(A(n,r)||A(n,i))return{name:o,pattern:i,relativePath:n}}}function D(e,t,s){return io(e,t,s)?.name}function De(e,t,s){let n=to(t),o=[];for(let i of n){let r=no(i.specifier,e,s);r&&o.push({statement:i,resolvedPath:r})}return o}function ae(e,t,s){let{root:n,knownFiles:o}=s,i=e.getModuleLevelGraph(t,n),r=Object.keys(t),c=new Map;for(let l of r)c.set(l,0);for(let l of o){let f=D(l,t,n);f&&c.set(f,(c.get(f)??0)+1)}let a=new Map;for(let l of r)a.set(l,0);for(let[,l]of i)for(let f of l)a.set(f,(a.get(f)??0)+1);let u=ro(i,r),p=r.map(l=>{let f=a.get(l)??0,d=i.get(l)?.size??0,h=f+d;return{moduleName:l,fileCount:c.get(l)??0,afferentCoupling:f,efferentCoupling:d,instability:h===0?0:d/h,dependencyDepth:u.get(l)??0}});return p.sort((l,f)=>l.instability-f.instability),p}function ro(e,t){let s=new Map,n=new Set;function o(i){if(s.has(i))return s.get(i);if(n.has(i))return 0;n.add(i);let r=e.get(i),c=0;if(r&&r.size>0)for(let a of r)c=Math.max(c,1+o(a));return n.delete(i),s.set(i,c),c}for(let i of t)o(i);return s}function sn(e,t){let s=[],n=[{key:"maxAfferentCoupling",label:"afferent coupling",getValue:o=>o.afferentCoupling},{key:"maxEfferentCoupling",label:"efferent coupling",getValue:o=>o.efferentCoupling},{key:"maxInstability",label:"instability",getValue:o=>o.instability},{key:"maxDepth",label:"dependency depth",getValue:o=>o.dependencyDepth}];for(let o of e)for(let i of n){let r=t[i.key],c=i.getValue(o);r!==void 0&&c>r&&s.push({moduleName:o.moduleName,metric:i.label,value:c,threshold:r})}return s}var U=R(require("fs")),G=R(require("path"));function je(e,t,s){let n=e["boundary-diagrams"];if(!n)return;let o="picket-boundaries.mermaid",i;if(typeof n=="string"){let u=G.resolve(t,n);try{U.existsSync(u)&&U.statSync(u).isDirectory()?i=G.join(u,o):i=u}catch{i=u}}else i=G.join(t,o);let r=E(G.resolve(t));if(!E(G.resolve(i)).startsWith(r+"/")){console.error(`Pickety: Diagram output path "${n}" escapes the workspace root. Ignoring.`);return}let a=ao(e,s);try{let u=G.dirname(i);return U.existsSync(u)||U.mkdirSync(u,{recursive:!0}),U.writeFileSync(i,a,"utf-8"),i}catch(u){console.error(`Pickety: Failed to write Mermaid diagram to ${i}`,u);return}}function ft(e){return e.replace(/"/g,"#quot;").replace(/\[/g,"#lsqb;").replace(/\]/g,"#rsqb;").replace(/\|/g,"#vert;").replace(/</g,"#lt;").replace(/>/g,"#gt;")}function ao(e,t){let s=["graph LR"],n=e.modules,o=e.rules["module-boundaries"].rules,i=e.rules["module-boundaries"].severity,r=new Map;if(t)for(let h of t)r.set(h.moduleName,h);s.push(""),s.push(" %% Node Styles"),s.push(" classDef module fill:#f1f5f9,stroke:#64748b,stroke-width:2px;"),s.push(" classDef external fill:#ffffff,stroke:#94a3b8,stroke-width:1px,stroke-dasharray: 5 5;");let c=new Map,a=new Set(Object.keys(n));o.forEach((h,g)=>{let{effectiveImporter:b}=Ne(h,g,i);a.add(b),(Array.isArray(h.imports)?h.imports:[h.imports]).forEach(T=>{typeof T=="string"&&a.add(T)})}),a.forEach(h=>{let g=h.split("/"),b=g.length>1?g[0]:"Base",x=c.get(b)??[];x.push(h),c.set(b,x)});let u=new Map,p=0,l=h=>(u.has(h)||u.set(h,`n${p++}`),u.get(h));c.forEach((h,g)=>{s.push(""),s.push(` subgraph c${p++} [" ${ft(g)} "]`),h.forEach(b=>{let x=l(b),T=!!n[b],m=r.get(b),w=ft(b);m&&(w+=`<br/><small>Ca:${m.afferentCoupling} Ce:${m.efferentCoupling} I:${m.instability.toFixed(2)}</small>`);let k=b.includes("$")?`(["${w}"])`:`["${w}"]`,v=T?"module":"external";s.push(` ${x}${k}:::${v}`)}),s.push(" end")}),s.push(""),s.push(" %% Boundary Rules");let f=[],d=0;return o.forEach((h,g)=>{let{allow:b,name:x,effectiveImporter:T,isAllowStyle:m,isOnly:w}=Ne(h,g,i),k=Array.isArray(h.imports)?h.imports:[h.imports],v=l(T);k.forEach(y=>{if(typeof y!="string")return;let j=l(y),me=m?"-->":"-.->",ye=b?"ALLOW":"DENY",nt=h.message||`${ye}: ${x}`;s.push(` ${v} ${me}|"${ft(nt)}"| ${j}`);let st=m?"#22c55e":"#ef4444",be=w?"4px":"2px",S=m?"":",stroke-dasharray:5";f.push(` linkStyle ${d++} stroke:${st},stroke-width:${be}${S}`)})}),s.concat(f).join(`
5
+ `)}var on=R(require("vscode"));function ce(e){return e?!0:(on.window.showErrorMessage("Pickety: No active configuration. Check pickety.json for errors."),!1)}function rn(e,t,s){if(!ce(e))return;let n=ae(t,e.modules,s),o=je(e,s.root,n);o?dt.window.showInformationMessage(`Pickety: Generated boundary diagram at ${o}`):dt.window.showErrorMessage("Pickety: Failed to generate diagram. Is 'boundary-diagrams' enabled in pickety.json?")}var We=R(require("vscode"));var K;function cn(e,t){if(K){K.reveal(),K.webview.html=an(e,t);return}K=We.window.createWebviewPanel("picketyHealth","Pickety: Module Health",We.ViewColumn.One,{enableScripts:!1}),K.webview.html=an(e,t),K.onDidDispose(()=>{K=void 0})}function Ve(e){let t=Math.max(0,Math.min(1,e));return`background-color: hsla(${Math.round((1-t)*140)}, 75%, 40%, 0.9); color: white; text-shadow: 0 1px 1px rgba(0,0,0,0.3);`}function Fe(e,t){return t===void 0?"":e>t?"exceeds":e>=t*.8?"approaching":""}function an(e,t){let s=Math.max(1,...e.map(r=>r.afferentCoupling)),n=Math.max(1,...e.map(r=>r.efferentCoupling)),o=Math.max(1,...e.map(r=>r.dependencyDepth));return`<!DOCTYPE html>
6
6
  <html lang="en">
7
7
  <head>
8
8
  <meta charset="UTF-8">
@@ -115,13 +115,13 @@ globstar while`,t,u,s,d,h),this.matchOne(t.slice(u),s.slice(d),n))return this.de
115
115
  </tr>
116
116
  </thead>
117
117
  <tbody>
118
- ${e.map((r,c)=>{let a=r.afferentCoupling/s,l=r.efferentCoupling/n,p=r.instability,f=r.dependencyDepth/i,u=Ce(r.afferentCoupling,t?.maxAfferentCoupling),d=Ce(r.efferentCoupling,t?.maxEfferentCoupling),h=Ce(r.instability,t?.maxInstability),g=Ce(r.dependencyDepth,t?.maxDepth);return`<tr${c%2===1?' class="alt"':""}>
119
- <td class="module-name">${Hs(r.moduleName)}</td>
118
+ ${e.map((r,c)=>{let a=r.afferentCoupling/s,u=r.efferentCoupling/n,p=r.instability,l=r.dependencyDepth/o,f=Fe(r.afferentCoupling,t?.maxAfferentCoupling),d=Fe(r.efferentCoupling,t?.maxEfferentCoupling),h=Fe(r.instability,t?.maxInstability),g=Fe(r.dependencyDepth,t?.maxDepth);return`<tr${c%2===1?' class="alt"':""}>
119
+ <td class="module-name">${co(r.moduleName)}</td>
120
120
  <td class="num">${r.fileCount}</td>
121
- <td class="num ${u}" style="${De(a)}">${W("ca",r.afferentCoupling)}</td>
122
- <td class="num ${d}" style="${De(l)}">${W("ce",r.efferentCoupling)}</td>
123
- <td class="num ${h}" style="${De(p)}">${W("instability",r.instability)}</td>
124
- <td class="num ${g}" style="${De(f)}">${W("depth",r.dependencyDepth)}</td>
121
+ <td class="num ${f}" style="${Ve(a)}">${H("ca",r.afferentCoupling)}</td>
122
+ <td class="num ${d}" style="${Ve(u)}">${H("ce",r.efferentCoupling)}</td>
123
+ <td class="num ${h}" style="${Ve(p)}">${H("instability",r.instability)}</td>
124
+ <td class="num ${g}" style="${Ve(l)}">${H("depth",r.dependencyDepth)}</td>
125
125
  </tr>`}).join(`
126
126
  `)}
127
127
  </tbody>
@@ -136,18 +136,18 @@ globstar while`,t,u,s,d,h),this.matchOne(t.slice(u),s.slice(d),n))return this.de
136
136
  `:""}
137
137
  </div>
138
138
  </body>
139
- </html>`}function Hs(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Yt(e,t,s){if(!ae(e))return;let n=re(t,e.modules,s);Zt(n,e.health)}var j=S(require("vscode")),Kt=S(require("path"));async function en(e,t,s){let n=s.root,i=j.window.activeTextEditor;if(!i){j.window.showErrorMessage("Pickety: No active file.");return}if(!ae(e))return;let o=A(i.document.uri.fsPath),r=t.getTransitiveDependents(o);if(r.size===0){j.window.showInformationMessage("Pickety: No dependents found for this file.");return}let c=new Map;for(let u of r){let d=N(u,e.modules,n)??"(unmatched)";c.has(d)||c.set(d,[]),c.get(d).push(Ie(n,u))}let a=[];for(let[u,d]of c){a.push({label:u,kind:j.QuickPickItemKind.Separator});for(let h of d)a.push({label:h,description:u})}let l=Ie(n,o),p=c.size,f=await j.window.showQuickPick(a,{title:`Impact: ${l} (${r.size} files across ${p} modules)`,placeHolder:"Select a file to open"});if(f&&f.kind!==j.QuickPickItemKind.Separator){let u=Kt.join(n,f.label),d=await j.workspace.openTextDocument(u);await j.window.showTextDocument(d)}}var O=S(require("vscode")),mt=S(require("path")),yt=S(require("fs"));function we(e,t=!1){let s=e.length,n=0,i="",o=0,r=16,c=0,a=0,l=0,p=0,f=0;function u(y,w){let v=0,k=0;for(;v<y||!w;){let m=e.charCodeAt(n);if(m>=48&&m<=57)k=k*16+m-48;else if(m>=65&&m<=70)k=k*16+m-65+10;else if(m>=97&&m<=102)k=k*16+m-97+10;else break;n++,v++}return v<y&&(k=-1),k}function d(y){n=y,i="",o=0,r=16,f=0}function h(){let y=n;if(e.charCodeAt(n)===48)n++;else for(n++;n<e.length&&ce(e.charCodeAt(n));)n++;if(n<e.length&&e.charCodeAt(n)===46)if(n++,n<e.length&&ce(e.charCodeAt(n)))for(n++;n<e.length&&ce(e.charCodeAt(n));)n++;else return f=3,e.substring(y,n);let w=n;if(n<e.length&&(e.charCodeAt(n)===69||e.charCodeAt(n)===101))if(n++,(n<e.length&&e.charCodeAt(n)===43||e.charCodeAt(n)===45)&&n++,n<e.length&&ce(e.charCodeAt(n))){for(n++;n<e.length&&ce(e.charCodeAt(n));)n++;w=n}else f=3;return e.substring(y,w)}function g(){let y="",w=n;for(;;){if(n>=s){y+=e.substring(w,n),f=2;break}let v=e.charCodeAt(n);if(v===34){y+=e.substring(w,n),n++;break}if(v===92){if(y+=e.substring(w,n),n++,n>=s){f=2;break}switch(e.charCodeAt(n++)){case 34:y+='"';break;case 92:y+="\\";break;case 47:y+="/";break;case 98:y+="\b";break;case 102:y+="\f";break;case 110:y+=`
140
- `;break;case 114:y+="\r";break;case 116:y+=" ";break;case 117:let m=u(4,!0);m>=0?y+=String.fromCharCode(m):f=4;break;default:f=5}w=n;continue}if(v>=0&&v<=31)if(ke(v)){y+=e.substring(w,n),f=2;break}else f=6;n++}return y}function b(){if(i="",f=0,o=n,a=c,p=l,n>=s)return o=s,r=17;let y=e.charCodeAt(n);if(pt(y)){do n++,i+=String.fromCharCode(y),y=e.charCodeAt(n);while(pt(y));return r=15}if(ke(y))return n++,i+=String.fromCharCode(y),y===13&&e.charCodeAt(n)===10&&(n++,i+=`
141
- `),c++,l=n,r=14;switch(y){case 123:return n++,r=1;case 125:return n++,r=2;case 91:return n++,r=3;case 93:return n++,r=4;case 58:return n++,r=6;case 44:return n++,r=5;case 34:return n++,i=g(),r=10;case 47:let w=n-1;if(e.charCodeAt(n+1)===47){for(n+=2;n<s&&!ke(e.charCodeAt(n));)n++;return i=e.substring(w,n),r=12}if(e.charCodeAt(n+1)===42){n+=2;let v=s-1,k=!1;for(;n<v;){let m=e.charCodeAt(n);if(m===42&&e.charCodeAt(n+1)===47){n+=2,k=!0;break}n++,ke(m)&&(m===13&&e.charCodeAt(n)===10&&n++,c++,l=n)}return k||(n++,f=1),i=e.substring(w,n),r=13}return i+=String.fromCharCode(y),n++,r=16;case 45:if(i+=String.fromCharCode(y),n++,n===s||!ce(e.charCodeAt(n)))return r=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return i+=h(),r=11;default:for(;n<s&&x(y);)n++,y=e.charCodeAt(n);if(o!==n){switch(i=e.substring(o,n),i){case"true":return r=8;case"false":return r=9;case"null":return r=7}return r=16}return i+=String.fromCharCode(y),n++,r=16}}function x(y){if(pt(y)||ke(y))return!1;switch(y){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function $(){let y;do y=b();while(y>=12&&y<=15);return y}return{setPosition:d,getPosition:()=>n,scan:t?$:b,getToken:()=>r,getTokenValue:()=>i,getTokenOffset:()=>o,getTokenLength:()=>n-o,getTokenStartLine:()=>a,getTokenStartCharacter:()=>o-p,getTokenError:()=>f}}function pt(e){return e===32||e===9}function ke(e){return e===10||e===13}function ce(e){return e>=48&&e<=57}var tn;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(tn||(tn={}));var I=new Array(20).fill(0).map((e,t)=>" ".repeat(t)),le=200,ft={" ":{"\n":new Array(le).fill(0).map((e,t)=>`
142
- `+" ".repeat(t)),"\r":new Array(le).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(le).fill(0).map((e,t)=>`\r
143
- `+" ".repeat(t))}," ":{"\n":new Array(le).fill(0).map((e,t)=>`
144
- `+" ".repeat(t)),"\r":new Array(le).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(le).fill(0).map((e,t)=>`\r
145
- `+" ".repeat(t))}},nn=[`
139
+ </html>`}function co(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function ln(e,t,s){if(!ce(e))return;let n=ae(t,e.modules,s);cn(n,e.health)}var V=R(require("vscode")),un=R(require("path"));async function pn(e,t,s){let n=s.root,o=V.window.activeTextEditor;if(!o){V.window.showErrorMessage("Pickety: No active file.");return}if(!ce(e))return;let i=E(o.document.uri.fsPath),r=t.getTransitiveDependents(i);if(r.size===0){V.window.showInformationMessage("Pickety: No dependents found for this file.");return}let c=new Map;for(let f of r){let d=D(f,e.modules,n)??"(unmatched)";c.has(d)||c.set(d,[]),c.get(d).push(Ce(n,f))}let a=[];for(let[f,d]of c){a.push({label:f,kind:V.QuickPickItemKind.Separator});for(let h of d)a.push({label:h,description:f})}let u=Ce(n,i),p=c.size,l=await V.window.showQuickPick(a,{title:`Impact: ${u} (${r.size} files across ${p} modules)`,placeHolder:"Select a file to open"});if(l&&l.kind!==V.QuickPickItemKind.Separator){let f=un.join(n,l.label),d=await V.workspace.openTextDocument(f);await V.window.showTextDocument(d)}}var P=R(require("vscode")),kt=R(require("path")),wt=R(require("fs"));function Re(e,t=!1){let s=e.length,n=0,o="",i=0,r=16,c=0,a=0,u=0,p=0,l=0;function f(m,w){let k=0,v=0;for(;k<m||!w;){let y=e.charCodeAt(n);if(y>=48&&y<=57)v=v*16+y-48;else if(y>=65&&y<=70)v=v*16+y-65+10;else if(y>=97&&y<=102)v=v*16+y-97+10;else break;n++,k++}return k<m&&(v=-1),v}function d(m){n=m,o="",i=0,r=16,l=0}function h(){let m=n;if(e.charCodeAt(n)===48)n++;else for(n++;n<e.length&&le(e.charCodeAt(n));)n++;if(n<e.length&&e.charCodeAt(n)===46)if(n++,n<e.length&&le(e.charCodeAt(n)))for(n++;n<e.length&&le(e.charCodeAt(n));)n++;else return l=3,e.substring(m,n);let w=n;if(n<e.length&&(e.charCodeAt(n)===69||e.charCodeAt(n)===101))if(n++,(n<e.length&&e.charCodeAt(n)===43||e.charCodeAt(n)===45)&&n++,n<e.length&&le(e.charCodeAt(n))){for(n++;n<e.length&&le(e.charCodeAt(n));)n++;w=n}else l=3;return e.substring(m,w)}function g(){let m="",w=n;for(;;){if(n>=s){m+=e.substring(w,n),l=2;break}let k=e.charCodeAt(n);if(k===34){m+=e.substring(w,n),n++;break}if(k===92){if(m+=e.substring(w,n),n++,n>=s){l=2;break}switch(e.charCodeAt(n++)){case 34:m+='"';break;case 92:m+="\\";break;case 47:m+="/";break;case 98:m+="\b";break;case 102:m+="\f";break;case 110:m+=`
140
+ `;break;case 114:m+="\r";break;case 116:m+=" ";break;case 117:let y=f(4,!0);y>=0?m+=String.fromCharCode(y):l=4;break;default:l=5}w=n;continue}if(k>=0&&k<=31)if(Se(k)){m+=e.substring(w,n),l=2;break}else l=6;n++}return m}function b(){if(o="",l=0,i=n,a=c,p=u,n>=s)return i=s,r=17;let m=e.charCodeAt(n);if(ht(m)){do n++,o+=String.fromCharCode(m),m=e.charCodeAt(n);while(ht(m));return r=15}if(Se(m))return n++,o+=String.fromCharCode(m),m===13&&e.charCodeAt(n)===10&&(n++,o+=`
141
+ `),c++,u=n,r=14;switch(m){case 123:return n++,r=1;case 125:return n++,r=2;case 91:return n++,r=3;case 93:return n++,r=4;case 58:return n++,r=6;case 44:return n++,r=5;case 34:return n++,o=g(),r=10;case 47:let w=n-1;if(e.charCodeAt(n+1)===47){for(n+=2;n<s&&!Se(e.charCodeAt(n));)n++;return o=e.substring(w,n),r=12}if(e.charCodeAt(n+1)===42){n+=2;let k=s-1,v=!1;for(;n<k;){let y=e.charCodeAt(n);if(y===42&&e.charCodeAt(n+1)===47){n+=2,v=!0;break}n++,Se(y)&&(y===13&&e.charCodeAt(n)===10&&n++,c++,u=n)}return v||(n++,l=1),o=e.substring(w,n),r=13}return o+=String.fromCharCode(m),n++,r=16;case 45:if(o+=String.fromCharCode(m),n++,n===s||!le(e.charCodeAt(n)))return r=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return o+=h(),r=11;default:for(;n<s&&x(m);)n++,m=e.charCodeAt(n);if(i!==n){switch(o=e.substring(i,n),o){case"true":return r=8;case"false":return r=9;case"null":return r=7}return r=16}return o+=String.fromCharCode(m),n++,r=16}}function x(m){if(ht(m)||Se(m))return!1;switch(m){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function T(){let m;do m=b();while(m>=12&&m<=15);return m}return{setPosition:d,getPosition:()=>n,scan:t?T:b,getToken:()=>r,getTokenValue:()=>o,getTokenOffset:()=>i,getTokenLength:()=>n-i,getTokenStartLine:()=>a,getTokenStartCharacter:()=>i-p,getTokenError:()=>l}}function ht(e){return e===32||e===9}function Se(e){return e===10||e===13}function le(e){return e>=48&&e<=57}var fn;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(fn||(fn={}));var I=new Array(20).fill(0).map((e,t)=>" ".repeat(t)),ue=200,gt={" ":{"\n":new Array(ue).fill(0).map((e,t)=>`
142
+ `+" ".repeat(t)),"\r":new Array(ue).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(ue).fill(0).map((e,t)=>`\r
143
+ `+" ".repeat(t))}," ":{"\n":new Array(ue).fill(0).map((e,t)=>`
144
+ `+" ".repeat(t)),"\r":new Array(ue).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(ue).fill(0).map((e,t)=>`\r
145
+ `+" ".repeat(t))}},dn=[`
146
146
  `,"\r",`\r
147
- `];function ut(e,t,s){let n,i,o,r,c;if(t){for(r=t.offset,c=r+t.length,o=r;o>0&&!xe(e,o-1);)o--;let v=c;for(;v<e.length&&!xe(e,v);)v++;i=e.substring(o,v),n=zs(i,s)}else i=e,n=0,o=0,r=0,c=e.length;let a=Us(s,e),l=nn.includes(a),p=0,f=0,u;s.insertSpaces?u=I[s.tabSize||4]??pe(I[1],s.tabSize||4):u=" ";let d=u===" "?" ":" ",h=we(i,!1),g=!1;function b(){if(p>1)return pe(a,p)+pe(u,n+f);let v=u.length*(n+f);return!l||v>ft[d][a].length?a+pe(u,n+f):v<=0?a:ft[d][a][v]}function x(){let v=h.scan();for(p=0;v===15||v===14;)v===14&&s.keepLines?p+=1:v===14&&(p=1),v=h.scan();return g=v===16||h.getTokenError()!==0,v}let $=[];function y(v,k,m){!g&&(!t||k<c&&m>r)&&e.substring(k,m)!==v&&$.push({offset:k,length:m-k,content:v})}let w=x();if(s.keepLines&&p>0&&y(pe(a,p),0,0),w!==17){let v=h.getTokenOffset()+o,k=u.length*n<20&&s.insertSpaces?I[u.length*n]:pe(u,n);y(k,o,v)}for(;w!==17;){let v=h.getTokenOffset()+h.getTokenLength()+o,k=x(),m="",D=!1;for(;p===0&&(k===12||k===13);){let ge=h.getTokenOffset()+o;y(I[1],v,ge),v=h.getTokenOffset()+h.getTokenLength()+o,D=k===12,m=D?b():"",k=x()}if(k===2)w!==1&&f--,s.keepLines&&p>0||!s.keepLines&&w!==1?m=b():s.keepLines&&(m=I[1]);else if(k===4)w!==3&&f--,s.keepLines&&p>0||!s.keepLines&&w!==3?m=b():s.keepLines&&(m=I[1]);else{switch(w){case 3:case 1:f++,s.keepLines&&p>0||!s.keepLines?m=b():m=I[1];break;case 5:s.keepLines&&p>0||!s.keepLines?m=b():m=I[1];break;case 12:m=b();break;case 13:p>0?m=b():D||(m=I[1]);break;case 6:s.keepLines&&p>0?m=b():D||(m=I[1]);break;case 10:s.keepLines&&p>0?m=b():k===6&&!D&&(m="");break;case 7:case 8:case 9:case 11:case 2:case 4:s.keepLines&&p>0?m=b():(k===12||k===13)&&!D?m=I[1]:k!==5&&k!==17&&(g=!0);break;case 16:g=!0;break}p>0&&(k===12||k===13)&&(m=b())}k===17&&(s.keepLines&&p>0?m=b():m=s.insertFinalNewline?a:"");let he=h.getTokenOffset()+o;y(m,v,he),w=k}return $}function pe(e,t){let s="";for(let n=0;n<t;n++)s+=e;return s}function zs(e,t){let s=0,n=0,i=t.tabSize||4;for(;s<e.length;){let o=e.charAt(s);if(o===I[1])n++;else if(o===" ")n+=i;else break;s++}return Math.floor(n/i)}function Us(e,t){for(let s=0;s<t.length;s++){let n=t.charAt(s);if(n==="\r")return s+1<t.length&&t.charAt(s+1)===`
147
+ `];function mt(e,t,s){let n,o,i,r,c;if(t){for(r=t.offset,c=r+t.length,i=r;i>0&&!Ee(e,i-1);)i--;let k=c;for(;k<e.length&&!Ee(e,k);)k++;o=e.substring(i,k),n=uo(o,s)}else o=e,n=0,i=0,r=0,c=e.length;let a=po(s,e),u=dn.includes(a),p=0,l=0,f;s.insertSpaces?f=I[s.tabSize||4]??pe(I[1],s.tabSize||4):f=" ";let d=f===" "?" ":" ",h=Re(o,!1),g=!1;function b(){if(p>1)return pe(a,p)+pe(f,n+l);let k=f.length*(n+l);return!u||k>gt[d][a].length?a+pe(f,n+l):k<=0?a:gt[d][a][k]}function x(){let k=h.scan();for(p=0;k===15||k===14;)k===14&&s.keepLines?p+=1:k===14&&(p=1),k=h.scan();return g=k===16||h.getTokenError()!==0,k}let T=[];function m(k,v,y){!g&&(!t||v<c&&y>r)&&e.substring(v,y)!==k&&T.push({offset:v,length:y-v,content:k})}let w=x();if(s.keepLines&&p>0&&m(pe(a,p),0,0),w!==17){let k=h.getTokenOffset()+i,v=f.length*n<20&&s.insertSpaces?I[f.length*n]:pe(f,n);m(v,i,k)}for(;w!==17;){let k=h.getTokenOffset()+h.getTokenLength()+i,v=x(),y="",j=!1;for(;p===0&&(v===12||v===13);){let ye=h.getTokenOffset()+i;m(I[1],k,ye),k=h.getTokenOffset()+h.getTokenLength()+i,j=v===12,y=j?b():"",v=x()}if(v===2)w!==1&&l--,s.keepLines&&p>0||!s.keepLines&&w!==1?y=b():s.keepLines&&(y=I[1]);else if(v===4)w!==3&&l--,s.keepLines&&p>0||!s.keepLines&&w!==3?y=b():s.keepLines&&(y=I[1]);else{switch(w){case 3:case 1:l++,s.keepLines&&p>0||!s.keepLines?y=b():y=I[1];break;case 5:s.keepLines&&p>0||!s.keepLines?y=b():y=I[1];break;case 12:y=b();break;case 13:p>0?y=b():j||(y=I[1]);break;case 6:s.keepLines&&p>0?y=b():j||(y=I[1]);break;case 10:s.keepLines&&p>0?y=b():v===6&&!j&&(y="");break;case 7:case 8:case 9:case 11:case 2:case 4:s.keepLines&&p>0?y=b():(v===12||v===13)&&!j?y=I[1]:v!==5&&v!==17&&(g=!0);break;case 16:g=!0;break}p>0&&(v===12||v===13)&&(y=b())}v===17&&(s.keepLines&&p>0?y=b():y=s.insertFinalNewline?a:"");let me=h.getTokenOffset()+i;m(y,k,me),w=v}return T}function pe(e,t){let s="";for(let n=0;n<t;n++)s+=e;return s}function uo(e,t){let s=0,n=0,o=t.tabSize||4;for(;s<e.length;){let i=e.charAt(s);if(i===I[1])n++;else if(i===" ")n+=o;else break;s++}return Math.floor(n/o)}function po(e,t){for(let s=0;s<t.length;s++){let n=t.charAt(s);if(n==="\r")return s+1<t.length&&t.charAt(s+1)===`
148
148
  `?`\r
149
149
  `:"\r";if(n===`
150
150
  `)return`
151
151
  `}return e&&e.eol||`
152
- `}function xe(e,t){return`\r
153
- `.indexOf(e.charAt(t))!==-1}var Se;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Se||(Se={}));function sn(e,t=[],s=Se.DEFAULT){let n=null,i=[],o=[];function r(a){Array.isArray(i)?i.push(a):n!==null&&(i[n]=a)}return dt(e,{onObjectBegin:()=>{let a={};r(a),o.push(i),i=a,n=null},onObjectProperty:a=>{n=a},onObjectEnd:()=>{i=o.pop()},onArrayBegin:()=>{let a=[];r(a),o.push(i),i=a,n=null},onArrayEnd:()=>{i=o.pop()},onLiteralValue:r,onError:(a,l,p)=>{t.push({error:a,offset:l,length:p})}},s),i[0]}function Fe(e,t=[],s=Se.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function i(a){n.type==="property"&&(n.length=a-n.offset,n=n.parent)}function o(a){return n.children.push(a),a}dt(e,{onObjectBegin:a=>{n=o({type:"object",offset:a,length:-1,parent:n,children:[]})},onObjectProperty:(a,l,p)=>{n=o({type:"property",offset:l,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:a,offset:l,length:p,parent:n})},onObjectEnd:(a,l)=>{i(a+l),n.length=a+l-n.offset,n=n.parent,i(a+l)},onArrayBegin:(a,l)=>{n=o({type:"array",offset:a,length:-1,parent:n,children:[]})},onArrayEnd:(a,l)=>{n.length=a+l-n.offset,n=n.parent,i(a+l)},onLiteralValue:(a,l,p)=>{o({type:Js(a),offset:l,length:p,parent:n,value:a}),i(l+p)},onSeparator:(a,l,p)=>{n.type==="property"&&(a===":"?n.colonOffset=l:a===","&&i(l))},onError:(a,l,p)=>{t.push({error:a,offset:l,length:p})}},s);let c=n.children[0];return c&&delete c.parent,c}function Te(e,t){if(!e)return;let s=e;for(let n of t)if(typeof n=="string"){if(s.type!=="object"||!Array.isArray(s.children))return;let i=!1;for(let o of s.children)if(Array.isArray(o.children)&&o.children[0].value===n&&o.children.length===2){s=o.children[1],i=!0;break}if(!i)return}else{let i=n;if(s.type!=="array"||i<0||!Array.isArray(s.children)||i>=s.children.length)return;s=s.children[i]}return s}function dt(e,t,s=Se.DEFAULT){let n=we(e,!1),i=[],o=0;function r(T){return T?()=>o===0&&T(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(T){return T?R=>o===0&&T(R,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function a(T){return T?R=>o===0&&T(R,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>i.slice()):()=>!0}function l(T){return T?()=>{o>0?o++:T(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>i.slice())===!1&&(o=1)}:()=>!0}function p(T){return T?()=>{o>0&&o--,o===0&&T(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let f=l(t.onObjectBegin),u=a(t.onObjectProperty),d=p(t.onObjectEnd),h=l(t.onArrayBegin),g=p(t.onArrayEnd),b=a(t.onLiteralValue),x=c(t.onSeparator),$=r(t.onComment),y=c(t.onError),w=s&&s.disallowComments,v=s&&s.allowTrailingComma;function k(){for(;;){let T=n.scan();switch(n.getTokenError()){case 4:m(14);break;case 5:m(15);break;case 3:m(13);break;case 1:w||m(11);break;case 2:m(12);break;case 6:m(16);break}switch(T){case 12:case 13:w?m(10):$();break;case 16:m(1);break;case 15:case 14:break;default:return T}}}function m(T,R=[],xt=[]){if(y(T),R.length+xt.length>0){let Ae=n.getToken();for(;Ae!==17;){if(R.indexOf(Ae)!==-1){k();break}else if(xt.indexOf(Ae)!==-1)break;Ae=k()}}}function D(T){let R=n.getTokenValue();return T?b(R):(u(R),i.push(R)),k(),!0}function he(){switch(n.getToken()){case 11:let T=n.getTokenValue(),R=Number(T);isNaN(R)&&(m(2),R=0),b(R);break;case 7:b(null);break;case 8:b(!0);break;case 9:b(!1);break;default:return!1}return k(),!0}function ge(){return n.getToken()!==10?(m(3,[],[2,5]),!1):(D(!1),n.getToken()===6?(x(":"),k(),et()||m(4,[],[2,5])):m(5,[],[2,5]),i.pop(),!0)}function Ye(){f(),k();let T=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(T||m(4,[],[]),x(","),k(),n.getToken()===2&&v)break}else T&&m(6,[],[]);ge()||m(4,[],[2,5]),T=!0}return d(),n.getToken()!==2?m(7,[2],[]):k(),!0}function Ke(){h(),k();let T=!0,R=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(R||m(4,[],[]),x(","),k(),n.getToken()===4&&v)break}else R&&m(6,[],[]);T?(i.push(0),T=!1):i[i.length-1]++,et()||m(4,[],[4,5]),R=!0}return g(),T||i.pop(),n.getToken()!==4?m(8,[4],[]):k(),!0}function et(){switch(n.getToken()){case 3:return Ke();case 1:return Ye();case 10:return D(!0);default:return he()}}return k(),n.getToken()===17?s.allowEmptyContent?!0:(m(4,[],[]),!1):et()?(n.getToken()!==17&&m(9,[],[]),!0):(m(4,[],[]),!1)}function Js(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(e){if(Array.isArray(e))return"array"}else return"null";return"object"}default:return"null"}}function on(e,t,s,n){let i=t.slice(),r=Fe(e,[]),c,a;for(;i.length>0&&(a=i.pop(),c=Te(r,i),c===void 0&&s!==void 0);)typeof a=="string"?s={[a]:s}:s=[s];if(c)if(c.type==="object"&&typeof a=="string"&&Array.isArray(c.children)){let l=Te(c,[a]);if(l!==void 0)if(s===void 0){if(!l.parent)throw new Error("Malformed AST");let p=c.children.indexOf(l.parent),f,u=l.parent.offset+l.parent.length;if(p>0){let d=c.children[p-1];f=d.offset+d.length}else f=c.offset+1,c.children.length>1&&(u=c.children[1].offset);return Y(e,{offset:f,length:u-f,content:""},n)}else return Y(e,{offset:l.offset,length:l.length,content:JSON.stringify(s)},n);else{if(s===void 0)return[];let p=`${JSON.stringify(a)}: ${JSON.stringify(s)}`,f=n.getInsertionIndex?n.getInsertionIndex(c.children.map(d=>d.children[0].value)):c.children.length,u;if(f>0){let d=c.children[f-1];u={offset:d.offset+d.length,length:0,content:","+p}}else c.children.length===0?u={offset:c.offset+1,length:0,content:p}:u={offset:c.offset+1,length:0,content:p+","};return Y(e,u,n)}}else if(c.type==="array"&&typeof a=="number"&&Array.isArray(c.children)){let l=a;if(l===-1){let p=`${JSON.stringify(s)}`,f;if(c.children.length===0)f={offset:c.offset+1,length:0,content:p};else{let u=c.children[c.children.length-1];f={offset:u.offset+u.length,length:0,content:","+p}}return Y(e,f,n)}else if(s===void 0&&c.children.length>=0){let p=a,f=c.children[p],u;if(c.children.length===1)u={offset:c.offset+1,length:c.length-2,content:""};else if(c.children.length-1===p){let d=c.children[p-1],h=d.offset+d.length,g=c.offset+c.length;u={offset:h,length:g-2-h,content:""}}else u={offset:f.offset,length:c.children[p+1].offset-f.offset,content:""};return Y(e,u,n)}else if(s!==void 0){let p,f=`${JSON.stringify(s)}`;if(!n.isArrayInsertion&&c.children.length>a){let u=c.children[a];p={offset:u.offset,length:u.length,content:f}}else if(c.children.length===0||a===0)p={offset:c.offset+1,length:0,content:c.children.length===0?f:f+","};else{let u=a>c.children.length?c.children.length:a,d=c.children[u-1];p={offset:d.offset+d.length,length:0,content:","+f}}return Y(e,p,n)}else throw new Error(`Can not ${s===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${l} as length is not sufficient`)}else throw new Error(`Can not add ${typeof a!="number"?"index":"property"} to parent of type ${c.type}`);else{if(s===void 0)throw new Error("Can not delete in empty document");return Y(e,{offset:r?r.offset:0,length:r?r.length:0,content:JSON.stringify(s)},n)}}function Y(e,t,s){if(!s.formattingOptions)return[t];let n=ht(e,t),i=t.offset,o=t.offset+t.content.length;if(t.length===0||t.content.length===0){for(;i>0&&!xe(n,i-1);)i--;for(;o<n.length&&!xe(n,o);)o++}let r=ut(n,{offset:i,length:o-i},{...s.formattingOptions,keepLines:!1});for(let a=r.length-1;a>=0;a--){let l=r[a];n=ht(n,l),i=Math.min(i,l.offset),o=Math.max(o,l.offset+l.length),o+=l.content.length-l.length}let c=e.length-(n.length-o)-i;return[{offset:i,length:c,content:n.substring(i,o)}]}function ht(e,t){return e.substring(0,t.offset)+t.content+e.substring(t.offset+t.length)}var rn;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(rn||(rn={}));var an;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(an||(an={}));var _e=sn,ln=Fe,Ve=Te;var cn;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(cn||(cn={}));function pn(e,t,s,n){return on(e,t,s,n)}async function fn(e,t){let s=mt.join(e,C);if(!yt.existsSync(s))return;let n=await O.workspace.openTextDocument(O.Uri.file(s)),i=await O.window.showTextDocument(n),o=n.getText(),r=ln(o);if(!r)return;let c=-1,a=Ve(r,["rules","module-boundaries","rules"]);if(a&&a.children)if(typeof t=="string"&&!t.startsWith("rule[")){for(let l of a.children){let p=Ve(l,["name"]);if(p&&p.value===t){c=l.offset;break}}if(c===-1)for(let l of a.children){let p=Ve(l,["importer"]);if(p&&p.value===t){c=p.offset;break}}}else{let l=String(t).match(/rule\[(\d+)\]/),p=l?parseInt(l[1]):-1;p!==-1&&a.children[p]&&(c=a.children[p].offset)}if(c!==-1){let l=n.positionAt(c);i.selection=new O.Selection(l,l),i.revealRange(new O.Range(l,l),O.TextEditorRevealType.InCenter)}}async function un(e,t,s){let n=mt.join(e,C);if(!yt.existsSync(n))return;let i=await O.workspace.openTextDocument(O.Uri.file(n)),o=i.getText(),r=pn(o,["rules","module-boundaries","rules",-1],{importer:t,imports:s,allow:!0,name:`allow-${t}-to-${s}`},{formattingOptions:{insertSpaces:!0,tabSize:2}}),c=new O.WorkspaceEdit;for(let a of r)c.replace(i.uri,new O.Range(i.positionAt(a.offset),i.positionAt(a.offset+a.length)),a.content);await O.workspace.applyEdit(c),await i.save(),O.window.showInformationMessage(`Added exception: Allow '${s}' in '${t}'`)}function dn(e,t,s,n){e.subscriptions.push(F.commands.registerCommand("pickety.refresh",()=>{t.reload(),t.reloadAliases(),F.window.showInformationMessage("Pickety: Configuration refreshed")})),e.subscriptions.push(F.commands.registerCommand("pickety.generateDiagram",()=>Xt(t.getConfig(),s.getImportGraph(),s.getWorkspaceContext()))),e.subscriptions.push(F.commands.registerCommand("pickety.showImpact",()=>en(t.getConfig(),s.getImportGraph(),s.getWorkspaceContext()))),e.subscriptions.push(F.commands.registerCommand("pickety.showHealth",()=>Yt(t.getConfig(),s.getImportGraph(),s.getWorkspaceContext()))),e.subscriptions.push(F.commands.registerCommand("pickety.goToRule",(i,o)=>fn(i,o))),e.subscriptions.push(F.commands.registerCommand("pickety.allowImport",(i,o,r)=>un(i,o,r))),e.subscriptions.push(F.commands.registerCommand("pickety.init",()=>Ht(n,()=>t.reload())))}var G=S(require("vscode"));var bn=S(require("path")),We=S(require("fs"));function hn(e,t,s,n){if(typeof e.containedTo=="object"&&e.containedTo!==null){let i=e.containedTo;if(typeof i.path!="string"&&n.push({message:`Rule #${t}: "containedTo.path" is required and must be a string`,path:`${s}.containedTo.path`}),i.unless!==void 0)if(typeof i.unless!="object"||i.unless===null||Array.isArray(i.unless))n.push({message:`Rule #${t}: "containedTo.unless" must be an object`,path:`${s}.containedTo.unless`});else{let o=i.unless;Object.keys(o).length===0&&n.push({message:`Rule #${t}: "containedTo.unless" must not be empty`,path:`${s}.containedTo.unless`}),typeof e.imports=="string"&&!e.imports.match(/\$[\w-]+/)&&n.push({message:`Rule #${t}: "containedTo.unless" requires "imports" to contain at least one $variable`,path:`${s}.containedTo.unless`});for(let[c,a]of Object.entries(o))c.startsWith("$")||n.push({message:`Rule #${t}: "containedTo.unless" key "${c}" must start with $`,path:`${s}.containedTo.unless`}),typeof a!="string"&&n.push({message:`Rule #${t}: "containedTo.unless.${c}" must be a string`,path:`${s}.containedTo.unless.${c}`})}}else typeof e.containedTo!="string"&&n.push({message:`Rule #${t}: "containedTo" must be a string or object with a "path" property`,path:`${s}.containedTo`})}function gn(e,t){if(e===void 0){t.push({message:'"rules" is required and must be an object',path:"rules"});return}if(typeof e!="object"||e===null){t.push({message:'"rules" must be an object',path:"rules"});return}let n=e["module-boundaries"];if(n===void 0){t.push({message:'"rules.module-boundaries" is required and must be an object',path:"rules.module-boundaries"});return}if(typeof n!="object"||n===null){t.push({message:'"rules.module-boundaries" must be an object',path:"rules.module-boundaries"});return}let i=n,o="error";if(i.severity!==void 0&&(i.severity!=="error"&&i.severity!=="warn"?t.push({message:`"rules.module-boundaries.severity" must be "error" or "warn", got "${i.severity}"`,path:"rules.module-boundaries.severity"}):o=i.severity),i.rules===void 0){t.push({message:'"rules.module-boundaries.rules" is required and must be an array',path:"rules.module-boundaries.rules"});return}if(!Array.isArray(i.rules)){t.push({message:'"rules.module-boundaries.rules" must be an array',path:"rules.module-boundaries.rules"});return}let r=[];return i.rules.forEach((c,a)=>{let l=`rules.module-boundaries.rules[${a}]`;if(typeof c!="object"||c===null){t.push({message:`Rule #${a} must be an object`,path:l});return}let p=c,f=typeof p.containedTo=="string"||typeof p.containedTo=="object"&&p.containedTo!==null;typeof p.importer!="string"&&!f&&t.push({message:`Rule #${a}: "importer" or "containedTo" is required`,path:l}),p.importer!==void 0&&typeof p.importer!="string"&&t.push({message:`Rule #${a}: "importer" must be a string`,path:`${l}.importer`}),typeof p.imports!="string"&&t.push({message:`Rule #${a}: "imports" is required and must be a string`,path:`${l}.imports`}),p.allow!==void 0&&typeof p.allow!="boolean"&&t.push({message:`Rule #${a}: "allow" must be a boolean`,path:`${l}.allow`}),p.only!==void 0&&typeof p.only!="boolean"&&t.push({message:`Rule #${a}: "only" must be a boolean`,path:`${l}.only`}),p.containedTo!==void 0&&hn(p,a,l,t),p.message!==void 0&&typeof p.message!="string"&&t.push({message:`Rule #${a}: "message" must be a string`,path:`${l}.message`}),p.severity!==void 0&&p.severity!=="error"&&p.severity!=="warn"&&t.push({message:`Rule #${a}: "severity" must be "error" or "warn", got "${p.severity}"`,path:`${l}.severity`}),p.name!==void 0&&typeof p.name!="string"&&t.push({message:`Rule #${a}: "name" must be a string`,path:`${l}.name`}),p.maxViolations!==void 0&&(typeof p.maxViolations!="number"||!Number.isInteger(p.maxViolations)||p.maxViolations<0)&&t.push({message:`Rule #${a}: "maxViolations" must be a non-negative integer`,path:`${l}.maxViolations`}),r.push(p)}),{severity:o,rules:r}}function mn(e,t){if(e===void 0)return;if(typeof e!="object"||e===null){t.push({message:'"health" must be an object',path:"health"});return}let s=e,n={},i=[{key:"maxAfferentCoupling",label:"maxAfferentCoupling"},{key:"maxEfferentCoupling",label:"maxEfferentCoupling"},{key:"maxDepth",label:"maxDepth"}];for(let{key:o,label:r}of i){let c=s[o];c!==void 0&&(typeof c!="number"||!Number.isInteger(c)||c<1?t.push({message:`"health.${r}" must be a positive integer`,path:`health.${r}`}):n[o]=c)}if(s.maxInstability!==void 0){let o=s.maxInstability;typeof o!="number"||o<0||o>1?t.push({message:'"health.maxInstability" must be a number between 0 and 1',path:"health.maxInstability"}):n.maxInstability=o}return Object.keys(n).length>0?n:void 0}function yn(e){let t=[];if(typeof e!="object"||e===null)return{ok:!1,errors:[{message:"Configuration must be a JSON object"}]};let s=e,n=Zs(s.modules,t),i=gn(s.rules,t),o=Ys(s["boundary-diagrams"],t),r=mn(s.health,t);return t.length>0||!n||!i?{ok:!1,errors:t}:{ok:!0,config:{modules:n,rules:{"module-boundaries":i},"boundary-diagrams":o,health:r}}}function Zs(e,t){if(e===void 0){t.push({message:'"modules" is required and must be an object',path:"modules"});return}if(typeof e!="object"||e===null){t.push({message:'"modules" must be an object mapping module names to patterns',path:"modules"});return}let s={};for(let[n,i]of Object.entries(e))typeof i!="string"?t.push({message:`Module "${n}" pattern must be a string, got ${typeof i}`,path:`modules.${n}`}):s[n]=i;return s}function Ys(e,t){if(e!==void 0){if(typeof e!="boolean"&&typeof e!="string"){t.push({message:'"boundary-diagrams" must be a boolean or a string',path:"boundary-diagrams"});return}return e}}function vn(e){let t=bn.join(e,C);if(!We.existsSync(t))return{ok:!0,config:void 0};try{let s=We.readFileSync(t,"utf-8"),n;try{n=_e(s)}catch(i){return{ok:!1,errors:[{message:`pickety.json is not valid JSONC: ${i instanceof Error?i.message:String(i)}`}]}}return yn(n)}catch(s){return{ok:!1,errors:[{message:`Failed to read pickety.json: ${s instanceof Error?s.message:String(s)}`}]}}}var Be=S(require("fs")),J=S(require("path"));function kn(e,t){if(t<0)return[];let s=[],n;try{n=Be.readdirSync(e,{withFileTypes:!0})}catch{return s}for(let i of n)!se.has(i.name)&&i.isFile()&&/^tsconfig(\..+)?\.json$/.test(i.name)&&s.push(J.join(e,i.name));for(let i of n)!se.has(i.name)&&i.isDirectory()&&s.push(...kn(J.join(e,i.name),t-1));return s}function wn(e){let t={},s=kn(e,4);for(let n of s)try{let i=Be.readFileSync(n,"utf-8"),r=_e(i).compilerOptions;if(!r?.paths)continue;let c=J.dirname(n),a=J.relative(e,c),l=r.baseUrl||".";for(let[p,f]of Object.entries(r.paths))if(Array.isArray(f)&&f.length>0){let u=f[0];t[p]||(t[p]=A(J.join(a,l,u)))}}catch{}return t}var He=class{constructor(t){this.workspaceRoot=t;this.registerWatchers()}config;aliases={};_onConfigChanged=new G.EventEmitter;onConfigChanged=this._onConfigChanged.event;_onAliasesChanged=new G.EventEmitter;onAliasesChanged=this._onAliasesChanged.event;disposables=[];getConfig(){return this.config}getAliases(){return this.aliases}reload(){let t=vn(this.workspaceRoot);this.config=t.ok?t.config:void 0,this._onConfigChanged.fire(t)}reloadAliases(){this.aliases=wn(this.workspaceRoot),this._onAliasesChanged.fire(this.aliases)}registerWatchers(){let t=G.workspace.createFileSystemWatcher(new G.RelativePattern(this.workspaceRoot,C));this.disposables.push(t),t.onDidChange(()=>this.reload()),t.onDidCreate(()=>this.reload()),t.onDidDelete(()=>{this.config=void 0,this._onConfigChanged.fire({ok:!0,config:void 0})});let s=G.workspace.createFileSystemWatcher(new G.RelativePattern(this.workspaceRoot,"**/tsconfig*.json"));this.disposables.push(s);let n=i=>i.fsPath.split(/[\\/]/).some(r=>se.has(r));s.onDidChange(i=>{n(i)||this.reloadAliases()}),s.onDidCreate(i=>{n(i)||this.reloadAliases()}),s.onDidDelete(i=>{n(i)||this.reloadAliases()})}dispose(){this.disposables.forEach(t=>t.dispose()),this._onConfigChanged.dispose(),this._onAliasesChanged.dispose()}};var Ue=S(require("vscode")),xn=S(require("fs"));function bt(e,t,s){let n=new Set,i=Pe(e,t,s),o=A(e);for(let{resolvedPath:r}of i)r&&r!==o&&n.add(r);return n}var Ge=class{dependents=new Map;dependencies=new Map;updateFile(t,s){let n=this.dependencies.get(t);if(n)for(let i of n)this.dependents.get(i)?.delete(t);this.dependencies.set(t,new Set(s));for(let i of s)this.dependents.has(i)||this.dependents.set(i,new Set),this.dependents.get(i).add(t)}removeFile(t){let s=this.dependencies.get(t);if(s)for(let i of s)this.dependents.get(i)?.delete(t);this.dependencies.delete(t);let n=this.dependents.get(t);if(n)for(let i of n)this.dependencies.get(i)?.delete(t);this.dependents.delete(t)}getDependents(t){return this.dependents.get(t)??new Set}getDependencies(t){return this.dependencies.get(t)??new Set}getTransitiveDependents(t){let s=new Set,n=[t];for(;n.length>0;){let i=n.shift(),o=this.dependents.get(i);if(o)for(let r of o)!s.has(r)&&r!==t&&(s.add(r),n.push(r))}return s}getModuleSummary(t,s,n){let i=this.getDependents(t),o=this.getDependencies(t),r=new Set;for(let a of i){let l=N(a,s,n);l&&r.add(l)}let c=new Set;for(let a of o){let l=N(a,s,n);l&&c.add(l)}return{dependentCount:i.size,dependentModules:[...r],dependencyCount:o.size,dependencyModules:[...c]}}getModuleLevelGraph(t,s){let n=new Map;for(let[i,o]of this.dependencies){let r=N(i,t,s);if(r){n.has(r)||n.set(r,new Set);for(let c of o){let a=N(c,t,s);a&&a!==r&&n.get(r).add(a)}}}return n}clear(){this.dependents.clear(),this.dependencies.clear()}};var ze=class e{constructor(t,s){this.workspaceRoot=t;this.configService=s;this.disposables.push(this.configService.onAliasesChanged(()=>{this.scanAndNotify()}))}knownFiles=new Set;importGraph=new Ge;isLargeWorkspace=!1;static MAX_FILES_THRESHOLD=5e3;_onAnalysisReady=new Ue.EventEmitter;onAnalysisReady=this._onAnalysisReady.event;disposables=[];dispose(){this.disposables.forEach(t=>t.dispose()),this._onAnalysisReady.dispose()}getImportGraph(){return this.importGraph}getKnownFiles(){return this.knownFiles}checkIsLargeWorkspace(){return this.isLargeWorkspace}getWorkspaceContext(){return{root:this.workspaceRoot,knownFiles:this.knownFiles,aliases:this.configService.getAliases()}}async scan(){let t=await Ue.workspace.findFiles(X,"**/node_modules/**");return this.knownFiles=new Set(t.map(s=>A(s.fsPath))),this.isLargeWorkspace=this.knownFiles.size>e.MAX_FILES_THRESHOLD,this.importGraph.clear(),this.isLargeWorkspace}async scanAndNotify(){await this.scan(),this._onAnalysisReady.fire()}updateFile(t,s,n){let i=A(t);this.knownFiles.add(i);try{let o=bt(i,s,n);this.importGraph.updateFile(i,o)}catch{}}removeFile(t){let s=A(t);this.knownFiles.delete(s),this.importGraph.removeFile(s)}ensureGraphReady(t){if(!this.isLargeWorkspace){for(let s of this.knownFiles)if(!this.importGraph.getDependencies(s).size)try{let n=xn.readFileSync(s,"utf-8"),i=bt(s,n,t);this.importGraph.updateFile(s,i)}catch{continue}}}computeCycles(t,s){if(this.isLargeWorkspace)return[];this.ensureGraphReady(s);let n=this.importGraph.getModuleLevelGraph(t.modules,this.workspaceRoot);return Gt(n)}computeHealthViolations(t,s){if(!t.health||this.isLargeWorkspace)return[];this.ensureGraphReady(s);let n=re(this.importGraph,t.modules,s);return qt(n,t.health)}};var K=S(require("vscode")),qe=class{item;constructor(t){this.item=K.window.createStatusBarItem(K.StatusBarAlignment.Right,100),this.item.command="pickety.refresh",t.subscriptions.push(this.item),this.item.show()}update(t,s){if(!t){this.item.text="$(warning) Pickety: No Config",this.item.tooltip="Pickety is inactive. Check pickety.json for errors.",this.item.backgroundColor=new K.ThemeColor("statusBarItem.warningBackground");return}let n=0;s.forEach((i,o)=>{n+=o.filter(r=>r.source==="pickety").length}),n>0?(this.item.text=`$(shield) Pickety: ${n} issue(s)`,this.item.tooltip=`Found ${n} architectural violations. Click to refresh.`,this.item.backgroundColor=new K.ThemeColor("statusBarItem.errorBackground")):(this.item.text="$(check) Pickety",this.item.tooltip="Architectural boundaries are secure. Click to refresh.",this.item.backgroundColor=void 0)}dispose(){this.item.dispose()}};var vt=S(require("vscode")),fe=class e{static instance;outputChannel;constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setOutputChannel(t){this.outputChannel=t}logEvent(t,s){if(!vt.env.isTelemetryEnabled)return;let n=new Date().toISOString(),i=JSON.stringify({event:t,timestamp:n,...s});this.outputChannel&&this.outputChannel.appendLine(`[Telemetry] ${i}`)}logError(t,s){if(!vt.env.isTelemetryEnabled)return;let n=t instanceof Error?t.message:t,i=t instanceof Error?t.stack:void 0;this.logEvent("error",{message:n,context:s||"unknown",stack:i||"no stack trace"})}};var M=S(require("vscode"));var Je=class e{constructor(t){this.collection=t}static CIRCULAR_TAG="pickety/circular";static HEALTH_TAG="pickety/health";getCollection(){return this.collection}setViolations(t,s){let n=s.map(i=>{let o=new M.Range(i.line,i.character,i.line,i.character+i.length),r=i.severity==="error"?M.DiagnosticSeverity.Error:M.DiagnosticSeverity.Warning,c=new M.Diagnostic(o,i.message,r);return c.source="pickety",i.ruleName&&(c.code={value:i.ruleName,target:M.Uri.parse(`https://github.com/DanielSerio/pickety/blob/main/docs/rules.md#${i.ruleName}`)}),c._picketyMetadata={sourceModule:i.sourceModule,targetModule:i.targetModule},c});this.collection.set(t,n)}setCircularDiagnostics(t,s){let n=s.map(i=>{let o=i.join(" -> "),r=new M.Diagnostic(new M.Range(0,0,0,100),`Circular dependency detected: ${o}`,M.DiagnosticSeverity.Error);return r.source="pickety",r.code=e.CIRCULAR_TAG,r});this.updateConfigDiagnostics(t,e.CIRCULAR_TAG,n)}setHealthDiagnostics(t,s){let n=s.map(i=>{let o=W(i.metric,i.value),r=W(i.metric,i.threshold),c=new M.Diagnostic(new M.Range(0,0,0,100),`Module "${i.moduleName}" has ${i.metric} of ${o} (max: ${r})`,M.DiagnosticSeverity.Warning);return c.source="pickety",c.code=e.HEALTH_TAG,c});this.updateConfigDiagnostics(t,e.HEALTH_TAG,n)}updateConfigDiagnostics(t,s,n){let i=(this.collection.get(t)||[]).filter(o=>(typeof o.code=="object"?o.code?.value:o.code)!==s);this.collection.set(t,[...i,...n])}clear(){this.collection.clear()}delete(t){this.collection.delete(t)}dispose(){this.collection.dispose()}};var ee=S(require("vscode"));var wt=S(require("path"));function Sn(e){return e.match(/\$[\w-]+/g)||[]}function kt(e,t,s){let n=e.split("/"),i=t.split("/"),o=0,r=n.filter(a=>a!=="**").length,c=i.length-r;for(let a=o;a<=c;a++){let l=Tn(n,i,a,s);if(l)return l}}function Tn(e,t,s,n){let i={},o=s;for(let r=0;r<e.length;r++){let c=e[r];if(c==="**"){let f=e.slice(r+1);if(f.length===0)return i;for(let u=o;u<=t.length-f.length;u++){let d=Tn(f,t,u,n);if(d)return{...i,...d}}return}if(o>=t.length)return;let a=c,l=[];for(let f of n)a.includes(f)&&(a=a.replace(f,`__VAR_${l.length}__`),l.push(f));a=a.replace(/[.+?^{}()|[\]\\]/g,"\\$&"),a=a.replace(/\*/g,"[^/]*");for(let f=0;f<l.length;f++)a=a.replace(`__VAR_${f}__`,"([^/]+)");let p=t[o].match(new RegExp(`^${a}$`));if(!p)return;for(let f=0;f<l.length;f++)i[l[f]]=p[f+1];o++}return i}function Ee(e,t,s){let n=e;for(let i of t){let o=typeof s=="string"?s:s[i],r=i.replace(/\$/g,"\\$");n=n.replace(new RegExp(r,"g"),o)}return n}function En(e,t,s,n,i,o,r,c,a,l,p,f,u){if(s){let d=kt(e.imports,p,t);if(d){if(Ks(e,d))return;let h=Ee(i,t,d);if(!U(c,a,h)){let b=e.message||`Module "${c}" is not allowed to import from "${l}" (contained to "${h}")`;return Q(f,u,r,b,o,c,l)}}}else{let d=kt(i,a,t);if(!d)return;if(n){let h=Ee(e.imports,t,"*"),g=Ee(e.imports,t,d),b=U(l,p,h),x=U(l,p,g);if(b&&!x){let $=e.message||`Import must match scoped pattern "${g}"`;return Q(f,u,r,$,o,c,l)}}else{let h=Ee(e.imports,t,d);if(U(l,p,h)){let b=e.message||`Module "${c}" cannot import from "${l}"`;return Q(f,u,r,b,o,c,l)}}}}function Ks(e,t){let s=rt(e);if(s&&s.unless){let n=Object.entries(s.unless);return n.length>0&&n.every(([i,o])=>t[i]===o)}return!1}function An(e,t,s,n,i,o,r,c,a){let{allow:l,severity:p,name:f,effectiveImporter:u,isOnly:d}=ve(e,t,s),h=Sn(d?e.imports:u);if(h.length>0)return En(e,h,d,l,u,p,f,n,i,o,r,c,a);let g=U(n,i,u),b=U(o,r,e.imports);if(d){if(b&&!g){let x=e.message||(e.containedTo?`Import is restricted: "${o}" is contained to "${u}"`:`Module "${o}" can only be imported by "${u}"`);return Q(c,a,f,x,p,n,o)}}else if(g&&b&&!l){let x=e.message||`Module "${n}" cannot import from "${o}"`;return Q(c,a,f,x,p,n,o)}}function $n(e,t,s,n){let i=[],{modules:o}=s,{severity:r,rules:c}=s.rules["module-boundaries"],{root:a}=n,l=N(e,o,a);if(!l)return[];let p=A(wt.relative(a,e)),f=Pe(e,t,n);for(let{statement:u,resolvedPath:d}of f){let h=N(d,o,a);if(!h)continue;let g=A(wt.relative(a,d));c.forEach((b,x)=>{let $=An(b,x,r,l,p,h,g,e,u);$&&i.push($)})}return i}function Rn(e,t){let s=t.rules["module-boundaries"].rules,n=new Map;if(s.forEach((o,r)=>{if(o.maxViolations!==void 0){let c=o.name??`rule[${r}]`;n.set(c,o.maxViolations)}}),n.size===0)return e;let i=new Map;for(let o of e)o.ruleName&&n.has(o.ruleName)&&i.set(o.ruleName,(i.get(o.ruleName)??0)+1);return e.map(o=>{if(!o.ruleName||!n.has(o.ruleName))return o;let r=i.get(o.ruleName)??0,c=n.get(o.ruleName),a=r<=c?"warn":"error";return a===o.severity?o:{...o,severity:a}})}var _=S(require("vscode")),On=S(require("path"));function Mn(e,t,s,n){s.appendLine("Pickety: Configuration error(s) found:");let i=_.Uri.file(On.join(t,C)),o=e.map(r=>{s.appendLine(` - ${r.message}${r.path?` (at ${r.path})`:""}`);let c=new _.Range(0,0,0,100),a=new _.Diagnostic(c,r.message,_.DiagnosticSeverity.Error);return a.source="pickety",r.path&&(a.code=r.path),a});n.set(i,o),_.window.showErrorMessage("Pickety: Configuration error. Check the Problems panel or Output channel for details.")}var Xe=class{constructor(t,s,n,i,o,r,c){this.context=t;this.configService=s;this.analysisService=n;this.diagnosticManager=i;this.statusBar=o;this.outputChannel=r;this.workspaceRoot=c;this.registerEventListeners()}telemetry=fe.getInstance();disposables=[];codeLensProvider;configRef={config:void 0};setCodeLensProvider(t){this.codeLensProvider=t}handleConfigResult(t){this.diagnosticManager.clear();let s=t.ok?t.config:void 0;if(this.configRef.config=s,t.ok&&t.config){this.outputChannel.appendLine("Pickety: Import boundaries active");try{let n=Ne(t.config,this.workspaceRoot);n&&this.outputChannel.appendLine(`Pickety: Generated boundary diagram at ${n}`)}catch(n){this.outputChannel.appendLine(`Pickety: Failed to generate boundary diagram: ${n instanceof Error?n.message:String(n)}`)}this.analyzeOpenEditors()}else t.ok||Mn(t.errors,this.workspaceRoot,this.outputChannel,this.diagnosticManager.getCollection());this.statusBar.update(s,this.diagnosticManager.getCollection())}analyzeOpenEditors(){try{let t=this.configService.getConfig();if(!t)return;let s=[];for(let r of ee.workspace.textDocuments)this.isSourceFile(r)&&s.push({uri:r.uri,violations:this.checkDocument(r,t)});let n=s.flatMap(r=>r.violations),i=Rn(n,t),o=0;for(let r of s){let c=r.violations.length;this.diagnosticManager.setViolations(r.uri,i.slice(o,o+c)),o+=c}this.statusBar.update(t,this.diagnosticManager.getCollection()),setTimeout(()=>{this.checkCircularDependencies(t),this.checkHealthThresholds(t)},0)}catch(t){this.telemetry.logError(t instanceof Error?t:String(t),"analyzeOpenEditors")}}analyzeDocument(t){let s=this.configService.getConfig();if(!s||!this.isSourceFile(t))return;if(this.hasMaxViolationsRules(s)){this.analyzeOpenEditors();return}let n=this.checkDocument(t,s);this.diagnosticManager.setViolations(t.uri,n),this.statusBar.update(s,this.diagnosticManager.getCollection())}checkDocument(t,s){return $n(t.uri.fsPath,t.getText(),s,this.analysisService.getWorkspaceContext())}hasMaxViolationsRules(t){return t.rules["module-boundaries"].rules.some(s=>s.maxViolations!==void 0)}checkCircularDependencies(t){let s=this.analysisService.computeCycles(t,this.analysisService.getWorkspaceContext()),n=ee.Uri.file(ie(this.workspaceRoot));this.diagnosticManager.setCircularDiagnostics(n,s)}checkHealthThresholds(t){let s=this.analysisService.computeHealthViolations(t,this.analysisService.getWorkspaceContext()),n=ee.Uri.file(ie(this.workspaceRoot));this.diagnosticManager.setHealthDiagnostics(n,s)}registerEventListeners(){this.disposables.push(ee.workspace.onDidSaveTextDocument(s=>{this.isSourceFile(s)&&(this.analysisService.updateFile(s.uri.fsPath,s.getText(),this.analysisService.getWorkspaceContext()),this.analyzeDocument(s),this.codeLensProvider?.refresh())}));let t=ee.workspace.createFileSystemWatcher(X);this.disposables.push(t),t.onDidCreate(s=>{this.analysisService.getKnownFiles().add(A(s.fsPath))}),t.onDidDelete(s=>{this.analysisService.removeFile(s.fsPath),this.codeLensProvider?.refresh()})}isSourceFile(t){return["typescript","typescriptreact","javascript","javascriptreact"].includes(t.languageId)}dispose(){this.disposables.forEach(t=>t.dispose())}};var ue=S(require("vscode")),Qe=class{constructor(t){this.workspaceRoot=t}provideCodeActions(t,s,n){let i=[];for(let o of n.diagnostics)if(o.source==="pickety"&&o.code){let r=typeof o.code=="object"?o.code.value:o.code,c=new ue.CodeAction(`Go to Pickety rule: ${r}`,ue.CodeActionKind.QuickFix);c.command={command:"pickety.goToRule",title:"Go to Rule",arguments:[this.workspaceRoot,r]},i.push(c);let a=o._picketyMetadata;if(a&&a.sourceModule&&a.targetModule){let l=new ue.CodeAction(`Allow imports from '${a.targetModule}' in '${a.sourceModule}'`,ue.CodeActionKind.QuickFix);l.command={command:"pickety.allowImport",title:"Allow Import",arguments:[this.workspaceRoot,a.sourceModule,a.targetModule]},i.push(l)}}return i}};var de=S(require("vscode"));var Ze=class{constructor(t,s,n){this.importGraph=t;this.workspaceRoot=s;this.configRef=n}_onDidChangeCodeLenses=new de.EventEmitter;onDidChangeCodeLenses=this._onDidChangeCodeLenses.event;refresh(){this._onDidChangeCodeLenses.fire()}provideCodeLenses(t){let s=this.configRef.config;if(!s)return[];let n=A(t.uri.fsPath),i=this.importGraph.getModuleSummary(n,s.modules,this.workspaceRoot);if(i.dependentCount===0&&i.dependencyCount===0)return[];let o=[];if(i.dependentCount>0){let a=i.dependentModules.length===1?"1 module":`${i.dependentModules.length} modules`;o.push(`${i.dependentCount} dependent${i.dependentCount===1?"":"s"} (${a})`)}if(i.dependencyCount>0){let a=i.dependencyModules.length===1?"1 module":`${i.dependencyModules.length} modules`;o.push(`${i.dependencyCount} dependenc${i.dependencyCount===1?"y":"ies"} (${a})`)}let r=new de.Range(0,0,0,0);return[new de.CodeLens(r,{title:o.join(" | "),command:"pickety.showImpact",tooltip:"Show full impact analysis for this file"})]}dispose(){this._onDidChangeCodeLenses.dispose()}};var ei=[];async function ti(e){let t=fe.getInstance();t.logEvent("extension_activate");let s=V.window.createOutputChannel("Pickety");e.subscriptions.push(s),t.setOutputChannel(s);let n=V.workspace.workspaceFolders?.[0]?.uri.fsPath;if(!n){s.appendLine("Pickety: No workspace root found.");return}s.appendLine(`Pickety: Extension activated for workspace: ${n}`);let i=new He(n);e.subscriptions.push(i);let o=new ze(n,i);e.subscriptions.push(o);let r=new qe(e);e.subscriptions.push(r);let c=V.languages.createDiagnosticCollection("pickety");e.subscriptions.push(c);let a=new Je(c);e.subscriptions.push(a);let l=new Qe(n);e.subscriptions.push(V.languages.registerCodeActionsProvider({scheme:"file",language:"*"},l,{providedCodeActionKinds:[V.CodeActionKind.QuickFix]}));let p=new Ze(o.getImportGraph(),n,{config:void 0});e.subscriptions.push(p);let f=new Xe(e,i,o,a,r,s,n);f.setCodeLensProvider(p),e.subscriptions.push(f),p.configRef=f.configRef,e.subscriptions.push(V.languages.registerCodeLensProvider({scheme:"file",pattern:X},p)),dn(e,i,o,n),i.onConfigChanged(u=>f.handleConfigResult(u)),o.onAnalysisReady(()=>{s.appendLine(`Pickety: Analysis complete. Found ${o.getKnownFiles().size} files.`),f.analyzeOpenEditors()}),i.reload(),i.reloadAliases()}function ni(){ei.forEach(e=>e.dispose())}0&&(module.exports={activate,deactivate});
152
+ `}function Ee(e,t){return`\r
153
+ `.indexOf(e.charAt(t))!==-1}var Te;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Te||(Te={}));function hn(e,t=[],s=Te.DEFAULT){let n=null,o=[],i=[];function r(a){Array.isArray(o)?o.push(a):n!==null&&(o[n]=a)}return yt(e,{onObjectBegin:()=>{let a={};r(a),i.push(o),o=a,n=null},onObjectProperty:a=>{n=a},onObjectEnd:()=>{o=i.pop()},onArrayBegin:()=>{let a=[];r(a),i.push(o),o=a,n=null},onArrayEnd:()=>{o=i.pop()},onLiteralValue:r,onError:(a,u,p)=>{t.push({error:a,offset:u,length:p})}},s),o[0]}function Be(e,t=[],s=Te.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(a){n.type==="property"&&(n.length=a-n.offset,n=n.parent)}function i(a){return n.children.push(a),a}yt(e,{onObjectBegin:a=>{n=i({type:"object",offset:a,length:-1,parent:n,children:[]})},onObjectProperty:(a,u,p)=>{n=i({type:"property",offset:u,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:a,offset:u,length:p,parent:n})},onObjectEnd:(a,u)=>{o(a+u),n.length=a+u-n.offset,n=n.parent,o(a+u)},onArrayBegin:(a,u)=>{n=i({type:"array",offset:a,length:-1,parent:n,children:[]})},onArrayEnd:(a,u)=>{n.length=a+u-n.offset,n=n.parent,o(a+u)},onLiteralValue:(a,u,p)=>{i({type:ho(a),offset:u,length:p,parent:n,value:a}),o(u+p)},onSeparator:(a,u,p)=>{n.type==="property"&&(a===":"?n.colonOffset=u:a===","&&o(u))},onError:(a,u,p)=>{t.push({error:a,offset:u,length:p})}},s);let c=n.children[0];return c&&delete c.parent,c}function Ae(e,t){if(!e)return;let s=e;for(let n of t)if(typeof n=="string"){if(s.type!=="object"||!Array.isArray(s.children))return;let o=!1;for(let i of s.children)if(Array.isArray(i.children)&&i.children[0].value===n&&i.children.length===2){s=i.children[1],o=!0;break}if(!o)return}else{let o=n;if(s.type!=="array"||o<0||!Array.isArray(s.children)||o>=s.children.length)return;s=s.children[o]}return s}function yt(e,t,s=Te.DEFAULT){let n=Re(e,!1),o=[],i=0;function r(S){return S?()=>i===0&&S(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(S){return S?M=>i===0&&S(M,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function a(S){return S?M=>i===0&&S(M,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice()):()=>!0}function u(S){return S?()=>{i>0?i++:S(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice())===!1&&(i=1)}:()=>!0}function p(S){return S?()=>{i>0&&i--,i===0&&S(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let l=u(t.onObjectBegin),f=a(t.onObjectProperty),d=p(t.onObjectEnd),h=u(t.onArrayBegin),g=p(t.onArrayEnd),b=a(t.onLiteralValue),x=c(t.onSeparator),T=r(t.onComment),m=c(t.onError),w=s&&s.disallowComments,k=s&&s.allowTrailingComma;function v(){for(;;){let S=n.scan();switch(n.getTokenError()){case 4:y(14);break;case 5:y(15);break;case 3:y(13);break;case 1:w||y(11);break;case 2:y(12);break;case 6:y(16);break}switch(S){case 12:case 13:w?y(10):T();break;case 16:y(1);break;case 15:case 14:break;default:return S}}}function y(S,M=[],$t=[]){if(m(S),M.length+$t.length>0){let Me=n.getToken();for(;Me!==17;){if(M.indexOf(Me)!==-1){v();break}else if($t.indexOf(Me)!==-1)break;Me=v()}}}function j(S){let M=n.getTokenValue();return S?b(M):(f(M),o.push(M)),v(),!0}function me(){switch(n.getToken()){case 11:let S=n.getTokenValue(),M=Number(S);isNaN(M)&&(y(2),M=0),b(M);break;case 7:b(null);break;case 8:b(!0);break;case 9:b(!1);break;default:return!1}return v(),!0}function ye(){return n.getToken()!==10?(y(3,[],[2,5]),!1):(j(!1),n.getToken()===6?(x(":"),v(),be()||y(4,[],[2,5])):y(5,[],[2,5]),o.pop(),!0)}function nt(){l(),v();let S=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(S||y(4,[],[]),x(","),v(),n.getToken()===2&&k)break}else S&&y(6,[],[]);ye()||y(4,[],[2,5]),S=!0}return d(),n.getToken()!==2?y(7,[2],[]):v(),!0}function st(){h(),v();let S=!0,M=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(M||y(4,[],[]),x(","),v(),n.getToken()===4&&k)break}else M&&y(6,[],[]);S?(o.push(0),S=!1):o[o.length-1]++,be()||y(4,[],[4,5]),M=!0}return g(),S||o.pop(),n.getToken()!==4?y(8,[4],[]):v(),!0}function be(){switch(n.getToken()){case 3:return st();case 1:return nt();case 10:return j(!0);default:return me()}}return v(),n.getToken()===17?s.allowEmptyContent?!0:(y(4,[],[]),!1):be()?(n.getToken()!==17&&y(9,[],[]),!0):(y(4,[],[]),!1)}function ho(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(e){if(Array.isArray(e))return"array"}else return"null";return"object"}default:return"null"}}function gn(e,t,s,n){let o=t.slice(),r=Be(e,[]),c,a;for(;o.length>0&&(a=o.pop(),c=Ae(r,o),c===void 0&&s!==void 0);)typeof a=="string"?s={[a]:s}:s=[s];if(c)if(c.type==="object"&&typeof a=="string"&&Array.isArray(c.children)){let u=Ae(c,[a]);if(u!==void 0)if(s===void 0){if(!u.parent)throw new Error("Malformed AST");let p=c.children.indexOf(u.parent),l,f=u.parent.offset+u.parent.length;if(p>0){let d=c.children[p-1];l=d.offset+d.length}else l=c.offset+1,c.children.length>1&&(f=c.children[1].offset);return ee(e,{offset:l,length:f-l,content:""},n)}else return ee(e,{offset:u.offset,length:u.length,content:JSON.stringify(s)},n);else{if(s===void 0)return[];let p=`${JSON.stringify(a)}: ${JSON.stringify(s)}`,l=n.getInsertionIndex?n.getInsertionIndex(c.children.map(d=>d.children[0].value)):c.children.length,f;if(l>0){let d=c.children[l-1];f={offset:d.offset+d.length,length:0,content:","+p}}else c.children.length===0?f={offset:c.offset+1,length:0,content:p}:f={offset:c.offset+1,length:0,content:p+","};return ee(e,f,n)}}else if(c.type==="array"&&typeof a=="number"&&Array.isArray(c.children)){let u=a;if(u===-1){let p=`${JSON.stringify(s)}`,l;if(c.children.length===0)l={offset:c.offset+1,length:0,content:p};else{let f=c.children[c.children.length-1];l={offset:f.offset+f.length,length:0,content:","+p}}return ee(e,l,n)}else if(s===void 0&&c.children.length>=0){let p=a,l=c.children[p],f;if(c.children.length===1)f={offset:c.offset+1,length:c.length-2,content:""};else if(c.children.length-1===p){let d=c.children[p-1],h=d.offset+d.length,g=c.offset+c.length;f={offset:h,length:g-2-h,content:""}}else f={offset:l.offset,length:c.children[p+1].offset-l.offset,content:""};return ee(e,f,n)}else if(s!==void 0){let p,l=`${JSON.stringify(s)}`;if(!n.isArrayInsertion&&c.children.length>a){let f=c.children[a];p={offset:f.offset,length:f.length,content:l}}else if(c.children.length===0||a===0)p={offset:c.offset+1,length:0,content:c.children.length===0?l:l+","};else{let f=a>c.children.length?c.children.length:a,d=c.children[f-1];p={offset:d.offset+d.length,length:0,content:","+l}}return ee(e,p,n)}else throw new Error(`Can not ${s===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${u} as length is not sufficient`)}else throw new Error(`Can not add ${typeof a!="number"?"index":"property"} to parent of type ${c.type}`);else{if(s===void 0)throw new Error("Can not delete in empty document");return ee(e,{offset:r?r.offset:0,length:r?r.length:0,content:JSON.stringify(s)},n)}}function ee(e,t,s){if(!s.formattingOptions)return[t];let n=bt(e,t),o=t.offset,i=t.offset+t.content.length;if(t.length===0||t.content.length===0){for(;o>0&&!Ee(n,o-1);)o--;for(;i<n.length&&!Ee(n,i);)i++}let r=mt(n,{offset:o,length:i-o},{...s.formattingOptions,keepLines:!1});for(let a=r.length-1;a>=0;a--){let u=r[a];n=bt(n,u),o=Math.min(o,u.offset),i=Math.max(i,u.offset+u.length),i+=u.content.length-u.length}let c=e.length-(n.length-i)-o;return[{offset:o,length:c,content:n.substring(o,i)}]}function bt(e,t){return e.substring(0,t.offset)+t.content+e.substring(t.offset+t.length)}var mn;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(mn||(mn={}));var yn;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(yn||(yn={}));var _e=hn,vn=Be,He=Ae;var bn;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(bn||(bn={}));function kn(e,t,s,n){return gn(e,t,s,n)}async function wn(e,t){let s=kt.join(e,N);if(!wt.existsSync(s))return;let n=await P.workspace.openTextDocument(P.Uri.file(s)),o=await P.window.showTextDocument(n),i=n.getText(),r=vn(i);if(!r)return;let c=-1,a=He(r,["rules","module-boundaries","rules"]);if(a&&a.children)if(typeof t=="string"&&!t.startsWith("rule[")){for(let u of a.children){let p=He(u,["name"]);if(p&&p.value===t){c=u.offset;break}}if(c===-1)for(let u of a.children){let p=He(u,["importer"]);if(p&&p.value===t){c=p.offset;break}}}else{let u=String(t).match(/rule\[(\d+)\]/),p=u?parseInt(u[1]):-1;p!==-1&&a.children[p]&&(c=a.children[p].offset)}if(c!==-1){let u=n.positionAt(c);o.selection=new P.Selection(u,u),o.revealRange(new P.Range(u,u),P.TextEditorRevealType.InCenter)}}async function xn(e,t,s){let n=kt.join(e,N);if(!wt.existsSync(n))return;let o=await P.workspace.openTextDocument(P.Uri.file(n)),i=o.getText(),r=kn(i,["rules","module-boundaries","rules",-1],{importer:t,imports:s,allow:!0,name:`allow-${t}-to-${s}`},{formattingOptions:{insertSpaces:!0,tabSize:2}}),c=new P.WorkspaceEdit;for(let a of r)c.replace(o.uri,new P.Range(o.positionAt(a.offset),o.positionAt(a.offset+a.length)),a.content);await P.workspace.applyEdit(c),await o.save(),P.window.showInformationMessage(`Added exception: Allow '${s}' in '${t}'`)}function Sn(e,t,s,n){e.subscriptions.push(B.commands.registerCommand("pickety.refresh",()=>{t.reload(),t.reloadAliases(),B.window.showInformationMessage("Pickety: Configuration refreshed")})),e.subscriptions.push(B.commands.registerCommand("pickety.generateDiagram",()=>rn(t.getConfig(),s.getImportGraph(),s.getWorkspaceContext()))),e.subscriptions.push(B.commands.registerCommand("pickety.showImpact",()=>pn(t.getConfig(),s.getImportGraph(),s.getWorkspaceContext()))),e.subscriptions.push(B.commands.registerCommand("pickety.showHealth",()=>ln(t.getConfig(),s.getImportGraph(),s.getWorkspaceContext()))),e.subscriptions.push(B.commands.registerCommand("pickety.goToRule",(o,i)=>wn(o,i))),e.subscriptions.push(B.commands.registerCommand("pickety.allowImport",(o,i,r)=>xn(o,i,r))),e.subscriptions.push(B.commands.registerCommand("pickety.init",()=>Qt(n,()=>t.reload())))}var z=R(require("vscode"));var Nn=R(require("path")),Ue=R(require("fs"));var Rn={modules:{app:"src/app/**",features:"src/features/**",shared:"src/shared/**"},rules:{"module-boundaries":{severity:"error",rules:[{importer:"shared",imports:["app","features"],allow:!1,message:"Shared code should stay independent of app and feature modules."},{importer:"features",imports:"app",allow:!1,message:"Feature modules should not depend on the app layer."}]}}};var En={modules:{domain:"src/domain/**",application:"src/application/**",ports:"src/ports/**",adapters:"src/adapters/**",infrastructure:"src/infrastructure/**"},rules:{"module-boundaries":{severity:"error",rules:[{importer:"domain",imports:["application","ports","adapters","infrastructure"],allow:!1,message:"Domain should not depend on outer layers."},{importer:"application",imports:["adapters","infrastructure"],allow:!1,message:"Application should not depend on adapters or infrastructure."},{importer:"ports",imports:["adapters","infrastructure"],allow:!1,message:"Ports should remain independent of adapters and infrastructure."},{importer:"adapters",imports:"infrastructure",allow:!1,message:"Adapters should not depend on infrastructure."}]}}};var Tn={modules:{presentation:"src/presentation/**",application:"src/application/**",domain:"src/domain/**",infrastructure:"src/infrastructure/**"},rules:{"module-boundaries":{severity:"error",rules:[{importer:"domain",imports:["application","presentation","infrastructure"],allow:!1,message:"Domain should not depend on outer layers."},{importer:"application",imports:["presentation","infrastructure"],allow:!1,message:"Application should not depend on presentation or infrastructure."},{importer:"presentation",imports:"infrastructure",allow:!1,message:"Presentation should not depend directly on infrastructure."}]}}};var An={hexagonal:En,"feature-modules":Rn,layered:Tn};function Mn(e){return An[e]}function Pn(){return Object.keys(An)}function $n(e,t,s,n){if(typeof e.containedTo=="object"&&e.containedTo!==null){let o=e.containedTo;if(typeof o.path!="string"&&n.push({message:`Rule #${t}: "containedTo.path" is required and must be a string`,path:`${s}.containedTo.path`}),o.unless!==void 0)if(typeof o.unless!="object"||o.unless===null||Array.isArray(o.unless))n.push({message:`Rule #${t}: "containedTo.unless" must be an object`,path:`${s}.containedTo.unless`});else{let i=o.unless;Object.keys(i).length===0&&n.push({message:`Rule #${t}: "containedTo.unless" must not be empty`,path:`${s}.containedTo.unless`}),(Array.isArray(e.imports)?e.imports.filter(u=>typeof u=="string"):typeof e.imports=="string"?[e.imports]:[]).some(u=>u.match(/\$[\w-]+/))||n.push({message:`Rule #${t}: "containedTo.unless" requires "imports" to contain at least one $variable`,path:`${s}.containedTo.unless`});for(let[u,p]of Object.entries(i))u.startsWith("$")||n.push({message:`Rule #${t}: "containedTo.unless" key "${u}" must start with $`,path:`${s}.containedTo.unless`}),typeof p!="string"&&n.push({message:`Rule #${t}: "containedTo.unless.${u}" must be a string`,path:`${s}.containedTo.unless.${u}`})}}else typeof e.containedTo!="string"&&n.push({message:`Rule #${t}: "containedTo" must be a string or object with a "path" property`,path:`${s}.containedTo`})}function In(e,t,s){if(e===void 0){t.push({message:'"rules" is required and must be an object',path:"rules"});return}if(typeof e!="object"||e===null){t.push({message:'"rules" must be an object',path:"rules"});return}let o=e["module-boundaries"];if(o===void 0){t.push({message:'"rules.module-boundaries" is required and must be an object',path:"rules.module-boundaries"});return}if(typeof o!="object"||o===null){t.push({message:'"rules.module-boundaries" must be an object',path:"rules.module-boundaries"});return}let i=o,r="error";if(i.severity!==void 0&&(i.severity!=="error"&&i.severity!=="warn"?t.push({message:`"rules.module-boundaries.severity" must be "error" or "warn", got "${i.severity}"`,path:"rules.module-boundaries.severity"}):r=i.severity),i.rules===void 0){t.push({message:'"rules.module-boundaries.rules" is required and must be an array',path:"rules.module-boundaries.rules"});return}if(!Array.isArray(i.rules)){t.push({message:'"rules.module-boundaries.rules" must be an array',path:"rules.module-boundaries.rules"});return}let c=[];return i.rules.forEach((a,u)=>{let p=`rules.module-boundaries.rules[${u}]`;if(typeof a!="object"||a===null){t.push({message:`Rule #${u} must be an object`,path:p});return}let l=a,f=typeof l.containedTo=="string"||typeof l.containedTo=="object"&&l.containedTo!==null;typeof l.importer!="string"&&!f&&t.push({message:`Rule #${u}: "importer" or "containedTo" is required`,path:p}),l.importer!==void 0&&typeof l.importer!="string"&&t.push({message:`Rule #${u}: "importer" must be a string`,path:`${p}.importer`});let d;if(typeof l.imports=="string")d=[l.imports];else if(Array.isArray(l.imports)){let b=l.imports.findIndex(x=>typeof x!="string");b!==-1?t.push({message:`Rule #${u}: "imports" entries must be strings`,path:`${p}.imports[${b}]`}):d=l.imports}else t.push({message:`Rule #${u}: "imports" is required and must be a string or string[]`,path:`${p}.imports`});l.allow!==void 0&&typeof l.allow!="boolean"&&t.push({message:`Rule #${u}: "allow" must be a boolean`,path:`${p}.allow`}),l.only!==void 0&&typeof l.only!="boolean"&&t.push({message:`Rule #${u}: "only" must be a boolean`,path:`${p}.only`}),l.containedTo!==void 0&&$n(l,u,p,t),l.message!==void 0&&typeof l.message!="string"&&t.push({message:`Rule #${u}: "message" must be a string`,path:`${p}.message`}),l.severity!==void 0&&l.severity!=="error"&&l.severity!=="warn"&&t.push({message:`Rule #${u}: "severity" must be "error" or "warn", got "${l.severity}"`,path:`${p}.severity`}),l.name!==void 0&&typeof l.name!="string"&&t.push({message:`Rule #${u}: "name" must be a string`,path:`${p}.name`}),l.group!==void 0&&typeof l.group!="string"&&t.push({message:`Rule #${u}: "group" must be a string`,path:`${p}.group`}),l.maxViolations!==void 0&&(typeof l.maxViolations!="number"||!Number.isInteger(l.maxViolations)||l.maxViolations<0)&&t.push({message:`Rule #${u}: "maxViolations" must be a non-negative integer`,path:`${p}.maxViolations`});let h;if(l.exports!==void 0)if(Array.isArray(l.exports)){let b=[];l.exports.forEach((x,T)=>{let m=On(x,`${p}.exports[${T}]`,t);m&&b.push(m)}),b.length>0&&(h=b)}else{let b=On(l.exports,`${p}.exports`,t);b&&(h=b)}if(d){let b=new Set(Kt(d)),x=(T,m,w)=>{let v=W(T).filter(y=>!b.has(y));if(v.length>0){let y=Array.from(new Set(v));s.push({message:`Rule #${u}: ${w} references variables not present in "imports": ${y.join(", ")}`,path:m})}};typeof l.importer=="string"&&x(l.importer,`${p}.importer`,'"importer"'),typeof l.containedTo=="string"?x(l.containedTo,`${p}.containedTo`,'"containedTo"'):typeof l.containedTo=="object"&&l.containedTo!==null&&typeof l.containedTo.path=="string"&&x(l.containedTo.path,`${p}.containedTo.path`,'"containedTo.path"')}if(!d)return;let g={imports:typeof l.imports=="string"?l.imports:d};typeof l.importer=="string"&&(g.importer=l.importer),typeof l.allow=="boolean"&&(g.allow=l.allow),typeof l.only=="boolean"&&(g.only=l.only),l.containedTo!==void 0&&(typeof l.containedTo=="string"||typeof l.containedTo=="object"&&l.containedTo!==null)&&(g.containedTo=l.containedTo),typeof l.message=="string"&&(g.message=l.message),(l.severity==="error"||l.severity==="warn")&&(g.severity=l.severity),typeof l.name=="string"&&(g.name=l.name),typeof l.group=="string"&&(g.group=l.group),typeof l.maxViolations=="number"&&Number.isInteger(l.maxViolations)&&l.maxViolations>=0&&(g.maxViolations=l.maxViolations),h&&(g.exports=h),c.push(g)}),{severity:r,rules:c}}function On(e,t,s){if(typeof e!="object"||e===null){s.push({message:`"${t}" must be an object`,path:t});return}let n=e,o=!1;if(typeof n.path!="string"&&(s.push({message:`"${t}.path" is required and must be a string`,path:`${t}.path`}),o=!0),typeof n.to!="string"&&(s.push({message:`"${t}.to" is required and must be a string`,path:`${t}.to`}),o=!0),n.message!==void 0&&typeof n.message!="string"&&(s.push({message:`"${t}.message" must be a string`,path:`${t}.message`}),o=!0),!o)return{path:n.path,to:n.to,message:typeof n.message=="string"?n.message:void 0}}function Cn(e,t){if(e===void 0)return;if(typeof e!="object"||e===null){t.push({message:'"health" must be an object',path:"health"});return}let s=e,n={},o=[{key:"maxAfferentCoupling",label:"maxAfferentCoupling"},{key:"maxEfferentCoupling",label:"maxEfferentCoupling"},{key:"maxDepth",label:"maxDepth"}];for(let{key:i,label:r}of o){let c=s[i];c!==void 0&&(typeof c!="number"||!Number.isInteger(c)||c<1?t.push({message:`"health.${r}" must be a positive integer`,path:`health.${r}`}):n[i]=c)}if(s.maxInstability!==void 0){let i=s.maxInstability;typeof i!="number"||i<0||i>1?t.push({message:'"health.maxInstability" must be a number between 0 and 1',path:"health.maxInstability"}):n.maxInstability=i}return Object.keys(n).length>0?n:void 0}function Ln(e){let t=[],s=[];if(typeof e!="object"||e===null)return{ok:!1,errors:[{message:"Configuration must be a JSON object"}]};let n=e,o=yo(n.modules,t),i=In(n.rules,t,s),r=bo(n["boundary-diagrams"],t),c=Cn(n.health,t),a=vo(n.warnOnUntrackedImporters,t);return t.length>0||!o||!i?s.length>0?{ok:!1,errors:t,warnings:s}:{ok:!1,errors:t}:{ok:!0,config:{modules:o,rules:{"module-boundaries":i},warnOnUntrackedImporters:a,"boundary-diagrams":r,health:c},warnings:s.length>0?s:void 0}}function yo(e,t){if(e===void 0){t.push({message:'"modules" is required and must be an object',path:"modules"});return}if(typeof e!="object"||e===null){t.push({message:'"modules" must be an object mapping module names to patterns',path:"modules"});return}let s={};for(let[n,o]of Object.entries(e))typeof o!="string"?t.push({message:`Module "${n}" pattern must be a string, got ${typeof o}`,path:`modules.${n}`}):s[n]=o;return s}function bo(e,t){if(e!==void 0){if(typeof e!="boolean"&&typeof e!="string"){t.push({message:'"boundary-diagrams" must be a boolean or a string',path:"boundary-diagrams"});return}return e}}function vo(e,t){return e===void 0?!0:typeof e!="boolean"?(t.push({message:'"warnOnUntrackedImporters" must be a boolean',path:"warnOnUntrackedImporters"}),!0):e}function Dn(e){let t=Nn.join(e,N);if(!Ue.existsSync(t))return{ok:!0,config:void 0};try{let s=Ue.readFileSync(t,"utf-8"),n;try{n=_e(s)}catch(o){return{ok:!1,errors:[{message:`pickety.json is not valid JSONC: ${o instanceof Error?o.message:String(o)}`}]}}if(typeof n=="object"&&n!==null){let o=n;if(o.preset!==void 0&&typeof o.preset!="string")return{ok:!1,errors:[{message:'"preset" must be a string',path:"preset"}]};if(typeof o.preset=="string"){let i=Mn(o.preset);if(!i)return{ok:!1,errors:[{message:`Unknown preset "${o.preset}". Available presets: ${Pn().join(", ")}`,path:"preset"}]};n=So(i,o)}}return Ln(n)}catch(s){return{ok:!1,errors:[{message:`Failed to read pickety.json: ${s instanceof Error?s.message:String(s)}`}]}}}function Ge(e){return typeof e=="object"&&e!==null}function ko(e,t){return t===void 0?e:!Ge(t)||!e?t:{...e,...t}}function xt(e,t,s,n){s[n]!==void 0?e[n]=s[n]:t[n]!==void 0&&(e[n]=t[n])}function wo(e,t){return t===void 0?e:Ge(t)?{...e,...t}:t}function xo(e,t){if(t===void 0)return e;if(!Ge(t))return t;let s=t["module-boundaries"];if(!Ge(s))return t;let n={...e,...t},o=e["module-boundaries"],i={...o,...s},r=Array.isArray(o.rules)?o.rules:[];return s.rules===void 0?i.rules=r:Array.isArray(s.rules)?i.rules=[...r,...s.rules]:i.rules=s.rules,n["module-boundaries"]=i,n}function So(e,t){let s={...e,...t};s.modules=wo(e.modules,t.modules),s.rules=xo(e.rules,t.rules);let n=e;return xt(s,n,t,"warnOnUntrackedImporters"),xt(s,n,t,"boundary-diagrams"),s.health=ko(e.health,t.health),xt(s,n,t,"version"),s}var ze=R(require("fs")),X=R(require("path"));function jn(e,t){if(t<0)return[];let s=[],n;try{n=ze.readdirSync(e,{withFileTypes:!0})}catch{return s}for(let o of n)!oe.has(o.name)&&o.isFile()&&/^tsconfig(\..+)?\.json$/.test(o.name)&&s.push(X.join(e,o.name));for(let o of n)!oe.has(o.name)&&o.isDirectory()&&s.push(...jn(X.join(e,o.name),t-1));return s}function Vn(e){let t={},s=jn(e,4);for(let n of s)try{let o=ze.readFileSync(n,"utf-8"),r=_e(o).compilerOptions;if(!r?.paths)continue;let c=X.dirname(n),a=X.relative(e,c),u=r.baseUrl||".";for(let[p,l]of Object.entries(r.paths))if(Array.isArray(l)&&l.length>0){let f=l[0];t[p]||(t[p]=E(X.join(a,u,f)))}}catch{}return t}var qe=class{constructor(t){this.workspaceRoot=t;this.registerWatchers()}config;aliases={};_onConfigChanged=new z.EventEmitter;onConfigChanged=this._onConfigChanged.event;_onAliasesChanged=new z.EventEmitter;onAliasesChanged=this._onAliasesChanged.event;disposables=[];getConfig(){return this.config}getAliases(){return this.aliases}reload(){let t=Dn(this.workspaceRoot);this.config=t.ok?t.config:void 0,this._onConfigChanged.fire(t)}reloadAliases(){this.aliases=Vn(this.workspaceRoot),this._onAliasesChanged.fire(this.aliases)}registerWatchers(){let t=z.workspace.createFileSystemWatcher(new z.RelativePattern(this.workspaceRoot,N));this.disposables.push(t),t.onDidChange(()=>this.reload()),t.onDidCreate(()=>this.reload()),t.onDidDelete(()=>{this.config=void 0,this._onConfigChanged.fire({ok:!0,config:void 0})});let s=z.workspace.createFileSystemWatcher(new z.RelativePattern(this.workspaceRoot,"**/tsconfig*.json"));this.disposables.push(s);let n=o=>o.fsPath.split(/[\\/]/).some(r=>oe.has(r));s.onDidChange(o=>{n(o)||this.reloadAliases()}),s.onDidCreate(o=>{n(o)||this.reloadAliases()}),s.onDidDelete(o=>{n(o)||this.reloadAliases()})}dispose(){this.disposables.forEach(t=>t.dispose()),this._onConfigChanged.dispose(),this._onAliasesChanged.dispose()}};var Qe=R(require("vscode")),Fn=R(require("fs"));function St(e,t,s){let n=new Set,o=De(e,t,s),i=E(e);for(let{resolvedPath:r}of o)r&&r!==i&&n.add(r);return n}var Je=class{dependents=new Map;dependencies=new Map;updateFile(t,s){let n=this.dependencies.get(t);if(n)for(let o of n)this.dependents.get(o)?.delete(t);this.dependencies.set(t,new Set(s));for(let o of s)this.dependents.has(o)||this.dependents.set(o,new Set),this.dependents.get(o).add(t)}removeFile(t){let s=this.dependencies.get(t);if(s)for(let o of s)this.dependents.get(o)?.delete(t);this.dependencies.delete(t);let n=this.dependents.get(t);if(n)for(let o of n)this.dependencies.get(o)?.delete(t);this.dependents.delete(t)}getDependents(t){return this.dependents.get(t)??new Set}getDependencies(t){return this.dependencies.get(t)??new Set}getTransitiveDependents(t){let s=new Set,n=[t];for(;n.length>0;){let o=n.shift(),i=this.dependents.get(o);if(i)for(let r of i)!s.has(r)&&r!==t&&(s.add(r),n.push(r))}return s}getModuleSummary(t,s,n){let o=this.getDependents(t),i=this.getDependencies(t),r=new Set;for(let a of o){let u=D(a,s,n);u&&r.add(u)}let c=new Set;for(let a of i){let u=D(a,s,n);u&&c.add(u)}return{dependentCount:o.size,dependentModules:[...r],dependencyCount:i.size,dependencyModules:[...c]}}getModuleLevelGraph(t,s){let n=new Map;for(let[o,i]of this.dependencies){let r=D(o,t,s);if(r){n.has(r)||n.set(r,new Set);for(let c of i){let a=D(c,t,s);a&&a!==r&&n.get(r).add(a)}}}return n}clear(){this.dependents.clear(),this.dependencies.clear()}};var Xe=class e{constructor(t,s){this.workspaceRoot=t;this.configService=s;this.disposables.push(this.configService.onAliasesChanged(()=>{this.scanAndNotify()}))}knownFiles=new Set;importGraph=new Je;isLargeWorkspace=!1;static MAX_FILES_THRESHOLD=5e3;_onAnalysisReady=new Qe.EventEmitter;onAnalysisReady=this._onAnalysisReady.event;disposables=[];dispose(){this.disposables.forEach(t=>t.dispose()),this._onAnalysisReady.dispose()}getImportGraph(){return this.importGraph}getKnownFiles(){return this.knownFiles}checkIsLargeWorkspace(){return this.isLargeWorkspace}getWorkspaceContext(){return{root:this.workspaceRoot,knownFiles:this.knownFiles,aliases:this.configService.getAliases()}}async scan(){let t=await Qe.workspace.findFiles(Q,"**/node_modules/**");return this.knownFiles=new Set(t.map(s=>E(s.fsPath))),this.isLargeWorkspace=this.knownFiles.size>e.MAX_FILES_THRESHOLD,this.importGraph.clear(),this.isLargeWorkspace}async scanAndNotify(){await this.scan(),this._onAnalysisReady.fire()}updateFile(t,s,n){let o=E(t);this.knownFiles.add(o);try{let i=St(o,s,n);this.importGraph.updateFile(o,i)}catch{}}removeFile(t){let s=E(t);this.knownFiles.delete(s),this.importGraph.removeFile(s)}ensureGraphReady(t){if(!this.isLargeWorkspace){for(let s of this.knownFiles)if(!this.importGraph.getDependencies(s).size)try{let n=Fn.readFileSync(s,"utf-8"),o=St(s,n,t);this.importGraph.updateFile(s,o)}catch{continue}}}computeCycles(t,s){if(this.isLargeWorkspace)return[];this.ensureGraphReady(s);let n=this.importGraph.getModuleLevelGraph(t.modules,this.workspaceRoot);return Yt(n)}computeHealthViolations(t,s){if(!t.health||this.isLargeWorkspace)return[];this.ensureGraphReady(s);let n=ae(this.importGraph,t.modules,s);return sn(n,t.health)}};var fe=R(require("vscode")),Ze=class{item;constructor(t){this.item=fe.window.createStatusBarItem(fe.StatusBarAlignment.Right,100),this.item.command="pickety.refresh",t.subscriptions.push(this.item)}update(t,s){if(!t){this.item.text="",this.item.tooltip="",this.item.backgroundColor=void 0,this.item.hide();return}let n=0;s.forEach((o,i)=>{n+=i.filter(r=>r.source==="pickety").length}),n>0?(this.item.text=`$(shield) Pickety: ${n} issue(s)`,this.item.tooltip=`Found ${n} architectural violations. Click to refresh.`,this.item.backgroundColor=new fe.ThemeColor("statusBarItem.errorBackground"),this.item.show()):(this.item.text="$(check) Pickety",this.item.tooltip="Architectural boundaries are secure. Click to refresh.",this.item.backgroundColor=void 0,this.item.show())}dispose(){this.item.dispose()}};var Rt=R(require("vscode")),de=class e{static instance;outputChannel;constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setOutputChannel(t){this.outputChannel=t}logEvent(t,s){if(!Rt.env.isTelemetryEnabled)return;let n=new Date().toISOString(),o=JSON.stringify({event:t,timestamp:n,...s});this.outputChannel&&this.outputChannel.appendLine(`[Telemetry] ${o}`)}logError(t,s){if(!Rt.env.isTelemetryEnabled)return;let n=t instanceof Error?t.message:t,o=t instanceof Error?t.stack:void 0;this.logEvent("error",{message:n,context:s||"unknown",stack:o||"no stack trace"})}};var $=R(require("vscode"));var Ye=class e{constructor(t){this.collection=t}static CIRCULAR_TAG="pickety/circular";static HEALTH_TAG="pickety/health";getCollection(){return this.collection}setViolations(t,s){let n=s.map(o=>{let i=new $.Range(o.line,o.character,o.line,o.character+o.length),r=o.severity==="error"?$.DiagnosticSeverity.Error:o.severity==="info"?$.DiagnosticSeverity.Information:$.DiagnosticSeverity.Warning,c=new $.Diagnostic(i,o.message,r);return c.source="pickety",o.ruleName&&(c.code={value:o.ruleName,target:$.Uri.parse(`https://github.com/DanielSerio/pickety/blob/main/docs/rules.md#${o.ruleName}`)}),c._picketyMetadata={sourceModule:o.sourceModule,targetModule:o.targetModule},c});this.collection.set(t,n)}setCircularDiagnostics(t,s){let n=s.map(o=>{let i=o.join(" -> "),r=new $.Diagnostic(new $.Range(0,0,0,100),`Circular dependency detected: ${i}`,$.DiagnosticSeverity.Error);return r.source="pickety",r.code=e.CIRCULAR_TAG,r});this.updateConfigDiagnostics(t,e.CIRCULAR_TAG,n)}setHealthDiagnostics(t,s){let n=s.map(o=>{let i=H(o.metric,o.value),r=H(o.metric,o.threshold),c=new $.Diagnostic(new $.Range(0,0,0,100),`Module "${o.moduleName}" has ${o.metric} of ${i} (max: ${r})`,$.DiagnosticSeverity.Warning);return c.source="pickety",c.code=e.HEALTH_TAG,c});this.updateConfigDiagnostics(t,e.HEALTH_TAG,n)}updateConfigDiagnostics(t,s,n){let o=(this.collection.get(t)||[]).filter(i=>(typeof i.code=="object"?i.code?.value:i.code)!==s);this.collection.set(t,[...o,...n])}clear(){this.collection.clear()}delete(t){this.collection.delete(t)}dispose(){this.collection.dispose()}};var te=R(require("vscode"));var At=R(require("path"));function _n(e){return e.isOnly?Ro(e):Eo(e)}function Et(e,t,s,n){let o=e.includes("/")?n:s;return xe(e,o,t)}function Ro(e){let{rule:t,importsPattern:s,variables:n,effectiveImporter:o,ruleSeverity:i,ruleName:r,ruleLabel:c,ruleGroup:a,ctx:u}=e,p=Et(s,n,u.targetModule,u.targetRelativePath);if(!p||Po(t,p))return;let l=Y(o,n,p);if(!F(u.sourceModule,u.sourceRelativePath,l)){if(Tt(t,u,p))return;let d=t.message||`Module "${u.sourceModule}" is not allowed to import from "${u.targetModule}" (contained to "${l}")`;return Z(u.filePath,u.importStmt,r,c,d,i,u.sourceModule,u.targetModule,a)}}function Eo(e){let{rule:t,importsPattern:s,variables:n,allow:o,effectiveImporter:i,ruleSeverity:r,ruleName:c,ruleLabel:a,ruleGroup:u,ctx:p}=e,l=Et(i,n,p.sourceModule,p.sourceRelativePath);if(l)if(o){let f=Y(s,n,"*"),d=Y(s,n,l),h=F(p.targetModule,p.targetRelativePath,f),g=F(p.targetModule,p.targetRelativePath,d);if(h&&!g){let b=t.message||`Import must match scoped pattern "${d}"`;return Z(p.filePath,p.importStmt,c,a,b,r,p.sourceModule,p.targetModule,u)}}else{let f=Y(s,n,l);if(F(p.targetModule,p.targetRelativePath,f)){let h=t.message||`Module "${p.sourceModule}" cannot import from "${p.targetModule}"`;return Z(p.filePath,p.importStmt,c,a,h,r,p.sourceModule,p.targetModule,u)}}}function To(e){return e?Array.isArray(e)?e:[e]:[]}var Wn=new WeakMap;function Ao(e){let t=Wn.get(e);if(t)return t;let n=To(e.exports).map(o=>({entry:o,pathVars:W(o.path),toVars:W(o.to)}));return Wn.set(e,n),n}function Tt(e,t,s){let n=Ao(e);if(n.length===0)return!1;for(let{entry:o,pathVars:i,toVars:r}of n){let c=i.length>0?Bn(o.path,i,s,t.targetModule,t.targetRelativePath):{};if(i.length>0&&!c)continue;let a=r.length>0?Bn(o.to,r,void 0,t.sourceModule,t.sourceRelativePath):{};if(r.length>0&&!a)continue;let u=Mo(c??{},a??{});if(!u)continue;let p=i.length>0?Y(o.path,i,u):o.path;if(!F(t.targetModule,t.targetRelativePath,p))continue;let l=r.length>0?Y(o.to,r,u):o.to;if(F(t.sourceModule,t.sourceRelativePath,l))return!0}return!1}function Bn(e,t,s,n,o){return s&&t.every(i=>s[i]!==void 0)?s:Et(e,t,n,o)}function Mo(e,t){let s={...e};for(let[n,o]of Object.entries(t)){if(s[n]!==void 0&&s[n]!==o)return;s[n]=o}return s}function Po(e,t){let s=ut(e);if(s&&s.unless){let n=Object.entries(s.unless);return n.length>0&&n.every(([o,i])=>t[o]===i)}return!1}function Hn(e,t){let{rule:s,allow:n,severity:o,name:i,label:r,group:c,effectiveImporter:a,isOnly:u,importPatterns:p}=e;for(let l of p){let f=W(u?l:a);if(f.length>0){let g=_n({rule:s,importsPattern:l,variables:f,isOnly:u,allow:n,effectiveImporter:a,ruleSeverity:o,ruleName:i,ruleLabel:r,ruleGroup:c,ctx:t});if(g)return g;continue}let d=F(t.sourceModule,t.sourceRelativePath,a),h=F(t.targetModule,t.targetRelativePath,l);if(u){if(h&&!d){if(Tt(s,t))return;let g=s.message||(s.containedTo?`Import is restricted: "${t.targetModule}" is contained to "${a}"`:`Module "${t.targetModule}" can only be imported by "${a}"`);return Z(t.filePath,t.importStmt,i,r,g,o,t.sourceModule,t.targetModule,c)}}else if(d&&h&&!n){let g=s.message||`Module "${t.sourceModule}" cannot import from "${t.targetModule}"`;return Z(t.filePath,t.importStmt,i,r,g,o,t.sourceModule,t.targetModule,c)}}}function Gn(e,t,s,n){let o=[],{modules:i}=s,{severity:r,rules:c}=s.rules["module-boundaries"],{root:a}=n,u=s.warnOnUntrackedImporters??!0,p=c.map((h,g)=>Zt(h,g,r)),l=D(e,i,a);if(!l)return u&&o.push({file:e,line:0,character:0,length:1,message:"This file is not covered by any declared module. Import rules will not be enforced here.",severity:"info"}),o;let f=E(At.relative(a,e)),d=De(e,t,n);for(let{statement:h,resolvedPath:g}of d){let b=D(g,i,a);if(!b)continue;let x=E(At.relative(a,g)),T={sourceModule:l,sourceRelativePath:f,targetModule:b,targetRelativePath:x,filePath:e,importStmt:h};for(let m of p){let w=Hn(m,T);w&&o.push(w)}}return o}function Un(e,t){let s=t.rules["module-boundaries"].rules,n=new Map;if(s.forEach((i,r)=>{if(i.maxViolations!==void 0){let c=i.name??`rule[${r}]`;n.set(c,i.maxViolations)}}),n.size===0)return e;let o=new Map;for(let i of e)i.ruleName&&n.has(i.ruleName)&&o.set(i.ruleName,(o.get(i.ruleName)??0)+1);return e.map(i=>{if(!i.ruleName||!n.has(i.ruleName))return i;let r=o.get(i.ruleName)??0,c=n.get(i.ruleName),a=r<=c?"warn":"error";return a===i.severity?i:{...i,severity:a}})}var O=R(require("vscode")),Mt=R(require("path"));function zn(e,t,s,n){s.appendLine("Pickety: Configuration error(s) found:");let o=O.Uri.file(Mt.join(t,N)),i=e.map(r=>{s.appendLine(` - ${r.message}${r.path?` (at ${r.path})`:""}`);let c=new O.Range(0,0,0,100),a=new O.Diagnostic(c,r.message,O.DiagnosticSeverity.Error);return a.source="pickety",r.path&&(a.code=r.path),a});n.set(o,i),O.window.showErrorMessage("Pickety: Configuration error. Check the Problems panel or Output channel for details.")}function Pt(e,t,s,n){s.appendLine("Pickety: Configuration warning(s) found:");let o=O.Uri.file(Mt.join(t,N)),i=e.map(c=>{s.appendLine(` - ${c.message}${c.path?` (at ${c.path})`:""}`);let a=new O.Range(0,0,0,100),u=new O.Diagnostic(a,c.message,O.DiagnosticSeverity.Warning);return u.source="pickety",c.path&&(u.code=c.path),u}),r=n.get(o)||[];n.set(o,[...r,...i])}var Ke=class{constructor(t,s,n,o,i,r,c){this.context=t;this.configService=s;this.analysisService=n;this.diagnosticManager=o;this.statusBar=i;this.outputChannel=r;this.workspaceRoot=c;this.registerEventListeners()}telemetry=de.getInstance();disposables=[];codeLensProvider;configRef={config:void 0};setCodeLensProvider(t){this.codeLensProvider=t}handleConfigResult(t){this.diagnosticManager.clear();let s=t.ok?t.config:void 0;if(this.configRef.config=s,t.ok&&t.config){this.outputChannel.appendLine("Pickety: Import boundaries active"),t.warnings&&t.warnings.length>0&&Pt(t.warnings,this.workspaceRoot,this.outputChannel,this.diagnosticManager.getCollection());try{let n=je(t.config,this.workspaceRoot);n&&this.outputChannel.appendLine(`Pickety: Generated boundary diagram at ${n}`)}catch(n){this.outputChannel.appendLine(`Pickety: Failed to generate boundary diagram: ${n instanceof Error?n.message:String(n)}`)}this.analyzeOpenEditors()}else t.ok||(zn(t.errors,this.workspaceRoot,this.outputChannel,this.diagnosticManager.getCollection()),t.warnings&&t.warnings.length>0&&Pt(t.warnings,this.workspaceRoot,this.outputChannel,this.diagnosticManager.getCollection()));this.statusBar.update(s,this.diagnosticManager.getCollection())}analyzeOpenEditors(){try{let t=this.configService.getConfig();if(!t)return;let s=[];for(let r of te.workspace.textDocuments)this.isSourceFile(r)&&s.push({uri:r.uri,violations:this.checkDocument(r,t)});let n=s.flatMap(r=>r.violations),o=Un(n,t),i=new Map;for(let r of o){let c=E(r.file),a=i.get(c);a?a.push(r):i.set(c,[r])}for(let r of s){let c=E(r.uri.fsPath);this.diagnosticManager.setViolations(r.uri,i.get(c)??[])}this.statusBar.update(t,this.diagnosticManager.getCollection()),setTimeout(()=>{this.checkCircularDependencies(t),this.checkHealthThresholds(t)},0)}catch(t){this.telemetry.logError(t instanceof Error?t:String(t),"analyzeOpenEditors")}}analyzeDocument(t){let s=this.configService.getConfig();if(!s||!this.isSourceFile(t))return;if(this.hasMaxViolationsRules(s)){this.analyzeOpenEditors();return}let n=this.checkDocument(t,s);this.diagnosticManager.setViolations(t.uri,n),this.statusBar.update(s,this.diagnosticManager.getCollection())}checkDocument(t,s){return Gn(t.uri.fsPath,t.getText(),s,this.analysisService.getWorkspaceContext())}hasMaxViolationsRules(t){return t.rules["module-boundaries"].rules.some(s=>s.maxViolations!==void 0)}checkCircularDependencies(t){let s=this.analysisService.computeCycles(t,this.analysisService.getWorkspaceContext()),n=te.Uri.file(ie(this.workspaceRoot));this.diagnosticManager.setCircularDiagnostics(n,s)}checkHealthThresholds(t){let s=this.analysisService.computeHealthViolations(t,this.analysisService.getWorkspaceContext()),n=te.Uri.file(ie(this.workspaceRoot));this.diagnosticManager.setHealthDiagnostics(n,s)}registerEventListeners(){this.disposables.push(te.workspace.onDidSaveTextDocument(s=>{this.isSourceFile(s)&&(this.analysisService.updateFile(s.uri.fsPath,s.getText(),this.analysisService.getWorkspaceContext()),this.analyzeDocument(s),this.codeLensProvider?.refresh())}));let t=te.workspace.createFileSystemWatcher(Q);this.disposables.push(t),t.onDidCreate(s=>{this.analysisService.getKnownFiles().add(E(s.fsPath))}),t.onDidDelete(s=>{this.analysisService.removeFile(s.fsPath),this.codeLensProvider?.refresh()})}isSourceFile(t){return["typescript","typescriptreact","javascript","javascriptreact"].includes(t.languageId)}dispose(){this.disposables.forEach(t=>t.dispose())}};var he=R(require("vscode")),et=class{constructor(t){this.workspaceRoot=t}provideCodeActions(t,s,n){let o=[];for(let i of n.diagnostics)if(i.source==="pickety"&&i.code){let r=typeof i.code=="object"?i.code.value:i.code,c=new he.CodeAction(`Go to Pickety rule: ${r}`,he.CodeActionKind.QuickFix);c.command={command:"pickety.goToRule",title:"Go to Rule",arguments:[this.workspaceRoot,r]},o.push(c);let a=i._picketyMetadata;if(a&&a.sourceModule&&a.targetModule){let u=new he.CodeAction(`Allow imports from '${a.targetModule}' in '${a.sourceModule}'`,he.CodeActionKind.QuickFix);u.command={command:"pickety.allowImport",title:"Allow Import",arguments:[this.workspaceRoot,a.sourceModule,a.targetModule]},o.push(u)}}return o}};var ge=R(require("vscode"));var tt=class{constructor(t,s,n){this.importGraph=t;this.workspaceRoot=s;this.configRef=n}_onDidChangeCodeLenses=new ge.EventEmitter;onDidChangeCodeLenses=this._onDidChangeCodeLenses.event;refresh(){this._onDidChangeCodeLenses.fire()}provideCodeLenses(t){let s=this.configRef.config;if(!s)return[];let n=E(t.uri.fsPath),o=this.importGraph.getModuleSummary(n,s.modules,this.workspaceRoot);if(o.dependentCount===0&&o.dependencyCount===0)return[];let i=[];if(o.dependentCount>0){let a=o.dependentModules.length===1?"1 module":`${o.dependentModules.length} modules`;i.push(`${o.dependentCount} dependent${o.dependentCount===1?"":"s"} (${a})`)}if(o.dependencyCount>0){let a=o.dependencyModules.length===1?"1 module":`${o.dependencyModules.length} modules`;i.push(`${o.dependencyCount} dependenc${o.dependencyCount===1?"y":"ies"} (${a})`)}let r=new ge.Range(0,0,0,0);return[new ge.CodeLens(r,{title:i.join(" | "),command:"pickety.showImpact",tooltip:"Show full impact analysis for this file"})]}dispose(){this._onDidChangeCodeLenses.dispose()}};var $o=[];async function Oo(e){let t=de.getInstance();t.logEvent("extension_activate");let s=_.window.createOutputChannel("Pickety");e.subscriptions.push(s),t.setOutputChannel(s);let n=_.workspace.workspaceFolders?.[0]?.uri.fsPath;if(!n){s.appendLine("Pickety: No workspace root found.");return}s.appendLine(`Pickety: Extension activated for workspace: ${n}`);let o=new qe(n);e.subscriptions.push(o);let i=new Xe(n,o);e.subscriptions.push(i);let r=new Ze(e);e.subscriptions.push(r);let c=_.languages.createDiagnosticCollection("pickety");e.subscriptions.push(c);let a=new Ye(c);e.subscriptions.push(a);let u=new et(n);e.subscriptions.push(_.languages.registerCodeActionsProvider({scheme:"file",language:"*"},u,{providedCodeActionKinds:[_.CodeActionKind.QuickFix]}));let p=new tt(i.getImportGraph(),n,{config:void 0});e.subscriptions.push(p);let l=new Ke(e,o,i,a,r,s,n);l.setCodeLensProvider(p),e.subscriptions.push(l),p.configRef=l.configRef,e.subscriptions.push(_.languages.registerCodeLensProvider({scheme:"file",pattern:Q},p)),Sn(e,o,i,n),o.onConfigChanged(f=>l.handleConfigResult(f)),i.onAnalysisReady(()=>{s.appendLine(`Pickety: Analysis complete. Found ${i.getKnownFiles().size} files.`),l.analyzeOpenEditors()}),o.reload(),o.reloadAliases()}function Io(){$o.forEach(e=>e.dispose())}0&&(module.exports={activate,deactivate});
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "author": {
6
6
  "name": "Dan Serio"
7
7
  },
8
- "version": "0.2.2",
8
+ "version": "0.3.0",
9
9
  "publisher": "DanSerio",
10
10
  "icon": "resources/icon.png",
11
11
  "license": "MIT",
@@ -111,7 +111,8 @@
111
111
  "scripts": {
112
112
  "vscode:prepublish": "npm run build && npm run build:cli",
113
113
  "compile": "npm run build",
114
- "compile-tests": "tsc -p ./",
114
+ "clean:test": "node -e \"require('fs').rmSync('out/test', { recursive: true, force: true })\"",
115
+ "compile-tests": "npm run clean:test && tsc -p ./",
115
116
  "build": "esbuild ./src/extension/index.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node --main-fields=module,main --minify",
116
117
  "build:cli": "esbuild ./src/cli/index.ts --bundle --outfile=out/cli.js --format=cjs --platform=node --main-fields=module,main --minify --banner:js=\"#!/usr/bin/env node\"",
117
118
  "watch": "esbuild ./src/extension/index.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node --main-fields=module,main --watch",