diff --git a/README.md b/README.md index ca8b72f..d940913 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Since Yarn 4.10.0, Yarn natively supports catalogs for managing dependency versi - **Supporting hierarchical catalog inheritance** (e.g., `stable/canary` inherits from `stable`) - **Providing validation** to ensure consistent catalog usage across workspaces - **Auto-applying default catalogs** when adding dependencies -- **Ignoring specific workspaces** from catalog enforcement +- **Filtering workspaces** with opt-in (`includedWorkspaces`) and opt-out (`ignoredWorkspaces`) options ## Requirements @@ -32,9 +32,10 @@ yarn plugin import https://raw.githubusercontent.com/toss/yarn-plugin-catalogs/m # catalogs.yml options: - default: [stable] # Optional: Default catalog groups for 'yarn add' - validation: warn # Optional: 'warn' | 'strict' | 'off' - ignoredWorkspaces: [] # Optional: Workspaces to ignore + default: [stable] # Optional: Default catalog groups for 'yarn add' + validation: warn # Optional: 'warn' | 'strict' | 'off' + includedWorkspaces: [] # Optional: Workspaces to include + ignoredWorkspaces: [] # Optional: Workspaces to ignore list: root: # Special alias for the root catalog (accessed via catalog:) @@ -243,9 +244,33 @@ list: If your `package.json` has more `catalog:stable` dependencies than `catalog:beta`, running `yarn add next` will automatically use `catalog:stable`. -### Ignoring Workspaces +### Workspace Filtering -Disable catalog enforcement for specific workspaces using glob patterns: +Control which workspaces are included in catalog protocol processing using `includedWorkspaces` and `ignoredWorkspaces` options. + +#### Including Workspaces + +Use `includedWorkspaces` to specify which workspaces should be processed for catalogs. Only matching workspaces will receive catalog validation and default catalog auto-application: + +```yaml +# In catalogs.yml +options: + includedWorkspaces: [apps-*, packages] + +list: + stable: + react: npm:18.0.0 +``` + +When `includedWorkspaces` is specified: +- Only matching workspaces receive validation warnings/errors +- Only matching workspaces have default catalogs auto-applied + +If `includedWorkspaces` is not specified, all workspaces are included by default. + +#### Ignoring Workspaces + +Use `ignoredWorkspaces` to exclude specific workspaces from catalog processing: ```yaml # In catalogs.yml @@ -260,7 +285,8 @@ list: Ignored workspaces: - Won't receive validation warnings/errors - Won't have default catalogs auto-applied -- Can still use `catalog:` protocol if needed + +`ignoredWorkspaces` takes precedence over `includedWorkspaces`. ### Validation diff --git a/bundles/@yarnpkg/plugin-catalogs.js b/bundles/@yarnpkg/plugin-catalogs.js index 3fcee69..d5ce6b4 100644 --- a/bundles/@yarnpkg/plugin-catalogs.js +++ b/bundles/@yarnpkg/plugin-catalogs.js @@ -3,17 +3,17 @@ module.exports = { name: "@yarnpkg/plugin-catalogs", factory: function (require) { -"use strict";var plugin=(()=>{var Qe=Object.create;var St=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Je=Object.getPrototypeOf,tr=Object.prototype.hasOwnProperty;var V=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var lt=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),er=(e,r)=>{for(var t in r)St(e,t,{get:r[t],enumerable:!0})},re=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of ze(r))!tr.call(e,n)&&n!==t&&St(e,n,{get:()=>r[n],enumerable:!(o=Ze(r,n))||o.enumerable});return e};var vt=(e,r,t)=>(t=e!=null?Qe(Je(e)):{},re(r||!e||!e.__esModule?St(t,"default",{value:e,enumerable:!0}):t,e)),rr=e=>re(St({},"__esModule",{value:!0}),e);var yt=lt((ho,Ae)=>{"use strict";var Z="\\\\/",de=`[^${Z}]`,et="\\.",yr="\\+",Ar="\\?",Lt="\\/",Rr="(?=.)",he="[^/]",Vt=`(?:${Lt}|$)`,me=`(?:^|${Lt})`,Ut=`${et}{1,2}${Vt}`,br=`(?!${et})`,Cr=`(?!${me}${Ut})`,_r=`(?!${et}{0,1}${Vt})`,Er=`(?!${Ut})`,xr=`[^.${Lt}]`,Or=`${he}*?`,Sr="/",ye={DOT_LITERAL:et,PLUS_LITERAL:yr,QMARK_LITERAL:Ar,SLASH_LITERAL:Lt,ONE_CHAR:Rr,QMARK:he,END_ANCHOR:Vt,DOTS_SLASH:Ut,NO_DOT:br,NO_DOTS:Cr,NO_DOT_SLASH:_r,NO_DOTS_SLASH:Er,QMARK_NO_DOT:xr,STAR:Or,START_ANCHOR:me,SEP:Sr},vr={...ye,SLASH_LITERAL:`[${Z}]`,QMARK:de,STAR:`${de}*?`,DOTS_SLASH:`${et}{1,2}(?:[${Z}]|$)`,NO_DOT:`(?!${et})`,NO_DOTS:`(?!(?:^|[${Z}])${et}{1,2}(?:[${Z}]|$))`,NO_DOT_SLASH:`(?!${et}{0,1}(?:[${Z}]|$))`,NO_DOTS_SLASH:`(?!${et}{1,2}(?:[${Z}]|$))`,QMARK_NO_DOT:`[^.${Z}]`,START_ANCHOR:`(?:^|[${Z}])`,END_ANCHOR:`(?:[${Z}]|$)`,SEP:"\\"},Tr={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};Ae.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:Tr,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(e){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${e.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(e){return e===!0?vr:ye}}});var At=lt(B=>{"use strict";var{REGEX_BACKSLASH:$r,REGEX_REMOVE_BACKSLASH:wr,REGEX_SPECIAL_CHARS:Lr,REGEX_SPECIAL_CHARS_GLOBAL:kr}=yt();B.isObject=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);B.hasRegexChars=e=>Lr.test(e);B.isRegexChar=e=>e.length===1&&B.hasRegexChars(e);B.escapeRegex=e=>e.replace(kr,"\\$1");B.toPosixSlashes=e=>e.replace($r,"/");B.isWindows=()=>{if(typeof navigator<"u"&&navigator.platform){let e=navigator.platform.toLowerCase();return e==="win32"||e==="windows"}return typeof process<"u"&&process.platform?process.platform==="win32":!1};B.removeBackslashes=e=>e.replace(wr,r=>r==="\\"?"":r);B.escapeLast=(e,r,t)=>{let o=e.lastIndexOf(r,t);return o===-1?e:e[o-1]==="\\"?B.escapeLast(e,r,o-1):`${e.slice(0,o)}\\${e.slice(o)}`};B.removePrefix=(e,r={})=>{let t=e;return t.startsWith("./")&&(t=t.slice(2),r.prefix="./"),t};B.wrapOutput=(e,r={},t={})=>{let o=t.contains?"":"^",n=t.contains?"":"$",a=`${o}(?:${e})${n}`;return r.negated===!0&&(a=`(?:^(?!${a}).*$)`),a};B.basename=(e,{windows:r}={})=>{let t=e.split(r?/[\\/]/:"/"),o=t[t.length-1];return o===""?t[t.length-2]:o}});var Se=lt((yo,Oe)=>{"use strict";var Re=At(),{CHAR_ASTERISK:Kt,CHAR_AT:Ir,CHAR_BACKWARD_SLASH:Rt,CHAR_COMMA:Nr,CHAR_DOT:Yt,CHAR_EXCLAMATION_MARK:Xt,CHAR_FORWARD_SLASH:xe,CHAR_LEFT_CURLY_BRACE:qt,CHAR_LEFT_PARENTHESES:Qt,CHAR_LEFT_SQUARE_BRACKET:Pr,CHAR_PLUS:Hr,CHAR_QUESTION_MARK:be,CHAR_RIGHT_CURLY_BRACE:Mr,CHAR_RIGHT_PARENTHESES:Ce,CHAR_RIGHT_SQUARE_BRACKET:Gr}=yt(),_e=e=>e===xe||e===Rt,Ee=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)},Dr=(e,r)=>{let t=r||{},o=e.length-1,n=t.parts===!0||t.scanToEnd===!0,a=[],s=[],f=[],g=e,A=-1,R=0,H=0,w=!1,F=!1,b=!1,I=!1,at=!1,q=!1,_=!1,Q=!1,it=!1,M=!1,N=0,W,d,m={value:"",depth:0,isGlob:!1},l=()=>A>=o,D=()=>g.charCodeAt(A+1),L=()=>(W=d,g.charCodeAt(++A));for(;A0&&(i=g.slice(0,R),g=g.slice(R),H-=R),T&&b===!0&&H>0?(T=g.slice(0,H),c=g.slice(H)):b===!0?(T="",c=g):T=g,T&&T!==""&&T!=="/"&&T!==g&&_e(T.charCodeAt(T.length-1))&&(T=T.slice(0,-1)),t.unescape===!0&&(c&&(c=Re.removeBackslashes(c)),T&&_===!0&&(T=Re.removeBackslashes(T)));let U={prefix:i,input:e,start:R,base:T,glob:c,isBrace:w,isBracket:F,isGlob:b,isExtglob:I,isGlobstar:at,negated:Q,negatedExtglob:it};if(t.tokens===!0&&(U.maxDepth=0,_e(d)||s.push(m),U.tokens=s),t.parts===!0||t.tokens===!0){let C;for(let O=0;O{"use strict";var kt=yt(),z=At(),{MAX_LENGTH:It,POSIX_REGEX_SOURCE:jr,REGEX_NON_SPECIAL_CHARS:Br,REGEX_SPECIAL_CHARS_BACKREF:Fr,REPLACEMENTS:ve}=kt,Wr=(e,r)=>{if(typeof r.expandRange=="function")return r.expandRange(...e,r);e.sort();let t=`[${e.join("-")}]`;try{new RegExp(t)}catch{return e.map(n=>z.escapeRegex(n)).join("..")}return t},ft=(e,r)=>`Missing ${e}: "${r}" - use "\\\\${r}" to match literal characters`,Zt=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a string");e=ve[e]||e;let t={...r},o=typeof t.maxLength=="number"?Math.min(It,t.maxLength):It,n=e.length;if(n>o)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${o}`);let a={type:"bos",value:"",output:t.prepend||""},s=[a],f=t.capture?"":"?:",g=kt.globChars(t.windows),A=kt.extglobChars(g),{DOT_LITERAL:R,PLUS_LITERAL:H,SLASH_LITERAL:w,ONE_CHAR:F,DOTS_SLASH:b,NO_DOT:I,NO_DOT_SLASH:at,NO_DOTS_SLASH:q,QMARK:_,QMARK_NO_DOT:Q,STAR:it,START_ANCHOR:M}=g,N=p=>`(${f}(?:(?!${M}${p.dot?b:R}).)*?)`,W=t.dot?"":I,d=t.dot?_:Q,m=t.bash===!0?N(t):it;t.capture&&(m=`(${m})`),typeof t.noext=="boolean"&&(t.noextglob=t.noext);let l={input:e,index:-1,start:0,dot:t.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:s};e=z.removePrefix(e,l),n=e.length;let D=[],L=[],T=[],i=a,c,U=()=>l.index===n-1,C=l.peek=(p=1)=>e[l.index+p],O=l.advance=()=>e[++l.index]||"",tt=()=>e.slice(l.index+1),K=(p="",E=0)=>{l.consumed+=p,l.index+=E},st=p=>{l.output+=p.output!=null?p.output:p.value,K(p.value)},Xe=()=>{let p=1;for(;C()==="!"&&(C(2)!=="("||C(3)==="?");)O(),l.start++,p++;return p%2===0?!1:(l.negated=!0,l.start++,!0)},Et=p=>{l[p]++,T.push(p)},ct=p=>{l[p]--,T.pop()},y=p=>{if(i.type==="globstar"){let E=l.braces>0&&(p.type==="comma"||p.type==="brace"),u=p.extglob===!0||D.length&&(p.type==="pipe"||p.type==="paren");p.type!=="slash"&&p.type!=="paren"&&!E&&!u&&(l.output=l.output.slice(0,-i.output.length),i.type="star",i.value="*",i.output=m,l.output+=i.output)}if(D.length&&p.type!=="paren"&&(D[D.length-1].inner+=p.value),(p.value||p.output)&&st(p),i&&i.type==="text"&&p.type==="text"){i.output=(i.output||i.value)+p.value,i.value+=p.value;return}p.prev=i,s.push(p),i=p},xt=(p,E)=>{let u={...A[E],conditions:1,inner:""};u.prev=i,u.parens=l.parens,u.output=l.output;let h=(t.capture?"(":"")+u.open;Et("parens"),y({type:p,value:E,output:l.output?"":F}),y({type:"paren",extglob:!0,value:O(),output:h}),D.push(u)},qe=p=>{let E=p.close+(t.capture?")":""),u;if(p.type==="negate"){let h=m;if(p.inner&&p.inner.length>1&&p.inner.includes("/")&&(h=N(t)),(h!==m||U()||/^\)+$/.test(tt()))&&(E=p.close=`)$))${h}`),p.inner.includes("*")&&(u=tt())&&/^\.[^\\/.]+$/.test(u)){let S=Zt(u,{...r,fastpaths:!1}).output;E=p.close=`)${S})${h})`}p.prev.type==="bos"&&(l.negatedExtglob=!0)}y({type:"paren",extglob:!0,value:c,output:E}),ct("parens")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let p=!1,E=e.replace(Fr,(u,h,S,G,k,Dt)=>G==="\\"?(p=!0,u):G==="?"?h?h+G+(k?_.repeat(k.length):""):Dt===0?d+(k?_.repeat(k.length):""):_.repeat(S.length):G==="."?R.repeat(S.length):G==="*"?h?h+G+(k?m:""):m:h?u:`\\${u}`);return p===!0&&(t.unescape===!0?E=E.replace(/\\/g,""):E=E.replace(/\\+/g,u=>u.length%2===0?"\\\\":u?"\\":"")),E===e&&t.contains===!0?(l.output=e,l):(l.output=z.wrapOutput(E,l,r),l)}for(;!U();){if(c=O(),c==="\0")continue;if(c==="\\"){let u=C();if(u==="/"&&t.bash!==!0||u==="."||u===";")continue;if(!u){c+="\\",y({type:"text",value:c});continue}let h=/^\\+/.exec(tt()),S=0;if(h&&h[0].length>2&&(S=h[0].length,l.index+=S,S%2!==0&&(c+="\\")),t.unescape===!0?c=O():c+=O(),l.brackets===0){y({type:"text",value:c});continue}}if(l.brackets>0&&(c!=="]"||i.value==="["||i.value==="[^")){if(t.posix!==!1&&c===":"){let u=i.value.slice(1);if(u.includes("[")&&(i.posix=!0,u.includes(":"))){let h=i.value.lastIndexOf("["),S=i.value.slice(0,h),G=i.value.slice(h+2),k=jr[G];if(k){i.value=S+k,l.backtrack=!0,O(),!a.output&&s.indexOf(i)===1&&(a.output=F);continue}}}(c==="["&&C()!==":"||c==="-"&&C()==="]")&&(c=`\\${c}`),c==="]"&&(i.value==="["||i.value==="[^")&&(c=`\\${c}`),t.posix===!0&&c==="!"&&i.value==="["&&(c="^"),i.value+=c,st({value:c});continue}if(l.quotes===1&&c!=='"'){c=z.escapeRegex(c),i.value+=c,st({value:c});continue}if(c==='"'){l.quotes=l.quotes===1?0:1,t.keepQuotes===!0&&y({type:"text",value:c});continue}if(c==="("){Et("parens"),y({type:"paren",value:c});continue}if(c===")"){if(l.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ft("opening","("));let u=D[D.length-1];if(u&&l.parens===u.parens+1){qe(D.pop());continue}y({type:"paren",value:c,output:l.parens?")":"\\)"}),ct("parens");continue}if(c==="["){if(t.nobracket===!0||!tt().includes("]")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ft("closing","]"));c=`\\${c}`}else Et("brackets");y({type:"bracket",value:c});continue}if(c==="]"){if(t.nobracket===!0||i&&i.type==="bracket"&&i.value.length===1){y({type:"text",value:c,output:`\\${c}`});continue}if(l.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ft("opening","["));y({type:"text",value:c,output:`\\${c}`});continue}ct("brackets");let u=i.value.slice(1);if(i.posix!==!0&&u[0]==="^"&&!u.includes("/")&&(c=`/${c}`),i.value+=c,st({value:c}),t.literalBrackets===!1||z.hasRegexChars(u))continue;let h=z.escapeRegex(i.value);if(l.output=l.output.slice(0,-i.value.length),t.literalBrackets===!0){l.output+=h,i.value=h;continue}i.value=`(${f}${h}|${i.value})`,l.output+=i.value;continue}if(c==="{"&&t.nobrace!==!0){Et("braces");let u={type:"brace",value:c,output:"(",outputIndex:l.output.length,tokensIndex:l.tokens.length};L.push(u),y(u);continue}if(c==="}"){let u=L[L.length-1];if(t.nobrace===!0||!u){y({type:"text",value:c,output:c});continue}let h=")";if(u.dots===!0){let S=s.slice(),G=[];for(let k=S.length-1;k>=0&&(s.pop(),S[k].type!=="brace");k--)S[k].type!=="dots"&&G.unshift(S[k].value);h=Wr(G,t),l.backtrack=!0}if(u.comma!==!0&&u.dots!==!0){let S=l.output.slice(0,u.outputIndex),G=l.tokens.slice(u.tokensIndex);u.value=u.output="\\{",c=h="\\}",l.output=S;for(let k of G)l.output+=k.output||k.value}y({type:"brace",value:c,output:h}),ct("braces"),L.pop();continue}if(c==="|"){D.length>0&&D[D.length-1].conditions++,y({type:"text",value:c});continue}if(c===","){let u=c,h=L[L.length-1];h&&T[T.length-1]==="braces"&&(h.comma=!0,u="|"),y({type:"comma",value:c,output:u});continue}if(c==="/"){if(i.type==="dot"&&l.index===l.start+1){l.start=l.index+1,l.consumed="",l.output="",s.pop(),i=a;continue}y({type:"slash",value:c,output:w});continue}if(c==="."){if(l.braces>0&&i.type==="dot"){i.value==="."&&(i.output=R);let u=L[L.length-1];i.type="dots",i.output+=c,i.value+=c,u.dots=!0;continue}if(l.braces+l.parens===0&&i.type!=="bos"&&i.type!=="slash"){y({type:"text",value:c,output:R});continue}y({type:"dot",value:c,output:R});continue}if(c==="?"){if(!(i&&i.value==="(")&&t.noextglob!==!0&&C()==="("&&C(2)!=="?"){xt("qmark",c);continue}if(i&&i.type==="paren"){let h=C(),S=c;(i.value==="("&&!/[!=<:]/.test(h)||h==="<"&&!/<([!=]|\w+>)/.test(tt()))&&(S=`\\${c}`),y({type:"text",value:c,output:S});continue}if(t.dot!==!0&&(i.type==="slash"||i.type==="bos")){y({type:"qmark",value:c,output:Q});continue}y({type:"qmark",value:c,output:_});continue}if(c==="!"){if(t.noextglob!==!0&&C()==="("&&(C(2)!=="?"||!/[!=<:]/.test(C(3)))){xt("negate",c);continue}if(t.nonegate!==!0&&l.index===0){Xe();continue}}if(c==="+"){if(t.noextglob!==!0&&C()==="("&&C(2)!=="?"){xt("plus",c);continue}if(i&&i.value==="("||t.regex===!1){y({type:"plus",value:c,output:H});continue}if(i&&(i.type==="bracket"||i.type==="paren"||i.type==="brace")||l.parens>0){y({type:"plus",value:c});continue}y({type:"plus",value:H});continue}if(c==="@"){if(t.noextglob!==!0&&C()==="("&&C(2)!=="?"){y({type:"at",extglob:!0,value:c,output:""});continue}y({type:"text",value:c});continue}if(c!=="*"){(c==="$"||c==="^")&&(c=`\\${c}`);let u=Br.exec(tt());u&&(c+=u[0],l.index+=u[0].length),y({type:"text",value:c});continue}if(i&&(i.type==="globstar"||i.star===!0)){i.type="star",i.star=!0,i.value+=c,i.output=m,l.backtrack=!0,l.globstar=!0,K(c);continue}let p=tt();if(t.noextglob!==!0&&/^\([^?]/.test(p)){xt("star",c);continue}if(i.type==="star"){if(t.noglobstar===!0){K(c);continue}let u=i.prev,h=u.prev,S=u.type==="slash"||u.type==="bos",G=h&&(h.type==="star"||h.type==="globstar");if(t.bash===!0&&(!S||p[0]&&p[0]!=="/")){y({type:"star",value:c,output:""});continue}let k=l.braces>0&&(u.type==="comma"||u.type==="brace"),Dt=D.length&&(u.type==="pipe"||u.type==="paren");if(!S&&u.type!=="paren"&&!k&&!Dt){y({type:"star",value:c,output:""});continue}for(;p.slice(0,3)==="/**";){let Ot=e[l.index+4];if(Ot&&Ot!=="/")break;p=p.slice(3),K("/**",3)}if(u.type==="bos"&&U()){i.type="globstar",i.value+=c,i.output=N(t),l.output=i.output,l.globstar=!0,K(c);continue}if(u.type==="slash"&&u.prev.type!=="bos"&&!G&&U()){l.output=l.output.slice(0,-(u.output+i.output).length),u.output=`(?:${u.output}`,i.type="globstar",i.output=N(t)+(t.strictSlashes?")":"|$)"),i.value+=c,l.globstar=!0,l.output+=u.output+i.output,K(c);continue}if(u.type==="slash"&&u.prev.type!=="bos"&&p[0]==="/"){let Ot=p[1]!==void 0?"|$":"";l.output=l.output.slice(0,-(u.output+i.output).length),u.output=`(?:${u.output}`,i.type="globstar",i.output=`${N(t)}${w}|${w}${Ot})`,i.value+=c,l.output+=u.output+i.output,l.globstar=!0,K(c+O()),y({type:"slash",value:"/",output:""});continue}if(u.type==="bos"&&p[0]==="/"){i.type="globstar",i.value+=c,i.output=`(?:^|${w}|${N(t)}${w})`,l.output=i.output,l.globstar=!0,K(c+O()),y({type:"slash",value:"/",output:""});continue}l.output=l.output.slice(0,-i.output.length),i.type="globstar",i.output=N(t),i.value+=c,l.output+=i.output,l.globstar=!0,K(c);continue}let E={type:"star",value:c,output:m};if(t.bash===!0){E.output=".*?",(i.type==="bos"||i.type==="slash")&&(E.output=W+E.output),y(E);continue}if(i&&(i.type==="bracket"||i.type==="paren")&&t.regex===!0){E.output=c,y(E);continue}(l.index===l.start||i.type==="slash"||i.type==="dot")&&(i.type==="dot"?(l.output+=at,i.output+=at):t.dot===!0?(l.output+=q,i.output+=q):(l.output+=W,i.output+=W),C()!=="*"&&(l.output+=F,i.output+=F)),y(E)}for(;l.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ft("closing","]"));l.output=z.escapeLast(l.output,"["),ct("brackets")}for(;l.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ft("closing",")"));l.output=z.escapeLast(l.output,"("),ct("parens")}for(;l.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ft("closing","}"));l.output=z.escapeLast(l.output,"{"),ct("braces")}if(t.strictSlashes!==!0&&(i.type==="star"||i.type==="bracket")&&y({type:"maybe_slash",value:"",output:`${w}?`}),l.backtrack===!0){l.output="";for(let p of l.tokens)l.output+=p.output!=null?p.output:p.value,p.suffix&&(l.output+=p.suffix)}return l};Zt.fastpaths=(e,r)=>{let t={...r},o=typeof t.maxLength=="number"?Math.min(It,t.maxLength):It,n=e.length;if(n>o)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${o}`);e=ve[e]||e;let{DOT_LITERAL:a,SLASH_LITERAL:s,ONE_CHAR:f,DOTS_SLASH:g,NO_DOT:A,NO_DOTS:R,NO_DOTS_SLASH:H,STAR:w,START_ANCHOR:F}=kt.globChars(t.windows),b=t.dot?R:A,I=t.dot?H:A,at=t.capture?"":"?:",q={negated:!1,prefix:""},_=t.bash===!0?".*?":w;t.capture&&(_=`(${_})`);let Q=W=>W.noglobstar===!0?_:`(${at}(?:(?!${F}${W.dot?g:a}).)*?)`,it=W=>{switch(W){case"*":return`${b}${f}${_}`;case".*":return`${a}${f}${_}`;case"*.*":return`${b}${_}${a}${f}${_}`;case"*/*":return`${b}${_}${s}${f}${I}${_}`;case"**":return b+Q(t);case"**/*":return`(?:${b}${Q(t)}${s})?${I}${f}${_}`;case"**/*.*":return`(?:${b}${Q(t)}${s})?${I}${_}${a}${f}${_}`;case"**/.*":return`(?:${b}${Q(t)}${s})?${a}${f}${_}`;default:{let d=/^(.*?)\.(\w+)$/.exec(W);if(!d)return;let m=it(d[1]);return m?m+a+d[2]:void 0}}},M=z.removePrefix(e,q),N=it(M);return N&&t.strictSlashes!==!0&&(N+=`${s}?`),N};Te.exports=Zt});var ke=lt((Ro,Le)=>{"use strict";var Vr=Se(),zt=$e(),we=At(),Ur=yt(),Kr=e=>e&&typeof e=="object"&&!Array.isArray(e),$=(e,r,t=!1)=>{if(Array.isArray(e)){let R=e.map(w=>$(w,r,t));return w=>{for(let F of R){let b=F(w);if(b)return b}return!1}}let o=Kr(e)&&e.tokens&&e.input;if(e===""||typeof e!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let n=r||{},a=n.windows,s=o?$.compileRe(e,r):$.makeRe(e,r,!1,!0),f=s.state;delete s.state;let g=()=>!1;if(n.ignore){let R={...r,ignore:null,onMatch:null,onResult:null};g=$(n.ignore,R,t)}let A=(R,H=!1)=>{let{isMatch:w,match:F,output:b}=$.test(R,s,r,{glob:e,posix:a}),I={glob:e,state:f,regex:s,posix:a,input:R,output:b,match:F,isMatch:w};return typeof n.onResult=="function"&&n.onResult(I),w===!1?(I.isMatch=!1,H?I:!1):g(R)?(typeof n.onIgnore=="function"&&n.onIgnore(I),I.isMatch=!1,H?I:!1):(typeof n.onMatch=="function"&&n.onMatch(I),H?I:!0)};return t&&(A.state=f),A};$.test=(e,r,t,{glob:o,posix:n}={})=>{if(typeof e!="string")throw new TypeError("Expected input to be a string");if(e==="")return{isMatch:!1,output:""};let a=t||{},s=a.format||(n?we.toPosixSlashes:null),f=e===o,g=f&&s?s(e):e;return f===!1&&(g=s?s(e):e,f=g===o),(f===!1||a.capture===!0)&&(a.matchBase===!0||a.basename===!0?f=$.matchBase(e,r,t,n):f=r.exec(g)),{isMatch:!!f,match:f,output:g}};$.matchBase=(e,r,t)=>(r instanceof RegExp?r:$.makeRe(r,t)).test(we.basename(e));$.isMatch=(e,r,t)=>$(r,t)(e);$.parse=(e,r)=>Array.isArray(e)?e.map(t=>$.parse(t,r)):zt(e,{...r,fastpaths:!1});$.scan=(e,r)=>Vr(e,r);$.compileRe=(e,r,t=!1,o=!1)=>{if(t===!0)return e.output;let n=r||{},a=n.contains?"":"^",s=n.contains?"":"$",f=`${a}(?:${e.output})${s}`;e&&e.negated===!0&&(f=`^(?!${f}).*$`);let g=$.toRegex(f,r);return o===!0&&(g.state=e),g};$.makeRe=(e,r={},t=!1,o=!1)=>{if(!e||typeof e!="string")throw new TypeError("Expected a non-empty string");let n={negated:!1,fastpaths:!0};return r.fastpaths!==!1&&(e[0]==="."||e[0]==="*")&&(n.output=zt.fastpaths(e,r)),n.output||(n=zt(e,r)),$.compileRe(n,r,t,o)};$.toRegex=(e,r)=>{try{let t=r||{};return new RegExp(e,t.flags||(t.nocase?"i":""))}catch(t){if(r&&r.debug===!0)throw t;return/$^/}};$.constants=Ur;Le.exports=$});var He=lt((bo,Pe)=>{"use strict";var Ie=ke(),Yr=At();function Ne(e,r,t=!1){return r&&(r.windows===null||r.windows===void 0)&&(r={...r,windows:Yr.isWindows()}),Ie(e,r,t)}Object.assign(Ne,Ie);Pe.exports=Ne});var ro={};er(ro,{default:()=>eo});var dt=V("@yarnpkg/core");var oe=(e=0)=>r=>`\x1B[${r+e}m`,ne=(e=0)=>r=>`\x1B[${38+e};5;${r}m`,se=(e=0)=>(r,t,o)=>`\x1B[${38+e};2;${r};${t};${o}m`,x={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},no=Object.keys(x.modifier),or=Object.keys(x.color),nr=Object.keys(x.bgColor),so=[...or,...nr];function sr(){let e=new Map;for(let[r,t]of Object.entries(x)){for(let[o,n]of Object.entries(t))x[o]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},t[o]=x[o],e.set(n[0],n[1]);Object.defineProperty(x,r,{value:t,enumerable:!1})}return Object.defineProperty(x,"codes",{value:e,enumerable:!1}),x.color.close="\x1B[39m",x.bgColor.close="\x1B[49m",x.color.ansi=oe(),x.color.ansi256=ne(),x.color.ansi16m=se(),x.bgColor.ansi=oe(10),x.bgColor.ansi256=ne(10),x.bgColor.ansi16m=se(10),Object.defineProperties(x,{rgbToAnsi256:{value(r,t,o){return r===t&&t===o?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(t/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(r){let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!t)return[0,0,0];let[o]=t;o.length===3&&(o=[...o].map(a=>a+a).join(""));let n=Number.parseInt(o,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:r=>x.rgbToAnsi256(...x.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value(r){if(r<8)return 30+r;if(r<16)return 90+(r-8);let t,o,n;if(r>=232)t=((r-232)*10+8)/255,o=t,n=t;else{r-=16;let f=r%36;t=Math.floor(r/36)/5,o=Math.floor(f/6)/5,n=f%6/5}let a=Math.max(t,o,n)*2;if(a===0)return 30;let s=30+(Math.round(n)<<2|Math.round(o)<<1|Math.round(t));return a===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(r,t,o)=>x.ansi256ToAnsi(x.rgbToAnsi256(r,t,o)),enumerable:!1},hexToAnsi:{value:r=>x.ansi256ToAnsi(x.hexToAnsi256(r)),enumerable:!1}}),x}var ar=sr(),X=ar;var $t=vt(V("process"),1),ie=vt(V("os"),1),jt=vt(V("tty"),1);function Y(e,r=globalThis.Deno?globalThis.Deno.args:$t.default.argv){let t=e.startsWith("-")?"":e.length===1?"-":"--",o=r.indexOf(t+e),n=r.indexOf("--");return o!==-1&&(n===-1||o=2,has16m:e>=3}}function lr(e,{streamIsTTY:r,sniffFlags:t=!0}={}){let o=ir();o!==void 0&&(Tt=o);let n=t?Tt:o;if(n===0)return 0;if(t){if(Y("color=16m")||Y("color=full")||Y("color=truecolor"))return 3;if(Y("color=256"))return 2}if("TF_BUILD"in v&&"AGENT_NAME"in v)return 1;if(e&&!r&&n===void 0)return 0;let a=n||0;if(v.TERM==="dumb")return a;if($t.default.platform==="win32"){let s=ie.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in v)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in v)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in v)||v.CI_NAME==="codeship"?1:a;if("TEAMCITY_VERSION"in v)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(v.TEAMCITY_VERSION)?1:0;if(v.COLORTERM==="truecolor"||v.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in v){let s=Number.parseInt((v.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(v.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(v.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(v.TERM)||"COLORTERM"in v?1:a}function ae(e,r={}){let t=lr(e,{streamIsTTY:e&&e.isTTY,...r});return cr(t)}var ur={stdout:ae({isTTY:jt.default.isatty(1)}),stderr:ae({isTTY:jt.default.isatty(2)})},ce=ur;function le(e,r,t){let o=e.indexOf(r);if(o===-1)return e;let n=r.length,a=0,s="";do s+=e.slice(a,o)+r+t,a=o+n,o=e.indexOf(r,a);while(o!==-1);return s+=e.slice(a),s}function ue(e,r,t,o){let n=0,a="";do{let s=e[o-1]==="\r";a+=e.slice(n,s?o-1:o)+r+(s?`\r +"use strict";var plugin=(()=>{var Qe=Object.create;var St=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Je=Object.getPrototypeOf,tr=Object.prototype.hasOwnProperty;var V=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var lt=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),er=(e,r)=>{for(var t in r)St(e,t,{get:r[t],enumerable:!0})},oe=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of ze(r))!tr.call(e,n)&&n!==t&&St(e,n,{get:()=>r[n],enumerable:!(o=Ze(r,n))||o.enumerable});return e};var vt=(e,r,t)=>(t=e!=null?Qe(Je(e)):{},oe(r||!e||!e.__esModule?St(t,"default",{value:e,enumerable:!0}):t,e)),rr=e=>oe(St({},"__esModule",{value:!0}),e);var yt=lt((ho,Re)=>{"use strict";var Z="\\\\/",he=`[^${Z}]`,et="\\.",yr="\\+",Ar="\\?",Lt="\\/",Rr="(?=.)",me="[^/]",Vt=`(?:${Lt}|$)`,ye=`(?:^|${Lt})`,Ut=`${et}{1,2}${Vt}`,br=`(?!${et})`,Cr=`(?!${ye}${Ut})`,_r=`(?!${et}{0,1}${Vt})`,Er=`(?!${Ut})`,xr=`[^.${Lt}]`,Or=`${me}*?`,Sr="/",Ae={DOT_LITERAL:et,PLUS_LITERAL:yr,QMARK_LITERAL:Ar,SLASH_LITERAL:Lt,ONE_CHAR:Rr,QMARK:me,END_ANCHOR:Vt,DOTS_SLASH:Ut,NO_DOT:br,NO_DOTS:Cr,NO_DOT_SLASH:_r,NO_DOTS_SLASH:Er,QMARK_NO_DOT:xr,STAR:Or,START_ANCHOR:ye,SEP:Sr},vr={...Ae,SLASH_LITERAL:`[${Z}]`,QMARK:he,STAR:`${he}*?`,DOTS_SLASH:`${et}{1,2}(?:[${Z}]|$)`,NO_DOT:`(?!${et})`,NO_DOTS:`(?!(?:^|[${Z}])${et}{1,2}(?:[${Z}]|$))`,NO_DOT_SLASH:`(?!${et}{0,1}(?:[${Z}]|$))`,NO_DOTS_SLASH:`(?!${et}{1,2}(?:[${Z}]|$))`,QMARK_NO_DOT:`[^.${Z}]`,START_ANCHOR:`(?:^|[${Z}])`,END_ANCHOR:`(?:[${Z}]|$)`,SEP:"\\"},Tr={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};Re.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:Tr,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(e){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${e.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(e){return e===!0?vr:Ae}}});var At=lt(B=>{"use strict";var{REGEX_BACKSLASH:$r,REGEX_REMOVE_BACKSLASH:wr,REGEX_SPECIAL_CHARS:Lr,REGEX_SPECIAL_CHARS_GLOBAL:kr}=yt();B.isObject=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);B.hasRegexChars=e=>Lr.test(e);B.isRegexChar=e=>e.length===1&&B.hasRegexChars(e);B.escapeRegex=e=>e.replace(kr,"\\$1");B.toPosixSlashes=e=>e.replace($r,"/");B.isWindows=()=>{if(typeof navigator<"u"&&navigator.platform){let e=navigator.platform.toLowerCase();return e==="win32"||e==="windows"}return typeof process<"u"&&process.platform?process.platform==="win32":!1};B.removeBackslashes=e=>e.replace(wr,r=>r==="\\"?"":r);B.escapeLast=(e,r,t)=>{let o=e.lastIndexOf(r,t);return o===-1?e:e[o-1]==="\\"?B.escapeLast(e,r,o-1):`${e.slice(0,o)}\\${e.slice(o)}`};B.removePrefix=(e,r={})=>{let t=e;return t.startsWith("./")&&(t=t.slice(2),r.prefix="./"),t};B.wrapOutput=(e,r={},t={})=>{let o=t.contains?"":"^",n=t.contains?"":"$",a=`${o}(?:${e})${n}`;return r.negated===!0&&(a=`(?:^(?!${a}).*$)`),a};B.basename=(e,{windows:r}={})=>{let t=e.split(r?/[\\/]/:"/"),o=t[t.length-1];return o===""?t[t.length-2]:o}});var ve=lt((yo,Se)=>{"use strict";var be=At(),{CHAR_ASTERISK:Kt,CHAR_AT:Ir,CHAR_BACKWARD_SLASH:Rt,CHAR_COMMA:Nr,CHAR_DOT:Yt,CHAR_EXCLAMATION_MARK:Xt,CHAR_FORWARD_SLASH:Oe,CHAR_LEFT_CURLY_BRACE:qt,CHAR_LEFT_PARENTHESES:Qt,CHAR_LEFT_SQUARE_BRACKET:Pr,CHAR_PLUS:Hr,CHAR_QUESTION_MARK:Ce,CHAR_RIGHT_CURLY_BRACE:Mr,CHAR_RIGHT_PARENTHESES:_e,CHAR_RIGHT_SQUARE_BRACKET:Gr}=yt(),Ee=e=>e===Oe||e===Rt,xe=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)},Dr=(e,r)=>{let t=r||{},o=e.length-1,n=t.parts===!0||t.scanToEnd===!0,a=[],s=[],f=[],g=e,A=-1,R=0,H=0,w=!1,W=!1,b=!1,I=!1,at=!1,q=!1,_=!1,Q=!1,it=!1,M=!1,N=0,F,d,m={value:"",depth:0,isGlob:!1},l=()=>A>=o,D=()=>g.charCodeAt(A+1),L=()=>(F=d,g.charCodeAt(++A));for(;A0&&(i=g.slice(0,R),g=g.slice(R),H-=R),T&&b===!0&&H>0?(T=g.slice(0,H),c=g.slice(H)):b===!0?(T="",c=g):T=g,T&&T!==""&&T!=="/"&&T!==g&&Ee(T.charCodeAt(T.length-1))&&(T=T.slice(0,-1)),t.unescape===!0&&(c&&(c=be.removeBackslashes(c)),T&&_===!0&&(T=be.removeBackslashes(T)));let U={prefix:i,input:e,start:R,base:T,glob:c,isBrace:w,isBracket:W,isGlob:b,isExtglob:I,isGlobstar:at,negated:Q,negatedExtglob:it};if(t.tokens===!0&&(U.maxDepth=0,Ee(d)||s.push(m),U.tokens=s),t.parts===!0||t.tokens===!0){let C;for(let O=0;O{"use strict";var kt=yt(),z=At(),{MAX_LENGTH:It,POSIX_REGEX_SOURCE:jr,REGEX_NON_SPECIAL_CHARS:Br,REGEX_SPECIAL_CHARS_BACKREF:Wr,REPLACEMENTS:Te}=kt,Fr=(e,r)=>{if(typeof r.expandRange=="function")return r.expandRange(...e,r);e.sort();let t=`[${e.join("-")}]`;try{new RegExp(t)}catch{return e.map(n=>z.escapeRegex(n)).join("..")}return t},ft=(e,r)=>`Missing ${e}: "${r}" - use "\\\\${r}" to match literal characters`,Zt=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a string");e=Te[e]||e;let t={...r},o=typeof t.maxLength=="number"?Math.min(It,t.maxLength):It,n=e.length;if(n>o)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${o}`);let a={type:"bos",value:"",output:t.prepend||""},s=[a],f=t.capture?"":"?:",g=kt.globChars(t.windows),A=kt.extglobChars(g),{DOT_LITERAL:R,PLUS_LITERAL:H,SLASH_LITERAL:w,ONE_CHAR:W,DOTS_SLASH:b,NO_DOT:I,NO_DOT_SLASH:at,NO_DOTS_SLASH:q,QMARK:_,QMARK_NO_DOT:Q,STAR:it,START_ANCHOR:M}=g,N=p=>`(${f}(?:(?!${M}${p.dot?b:R}).)*?)`,F=t.dot?"":I,d=t.dot?_:Q,m=t.bash===!0?N(t):it;t.capture&&(m=`(${m})`),typeof t.noext=="boolean"&&(t.noextglob=t.noext);let l={input:e,index:-1,start:0,dot:t.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:s};e=z.removePrefix(e,l),n=e.length;let D=[],L=[],T=[],i=a,c,U=()=>l.index===n-1,C=l.peek=(p=1)=>e[l.index+p],O=l.advance=()=>e[++l.index]||"",tt=()=>e.slice(l.index+1),K=(p="",E=0)=>{l.consumed+=p,l.index+=E},st=p=>{l.output+=p.output!=null?p.output:p.value,K(p.value)},Xe=()=>{let p=1;for(;C()==="!"&&(C(2)!=="("||C(3)==="?");)O(),l.start++,p++;return p%2===0?!1:(l.negated=!0,l.start++,!0)},Et=p=>{l[p]++,T.push(p)},ct=p=>{l[p]--,T.pop()},y=p=>{if(i.type==="globstar"){let E=l.braces>0&&(p.type==="comma"||p.type==="brace"),u=p.extglob===!0||D.length&&(p.type==="pipe"||p.type==="paren");p.type!=="slash"&&p.type!=="paren"&&!E&&!u&&(l.output=l.output.slice(0,-i.output.length),i.type="star",i.value="*",i.output=m,l.output+=i.output)}if(D.length&&p.type!=="paren"&&(D[D.length-1].inner+=p.value),(p.value||p.output)&&st(p),i&&i.type==="text"&&p.type==="text"){i.output=(i.output||i.value)+p.value,i.value+=p.value;return}p.prev=i,s.push(p),i=p},xt=(p,E)=>{let u={...A[E],conditions:1,inner:""};u.prev=i,u.parens=l.parens,u.output=l.output;let h=(t.capture?"(":"")+u.open;Et("parens"),y({type:p,value:E,output:l.output?"":W}),y({type:"paren",extglob:!0,value:O(),output:h}),D.push(u)},qe=p=>{let E=p.close+(t.capture?")":""),u;if(p.type==="negate"){let h=m;if(p.inner&&p.inner.length>1&&p.inner.includes("/")&&(h=N(t)),(h!==m||U()||/^\)+$/.test(tt()))&&(E=p.close=`)$))${h}`),p.inner.includes("*")&&(u=tt())&&/^\.[^\\/.]+$/.test(u)){let S=Zt(u,{...r,fastpaths:!1}).output;E=p.close=`)${S})${h})`}p.prev.type==="bos"&&(l.negatedExtglob=!0)}y({type:"paren",extglob:!0,value:c,output:E}),ct("parens")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let p=!1,E=e.replace(Wr,(u,h,S,G,k,Dt)=>G==="\\"?(p=!0,u):G==="?"?h?h+G+(k?_.repeat(k.length):""):Dt===0?d+(k?_.repeat(k.length):""):_.repeat(S.length):G==="."?R.repeat(S.length):G==="*"?h?h+G+(k?m:""):m:h?u:`\\${u}`);return p===!0&&(t.unescape===!0?E=E.replace(/\\/g,""):E=E.replace(/\\+/g,u=>u.length%2===0?"\\\\":u?"\\":"")),E===e&&t.contains===!0?(l.output=e,l):(l.output=z.wrapOutput(E,l,r),l)}for(;!U();){if(c=O(),c==="\0")continue;if(c==="\\"){let u=C();if(u==="/"&&t.bash!==!0||u==="."||u===";")continue;if(!u){c+="\\",y({type:"text",value:c});continue}let h=/^\\+/.exec(tt()),S=0;if(h&&h[0].length>2&&(S=h[0].length,l.index+=S,S%2!==0&&(c+="\\")),t.unescape===!0?c=O():c+=O(),l.brackets===0){y({type:"text",value:c});continue}}if(l.brackets>0&&(c!=="]"||i.value==="["||i.value==="[^")){if(t.posix!==!1&&c===":"){let u=i.value.slice(1);if(u.includes("[")&&(i.posix=!0,u.includes(":"))){let h=i.value.lastIndexOf("["),S=i.value.slice(0,h),G=i.value.slice(h+2),k=jr[G];if(k){i.value=S+k,l.backtrack=!0,O(),!a.output&&s.indexOf(i)===1&&(a.output=W);continue}}}(c==="["&&C()!==":"||c==="-"&&C()==="]")&&(c=`\\${c}`),c==="]"&&(i.value==="["||i.value==="[^")&&(c=`\\${c}`),t.posix===!0&&c==="!"&&i.value==="["&&(c="^"),i.value+=c,st({value:c});continue}if(l.quotes===1&&c!=='"'){c=z.escapeRegex(c),i.value+=c,st({value:c});continue}if(c==='"'){l.quotes=l.quotes===1?0:1,t.keepQuotes===!0&&y({type:"text",value:c});continue}if(c==="("){Et("parens"),y({type:"paren",value:c});continue}if(c===")"){if(l.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ft("opening","("));let u=D[D.length-1];if(u&&l.parens===u.parens+1){qe(D.pop());continue}y({type:"paren",value:c,output:l.parens?")":"\\)"}),ct("parens");continue}if(c==="["){if(t.nobracket===!0||!tt().includes("]")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ft("closing","]"));c=`\\${c}`}else Et("brackets");y({type:"bracket",value:c});continue}if(c==="]"){if(t.nobracket===!0||i&&i.type==="bracket"&&i.value.length===1){y({type:"text",value:c,output:`\\${c}`});continue}if(l.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ft("opening","["));y({type:"text",value:c,output:`\\${c}`});continue}ct("brackets");let u=i.value.slice(1);if(i.posix!==!0&&u[0]==="^"&&!u.includes("/")&&(c=`/${c}`),i.value+=c,st({value:c}),t.literalBrackets===!1||z.hasRegexChars(u))continue;let h=z.escapeRegex(i.value);if(l.output=l.output.slice(0,-i.value.length),t.literalBrackets===!0){l.output+=h,i.value=h;continue}i.value=`(${f}${h}|${i.value})`,l.output+=i.value;continue}if(c==="{"&&t.nobrace!==!0){Et("braces");let u={type:"brace",value:c,output:"(",outputIndex:l.output.length,tokensIndex:l.tokens.length};L.push(u),y(u);continue}if(c==="}"){let u=L[L.length-1];if(t.nobrace===!0||!u){y({type:"text",value:c,output:c});continue}let h=")";if(u.dots===!0){let S=s.slice(),G=[];for(let k=S.length-1;k>=0&&(s.pop(),S[k].type!=="brace");k--)S[k].type!=="dots"&&G.unshift(S[k].value);h=Fr(G,t),l.backtrack=!0}if(u.comma!==!0&&u.dots!==!0){let S=l.output.slice(0,u.outputIndex),G=l.tokens.slice(u.tokensIndex);u.value=u.output="\\{",c=h="\\}",l.output=S;for(let k of G)l.output+=k.output||k.value}y({type:"brace",value:c,output:h}),ct("braces"),L.pop();continue}if(c==="|"){D.length>0&&D[D.length-1].conditions++,y({type:"text",value:c});continue}if(c===","){let u=c,h=L[L.length-1];h&&T[T.length-1]==="braces"&&(h.comma=!0,u="|"),y({type:"comma",value:c,output:u});continue}if(c==="/"){if(i.type==="dot"&&l.index===l.start+1){l.start=l.index+1,l.consumed="",l.output="",s.pop(),i=a;continue}y({type:"slash",value:c,output:w});continue}if(c==="."){if(l.braces>0&&i.type==="dot"){i.value==="."&&(i.output=R);let u=L[L.length-1];i.type="dots",i.output+=c,i.value+=c,u.dots=!0;continue}if(l.braces+l.parens===0&&i.type!=="bos"&&i.type!=="slash"){y({type:"text",value:c,output:R});continue}y({type:"dot",value:c,output:R});continue}if(c==="?"){if(!(i&&i.value==="(")&&t.noextglob!==!0&&C()==="("&&C(2)!=="?"){xt("qmark",c);continue}if(i&&i.type==="paren"){let h=C(),S=c;(i.value==="("&&!/[!=<:]/.test(h)||h==="<"&&!/<([!=]|\w+>)/.test(tt()))&&(S=`\\${c}`),y({type:"text",value:c,output:S});continue}if(t.dot!==!0&&(i.type==="slash"||i.type==="bos")){y({type:"qmark",value:c,output:Q});continue}y({type:"qmark",value:c,output:_});continue}if(c==="!"){if(t.noextglob!==!0&&C()==="("&&(C(2)!=="?"||!/[!=<:]/.test(C(3)))){xt("negate",c);continue}if(t.nonegate!==!0&&l.index===0){Xe();continue}}if(c==="+"){if(t.noextglob!==!0&&C()==="("&&C(2)!=="?"){xt("plus",c);continue}if(i&&i.value==="("||t.regex===!1){y({type:"plus",value:c,output:H});continue}if(i&&(i.type==="bracket"||i.type==="paren"||i.type==="brace")||l.parens>0){y({type:"plus",value:c});continue}y({type:"plus",value:H});continue}if(c==="@"){if(t.noextglob!==!0&&C()==="("&&C(2)!=="?"){y({type:"at",extglob:!0,value:c,output:""});continue}y({type:"text",value:c});continue}if(c!=="*"){(c==="$"||c==="^")&&(c=`\\${c}`);let u=Br.exec(tt());u&&(c+=u[0],l.index+=u[0].length),y({type:"text",value:c});continue}if(i&&(i.type==="globstar"||i.star===!0)){i.type="star",i.star=!0,i.value+=c,i.output=m,l.backtrack=!0,l.globstar=!0,K(c);continue}let p=tt();if(t.noextglob!==!0&&/^\([^?]/.test(p)){xt("star",c);continue}if(i.type==="star"){if(t.noglobstar===!0){K(c);continue}let u=i.prev,h=u.prev,S=u.type==="slash"||u.type==="bos",G=h&&(h.type==="star"||h.type==="globstar");if(t.bash===!0&&(!S||p[0]&&p[0]!=="/")){y({type:"star",value:c,output:""});continue}let k=l.braces>0&&(u.type==="comma"||u.type==="brace"),Dt=D.length&&(u.type==="pipe"||u.type==="paren");if(!S&&u.type!=="paren"&&!k&&!Dt){y({type:"star",value:c,output:""});continue}for(;p.slice(0,3)==="/**";){let Ot=e[l.index+4];if(Ot&&Ot!=="/")break;p=p.slice(3),K("/**",3)}if(u.type==="bos"&&U()){i.type="globstar",i.value+=c,i.output=N(t),l.output=i.output,l.globstar=!0,K(c);continue}if(u.type==="slash"&&u.prev.type!=="bos"&&!G&&U()){l.output=l.output.slice(0,-(u.output+i.output).length),u.output=`(?:${u.output}`,i.type="globstar",i.output=N(t)+(t.strictSlashes?")":"|$)"),i.value+=c,l.globstar=!0,l.output+=u.output+i.output,K(c);continue}if(u.type==="slash"&&u.prev.type!=="bos"&&p[0]==="/"){let Ot=p[1]!==void 0?"|$":"";l.output=l.output.slice(0,-(u.output+i.output).length),u.output=`(?:${u.output}`,i.type="globstar",i.output=`${N(t)}${w}|${w}${Ot})`,i.value+=c,l.output+=u.output+i.output,l.globstar=!0,K(c+O()),y({type:"slash",value:"/",output:""});continue}if(u.type==="bos"&&p[0]==="/"){i.type="globstar",i.value+=c,i.output=`(?:^|${w}|${N(t)}${w})`,l.output=i.output,l.globstar=!0,K(c+O()),y({type:"slash",value:"/",output:""});continue}l.output=l.output.slice(0,-i.output.length),i.type="globstar",i.output=N(t),i.value+=c,l.output+=i.output,l.globstar=!0,K(c);continue}let E={type:"star",value:c,output:m};if(t.bash===!0){E.output=".*?",(i.type==="bos"||i.type==="slash")&&(E.output=F+E.output),y(E);continue}if(i&&(i.type==="bracket"||i.type==="paren")&&t.regex===!0){E.output=c,y(E);continue}(l.index===l.start||i.type==="slash"||i.type==="dot")&&(i.type==="dot"?(l.output+=at,i.output+=at):t.dot===!0?(l.output+=q,i.output+=q):(l.output+=F,i.output+=F),C()!=="*"&&(l.output+=W,i.output+=W)),y(E)}for(;l.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ft("closing","]"));l.output=z.escapeLast(l.output,"["),ct("brackets")}for(;l.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ft("closing",")"));l.output=z.escapeLast(l.output,"("),ct("parens")}for(;l.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ft("closing","}"));l.output=z.escapeLast(l.output,"{"),ct("braces")}if(t.strictSlashes!==!0&&(i.type==="star"||i.type==="bracket")&&y({type:"maybe_slash",value:"",output:`${w}?`}),l.backtrack===!0){l.output="";for(let p of l.tokens)l.output+=p.output!=null?p.output:p.value,p.suffix&&(l.output+=p.suffix)}return l};Zt.fastpaths=(e,r)=>{let t={...r},o=typeof t.maxLength=="number"?Math.min(It,t.maxLength):It,n=e.length;if(n>o)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${o}`);e=Te[e]||e;let{DOT_LITERAL:a,SLASH_LITERAL:s,ONE_CHAR:f,DOTS_SLASH:g,NO_DOT:A,NO_DOTS:R,NO_DOTS_SLASH:H,STAR:w,START_ANCHOR:W}=kt.globChars(t.windows),b=t.dot?R:A,I=t.dot?H:A,at=t.capture?"":"?:",q={negated:!1,prefix:""},_=t.bash===!0?".*?":w;t.capture&&(_=`(${_})`);let Q=F=>F.noglobstar===!0?_:`(${at}(?:(?!${W}${F.dot?g:a}).)*?)`,it=F=>{switch(F){case"*":return`${b}${f}${_}`;case".*":return`${a}${f}${_}`;case"*.*":return`${b}${_}${a}${f}${_}`;case"*/*":return`${b}${_}${s}${f}${I}${_}`;case"**":return b+Q(t);case"**/*":return`(?:${b}${Q(t)}${s})?${I}${f}${_}`;case"**/*.*":return`(?:${b}${Q(t)}${s})?${I}${_}${a}${f}${_}`;case"**/.*":return`(?:${b}${Q(t)}${s})?${a}${f}${_}`;default:{let d=/^(.*?)\.(\w+)$/.exec(F);if(!d)return;let m=it(d[1]);return m?m+a+d[2]:void 0}}},M=z.removePrefix(e,q),N=it(M);return N&&t.strictSlashes!==!0&&(N+=`${s}?`),N};$e.exports=Zt});var Ie=lt((Ro,ke)=>{"use strict";var Vr=ve(),zt=we(),Le=At(),Ur=yt(),Kr=e=>e&&typeof e=="object"&&!Array.isArray(e),$=(e,r,t=!1)=>{if(Array.isArray(e)){let R=e.map(w=>$(w,r,t));return w=>{for(let W of R){let b=W(w);if(b)return b}return!1}}let o=Kr(e)&&e.tokens&&e.input;if(e===""||typeof e!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let n=r||{},a=n.windows,s=o?$.compileRe(e,r):$.makeRe(e,r,!1,!0),f=s.state;delete s.state;let g=()=>!1;if(n.ignore){let R={...r,ignore:null,onMatch:null,onResult:null};g=$(n.ignore,R,t)}let A=(R,H=!1)=>{let{isMatch:w,match:W,output:b}=$.test(R,s,r,{glob:e,posix:a}),I={glob:e,state:f,regex:s,posix:a,input:R,output:b,match:W,isMatch:w};return typeof n.onResult=="function"&&n.onResult(I),w===!1?(I.isMatch=!1,H?I:!1):g(R)?(typeof n.onIgnore=="function"&&n.onIgnore(I),I.isMatch=!1,H?I:!1):(typeof n.onMatch=="function"&&n.onMatch(I),H?I:!0)};return t&&(A.state=f),A};$.test=(e,r,t,{glob:o,posix:n}={})=>{if(typeof e!="string")throw new TypeError("Expected input to be a string");if(e==="")return{isMatch:!1,output:""};let a=t||{},s=a.format||(n?Le.toPosixSlashes:null),f=e===o,g=f&&s?s(e):e;return f===!1&&(g=s?s(e):e,f=g===o),(f===!1||a.capture===!0)&&(a.matchBase===!0||a.basename===!0?f=$.matchBase(e,r,t,n):f=r.exec(g)),{isMatch:!!f,match:f,output:g}};$.matchBase=(e,r,t)=>(r instanceof RegExp?r:$.makeRe(r,t)).test(Le.basename(e));$.isMatch=(e,r,t)=>$(r,t)(e);$.parse=(e,r)=>Array.isArray(e)?e.map(t=>$.parse(t,r)):zt(e,{...r,fastpaths:!1});$.scan=(e,r)=>Vr(e,r);$.compileRe=(e,r,t=!1,o=!1)=>{if(t===!0)return e.output;let n=r||{},a=n.contains?"":"^",s=n.contains?"":"$",f=`${a}(?:${e.output})${s}`;e&&e.negated===!0&&(f=`^(?!${f}).*$`);let g=$.toRegex(f,r);return o===!0&&(g.state=e),g};$.makeRe=(e,r={},t=!1,o=!1)=>{if(!e||typeof e!="string")throw new TypeError("Expected a non-empty string");let n={negated:!1,fastpaths:!0};return r.fastpaths!==!1&&(e[0]==="."||e[0]==="*")&&(n.output=zt.fastpaths(e,r)),n.output||(n=zt(e,r)),$.compileRe(n,r,t,o)};$.toRegex=(e,r)=>{try{let t=r||{};return new RegExp(e,t.flags||(t.nocase?"i":""))}catch(t){if(r&&r.debug===!0)throw t;return/$^/}};$.constants=Ur;ke.exports=$});var Me=lt((bo,He)=>{"use strict";var Ne=Ie(),Yr=At();function Pe(e,r,t=!1){return r&&(r.windows===null||r.windows===void 0)&&(r={...r,windows:Yr.isWindows()}),Ne(e,r,t)}Object.assign(Pe,Ne);He.exports=Pe});var ro={};er(ro,{default:()=>eo});var dt=V("@yarnpkg/core");var ne=(e=0)=>r=>`\x1B[${r+e}m`,se=(e=0)=>r=>`\x1B[${38+e};5;${r}m`,ae=(e=0)=>(r,t,o)=>`\x1B[${38+e};2;${r};${t};${o}m`,x={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},no=Object.keys(x.modifier),or=Object.keys(x.color),nr=Object.keys(x.bgColor),so=[...or,...nr];function sr(){let e=new Map;for(let[r,t]of Object.entries(x)){for(let[o,n]of Object.entries(t))x[o]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},t[o]=x[o],e.set(n[0],n[1]);Object.defineProperty(x,r,{value:t,enumerable:!1})}return Object.defineProperty(x,"codes",{value:e,enumerable:!1}),x.color.close="\x1B[39m",x.bgColor.close="\x1B[49m",x.color.ansi=ne(),x.color.ansi256=se(),x.color.ansi16m=ae(),x.bgColor.ansi=ne(10),x.bgColor.ansi256=se(10),x.bgColor.ansi16m=ae(10),Object.defineProperties(x,{rgbToAnsi256:{value(r,t,o){return r===t&&t===o?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(t/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(r){let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!t)return[0,0,0];let[o]=t;o.length===3&&(o=[...o].map(a=>a+a).join(""));let n=Number.parseInt(o,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:r=>x.rgbToAnsi256(...x.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value(r){if(r<8)return 30+r;if(r<16)return 90+(r-8);let t,o,n;if(r>=232)t=((r-232)*10+8)/255,o=t,n=t;else{r-=16;let f=r%36;t=Math.floor(r/36)/5,o=Math.floor(f/6)/5,n=f%6/5}let a=Math.max(t,o,n)*2;if(a===0)return 30;let s=30+(Math.round(n)<<2|Math.round(o)<<1|Math.round(t));return a===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(r,t,o)=>x.ansi256ToAnsi(x.rgbToAnsi256(r,t,o)),enumerable:!1},hexToAnsi:{value:r=>x.ansi256ToAnsi(x.hexToAnsi256(r)),enumerable:!1}}),x}var ar=sr(),X=ar;var $t=vt(V("process"),1),ce=vt(V("os"),1),jt=vt(V("tty"),1);function Y(e,r=globalThis.Deno?globalThis.Deno.args:$t.default.argv){let t=e.startsWith("-")?"":e.length===1?"-":"--",o=r.indexOf(t+e),n=r.indexOf("--");return o!==-1&&(n===-1||o=2,has16m:e>=3}}function lr(e,{streamIsTTY:r,sniffFlags:t=!0}={}){let o=ir();o!==void 0&&(Tt=o);let n=t?Tt:o;if(n===0)return 0;if(t){if(Y("color=16m")||Y("color=full")||Y("color=truecolor"))return 3;if(Y("color=256"))return 2}if("TF_BUILD"in v&&"AGENT_NAME"in v)return 1;if(e&&!r&&n===void 0)return 0;let a=n||0;if(v.TERM==="dumb")return a;if($t.default.platform==="win32"){let s=ce.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in v)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in v)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in v)||v.CI_NAME==="codeship"?1:a;if("TEAMCITY_VERSION"in v)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(v.TEAMCITY_VERSION)?1:0;if(v.COLORTERM==="truecolor"||v.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in v){let s=Number.parseInt((v.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(v.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(v.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(v.TERM)||"COLORTERM"in v?1:a}function ie(e,r={}){let t=lr(e,{streamIsTTY:e&&e.isTTY,...r});return cr(t)}var ur={stdout:ie({isTTY:jt.default.isatty(1)}),stderr:ie({isTTY:jt.default.isatty(2)})},le=ur;function ue(e,r,t){let o=e.indexOf(r);if(o===-1)return e;let n=r.length,a=0,s="";do s+=e.slice(a,o)+r+t,a=o+n,o=e.indexOf(r,a);while(o!==-1);return s+=e.slice(a),s}function pe(e,r,t,o){let n=0,a="";do{let s=e[o-1]==="\r";a+=e.slice(n,s?o-1:o)+r+(s?`\r `:` `)+t,n=o+1,o=e.indexOf(` -`,n)}while(o!==-1);return a+=e.slice(n),a}var{stdout:pe,stderr:fe}=ce,Bt=Symbol("GENERATOR"),ut=Symbol("STYLER"),ht=Symbol("IS_EMPTY"),ge=["ansi","ansi","ansi256","ansi16m"],pt=Object.create(null),pr=(e,r={})=>{if(r.level&&!(Number.isInteger(r.level)&&r.level>=0&&r.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=pe?pe.level:0;e.level=r.level===void 0?t:r.level};var fr=e=>{let r=(...t)=>t.join(" ");return pr(r,e),Object.setPrototypeOf(r,mt.prototype),r};function mt(e){return fr(e)}Object.setPrototypeOf(mt.prototype,Function.prototype);for(let[e,r]of Object.entries(X))pt[e]={get(){let t=wt(this,Wt(r.open,r.close,this[ut]),this[ht]);return Object.defineProperty(this,e,{value:t}),t}};pt.visible={get(){let e=wt(this,this[ut],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var Ft=(e,r,t,...o)=>e==="rgb"?r==="ansi16m"?X[t].ansi16m(...o):r==="ansi256"?X[t].ansi256(X.rgbToAnsi256(...o)):X[t].ansi(X.rgbToAnsi(...o)):e==="hex"?Ft("rgb",r,t,...X.hexToRgb(...o)):X[t][e](...o),gr=["rgb","hex","ansi256"];for(let e of gr){pt[e]={get(){let{level:t}=this;return function(...o){let n=Wt(Ft(e,ge[t],"color",...o),X.color.close,this[ut]);return wt(this,n,this[ht])}}};let r="bg"+e[0].toUpperCase()+e.slice(1);pt[r]={get(){let{level:t}=this;return function(...o){let n=Wt(Ft(e,ge[t],"bgColor",...o),X.bgColor.close,this[ut]);return wt(this,n,this[ht])}}}}var dr=Object.defineProperties(()=>{},{...pt,level:{enumerable:!0,get(){return this[Bt].level},set(e){this[Bt].level=e}}}),Wt=(e,r,t)=>{let o,n;return t===void 0?(o=e,n=r):(o=t.openAll+e,n=r+t.closeAll),{open:e,close:r,openAll:o,closeAll:n,parent:t}},wt=(e,r,t)=>{let o=(...n)=>hr(o,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(o,dr),o[Bt]=e,o[ut]=r,o[ht]=t,o},hr=(e,r)=>{if(e.level<=0||!r)return e[ht]?"":r;let t=e[ut];if(t===void 0)return r;let{openAll:o,closeAll:n}=t;if(r.includes("\x1B"))for(;t!==void 0;)r=le(r,t.close,t.open),t=t.parent;let a=r.indexOf(` -`);return a!==-1&&(r=ue(r,n,o,a)),o+r+n};Object.defineProperties(mt.prototype,pt);var mr=mt(),fo=mt({level:fe?fe.level:0});var j=mr;var Ue=V("@yarnpkg/cli"),gt=V("@yarnpkg/core"),Ct=V("@yarnpkg/fslib"),_t=V("@yarnpkg/parsers");var Mt=V("clipanion");var je=V("@yarnpkg/core"),nt=V("@yarnpkg/fslib"),bt=V("@yarnpkg/parsers"),Be=vt(He());var rt="root",J="catalog:";var ot=class extends Error{constructor(t,o){super(t);this.code=o;this.name="CatalogConfigurationError"}static{this.FILE_NOT_FOUND="FILE_NOT_FOUND"}static{this.INVALID_FORMAT="INVALID_FORMAT"}static{this.INVALID_ALIAS="INVALID_ALIAS"}};function Me(e){if(!e||typeof e!="object")return!1;let r=e;if(!("list"in r)||!r.list||typeof r.list!="object")return!1;for(let t of Object.values(r.list)){if(!t||typeof t!="object")return!1;for(let o of Object.values(t))if(typeof o!="string")return!1}if("options"in r&&r.options){let t=r.options;if(!t||typeof t!="object")return!1;let o=t;if(o.default){if(Array.isArray(o.default)){if(o.default.length===0||!o.default.every(n=>typeof n=="string"))return!1}else if(typeof o.default!="string"||o.default!=="max")return!1}if(o.ignoredWorkspaces&&(!Array.isArray(o.ignoredWorkspaces)||o.ignoredWorkspaces.length===0||!o.ignoredWorkspaces.every(n=>typeof n=="string")))return!1;if(o.validation){let n=["warn","strict","off"],a=o.validation;if(typeof a=="string"){if(!n.includes(a))return!1}else if(typeof a=="object"&&a!==null){if(!Object.values(a).every(s=>typeof s=="string"&&n.includes(s)))return!1}else return!1}}return!0}function Ge(e,r){let t=Object.keys(e.list);for(let o of t)if(o.includes("/")){let n=r(o);for(let a=0;atypeof r=="string")}function De(e){return!e||typeof e!="object"||e instanceof Map?!1:Object.values(e).every(r=>Nt(r))}var Xr="catalogs.yml",Pt=class{constructor(){this.cache=new Map}async read(r){let t=String(r.cwd),o=this.cache.get(t);if(o!==void 0)return o;let n=nt.ppath.join(r.cwd,Xr);if(!await nt.xfs.existsPromise(n))return this.cache.set(t,null),null;let a=await nt.xfs.readFilePromise(n,"utf8"),s=(0,bt.parseSyml)(a);if(!Me(s))throw new ot("Invalid catalogs.yml format. Expected structure: { options?: {...}, list: { [alias: string]: { [packageName: string]: string } } }",ot.INVALID_FORMAT);if(!Ge(s,this.getInheritanceChain.bind(this)))throw new ot("Invalid inheritance structure in catalogs.yml. Parent groups must exist in the inheritance chain.",ot.INVALID_ALIAS);return this.cache.set(t,s),s}async getOptions(r){return(await this.read(r))?.options}async getAppliedCatalogs(r){let t=r.configuration.get("catalog"),o=r.configuration.get("catalogs"),n={};if(t&&typeof t=="object"&&(t instanceof Map?n[rt]=Object.fromEntries(t.entries()):Nt(t)&&(n[rt]=t)),o&&typeof o=="object")if(o instanceof Map)for(let[a,s]of o.entries())s instanceof Map?n[a]=Object.fromEntries(s.entries()):Nt(s)&&(n[a]=s);else De(o)&&Object.assign(n,o);return n}async shouldIgnoreWorkspace(r){if(!r.manifest.name)return!1;let t=await this.read(r.project);return t?.options?.ignoredWorkspaces?(0,Be.isMatch)(je.structUtils.stringifyIdent(r.manifest.name),t.options.ignoredWorkspaces):!1}async writeToYarnrc(r,t){let o=nt.ppath.join(r.cwd,".yarnrc.yml"),n={};if(await nt.xfs.existsPromise(o)){let s=await nt.xfs.readFilePromise(o,"utf8");n=(0,bt.parseSyml)(s)||{}}t.root&&Object.keys(t.root).length>0?n.catalog=t.root:n.catalog=void 0,Object.keys(t.named).length>0?n.catalogs=t.named:n.catalogs=void 0;let a=(0,bt.stringifySyml)(n);await nt.xfs.writeFilePromise(o,a)}resolveAllCatalogs(r){let t={named:{}};for(let[o,n]of Object.entries(r.list))o===rt?t.root={...n}:t.named[o]=this.resolveInheritedCatalog(o,r.list);return t}resolveInheritedCatalog(r,t){let o=this.getInheritanceChain(r),n={};for(let a of o){let s=t[a];if(!s)throw new ot(`Parent group "${a}" not found in inheritance chain for "${r}"`,ot.INVALID_ALIAS);Object.assign(n,s)}return n}getInheritanceChain(r){let t=r.split("/"),o=[];for(let n=0;n{if(r.level&&!(Number.isInteger(r.level)&&r.level>=0&&r.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=fe?fe.level:0;e.level=r.level===void 0?t:r.level};var fr=e=>{let r=(...t)=>t.join(" ");return pr(r,e),Object.setPrototypeOf(r,mt.prototype),r};function mt(e){return fr(e)}Object.setPrototypeOf(mt.prototype,Function.prototype);for(let[e,r]of Object.entries(X))pt[e]={get(){let t=wt(this,Ft(r.open,r.close,this[ut]),this[ht]);return Object.defineProperty(this,e,{value:t}),t}};pt.visible={get(){let e=wt(this,this[ut],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var Wt=(e,r,t,...o)=>e==="rgb"?r==="ansi16m"?X[t].ansi16m(...o):r==="ansi256"?X[t].ansi256(X.rgbToAnsi256(...o)):X[t].ansi(X.rgbToAnsi(...o)):e==="hex"?Wt("rgb",r,t,...X.hexToRgb(...o)):X[t][e](...o),gr=["rgb","hex","ansi256"];for(let e of gr){pt[e]={get(){let{level:t}=this;return function(...o){let n=Ft(Wt(e,de[t],"color",...o),X.color.close,this[ut]);return wt(this,n,this[ht])}}};let r="bg"+e[0].toUpperCase()+e.slice(1);pt[r]={get(){let{level:t}=this;return function(...o){let n=Ft(Wt(e,de[t],"bgColor",...o),X.bgColor.close,this[ut]);return wt(this,n,this[ht])}}}}var dr=Object.defineProperties(()=>{},{...pt,level:{enumerable:!0,get(){return this[Bt].level},set(e){this[Bt].level=e}}}),Ft=(e,r,t)=>{let o,n;return t===void 0?(o=e,n=r):(o=t.openAll+e,n=r+t.closeAll),{open:e,close:r,openAll:o,closeAll:n,parent:t}},wt=(e,r,t)=>{let o=(...n)=>hr(o,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(o,dr),o[Bt]=e,o[ut]=r,o[ht]=t,o},hr=(e,r)=>{if(e.level<=0||!r)return e[ht]?"":r;let t=e[ut];if(t===void 0)return r;let{openAll:o,closeAll:n}=t;if(r.includes("\x1B"))for(;t!==void 0;)r=ue(r,t.close,t.open),t=t.parent;let a=r.indexOf(` +`);return a!==-1&&(r=pe(r,n,o,a)),o+r+n};Object.defineProperties(mt.prototype,pt);var mr=mt(),fo=mt({level:ge?ge.level:0});var j=mr;var Ue=V("@yarnpkg/cli"),gt=V("@yarnpkg/core"),Ct=V("@yarnpkg/fslib"),_t=V("@yarnpkg/parsers");var Mt=V("clipanion");var Be=V("@yarnpkg/core"),nt=V("@yarnpkg/fslib"),bt=V("@yarnpkg/parsers"),Jt=vt(Me());var rt="root",J="catalog:";var ot=class extends Error{constructor(t,o){super(t);this.code=o;this.name="CatalogConfigurationError"}static{this.FILE_NOT_FOUND="FILE_NOT_FOUND"}static{this.INVALID_FORMAT="INVALID_FORMAT"}static{this.INVALID_ALIAS="INVALID_ALIAS"}};function Ge(e){if(!e||typeof e!="object")return!1;let r=e;if(!("list"in r)||!r.list||typeof r.list!="object")return!1;for(let t of Object.values(r.list)){if(!t||typeof t!="object")return!1;for(let o of Object.values(t))if(typeof o!="string")return!1}if("options"in r&&r.options){let t=r.options;if(!t||typeof t!="object")return!1;let o=t;if(o.default){if(Array.isArray(o.default)){if(o.default.length===0||!o.default.every(n=>typeof n=="string"))return!1}else if(typeof o.default!="string"||o.default!=="max")return!1}if(o.includedWorkspaces&&(!Array.isArray(o.includedWorkspaces)||o.includedWorkspaces.length===0||!o.includedWorkspaces.every(n=>typeof n=="string"))||o.ignoredWorkspaces&&(!Array.isArray(o.ignoredWorkspaces)||o.ignoredWorkspaces.length===0||!o.ignoredWorkspaces.every(n=>typeof n=="string")))return!1;if(o.validation){let n=["warn","strict","off"],a=o.validation;if(typeof a=="string"){if(!n.includes(a))return!1}else if(typeof a=="object"&&a!==null){if(!Object.values(a).every(s=>typeof s=="string"&&n.includes(s)))return!1}else return!1}}return!0}function De(e,r){let t=Object.keys(e.list);for(let o of t)if(o.includes("/")){let n=r(o);for(let a=0;atypeof r=="string")}function je(e){return!e||typeof e!="object"||e instanceof Map?!1:Object.values(e).every(r=>Nt(r))}var Xr="catalogs.yml",Pt=class{constructor(){this.cache=new Map}async read(r){let t=String(r.cwd),o=this.cache.get(t);if(o!==void 0)return o;let n=nt.ppath.join(r.cwd,Xr);if(!await nt.xfs.existsPromise(n))return this.cache.set(t,null),null;let a=await nt.xfs.readFilePromise(n,"utf8"),s=(0,bt.parseSyml)(a);if(!Ge(s))throw new ot("Invalid catalogs.yml format. Expected structure: { options?: {...}, list: { [alias: string]: { [packageName: string]: string } } }",ot.INVALID_FORMAT);if(!De(s,this.getInheritanceChain.bind(this)))throw new ot("Invalid inheritance structure in catalogs.yml. Parent groups must exist in the inheritance chain.",ot.INVALID_ALIAS);return this.cache.set(t,s),s}async getOptions(r){return(await this.read(r))?.options}async getAppliedCatalogs(r){let t=r.configuration.get("catalog"),o=r.configuration.get("catalogs"),n={};if(t&&typeof t=="object"&&(t instanceof Map?n[rt]=Object.fromEntries(t.entries()):Nt(t)&&(n[rt]=t)),o&&typeof o=="object")if(o instanceof Map)for(let[a,s]of o.entries())s instanceof Map?n[a]=Object.fromEntries(s.entries()):Nt(s)&&(n[a]=s);else je(o)&&Object.assign(n,o);return n}async shouldIgnoreWorkspace(r){if(!r.manifest.name)return!1;let o=(await this.read(r.project))?.options;if(!o)return!1;let n=Be.structUtils.stringifyIdent(r.manifest.name);return!!(o.ignoredWorkspaces&&(0,Jt.isMatch)(n,o.ignoredWorkspaces)||o.includedWorkspaces&&!(0,Jt.isMatch)(n,o.includedWorkspaces))}async writeToYarnrc(r,t){let o=nt.ppath.join(r.cwd,".yarnrc.yml"),n={};if(await nt.xfs.existsPromise(o)){let s=await nt.xfs.readFilePromise(o,"utf8");n=(0,bt.parseSyml)(s)||{}}t.root&&Object.keys(t.root).length>0?n.catalog=t.root:n.catalog=void 0,Object.keys(t.named).length>0?n.catalogs=t.named:n.catalogs=void 0;let a=(0,bt.stringifySyml)(n);await nt.xfs.writeFilePromise(o,a)}resolveAllCatalogs(r){let t={named:{}};for(let[o,n]of Object.entries(r.list))o===rt?t.root={...n}:t.named[o]=this.resolveInheritedCatalog(o,r.list);return t}resolveInheritedCatalog(r,t){let o=this.getInheritanceChain(r),n={};for(let a of o){let s=t[a];if(!s)throw new ot(`Parent group "${a}" not found in inheritance chain for "${r}"`,ot.INVALID_ALIAS);Object.assign(n,s)}return n}getInheritanceChain(r){let t=r.split("/"),o=[];for(let n=0;n{let s=await P.read(o);if(!s){a.reportError(0,"No catalogs.yml file found in project root. Please create one to use this command.");return}let f=P.resolveAllCatalogs(s),g=await qr(o);if(!Qr(g,f)){this.reportNoChanges(a);return}this.check?this.reportCheckFailure(a,g,f):await this.applyChanges(a,o,g,f)})).exitCode()}reportNoChanges(t){let o=this.check?j.green("\u2713 .yarnrc.yml is up to date"):"No changes to apply - .yarnrc.yml is already up to date";t.reportInfo(0,o)}reportCheckFailure(t,o,n){t.reportError(0,".yarnrc.yml is out of date. Run 'yarn catalogs apply' to update it."),Ve(t,o,n);let a=Fe(n.root?1:0,Object.keys(n.named).length);t.reportInfo(0,`Would apply ${a} to .yarnrc.yml`)}async applyChanges(t,o,n,a){Ve(t,n,a),await P.writeToYarnrc(o,a),P.clearCache(o);let s=Fe(a.root?1:0,Object.keys(a.named).length);t.reportInfo(0,j.green(`\u2713 Applied ${s} to .yarnrc.yml`))}};async function qr(e){let r=Ct.ppath.join(e.cwd,".yarnrc.yml");if(!await Ct.xfs.existsPromise(r))return{};let t=await Ct.xfs.readFilePromise(r,"utf8");return(0,_t.parseSyml)(t)||{}}function Qr(e,r){let t={...e};r.root&&Object.keys(r.root).length>0?t.catalog=r.root:t.catalog=void 0,Object.keys(r.named).length>0?t.catalogs=r.named:t.catalogs=void 0;let o=(0,_t.stringifySyml)(e),n=(0,_t.stringifySyml)(t);return o!==n}function Fe(e,r){let t=[];return e>0&&t.push("1 root catalog"),r>0&&t.push(`${r} named catalog group${r>1?"s":""}`),t.length===0?"no catalogs":t.join(" and ")}function We(e,r,t,o){let n=new Set([...Object.keys(t),...Object.keys(o)]);if(Array.from(n).some(s=>t[s]!==o[s])){e.reportInfo(0,j.bold(`${r}:`));for(let s of Array.from(n).sort()){let f=t[s],g=o[s];f?g?f!==g&&(e.reportInfo(0,j.red(` - ${s}: ${f}`)),e.reportInfo(0,j.green(` + ${s}: ${g}`))):e.reportInfo(0,j.red(` - ${s}: ${f}`)):e.reportInfo(0,j.green(` + ${s}: ${g}`))}}}function Ve(e,r,t){let o=r.catalog,n=r.catalogs;(t.root||o)&&We(e,"root catalog",o||{},t.root||{});let a=new Set([...Object.keys(n||{}),...Object.keys(t.named)]);for(let s of Array.from(a).sort())We(e,s,n?.[s]||{},t.named[s]||{})}var Gt=V("@yarnpkg/core");async function Ke(e){let r=await P.shouldIgnoreWorkspace(e),t=[...Object.values(e.manifest.raw.dependencies||{}),...Object.values(e.manifest.raw.devDependencies||{})].some(a=>a.startsWith(J)),o=r&&t,n=[];return r||(n=await Zr(e)),{shouldIgnore:r,catalogProtocolViolations:n,ignoredWorkspaceWithCatalogProtocol:o}}async function Jt(e,r){if(r.range.startsWith(J)||await P.shouldIgnoreWorkspace(e))return null;let t=await te(e),o=Gt.structUtils.stringifyIdent(r),a=(await Ye(e.project,o)).flatMap(({groupName:f})=>t.length===0||t.includes(f)?[f]:[]);return a.length===0?null:{validationLevel:await Jr(e,o),applicableGroups:a}}async function Zr(e){let r=[...Object.entries(e.manifest.raw.dependencies??{}),...Object.entries(e.manifest.raw.devDependencies??{})].map(([o,n])=>{let a=Gt.structUtils.parseIdent(o);return Gt.structUtils.makeDescriptor(a,n)}),t=[];for(let o of r){let n=await Jt(e,o);n&&n.validationLevel!=="off"&&t.push({descriptor:o,validationLevel:n.validationLevel,applicableGroups:n.applicableGroups})}return t}async function zr(e,r){let o=(await P.getOptions(e.project))?.validation||"warn";if(typeof o=="string")return o;let n=P.getInheritanceChain(r);for(let a=n.length-1;a>=0;a--){let s=n[a];if(o[s]!==void 0)return o[s]}return"warn"}async function Jr(e,r){let t=(await Ye(e.project,r)).map(({groupName:n})=>n);if(t.length===0)return"off";let o=[];for(let n of t){let a=await zr(e,n);o.push(a)}return o.includes("strict")?"strict":o.includes("warn")?"warn":"off"}async function Ye(e,r){let t=await P.getAppliedCatalogs(e),o=[];if(!t||Object.keys(t).length===0)return o;for(let[n,a]of Object.entries(t)){let s=a[r];s&&o.push({groupName:n,version:s})}return o}async function ee(e,r){if(r.range.startsWith(J)){if(await P.shouldIgnoreWorkspace(e))throw new Error(j.red("The workspace is ignored from the catalogs, but the dependency to add is using the catalog protocol. Consider removing the protocol."));return}let t=await Jt(e,r);if(!t)return;let{validationLevel:o,applicableGroups:n}=t,a=await te(e);if(a.length>0){for(let A of a)if(n.includes(A)){let R=A===rt?J:`${J}${A}`;r.range=R;return}}let s=n.map(A=>A===rt?"":A),f=s.filter(A=>A!=="").length>0?` (${s.join(", ")})`:"",g=`\u27A4 ${r.name} is listed in the catalogs config${f}, but it seems you're adding it without the catalog protocol. Consider running 'yarn add ${r.name}@${J}${s[0]}' instead.`;if(o==="strict")throw new Error(j.red(g));o==="warn"&&console.warn(j.yellow(g))}async function te(e){let r=await P.getOptions(e.project);if(r){if(await P.shouldIgnoreWorkspace(e))return[];if(r.default){if(Array.isArray(r.default))return r.default;if(r.default==="max"){let t=await P.getAppliedCatalogs(e.project),o=Object.keys(t||{}),n=[...Object.entries(e.manifest.raw.dependencies??{}),...Object.entries(e.manifest.raw.devDependencies??{})],a=Object.fromEntries(o.map(f=>[f,0]));for(let[f,g]of n)if(g.startsWith(J)){let A=g.substring(J.length);a[A]=(a[A]||0)+1}let s=Math.max(...Object.values(a));return Object.keys(a).filter(f=>a[f]===s)}}}return[]}var to={commands:[Ht],hooks:{validateWorkspace:async(e,r)=>{let t=await Ke(e);if(t.catalogProtocolViolations.length>0){let o=t.catalogProtocolViolations.filter(s=>s.validationLevel==="strict"),n=t.catalogProtocolViolations.filter(s=>s.validationLevel==="warn"),a=s=>`The following dependencies are listed in the catalogs but not using the catalog protocol: ${s.map(g=>j.yellow(dt.structUtils.stringifyDescriptor(g.descriptor))).join(", ")}. Consider using the catalog protocol instead.`;o.length>0&&r.reportError(dt.MessageName.INVALID_MANIFEST,a(o)),n.length>0&&r.reportWarning(dt.MessageName.INVALID_MANIFEST,a(n))}t.ignoredWorkspaceWithCatalogProtocol&&r.reportError(dt.MessageName.INVALID_MANIFEST,"Workspace is ignored from the catalogs, but it has dependencies with the catalog protocol. Consider removing the protocol.")},afterWorkspaceDependencyAddition:async(e,r,t)=>{ee(e,t)},afterWorkspaceDependencyReplacement:async(e,r,t,o)=>{ee(e,o)}}},eo=to;return rr(ro);})(); + `,examples:[["Apply catalogs to .yarnrc.yml","yarn catalogs apply"],["Check if .yarnrc.yml is up to date","yarn catalogs apply --check"]]})}async execute(){let t=await gt.Configuration.find(this.context.cwd,this.context.plugins),{project:o}=await gt.Project.find(t,this.context.cwd);return(await gt.StreamReport.start({configuration:t,stdout:this.context.stdout},async a=>{let s=await P.read(o);if(!s){a.reportError(0,"No catalogs.yml file found in project root. Please create one to use this command.");return}let f=P.resolveAllCatalogs(s),g=await qr(o);if(!Qr(g,f)){this.reportNoChanges(a);return}this.check?this.reportCheckFailure(a,g,f):await this.applyChanges(a,o,g,f)})).exitCode()}reportNoChanges(t){let o=this.check?j.green("\u2713 .yarnrc.yml is up to date"):"No changes to apply - .yarnrc.yml is already up to date";t.reportInfo(0,o)}reportCheckFailure(t,o,n){t.reportError(0,".yarnrc.yml is out of date. Run 'yarn catalogs apply' to update it."),Ve(t,o,n);let a=We(n.root?1:0,Object.keys(n.named).length);t.reportInfo(0,`Would apply ${a} to .yarnrc.yml`)}async applyChanges(t,o,n,a){Ve(t,n,a),await P.writeToYarnrc(o,a),P.clearCache(o);let s=We(a.root?1:0,Object.keys(a.named).length);t.reportInfo(0,j.green(`\u2713 Applied ${s} to .yarnrc.yml`))}};async function qr(e){let r=Ct.ppath.join(e.cwd,".yarnrc.yml");if(!await Ct.xfs.existsPromise(r))return{};let t=await Ct.xfs.readFilePromise(r,"utf8");return(0,_t.parseSyml)(t)||{}}function Qr(e,r){let t={...e};r.root&&Object.keys(r.root).length>0?t.catalog=r.root:t.catalog=void 0,Object.keys(r.named).length>0?t.catalogs=r.named:t.catalogs=void 0;let o=(0,_t.stringifySyml)(e),n=(0,_t.stringifySyml)(t);return o!==n}function We(e,r){let t=[];return e>0&&t.push("1 root catalog"),r>0&&t.push(`${r} named catalog group${r>1?"s":""}`),t.length===0?"no catalogs":t.join(" and ")}function Fe(e,r,t,o){let n=new Set([...Object.keys(t),...Object.keys(o)]);if(Array.from(n).some(s=>t[s]!==o[s])){e.reportInfo(0,j.bold(`${r}:`));for(let s of Array.from(n).sort()){let f=t[s],g=o[s];f?g?f!==g&&(e.reportInfo(0,j.red(` - ${s}: ${f}`)),e.reportInfo(0,j.green(` + ${s}: ${g}`))):e.reportInfo(0,j.red(` - ${s}: ${f}`)):e.reportInfo(0,j.green(` + ${s}: ${g}`))}}}function Ve(e,r,t){let o=r.catalog,n=r.catalogs;(t.root||o)&&Fe(e,"root catalog",o||{},t.root||{});let a=new Set([...Object.keys(n||{}),...Object.keys(t.named)]);for(let s of Array.from(a).sort())Fe(e,s,n?.[s]||{},t.named[s]||{})}var Gt=V("@yarnpkg/core");async function Ke(e){let r=await P.shouldIgnoreWorkspace(e),t=[...Object.values(e.manifest.raw.dependencies||{}),...Object.values(e.manifest.raw.devDependencies||{})].some(a=>a.startsWith(J)),o=r&&t,n=[];return r||(n=await Zr(e)),{shouldIgnore:r,catalogProtocolViolations:n,ignoredWorkspaceWithCatalogProtocol:o}}async function te(e,r){if(r.range.startsWith(J)||await P.shouldIgnoreWorkspace(e))return null;let t=await ee(e),o=Gt.structUtils.stringifyIdent(r),a=(await Ye(e.project,o)).flatMap(({groupName:f})=>t.length===0||t.includes(f)?[f]:[]);return a.length===0?null:{validationLevel:await Jr(e,o),applicableGroups:a}}async function Zr(e){let r=[...Object.entries(e.manifest.raw.dependencies??{}),...Object.entries(e.manifest.raw.devDependencies??{})].map(([o,n])=>{let a=Gt.structUtils.parseIdent(o);return Gt.structUtils.makeDescriptor(a,n)}),t=[];for(let o of r){let n=await te(e,o);n&&n.validationLevel!=="off"&&t.push({descriptor:o,validationLevel:n.validationLevel,applicableGroups:n.applicableGroups})}return t}async function zr(e,r){let o=(await P.getOptions(e.project))?.validation||"warn";if(typeof o=="string")return o;let n=P.getInheritanceChain(r);for(let a=n.length-1;a>=0;a--){let s=n[a];if(o[s]!==void 0)return o[s]}return"warn"}async function Jr(e,r){let t=(await Ye(e.project,r)).map(({groupName:n})=>n);if(t.length===0)return"off";let o=[];for(let n of t){let a=await zr(e,n);o.push(a)}return o.includes("strict")?"strict":o.includes("warn")?"warn":"off"}async function Ye(e,r){let t=await P.getAppliedCatalogs(e),o=[];if(!t||Object.keys(t).length===0)return o;for(let[n,a]of Object.entries(t)){let s=a[r];s&&o.push({groupName:n,version:s})}return o}async function re(e,r){if(r.range.startsWith(J)){if(await P.shouldIgnoreWorkspace(e))throw new Error(j.red("The workspace is ignored from the catalogs, but the dependency to add is using the catalog protocol. Consider removing the protocol."));return}let t=await te(e,r);if(!t)return;let{validationLevel:o,applicableGroups:n}=t,a=await ee(e);if(a.length>0){for(let A of a)if(n.includes(A)){let R=A===rt?J:`${J}${A}`;r.range=R;return}}let s=n.map(A=>A===rt?"":A),f=s.filter(A=>A!=="").length>0?` (${s.join(", ")})`:"",g=`\u27A4 ${r.name} is listed in the catalogs config${f}, but it seems you're adding it without the catalog protocol. Consider running 'yarn add ${r.name}@${J}${s[0]}' instead.`;if(o==="strict")throw new Error(j.red(g));o==="warn"&&console.warn(j.yellow(g))}async function ee(e){let r=await P.getOptions(e.project);if(r){if(await P.shouldIgnoreWorkspace(e))return[];if(r.default){if(Array.isArray(r.default))return r.default;if(r.default==="max"){let t=await P.getAppliedCatalogs(e.project),o=Object.keys(t||{}),n=[...Object.entries(e.manifest.raw.dependencies??{}),...Object.entries(e.manifest.raw.devDependencies??{})],a=Object.fromEntries(o.map(f=>[f,0]));for(let[f,g]of n)if(g.startsWith(J)){let A=g.substring(J.length);a[A]=(a[A]||0)+1}let s=Math.max(...Object.values(a));return Object.keys(a).filter(f=>a[f]===s)}}}return[]}var to={commands:[Ht],hooks:{validateWorkspace:async(e,r)=>{let t=await Ke(e);if(t.catalogProtocolViolations.length>0){let o=t.catalogProtocolViolations.filter(s=>s.validationLevel==="strict"),n=t.catalogProtocolViolations.filter(s=>s.validationLevel==="warn"),a=s=>`The following dependencies are listed in the catalogs but not using the catalog protocol: ${s.map(g=>j.yellow(dt.structUtils.stringifyDescriptor(g.descriptor))).join(", ")}. Consider using the catalog protocol instead.`;o.length>0&&r.reportError(dt.MessageName.INVALID_MANIFEST,a(o)),n.length>0&&r.reportWarning(dt.MessageName.INVALID_MANIFEST,a(n))}t.ignoredWorkspaceWithCatalogProtocol&&r.reportError(dt.MessageName.INVALID_MANIFEST,"Workspace is ignored from the catalogs, but it has dependencies with the catalog protocol. Consider removing the protocol.")},afterWorkspaceDependencyAddition:async(e,r,t)=>{re(e,t)},afterWorkspaceDependencyReplacement:async(e,r,t,o)=>{re(e,o)}}},eo=to;return rr(ro);})(); return plugin; } }; diff --git a/sources/__tests__/ignored-workspaces.test.ts b/sources/__tests__/ignored-workspaces.test.ts deleted file mode 100644 index f62f04a..0000000 --- a/sources/__tests__/ignored-workspaces.test.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { afterEach, describe, expect, it } from "vitest"; -import { - type TestWorkspace, - createTestWorkspace, - hasDependency, -} from "./utils"; - -describe("ignored workspaces", () => { - let workspace: TestWorkspace; - - afterEach(async () => { - if (workspace) { - await workspace.cleanup(); - } - }); - - it("should not use default alias group if workspace is ignored", async () => { - workspace = await createTestWorkspace(); - - await workspace.writeCatalogsYml({ - options: { - default: ["root"], - ignoredWorkspaces: ["workspace-ignored"], - }, - list: { - root: { - react: "npm:18.0.0", - }, - }, - }); - - await workspace.yarn.catalogs.apply(); - - await workspace.writeJson("package.json", { - name: "workspace-ignored", - version: "1.0.0", - private: true, - dependencies: {}, - }); - - const { stderr } = await workspace.yarn.add("react"); - expect(stderr).toBe(""); - - expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); - }); - - it("should ignore workspaces matched by glob pattern", async () => { - workspace = await createTestWorkspace(); - - await workspace.writeCatalogsYml({ - options: { - default: ["root"], - ignoredWorkspaces: ["@ignored/*"], - }, - list: { - root: { - react: "npm:18.0.0", - }, - }, - }); - - await workspace.yarn.catalogs.apply(); - - await workspace.writeJson("package.json", { - name: "@ignored/workspace", - version: "1.0.0", - private: true, - dependencies: {}, - }); - - const { stderr } = await workspace.yarn.add("react"); - expect(stderr).toBe(""); - - expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); - }); - - it("should fail validation if workspace is ignored, but using the catalog protocol", async () => { - workspace = await createTestWorkspace(); - - await workspace.writeCatalogsYml({ - options: { - ignoredWorkspaces: ["workspace-ignored"], - }, - list: { - root: { - react: "npm:18.0.0", - }, - }, - }); - - await workspace.yarn.catalogs.apply(); - - await workspace.writeJson("package.json", { - name: "workspace-ignored", - version: "1.0.0", - private: true, - dependencies: { - react: "catalog:", - }, - }); - - await expect(workspace.yarn.install()).rejects.toThrow(); - }); -}); diff --git a/sources/__tests__/workspace-filtering.test.ts b/sources/__tests__/workspace-filtering.test.ts new file mode 100644 index 0000000..27b0889 --- /dev/null +++ b/sources/__tests__/workspace-filtering.test.ts @@ -0,0 +1,290 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { + type TestWorkspace, + createTestWorkspace, + hasDependency, +} from "./utils"; + +describe("workspace filtering (included/ignored workspaces)", () => { + let workspace: TestWorkspace; + + afterEach(async () => { + if (workspace) { + await workspace.cleanup(); + } + }); + + describe("ignoredWorkspaces (opt-out)", () => { + it("should not use default alias group if workspace is ignored", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + ignoredWorkspaces: ["workspace-ignored"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "workspace-ignored", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); + }); + + it("should ignore workspaces matched by glob pattern", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + ignoredWorkspaces: ["@ignored/*"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "@ignored/workspace", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); + }); + + it("should fail validation if workspace is ignored, but using the catalog protocol", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + ignoredWorkspaces: ["workspace-ignored"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "workspace-ignored", + version: "1.0.0", + private: true, + dependencies: { + react: "catalog:", + }, + }); + + await expect(workspace.yarn.install()).rejects.toThrow(); + }); + }); + + describe("includedWorkspaces (opt-in)", () => { + it("should use catalog for included workspace", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + includedWorkspaces: ["workspace-included"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "workspace-included", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(true); + }); + + it("should not use catalog for non-included workspace", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + includedWorkspaces: ["workspace-included"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "workspace-not-included", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); + }); + + it("should include workspaces matched by glob pattern", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + includedWorkspaces: ["@included/*"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "@included/workspace", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(true); + }); + + it("should exclude workspaces not matching included pattern", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + includedWorkspaces: ["@included/*"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "@other/workspace", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); + }); + }); + + describe("includedWorkspaces and ignoredWorkspaces interaction", () => { + it("should exclude workspace that matches both included and ignored", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + includedWorkspaces: ["@included/*"], + ignoredWorkspaces: ["@included/excluded"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "@included/excluded", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(false); + }); + + it("should include workspace that matches included but not ignored", async () => { + workspace = await createTestWorkspace(); + + await workspace.writeCatalogsYml({ + options: { + default: ["root"], + includedWorkspaces: ["@included/*"], + ignoredWorkspaces: ["@included/excluded"], + }, + list: { + root: { + react: "npm:18.0.0", + }, + }, + }); + + await workspace.yarn.catalogs.apply(); + + await workspace.writeJson("package.json", { + name: "@included/allowed", + version: "1.0.0", + private: true, + dependencies: {}, + }); + + const { stderr } = await workspace.yarn.add("react"); + expect(stderr).toBe(""); + + expect(await hasDependency(workspace, "react@npm:18.0.0")).toBe(true); + }); + }); +}); diff --git a/sources/configuration/parser.ts b/sources/configuration/parser.ts index 3f88c1f..56d7f75 100644 --- a/sources/configuration/parser.ts +++ b/sources/configuration/parser.ts @@ -54,6 +54,16 @@ export function isValidCatalogsYml( } } + if (opts.includedWorkspaces) { + if ( + !Array.isArray(opts.includedWorkspaces) || + opts.includedWorkspaces.length === 0 || + !opts.includedWorkspaces.every((item) => typeof item === "string") + ) { + return false; + } + } + if (opts.ignoredWorkspaces) { if ( !Array.isArray(opts.ignoredWorkspaces) || diff --git a/sources/configuration/reader.ts b/sources/configuration/reader.ts index 6c7caa1..68e9b63 100644 --- a/sources/configuration/reader.ts +++ b/sources/configuration/reader.ts @@ -118,17 +118,25 @@ export class CatalogsConfigurationReader { /** * Check if a workspace is ignored based on catalogs.yml configuration + * Logic: includedWorkspaces - ignoredWorkspaces = final set */ async shouldIgnoreWorkspace(workspace: Workspace): Promise { if (!workspace.manifest.name) return false; const catalogsYml = await this.read(workspace.project); + const options = catalogsYml?.options; + if (!options) return false; - if (catalogsYml?.options?.ignoredWorkspaces) { - return isMatch( - structUtils.stringifyIdent(workspace.manifest.name), - catalogsYml.options.ignoredWorkspaces, - ); + const workspaceName = structUtils.stringifyIdent(workspace.manifest.name); + + if (options.ignoredWorkspaces) { + const isIgnored = isMatch(workspaceName, options.ignoredWorkspaces); + if (isIgnored) return true; + } + + if (options.includedWorkspaces) { + const isIncluded = isMatch(workspaceName, options.includedWorkspaces); + if (!isIncluded) return true; } return false; diff --git a/sources/configuration/types.ts b/sources/configuration/types.ts index b8ec718..7f8233d 100644 --- a/sources/configuration/types.ts +++ b/sources/configuration/types.ts @@ -15,7 +15,13 @@ interface CatalogsOptions { */ default?: string[] | "max"; /** - * List of workspaces to ignore + * List of workspaces to include (opt-in) + * If specified, only matching workspaces will be processed + */ + includedWorkspaces?: string[]; + /** + * List of workspaces to ignore (opt-out) + * Workspaces matching these patterns will be excluded from catalog processing, regardless of `includedWorkspaces` */ ignoredWorkspaces?: string[]; /**