@gjsify/cli 0.4.42 → 0.4.43
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/dist/cli.gjs.mjs +3 -3
- package/lib/bundler-pick.js +28 -10
- package/lib/commands/self-update.d.ts +1 -0
- package/lib/commands/self-update.js +35 -10
- package/package.json +16 -16
package/dist/cli.gjs.mjs
CHANGED
|
@@ -628,7 +628,7 @@ ${[...S,a].map((n,a)=>`${a+1}. ${n}`).join(`
|
|
|
628
628
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
|
|
629
629
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
|
|
630
630
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
|
|
631
|
-
`+` `.repeat(a));var em;(function(n){n.DEFAULT={allowTrailingComma:!1}})(em||={});function Pe(n,a=[],S=em.DEFAULT){let C=null,N=[],F=[];function i(n){Array.isArray(N)?N.push(n):C!==null&&(N[C]=n)}return r(i,`onValue`),We(n,{onObjectBegin:r(()=>{let n={};i(n),F.push(N),N=n,C=null},`onObjectBegin`),onObjectProperty:r(n=>{C=n},`onObjectProperty`),onObjectEnd:r(()=>{N=F.pop()},`onObjectEnd`),onArrayBegin:r(()=>{let n=[];i(n),F.push(N),N=n,C=null},`onArrayBegin`),onArrayEnd:r(()=>{N=F.pop()},`onArrayEnd`),onLiteralValue:i,onError:r((n,S,C)=>{a.push({error:n,offset:S,length:C})},`onError`)},S),N[0]}r(Pe,`parse$1`);function We(n,a,S=em.DEFAULT){let C=Ne(n,!1),N=[],F=0;function i(n){return n?()=>F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(i,`toNoArgVisit`);function f(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(f,`toOneArgVisit`);function u(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice()):()=>!0}r(u,`toOneArgVisitWithPath`);function g(n){return n?()=>{F>0?F++:n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice())===!1&&(F=1)}:()=>!0}r(g,`toBeginVisit`);function w(n){return n?()=>{F>0&&F--,F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter())}:()=>!0}r(w,`toEndVisit`);let I=g(a.onObjectBegin),H=u(a.onObjectProperty),W=w(a.onObjectEnd),K=g(a.onArrayBegin),q=w(a.onArrayEnd),Y=u(a.onLiteralValue),X=f(a.onSeparator),te=i(a.onComment),ne=f(a.onError),re=S&&S.disallowComments,ie=S&&S.allowTrailingComma;function T(){for(;;){let n=C.scan();switch(C.getTokenError()){case 4:k(14);break;case 5:k(15);break;case 3:k(13);break;case 1:re||k(11);break;case 2:k(12);break;case 6:k(16);break}switch(n){case 12:case 13:re?k(10):te();break;case 16:k(1);break;case 15:case 14:break;default:return n}}}r(T,`scanNext`);function k(n,a=[],S=[]){if(ne(n),a.length+S.length>0){let n=C.getToken();for(;n!==17;){if(a.indexOf(n)!==-1){T();break}else if(S.indexOf(n)!==-1)break;n=T()}}}r(k,`handleError`);function P(n){let a=C.getTokenValue();return n?Y(a):(H(a),N.push(a)),T(),!0}r(P,`parseString`);function M(){switch(C.getToken()){case 11:let n=C.getTokenValue(),a=Number(n);isNaN(a)&&(k(2),a=0),Y(a);break;case 7:Y(null);break;case 8:Y(!0);break;case 9:Y(!1);break;default:return!1}return T(),!0}r(M,`parseLiteral`);function V(){return C.getToken()===10?(P(!1),C.getToken()===6?(X(`:`),T(),U()||k(4,[],[2,5])):k(5,[],[2,5]),N.pop(),!0):(k(3,[],[2,5]),!1)}r(V,`parseProperty`);function z(){I(),T();let n=!1;for(;C.getToken()!==2&&C.getToken()!==17;){if(C.getToken()===5){if(n||k(4,[],[]),X(`,`),T(),C.getToken()===2&&ie)break}else n&&k(6,[],[]);V()||k(4,[],[2,5]),n=!0}return W(),C.getToken()===2?T():k(7,[2],[]),!0}r(z,`parseObject`);function G(){K(),T();let n=!0,a=!1;for(;C.getToken()!==4&&C.getToken()!==17;){if(C.getToken()===5){if(a||k(4,[],[]),X(`,`),T(),C.getToken()===4&&ie)break}else a&&k(6,[],[]);n?(N.push(0),n=!1):N[N.length-1]++,U()||k(4,[],[4,5]),a=!0}return q(),n||N.pop(),C.getToken()===4?T():k(8,[4],[]),!0}r(G,`parseArray`);function U(){switch(C.getToken()){case 3:return G();case 1:return z();case 10:return P(!0);default:return M()}}return r(U,`parseValue`),T(),C.getToken()===17?S.allowEmptyContent?!0:(k(4,[],[]),!1):U()?(C.getToken()!==17&&k(9,[],[]),!0):(k(4,[],[]),!1)}r(We,`visit`);var tm;(function(n){n[n.None=0]=`None`,n[n.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=4]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=6]=`InvalidCharacter`})(tm||={});var nm;(function(n){n[n.OpenBraceToken=1]=`OpenBraceToken`,n[n.CloseBraceToken=2]=`CloseBraceToken`,n[n.OpenBracketToken=3]=`OpenBracketToken`,n[n.CloseBracketToken=4]=`CloseBracketToken`,n[n.CommaToken=5]=`CommaToken`,n[n.ColonToken=6]=`ColonToken`,n[n.NullKeyword=7]=`NullKeyword`,n[n.TrueKeyword=8]=`TrueKeyword`,n[n.FalseKeyword=9]=`FalseKeyword`,n[n.StringLiteral=10]=`StringLiteral`,n[n.NumericLiteral=11]=`NumericLiteral`,n[n.LineCommentTrivia=12]=`LineCommentTrivia`,n[n.BlockCommentTrivia=13]=`BlockCommentTrivia`,n[n.LineBreakTrivia=14]=`LineBreakTrivia`,n[n.Trivia=15]=`Trivia`,n[n.Unknown=16]=`Unknown`,n[n.EOF=17]=`EOF`})(nm||={});const im=Pe;var am;(function(n){n[n.InvalidSymbol=1]=`InvalidSymbol`,n[n.InvalidNumberFormat=2]=`InvalidNumberFormat`,n[n.PropertyNameExpected=3]=`PropertyNameExpected`,n[n.ValueExpected=4]=`ValueExpected`,n[n.ColonExpected=5]=`ColonExpected`,n[n.CommaExpected=6]=`CommaExpected`,n[n.CloseBraceExpected=7]=`CloseBraceExpected`,n[n.CloseBracketExpected=8]=`CloseBracketExpected`,n[n.EndOfFileExpected=9]=`EndOfFileExpected`,n[n.InvalidCommentToken=10]=`InvalidCommentToken`,n[n.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=14]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=16]=`InvalidCharacter`})(am||={});const om=r((n,a)=>im(Jp(a,n,`utf8`)),`readJsonc`),sm=Symbol(`implicitBaseUrl`),cm="${configDir}",lm=r(()=>{let{findPnpApi:n}=Rs;return n&&n(process.cwd())},`getPnpApi`),um=r((n,a,S,C)=>{let N=`resolveFromPackageJsonPath:${n}:${a}:${S}`;if(C!=null&&C.has(N))return C.get(N);let F=om(n,C);if(!F)return;let I=a||`tsconfig.json`;if(!S&&F.exports)try{let[n]=v(F.exports,a,[`require`,`types`]);I=n}catch{return!1}else !a&&F.tsconfig&&(I=F.tsconfig);return I=Vo.join(n,`..`,I),C?.set(N,I),I},`resolveFromPackageJsonPath`),dm=`package.json`,fm=`tsconfig.json`,pm=r((n,a,S)=>{let C=n;if(n===`..`&&(C=Vo.join(C,fm)),n[0]===`.`&&(C=Vo.resolve(a,C)),Vo.isAbsolute(C)){if(qp(S,C)){if(Yp(S,C).isFile())return C}else if(!C.endsWith(`.json`)){let n=`${C}.json`;if(qp(S,n))return n}return}let[N,...F]=n.split(`/`),I=N[0]===`@`?`${N}/${F.shift()}`:N,H=F.join(`/`),W=lm();if(W){let{resolveRequest:C}=W;try{if(I===n){let n=C(Vo.join(I,dm),a);if(n){let a=um(n,H,!1,S);if(a&&qp(S,a))return a}}else{let S;try{S=C(n,a,{extensions:[`.json`]})}catch{S=C(Vo.join(n,fm),a)}if(S)return S}}catch{}}let K=Xp(Vo.resolve(a),Vo.join(`node_modules`,I),S);if(!K||!Yp(S,K).isDirectory())return;let q=Vo.join(K,dm);if(qp(S,q)){let n=um(q,H,!1,S);if(n===!1)return;if(n&&qp(S,n)&&Yp(S,n).isFile())return n}let Y=Vo.join(K,H),X=Y.endsWith(`.json`);if(!X){let n=`${Y}.json`;if(qp(S,n))return n}if(qp(S,Y)){if(Yp(S,Y).isDirectory()){let n=Vo.join(Y,dm);if(qp(S,n)){let a=um(n,``,!0,S);if(a&&qp(S,a))return a}let a=Vo.join(Y,fm);if(qp(S,a))return a}else if(X)return Y}},`resolveExtendsPath`),mm=r((n,a)=>Qp(Vo.relative(n,a)),`pathRelative`),hm=[`files`,`include`,`exclude`],gm=r((n,a,S)=>{let C=Vo.join(a,S);return h$1(Vo.relative(n,C))||`./`},`resolveAndRelativize`),_m=r((n,a,S)=>{let C=Vo.relative(n,a);return C?h$1(`${C}/${S.startsWith(`./`)?S.slice(2):S}`):S},`prefixPattern`),vm=r((n,a,S,C)=>{let N=pm(n,a,C);if(!N)throw Error(`File '${n}' not found.`);if(S.has(N))throw Error(`Circularity detected while resolving configuration: ${N}`);S.add(N);let F=Vo.dirname(N),I=bm(N,C,S);delete I.references;let{compilerOptions:H}=I;if(H){let{baseUrl:n}=H;n&&!n.startsWith(cm)&&(H.baseUrl=gm(a,F,n));let{outDir:S}=H;S&&!S.startsWith(cm)&&(H.outDir=gm(a,F,S));let{declarationDir:C}=H;C&&!C.startsWith(cm)&&(H.declarationDir=gm(a,F,C));let{rootDir:N}=H;N&&!N.startsWith(cm)&&(H.rootDir=gm(a,F,N));let{rootDirs:I}=H;I&&(H.rootDirs=I.map(n=>n.startsWith(cm)?n:gm(a,F,n)));let{typeRoots:W}=H;W&&(H.typeRoots=W.map(n=>n.startsWith(cm)?n:gm(a,F,n)))}for(let n of hm){let S=I[n];S&&(I[n]=S.map(n=>n.startsWith(cm)?n:_m(a,F,n)))}return I},`resolveExtends`),ym=[`outDir`,`declarationDir`],bm=r((n,a,S=new Set)=>{let C;try{C=om(n,a)||{}}catch{throw Error(`Cannot resolve tsconfig at path: ${n}`)}if(typeof C!=`object`)throw SyntaxError(`Failed to parse tsconfig at: ${n}`);let N=Vo.dirname(n);if(C.compilerOptions){let{compilerOptions:n}=C;n.paths&&!n.baseUrl&&(n[sm]=N)}if(C.extends){let n=Array.isArray(C.extends)?C.extends:[C.extends];delete C.extends;for(let F of n.reverse()){let n=vm(F,N,new Set(S),a),I={...n,...C,compilerOptions:{...n.compilerOptions,...C.compilerOptions}};n.watchOptions&&(I.watchOptions={...n.watchOptions,...C.watchOptions}),C=I}}if(C.compilerOptions){let{compilerOptions:n}=C;for(let a of[`baseUrl`,`rootDir`]){let S=n[a];S&&!S.startsWith(cm)&&(n[a]=mm(N,Vo.resolve(N,S)))}for(let a of ym){let S=n[a];S&&(Array.isArray(C.exclude)||(C.exclude=ym.map(a=>n[a]).filter(Boolean)),S.startsWith(cm)||(S=Qp(S)),n[a]=S)}}else C.compilerOptions={};if(C.include&&=C.include.map(h$1),C.files&&=C.files.map(n=>n.startsWith(cm)?n:Qp(n)),C.watchOptions){let{watchOptions:n}=C;n.excludeDirectories&&=n.excludeDirectories.map(n=>h$1(Vo.resolve(N,n))),n.excludeFiles&&=n.excludeFiles.map(n=>h$1(Vo.resolve(N,n))),n.watchFile&&=n.watchFile.toLowerCase(),n.watchDirectory&&=n.watchDirectory.toLowerCase(),n.fallbackPolling&&=n.fallbackPolling.toLowerCase()}return C},`_parseTsconfig`),xm=r((n,a)=>{if(n.startsWith(cm))return h$1(Vo.join(a,n.slice(12)))},`interpolateConfigDir`),Sm=[`outDir`,`declarationDir`,`outFile`,`rootDir`,`baseUrl`,`tsBuildInfoFile`],Cm=r(n=>{if(n.strict)for(let a of[`noImplicitAny`,`noImplicitThis`,`strictNullChecks`,`strictFunctionTypes`,`strictBindCallApply`,`strictPropertyInitialization`,`strictBuiltinIteratorReturn`,`alwaysStrict`,`useUnknownInCatchVariables`])n[a]===void 0&&(n[a]=!0);if(n.composite&&(n.declaration??=!0,n.incremental??=!0),n.target){let a=n.target.toLowerCase();a===`es2015`&&(a=`es6`),n.target=a,a===`esnext`&&(n.module??=`es6`,n.useDefineForClassFields??=!0),(a===`es6`||a===`es2016`||a===`es2017`||a===`es2018`||a===`es2019`||a===`es2020`||a===`es2021`||a===`es2022`||a===`es2023`||a===`es2024`)&&(n.module??=`es6`),(a===`es2022`||a===`es2023`||a===`es2024`)&&(n.useDefineForClassFields??=!0)}if(n.module){let a=n.module.toLowerCase();if(a===`es2015`&&(a=`es6`),n.module=a,(a===`es6`||a===`es2020`||a===`es2022`||a===`esnext`||a===`none`||a===`system`||a===`umd`||a===`amd`)&&(n.moduleResolution??=`classic`),a===`system`&&(n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`||a===`preserve`)&&(n.esModuleInterop??=!0,n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`)&&(n.moduleDetection??=`force`),a===`node16`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node18`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node20`&&(n.target??=`es2023`,n.moduleResolution??=`node16`,n.resolveJsonModule??=!0),a===`nodenext`&&(n.target??=`esnext`,n.moduleResolution??=`nodenext`,n.resolveJsonModule??=!0),a===`node16`||a===`node18`||a===`node20`||a===`nodenext`){let a=n.target;(a===`es3`||a===`es2022`||a===`es2023`||a===`es2024`||a===`esnext`)&&(n.useDefineForClassFields??=!0)}a===`preserve`&&(n.moduleResolution??=`bundler`)}if(n.moduleResolution){let a=n.moduleResolution.toLowerCase();a===`node`&&(a=`node10`),n.moduleResolution=a,(a===`node16`||a===`nodenext`||a===`bundler`)&&(n.resolvePackageJsonExports??=!0,n.resolvePackageJsonImports??=!0),a===`bundler`&&(n.allowSyntheticDefaultImports??=!0,n.resolveJsonModule??=!0)}n.jsx&&=n.jsx.toLowerCase(),n.moduleDetection&&=n.moduleDetection.toLowerCase(),n.importsNotUsedAsValues&&=n.importsNotUsedAsValues.toLowerCase(),n.newLine&&=n.newLine.toLowerCase(),n.esModuleInterop&&(n.allowSyntheticDefaultImports??=!0),n.verbatimModuleSyntax&&(n.isolatedModules??=!0,n.preserveConstEnums??=!0),n.isolatedModules&&(n.preserveConstEnums??=!0),n.rewriteRelativeImportExtensions&&(n.allowImportingTsExtensions??=!0),n.lib&&=n.lib.map(n=>n.toLowerCase()),n.checkJs&&(n.allowJs??=!0)},`normalizeCompilerOptions`),wm=r((n,a=new Map)=>{let S=Vo.resolve(n),C=bm(S,a),N=Vo.dirname(S),{compilerOptions:F}=C;if(F){for(let n of Sm){let a=F[n];if(a){let S=xm(a,N);F[n]=S?mm(N,S):a}}for(let n of[`rootDirs`,`typeRoots`]){let a=F[n];a&&(F[n]=a.map(n=>{let a=xm(n,N);return a?mm(N,a):Qp(n)}))}let{paths:n}=F;if(n)for(let a of Object.keys(n))n[a]=n[a].map(n=>xm(n,N)??n);Cm(F)}for(let n of hm){let a=C[n];a&&(C[n]=a.map(n=>xm(n,N)??n))}return C},`parseTsconfig`);var Tm=Object.defineProperty,Em=r((n,a)=>Tm(n,`name`,{value:a,configurable:!0}),`s`);const Dm=Em(n=>{let a=``;for(let S=0;S<n.length;S+=1){let C=n[S],N=C.toUpperCase();a+=C===N?C.toLowerCase():N}return a},`invertCase`),Om=new Map,km=Em((n,a)=>{let S=Vo.join(n,`.is-fs-case-sensitive-test-${process.pid}`);try{return a.writeFileSync(S,``),!a.existsSync(Dm(S))}finally{try{a.unlinkSync(S)}catch{}}},`checkDirectoryCaseWithWrite`),Am=Em((n,a,S)=>{try{return km(n,S)}catch(n){if(a===void 0)return km(wf.tmpdir(),S);throw n}},`checkDirectoryCaseWithFallback`),jm=Em((n,a=ks,S=!0)=>{let C=n??process.cwd();if(S&&Om.has(C))return Om.get(C);let N,F=Dm(C);return N=F!==C&&a.existsSync(C)?!a.existsSync(F):Am(C,n,a),S&&Om.set(C,N),N},`isFsCaseSensitive`),{join:Mm}=Vo.posix,Nm={ts:[`.ts`,`.tsx`,`.d.ts`],cts:[`.cts`,`.d.cts`],mts:[`.mts`,`.d.mts`]},Pm=r(n=>{let a=[...Nm.ts],S=[...Nm.cts],C=[...Nm.mts];return n!=null&&n.allowJs&&(a.push(`.js`,`.jsx`),S.push(`.cjs`),C.push(`.mjs`)),[...a,...S,...C]},`getSupportedExtensions`),Fm=r(n=>{let a=[];if(!n)return a;let{outDir:S,declarationDir:C}=n;return S&&a.push(S),C&&a.push(C),a},`getDefaultExcludeSpec`),Im=r(n=>n.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),`escapeForRegexp`),Lm=`(?!(${[`node_modules`,`bower_components`,`jspm_packages`].join(`|`)})(/|$))`,Rm=/(?:^|\/)[^.*?]+$/,zm=`**/*`,Bm=`[^/]`,Vm=`[^./]`,Hm=process.platform===`win32`,Um=r(({config:n,path:a},S=jm())=>{if(`extends`in n)throw Error(`tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.`);if(!Vo.isAbsolute(a))throw Error(`The tsconfig path must be absolute`);Hm&&(a=h$1(a));let C=Vo.dirname(a),{files:N,include:F,exclude:I,compilerOptions:H}=n,W=r(n=>Vo.isAbsolute(n)?n:Mm(C,n),`resolvePattern`),K=N?.map(W),q=Pm(H),Y=S?``:`i`,X=(I||Fm(H)).map(n=>{let a=Im(W(n)).replaceAll(String.raw`\*\*/`,`(.+/)?`).replaceAll(String.raw`\*`,`${Bm}*`).replaceAll(String.raw`\?`,Bm);return RegExp(`^${a}($|/)`,Y)}),te=N||F?F:[zm],ne=te?te.map(n=>{let a=W(n);Rm.test(a)&&(a=Mm(a,zm));let S=Im(a).replaceAll(String.raw`/\*\*`,`(/${Lm}${Vm}${Bm}*)*?`).replaceAll(/(\/)?\\\*/g,(n,a)=>{let S=`(${Vm}|(\\.(?!min\\.js$))?)*`;return a?`/${Lm}${Vm}${S}`:S}).replaceAll(/(\/)?\\\?/g,(n,a)=>{let S=Bm;return a?`/${Lm}${S}`:S});return RegExp(`^${S}$`,Y)}):void 0;return a=>{if(!Vo.isAbsolute(a))throw Error(`filePath must be absolute`);if(Hm&&(a=h$1(a)),K!=null&&K.includes(a)||!(!q.some(n=>a.endsWith(n))||X.some(n=>n.test(a)))&&ne&&ne.some(n=>n.test(a)))return n}},`createFilesMatcher`),Wm=r((n,a,S)=>{let C=Vo.resolve(n),N=h$1(n);for(;;){let n=Xp(N,a,S);if(!n)return;let F=Vo.resolve(n),I=wm(F,S),H={path:h$1(F),config:I};if(Um(H)(C))return H;let W=Vo.dirname(n),K=Vo.dirname(W);if(K===W)return;N=K}},`findConfigApplicable`),Gm=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>C?Wm(n,a,S)?.path:Xp(h$1(n),a,S),`findTsconfig`),Km=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>{if(!C){let C=Gm(n,a,S);return C?{path:C,config:wm(C,S)}:null}return Wm(n,a,S)??null},`getTsconfig`),qm=/\*/g,Jm=r((n,a)=>{let S=n.match(qm);if(S&&S.length>1)throw Error(a)},`assertStarCount`),Ym=r(n=>{if(n.includes(`*`)){let[a,S]=n.split(`*`);return{prefix:a,suffix:S}}return n},`parsePattern`),Xm=r(({prefix:n,suffix:a},S)=>S.startsWith(n)&&S.endsWith(a),`isPatternMatch`),Zm=r((n,a,S)=>Object.entries(n).map(([n,C])=>(Jm(n,`Pattern '${n}' can have at most one '*' character.`),{pattern:Ym(n),substitutions:C.map(C=>{if(Jm(C,`Substitution '${C}' in pattern '${n}' can have at most one '*' character.`),!a&&!Zp.test(C)&&!Vo.isAbsolute(C))throw Error(`Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?`);return Vo.resolve(S,C)})})),`parsePaths`);r(n=>{let{compilerOptions:a}=n.config;if(!a)return null;let{baseUrl:S,paths:C}=a;if(!S&&!C)return null;let N=sm in a&&a[sm],F=Vo.resolve(Vo.dirname(n.path),S||N||`.`),I=C?Zm(C,S,F):[];return n=>{if(Zp.test(n))return[];let a=[];for(let S of I){if(S.pattern===n)return S.substitutions.map(h$1);typeof S.pattern!=`string`&&a.push(S)}let C,N=-1;for(let S of a)Xm(S.pattern,n)&&S.pattern.prefix.length>N&&(N=S.pattern.prefix.length,C=S);if(!C)return S?[h$1(Vo.join(F,n))]:[];let H=n.slice(C.pattern.prefix.length,n.length-C.pattern.suffix.length);return C.substitutions.map(n=>h$1(n.replace(`*`,H)))}},`createPathsMatcher`),je();function defaultSearchPlaces(n){return[`package.json`,`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.mjs`,`.${n}rc.cjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.mjs`,`${n}.config.cjs`]}function merge(n,...a){for(let S of a)if(S)for(let a of Object.keys(S)){let C=n[a],N=S[a];N!==void 0&&(isPlainObject$1(C)&&isPlainObject$1(N)?merge(C,N):n[a]=N)}return n}function isPlainObject$1(n){return typeof n==`object`&&!!n&&!Array.isArray(n)&&Object.getPrototypeOf(n)===Object.prototype}__name$1(isPlainObject$1,`isPlainObject`);function readDottedPath(n,a){if(!a.includes(`.`))return n[a];let S=n;for(let n of a.split(`.`)){if(typeof S!=`object`||!S)return;S=S[n]}return S}var Config=class{loadOptions={};constructor(n={}){Object.keys(n).length&&(this.loadOptions=n)}async load(n){let a=await(0,$f.cosmiconfig)(Iu,{...this.loadOptions,searchPlaces:(this.loadOptions.searchPlaces??defaultSearchPlaces(`gjsify`)).filter(n=>n!==`package.json`)}).search(n),S={};try{let a=await this.readPackageJSON(n);isPlainObject$1(a?.gjsify)&&merge(S,a.gjsify)}catch{}return a?.config&&isPlainObject$1(a.config)&&merge(S,a.config),S.bundler||={},S.library||={},S.typescript||={},{config:S,filepath:a?.filepath??``,isEmpty:!a&&Object.keys(S).length===3}}async readPackageJSON(n){return n=await resolvePackageJSON(n),await readPackageJSON(n)}async readTSConfig(n){return Km(n)?.config||{}}async forBuild(n){let a=await this.load(process.cwd()),S={...a.config},C=a.filepath||process.cwd(),N=await this.readPackageJSON(C),F=await this.readTSConfig(C);if(F.reflection||=n.reflection,S.verbose=n.verbose||!1,S.exclude=n.exclude||[],n.consoleShim!==void 0&&(S.consoleShim=n.consoleShim),n.globals!==void 0&&(S.globals=n.globals),n.shebang!==void 0&&(S.shebang=n.shebang),n.excludeGlobals){let a=(Array.isArray(n.excludeGlobals)?n.excludeGlobals.join(`,`):String(n.excludeGlobals)).split(`,`).map(n=>n.trim()).filter(Boolean);a.length&&(S.excludeGlobals=[...S.excludeGlobals??[],...a])}merge(S.library??={},N,S.library),merge(S.typescript??={},F,S.typescript);let parseKvPairs=(n,a)=>{let S={};for(let C of n){let n=C.indexOf(`=`);if(n===-1)throw Error(`Invalid --${a} value '${C}'. Expected KEY=VALUE.`);let N=C.slice(0,n).trim(),F=C.slice(n+1);if(!N)throw Error(`Invalid --${a} value '${C}'. Empty key.`);S[N]=F}return S},I=parseKvPairs(n.define??[],`define`),H=parseKvPairs(n.alias??[],`alias`);Object.keys(H).length&&(S.aliases={...S.aliases,...H});let W={};if(S.defineFromPackageJson)for(let[n,a]of Object.entries(S.defineFromPackageJson)){if(!a||typeof a.field!=`string`||!a.field)throw Error(`gjsify config: defineFromPackageJson["${n}"] is missing a "field" string`);let S=readDottedPath(N,a.field);W[n]=S===void 0?`undefined`:JSON.stringify(S)}let K={};if(S.defineFromEnv)for(let[n,a]of Object.entries(S.defineFromEnv)){if(!a||typeof a.env!=`string`||!a.env)throw Error(`gjsify config: defineFromEnv["${n}"] is missing an "env" string`);let S=process.env[a.env],C=S===void 0?a.default:S;K[n]=C===void 0?`undefined`:JSON.stringify(C)}let q=S.bundler??={},Y=q.output??={},X=q.transform??={};return n.entryPoints?.length&&(q.input=n.entryPoints),q.input||=[`src/index.ts`],n.outfile!==void 0&&(Y.file=n.outfile),n.outdir!==void 0&&(Y.dir=n.outdir),n.format!==void 0&&(Y.format=n.format),n.minify!==void 0&&(Y.minify=n.minify),Y.minify===void 0&&(Y.minify=!0),Y.minify===!0&&(Y.keepNames=!0),n.logLevel&&(q.logLevel={silent:`silent`,error:`warn`,warning:`warn`,warn:`warn`,info:`info`,debug:`debug`,verbose:`debug`}[n.logLevel]??`warn`),n.external?.length&&(q.external=[...Array.isArray(q.external)?q.external:[],...n.external]),(Object.keys(I).length||Object.keys(W).length||Object.keys(K).length)&&(X.define={...X.define,...W,...K,...I}),S.verbose&&Ae.debug(`configData`,S),S}};As(),Ho();function discoverWorkspaces(n,a={}){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`@gjsify/workspace: no package.json at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=a.patterns??extractWorkspacePatterns(C),F=N.filter(n=>!n.startsWith(`!`)),I=N.filter(n=>n.startsWith(`!`)).map(n=>globToRegex$1(n.slice(1))),H=[];a.includeRoot&&C.name&&H.push({location:n,relativeLocation:`.`,name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0});for(let a of F)for(let S of expandPattern(n,a)){let a=Mo(n,S).split(zo).join(`/`);if(I.some(n=>n.test(a)))continue;let C=jo(S,`package.json`);if(!existsSync(C))continue;let N;try{N=JSON.parse(readFileSync(C,`utf-8`))}catch{continue}N.name&&H.push({location:S,relativeLocation:a,name:N.name,version:N.version??`0.0.0`,manifest:N,private:N.private===!0})}return H.sort((n,a)=>n.relativeLocation.localeCompare(a.relativeLocation)),H}function buildDependencyGraph(n,a={}){let S=a.includeDev??!1,C=a.includePeer??!1,N=a.includeOptional??!0,F=indexByName(n),I=new Map;for(let a of n){let n=new Set,H=a.manifest;for(let a of[H.dependencies,S?H.devDependencies:void 0,C?H.peerDependencies:void 0,N?H.optionalDependencies:void 0])if(a)for(let[S,C]of Object.entries(a))typeof C==`string`&&C.startsWith(`workspace:`)&&F.has(S)&&n.add(S);I.set(a.name,n)}return{edges:I,byName:F}}function topologicalSort(n){let a=new Map;for(let S of n.edges.keys())a.set(S,0);for(let S of n.edges.values())for(let n of S)a.has(n)&&a.set(n,(a.get(n)??0)+1);let S=new Map,C=new Map;for(let a of n.edges.keys())S.set(a,new Set),C.set(a,0);for(let[a,N]of n.edges)for(let n of N)S.has(n)&&(S.get(n).add(a),C.set(a,(C.get(a)??0)+1));let N=[];for(let[n,a]of C)a===0&&N.push(n);N.sort();let F=[];for(;N.length>0;){let a=N.shift(),I=n.byName.get(a);I&&F.push(I);let H=S.get(a);if(H){let n=[];for(let a of H){let S=(C.get(a)??1)-1;C.set(a,S),S===0&&n.push(a)}n.sort(),N.push(...n)}}if(F.length!==C.size){let n=[...C.entries()].filter(([,n])=>n>0).map(([n])=>n);throw Error(`@gjsify/workspace: dependency cycle detected involving ${n.join(`, `)}`)}return F}function buildReverseDependencyGraph(n,a={}){let S=buildDependencyGraph(n,a),C=new Map;for(let n of S.edges.keys())C.set(n,new Set);for(let[n,a]of S.edges)for(let S of a){let a=C.get(S);a&&a.add(n)}return{edges:C,byName:S.byName}}function affectedClosure(n,a){let S=new Set,C=[];for(let N of a)n.byName.has(N)&&(S.has(N)||(S.add(N),C.push(N)));for(;C.length>0;){let a=C.shift(),N=n.edges.get(a);if(N)for(let n of N)S.has(n)||(S.add(n),C.push(n))}return S}function workspacesForChangedFiles(n,a,S){let C=new Set,N=[],F={children:new Map};for(let a of n){if(a.relativeLocation===`.`||a.relativeLocation===``)continue;let n=a.relativeLocation.split(`/`).filter(Boolean),S=F;for(let a of n){let n=S.children.get(a);n||(n={children:new Map},S.children.set(a,n)),S=n}S.ws=a.name}for(let n of S){if(!n)continue;let a=n.replace(/\\/g,`/`).split(`/`).filter(Boolean),S=F,I;for(let n of a){if(S=S.children.get(n),!S)break;S.ws&&(I=S.ws)}I?C.add(I):N.push(n)}return{matched:C,unmatched:N}}function filterWorkspaces(n,a){let S=a.include?.map(globToRegex$1),C=a.exclude?.map(globToRegex$1);return n.filter(n=>!(a.noPrivate&&n.private||S&&S.length>0&&!S.some(a=>a.test(n.name))||C&&C.some(a=>a.test(n.name))))}function extractWorkspacePatterns(n){let a=n.workspaces;return a?Array.isArray(a)?a:a.packages??[]:[]}function expandPattern(n,a){let S=a.split(`/`).filter(Boolean),C=[Oo(n)];for(let n of S){let a=[];for(let S of C)if(n===`*`){let n=[];try{n=readdirSync(S)}catch{continue}for(let C of n){if(C.startsWith(`.`))continue;let n=jo(S,C);try{statSync(n).isDirectory()&&a.push(n)}catch{}}}else if(n.includes(`*`)){let C=globToRegex$1(n),N=[];try{N=readdirSync(S)}catch{continue}for(let n of N){if(n.startsWith(`.`)||!C.test(n))continue;let N=jo(S,n);try{statSync(N).isDirectory()&&a.push(N)}catch{}}}else{let C=jo(S,n);if(existsSync(C))try{statSync(C).isDirectory()&&a.push(C)}catch{}}C=a}return C}function globToRegex$1(n){let a=n.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`[^/]*`);return RegExp(`^${a}$`)}__name$1(globToRegex$1,`globToRegex`);function indexByName(n){let a=new Map;for(let S of n)a.set(S.name,S);return a}As(),Ho();function readPackageJson$4(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$4,`readPackageJson`);function findWorkspaceRoot(n){let a=n;for(let S=0;S<12;S++){let S=jo(a,`package.json`);if(existsSync(S)&&readPackageJson$4(S)?.workspaces!==void 0)try{let S=discoverWorkspaces(a);if(a===n||S.some(a=>a.location===n))return a}catch{}let C=Oo(a,`..`);if(C===a)break;a=C}return null}zs(),nn(),Ho();function resolveNpmPackage(n,a={}){let S=a.cwd??process.cwd(),C=process.env.GJSIFY_NODE_PATH;if(C)for(let a of C.split(`:`).filter(Boolean)){let S=tryResolveFromDir(n,Oo(a));if(S)return S}let N=tryResolveFromDir(n,S);if(N)return N;let F=findWorkspaceRoot(S);if(F&&F!==S){let a=tryResolveFromDir(n,F);if(a)return a}if(a.bundleUrl)try{return createRequire(a.bundleUrl).resolve(n)}catch{}let I=Oo(S,`..`);for(let a=0;a<8;a++){let a=tryResolveFromDir(n,I);if(a)return a;let S=Oo(I,`..`);if(S===I)break;I=S}return null}function tryResolveFromDir(n,a){try{let S=pathToFileURL(jo(a,`__gjsify_resolve__.js`)).href;return createRequire(S).resolve(n)}catch{return null}}je(),As(),Ho(),zs(),nn();async function loadNpmRolldown(){return(await import(resolveImportTargetForGjs(`rolldown`))).rolldown}function resolveImportTargetForGjs(n){if(globalThis.imports?.gi===void 0)return n;let a=resolveNpmPackage(n,{bundleUrl:import.meta.url});return a?pathToFileURL(a).href:n}async function bundleToChunks(n){if(await shouldUseNative()){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.rolldownInput.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let N=liftTransformExtras(stripUnserializable({...n.rolldownInput,input:normalizeInputForNative(n.rolldownInput.input),format:n.format}));delete N.plugins;let F=await a.bundleWithPlugins(N,C),I=[];for(let n of F.output)n.type===`chunk`&&I.push(n.code);return I}let a=await(await loadNpmRolldown())(n.rolldownInput);try{let S=await a.generate({format:n.format,minify:!1,sourcemap:!1}),C=[];for(let n of S.output)n.type===`chunk`&&C.push(n.code);return C}finally{await a.close()}}async function runWatch(n){if(await shouldUseNative())throw Error("`gjsify build --watch` requires the npm `rolldown` engine. The native engine (`@gjsify/rolldown-native`) does not expose a watcher API. Run the watch loop under Node (`node lib/index.js build … --watch`) or set `GJSIFY_BUNDLER=npm`.");let a=await import(resolveImportTargetForGjs(`rolldown`)),S=n.output??{};return a.watch({...n,output:S})}async function runBundle(n){if(await shouldUseNative())return await runNativeBundle(n);let a=await(await loadNpmRolldown())(n);try{return await a.write(n.output??{})}finally{await a.close()}}let Qm=null;async function shouldUseNative(){let n=(globalThis.process?.env??{}).GJSIFY_BUNDLER;if(n===`npm`)return!1;if(n===`native`){if(!await tryLoadNative())throw Error(`GJSIFY_BUNDLER=native but @gjsify/rolldown-native is not loadable (no prebuild for this architecture, or not running under GJS).`);return!0}return globalThis.imports?.gi===void 0?!1:await tryLoadNative()!==null}async function tryLoadNative(){return Qm||(Qm=(async()=>{let n=globalThis.imports?.gi!==void 0;if(!n)return null;try{let a=`@gjsify/rolldown-native`,S=a;n&&(S=pathToFileURL(resolveNpmPackage(a,{bundleUrl:import.meta.url})??createRequire(import.meta.url).resolve(a)).href);let C=await import(S);return C.hasNativeRolldown()?C:null}catch{return null}})(),Qm)}async function runNativeBundle(n){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let{output:N,plugins:F,...I}=n,H=liftTransformExtras(stripUnserializable({...I,...N,input:normalizeInputForNative(n.input)}));globalThis.process?.env?.GJSIFY_DEBUG_NATIVE_OPTS&&Ae.error(`[gjsify-bundler-pick] native opts JSON:`,JSON.stringify(H));let W=await a.bundleWithPlugins(H,C),K=n.output??{},q=K.dir??(K.file?Po(K.file):process.cwd());q&&await as.mkdir(q,{recursive:!0});for(let n of W.output)if(n.type===`chunk`){let a=K.file&&W.output.length===1?K.file:jo(q,n.fileName);await as.writeFile(a,n.code,`utf8`)}return synthRolldownOutput(W)}function stripUnserializable(n){let a={};for(let[S,C]of Object.entries(n))typeof C!=`function`&&(S===`sourcemap`&&typeof C==`boolean`||(a[S]=C));return a}function liftTransformExtras(n){let a=n.transform;if(!a)return n;let S={},C={...a};for(let n of[`define`,`inject`])n in C&&(S[n]=C[n],delete C[n]);return S.inject!==void 0&&!Array.isArray(S.inject)&&(S.inject=mapToInjectArray(S.inject)),{...n,transform:Object.keys(C).length===0?void 0:C,...S}}function mapToInjectArray(n){let a=[];for(let[S,C]of Object.entries(n))if(typeof C==`string`)a.push({type:`default`,from:C,alias:S});else{let[n,N]=C;a.push({type:`named`,from:n,imported:N,alias:S})}return a}function normalizeInputForNative(n){return n===void 0?[]:typeof n==`string`?[{import:n}]:Array.isArray(n)?n.map(n=>typeof n==`string`?{import:n}:n):Object.entries(n).map(([n,a])=>({name:n,import:a}))}function isPluginObject(n){return typeof n==`object`&&!!n&&!Array.isArray(n)}function pickHook(n){if(typeof n==`function`)return{fn:n};if(typeof n==`object`&&n&&`handler`in n){let a=n,S=filterToRegexSource(a.filter?.id),C={fn:a.handler};return S!==void 0&&(C.idFilter=S),C}}function filterToRegexSource(n){if(n!==void 0){if(Array.isArray(n)){let a=n.map(oneToSource).filter(n=>n!==void 0);return a.length===0?void 0:a.length===1?a[0]:`(?:${a.join(`|`)})`}return oneToSource(n)}}function oneToSource(n){if(n instanceof RegExp)return n.source;if(typeof n==`string`)return n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function toNativePlugin(n){let a={name:typeof n.name==`string`?n.name:`unnamed-plugin`},S={},C=pickHook(n.load);C&&(a.load=C.fn,C.idFilter&&(S.load=C.idFilter));let N=pickHook(n.transform);N&&(a.transform=N.fn,N.idFilter&&(S.transform=N.idFilter));let F=pickHook(n.resolveId);F&&(a.resolveId=F.fn,F.idFilter&&(S.resolveId=F.idFilter));let I=pickHook(n.renderChunk);I&&(a.renderChunk=I.fn);let H=pickHook(n.banner);H&&(a.banner=H.fn);let W=pickHook(n.footer);W&&(a.footer=W.fn);let K=pickHook(n.intro);K&&(a.intro=K.fn);let q=pickHook(n.outro);q&&(a.outro=q.fn);let Y=pickHook(n.buildStart);Y&&(a.buildStart=Y.fn);let X=pickHook(n.buildEnd);X&&(a.buildEnd=X.fn);let te=pickHook(n.generateBundle);te&&(a.generateBundle=te.fn);let ne=pickHook(n.writeBundle);ne&&(a.writeBundle=ne.fn);let re=pickHook(n.closeBundle);return re&&(a.closeBundle=re.fn),Object.keys(S).length>0&&(a.idFilter=S),a}function synthRolldownOutput(n){return{output:n.output.map(n=>n.type===`chunk`?{type:`chunk`,fileName:n.fileName,code:n.code,name:n.name,isEntry:n.isEntry,isDynamicEntry:n.isDynamicEntry,map:n.map??null,sourcemapFileName:n.sourcemapFilename??null,imports:n.imports,dynamicImports:n.dynamicImports,facadeModuleId:null,moduleIds:[],modules:{},exports:[],referencedFiles:[],importedBindings:{}}:{type:`asset`,fileName:n.fileName,names:n.names,originalFileNames:n.originalFileNames,source:n.sourceText??``,needsCodeReference:!1})}}je(),ss(),As(),Ho(),nn();const $m=new Set([`polyfill`,`native`,`partial`,`none`]),eh=new Set([`gjs`,`node`,`browser`,`nativescript`]);let th=null;const nh=new Set;function findScanRoots(){let n=[],a=Po(fileURLToPath(import.meta.url));for(let S=0;S<8;S++){let S=Oo(a,`packages`);if(existsSync(S))try{[`node`,`web`,`dom`,`framework`,`infra`].some(n=>existsSync(jo(S,n)))&&n.push({kind:`workspace`,dir:S})}catch{}let C=Oo(a,`node_modules`,`@gjsify`);existsSync(C)&&n.push({kind:`installed`,dir:C});let N=Po(a);if(N===a)break;a=N}try{let a=Oo(process.cwd(),`node_modules`,`@gjsify`);existsSync(a)&&n.push({kind:`installed`,dir:a})}catch{}return n}function ingestPackageDirSync(n,a){let S=jo(n,`package.json`);if(existsSync(S))try{let C=readFileSync(S,`utf8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:null,I=N?.gjsify?.runtimes;if(F&&F.startsWith(`@gjsify/`)&&!a.has(F)&&I&&typeof I==`object`){let S={};for(let n of eh){let a=I[n];typeof a==`string`&&$m.has(a)&&(S[n]=a)}let C=existsSync(jo(n,`globals.mjs`));a.set(F,{name:F,dir:n,runtimes:S,hasGlobals:C})}}catch{}}function getCacheSync(){if(th)return th;let n=findScanRoots(),a=new Map;if(n.length===0)return th=a,th;function walkWorkspace(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}if(existsSync(jo(n,`package.json`))){ingestPackageDirSync(n,a);return}for(let a of S)a.isDirectory()&&(a.name===`node_modules`||a.name===`lib`||a.name===`dist`||a.name.startsWith(`.`)||walkWorkspace(jo(n,a.name)))}function walkInstalled(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}for(let C of S)!C.isDirectory()&&!C.isSymbolicLink()||C.name.startsWith(`.`)||ingestPackageDirSync(jo(n,C.name),a)}for(let a of n)a.kind===`workspace`?walkWorkspace(a.dir):walkInstalled(a.dir);return th=a,th}function warnOnce(n,a){nh.has(n)||(nh.add(n),Ae.warn(`[@gjsify/resolve-npm] ${a}`))}function resolveSlot(n,a){let S=n.runtimes[a];if(!S)return null;switch(S){case`polyfill`:case`partial`:return null;case`native`:return n.hasGlobals?`${n.name}/globals`:(warnOnce(`${n.name}-${a}-native-missing-globals`,`${n.name} declares runtimes.${a}="native" but ships no globals.mjs — falling back to @gjsify/empty for --app ${a} builds.`),`@gjsify/empty`);case`none`:return null;default:return null}}function getDerivedAliasesSync(n){if(!eh.has(n))return{};let a=getCacheSync(),S={};for(let C of a.values()){let a=resolveSlot(C,n);a!==null&&a!==C.name&&(S[C.name]=a)}return S}const rh=`assert.assert/strict.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.dns/promises.domain.events.fs.fs/promises.http.http2.https.inspector.module.net.os.path.path/posix.path/win32.perf_hooks.process.punycode.querystring.readline.readline/promises.repl.stream.stream/web.stream/consumers.stream/promises.string_decoder.sys.test.timers.timers/promises.tls.tty.url.util.util/types.v8.vm.wasi.sqlite.worker_threads.zlib`.split(`.`),ih=[`readable-stream`,`node-fetch`],ah={jsdom:`@gjsify/empty`,"./polling-xhr.node.js":`./polling-xhr.js`,"./websocket.node.js":`./websocket.js`,"./globals.node.js":`./globals.js`},oh={assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert/strict`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,child_process:`@gjsify/child_process`,cluster:`@gjsify/cluster`,console:`@gjsify/console`,constants:`@gjsify/constants`,crypto:`@gjsify/crypto`,dgram:`@gjsify/dgram`,diagnostics_channel:`@gjsify/diagnostics_channel`,dns:`@gjsify/dns`,"dns/promises":`@gjsify/dns/promises`,domain:`@gjsify/domain`,events:`@gjsify/events`,fs:`@gjsify/fs`,"fs/promises":`@gjsify/fs/promises`,http:`@gjsify/http`,http2:`@gjsify/http2`,https:`@gjsify/https`,inspector:`@gjsify/inspector`,module:`@gjsify/module`,net:`@gjsify/net`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,perf_hooks:`@gjsify/perf_hooks`,process:`@gjsify/process`,punycode:`@gjsify/punycode`,querystring:`@gjsify/querystring`,readline:`@gjsify/readline`,"readline/promises":`@gjsify/readline/promises`,repl:`@gjsify/repl`,stream:`@gjsify/stream`,"stream/web":`@gjsify/stream/web`,"stream/consumers":`@gjsify/stream/consumers`,"stream/promises":`@gjsify/stream/promises`,string_decoder:`@gjsify/string_decoder`,sys:`@gjsify/sys`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,tls:`@gjsify/tls`,tty:`@gjsify/tty`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,v8:`@gjsify/v8`,vm:`@gjsify/vm`,wasi:`@gjsify/wasi`,sqlite:`@gjsify/sqlite`,worker_threads:`@gjsify/worker_threads`,zlib:`@gjsify/zlib`,"node-fetch":`@gjsify/fetch`,ws:`@gjsify/ws`,"isomorphic-ws":`@gjsify/websocket`},sh={assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert/strict`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,child_process:`@gjsify/empty`,cluster:`@gjsify/empty`,console:`@gjsify/console`,constants:`@gjsify/constants`,crypto:`@gjsify/crypto`,dgram:`@gjsify/empty`,diagnostics_channel:`@gjsify/diagnostics_channel`,dns:`@gjsify/empty`,"dns/promises":`@gjsify/empty`,domain:`@gjsify/domain`,events:`@gjsify/events`,fs:`@gjsify/empty`,"fs/promises":`@gjsify/empty`,http:`@gjsify/empty`,http2:`@gjsify/empty`,https:`@gjsify/empty`,inspector:`@gjsify/empty`,module:`@gjsify/empty`,net:`@gjsify/empty`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,perf_hooks:`@gjsify/perf_hooks`,process:`@gjsify/process`,punycode:`@gjsify/punycode`,querystring:`@gjsify/querystring`,readline:`@gjsify/empty`,"readline/promises":`@gjsify/empty`,repl:`@gjsify/empty`,stream:`@gjsify/stream`,"stream/web":`@gjsify/stream/web`,"stream/consumers":`@gjsify/stream/consumers`,"stream/promises":`@gjsify/stream/promises`,string_decoder:`@gjsify/string_decoder`,sys:`@gjsify/sys`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,tls:`@gjsify/empty`,tty:`@gjsify/empty`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,v8:`@gjsify/empty`,vm:`@gjsify/vm`,wasi:`@gjsify/empty`,sqlite:`@gjsify/empty`,worker_threads:`@gjsify/empty`,zlib:`@gjsify/zlib`,"node-fetch":`@gjsify/empty`,ws:`@gjsify/empty`,"isomorphic-ws":`@gjsify/empty`},ch={child_process:`@gjsify/empty`,cluster:`@gjsify/empty`,dgram:`@gjsify/empty`,dns:`@gjsify/empty`,"dns/promises":`@gjsify/empty`,inspector:`@gjsify/empty`,net:`@gjsify/empty`,tls:`@gjsify/empty`,tty:`@gjsify/empty`,http:`@gjsify/empty`,https:`@gjsify/empty`,http2:`@gjsify/empty`,readline:`@gjsify/empty`,repl:`@gjsify/empty`,v8:`@gjsify/empty`,vm:`@gjsify/empty`,worker_threads:`@gjsify/empty`,perf_hooks:`@gjsify/empty`,diagnostics_channel:`@gjsify/empty`,domain:`@gjsify/empty`,sqlite:`@gjsify/empty`,sys:`@gjsify/empty`,zlib:`@gjsify/empty`,assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,module:`@gjsify/module`,crypto:`@gjsify/crypto`,events:`@gjsify/events`,fs:`@gjsify/fs`,"fs/promises":`@gjsify/fs/promises`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,process:`@gjsify/process`,stream:`@gjsify/stream`,"stream/promises":`@gjsify/stream/promises`,"stream/web":`@gjsify/stream/web`,string_decoder:`@gjsify/string_decoder`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,querystring:`@gjsify/querystring`,console:`@gjsify/console`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,"node-fetch":`@gjsify/empty`,ws:`@gjsify/empty`,"isomorphic-ws":`@gjsify/empty`},lh={"abort-controller":`@gjsify/abort-controller`,"compression-streams":`@gjsify/compression-streams`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception`,"event-target-shim":`@gjsify/dom-events`,"message-channel":`@gjsify/message-channel`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch`,formdata:`@gjsify/formdata`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/abort-controller/register`,"compression-streams/register":`@gjsify/compression-streams/register`,"dom-events/register":`@gjsify/dom-events/register`,"dom-events/register/event-target":`@gjsify/dom-events/register/event-target`,"dom-events/register/custom-events":`@gjsify/dom-events/register/custom-events`,"dom-events/register/ui-events":`@gjsify/dom-events/register/ui-events`,"dom-exception/register":`@gjsify/dom-exception/register`,"message-channel/register":`@gjsify/message-channel/register`,"eventsource/register":`@gjsify/eventsource/register`,"websocket/register":`@gjsify/websocket/register`,"fetch/register":`@gjsify/fetch/register`,"fetch/register/fetch":`@gjsify/fetch/register/fetch`,"fetch/register/xhr":`@gjsify/fetch/register/xhr`,"webcrypto/register":`@gjsify/webcrypto/register`,"web-streams/register":`@gjsify/web-streams/register`,"web-streams/register/readable":`@gjsify/web-streams/register/readable`,"web-streams/register/writable":`@gjsify/web-streams/register/writable`,"web-streams/register/transform":`@gjsify/web-streams/register/transform`,"web-streams/register/text-streams":`@gjsify/web-streams/register/text-streams`,"web-streams/register/queuing":`@gjsify/web-streams/register/queuing`,xmlhttprequest:`@gjsify/fetch`,"xmlhttprequest/register":`@gjsify/fetch/register/xhr`,"@gjsify/xmlhttprequest":`@gjsify/fetch`,"@gjsify/xmlhttprequest/register":`@gjsify/fetch/register/xhr`,domparser:`@gjsify/domparser`,"domparser/register":`@gjsify/domparser/register`,webaudio:`@gjsify/webaudio`,"webaudio/register":`@gjsify/webaudio/register`,gamepad:`@gjsify/gamepad`,"gamepad/register":`@gjsify/gamepad/register`,webrtc:`@gjsify/webrtc`,"webrtc/register":`@gjsify/webrtc/register`,"webrtc/register/peer-connection":`@gjsify/webrtc/register/peer-connection`,"webrtc/register/data-channel":`@gjsify/webrtc/register/data-channel`,"webrtc/register/error":`@gjsify/webrtc/register/error`,"webrtc/register/media":`@gjsify/webrtc/register/media`,"webrtc/register/media-devices":`@gjsify/webrtc/register/media-devices`,webassembly:`@gjsify/webassembly`,"webassembly/register":`@gjsify/webassembly/register`,"webassembly/register/promise":`@gjsify/webassembly/register/promise`},uh={"@gjsify/node-globals":`@gjsify/empty`,"@gjsify/node-globals/register":`@gjsify/empty`,"@gjsify/node-globals/register/process":`@gjsify/empty`,"@gjsify/node-globals/register/buffer":`@gjsify/empty`,"@gjsify/node-globals/register/timers":`@gjsify/empty`,"@gjsify/node-globals/register/encoding":`@gjsify/empty`,"@gjsify/node-globals/register/url":`@gjsify/empty`,"@gjsify/node-globals/register/structured-clone":`@gjsify/empty`,"@gjsify/node-globals/register/microtask":`@gjsify/empty`,"@gjsify/web-globals":`@gjsify/empty`,"@gjsify/web-globals/register":`@gjsify/empty`,"@gjsify/web-globals/register/performance":`@gjsify/empty`,"@gjsify/web-globals/register/formdata":`@gjsify/empty`},dh={},fh={"abort-controller":`@gjsify/abort-controller/globals`,"compression-streams":`@gjsify/compression-streams/globals`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception/globals`,"message-channel":`@gjsify/message-channel/globals`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch/globals`,formdata:`@gjsify/formdata/globals`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto/globals`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket/globals`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/empty`,"compression-streams/register":`@gjsify/empty`,"dom-events/register":`@gjsify/empty`,"dom-events/register/event-target":`@gjsify/empty`,"dom-events/register/custom-events":`@gjsify/empty`,"dom-events/register/ui-events":`@gjsify/empty`,"dom-exception/register":`@gjsify/empty`,"message-channel/register":`@gjsify/empty`,"eventsource/register":`@gjsify/empty`,"websocket/register":`@gjsify/empty`,"fetch/register":`@gjsify/empty`,"fetch/register/fetch":`@gjsify/empty`,"fetch/register/xhr":`@gjsify/empty`,"webcrypto/register":`@gjsify/empty`,"web-streams/register":`@gjsify/empty`,"web-streams/register/readable":`@gjsify/empty`,"web-streams/register/writable":`@gjsify/empty`,"web-streams/register/transform":`@gjsify/empty`,"web-streams/register/text-streams":`@gjsify/empty`,"web-streams/register/queuing":`@gjsify/empty`,"@gjsify/abort-controller/register":`@gjsify/empty`,"@gjsify/compression-streams/register":`@gjsify/empty`,"@gjsify/dom-events/register":`@gjsify/empty`,"@gjsify/dom-events/register/event-target":`@gjsify/empty`,"@gjsify/dom-events/register/custom-events":`@gjsify/empty`,"@gjsify/dom-events/register/ui-events":`@gjsify/empty`,"@gjsify/dom-exception/register":`@gjsify/empty`,"@gjsify/message-channel/register":`@gjsify/empty`,"@gjsify/eventsource/register":`@gjsify/empty`,"@gjsify/websocket/register":`@gjsify/empty`,"@gjsify/fetch/register":`@gjsify/empty`,"@gjsify/fetch/register/fetch":`@gjsify/empty`,"@gjsify/fetch/register/xhr":`@gjsify/empty`,"@gjsify/webcrypto/register":`@gjsify/empty`,"@gjsify/web-streams/register":`@gjsify/empty`,"@gjsify/web-streams/register/readable":`@gjsify/empty`,"@gjsify/web-streams/register/writable":`@gjsify/empty`,"@gjsify/web-streams/register/transform":`@gjsify/empty`,"@gjsify/web-streams/register/text-streams":`@gjsify/empty`,"@gjsify/web-streams/register/queuing":`@gjsify/empty`,"@gjsify/dom-elements/register":`@gjsify/empty`,"@gjsify/dom-elements/register/document":`@gjsify/empty`,"@gjsify/dom-elements/register/canvas":`@gjsify/empty`,"@gjsify/dom-elements/register/image":`@gjsify/empty`,"@gjsify/dom-elements/register/observers":`@gjsify/empty`,"@gjsify/dom-elements/register/font-face":`@gjsify/empty`,"@gjsify/dom-elements/register/match-media":`@gjsify/empty`,"@gjsify/dom-elements/register/location":`@gjsify/empty`,"@gjsify/dom-elements/register/navigator":`@gjsify/empty`,"@gjsify/buffer/register":`@gjsify/empty`,xmlhttprequest:`@gjsify/empty`,"xmlhttprequest/register":`@gjsify/empty`,"@gjsify/xmlhttprequest":`@gjsify/empty`,"@gjsify/xmlhttprequest/register":`@gjsify/empty`,domparser:`@gjsify/empty`,"domparser/register":`@gjsify/empty`,"@gjsify/domparser/register":`@gjsify/empty`,webaudio:`@gjsify/empty`,"webaudio/register":`@gjsify/empty`,"@gjsify/webaudio/register":`@gjsify/empty`,gamepad:`@gjsify/empty`,"gamepad/register":`@gjsify/empty`,"@gjsify/gamepad/register":`@gjsify/empty`,webrtc:`@gjsify/empty`,"webrtc/register":`@gjsify/empty`,"webrtc/register/peer-connection":`@gjsify/empty`,"webrtc/register/data-channel":`@gjsify/empty`,"webrtc/register/error":`@gjsify/empty`,"webrtc/register/media":`@gjsify/empty`,"webrtc/register/media-devices":`@gjsify/empty`,"@gjsify/webrtc":`@gjsify/empty`,"@gjsify/webrtc/register":`@gjsify/empty`,"@gjsify/webrtc/register/peer-connection":`@gjsify/empty`,"@gjsify/webrtc/register/data-channel":`@gjsify/empty`,"@gjsify/webrtc/register/error":`@gjsify/empty`,"@gjsify/webrtc/register/media":`@gjsify/empty`,"@gjsify/webrtc/register/media-devices":`@gjsify/empty`,webassembly:`@gjsify/webassembly/globals`,"webassembly/register":`@gjsify/empty`,"webassembly/register/promise":`@gjsify/empty`,"@gjsify/webassembly/register":`@gjsify/empty`,"@gjsify/webassembly/register/promise":`@gjsify/empty`},setNodeAliasPrefix=n=>{for(let a in n){if(a.startsWith(`node:`))continue;let S=`node:${a}`;n[S]||(n[S]=n[a])}return n},getAliasesGeneralForGjs=n=>ah,getAliasesNodeForGjs=n=>setNodeAliasPrefix(oh),getAliasesWebForGjs=n=>lh,getAliasesGeneralForNode=n=>uh,getAliasesGjsForNode=n=>dh,getAliasesWebForNode=n=>fh,getAliasesForGjs=n=>({...getDerivedAliasesSync(`gjs`),...getAliasesGeneralForGjs(n),...getAliasesNodeForGjs(n),...getAliasesWebForGjs(n)}),getAliasesForNode=n=>({...getDerivedAliasesSync(`node`),...getAliasesGeneralForNode(n),...getAliasesGjsForNode(n),...getAliasesWebForNode(n)});[...rh,...rh.map(n=>`node:${n}`)],[...ih];var ph=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.splitWhen=n.flatten=void 0;function flatten(n){return n.reduce((n,a)=>[].concat(n,a),[])}n.flatten=flatten;function splitWhen(n,a){let S=[[]],C=0;for(let N of n)a(N)?(C++,S[C]=[]):S[C].push(N);return S}n.splitWhen=splitWhen})),mh=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isEnoentCodeError=void 0;function isEnoentCodeError(n){return n.code===`ENOENT`}n.isEnoentCodeError=isEnoentCodeError})),hh=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createDirentFromStats=void 0;var DirentFromStats=class{constructor(n,a){this.name=n,this.isBlockDevice=a.isBlockDevice.bind(a),this.isCharacterDevice=a.isCharacterDevice.bind(a),this.isDirectory=a.isDirectory.bind(a),this.isFIFO=a.isFIFO.bind(a),this.isFile=a.isFile.bind(a),this.isSocket=a.isSocket.bind(a),this.isSymbolicLink=a.isSymbolicLink.bind(a)}};function createDirentFromStats(n,a){return new DirentFromStats(n,a)}n.createDirentFromStats=createDirentFromStats})),gh=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.convertPosixPathToPattern=n.convertWindowsPathToPattern=n.convertPathToPattern=n.escapePosixPath=n.escapeWindowsPath=n.escape=n.removeLeadingDotSegment=n.makeAbsolute=n.unixify=void 0;let a=(Tf(),__toCommonJS(vf)),S=(Ho(),__toCommonJS(Do)),C=a.platform()===`win32`,N=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,F=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,I=/^\\\\([.?])/,H=/\\(?![!()+@[\]{}])/g;function unixify(n){return n.replace(/\\/g,`/`)}n.unixify=unixify;function makeAbsolute(n,a){return S.resolve(n,a)}n.makeAbsolute=makeAbsolute;function removeLeadingDotSegment(n){if(n.charAt(0)===`.`){let a=n.charAt(1);if(a===`/`||a===`\\`)return n.slice(2)}return n}n.removeLeadingDotSegment=removeLeadingDotSegment,n.escape=C?escapeWindowsPath:escapePosixPath;function escapeWindowsPath(n){return n.replace(F,`\\$2`)}n.escapeWindowsPath=escapeWindowsPath;function escapePosixPath(n){return n.replace(N,`\\$2`)}n.escapePosixPath=escapePosixPath,n.convertPathToPattern=C?convertWindowsPathToPattern:convertPosixPathToPattern;function convertWindowsPathToPattern(n){return escapeWindowsPath(n).replace(I,`//$1`).replace(H,`/`)}n.convertWindowsPathToPattern=convertWindowsPathToPattern;function convertPosixPathToPattern(n){return escapePosixPath(n)}n.convertPosixPathToPattern=convertPosixPathToPattern})),vh=__commonJSMin$1(((n,a)=>{
|
|
631
|
+
`+` `.repeat(a));var em;(function(n){n.DEFAULT={allowTrailingComma:!1}})(em||={});function Pe(n,a=[],S=em.DEFAULT){let C=null,N=[],F=[];function i(n){Array.isArray(N)?N.push(n):C!==null&&(N[C]=n)}return r(i,`onValue`),We(n,{onObjectBegin:r(()=>{let n={};i(n),F.push(N),N=n,C=null},`onObjectBegin`),onObjectProperty:r(n=>{C=n},`onObjectProperty`),onObjectEnd:r(()=>{N=F.pop()},`onObjectEnd`),onArrayBegin:r(()=>{let n=[];i(n),F.push(N),N=n,C=null},`onArrayBegin`),onArrayEnd:r(()=>{N=F.pop()},`onArrayEnd`),onLiteralValue:i,onError:r((n,S,C)=>{a.push({error:n,offset:S,length:C})},`onError`)},S),N[0]}r(Pe,`parse$1`);function We(n,a,S=em.DEFAULT){let C=Ne(n,!1),N=[],F=0;function i(n){return n?()=>F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(i,`toNoArgVisit`);function f(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(f,`toOneArgVisit`);function u(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice()):()=>!0}r(u,`toOneArgVisitWithPath`);function g(n){return n?()=>{F>0?F++:n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice())===!1&&(F=1)}:()=>!0}r(g,`toBeginVisit`);function w(n){return n?()=>{F>0&&F--,F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter())}:()=>!0}r(w,`toEndVisit`);let I=g(a.onObjectBegin),H=u(a.onObjectProperty),W=w(a.onObjectEnd),K=g(a.onArrayBegin),q=w(a.onArrayEnd),Y=u(a.onLiteralValue),X=f(a.onSeparator),te=i(a.onComment),ne=f(a.onError),re=S&&S.disallowComments,ie=S&&S.allowTrailingComma;function T(){for(;;){let n=C.scan();switch(C.getTokenError()){case 4:k(14);break;case 5:k(15);break;case 3:k(13);break;case 1:re||k(11);break;case 2:k(12);break;case 6:k(16);break}switch(n){case 12:case 13:re?k(10):te();break;case 16:k(1);break;case 15:case 14:break;default:return n}}}r(T,`scanNext`);function k(n,a=[],S=[]){if(ne(n),a.length+S.length>0){let n=C.getToken();for(;n!==17;){if(a.indexOf(n)!==-1){T();break}else if(S.indexOf(n)!==-1)break;n=T()}}}r(k,`handleError`);function P(n){let a=C.getTokenValue();return n?Y(a):(H(a),N.push(a)),T(),!0}r(P,`parseString`);function M(){switch(C.getToken()){case 11:let n=C.getTokenValue(),a=Number(n);isNaN(a)&&(k(2),a=0),Y(a);break;case 7:Y(null);break;case 8:Y(!0);break;case 9:Y(!1);break;default:return!1}return T(),!0}r(M,`parseLiteral`);function V(){return C.getToken()===10?(P(!1),C.getToken()===6?(X(`:`),T(),U()||k(4,[],[2,5])):k(5,[],[2,5]),N.pop(),!0):(k(3,[],[2,5]),!1)}r(V,`parseProperty`);function z(){I(),T();let n=!1;for(;C.getToken()!==2&&C.getToken()!==17;){if(C.getToken()===5){if(n||k(4,[],[]),X(`,`),T(),C.getToken()===2&&ie)break}else n&&k(6,[],[]);V()||k(4,[],[2,5]),n=!0}return W(),C.getToken()===2?T():k(7,[2],[]),!0}r(z,`parseObject`);function G(){K(),T();let n=!0,a=!1;for(;C.getToken()!==4&&C.getToken()!==17;){if(C.getToken()===5){if(a||k(4,[],[]),X(`,`),T(),C.getToken()===4&&ie)break}else a&&k(6,[],[]);n?(N.push(0),n=!1):N[N.length-1]++,U()||k(4,[],[4,5]),a=!0}return q(),n||N.pop(),C.getToken()===4?T():k(8,[4],[]),!0}r(G,`parseArray`);function U(){switch(C.getToken()){case 3:return G();case 1:return z();case 10:return P(!0);default:return M()}}return r(U,`parseValue`),T(),C.getToken()===17?S.allowEmptyContent?!0:(k(4,[],[]),!1):U()?(C.getToken()!==17&&k(9,[],[]),!0):(k(4,[],[]),!1)}r(We,`visit`);var tm;(function(n){n[n.None=0]=`None`,n[n.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=4]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=6]=`InvalidCharacter`})(tm||={});var nm;(function(n){n[n.OpenBraceToken=1]=`OpenBraceToken`,n[n.CloseBraceToken=2]=`CloseBraceToken`,n[n.OpenBracketToken=3]=`OpenBracketToken`,n[n.CloseBracketToken=4]=`CloseBracketToken`,n[n.CommaToken=5]=`CommaToken`,n[n.ColonToken=6]=`ColonToken`,n[n.NullKeyword=7]=`NullKeyword`,n[n.TrueKeyword=8]=`TrueKeyword`,n[n.FalseKeyword=9]=`FalseKeyword`,n[n.StringLiteral=10]=`StringLiteral`,n[n.NumericLiteral=11]=`NumericLiteral`,n[n.LineCommentTrivia=12]=`LineCommentTrivia`,n[n.BlockCommentTrivia=13]=`BlockCommentTrivia`,n[n.LineBreakTrivia=14]=`LineBreakTrivia`,n[n.Trivia=15]=`Trivia`,n[n.Unknown=16]=`Unknown`,n[n.EOF=17]=`EOF`})(nm||={});const im=Pe;var am;(function(n){n[n.InvalidSymbol=1]=`InvalidSymbol`,n[n.InvalidNumberFormat=2]=`InvalidNumberFormat`,n[n.PropertyNameExpected=3]=`PropertyNameExpected`,n[n.ValueExpected=4]=`ValueExpected`,n[n.ColonExpected=5]=`ColonExpected`,n[n.CommaExpected=6]=`CommaExpected`,n[n.CloseBraceExpected=7]=`CloseBraceExpected`,n[n.CloseBracketExpected=8]=`CloseBracketExpected`,n[n.EndOfFileExpected=9]=`EndOfFileExpected`,n[n.InvalidCommentToken=10]=`InvalidCommentToken`,n[n.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=14]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=16]=`InvalidCharacter`})(am||={});const om=r((n,a)=>im(Jp(a,n,`utf8`)),`readJsonc`),sm=Symbol(`implicitBaseUrl`),cm="${configDir}",lm=r(()=>{let{findPnpApi:n}=Rs;return n&&n(process.cwd())},`getPnpApi`),um=r((n,a,S,C)=>{let N=`resolveFromPackageJsonPath:${n}:${a}:${S}`;if(C!=null&&C.has(N))return C.get(N);let F=om(n,C);if(!F)return;let I=a||`tsconfig.json`;if(!S&&F.exports)try{let[n]=v(F.exports,a,[`require`,`types`]);I=n}catch{return!1}else !a&&F.tsconfig&&(I=F.tsconfig);return I=Vo.join(n,`..`,I),C?.set(N,I),I},`resolveFromPackageJsonPath`),dm=`package.json`,fm=`tsconfig.json`,pm=r((n,a,S)=>{let C=n;if(n===`..`&&(C=Vo.join(C,fm)),n[0]===`.`&&(C=Vo.resolve(a,C)),Vo.isAbsolute(C)){if(qp(S,C)){if(Yp(S,C).isFile())return C}else if(!C.endsWith(`.json`)){let n=`${C}.json`;if(qp(S,n))return n}return}let[N,...F]=n.split(`/`),I=N[0]===`@`?`${N}/${F.shift()}`:N,H=F.join(`/`),W=lm();if(W){let{resolveRequest:C}=W;try{if(I===n){let n=C(Vo.join(I,dm),a);if(n){let a=um(n,H,!1,S);if(a&&qp(S,a))return a}}else{let S;try{S=C(n,a,{extensions:[`.json`]})}catch{S=C(Vo.join(n,fm),a)}if(S)return S}}catch{}}let K=Xp(Vo.resolve(a),Vo.join(`node_modules`,I),S);if(!K||!Yp(S,K).isDirectory())return;let q=Vo.join(K,dm);if(qp(S,q)){let n=um(q,H,!1,S);if(n===!1)return;if(n&&qp(S,n)&&Yp(S,n).isFile())return n}let Y=Vo.join(K,H),X=Y.endsWith(`.json`);if(!X){let n=`${Y}.json`;if(qp(S,n))return n}if(qp(S,Y)){if(Yp(S,Y).isDirectory()){let n=Vo.join(Y,dm);if(qp(S,n)){let a=um(n,``,!0,S);if(a&&qp(S,a))return a}let a=Vo.join(Y,fm);if(qp(S,a))return a}else if(X)return Y}},`resolveExtendsPath`),mm=r((n,a)=>Qp(Vo.relative(n,a)),`pathRelative`),hm=[`files`,`include`,`exclude`],gm=r((n,a,S)=>{let C=Vo.join(a,S);return h$1(Vo.relative(n,C))||`./`},`resolveAndRelativize`),_m=r((n,a,S)=>{let C=Vo.relative(n,a);return C?h$1(`${C}/${S.startsWith(`./`)?S.slice(2):S}`):S},`prefixPattern`),vm=r((n,a,S,C)=>{let N=pm(n,a,C);if(!N)throw Error(`File '${n}' not found.`);if(S.has(N))throw Error(`Circularity detected while resolving configuration: ${N}`);S.add(N);let F=Vo.dirname(N),I=bm(N,C,S);delete I.references;let{compilerOptions:H}=I;if(H){let{baseUrl:n}=H;n&&!n.startsWith(cm)&&(H.baseUrl=gm(a,F,n));let{outDir:S}=H;S&&!S.startsWith(cm)&&(H.outDir=gm(a,F,S));let{declarationDir:C}=H;C&&!C.startsWith(cm)&&(H.declarationDir=gm(a,F,C));let{rootDir:N}=H;N&&!N.startsWith(cm)&&(H.rootDir=gm(a,F,N));let{rootDirs:I}=H;I&&(H.rootDirs=I.map(n=>n.startsWith(cm)?n:gm(a,F,n)));let{typeRoots:W}=H;W&&(H.typeRoots=W.map(n=>n.startsWith(cm)?n:gm(a,F,n)))}for(let n of hm){let S=I[n];S&&(I[n]=S.map(n=>n.startsWith(cm)?n:_m(a,F,n)))}return I},`resolveExtends`),ym=[`outDir`,`declarationDir`],bm=r((n,a,S=new Set)=>{let C;try{C=om(n,a)||{}}catch{throw Error(`Cannot resolve tsconfig at path: ${n}`)}if(typeof C!=`object`)throw SyntaxError(`Failed to parse tsconfig at: ${n}`);let N=Vo.dirname(n);if(C.compilerOptions){let{compilerOptions:n}=C;n.paths&&!n.baseUrl&&(n[sm]=N)}if(C.extends){let n=Array.isArray(C.extends)?C.extends:[C.extends];delete C.extends;for(let F of n.reverse()){let n=vm(F,N,new Set(S),a),I={...n,...C,compilerOptions:{...n.compilerOptions,...C.compilerOptions}};n.watchOptions&&(I.watchOptions={...n.watchOptions,...C.watchOptions}),C=I}}if(C.compilerOptions){let{compilerOptions:n}=C;for(let a of[`baseUrl`,`rootDir`]){let S=n[a];S&&!S.startsWith(cm)&&(n[a]=mm(N,Vo.resolve(N,S)))}for(let a of ym){let S=n[a];S&&(Array.isArray(C.exclude)||(C.exclude=ym.map(a=>n[a]).filter(Boolean)),S.startsWith(cm)||(S=Qp(S)),n[a]=S)}}else C.compilerOptions={};if(C.include&&=C.include.map(h$1),C.files&&=C.files.map(n=>n.startsWith(cm)?n:Qp(n)),C.watchOptions){let{watchOptions:n}=C;n.excludeDirectories&&=n.excludeDirectories.map(n=>h$1(Vo.resolve(N,n))),n.excludeFiles&&=n.excludeFiles.map(n=>h$1(Vo.resolve(N,n))),n.watchFile&&=n.watchFile.toLowerCase(),n.watchDirectory&&=n.watchDirectory.toLowerCase(),n.fallbackPolling&&=n.fallbackPolling.toLowerCase()}return C},`_parseTsconfig`),xm=r((n,a)=>{if(n.startsWith(cm))return h$1(Vo.join(a,n.slice(12)))},`interpolateConfigDir`),Sm=[`outDir`,`declarationDir`,`outFile`,`rootDir`,`baseUrl`,`tsBuildInfoFile`],Cm=r(n=>{if(n.strict)for(let a of[`noImplicitAny`,`noImplicitThis`,`strictNullChecks`,`strictFunctionTypes`,`strictBindCallApply`,`strictPropertyInitialization`,`strictBuiltinIteratorReturn`,`alwaysStrict`,`useUnknownInCatchVariables`])n[a]===void 0&&(n[a]=!0);if(n.composite&&(n.declaration??=!0,n.incremental??=!0),n.target){let a=n.target.toLowerCase();a===`es2015`&&(a=`es6`),n.target=a,a===`esnext`&&(n.module??=`es6`,n.useDefineForClassFields??=!0),(a===`es6`||a===`es2016`||a===`es2017`||a===`es2018`||a===`es2019`||a===`es2020`||a===`es2021`||a===`es2022`||a===`es2023`||a===`es2024`)&&(n.module??=`es6`),(a===`es2022`||a===`es2023`||a===`es2024`)&&(n.useDefineForClassFields??=!0)}if(n.module){let a=n.module.toLowerCase();if(a===`es2015`&&(a=`es6`),n.module=a,(a===`es6`||a===`es2020`||a===`es2022`||a===`esnext`||a===`none`||a===`system`||a===`umd`||a===`amd`)&&(n.moduleResolution??=`classic`),a===`system`&&(n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`||a===`preserve`)&&(n.esModuleInterop??=!0,n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`)&&(n.moduleDetection??=`force`),a===`node16`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node18`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node20`&&(n.target??=`es2023`,n.moduleResolution??=`node16`,n.resolveJsonModule??=!0),a===`nodenext`&&(n.target??=`esnext`,n.moduleResolution??=`nodenext`,n.resolveJsonModule??=!0),a===`node16`||a===`node18`||a===`node20`||a===`nodenext`){let a=n.target;(a===`es3`||a===`es2022`||a===`es2023`||a===`es2024`||a===`esnext`)&&(n.useDefineForClassFields??=!0)}a===`preserve`&&(n.moduleResolution??=`bundler`)}if(n.moduleResolution){let a=n.moduleResolution.toLowerCase();a===`node`&&(a=`node10`),n.moduleResolution=a,(a===`node16`||a===`nodenext`||a===`bundler`)&&(n.resolvePackageJsonExports??=!0,n.resolvePackageJsonImports??=!0),a===`bundler`&&(n.allowSyntheticDefaultImports??=!0,n.resolveJsonModule??=!0)}n.jsx&&=n.jsx.toLowerCase(),n.moduleDetection&&=n.moduleDetection.toLowerCase(),n.importsNotUsedAsValues&&=n.importsNotUsedAsValues.toLowerCase(),n.newLine&&=n.newLine.toLowerCase(),n.esModuleInterop&&(n.allowSyntheticDefaultImports??=!0),n.verbatimModuleSyntax&&(n.isolatedModules??=!0,n.preserveConstEnums??=!0),n.isolatedModules&&(n.preserveConstEnums??=!0),n.rewriteRelativeImportExtensions&&(n.allowImportingTsExtensions??=!0),n.lib&&=n.lib.map(n=>n.toLowerCase()),n.checkJs&&(n.allowJs??=!0)},`normalizeCompilerOptions`),wm=r((n,a=new Map)=>{let S=Vo.resolve(n),C=bm(S,a),N=Vo.dirname(S),{compilerOptions:F}=C;if(F){for(let n of Sm){let a=F[n];if(a){let S=xm(a,N);F[n]=S?mm(N,S):a}}for(let n of[`rootDirs`,`typeRoots`]){let a=F[n];a&&(F[n]=a.map(n=>{let a=xm(n,N);return a?mm(N,a):Qp(n)}))}let{paths:n}=F;if(n)for(let a of Object.keys(n))n[a]=n[a].map(n=>xm(n,N)??n);Cm(F)}for(let n of hm){let a=C[n];a&&(C[n]=a.map(n=>xm(n,N)??n))}return C},`parseTsconfig`);var Tm=Object.defineProperty,Em=r((n,a)=>Tm(n,`name`,{value:a,configurable:!0}),`s`);const Dm=Em(n=>{let a=``;for(let S=0;S<n.length;S+=1){let C=n[S],N=C.toUpperCase();a+=C===N?C.toLowerCase():N}return a},`invertCase`),Om=new Map,km=Em((n,a)=>{let S=Vo.join(n,`.is-fs-case-sensitive-test-${process.pid}`);try{return a.writeFileSync(S,``),!a.existsSync(Dm(S))}finally{try{a.unlinkSync(S)}catch{}}},`checkDirectoryCaseWithWrite`),Am=Em((n,a,S)=>{try{return km(n,S)}catch(n){if(a===void 0)return km(wf.tmpdir(),S);throw n}},`checkDirectoryCaseWithFallback`),jm=Em((n,a=ks,S=!0)=>{let C=n??process.cwd();if(S&&Om.has(C))return Om.get(C);let N,F=Dm(C);return N=F!==C&&a.existsSync(C)?!a.existsSync(F):Am(C,n,a),S&&Om.set(C,N),N},`isFsCaseSensitive`),{join:Mm}=Vo.posix,Nm={ts:[`.ts`,`.tsx`,`.d.ts`],cts:[`.cts`,`.d.cts`],mts:[`.mts`,`.d.mts`]},Pm=r(n=>{let a=[...Nm.ts],S=[...Nm.cts],C=[...Nm.mts];return n!=null&&n.allowJs&&(a.push(`.js`,`.jsx`),S.push(`.cjs`),C.push(`.mjs`)),[...a,...S,...C]},`getSupportedExtensions`),Fm=r(n=>{let a=[];if(!n)return a;let{outDir:S,declarationDir:C}=n;return S&&a.push(S),C&&a.push(C),a},`getDefaultExcludeSpec`),Im=r(n=>n.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),`escapeForRegexp`),Lm=`(?!(${[`node_modules`,`bower_components`,`jspm_packages`].join(`|`)})(/|$))`,Rm=/(?:^|\/)[^.*?]+$/,zm=`**/*`,Bm=`[^/]`,Vm=`[^./]`,Hm=process.platform===`win32`,Um=r(({config:n,path:a},S=jm())=>{if(`extends`in n)throw Error(`tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.`);if(!Vo.isAbsolute(a))throw Error(`The tsconfig path must be absolute`);Hm&&(a=h$1(a));let C=Vo.dirname(a),{files:N,include:F,exclude:I,compilerOptions:H}=n,W=r(n=>Vo.isAbsolute(n)?n:Mm(C,n),`resolvePattern`),K=N?.map(W),q=Pm(H),Y=S?``:`i`,X=(I||Fm(H)).map(n=>{let a=Im(W(n)).replaceAll(String.raw`\*\*/`,`(.+/)?`).replaceAll(String.raw`\*`,`${Bm}*`).replaceAll(String.raw`\?`,Bm);return RegExp(`^${a}($|/)`,Y)}),te=N||F?F:[zm],ne=te?te.map(n=>{let a=W(n);Rm.test(a)&&(a=Mm(a,zm));let S=Im(a).replaceAll(String.raw`/\*\*`,`(/${Lm}${Vm}${Bm}*)*?`).replaceAll(/(\/)?\\\*/g,(n,a)=>{let S=`(${Vm}|(\\.(?!min\\.js$))?)*`;return a?`/${Lm}${Vm}${S}`:S}).replaceAll(/(\/)?\\\?/g,(n,a)=>{let S=Bm;return a?`/${Lm}${S}`:S});return RegExp(`^${S}$`,Y)}):void 0;return a=>{if(!Vo.isAbsolute(a))throw Error(`filePath must be absolute`);if(Hm&&(a=h$1(a)),K!=null&&K.includes(a)||!(!q.some(n=>a.endsWith(n))||X.some(n=>n.test(a)))&&ne&&ne.some(n=>n.test(a)))return n}},`createFilesMatcher`),Wm=r((n,a,S)=>{let C=Vo.resolve(n),N=h$1(n);for(;;){let n=Xp(N,a,S);if(!n)return;let F=Vo.resolve(n),I=wm(F,S),H={path:h$1(F),config:I};if(Um(H)(C))return H;let W=Vo.dirname(n),K=Vo.dirname(W);if(K===W)return;N=K}},`findConfigApplicable`),Gm=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>C?Wm(n,a,S)?.path:Xp(h$1(n),a,S),`findTsconfig`),Km=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>{if(!C){let C=Gm(n,a,S);return C?{path:C,config:wm(C,S)}:null}return Wm(n,a,S)??null},`getTsconfig`),qm=/\*/g,Jm=r((n,a)=>{let S=n.match(qm);if(S&&S.length>1)throw Error(a)},`assertStarCount`),Ym=r(n=>{if(n.includes(`*`)){let[a,S]=n.split(`*`);return{prefix:a,suffix:S}}return n},`parsePattern`),Xm=r(({prefix:n,suffix:a},S)=>S.startsWith(n)&&S.endsWith(a),`isPatternMatch`),Zm=r((n,a,S)=>Object.entries(n).map(([n,C])=>(Jm(n,`Pattern '${n}' can have at most one '*' character.`),{pattern:Ym(n),substitutions:C.map(C=>{if(Jm(C,`Substitution '${C}' in pattern '${n}' can have at most one '*' character.`),!a&&!Zp.test(C)&&!Vo.isAbsolute(C))throw Error(`Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?`);return Vo.resolve(S,C)})})),`parsePaths`);r(n=>{let{compilerOptions:a}=n.config;if(!a)return null;let{baseUrl:S,paths:C}=a;if(!S&&!C)return null;let N=sm in a&&a[sm],F=Vo.resolve(Vo.dirname(n.path),S||N||`.`),I=C?Zm(C,S,F):[];return n=>{if(Zp.test(n))return[];let a=[];for(let S of I){if(S.pattern===n)return S.substitutions.map(h$1);typeof S.pattern!=`string`&&a.push(S)}let C,N=-1;for(let S of a)Xm(S.pattern,n)&&S.pattern.prefix.length>N&&(N=S.pattern.prefix.length,C=S);if(!C)return S?[h$1(Vo.join(F,n))]:[];let H=n.slice(C.pattern.prefix.length,n.length-C.pattern.suffix.length);return C.substitutions.map(n=>h$1(n.replace(`*`,H)))}},`createPathsMatcher`),je();function defaultSearchPlaces(n){return[`package.json`,`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.mjs`,`.${n}rc.cjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.mjs`,`${n}.config.cjs`]}function merge(n,...a){for(let S of a)if(S)for(let a of Object.keys(S)){let C=n[a],N=S[a];N!==void 0&&(isPlainObject$1(C)&&isPlainObject$1(N)?merge(C,N):n[a]=N)}return n}function isPlainObject$1(n){return typeof n==`object`&&!!n&&!Array.isArray(n)&&Object.getPrototypeOf(n)===Object.prototype}__name$1(isPlainObject$1,`isPlainObject`);function readDottedPath(n,a){if(!a.includes(`.`))return n[a];let S=n;for(let n of a.split(`.`)){if(typeof S!=`object`||!S)return;S=S[n]}return S}var Config=class{loadOptions={};constructor(n={}){Object.keys(n).length&&(this.loadOptions=n)}async load(n){let a=await(0,$f.cosmiconfig)(Iu,{...this.loadOptions,searchPlaces:(this.loadOptions.searchPlaces??defaultSearchPlaces(`gjsify`)).filter(n=>n!==`package.json`)}).search(n),S={};try{let a=await this.readPackageJSON(n);isPlainObject$1(a?.gjsify)&&merge(S,a.gjsify)}catch{}return a?.config&&isPlainObject$1(a.config)&&merge(S,a.config),S.bundler||={},S.library||={},S.typescript||={},{config:S,filepath:a?.filepath??``,isEmpty:!a&&Object.keys(S).length===3}}async readPackageJSON(n){return n=await resolvePackageJSON(n),await readPackageJSON(n)}async readTSConfig(n){return Km(n)?.config||{}}async forBuild(n){let a=await this.load(process.cwd()),S={...a.config},C=a.filepath||process.cwd(),N=await this.readPackageJSON(C),F=await this.readTSConfig(C);if(F.reflection||=n.reflection,S.verbose=n.verbose||!1,S.exclude=n.exclude||[],n.consoleShim!==void 0&&(S.consoleShim=n.consoleShim),n.globals!==void 0&&(S.globals=n.globals),n.shebang!==void 0&&(S.shebang=n.shebang),n.excludeGlobals){let a=(Array.isArray(n.excludeGlobals)?n.excludeGlobals.join(`,`):String(n.excludeGlobals)).split(`,`).map(n=>n.trim()).filter(Boolean);a.length&&(S.excludeGlobals=[...S.excludeGlobals??[],...a])}merge(S.library??={},N,S.library),merge(S.typescript??={},F,S.typescript);let parseKvPairs=(n,a)=>{let S={};for(let C of n){let n=C.indexOf(`=`);if(n===-1)throw Error(`Invalid --${a} value '${C}'. Expected KEY=VALUE.`);let N=C.slice(0,n).trim(),F=C.slice(n+1);if(!N)throw Error(`Invalid --${a} value '${C}'. Empty key.`);S[N]=F}return S},I=parseKvPairs(n.define??[],`define`),H=parseKvPairs(n.alias??[],`alias`);Object.keys(H).length&&(S.aliases={...S.aliases,...H});let W={};if(S.defineFromPackageJson)for(let[n,a]of Object.entries(S.defineFromPackageJson)){if(!a||typeof a.field!=`string`||!a.field)throw Error(`gjsify config: defineFromPackageJson["${n}"] is missing a "field" string`);let S=readDottedPath(N,a.field);W[n]=S===void 0?`undefined`:JSON.stringify(S)}let K={};if(S.defineFromEnv)for(let[n,a]of Object.entries(S.defineFromEnv)){if(!a||typeof a.env!=`string`||!a.env)throw Error(`gjsify config: defineFromEnv["${n}"] is missing an "env" string`);let S=process.env[a.env],C=S===void 0?a.default:S;K[n]=C===void 0?`undefined`:JSON.stringify(C)}let q=S.bundler??={},Y=q.output??={},X=q.transform??={};return n.entryPoints?.length&&(q.input=n.entryPoints),q.input||=[`src/index.ts`],n.outfile!==void 0&&(Y.file=n.outfile),n.outdir!==void 0&&(Y.dir=n.outdir),n.format!==void 0&&(Y.format=n.format),n.minify!==void 0&&(Y.minify=n.minify),Y.minify===void 0&&(Y.minify=!0),Y.minify===!0&&(Y.keepNames=!0),n.logLevel&&(q.logLevel={silent:`silent`,error:`warn`,warning:`warn`,warn:`warn`,info:`info`,debug:`debug`,verbose:`debug`}[n.logLevel]??`warn`),n.external?.length&&(q.external=[...Array.isArray(q.external)?q.external:[],...n.external]),(Object.keys(I).length||Object.keys(W).length||Object.keys(K).length)&&(X.define={...X.define,...W,...K,...I}),S.verbose&&Ae.debug(`configData`,S),S}};As(),Ho();function discoverWorkspaces(n,a={}){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`@gjsify/workspace: no package.json at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=a.patterns??extractWorkspacePatterns(C),F=N.filter(n=>!n.startsWith(`!`)),I=N.filter(n=>n.startsWith(`!`)).map(n=>globToRegex$1(n.slice(1))),H=[];a.includeRoot&&C.name&&H.push({location:n,relativeLocation:`.`,name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0});for(let a of F)for(let S of expandPattern(n,a)){let a=Mo(n,S).split(zo).join(`/`);if(I.some(n=>n.test(a)))continue;let C=jo(S,`package.json`);if(!existsSync(C))continue;let N;try{N=JSON.parse(readFileSync(C,`utf-8`))}catch{continue}N.name&&H.push({location:S,relativeLocation:a,name:N.name,version:N.version??`0.0.0`,manifest:N,private:N.private===!0})}return H.sort((n,a)=>n.relativeLocation.localeCompare(a.relativeLocation)),H}function buildDependencyGraph(n,a={}){let S=a.includeDev??!1,C=a.includePeer??!1,N=a.includeOptional??!0,F=indexByName(n),I=new Map;for(let a of n){let n=new Set,H=a.manifest;for(let a of[H.dependencies,S?H.devDependencies:void 0,C?H.peerDependencies:void 0,N?H.optionalDependencies:void 0])if(a)for(let[S,C]of Object.entries(a))typeof C==`string`&&C.startsWith(`workspace:`)&&F.has(S)&&n.add(S);I.set(a.name,n)}return{edges:I,byName:F}}function topologicalSort(n){let a=new Map;for(let S of n.edges.keys())a.set(S,0);for(let S of n.edges.values())for(let n of S)a.has(n)&&a.set(n,(a.get(n)??0)+1);let S=new Map,C=new Map;for(let a of n.edges.keys())S.set(a,new Set),C.set(a,0);for(let[a,N]of n.edges)for(let n of N)S.has(n)&&(S.get(n).add(a),C.set(a,(C.get(a)??0)+1));let N=[];for(let[n,a]of C)a===0&&N.push(n);N.sort();let F=[];for(;N.length>0;){let a=N.shift(),I=n.byName.get(a);I&&F.push(I);let H=S.get(a);if(H){let n=[];for(let a of H){let S=(C.get(a)??1)-1;C.set(a,S),S===0&&n.push(a)}n.sort(),N.push(...n)}}if(F.length!==C.size){let n=[...C.entries()].filter(([,n])=>n>0).map(([n])=>n);throw Error(`@gjsify/workspace: dependency cycle detected involving ${n.join(`, `)}`)}return F}function buildReverseDependencyGraph(n,a={}){let S=buildDependencyGraph(n,a),C=new Map;for(let n of S.edges.keys())C.set(n,new Set);for(let[n,a]of S.edges)for(let S of a){let a=C.get(S);a&&a.add(n)}return{edges:C,byName:S.byName}}function affectedClosure(n,a){let S=new Set,C=[];for(let N of a)n.byName.has(N)&&(S.has(N)||(S.add(N),C.push(N)));for(;C.length>0;){let a=C.shift(),N=n.edges.get(a);if(N)for(let n of N)S.has(n)||(S.add(n),C.push(n))}return S}function workspacesForChangedFiles(n,a,S){let C=new Set,N=[],F={children:new Map};for(let a of n){if(a.relativeLocation===`.`||a.relativeLocation===``)continue;let n=a.relativeLocation.split(`/`).filter(Boolean),S=F;for(let a of n){let n=S.children.get(a);n||(n={children:new Map},S.children.set(a,n)),S=n}S.ws=a.name}for(let n of S){if(!n)continue;let a=n.replace(/\\/g,`/`).split(`/`).filter(Boolean),S=F,I;for(let n of a){if(S=S.children.get(n),!S)break;S.ws&&(I=S.ws)}I?C.add(I):N.push(n)}return{matched:C,unmatched:N}}function filterWorkspaces(n,a){let S=a.include?.map(globToRegex$1),C=a.exclude?.map(globToRegex$1);return n.filter(n=>!(a.noPrivate&&n.private||S&&S.length>0&&!S.some(a=>a.test(n.name))||C&&C.some(a=>a.test(n.name))))}function extractWorkspacePatterns(n){let a=n.workspaces;return a?Array.isArray(a)?a:a.packages??[]:[]}function expandPattern(n,a){let S=a.split(`/`).filter(Boolean),C=[Oo(n)];for(let n of S){let a=[];for(let S of C)if(n===`*`){let n=[];try{n=readdirSync(S)}catch{continue}for(let C of n){if(C.startsWith(`.`))continue;let n=jo(S,C);try{statSync(n).isDirectory()&&a.push(n)}catch{}}}else if(n.includes(`*`)){let C=globToRegex$1(n),N=[];try{N=readdirSync(S)}catch{continue}for(let n of N){if(n.startsWith(`.`)||!C.test(n))continue;let N=jo(S,n);try{statSync(N).isDirectory()&&a.push(N)}catch{}}}else{let C=jo(S,n);if(existsSync(C))try{statSync(C).isDirectory()&&a.push(C)}catch{}}C=a}return C}function globToRegex$1(n){let a=n.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`[^/]*`);return RegExp(`^${a}$`)}__name$1(globToRegex$1,`globToRegex`);function indexByName(n){let a=new Map;for(let S of n)a.set(S.name,S);return a}As(),Ho();function readPackageJson$4(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$4,`readPackageJson`);function findWorkspaceRoot(n){let a=n;for(let S=0;S<12;S++){let S=jo(a,`package.json`);if(existsSync(S)&&readPackageJson$4(S)?.workspaces!==void 0)try{let S=discoverWorkspaces(a);if(a===n||S.some(a=>a.location===n))return a}catch{}let C=Oo(a,`..`);if(C===a)break;a=C}return null}zs(),nn(),Ho();function resolveNpmPackage(n,a={}){let S=a.cwd??process.cwd(),C=process.env.GJSIFY_NODE_PATH;if(C)for(let a of C.split(`:`).filter(Boolean)){let S=tryResolveFromDir(n,Oo(a));if(S)return S}let N=tryResolveFromDir(n,S);if(N)return N;let F=findWorkspaceRoot(S);if(F&&F!==S){let a=tryResolveFromDir(n,F);if(a)return a}if(a.bundleUrl)try{return createRequire(a.bundleUrl).resolve(n)}catch{}let I=Oo(S,`..`);for(let a=0;a<8;a++){let a=tryResolveFromDir(n,I);if(a)return a;let S=Oo(I,`..`);if(S===I)break;I=S}return null}function tryResolveFromDir(n,a){try{let S=pathToFileURL(jo(a,`__gjsify_resolve__.js`)).href;return createRequire(S).resolve(n)}catch{return null}}je(),As(),Ho(),zs(),nn();async function loadNpmRolldown(){return(await import(resolveImportTargetForGjs(`rolldown`))).rolldown}function resolveImportTargetForGjs(n){if(globalThis.imports?.gi===void 0)return n;let a=resolveNpmPackage(n,{bundleUrl:import.meta.url});return a?pathToFileURL(a).href:n}async function bundleToChunks(n){if(await shouldUseNative()){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.rolldownInput.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let N=liftTransformExtras(stripUnserializable({...n.rolldownInput,input:normalizeInputForNative(n.rolldownInput.input),format:n.format}));delete N.plugins;let F=await a.bundleWithPlugins(N,C),I=[];for(let n of F.output)n.type===`chunk`&&I.push(n.code);return I}let a=await(await loadNpmRolldown())(n.rolldownInput);try{let S=await a.generate({format:n.format,minify:!1,sourcemap:!1}),C=[];for(let n of S.output)n.type===`chunk`&&C.push(n.code);return C}finally{await a.close()}}async function runWatch(n){if(await shouldUseNative())throw Error("`gjsify build --watch` requires the npm `rolldown` engine. The native engine (`@gjsify/rolldown-native`) does not expose a watcher API. Run the watch loop under Node (`node lib/index.js build … --watch`) or set `GJSIFY_BUNDLER=npm`.");let a=await import(resolveImportTargetForGjs(`rolldown`)),S=n.output??{};return a.watch({...n,output:S})}async function runBundle(n){if(await shouldUseNative())return await runNativeBundle(n);let a=await(await loadNpmRolldown())(n);try{return await a.write(n.output??{})}finally{await a.close()}}let Qm=null;async function shouldUseNative(){let n=(globalThis.process?.env??{}).GJSIFY_BUNDLER;if(n===`npm`)return!1;if(n===`native`){if(!await tryLoadNative())throw Error(`GJSIFY_BUNDLER=native but @gjsify/rolldown-native is not loadable (no prebuild for this architecture, or not running under GJS).`);return!0}return globalThis.imports?.gi===void 0?!1:await tryLoadNative()!==null}async function tryLoadNative(){return Qm||(Qm=(async()=>{let n=globalThis.imports?.gi!==void 0;if(!n)return null;try{let a=`@gjsify/rolldown-native`,S=a;n&&(S=pathToFileURL(resolveNpmPackage(a,{bundleUrl:import.meta.url})??createRequire(import.meta.url).resolve(a)).href);let C=await import(S);return C.hasNativeRolldown()?C:null}catch{return null}})(),Qm)}async function runNativeBundle(n){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let{output:N,plugins:F,...I}=n,H=liftTransformExtras(stripUnserializable({...I,...N,input:normalizeInputForNative(n.input)}));globalThis.process?.env?.GJSIFY_DEBUG_NATIVE_OPTS&&Ae.error(`[gjsify-bundler-pick] native opts JSON:`,JSON.stringify(H));let W=await a.bundleWithPlugins(H,C),K=n.output??{},q=K.dir??(K.file?Po(K.file):process.cwd());q&&await as.mkdir(q,{recursive:!0});for(let n of W.output){let a=K.file&&n.type===`chunk`&&W.output.length===1?K.file:jo(q,n.fileName);await as.mkdir(Po(a),{recursive:!0}),n.type===`chunk`?await as.writeFile(a,n.code,`utf8`):n.sourceText!==void 0&&await as.writeFile(a,n.sourceText,`utf8`)}return synthRolldownOutput(W)}function stripUnserializable(n){let a={};for(let[S,C]of Object.entries(n))typeof C!=`function`&&(S===`sourcemap`&&typeof C==`boolean`||(a[S]=C));return a}function liftTransformExtras(n){let a=n.transform;if(!a)return n;let S={},C={...a};for(let n of[`define`,`inject`])n in C&&(S[n]=C[n],delete C[n]);return S.inject!==void 0&&!Array.isArray(S.inject)&&(S.inject=mapToInjectArray(S.inject)),{...n,transform:Object.keys(C).length===0?void 0:C,...S}}function mapToInjectArray(n){let a=[];for(let[S,C]of Object.entries(n))if(typeof C==`string`)a.push({type:`default`,from:C,alias:S});else{let[n,N]=C;a.push({type:`named`,from:n,imported:N,alias:S})}return a}function normalizeInputForNative(n){return n===void 0?[]:typeof n==`string`?[{import:n}]:Array.isArray(n)?n.map(n=>typeof n==`string`?{import:n}:n):Object.entries(n).map(([n,a])=>({name:n,import:a}))}function isPluginObject(n){return typeof n==`object`&&!!n&&!Array.isArray(n)}function pickHook(n){if(typeof n==`function`)return{fn:n};if(typeof n==`object`&&n&&`handler`in n){let a=n,S=filterToRegexSource(a.filter?.id),C={fn:a.handler};return S!==void 0&&(C.idFilter=S),C}}function filterToRegexSource(n){if(n!==void 0){if(Array.isArray(n)){let a=n.map(oneToSource).filter(n=>n!==void 0);return a.length===0?void 0:a.length===1?a[0]:`(?:${a.join(`|`)})`}return oneToSource(n)}}function oneToSource(n){if(n instanceof RegExp)return n.source;if(typeof n==`string`)return n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function toNativePlugin(n){let a={name:typeof n.name==`string`?n.name:`unnamed-plugin`},S={},C=pickHook(n.load);C&&(a.load=C.fn,C.idFilter&&(S.load=C.idFilter));let N=pickHook(n.transform);N&&(a.transform=N.fn,N.idFilter&&(S.transform=N.idFilter));let F=pickHook(n.resolveId);F&&(a.resolveId=F.fn,F.idFilter&&(S.resolveId=F.idFilter));let I=pickHook(n.renderChunk);I&&(a.renderChunk=I.fn);let H=pickHook(n.banner);H&&(a.banner=H.fn);let W=pickHook(n.footer);W&&(a.footer=W.fn);let K=pickHook(n.intro);K&&(a.intro=K.fn);let q=pickHook(n.outro);q&&(a.outro=q.fn);let Y=pickHook(n.buildStart);Y&&(a.buildStart=Y.fn);let X=pickHook(n.buildEnd);X&&(a.buildEnd=X.fn);let te=pickHook(n.generateBundle);te&&(a.generateBundle=te.fn);let ne=pickHook(n.writeBundle);ne&&(a.writeBundle=ne.fn);let re=pickHook(n.closeBundle);return re&&(a.closeBundle=re.fn),Object.keys(S).length>0&&(a.idFilter=S),a}function synthRolldownOutput(n){return{output:n.output.map(n=>n.type===`chunk`?{type:`chunk`,fileName:n.fileName,code:n.code,name:n.name,isEntry:n.isEntry,isDynamicEntry:n.isDynamicEntry,map:n.map??null,sourcemapFileName:n.sourcemapFilename??null,imports:n.imports,dynamicImports:n.dynamicImports,facadeModuleId:null,moduleIds:[],modules:{},exports:[],referencedFiles:[],importedBindings:{}}:{type:`asset`,fileName:n.fileName,names:n.names,originalFileNames:n.originalFileNames,source:n.sourceText??``,needsCodeReference:!1})}}je(),ss(),As(),Ho(),nn();const $m=new Set([`polyfill`,`native`,`partial`,`none`]),eh=new Set([`gjs`,`node`,`browser`,`nativescript`]);let th=null;const nh=new Set;function findScanRoots(){let n=[],a=Po(fileURLToPath(import.meta.url));for(let S=0;S<8;S++){let S=Oo(a,`packages`);if(existsSync(S))try{[`node`,`web`,`dom`,`framework`,`infra`].some(n=>existsSync(jo(S,n)))&&n.push({kind:`workspace`,dir:S})}catch{}let C=Oo(a,`node_modules`,`@gjsify`);existsSync(C)&&n.push({kind:`installed`,dir:C});let N=Po(a);if(N===a)break;a=N}try{let a=Oo(process.cwd(),`node_modules`,`@gjsify`);existsSync(a)&&n.push({kind:`installed`,dir:a})}catch{}return n}function ingestPackageDirSync(n,a){let S=jo(n,`package.json`);if(existsSync(S))try{let C=readFileSync(S,`utf8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:null,I=N?.gjsify?.runtimes;if(F&&F.startsWith(`@gjsify/`)&&!a.has(F)&&I&&typeof I==`object`){let S={};for(let n of eh){let a=I[n];typeof a==`string`&&$m.has(a)&&(S[n]=a)}let C=existsSync(jo(n,`globals.mjs`));a.set(F,{name:F,dir:n,runtimes:S,hasGlobals:C})}}catch{}}function getCacheSync(){if(th)return th;let n=findScanRoots(),a=new Map;if(n.length===0)return th=a,th;function walkWorkspace(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}if(existsSync(jo(n,`package.json`))){ingestPackageDirSync(n,a);return}for(let a of S)a.isDirectory()&&(a.name===`node_modules`||a.name===`lib`||a.name===`dist`||a.name.startsWith(`.`)||walkWorkspace(jo(n,a.name)))}function walkInstalled(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}for(let C of S)!C.isDirectory()&&!C.isSymbolicLink()||C.name.startsWith(`.`)||ingestPackageDirSync(jo(n,C.name),a)}for(let a of n)a.kind===`workspace`?walkWorkspace(a.dir):walkInstalled(a.dir);return th=a,th}function warnOnce(n,a){nh.has(n)||(nh.add(n),Ae.warn(`[@gjsify/resolve-npm] ${a}`))}function resolveSlot(n,a){let S=n.runtimes[a];if(!S)return null;switch(S){case`polyfill`:case`partial`:return null;case`native`:return n.hasGlobals?`${n.name}/globals`:(warnOnce(`${n.name}-${a}-native-missing-globals`,`${n.name} declares runtimes.${a}="native" but ships no globals.mjs — falling back to @gjsify/empty for --app ${a} builds.`),`@gjsify/empty`);case`none`:return null;default:return null}}function getDerivedAliasesSync(n){if(!eh.has(n))return{};let a=getCacheSync(),S={};for(let C of a.values()){let a=resolveSlot(C,n);a!==null&&a!==C.name&&(S[C.name]=a)}return S}const rh=`assert.assert/strict.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.dns/promises.domain.events.fs.fs/promises.http.http2.https.inspector.module.net.os.path.path/posix.path/win32.perf_hooks.process.punycode.querystring.readline.readline/promises.repl.stream.stream/web.stream/consumers.stream/promises.string_decoder.sys.test.timers.timers/promises.tls.tty.url.util.util/types.v8.vm.wasi.sqlite.worker_threads.zlib`.split(`.`),ih=[`readable-stream`,`node-fetch`],ah={jsdom:`@gjsify/empty`,"./polling-xhr.node.js":`./polling-xhr.js`,"./websocket.node.js":`./websocket.js`,"./globals.node.js":`./globals.js`},oh={assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert/strict`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,child_process:`@gjsify/child_process`,cluster:`@gjsify/cluster`,console:`@gjsify/console`,constants:`@gjsify/constants`,crypto:`@gjsify/crypto`,dgram:`@gjsify/dgram`,diagnostics_channel:`@gjsify/diagnostics_channel`,dns:`@gjsify/dns`,"dns/promises":`@gjsify/dns/promises`,domain:`@gjsify/domain`,events:`@gjsify/events`,fs:`@gjsify/fs`,"fs/promises":`@gjsify/fs/promises`,http:`@gjsify/http`,http2:`@gjsify/http2`,https:`@gjsify/https`,inspector:`@gjsify/inspector`,module:`@gjsify/module`,net:`@gjsify/net`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,perf_hooks:`@gjsify/perf_hooks`,process:`@gjsify/process`,punycode:`@gjsify/punycode`,querystring:`@gjsify/querystring`,readline:`@gjsify/readline`,"readline/promises":`@gjsify/readline/promises`,repl:`@gjsify/repl`,stream:`@gjsify/stream`,"stream/web":`@gjsify/stream/web`,"stream/consumers":`@gjsify/stream/consumers`,"stream/promises":`@gjsify/stream/promises`,string_decoder:`@gjsify/string_decoder`,sys:`@gjsify/sys`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,tls:`@gjsify/tls`,tty:`@gjsify/tty`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,v8:`@gjsify/v8`,vm:`@gjsify/vm`,wasi:`@gjsify/wasi`,sqlite:`@gjsify/sqlite`,worker_threads:`@gjsify/worker_threads`,zlib:`@gjsify/zlib`,"node-fetch":`@gjsify/fetch`,ws:`@gjsify/ws`,"isomorphic-ws":`@gjsify/websocket`},sh={assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert/strict`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,child_process:`@gjsify/empty`,cluster:`@gjsify/empty`,console:`@gjsify/console`,constants:`@gjsify/constants`,crypto:`@gjsify/crypto`,dgram:`@gjsify/empty`,diagnostics_channel:`@gjsify/diagnostics_channel`,dns:`@gjsify/empty`,"dns/promises":`@gjsify/empty`,domain:`@gjsify/domain`,events:`@gjsify/events`,fs:`@gjsify/empty`,"fs/promises":`@gjsify/empty`,http:`@gjsify/empty`,http2:`@gjsify/empty`,https:`@gjsify/empty`,inspector:`@gjsify/empty`,module:`@gjsify/empty`,net:`@gjsify/empty`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,perf_hooks:`@gjsify/perf_hooks`,process:`@gjsify/process`,punycode:`@gjsify/punycode`,querystring:`@gjsify/querystring`,readline:`@gjsify/empty`,"readline/promises":`@gjsify/empty`,repl:`@gjsify/empty`,stream:`@gjsify/stream`,"stream/web":`@gjsify/stream/web`,"stream/consumers":`@gjsify/stream/consumers`,"stream/promises":`@gjsify/stream/promises`,string_decoder:`@gjsify/string_decoder`,sys:`@gjsify/sys`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,tls:`@gjsify/empty`,tty:`@gjsify/empty`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,v8:`@gjsify/empty`,vm:`@gjsify/vm`,wasi:`@gjsify/empty`,sqlite:`@gjsify/empty`,worker_threads:`@gjsify/empty`,zlib:`@gjsify/zlib`,"node-fetch":`@gjsify/empty`,ws:`@gjsify/empty`,"isomorphic-ws":`@gjsify/empty`},ch={child_process:`@gjsify/empty`,cluster:`@gjsify/empty`,dgram:`@gjsify/empty`,dns:`@gjsify/empty`,"dns/promises":`@gjsify/empty`,inspector:`@gjsify/empty`,net:`@gjsify/empty`,tls:`@gjsify/empty`,tty:`@gjsify/empty`,http:`@gjsify/empty`,https:`@gjsify/empty`,http2:`@gjsify/empty`,readline:`@gjsify/empty`,repl:`@gjsify/empty`,v8:`@gjsify/empty`,vm:`@gjsify/empty`,worker_threads:`@gjsify/empty`,perf_hooks:`@gjsify/empty`,diagnostics_channel:`@gjsify/empty`,domain:`@gjsify/empty`,sqlite:`@gjsify/empty`,sys:`@gjsify/empty`,zlib:`@gjsify/empty`,assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,module:`@gjsify/module`,crypto:`@gjsify/crypto`,events:`@gjsify/events`,fs:`@gjsify/fs`,"fs/promises":`@gjsify/fs/promises`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,process:`@gjsify/process`,stream:`@gjsify/stream`,"stream/promises":`@gjsify/stream/promises`,"stream/web":`@gjsify/stream/web`,string_decoder:`@gjsify/string_decoder`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,querystring:`@gjsify/querystring`,console:`@gjsify/console`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,"node-fetch":`@gjsify/empty`,ws:`@gjsify/empty`,"isomorphic-ws":`@gjsify/empty`},lh={"abort-controller":`@gjsify/abort-controller`,"compression-streams":`@gjsify/compression-streams`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception`,"event-target-shim":`@gjsify/dom-events`,"message-channel":`@gjsify/message-channel`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch`,formdata:`@gjsify/formdata`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/abort-controller/register`,"compression-streams/register":`@gjsify/compression-streams/register`,"dom-events/register":`@gjsify/dom-events/register`,"dom-events/register/event-target":`@gjsify/dom-events/register/event-target`,"dom-events/register/custom-events":`@gjsify/dom-events/register/custom-events`,"dom-events/register/ui-events":`@gjsify/dom-events/register/ui-events`,"dom-exception/register":`@gjsify/dom-exception/register`,"message-channel/register":`@gjsify/message-channel/register`,"eventsource/register":`@gjsify/eventsource/register`,"websocket/register":`@gjsify/websocket/register`,"fetch/register":`@gjsify/fetch/register`,"fetch/register/fetch":`@gjsify/fetch/register/fetch`,"fetch/register/xhr":`@gjsify/fetch/register/xhr`,"webcrypto/register":`@gjsify/webcrypto/register`,"web-streams/register":`@gjsify/web-streams/register`,"web-streams/register/readable":`@gjsify/web-streams/register/readable`,"web-streams/register/writable":`@gjsify/web-streams/register/writable`,"web-streams/register/transform":`@gjsify/web-streams/register/transform`,"web-streams/register/text-streams":`@gjsify/web-streams/register/text-streams`,"web-streams/register/queuing":`@gjsify/web-streams/register/queuing`,xmlhttprequest:`@gjsify/fetch`,"xmlhttprequest/register":`@gjsify/fetch/register/xhr`,"@gjsify/xmlhttprequest":`@gjsify/fetch`,"@gjsify/xmlhttprequest/register":`@gjsify/fetch/register/xhr`,domparser:`@gjsify/domparser`,"domparser/register":`@gjsify/domparser/register`,webaudio:`@gjsify/webaudio`,"webaudio/register":`@gjsify/webaudio/register`,gamepad:`@gjsify/gamepad`,"gamepad/register":`@gjsify/gamepad/register`,webrtc:`@gjsify/webrtc`,"webrtc/register":`@gjsify/webrtc/register`,"webrtc/register/peer-connection":`@gjsify/webrtc/register/peer-connection`,"webrtc/register/data-channel":`@gjsify/webrtc/register/data-channel`,"webrtc/register/error":`@gjsify/webrtc/register/error`,"webrtc/register/media":`@gjsify/webrtc/register/media`,"webrtc/register/media-devices":`@gjsify/webrtc/register/media-devices`,webassembly:`@gjsify/webassembly`,"webassembly/register":`@gjsify/webassembly/register`,"webassembly/register/promise":`@gjsify/webassembly/register/promise`},uh={"@gjsify/node-globals":`@gjsify/empty`,"@gjsify/node-globals/register":`@gjsify/empty`,"@gjsify/node-globals/register/process":`@gjsify/empty`,"@gjsify/node-globals/register/buffer":`@gjsify/empty`,"@gjsify/node-globals/register/timers":`@gjsify/empty`,"@gjsify/node-globals/register/encoding":`@gjsify/empty`,"@gjsify/node-globals/register/url":`@gjsify/empty`,"@gjsify/node-globals/register/structured-clone":`@gjsify/empty`,"@gjsify/node-globals/register/microtask":`@gjsify/empty`,"@gjsify/web-globals":`@gjsify/empty`,"@gjsify/web-globals/register":`@gjsify/empty`,"@gjsify/web-globals/register/performance":`@gjsify/empty`,"@gjsify/web-globals/register/formdata":`@gjsify/empty`},dh={},fh={"abort-controller":`@gjsify/abort-controller/globals`,"compression-streams":`@gjsify/compression-streams/globals`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception/globals`,"message-channel":`@gjsify/message-channel/globals`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch/globals`,formdata:`@gjsify/formdata/globals`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto/globals`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket/globals`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/empty`,"compression-streams/register":`@gjsify/empty`,"dom-events/register":`@gjsify/empty`,"dom-events/register/event-target":`@gjsify/empty`,"dom-events/register/custom-events":`@gjsify/empty`,"dom-events/register/ui-events":`@gjsify/empty`,"dom-exception/register":`@gjsify/empty`,"message-channel/register":`@gjsify/empty`,"eventsource/register":`@gjsify/empty`,"websocket/register":`@gjsify/empty`,"fetch/register":`@gjsify/empty`,"fetch/register/fetch":`@gjsify/empty`,"fetch/register/xhr":`@gjsify/empty`,"webcrypto/register":`@gjsify/empty`,"web-streams/register":`@gjsify/empty`,"web-streams/register/readable":`@gjsify/empty`,"web-streams/register/writable":`@gjsify/empty`,"web-streams/register/transform":`@gjsify/empty`,"web-streams/register/text-streams":`@gjsify/empty`,"web-streams/register/queuing":`@gjsify/empty`,"@gjsify/abort-controller/register":`@gjsify/empty`,"@gjsify/compression-streams/register":`@gjsify/empty`,"@gjsify/dom-events/register":`@gjsify/empty`,"@gjsify/dom-events/register/event-target":`@gjsify/empty`,"@gjsify/dom-events/register/custom-events":`@gjsify/empty`,"@gjsify/dom-events/register/ui-events":`@gjsify/empty`,"@gjsify/dom-exception/register":`@gjsify/empty`,"@gjsify/message-channel/register":`@gjsify/empty`,"@gjsify/eventsource/register":`@gjsify/empty`,"@gjsify/websocket/register":`@gjsify/empty`,"@gjsify/fetch/register":`@gjsify/empty`,"@gjsify/fetch/register/fetch":`@gjsify/empty`,"@gjsify/fetch/register/xhr":`@gjsify/empty`,"@gjsify/webcrypto/register":`@gjsify/empty`,"@gjsify/web-streams/register":`@gjsify/empty`,"@gjsify/web-streams/register/readable":`@gjsify/empty`,"@gjsify/web-streams/register/writable":`@gjsify/empty`,"@gjsify/web-streams/register/transform":`@gjsify/empty`,"@gjsify/web-streams/register/text-streams":`@gjsify/empty`,"@gjsify/web-streams/register/queuing":`@gjsify/empty`,"@gjsify/dom-elements/register":`@gjsify/empty`,"@gjsify/dom-elements/register/document":`@gjsify/empty`,"@gjsify/dom-elements/register/canvas":`@gjsify/empty`,"@gjsify/dom-elements/register/image":`@gjsify/empty`,"@gjsify/dom-elements/register/observers":`@gjsify/empty`,"@gjsify/dom-elements/register/font-face":`@gjsify/empty`,"@gjsify/dom-elements/register/match-media":`@gjsify/empty`,"@gjsify/dom-elements/register/location":`@gjsify/empty`,"@gjsify/dom-elements/register/navigator":`@gjsify/empty`,"@gjsify/buffer/register":`@gjsify/empty`,xmlhttprequest:`@gjsify/empty`,"xmlhttprequest/register":`@gjsify/empty`,"@gjsify/xmlhttprequest":`@gjsify/empty`,"@gjsify/xmlhttprequest/register":`@gjsify/empty`,domparser:`@gjsify/empty`,"domparser/register":`@gjsify/empty`,"@gjsify/domparser/register":`@gjsify/empty`,webaudio:`@gjsify/empty`,"webaudio/register":`@gjsify/empty`,"@gjsify/webaudio/register":`@gjsify/empty`,gamepad:`@gjsify/empty`,"gamepad/register":`@gjsify/empty`,"@gjsify/gamepad/register":`@gjsify/empty`,webrtc:`@gjsify/empty`,"webrtc/register":`@gjsify/empty`,"webrtc/register/peer-connection":`@gjsify/empty`,"webrtc/register/data-channel":`@gjsify/empty`,"webrtc/register/error":`@gjsify/empty`,"webrtc/register/media":`@gjsify/empty`,"webrtc/register/media-devices":`@gjsify/empty`,"@gjsify/webrtc":`@gjsify/empty`,"@gjsify/webrtc/register":`@gjsify/empty`,"@gjsify/webrtc/register/peer-connection":`@gjsify/empty`,"@gjsify/webrtc/register/data-channel":`@gjsify/empty`,"@gjsify/webrtc/register/error":`@gjsify/empty`,"@gjsify/webrtc/register/media":`@gjsify/empty`,"@gjsify/webrtc/register/media-devices":`@gjsify/empty`,webassembly:`@gjsify/webassembly/globals`,"webassembly/register":`@gjsify/empty`,"webassembly/register/promise":`@gjsify/empty`,"@gjsify/webassembly/register":`@gjsify/empty`,"@gjsify/webassembly/register/promise":`@gjsify/empty`},setNodeAliasPrefix=n=>{for(let a in n){if(a.startsWith(`node:`))continue;let S=`node:${a}`;n[S]||(n[S]=n[a])}return n},getAliasesGeneralForGjs=n=>ah,getAliasesNodeForGjs=n=>setNodeAliasPrefix(oh),getAliasesWebForGjs=n=>lh,getAliasesGeneralForNode=n=>uh,getAliasesGjsForNode=n=>dh,getAliasesWebForNode=n=>fh,getAliasesForGjs=n=>({...getDerivedAliasesSync(`gjs`),...getAliasesGeneralForGjs(n),...getAliasesNodeForGjs(n),...getAliasesWebForGjs(n)}),getAliasesForNode=n=>({...getDerivedAliasesSync(`node`),...getAliasesGeneralForNode(n),...getAliasesGjsForNode(n),...getAliasesWebForNode(n)});[...rh,...rh.map(n=>`node:${n}`)],[...ih];var ph=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.splitWhen=n.flatten=void 0;function flatten(n){return n.reduce((n,a)=>[].concat(n,a),[])}n.flatten=flatten;function splitWhen(n,a){let S=[[]],C=0;for(let N of n)a(N)?(C++,S[C]=[]):S[C].push(N);return S}n.splitWhen=splitWhen})),mh=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isEnoentCodeError=void 0;function isEnoentCodeError(n){return n.code===`ENOENT`}n.isEnoentCodeError=isEnoentCodeError})),hh=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createDirentFromStats=void 0;var DirentFromStats=class{constructor(n,a){this.name=n,this.isBlockDevice=a.isBlockDevice.bind(a),this.isCharacterDevice=a.isCharacterDevice.bind(a),this.isDirectory=a.isDirectory.bind(a),this.isFIFO=a.isFIFO.bind(a),this.isFile=a.isFile.bind(a),this.isSocket=a.isSocket.bind(a),this.isSymbolicLink=a.isSymbolicLink.bind(a)}};function createDirentFromStats(n,a){return new DirentFromStats(n,a)}n.createDirentFromStats=createDirentFromStats})),gh=__commonJSMin$1((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.convertPosixPathToPattern=n.convertWindowsPathToPattern=n.convertPathToPattern=n.escapePosixPath=n.escapeWindowsPath=n.escape=n.removeLeadingDotSegment=n.makeAbsolute=n.unixify=void 0;let a=(Tf(),__toCommonJS(vf)),S=(Ho(),__toCommonJS(Do)),C=a.platform()===`win32`,N=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,F=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,I=/^\\\\([.?])/,H=/\\(?![!()+@[\]{}])/g;function unixify(n){return n.replace(/\\/g,`/`)}n.unixify=unixify;function makeAbsolute(n,a){return S.resolve(n,a)}n.makeAbsolute=makeAbsolute;function removeLeadingDotSegment(n){if(n.charAt(0)===`.`){let a=n.charAt(1);if(a===`/`||a===`\\`)return n.slice(2)}return n}n.removeLeadingDotSegment=removeLeadingDotSegment,n.escape=C?escapeWindowsPath:escapePosixPath;function escapeWindowsPath(n){return n.replace(F,`\\$2`)}n.escapeWindowsPath=escapeWindowsPath;function escapePosixPath(n){return n.replace(N,`\\$2`)}n.escapePosixPath=escapePosixPath,n.convertPathToPattern=C?convertWindowsPathToPattern:convertPosixPathToPattern;function convertWindowsPathToPattern(n){return escapeWindowsPath(n).replace(I,`//$1`).replace(H,`/`)}n.convertWindowsPathToPattern=convertWindowsPathToPattern;function convertPosixPathToPattern(n){return escapePosixPath(n)}n.convertPosixPathToPattern=convertPosixPathToPattern})),vh=__commonJSMin$1(((n,a)=>{
|
|
632
632
|
/*!
|
|
633
633
|
* is-extglob <https://github.com/jonschlinkert/is-extglob>
|
|
634
634
|
*
|
|
@@ -785,7 +785,7 @@ jobs:
|
|
|
785
785
|
cache-key: ${n.cacheKey}
|
|
786
786
|
`}je(),As(),Ho(),Gb();const BT={command:`check [manifest]`,description:`Run Flathub pre-submission linters: appstreamcli validate + flatpak-builder-lint.`,builder:n=>n.positional(`manifest`,{description:"Path to the Flatpak manifest. Auto-detects `<app-id>.json` if omitted.",type:`string`,normalize:!0}).option(`repo`,{description:"Built ostree-repo path. If given, also runs `flatpak-builder-lint repo`.",type:`string`,normalize:!0}).option(`metainfo`,{description:"MetaInfo XML path. Default: `data/<app-id>.metainfo.xml.in`.",type:`string`,normalize:!0}).option(`appstream`,{description:"Run `appstreamcli validate --strict` (default: true).",type:`boolean`,default:!0}).option(`builder-lint`,{description:"Run `flatpak-builder-lint manifest` (default: true).",type:`boolean`,default:!0}).option(`verbose`,{description:`Stream linter stdout/stderr verbatim.`,type:`boolean`,default:!1}),handler:async n=>{let a=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},S=process.cwd(),C=resolveAppId(n.manifest,a,S),N=resolveManifestPath(n.manifest,C,S),F=Oo(S,n.metainfo??`data/${C??`unknown`}.metainfo.xml.in`),I=0;if(n.appstream!==!1&&(existsSync(F)?await runLinter(`appstreamcli`,[`validate`,`--strict`,F],n.verbose??!1)||I++:Ae.warn(`[gjsify flatpak check] skipping appstreamcli — ${F} not found`)),n.builderLint!==!1){if(!existsSync(N)){Ae.error(`[gjsify flatpak check] manifest not found: ${N}`),process.exit(1);return}await runLinter(`flatpak-builder-lint`,[`manifest`,N],n.verbose??!1)||I++,n.repo&&(await runLinter(`flatpak-builder-lint`,[`repo`,Oo(S,n.repo)],n.verbose??!1)||I++)}I>0&&(Ae.error(`\n[gjsify flatpak check] ${I} check(s) failed.`),process.exit(1)),Ae.log(`[gjsify flatpak check] all checks passed.`)}};function resolveAppId(n,a,S){if(a.appId)return a.appId;try{let n=readPackageJson(S);if(looksLikeAppId(n.name))return n.name}catch{}if(n)return n.replace(/\.json$/,``)}function resolveManifestPath(n,a,S){if(n)return Oo(S,n);if(a)return Oo(S,`${a}.json`);let C=readdirSync(S).filter(n=>n.endsWith(`.json`)&&!n.startsWith(`package`));if(C.length===1)return Oo(S,C[0]);throw Error(`gjsify flatpak check: no manifest path given and could not auto-detect. Pass the manifest as a positional argument.`)}function runLinter(n,a,S){return new Promise(C=>{let N=spawn(n,a,{stdio:S?`inherit`:[`ignore`,`pipe`,`pipe`]}),F=``,I=``;S||(N.stdout?.setEncoding(`utf-8`),N.stderr?.setEncoding(`utf-8`),N.stdout?.on(`data`,n=>{F+=n}),N.stderr?.on(`data`,n=>{I+=n})),N.on(`error`,a=>{let S=a;S.code===`ENOENT`?Ae.error(`[gjsify flatpak check] ${n} not found in PATH.\nInstall via:\n flatpak install -y flathub org.flatpak.Builder\n alias ${n}="flatpak run --command=${n} org.flatpak.Builder"`):Ae.error(`[gjsify flatpak check] ${n} failed to spawn: ${S.message}`),C(!1)}),N.on(`exit`,N=>{let H=N===0,W=H?`OK`:`FAIL`;Ae.log(`[gjsify flatpak check] ${W}: ${n} ${a.join(` `)}`),!H&&!S&&(F.trim()&&Ae.log(F.trimEnd()),I.trim()&&Ae.error(I.trimEnd())),C(H)})})}je(),As(),Ho(),Tf(),Gb(),Yc();const VT=promisify(execFile),HT={command:`sync-flathub`,description:`Update the per-app Flathub tracking-repo manifest to a new git tag + commit. Clones, edits, commits, optionally opens a PR.`,builder:n=>n.version(!1).option(`version`,{description:"Git tag to sync to. Default: `git describe --tags --abbrev=0` in cwd.",type:`string`}).option(`app-id`,{description:"Reverse-DNS app id. Default: `gjsify.flatpak.appId`.",type:`string`}).option(`flathub-repo`,{description:"Flathub tracking-repo (owner/name). Default: `flathub/<appId>`.",type:`string`}).option(`commit`,{description:"Commit SHA to pin. Default: resolved via `git rev-list -n 1 <version>` in cwd.",type:`string`}).option(`branch`,{description:"Branch name in the flathub-repo. Default: `update-to-<version>`.",type:`string`}).option(`source-index`,{description:"Index into modules[0].sources[] to update (when manifest has multiple sources). Default: first `type: git` source.",type:`number`}).option(`pr`,{description:"After commit + push, open a PR via `gh pr create`. Pass `--no-pr` to skip and stop after push.",type:`boolean`,default:!0}).option(`dry-run`,{description:`Show what would be edited; touch no files, run no git commands.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every git / gh invocation before running.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},C=n.appId??S.appId??readPackageJson(a).name;if(!C)throw Error(`[gjsify flatpak sync-flathub] no app id available — pass --app-id or set gjsify.flatpak.appId.`);let N=n.flathubRepo??S.flathubRepo??`flathub/${C}`,F=n.version??await resolveLatestTag$1(a,n.verbose);if(!F)throw Error(`[gjsify flatpak sync-flathub] no version resolved — pass --version vX.Y.Z or create a git tag locally.`);let I=n.commit??await resolveCommitForTag(a,F,n.verbose),H=n.branch??`update-to-${normaliseBranchSegment(F)}`;if(Ae.log(`[gjsify flatpak sync-flathub] appId=${C}`),Ae.log(`[gjsify flatpak sync-flathub] flathubRepo=${N}`),Ae.log(`[gjsify flatpak sync-flathub] version=${F}`),Ae.log(`[gjsify flatpak sync-flathub] commit=${I}`),Ae.log(`[gjsify flatpak sync-flathub] branch=${H}`),n.dryRun){Ae.log(`[gjsify flatpak sync-flathub] --dry-run set; not cloning / writing / pushing.`);return}let W=flathubCacheRoot(),K=jo(W,N.replace(`/`,`__`));mkdirSync(W,{recursive:!0}),await ensureClone(K,N,n.verbose);let q=jo(K,`${C}.json`);if(!existsSync(q))throw Error(`[gjsify flatpak sync-flathub] Flathub manifest not found at ${q} — wrong appId / wrong flathub-repo?`);let Y=readFileSync(q,`utf-8`),X=editManifest(Y,{tag:F,commit:I,sourceIndex:n.sourceIndex});if(X===Y){Ae.log(`[gjsify flatpak sync-flathub] manifest already at ${F} — nothing to do.`);return}if(writeFileSync(q,X,`utf-8`),Ae.log(`[gjsify flatpak sync-flathub] manifest patched at ${q}`),await gitInRepo(K,[`checkout`,`-B`,H],n.verbose),await gitInRepo(K,[`add`,`.`],n.verbose),await gitInRepo(K,[`commit`,`-m`,`Update to ${F}`],n.verbose),n.pr===!1){Ae.log(`[gjsify flatpak sync-flathub] --no-pr set; branch ${H} committed locally in ${K}.`);return}await gitInRepo(K,[`push`,`-u`,`origin`,H,`--force-with-lease`],n.verbose),await ghCreate(K,N,H,F,`Auto-generated by \`gjsify flatpak sync-flathub\`.\n\n- Version: \`${F}\`\n- Commit: \`${I}\`\n`,n.verbose)}};async function resolveLatestTag$1(n,a){try{let{stdout:S}=await VT(`git`,[`describe`,`--tags`,`--abbrev=0`],{cwd:n});return a&&Ae.log(`[gjsify flatpak sync-flathub] resolved latest tag → ${S.trim()}`),S.trim()||null}catch{return null}}__name$1(resolveLatestTag$1,`resolveLatestTag`);async function resolveCommitForTag(n,a,S){try{let{stdout:C}=await VT(`git`,[`rev-list`,`-n`,`1`,a],{cwd:n}),N=C.trim();if(!N)throw Error(`empty rev-list output`);return S&&Ae.log(`[gjsify flatpak sync-flathub] resolved ${a} → ${N}`),N}catch(n){throw Error(`[gjsify flatpak sync-flathub] tag ${a} not found locally. Run \`git fetch --tags\` or pass --commit <sha>.\n underlying error: ${n instanceof Error?n.message:String(n)}`)}}function normaliseBranchSegment(n){return n.replace(/^v/,``).replace(/[^A-Za-z0-9._-]/g,`-`)}function flathubCacheRoot(){return jo(process.env.XDG_CACHE_HOME||jo(homedir(),`.cache`),`gjsify`,`flathub-sync`)}async function ensureClone(n,a,S){if(existsSync(jo(n,`.git`))){S&&Ae.log(`[gjsify flatpak sync-flathub] reusing clone at ${n}`),await gitInRepo(n,[`fetch`,`origin`],S);let a=await detectDefaultBranch(n,S);await gitInRepo(n,[`checkout`,a],S),await gitInRepo(n,[`reset`,`--hard`,`origin/${a}`],S);return}mkdirSync(Oo(n,`..`),{recursive:!0});let C=`https://github.com/${a}.git`;S&&Ae.log(`[gjsify flatpak sync-flathub] git clone ${C} ${n}`);try{await VT(`git`,[`clone`,C,n])}catch(n){throw n?.code===`ENOENT`?Error("[gjsify flatpak sync-flathub] `git` not found. Install git from your distro (Fedora: `dnf install git`, Debian: `apt install git`)."):n}}async function detectDefaultBranch(n,a){try{let{stdout:S}=await VT(`git`,[`remote`,`show`,`origin`],{cwd:n}),C=S.match(/HEAD branch: (\S+)/);if(C&&C[1]&&C[1]!==`(unknown)`)return a&&Ae.log(`[gjsify flatpak sync-flathub] default branch → ${C[1]}`),C[1]}catch{}return`master`}function gitInRepo(n,a,S){return S&&Ae.log(`[gjsify flatpak sync-flathub] git ${a.join(` `)} (in ${n})`),new Promise((S,C)=>{let N=spawn(`git`,a,{cwd:n,stdio:`inherit`});N.on(`error`,n=>{n.code===`ENOENT`?C(Error("[gjsify flatpak sync-flathub] `git` not found. Install it from your distro.")):C(n)}),N.on(`exit`,n=>{n===0?S():C(Error(`git ${a[0]} exited ${n}`))})})}function ghCreate(n,a,S,C,N,F){let I=[`pr`,`create`,`--repo`,a,`--head`,S,`--title`,`Update to ${C}`,`--body`,N];return F&&Ae.log(`[gjsify flatpak sync-flathub] gh ${I.join(` `)} (in ${n})`),new Promise((a,S)=>{let C=spawn(`gh`,I,{cwd:n,stdio:`inherit`});C.on(`error`,n=>{n.code===`ENOENT`?S(Error("[gjsify flatpak sync-flathub] `gh` (GitHub CLI) not found. Install via `dnf install gh` (Fedora), `apt install gh` (Debian/Ubuntu), or `flatpak install -y flathub com.github.cli`.")):S(n)}),C.on(`exit`,n=>{n===0?a():S(Error(`gh pr create exited ${n}`))})})}function editManifest(n,a){let S=JSON.parse(n),C=S.modules??[];if(C.length===0)throw Error(`[gjsify flatpak sync-flathub] manifest has no modules`);let N=C[0].sources??[];if(N.length===0)throw Error(`[gjsify flatpak sync-flathub] modules[0] has no sources`);let F=a.sourceIndex??N.findIndex(n=>n.type===`git`);if(F<0||F>=N.length)throw Error(`[gjsify flatpak sync-flathub] no git source found in modules[0].sources (use --source-index <n>)`);let I=N[F];if(I.type!==`git`)throw Error(`[gjsify flatpak sync-flathub] modules[0].sources[${F}].type is "${I.type}", expected "git"`);I.tag=a.tag,I.commit=a.commit,I[`x-checker-data`]||={type:`git`,"tag-pattern":`^v(\\d+\\.\\d+\\.\\d+)$`,"version-scheme":`semantic`};let H=detectIndent$1(n);return JSON.stringify(S,null,H)+(n.endsWith(`
|
|
787
787
|
`)?`
|
|
788
|
-
`:``)}function detectIndent$1(n){let a=n.match(/^\{\n( +)/);return a?a[1].length:2}__name$1(detectIndent$1,`detectIndent`),je(),As(),Gb(),Yc();const UT=promisify(execFile),WT={command:`diff`,description:`Compare the per-app Flathub tracking-repo manifest against the local git state and report version / commit drift.`,builder:n=>n.version(!1).option(`version`,{description:"Local version to compare against. Default: `git describe --tags --abbrev=0` in cwd.",type:`string`}).option(`app-id`,{description:"Reverse-DNS app id. Default: `gjsify.flatpak.appId`.",type:`string`}).option(`flathub-repo`,{description:"Flathub tracking-repo (owner/name). Default: `gjsify.flatpak.flathubRepo` or `flathub/<appId>`.",type:`string`}).option(`against`,{description:`Read the Flathub manifest from a local file instead of fetching it. Useful in CI or offline.`,type:`string`}).option(`detail`,{description:`Also print the full Flathub manifest source entry alongside the resolved local version.`,type:`boolean`,default:!1}).option(`source-index`,{description:`Index into modules[0].sources[] to inspect (when the manifest has multiple sources).`,type:`number`}).option(`verbose`,{description:`Echo fetch URL + resolved values.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},C=n.appId??S.appId??readPackageJson(a).name;if(!C)throw Error(`[gjsify flatpak diff] no app id available — pass --app-id or set gjsify.flatpak.appId.`);let N=n.flathubRepo??S.flathubRepo??`flathub/${C}`,F=n.version??await resolveLatestTag(a,n.verbose),I=await loadFlathubSource({appId:C,flathubRepo:N,against:n.against,verbose:n.verbose},n.sourceIndex),H=I?.tag,W=I?.commit;if(Ae.log(`[gjsify flatpak diff] appId=${C}`),Ae.log(`[gjsify flatpak diff] flathubRepo=${N}`),Ae.log(`[gjsify flatpak diff] flathub: tag=${H??`(missing)`} commit=${W??`(missing)`}`),Ae.log(`[gjsify flatpak diff] local: tag=${F??`(none)`}`),n.detail&&I&&(Ae.log(`[gjsify flatpak diff] flathub manifest source:`),Ae.log(JSON.stringify(I,null,2))),!F){Ae.warn("[gjsify flatpak diff] no local git tag found — cut a release (`git tag vX.Y.Z`) or pass --version vX.Y.Z to compare against an explicit value.");return}if(H||(Ae.warn("[gjsify flatpak diff] flathub manifest has no `tag` field on the inspected source."),process.exit(1)),H===F){Ae.log(`✅ in sync (${F})`);return}Ae.log(`❌ drift detected — flathub=${H} vs local=${F}`),Ae.log(` run \`gjsify flatpak sync-flathub --version ${F}\` to update the Flathub manifest.`),process.exit(1)}};async function loadFlathubSource(n,a){let S;if(n.against){if(!existsSync(n.against))throw Error(`[gjsify flatpak diff] --against path ${n.against} does not exist`);S=readFileSync(n.against,`utf-8`)}else S=await fetchFlathubManifest(n.flathubRepo,n.appId,n.verbose);let C;try{C=JSON.parse(S)}catch(n){throw Error(`[gjsify flatpak diff] failed to parse Flathub manifest as JSON: ${n.message}`)}let N=(C.modules??[])[0]?.sources??[];if(N.length===0)return null;let F=a??N.findIndex(n=>n?.type===`git`);return F<0||F>=N.length?null:N[F]??null}async function fetchFlathubManifest(n,a,S){for(let C of[`master`,`main`]){let N=`https://raw.githubusercontent.com/${n}/${C}/${a}.json`;S&&Ae.log(`[gjsify flatpak diff] fetch ${N}`);try{let n=await fetch(N);if(n.ok)return await n.text();S&&Ae.log(`[gjsify flatpak diff] ${C} → HTTP ${n.status}`)}catch(n){S&&Ae.log(`[gjsify flatpak diff] ${C} fetch error: ${n.message}`)}}throw Error(`[gjsify flatpak diff] could not fetch flathub manifest from ${n} on master or main`)}async function resolveLatestTag(n,a){try{let{stdout:S}=await UT(`git`,[`describe`,`--tags`,`--abbrev=0`],{cwd:n}),C=S.trim();return a&&Ae.log(`[gjsify flatpak diff] local latest tag → ${C}`),C||null}catch{return null}}je(),Gb(),Yc(),nn(),Ho();const GT=promisify(execFile),KT={command:`release <version>`,description:"Cut a release end-to-end: regenerate Flathub assets, run linters, create + push the git tag, then open the Flathub PR. Each step delegates to the equivalent `gjsify flatpak <sub>` command.",builder:n=>n.version(!1).positional(`version`,{description:"Release tag, e.g. `v0.6.6`.",type:`string`,demandOption:!0}).option(`skip-init`,{description:"Skip the `flatpak init --force` regen step.",type:`boolean`,default:!1}).option(`skip-check`,{description:"Skip the `flatpak check` linter step.",type:`boolean`,default:!1}).option(`skip-tag`,{description:"Skip the `git tag` + `git push --tags` step (use when the tag was already created out-of-band).",type:`boolean`,default:!1}).option(`push-tag`,{description:`Push the created tag after creating it. Default: true.`,type:`boolean`,default:!0}).option(`flathub-repo`,{description:`Flathub tracking-repo override forwarded to sync-flathub.`,type:`string`}).option(`dry-run`,{description:`Print each step that would run without executing any of them.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every sub-command invocation.`,type:`boolean`,default:!1}),handler:async n=>{let a=typeof n.version==`string`?n.version.trim():``;if(!a)throw Error(`[gjsify flatpak release] missing <version> positional`);let S=resolveCliEntry(),C=process.cwd(),N=[];n.skipInit||N.push({name:`init`,args:[S,`flatpak`,`init`,`--force`]}),n.skipCheck||N.push({name:`check`,args:[S,`flatpak`,`check`]});let F=[S,`flatpak`,`sync-flathub`,`--version`,a];if(n.flathubRepo&&F.push(`--flathub-repo`,n.flathubRepo),n.verbose&&F.push(`--verbose`),Ae.log(`[gjsify flatpak release] starting release of ${a}`),n.dryRun){Ae.log(`[gjsify flatpak release] --dry-run set; printing plan only:`);for(let n of N)Ae.log(` · ${n.name}: node ${n.args.join(` `)}`);n.skipTag||Ae.log(` · tag: git tag ${a}${n.pushTag===!1?``:` && git push origin `+a}`),Ae.log(` · sync: node ${F.join(` `)}`);return}for(let a of N)n.verbose&&Ae.log(`[gjsify flatpak release] step ${a.name}: node ${a.args.join(` `)}`),await runNode(a.args,C),Ae.log(`[gjsify flatpak release] ${a.name} ✔`);if(!n.skipTag){n.verbose&&Ae.log(`[gjsify flatpak release] git tag ${a}`);try{await GT(`git`,[`tag`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag ${a} created`)}catch(n){throw Error(`[gjsify flatpak release] git tag failed (${n.message}). If the tag already exists, re-run with --skip-tag.`)}n.pushTag!==!1&&(n.verbose&&Ae.log(`[gjsify flatpak release] git push origin ${a}`),await GT(`git`,[`push`,`origin`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag pushed`))}n.verbose&&Ae.log(`[gjsify flatpak release] sync: node ${F.join(` `)}`),await runNode(F,C),Ae.log(`[gjsify flatpak release] ✅ release ${a} complete`)}};function resolveCliEntry(){return Oo(Oo(Po(fileURLToPath(import.meta.url)),`..`,`..`),`index.js`)}async function runNode(n,a){await new Promise((S,C)=>{let N=spawn(`node`,n,{cwd:a,stdio:`inherit`});N.on(`error`,C),N.on(`exit`,a=>{a===0?S():C(Error(`sub-command exited with code ${a}: node ${n.join(` `)}`))})})}const qT={command:`flatpak <subcommand>`,description:`Flatpak toolchain: init/build/deps/ci/check/sync-flathub/diff/release subcommands for shipping GJS apps and CLIs as Flatpaks.`,builder:n=>n.command(IT.command,IT.description,IT.builder,IT.handler).command(LT.command,LT.description,LT.builder,LT.handler).command(RT.command,RT.description,RT.builder,RT.handler).command(zT.command,zT.description,zT.builder,zT.handler).command(BT.command,BT.description,BT.builder,BT.handler).command(HT.command,HT.description,HT.builder,HT.handler).command(WT.command,WT.description,WT.builder,WT.handler).command(KT.command,KT.description,KT.builder,KT.handler).demandCommand(1).strict()};As(),Ho();const JT=/^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;function parseSpec$1(n){if(!n)throw Error(`dlx: empty package spec`);if(n.startsWith(`./`)||n.startsWith(`../`)||Ao(n)||existsSync(n))return{kind:`local`,path:Oo(n)};let a=n,S,C=n.lastIndexOf(`@`);if(C>0&&(a=n.slice(0,C),S=n.slice(C+1)),!JT.test(a))throw Error(`dlx: invalid package name "${a}"`);return{kind:`registry`,name:a,version:S,spec:n}}__name$1(parseSpec$1,`parseSpec`),As(),Ho();function resolveGjsEntry(n,a){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`dlx: no package.json found at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=C.gjsify?.bin,F=C.gjsify?.main,I=C.main,H,W=null,K=!1;if(a!==null){if(!N||!N[a]){let S=N?Object.keys(N).join(`, `):`(none)`;throw Error(`dlx: package "${C.name??n}" has no GJS bin named "${a}" — known: ${S}`)}H=N[a],W=a}else if(N&&Object.keys(N).length===1){let n=Object.keys(N)[0];H=N[n],W=n}else F?H=F:I&&(H=I,K=!0);if(N&&Object.keys(N).length>1&&a===null){let a=Object.keys(N).join(`, `);throw Error(`dlx: package "${C.name??n}" defines multiple GJS bins — pass one of: ${a}`)}if(!H)throw Error(`dlx: package "${C.name??n}" has no GJS entry — set \`gjsify.main\` (or \`gjsify.bin\`) in its package.json`);let q=Oo(n,H);if(!existsSync(q))throw Error(`dlx: GJS entry not found: ${q}`);return{bundlePath:q,binName:W,fromFallback:K}}Ga(),As(),Tf(),Ho();function lexCompare(n,a){return n<a?-1:+(n>a)}function createCacheKey(n){let a=[...n.packages].sort(lexCompare),S=Object.entries(n.registries??{}).sort(([n],[a])=>lexCompare(n,a)),C=JSON.stringify([a,S]);return createHash(`sha256`).update(C).digest(`hex`)}function dlxCacheRoot(){let n=process.env.XDG_CACHE_HOME,a=jo(n&&n.length>0?n:jo(homedir(),`.cache`),`gjsify`,`dlx`);return mkdirSync(a,{recursive:!0}),a}function cacheDirFor(n){let a=jo(dlxCacheRoot(),n);return mkdirSync(a,{recursive:!0}),a}function makePrepareDir(n){let a=jo(n,`${Date.now().toString(16)}-${process.pid.toString(16)}`);return mkdirSync(a,{recursive:!0}),a}function getValidCachedPkg(n,a=10080){let S=jo(n,`pkg`),C;try{C=lstatSync(S)}catch(n){if(n.code===`ENOENT`)return;throw n}if(!C.isSymbolicLink())return;let N;try{N=realpathSync(S)}catch{return}return Date.now()-C.mtime.getTime()<=a*6e4?N:void 0}function symlinkSwap(n,a){let S=jo(n,`pkg`),C=jo(n,`pkg.tmp-${Date.now().toString(16)}-${process.pid.toString(16)}`);symlinkSync(a,C,`dir`);try{renameSync(C,S)}catch(n){let a=n.code;if(a===`EBUSY`||a===`EPERM`||a===`EEXIST`){try{rmSync(C)}catch{}return realpathSync(S)}throw n}return realpathSync(S)}function resolveInstalledPkgDir(n,a){return Oo(n,`node_modules`,a)}const YT={resolve:`resolving`,download:`downloading`,extract:`extracting`,link:`linking bins`},XT={update(){},beginPhase(){},endPhase(){}};function makeProgressReporter(n={}){if(n.enabled===!1)return XT;let a=n.stream??process.stderr,S=!!a.isTTY;return n.enabled??!0?S?makeTtyReporter(a):makePlainReporter(a):XT}function makeTtyReporter(n){let a=0,S=``;function render(C,N=!1){let F=Date.now();!N&&F-a<33&&C===S||(a=F,S=C,n.write(`\r\x1B[2K`+C))}function clearLine(){n.write(`\r\x1B[2K`),S=``}return{beginPhase(a,S){render(formatBar(a,0,S,void 0,n.columns??80),!0)},update(a){render(formatBar(a.phase,a.current,a.total,a.name,n.columns??80))},endPhase(a){let S=YT[a];clearLine(),n.write(`gjsify install: ${S} done\n`)}}}function makePlainReporter(n){return{beginPhase(a,S){n.write(`gjsify install: ${YT[a]} ${S} package(s)\n`)},update(){},endPhase(a){n.write(`gjsify install: ${YT[a]} done\n`)}}}function formatBar(n,a,S,C,N){let F=YT[n],I=S>0?Math.min(1,a/S):0,H=`${a}/${S}`,W=`gjsify install: ${F} `,K=` ${H}`+(C?` ${C}`:``),q=Math.max(8,Math.min(40,N-W.length-K.length-4)),Y=Math.round(I*q),X=`█`.repeat(Y)+`░`.repeat(q-Y),te=`${W}[${X}]${K}`;if(te.length>N){let n=te.length-N+1,a=C&&C.length>n?C.slice(0,C.length-n-1)+`…`:``;te=`${W}[${X}] ${H}${a?` `+a:``}`}return te}function parse(n){try{return new SemVer(n)}catch{return null}}function compare(n,a){let S=n instanceof SemVer?n:new SemVer(n),C=a instanceof SemVer?a:new SemVer(a);return S.compare(C)}function satisfies(n,a){let S=a instanceof $T?a:new $T(a),C=n instanceof SemVer?n:parse(String(n));return C?S.test(C):!1}function maxSatisfying(n,a){let S=a instanceof $T?a:new $T(a),C=null;for(let a of n){let n=parse(a);!n||!S.test(n)||(C===null||n.compare(C)>0)&&(C=n)}return C?C.version:null}function testComparator(n,a){if(n.semver===null)return!0;let S=a.compare(n.semver);switch(n.operator){case``:case`=`:return S===0;case`<`:return S<0;case`<=`:return S<=0;case`>`:return S>0;case`>=`:return S>=0}}function formatComparator(n){return n.semver===null?`*`:`${n.operator}${n.semver.version}`}function parseRangePart(n){let a=n.trim();if(a===``||a===`*`||a.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=a.match(/^\s*(\S+)\s+-\s+(\S+)\s*$/);if(S)return hyphenRange(S[1],S[2]);let C=a.replace(/(<=|>=|<|>|=)\s+(?=\S)/g,`$1`).split(/\s+/),N=[];for(let n of C)N.push(...parseSimple(n));return N}function parseSimple(n){if(n===`*`||n===``||n.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];if(n.startsWith(`^`))return caretRange(n.slice(1));if(n.startsWith(`~`))return tildeRange(n.slice(1).replace(/^>/,``));let a=n.match(/^(<=|>=|<|>|=)\s*(.+)$/);if(a){let n=a[1];return primitiveRange(n,a[2])}return partialRange(n)}function parsePartial(n){let a=n.trim().replace(/^v/,``);if(a===``||a===`*`)return{major:null,minor:null,patch:null,pre:``,build:``};let S=``,C=``,N=a,F=N.indexOf(`+`);F>=0&&(C=N.slice(F+1),N=N.slice(0,F));let I=N.indexOf(`-`);I>=0&&(S=N.slice(I+1),N=N.slice(0,I));let H=N.split(`.`),xr=a=>{if(a===void 0||a===``||a===`x`||a===`X`||a===`*`)return null;if(!/^\d+$/.test(a))throw TypeError(`Invalid partial version: ${n}`);return Number(a)};return{major:xr(H[0]),minor:xr(H[1]),patch:xr(H[2]),pre:S,build:C}}function partialToVersion(n){return`${n.major??0}.${n.minor??0}.${n.patch??0}${n.pre?`-${n.pre}`:``}${n.build?`+${n.build}`:``}`}function partialRange(n){let a=parsePartial(n);return a.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:a.minor===null?[{operator:`>=`,semver:new SemVer(`${a.major}.0.0`)},{operator:`<`,semver:new SemVer(`${a.major+1}.0.0`)}]:a.patch===null?[{operator:`>=`,semver:new SemVer(`${a.major}.${a.minor}.0`)},{operator:`<`,semver:new SemVer(`${a.major}.${a.minor+1}.0`)}]:[{operator:`=`,semver:new SemVer(partialToVersion(a))}]}function caretRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C;return C=a.major>0||a.minor===null?`${a.major+1}.0.0`:a.minor>0||a.patch===null?`0.${a.minor+1}.0`:`0.0.${a.patch+1}`,[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function tildeRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C=a.minor===null?`${a.major+1}.0.0`:`${a.major}.${a.minor+1}.0`;return[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function primitiveRange(n,a){let S=parsePartial(a);return S.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:n===`=`||n===``?partialRange(a):n===`>`?S.minor===null?[{operator:`>=`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`>`,semver:new SemVer(partialToVersion(S))}]:n===`<`?S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor}.0`)}]:[{operator:`<`,semver:new SemVer(partialToVersion(S))}]:n===`>=`?[{operator:`>=`,semver:new SemVer(partialToVersion(S))}]:S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`<=`,semver:new SemVer(partialToVersion(S))}]}function hyphenRange(n,a){let S=parsePartial(n),C=parsePartial(a),N=S.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor??0}.${S.patch??0}${S.pre?`-${S.pre}`:``}`)},F;return F=C.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:C.minor===null?{operator:`<`,semver:new SemVer(`${C.major+1}.0.0`)}:C.patch===null?{operator:`<`,semver:new SemVer(`${C.major}.${C.minor+1}.0`)}:{operator:`<=`,semver:new SemVer(`${C.major}.${C.minor}.${C.patch}${C.pre?`-${C.pre}`:``}`)},[N,F]}var ZT,QT,SemVer,$T,eE=__esmMin(()=>{ZT=/^(0|[1-9]\d*)$/,QT=/^(\d+)\.(\d+)\.(\d+)(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/,SemVer=class{major;minor;patch;prerelease;build;version;constructor(n){let a=String(n).trim().replace(/^v/,``),S=QT.exec(a);if(!S)throw TypeError(`Invalid Version: ${n}`);this.major=Number(S[1]),this.minor=Number(S[2]),this.patch=Number(S[3]),this.prerelease=S[4]?S[4].split(`.`).map(n=>ZT.test(n)?Number(n):n):[],this.build=S[5]?S[5].split(`.`):[],this.version=`${this.major}.${this.minor}.${this.patch}`+(this.prerelease.length?`-${this.prerelease.join(`.`)}`:``)+(this.build.length?`+${this.build.join(`.`)}`:``)}compare(n){return this.major===n.major?this.minor===n.minor?this.patch===n.patch?this.comparePre(n):this.patch<n.patch?-1:1:this.minor<n.minor?-1:1:this.major<n.major?-1:1}comparePre(n){let a=this.prerelease,S=n.prerelease;if(a.length===0&&S.length===0)return 0;if(a.length===0)return 1;if(S.length===0)return-1;for(let n=0;;n++){let C=a[n],N=S[n];if(C===void 0&&N===void 0)return 0;if(N===void 0)return 1;if(C===void 0)return-1;if(C===N)continue;let F=typeof C==`number`,I=typeof N==`number`;return F&&!I?-1:!F&&I?1:C<N?-1:1}}toString(){return this.version}},$T=class Range{raw;set;constructor(n){if(n instanceof Range){this.raw=n.raw,this.set=n.set;return}this.raw=String(n).trim();let a=this.raw.split(/\s*\|\|\s*/),S=[];for(let n of a){let a=parseRangePart(n);if(a.length===0)throw TypeError(`Invalid range: ${this.raw}`);S.push(a)}if(S.length===0)throw TypeError(`Invalid range: ${this.raw}`);this.set=S}test(n){let a=n instanceof SemVer?n:parse(String(n));if(!a)return!1;for(let n of this.set)if(n.every(n=>testComparator(n,a))){if(a.prerelease.length>0&&!n.some(n=>n.semver!==null&&n.semver.prerelease.length>0&&n.semver.major===a.major&&n.semver.minor===a.minor&&n.semver.patch===a.patch))continue;return!0}return!1}format(){return this.set.map(n=>n.map(formatComparator).join(` `)).join(` || `)}toString(){return this.format()}}});function assertPackument(n,a){if(!a||typeof a!=`object`)throw TypeError(`registry: ${n} packument is not an object`);let S=a;if(typeof S.name!=`string`)throw TypeError(`registry: ${n} packument missing string name`);if(!S.versions||typeof S.versions!=`object`)throw TypeError(`registry: ${n} packument missing versions map`)}function registryFor(n,a){if(a&&n.startsWith(`@`)){let S=n.slice(0,n.indexOf(`/`)),C=a.scopes[S];if(C)return ensureTrailingSlash$1(C)}return a?.registry?ensureTrailingSlash$1(a.registry):tE}function packumentUrl(n,a){let S=ensureTrailingSlash$1(a);if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a<0)throw TypeError(`Invalid scoped package name: ${n}`);let C=n.slice(0,a),N=n.slice(a+1);return`${S}${encodeURIComponent(C)}/${encodeURIComponent(N)}`}return`${S}${encodeURIComponent(n)}`}async function fetchPackumentConditional(n,a={}){let S=packumentUrl(n,a.registry??registryFor(n,a.npmrc)),C=buildHeaders(S,{...a,acceptEncoding:`gzip`});C.accept??=`application/vnd.npm.install-v1+json`,a.ifNoneMatch&&(C[`if-none-match`]=a.ifNoneMatch);let N=await fetchWithRetry(S,{headers:C,signal:a.signal,compress:!1},{fetch:a.fetch,retries:a.retries,retryDelayMs:a.retryDelayMs,timeoutMs:a.timeoutMs,onRetry:a.onRetry});if(N.status===304){try{await N.arrayBuffer()}catch{}return{status:`not-modified`,etag:a.ifNoneMatch}}if(!N.ok)throw N.status===404||N.status===406?new PackageNotFoundError(n,S):Error(`registry GET ${S} -> ${N.status} ${N.statusText}`);let F=N.headers.get(`etag`)??void 0,I=await decodeJsonBody(N);return assertPackument(n,I),{status:`fresh`,packument:I,etag:F}}async function decodeJsonBody(n){let a=new Uint8Array(await n.arrayBuffer()),S=a.length>=2&&a[0]===31&&a[1]===139?await gunzip$1(a):a;return JSON.parse(new TextDecoder().decode(S))}async function gunzip$1(n){let a=globalThis.DecompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/npm-registry: globalThis.DecompressionStream is unavailable — cannot decode a gzip registry response (on GJS, register '@gjsify/compression-streams')`);let S=new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)).getReader(),C=[],N=0;for(;;){let{value:n,done:a}=await S.read();if(a)break;let F=n instanceof Uint8Array?n:new Uint8Array(n);C.push(F),N+=F.length}let F=new Uint8Array(N),I=0;for(let n of C)F.set(n,I),I+=n.length;return F}async function fetchPackument(n,a={}){let S=await fetchPackumentConditional(n,a);if(!S.packument)throw Error(`registry: ${n} returned 304 Not Modified to an unconditional request`);return S.packument}async function fetchTarball(n,a={}){let S=buildHeaders(n,{...a,acceptEncoding:`identity`});S.accept??=`application/octet-stream`;let C=await fetchWithRetry(n,{headers:S,signal:a.signal},{fetch:a.fetch,retries:a.retries,retryDelayMs:a.retryDelayMs,timeoutMs:a.timeoutMs,onRetry:a.onRetry});if(!C.ok)throw Error(`tarball GET ${n} -> ${C.status} ${C.statusText}`);let N=new Uint8Array(await C.arrayBuffer());if(a.integrity&&!await verifyIntegrity(N,a.integrity))throw new IntegrityError(n,a.integrity);return N}async function fetchWithRetry(n,a,S){let C=S.fetch??globalThis.fetch;if(!C)throw Error(`@gjsify/npm-registry: globalThis.fetch is missing`);let N=Math.max(0,S.retries??3),F=Math.max(0,S.retryDelayMs??250),I=Math.max(0,S.timeoutMs??3e4),H=0,W,K=0;for(;;){if(a.signal?.aborted)throw signalAbortError(a.signal);let q=I>0?new AbortController:null,Y=q===null?null:setTimeout(()=>q.abort(Error(`@gjsify/npm-registry: per-request timeout ${I}ms`)),I),X=composeSignals(a.signal,q?.signal);try{let S=await C(n,{...a,signal:X});if(S.ok||!isRetryableStatus(S.status)||H>=N)return S;try{await S.arrayBuffer()}catch{}W=Error(`HTTP ${S.status} ${S.statusText}`)}catch(S){let C=q!==null&&q.signal.aborted,F=a.signal?.aborted===!0;if(C&&!F){if(K++,H>=N)throw new RegistryTimeoutError(n,I,K);W=S}else if(F)throw signalAbortError(a.signal);else{if(!isRetryableError(S)||H>=N)throw S;W=S}}finally{Y!==null&&clearTimeout(Y)}let te=Math.min(F*2**H,8e3);S.onRetry?.({attempt:H+1,error:W,delayMs:te}),await delay(te,a.signal),H++}}function composeSignals(n,a){return n?a?AbortSignal.any([n,a]):n:a}function isRetryableStatus(n){return n===408||n===425||n===429||n===500||n===502||n===503||n===504||n===521||n===522||n===524||n===525}function isRetryableError(n){if(n&&typeof n==`object`&&`name`in n&&n.name===`AbortError`)return!1;if(n instanceof TypeError)return!0;if(n&&typeof n==`object`&&`name`in n){let a=n.name;if(a===`FetchError`)return!0;if(a===`AbortError`)return!1}let a=n?.cause;if(a&&typeof a==`object`&&`code`in a){let n=a.code;if(typeof n==`string`)return n===`ECONNRESET`||n===`ECONNREFUSED`||n===`ENETUNREACH`||n===`ENOTFOUND`||n===`ETIMEDOUT`||n===`EAI_AGAIN`||n===`UND_ERR_SOCKET`||n===`UND_ERR_CONNECT_TIMEOUT`}return!1}function delay(n,a){return n<=0?Promise.resolve():new Promise((S,C)=>{let N=setTimeout(()=>{a?.removeEventListener?.(`abort`,onAbort),S()},n),onAbort=()=>{clearTimeout(N),C(signalAbortError(a))};if(a?.aborted){clearTimeout(N),C(signalAbortError(a));return}a?.addEventListener?.(`abort`,onAbort,{once:!0})})}function signalAbortError(n){let a=n&&`reason`in n?n.reason:void 0;if(a instanceof Error)return a;let S=Error(`Aborted`);return S.name=`AbortError`,S}async function verifyIntegrity(n,a){let S=a.trim().split(/\s+/);for(let a of S){let S=a.indexOf(`-`);if(S<0)continue;let C=a.slice(0,S).toLowerCase(),N=a.slice(S+1),F=globalThis.crypto?.subtle;if(!F)throw Error(`@gjsify/npm-registry: globalThis.crypto.subtle is missing`);let I=subriToWebCryptoAlgo(C);if(!I)continue;let H=await F.digest(I,dataAsArrayBuffer(n));if(bytesToBase64(new Uint8Array(H))===N)return!0}return!1}function subriToWebCryptoAlgo(n){switch(n){case`sha1`:return`SHA-1`;case`sha256`:return`SHA-256`;case`sha384`:return`SHA-384`;case`sha512`:return`SHA-512`;default:return null}}function dataAsArrayBuffer(n){if(n.byteOffset===0&&n.byteLength===n.buffer.byteLength)return n.buffer;let a=new Uint8Array(n.byteLength);return a.set(n),a.buffer}function bytesToBase64(n){let a=``;for(let S=0;S<n.length;S++)a+=String.fromCharCode(n[S]);return btoa(a)}function parseNpmrc(n){let a={registry:tE,scopes:{},authTokens:{},basicAuth:{}},S=n.split(/\r?\n/),C={};for(let n of S){let S=n.replace(/^\s+|\s+$/g,``);if(!S||S.startsWith(`#`)||S.startsWith(`;`))continue;let N=S.indexOf(`=`);if(N<0)continue;let F=S.slice(0,N).trim(),I=expandEnv(stripQuotes(S.slice(N+1).trim()));if(F===`registry`){a.registry=ensureTrailingSlash$1(I);continue}let H=F.match(/^(@[^:]+):registry$/);if(H){a.scopes[H[1]]=ensureTrailingSlash$1(I);continue}let W=F.match(/^\/\/(.+):_authToken$/);if(W){a.authTokens[normalizeAuthHost(W[1])]=I;continue}let K=F.match(/^\/\/(.+):username$/);if(K){(C[normalizeAuthHost(K[1])]??={}).user=I;continue}let q=F.match(/^\/\/(.+):_password$/);if(q){let n=base64Decode(I);(C[normalizeAuthHost(q[1])]??={}).pass=n;continue}}for(let[n,S]of Object.entries(C))S.user&&S.pass!==void 0&&(a.basicAuth[n]={username:S.user,password:S.pass});return a}function buildHeaders(n,a){let S={"user-agent":`gjsify-install/0.3.7`,"accept-encoding":a.acceptEncoding??`identity`};if(a.npmrc){let C=resolveAuthForUrl(n,a.npmrc);C&&(S.authorization=C)}if(a.headers)for(let[n,C]of Object.entries(a.headers))S[n.toLowerCase()]=C;return S}function resolveAuthForUrl(n,a){let S=pathPrefixes(new URL(n));for(let n of S){let S=a.authTokens[n];if(S)return`Bearer ${S}`;let C=a.basicAuth[n];if(C)return`Basic ${btoa(`${C.username}:${C.password}`)}`}return null}function pathPrefixes(n){let a=n.pathname.split(`/`).filter(Boolean),S=[];for(let C=a.length;C>=0;C--){let N=a.slice(0,C).join(`/`);S.push(N?`//${n.host}/${N}`:`//${n.host}`)}return S}function normalizeAuthHost(n){return`//${n.replace(/\/+$/,``)}`}function ensureTrailingSlash$1(n){return n.endsWith(`/`)?n:n+`/`}function stripQuotes(n){return n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`)?n.slice(1,-1):n}function expandEnv(n){return n.replace(/\$\{([A-Z0-9_]+)\}/gi,(n,a)=>globalThis.process?.env?.[a]??``)}function base64Decode(n){return atob(n)}async function whoami(n,a){let S=`${ensureTrailingSlash$1(n)}-/whoami`,C=buildHeaders(S,{npmrc:a});C.accept=`application/json`;let N=globalThis.fetch;if(!N)throw Error(`@gjsify/npm-registry: globalThis.fetch is missing`);let F=await N(S,{method:`GET`,headers:C});if(!F.ok)throw Error(`whoami GET ${S} -> ${F.status} ${F.statusText}`);let I=await F.json();if(I&&typeof I==`object`&&`username`in I){let n=I.username;if(typeof n==`string`&&n.length>0)return{username:n}}return{}}var tE,PackageNotFoundError,IntegrityError,RegistryTimeoutError,nE=__esmMin(()=>{tE=`https://registry.npmjs.org/`,__name$1(gunzip$1,`gunzip`),__name$1(ensureTrailingSlash$1,`ensureTrailingSlash`),PackageNotFoundError=class extends Error{name;url;constructor(n,a){super(`Package not found in registry: ${n} (${a})`),this.name=n,this.url=a,this.name=`PackageNotFoundError`}},IntegrityError=class extends Error{url;integrity;constructor(n,a){super(`Tarball integrity mismatch for ${n} (expected ${a})`),this.url=n,this.integrity=a,this.name=`IntegrityError`}},RegistryTimeoutError=class extends Error{url;timeoutMs;attempts;constructor(n,a,S){let C=Math.round(a/100)/10,N=Math.round(a*S/100)/10;super(`@gjsify/npm-registry: GET ${n} timed out after ${C}s × ${S} attempt(s) (total ~${N}s). This usually means the registry CDN is slow or unreachable.`),this.url=n,this.timeoutMs=a,this.attempts=S,this.name=`RegistryTimeoutError`}}});function parseTar(n){let a=[],S=null,C=null,N=null,F=0;for(;F+512<=n.length;){let I=n.subarray(F,F+512);if(allZeros(I)){let a=n.subarray(F+512,F+2*512);if(a.length===512&&allZeros(a))break;F+=512;continue}if(!validateChecksum(I))throw new TarParseError(`Bad header checksum at offset ${F} — file is not a valid tar archive`);let H=readString(I,0,100),W=parseOctal(I,100,8),K=parseOctal(I,124,12),q=parseOctal(I,136,12),Y=String.fromCharCode(I[156]||0),X=readString(I,157,100),te=readString(I,257,6),ne=readString(I,345,155),re=readString(I,265,32),ie=readString(I,297,32);F+=512;let ae=n.subarray(F,F+K);if(F+=alignToBlock(K),Y===`x`){S=parsePaxRecords(ae);continue}if(Y===`g`)continue;if(Y===`L`){C=bytesToString(ae).replace(/\0+$/,``);continue}if(Y===`K`){N=bytesToString(ae).replace(/\0+$/,``);continue}let oe=H;te===`ustar`&&ne!==``&&(oe=`${ne}/${H}`),C!==null&&(oe=C,C=null);let Z=X;if(N!==null&&(Z=N,N=null),S!==null){let C=S.get(`path`);C!==void 0&&(oe=C);let N=S.get(`linkpath`);N!==void 0&&(Z=N);let I=S.get(`size`);if(I!==void 0){let C=Number(I);if(Number.isFinite(C)){let N=F-alignToBlock(K),I=n.subarray(N,N+C);F=N+alignToBlock(C),S=null,a.push(buildEntry(oe,Z,Y,W,q,re,ie,I));continue}}S=null}a.push(buildEntry(oe,Z,Y,W,q,re,ie,ae))}return a}function buildEntry(n,a,S,C,N,F,I,H){return{name:n,linkname:a,type:typeflagToType(S,n),mode:C,mtime:N,body:H,uname:F,gname:I}}function typeflagToType(n,a){switch(n){case`0`:case`\0`:case``:return a.endsWith(`/`)?`directory`:`file`;case`1`:return`hardlink`;case`2`:return`symlink`;case`5`:return`directory`;case`x`:return`pax-header`;case`g`:return`pax-global`;case`L`:return`gnu-longname`;case`K`:return`gnu-longlink`;default:return`unknown`}}function parsePaxRecords(n){let a=new Map,S=0;for(;S<n.length;){let C=S;for(;C<n.length&&n[C]!==32;)C++;if(C>=n.length)break;let N=bytesToString(n.subarray(S,C)),F=Number(N);if(!Number.isFinite(F)||F<=0)break;let I=S+F;if(I>n.length)break;let H=bytesToString(n.subarray(C+1,I-1)),W=H.indexOf(`=`);if(W>0){let n=H.slice(0,W),S=H.slice(W+1);a.set(n,S)}S=I}return a}function readString(n,a,S){let C=a,N=a+S;for(;C<N&&n[C]!==0;)C++;return bytesToString(n.subarray(a,C))}function bytesToString(n){return new TextDecoder(`utf-8`,{fatal:!1}).decode(n)}function parseOctal(n,a,S){if(S>0&&n[a]&128){let C=n[a]&127;for(let N=1;N<S;N++)C=C*256+n[a+N];return C}let C=``;for(let N=0;N<S;N++){let S=n[a+N];S===0||S===32||(C+=String.fromCharCode(S))}return C===``?0:parseInt(C,8)}function alignToBlock(n){return Math.ceil(n/512)*512}function allZeros(n){for(let a=0;a<n.length;a++)if(n[a]!==0)return!1;return!0}function validateChecksum(n){let a=parseOctal(n,148,8),S=0,C=0;for(let a=0;a<512;a++){let N=a>=148&&a<156?32:n[a];S+=N,C+=N>127?N-256:N}return a===S||a===C}var TarParseError,rE=__esmMin(()=>{TarParseError=class extends Error{constructor(n){super(n),this.name=`TarParseError`}}});function createTarball(n){let a=[];for(let S of n){if(`directory`in S&&S.directory===!0){a.push(buildHeader(ensureTrailingSlash(S.name),0,`5`,S.mode??493,S.mtime??0));continue}let n=S,C=typeof n.body==`string`?new TextEncoder().encode(n.body):n.body,N=n.mode??defaultFileMode(C);a.push(buildHeader(n.name,C.byteLength,`0`,N,n.mtime??0)),a.push(C);let F=padTo512(C.byteLength);F>0&&a.push(new Uint8Array(F))}return a.push(new Uint8Array(512*2)),concatChunks(a)}function buildHeader(n,a,S,C,N){let{prefix:F,basename:I}=splitPathForUstar(n),H=new Uint8Array(512);writeAscii(H,I,0,100),writeOctal(H,C&4095,100,7),H[107]=0,writeOctal(H,0,108,7),H[115]=0,writeOctal(H,0,116,7),H[123]=0,writeOctal(H,a,124,11),H[135]=0,writeOctal(H,N,136,11),H[147]=0;for(let n=148;n<156;n++)H[n]=32;H[156]=S.charCodeAt(0),writeAscii(H,`ustar\0`,257,6),writeAscii(H,`00`,263,2),F&&writeAscii(H,F,345,155);let W=0;for(let n=0;n<512;n++)W+=H[n];return writeAscii(H,W.toString(8).padStart(6,`0`),148,6),H[154]=0,H[155]=32,H}function splitPathForUstar(n){if(n.length<=100)return{prefix:``,basename:n};if(n.length>255)throw Error(`createTarball: path too long (${n.length} > 255 chars): ${n}`);for(let a=Math.min(n.length-1,155);a>0;a--)if(n[a]===`/`&&n.length-a-1<=100)return{prefix:n.slice(0,a),basename:n.slice(a+1)};throw Error(`createTarball: cannot split path into ustar prefix+basename (basename slot is 100 chars): ${n}`)}function writeAscii(n,a,S,C){let N=new TextEncoder().encode(a);if(N.length>C)throw Error(`createTarball: field too long (${N.length} > ${C}): "${a}"`);n.set(N,S)}function writeOctal(n,a,S,C){writeAscii(n,a.toString(8).padStart(C,`0`),S,C)}function padTo512(n){let a=n%512;return a===0?0:512-a}function ensureTrailingSlash(n){return n.endsWith(`/`)?n:`${n}/`}function defaultFileMode(n){return n.length>=2&&n[0]===35&&n[1]===33?493:420}function concatChunks(n){let a=0;for(let S of n)a+=S.byteLength;let S=new Uint8Array(a),C=0;for(let a of n)S.set(a,C),C+=a.byteLength;return S}var iE=__esmMin(()=>{});async function extractTarball(n,a,S={}){let C=n instanceof Uint8Array?n:new Uint8Array(n),N=parseTar(S.gzip??(C.length>=2&&C[0]===31&&C[1]===139)?await gunzip(C):C);mkdirSync(a,{recursive:!0});let F=S.strip??1,I=S.preventEscape??!0,H={files:[],directories:[],symlinks:[],skipped:0};for(let n of N){let C=stripComponents(n.name,F);if(C===null||C===``){H.skipped++;continue}let N=Oo(a,C);if(I&&!isInside(N,a))throw Error(`tar: refusing to extract ${n.name} outside ${a} (resolved=${N})`);if(S.filter&&!S.filter(n,N)){H.skipped++;continue}if(n.type===`directory`){mkdirSync(N,{recursive:!0}),H.directories.push(N);continue}if(n.type===`file`){mkdirSync(Po(N),{recursive:!0}),writeFileSync(N,n.body);let a=S.chmod?.(n,N)??n.mode&511;if(a>0)try{chmodSync(N,a)}catch{}H.files.push(N);continue}if(n.type===`symlink`){mkdirSync(Po(N),{recursive:!0});try{symlinkSync(n.linkname,N),H.symlinks.push(N)}catch{writeFileSync(N,n.linkname),H.files.push(N)}continue}H.skipped++}return H}async function gunzip(n){let a=globalThis.DecompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.DecompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function gzip(n){let a=globalThis.CompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.CompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function drainStream(n){let a=[],S=0,C=n.getReader();for(;;){let{value:n,done:N}=await C.read();if(N)break;let F=n instanceof Uint8Array?n:new Uint8Array(n);a.push(F),S+=F.length}let N=new Uint8Array(S),F=0;for(let n of a)N.set(n,F),F+=n.length;return N}function stripComponents(n,a){if(a<=0)return n;let S=n.split(`/`).filter(n=>n!==``);return S.length<=a?null:S.slice(a).join(`/`)}function isInside(n,a){let S=Mo(a,n);return S!==``&&!S.startsWith(`..`)&&!Ao(S)}var aE=__esmMin(()=>{rE(),As(),Ho()}),oE=__exportAll$3({BLOCK_SIZE:()=>512,TarParseError:()=>TarParseError,createTarball:()=>createTarball,extractTarball:()=>extractTarball,gunzip:()=>gunzip,gzip:()=>gzip,parseTar:()=>parseTar}),sE=__esmMin(()=>{rE(),iE(),aE()});function gjsifyCacheRoot(n,a){let S=process.env.XDG_CACHE_HOME;return jo(S&&S.length>0?S:jo(homedir(),`.cache`),`gjsify`,n,a)}function atomicWrite(n,a){try{mkdirSync(jo(n,`..`),{recursive:!0});let S=`${n}.tmp.${process.pid}`;writeFileSync(S,a),renameSync(S,n)}catch{}}function readCacheFile(n){if(!existsSync(n))return null;try{let a=readFileSync(n);return a.length===0?null:a}catch{return null}}var cE=__esmMin(()=>{As(),Tf(),Ho()});function cacheRoot$1(){return gjsifyCacheRoot(`tarballs`,lE)}function parseSri(n){if(!n)return null;let a=n.indexOf(`-`);if(a<=0||a===n.length-1)return null;let S=n.slice(0,a),C=n.slice(a+1).replace(/=+$/,``),N;try{N=Buffer.from(C,`base64`).toString(`hex`)}catch{return null}return N.length<4?null:{algorithm:S,hex:N}}function pathFor$1(n){let a=parseSri(n);if(!a)return null;let S=a.hex.slice(0,2);return jo(cacheRoot$1(),a.algorithm,S,`${a.hex}.tgz`)}function getCachedTarball(n){let a=pathFor$1(n);return a?readCacheFile(a):null}function putCachedTarball(n,a){let S=pathFor$1(n);S&&(existsSync(S)||atomicWrite(S,a))}function npmCacacheContentDir(){let n=process.env.GJSIFY_NPM_CACHE;if(n!==void 0){let a=n.trim();return a===``||a===`0`||a===`false`?null:jo(a.endsWith(`_cacache`)?a:jo(a,`_cacache`),`content-v2`)}let a=process.env.npm_config_cache;return jo(a&&a.length>0?a:jo(homedir(),`.npm`),`_cacache`,`content-v2`)}function npmCachePathFor(n){let a=npmCacacheContentDir();if(!a)return null;let S=parseSri(n);return S?jo(a,S.algorithm,S.hex.slice(0,2),S.hex.slice(2,4),S.hex.slice(4)):null}function getForeignCachedTarball(n){let a=npmCachePathFor(n);return a?readCacheFile(a):null}var lE,uE=__esmMin(()=>{As(),Tf(),Ho(),cE(),lE=`v1`,__name$1(cacheRoot$1,`cacheRoot`),__name$1(pathFor$1,`pathFor`)});function isEnabled(){let n=process.env.GJSIFY_PACKUMENT_CACHE;if(n===void 0)return!0;let a=n.trim();return!(a===`0`||a===`false`||a===``)}function cacheRoot(){return gjsifyCacheRoot(`metadata`,dE)}function shardFor(n){let a=2166136261;for(let S=0;S<n.length;S++)a^=n.charCodeAt(S),a=Math.imul(a,16777619);return(a>>>0&255).toString(16).padStart(2,`0`)}function pathFor(n,a){if(!isEnabled())return null;let S=`${n}|${a}`,C=`${encodeURIComponent(n)}|${encodeURIComponent(a)}.json`;return jo(cacheRoot(),shardFor(S),C)}function getCachedPackument(n,a){let S=pathFor(n,a);if(!S)return null;let C=readCacheFile(S);if(!C)return null;try{let n=JSON.parse(C.toString(`utf-8`));return typeof n.etag!=`string`||!n.etag||!n.packument||typeof n.packument!=`object`?null:{etag:n.etag,packument:n.packument}}catch{return null}}function putCachedPackument(n,a,S,C){if(!S)return;let N=pathFor(n,a);N&&atomicWrite(N,JSON.stringify({etag:S,packument:C}))}var dE,fE=__esmMin(()=>{Ho(),cE(),dE=`v1`}),pE=__exportAll$3({installPackagesNative:()=>installPackagesNative,parseSpec:()=>parseSpec,pickVersion:()=>pickVersion});async function installPackagesNative(n){if(n.specs.length===0)throw Error(`installPackagesNative: empty specs list`);mkdirSync(n.prefix,{recursive:!0});let a=await loadNpmrc$1(n),S=makeLogger(n.verbose??!1),C=n.progress,N=jo(n.prefix,hE),F=readLockfile(N),I;if(n.frozen){if(!F)throw Error(`install: --immutable requires ${hE} at ${n.prefix} — none found. Run \`gjsify install\` (without --immutable) to generate one and commit it.`);let a=describeLockfileDrift(F,n.specs);if(a)throw Error(`install: --immutable but ${N} is stale.\n${a}\nRe-run \`gjsify install\` (without --immutable) to refresh the lockfile.`);S(`install: --immutable, using lockfile (%d package(s))`,Object.keys(F.packages).length),I=lockfileToNodes(F)}else F&&lockfileMatchesRequest(F,n.specs)?(S(`install: using lockfile (%d package(s))`,Object.keys(F.packages).length),I=lockfileToNodes(F)):(S(`install: resolving %d top-level spec(s) → %s`,n.specs.length,n.prefix),I=await resolveDeps(n.specs,a,S,n.overrides,n.skipDeps,n.signal,C),n.lockfile&&(writeLockfile(N,n.specs,I),S(`install: wrote %s (%d entries)`,hE,I.length)));return S(`install: downloading %d tarball(s)`,I.length),await downloadAndExtractAll(I,n.prefix,a,S,n.signal,C),await linkBins(I,n.prefix,S),S(`install: done`),topLevelResolutions(n.specs,I)}function errMsg(n){return n instanceof Error?n.message:String(n)}function topLevelResolutions(n,a){let S=new Map;for(let n of a)n.installPath===`node_modules/${n.name}`&&S.set(n.name,n);let C=[];for(let a of n){let n=parseSpecName(a),N=S.get(n);N&&C.push({name:N.name,version:N.version})}return C}function parseSpecName(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return n;let S=n.indexOf(`@`,a+1);return S===-1?n:n.slice(0,S)}let a=n.indexOf(`@`);return a===-1?n:n.slice(0,a)}async function resolveDeps(n,a,S,C,N,F,I){I?.beginPhase(`resolve`,n.length);let applyOverride=(n,a)=>{if(!C)return a;let N=C[n];return typeof N!=`string`||N.length===0||N===a?a:(S(`install: override %s %s → %s`,n,a,N),N)},H=new Map,fetchPkg=n=>{let C=H.get(n);if(C)return C;let N=fetchPackumentWithDiskCache(n,a,S,F);return H.set(n,N),N},W=new Map,K=new Map,q=n.map(parseSpec).map(n=>({from:null,name:n.name,range:applyOverride(n.name,n.range),required:!0}));for(;q.length>0;){let n=q.splice(0,q.length),a=[],C=new Set;for(let S of n)H.has(S.name)||C.has(S.name)||(C.add(S.name),a.push(S.name));await prefetchPackuments(a,fetchPkg,F);for(let a=0;a<n.length;a++){let C=n[a],F=findVisible(C.from,C.name,W);if(F&&satisfiesRange(F.version,C.range))continue;let H=null;try{let F=await fetchPkg(C.name);if(H=pickVersion(F,C.range),!H){if(!C.required)continue;throw Error(`No version of ${C.name} satisfies ${C.range}`)}let Y=F.versions[H];if(!Y)throw Error(`Packument for ${C.name} promised ${H} but no entry exists`);let X=decidePlacement(C.from,C.name,H,K),te={name:C.name,version:H,tarballUrl:Y.dist.tarball,integrity:Y.dist.integrity,installPath:X,dependencies:Y.dependencies??{},optionalDependencies:Y.optionalDependencies??{},bin:Y.bin};if(W.set(X,te),X===`node_modules/${C.name}`&&K.set(C.name,te),S(`resolve: %s@%s ← %s (at %s)`,C.name,H,C.range,X),I?.update({phase:`resolve`,current:W.size,total:W.size+(n.length-a-1)+q.length,name:`${C.name}@${H}`}),!N){for(let[n,a]of Object.entries(te.dependencies))q.push({from:X,name:n,range:applyOverride(n,a),required:!0});for(let[n,a]of Object.entries(te.optionalDependencies))q.push({from:X,name:n,range:applyOverride(n,a),required:!1})}}catch(n){if(!C.required){S(`resolve: optional dep %s@%s skipped (%s)`,C.name,C.range,n.message);continue}throw n}}}return I?.endPhase(`resolve`),Array.from(W.values())}async function fetchPackumentWithDiskCache(n,a,S,C){let N=registryFor(n,a),F=getCachedPackument(N,n),onRetry=({attempt:a,error:C,delayMs:N})=>{S(`packument %s: retry %d after %dms (%s)`,n,a,N,errMsg(C))},I=await fetchPackumentConditional(n,{npmrc:a,signal:C,ifNoneMatch:F?.etag,onRetry});return I.status===`not-modified`&&F?(S(`packument-cache-hit: %s (304, etag %s)`,n,F.etag),F.packument):I.status===`fresh`&&I.packument?(I.etag&&putCachedPackument(N,n,I.etag,I.packument),I.packument):fetchPackument(n,{npmrc:a,signal:C,onRetry})}async function prefetchPackuments(n,a,S){if(n.length===0)return;let C=0,N=Math.max(1,Math.min(mE,n.length)),worker=async()=>{for(;C<n.length;){if(S?.aborted)return;let N=n[C++];try{await a(N)}catch{}}};await Promise.all(Array.from({length:N},()=>worker()))}function findVisible(n,a,S){let C=[];if(n!==null){C.push(`${n}/node_modules/${a}`);let S=n;for(;;){let n=S.lastIndexOf(`/node_modules/`);if(n<0||(S=S.slice(0,n),C.push(`${S}/node_modules/${a}`),S===``))break}}C.push(`node_modules/${a}`);for(let n of C){let a=S.get(n);if(a)return a}return null}function decidePlacement(n,a,S,C){let N=C.get(a);return!N||N.version===S||n===null?`node_modules/${a}`:`${n}/node_modules/${a}`}function satisfiesRange(n,a){try{return satisfies(n,new $T(a))}catch{return!1}}function readLockfile(n){if(!existsSync(n))return null;try{let a=JSON.parse(readFileSync(n,`utf-8`));return a.lockfileVersion!==gE||!a.packages||typeof a.packages!=`object`?null:a}catch{return null}}function writeLockfile(n,a,S){let C={},N=[...S].sort((n,a)=>n.installPath<a.installPath?-1:+(n.installPath>a.installPath));for(let n of N)C[n.installPath]={version:n.version,resolved:n.tarballUrl,integrity:n.integrity,dependencies:Object.keys(n.dependencies).length>0?n.dependencies:void 0,bin:n.bin};let F={lockfileVersion:gE,requested:[...a],packages:C};writeFileSync(n,JSON.stringify(F,null,2)+`
|
|
788
|
+
`:``)}function detectIndent$1(n){let a=n.match(/^\{\n( +)/);return a?a[1].length:2}__name$1(detectIndent$1,`detectIndent`),je(),As(),Gb(),Yc();const UT=promisify(execFile),WT={command:`diff`,description:`Compare the per-app Flathub tracking-repo manifest against the local git state and report version / commit drift.`,builder:n=>n.version(!1).option(`version`,{description:"Local version to compare against. Default: `git describe --tags --abbrev=0` in cwd.",type:`string`}).option(`app-id`,{description:"Reverse-DNS app id. Default: `gjsify.flatpak.appId`.",type:`string`}).option(`flathub-repo`,{description:"Flathub tracking-repo (owner/name). Default: `gjsify.flatpak.flathubRepo` or `flathub/<appId>`.",type:`string`}).option(`against`,{description:`Read the Flathub manifest from a local file instead of fetching it. Useful in CI or offline.`,type:`string`}).option(`detail`,{description:`Also print the full Flathub manifest source entry alongside the resolved local version.`,type:`boolean`,default:!1}).option(`source-index`,{description:`Index into modules[0].sources[] to inspect (when the manifest has multiple sources).`,type:`number`}).option(`verbose`,{description:`Echo fetch URL + resolved values.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},C=n.appId??S.appId??readPackageJson(a).name;if(!C)throw Error(`[gjsify flatpak diff] no app id available — pass --app-id or set gjsify.flatpak.appId.`);let N=n.flathubRepo??S.flathubRepo??`flathub/${C}`,F=n.version??await resolveLatestTag(a,n.verbose),I=await loadFlathubSource({appId:C,flathubRepo:N,against:n.against,verbose:n.verbose},n.sourceIndex),H=I?.tag,W=I?.commit;if(Ae.log(`[gjsify flatpak diff] appId=${C}`),Ae.log(`[gjsify flatpak diff] flathubRepo=${N}`),Ae.log(`[gjsify flatpak diff] flathub: tag=${H??`(missing)`} commit=${W??`(missing)`}`),Ae.log(`[gjsify flatpak diff] local: tag=${F??`(none)`}`),n.detail&&I&&(Ae.log(`[gjsify flatpak diff] flathub manifest source:`),Ae.log(JSON.stringify(I,null,2))),!F){Ae.warn("[gjsify flatpak diff] no local git tag found — cut a release (`git tag vX.Y.Z`) or pass --version vX.Y.Z to compare against an explicit value.");return}if(H||(Ae.warn("[gjsify flatpak diff] flathub manifest has no `tag` field on the inspected source."),process.exit(1)),H===F){Ae.log(`✅ in sync (${F})`);return}Ae.log(`❌ drift detected — flathub=${H} vs local=${F}`),Ae.log(` run \`gjsify flatpak sync-flathub --version ${F}\` to update the Flathub manifest.`),process.exit(1)}};async function loadFlathubSource(n,a){let S;if(n.against){if(!existsSync(n.against))throw Error(`[gjsify flatpak diff] --against path ${n.against} does not exist`);S=readFileSync(n.against,`utf-8`)}else S=await fetchFlathubManifest(n.flathubRepo,n.appId,n.verbose);let C;try{C=JSON.parse(S)}catch(n){throw Error(`[gjsify flatpak diff] failed to parse Flathub manifest as JSON: ${n.message}`)}let N=(C.modules??[])[0]?.sources??[];if(N.length===0)return null;let F=a??N.findIndex(n=>n?.type===`git`);return F<0||F>=N.length?null:N[F]??null}async function fetchFlathubManifest(n,a,S){for(let C of[`master`,`main`]){let N=`https://raw.githubusercontent.com/${n}/${C}/${a}.json`;S&&Ae.log(`[gjsify flatpak diff] fetch ${N}`);try{let n=await fetch(N);if(n.ok)return await n.text();S&&Ae.log(`[gjsify flatpak diff] ${C} → HTTP ${n.status}`)}catch(n){S&&Ae.log(`[gjsify flatpak diff] ${C} fetch error: ${n.message}`)}}throw Error(`[gjsify flatpak diff] could not fetch flathub manifest from ${n} on master or main`)}async function resolveLatestTag(n,a){try{let{stdout:S}=await UT(`git`,[`describe`,`--tags`,`--abbrev=0`],{cwd:n}),C=S.trim();return a&&Ae.log(`[gjsify flatpak diff] local latest tag → ${C}`),C||null}catch{return null}}je(),Gb(),Yc(),nn(),Ho();const GT=promisify(execFile),KT={command:`release <version>`,description:"Cut a release end-to-end: regenerate Flathub assets, run linters, create + push the git tag, then open the Flathub PR. Each step delegates to the equivalent `gjsify flatpak <sub>` command.",builder:n=>n.version(!1).positional(`version`,{description:"Release tag, e.g. `v0.6.6`.",type:`string`,demandOption:!0}).option(`skip-init`,{description:"Skip the `flatpak init --force` regen step.",type:`boolean`,default:!1}).option(`skip-check`,{description:"Skip the `flatpak check` linter step.",type:`boolean`,default:!1}).option(`skip-tag`,{description:"Skip the `git tag` + `git push --tags` step (use when the tag was already created out-of-band).",type:`boolean`,default:!1}).option(`push-tag`,{description:`Push the created tag after creating it. Default: true.`,type:`boolean`,default:!0}).option(`flathub-repo`,{description:`Flathub tracking-repo override forwarded to sync-flathub.`,type:`string`}).option(`dry-run`,{description:`Print each step that would run without executing any of them.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every sub-command invocation.`,type:`boolean`,default:!1}),handler:async n=>{let a=typeof n.version==`string`?n.version.trim():``;if(!a)throw Error(`[gjsify flatpak release] missing <version> positional`);let S=resolveCliEntry(),C=process.cwd(),N=[];n.skipInit||N.push({name:`init`,args:[S,`flatpak`,`init`,`--force`]}),n.skipCheck||N.push({name:`check`,args:[S,`flatpak`,`check`]});let F=[S,`flatpak`,`sync-flathub`,`--version`,a];if(n.flathubRepo&&F.push(`--flathub-repo`,n.flathubRepo),n.verbose&&F.push(`--verbose`),Ae.log(`[gjsify flatpak release] starting release of ${a}`),n.dryRun){Ae.log(`[gjsify flatpak release] --dry-run set; printing plan only:`);for(let n of N)Ae.log(` · ${n.name}: node ${n.args.join(` `)}`);n.skipTag||Ae.log(` · tag: git tag ${a}${n.pushTag===!1?``:` && git push origin `+a}`),Ae.log(` · sync: node ${F.join(` `)}`);return}for(let a of N)n.verbose&&Ae.log(`[gjsify flatpak release] step ${a.name}: node ${a.args.join(` `)}`),await runNode(a.args,C),Ae.log(`[gjsify flatpak release] ${a.name} ✔`);if(!n.skipTag){n.verbose&&Ae.log(`[gjsify flatpak release] git tag ${a}`);try{await GT(`git`,[`tag`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag ${a} created`)}catch(n){throw Error(`[gjsify flatpak release] git tag failed (${n.message}). If the tag already exists, re-run with --skip-tag.`)}n.pushTag!==!1&&(n.verbose&&Ae.log(`[gjsify flatpak release] git push origin ${a}`),await GT(`git`,[`push`,`origin`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag pushed`))}n.verbose&&Ae.log(`[gjsify flatpak release] sync: node ${F.join(` `)}`),await runNode(F,C),Ae.log(`[gjsify flatpak release] ✅ release ${a} complete`)}};function resolveCliEntry(){return Oo(Oo(Po(fileURLToPath(import.meta.url)),`..`,`..`),`index.js`)}async function runNode(n,a){await new Promise((S,C)=>{let N=spawn(`node`,n,{cwd:a,stdio:`inherit`});N.on(`error`,C),N.on(`exit`,a=>{a===0?S():C(Error(`sub-command exited with code ${a}: node ${n.join(` `)}`))})})}const qT={command:`flatpak <subcommand>`,description:`Flatpak toolchain: init/build/deps/ci/check/sync-flathub/diff/release subcommands for shipping GJS apps and CLIs as Flatpaks.`,builder:n=>n.command(IT.command,IT.description,IT.builder,IT.handler).command(LT.command,LT.description,LT.builder,LT.handler).command(RT.command,RT.description,RT.builder,RT.handler).command(zT.command,zT.description,zT.builder,zT.handler).command(BT.command,BT.description,BT.builder,BT.handler).command(HT.command,HT.description,HT.builder,HT.handler).command(WT.command,WT.description,WT.builder,WT.handler).command(KT.command,KT.description,KT.builder,KT.handler).demandCommand(1).strict()};As(),Ho();const JT=/^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;function parseSpec$1(n){if(!n)throw Error(`dlx: empty package spec`);if(n.startsWith(`./`)||n.startsWith(`../`)||Ao(n)||existsSync(n))return{kind:`local`,path:Oo(n)};let a=n,S,C=n.lastIndexOf(`@`);if(C>0&&(a=n.slice(0,C),S=n.slice(C+1)),!JT.test(a))throw Error(`dlx: invalid package name "${a}"`);return{kind:`registry`,name:a,version:S,spec:n}}__name$1(parseSpec$1,`parseSpec`),As(),Ho();function resolveGjsEntry(n,a){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`dlx: no package.json found at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=C.gjsify?.bin,F=C.gjsify?.main,I=C.main,H,W=null,K=!1;if(a!==null){if(!N||!N[a]){let S=N?Object.keys(N).join(`, `):`(none)`;throw Error(`dlx: package "${C.name??n}" has no GJS bin named "${a}" — known: ${S}`)}H=N[a],W=a}else if(N&&Object.keys(N).length===1){let n=Object.keys(N)[0];H=N[n],W=n}else F?H=F:I&&(H=I,K=!0);if(N&&Object.keys(N).length>1&&a===null){let a=Object.keys(N).join(`, `);throw Error(`dlx: package "${C.name??n}" defines multiple GJS bins — pass one of: ${a}`)}if(!H)throw Error(`dlx: package "${C.name??n}" has no GJS entry — set \`gjsify.main\` (or \`gjsify.bin\`) in its package.json`);let q=Oo(n,H);if(!existsSync(q))throw Error(`dlx: GJS entry not found: ${q}`);return{bundlePath:q,binName:W,fromFallback:K}}Ga(),As(),Tf(),Ho();function lexCompare(n,a){return n<a?-1:+(n>a)}function createCacheKey(n){let a=[...n.packages].sort(lexCompare),S=Object.entries(n.registries??{}).sort(([n],[a])=>lexCompare(n,a)),C=JSON.stringify([a,S]);return createHash(`sha256`).update(C).digest(`hex`)}function dlxCacheRoot(){let n=process.env.XDG_CACHE_HOME,a=jo(n&&n.length>0?n:jo(homedir(),`.cache`),`gjsify`,`dlx`);return mkdirSync(a,{recursive:!0}),a}function cacheDirFor(n){let a=jo(dlxCacheRoot(),n);return mkdirSync(a,{recursive:!0}),a}function makePrepareDir(n){let a=jo(n,`${Date.now().toString(16)}-${process.pid.toString(16)}`);return mkdirSync(a,{recursive:!0}),a}function getValidCachedPkg(n,a=10080){let S=jo(n,`pkg`),C;try{C=lstatSync(S)}catch(n){if(n.code===`ENOENT`)return;throw n}if(!C.isSymbolicLink())return;let N;try{N=realpathSync(S)}catch{return}return Date.now()-C.mtime.getTime()<=a*6e4?N:void 0}function symlinkSwap(n,a){let S=jo(n,`pkg`),C=jo(n,`pkg.tmp-${Date.now().toString(16)}-${process.pid.toString(16)}`);symlinkSync(a,C,`dir`);try{renameSync(C,S)}catch(n){let a=n.code;if(a===`EBUSY`||a===`EPERM`||a===`EEXIST`){try{rmSync(C)}catch{}return realpathSync(S)}throw n}return realpathSync(S)}function resolveInstalledPkgDir(n,a){return Oo(n,`node_modules`,a)}const YT={resolve:`resolving`,download:`downloading`,extract:`extracting`,link:`linking bins`},XT={update(){},beginPhase(){},endPhase(){}};function makeProgressReporter(n={}){if(n.enabled===!1)return XT;let a=n.stream??process.stderr,S=!!a.isTTY;return n.enabled??!0?S?makeTtyReporter(a):makePlainReporter(a):XT}function makeTtyReporter(n){let a=0,S=``;function render(C,N=!1){let F=Date.now();!N&&F-a<33&&C===S||(a=F,S=C,n.write(`\r\x1B[2K`+C))}function clearLine(){n.write(`\r\x1B[2K`),S=``}return{beginPhase(a,S){render(formatBar(a,0,S,void 0,n.columns??80),!0)},update(a){render(formatBar(a.phase,a.current,a.total,a.name,n.columns??80))},endPhase(a){let S=YT[a];clearLine(),n.write(`gjsify install: ${S} done\n`)}}}function makePlainReporter(n){return{beginPhase(a,S){n.write(`gjsify install: ${YT[a]} ${S} package(s)\n`)},update(){},endPhase(a){n.write(`gjsify install: ${YT[a]} done\n`)}}}function formatBar(n,a,S,C,N){let F=YT[n],I=S>0?Math.min(1,a/S):0,H=`${a}/${S}`,W=`gjsify install: ${F} `,K=` ${H}`+(C?` ${C}`:``),q=Math.max(8,Math.min(40,N-W.length-K.length-4)),Y=Math.round(I*q),X=`█`.repeat(Y)+`░`.repeat(q-Y),te=`${W}[${X}]${K}`;if(te.length>N){let n=te.length-N+1,a=C&&C.length>n?C.slice(0,C.length-n-1)+`…`:``;te=`${W}[${X}] ${H}${a?` `+a:``}`}return te}function parse(n){try{return new SemVer(n)}catch{return null}}function compare(n,a){let S=n instanceof SemVer?n:new SemVer(n),C=a instanceof SemVer?a:new SemVer(a);return S.compare(C)}function satisfies(n,a){let S=a instanceof $T?a:new $T(a),C=n instanceof SemVer?n:parse(String(n));return C?S.test(C):!1}function maxSatisfying(n,a){let S=a instanceof $T?a:new $T(a),C=null;for(let a of n){let n=parse(a);!n||!S.test(n)||(C===null||n.compare(C)>0)&&(C=n)}return C?C.version:null}function testComparator(n,a){if(n.semver===null)return!0;let S=a.compare(n.semver);switch(n.operator){case``:case`=`:return S===0;case`<`:return S<0;case`<=`:return S<=0;case`>`:return S>0;case`>=`:return S>=0}}function formatComparator(n){return n.semver===null?`*`:`${n.operator}${n.semver.version}`}function parseRangePart(n){let a=n.trim();if(a===``||a===`*`||a.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=a.match(/^\s*(\S+)\s+-\s+(\S+)\s*$/);if(S)return hyphenRange(S[1],S[2]);let C=a.replace(/(<=|>=|<|>|=)\s+(?=\S)/g,`$1`).split(/\s+/),N=[];for(let n of C)N.push(...parseSimple(n));return N}function parseSimple(n){if(n===`*`||n===``||n.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];if(n.startsWith(`^`))return caretRange(n.slice(1));if(n.startsWith(`~`))return tildeRange(n.slice(1).replace(/^>/,``));let a=n.match(/^(<=|>=|<|>|=)\s*(.+)$/);if(a){let n=a[1];return primitiveRange(n,a[2])}return partialRange(n)}function parsePartial(n){let a=n.trim().replace(/^v/,``);if(a===``||a===`*`)return{major:null,minor:null,patch:null,pre:``,build:``};let S=``,C=``,N=a,F=N.indexOf(`+`);F>=0&&(C=N.slice(F+1),N=N.slice(0,F));let I=N.indexOf(`-`);I>=0&&(S=N.slice(I+1),N=N.slice(0,I));let H=N.split(`.`),xr=a=>{if(a===void 0||a===``||a===`x`||a===`X`||a===`*`)return null;if(!/^\d+$/.test(a))throw TypeError(`Invalid partial version: ${n}`);return Number(a)};return{major:xr(H[0]),minor:xr(H[1]),patch:xr(H[2]),pre:S,build:C}}function partialToVersion(n){return`${n.major??0}.${n.minor??0}.${n.patch??0}${n.pre?`-${n.pre}`:``}${n.build?`+${n.build}`:``}`}function partialRange(n){let a=parsePartial(n);return a.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:a.minor===null?[{operator:`>=`,semver:new SemVer(`${a.major}.0.0`)},{operator:`<`,semver:new SemVer(`${a.major+1}.0.0`)}]:a.patch===null?[{operator:`>=`,semver:new SemVer(`${a.major}.${a.minor}.0`)},{operator:`<`,semver:new SemVer(`${a.major}.${a.minor+1}.0`)}]:[{operator:`=`,semver:new SemVer(partialToVersion(a))}]}function caretRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C;return C=a.major>0||a.minor===null?`${a.major+1}.0.0`:a.minor>0||a.patch===null?`0.${a.minor+1}.0`:`0.0.${a.patch+1}`,[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function tildeRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C=a.minor===null?`${a.major+1}.0.0`:`${a.major}.${a.minor+1}.0`;return[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function primitiveRange(n,a){let S=parsePartial(a);return S.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:n===`=`||n===``?partialRange(a):n===`>`?S.minor===null?[{operator:`>=`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`>`,semver:new SemVer(partialToVersion(S))}]:n===`<`?S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor}.0`)}]:[{operator:`<`,semver:new SemVer(partialToVersion(S))}]:n===`>=`?[{operator:`>=`,semver:new SemVer(partialToVersion(S))}]:S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`<=`,semver:new SemVer(partialToVersion(S))}]}function hyphenRange(n,a){let S=parsePartial(n),C=parsePartial(a),N=S.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor??0}.${S.patch??0}${S.pre?`-${S.pre}`:``}`)},F;return F=C.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:C.minor===null?{operator:`<`,semver:new SemVer(`${C.major+1}.0.0`)}:C.patch===null?{operator:`<`,semver:new SemVer(`${C.major}.${C.minor+1}.0`)}:{operator:`<=`,semver:new SemVer(`${C.major}.${C.minor}.${C.patch}${C.pre?`-${C.pre}`:``}`)},[N,F]}var ZT,QT,SemVer,$T,eE=__esmMin(()=>{ZT=/^(0|[1-9]\d*)$/,QT=/^(\d+)\.(\d+)\.(\d+)(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/,SemVer=class{major;minor;patch;prerelease;build;version;constructor(n){let a=String(n).trim().replace(/^v/,``),S=QT.exec(a);if(!S)throw TypeError(`Invalid Version: ${n}`);this.major=Number(S[1]),this.minor=Number(S[2]),this.patch=Number(S[3]),this.prerelease=S[4]?S[4].split(`.`).map(n=>ZT.test(n)?Number(n):n):[],this.build=S[5]?S[5].split(`.`):[],this.version=`${this.major}.${this.minor}.${this.patch}`+(this.prerelease.length?`-${this.prerelease.join(`.`)}`:``)+(this.build.length?`+${this.build.join(`.`)}`:``)}compare(n){return this.major===n.major?this.minor===n.minor?this.patch===n.patch?this.comparePre(n):this.patch<n.patch?-1:1:this.minor<n.minor?-1:1:this.major<n.major?-1:1}comparePre(n){let a=this.prerelease,S=n.prerelease;if(a.length===0&&S.length===0)return 0;if(a.length===0)return 1;if(S.length===0)return-1;for(let n=0;;n++){let C=a[n],N=S[n];if(C===void 0&&N===void 0)return 0;if(N===void 0)return 1;if(C===void 0)return-1;if(C===N)continue;let F=typeof C==`number`,I=typeof N==`number`;return F&&!I?-1:!F&&I?1:C<N?-1:1}}toString(){return this.version}},$T=class Range{raw;set;constructor(n){if(n instanceof Range){this.raw=n.raw,this.set=n.set;return}this.raw=String(n).trim();let a=this.raw.split(/\s*\|\|\s*/),S=[];for(let n of a){let a=parseRangePart(n);if(a.length===0)throw TypeError(`Invalid range: ${this.raw}`);S.push(a)}if(S.length===0)throw TypeError(`Invalid range: ${this.raw}`);this.set=S}test(n){let a=n instanceof SemVer?n:parse(String(n));if(!a)return!1;for(let n of this.set)if(n.every(n=>testComparator(n,a))){if(a.prerelease.length>0&&!n.some(n=>n.semver!==null&&n.semver.prerelease.length>0&&n.semver.major===a.major&&n.semver.minor===a.minor&&n.semver.patch===a.patch))continue;return!0}return!1}format(){return this.set.map(n=>n.map(formatComparator).join(` `)).join(` || `)}toString(){return this.format()}}});function assertPackument(n,a){if(!a||typeof a!=`object`)throw TypeError(`registry: ${n} packument is not an object`);let S=a;if(typeof S.name!=`string`)throw TypeError(`registry: ${n} packument missing string name`);if(!S.versions||typeof S.versions!=`object`)throw TypeError(`registry: ${n} packument missing versions map`)}function registryFor(n,a){if(a&&n.startsWith(`@`)){let S=n.slice(0,n.indexOf(`/`)),C=a.scopes[S];if(C)return ensureTrailingSlash$1(C)}return a?.registry?ensureTrailingSlash$1(a.registry):tE}function packumentUrl(n,a){let S=ensureTrailingSlash$1(a);if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a<0)throw TypeError(`Invalid scoped package name: ${n}`);let C=n.slice(0,a),N=n.slice(a+1);return`${S}${encodeURIComponent(C)}/${encodeURIComponent(N)}`}return`${S}${encodeURIComponent(n)}`}async function fetchPackumentConditional(n,a={}){let S=packumentUrl(n,a.registry??registryFor(n,a.npmrc)),C=buildHeaders(S,{...a,acceptEncoding:`gzip`});C.accept??=`application/vnd.npm.install-v1+json`,a.ifNoneMatch&&(C[`if-none-match`]=a.ifNoneMatch);let N=await fetchWithRetry(S,{headers:C,signal:a.signal,compress:!1},{fetch:a.fetch,retries:a.retries,retryDelayMs:a.retryDelayMs,timeoutMs:a.timeoutMs,onRetry:a.onRetry});if(N.status===304){try{await N.arrayBuffer()}catch{}return{status:`not-modified`,etag:a.ifNoneMatch}}if(!N.ok)throw N.status===404||N.status===406?new PackageNotFoundError(n,S):Error(`registry GET ${S} -> ${N.status} ${N.statusText}`);let F=N.headers.get(`etag`)??void 0,I=await decodeJsonBody(N);return assertPackument(n,I),{status:`fresh`,packument:I,etag:F}}async function decodeJsonBody(n){let a=new Uint8Array(await n.arrayBuffer()),S=a.length>=2&&a[0]===31&&a[1]===139?await gunzip$1(a):a;return JSON.parse(new TextDecoder().decode(S))}async function gunzip$1(n){let a=globalThis.DecompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/npm-registry: globalThis.DecompressionStream is unavailable — cannot decode a gzip registry response (on GJS, register '@gjsify/compression-streams')`);let S=new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)).getReader(),C=[],N=0;for(;;){let{value:n,done:a}=await S.read();if(a)break;let F=n instanceof Uint8Array?n:new Uint8Array(n);C.push(F),N+=F.length}let F=new Uint8Array(N),I=0;for(let n of C)F.set(n,I),I+=n.length;return F}async function fetchPackument(n,a={}){let S=await fetchPackumentConditional(n,a);if(!S.packument)throw Error(`registry: ${n} returned 304 Not Modified to an unconditional request`);return S.packument}async function fetchTarball(n,a={}){let S=buildHeaders(n,{...a,acceptEncoding:`identity`});S.accept??=`application/octet-stream`;let C=await fetchWithRetry(n,{headers:S,signal:a.signal},{fetch:a.fetch,retries:a.retries,retryDelayMs:a.retryDelayMs,timeoutMs:a.timeoutMs,onRetry:a.onRetry,retryNotFound:a.retryNotFound??!0});if(!C.ok)throw Error(`tarball GET ${n} -> ${C.status} ${C.statusText}`);let N=new Uint8Array(await C.arrayBuffer());if(a.integrity&&!await verifyIntegrity(N,a.integrity))throw new IntegrityError(n,a.integrity);return N}async function fetchWithRetry(n,a,S){let C=S.fetch??globalThis.fetch;if(!C)throw Error(`@gjsify/npm-registry: globalThis.fetch is missing`);let N=Math.max(0,S.retries??3),F=Math.max(0,S.retryDelayMs??250),I=Math.max(0,S.timeoutMs??3e4),H=S.retryNotFound??!1,W=0,K,q=0;for(;;){if(a.signal?.aborted)throw signalAbortError(a.signal);let Y=I>0?new AbortController:null,X=Y===null?null:setTimeout(()=>Y.abort(Error(`@gjsify/npm-registry: per-request timeout ${I}ms`)),I),te=composeSignals(a.signal,Y?.signal);try{let S=await C(n,{...a,signal:te}),F=isRetryableStatus(S.status)||H&&S.status===404;if(S.ok||!F||W>=N)return S;try{await S.arrayBuffer()}catch{}K=Error(`HTTP ${S.status} ${S.statusText}`)}catch(S){let C=Y!==null&&Y.signal.aborted,F=a.signal?.aborted===!0;if(C&&!F){if(q++,W>=N)throw new RegistryTimeoutError(n,I,q);K=S}else if(F)throw signalAbortError(a.signal);else{if(!isRetryableError(S)||W>=N)throw S;K=S}}finally{X!==null&&clearTimeout(X)}let ne=Math.min(F*2**W,8e3);S.onRetry?.({attempt:W+1,error:K,delayMs:ne}),await delay(ne,a.signal),W++}}function composeSignals(n,a){return n?a?AbortSignal.any([n,a]):n:a}function isRetryableStatus(n){return n===408||n===425||n===429||n===500||n===502||n===503||n===504||n===521||n===522||n===524||n===525}function isRetryableError(n){if(n&&typeof n==`object`&&`name`in n&&n.name===`AbortError`)return!1;if(n instanceof TypeError)return!0;if(n&&typeof n==`object`&&`name`in n){let a=n.name;if(a===`FetchError`)return!0;if(a===`AbortError`)return!1}let a=n?.cause;if(a&&typeof a==`object`&&`code`in a){let n=a.code;if(typeof n==`string`)return n===`ECONNRESET`||n===`ECONNREFUSED`||n===`ENETUNREACH`||n===`ENOTFOUND`||n===`ETIMEDOUT`||n===`EAI_AGAIN`||n===`UND_ERR_SOCKET`||n===`UND_ERR_CONNECT_TIMEOUT`}return!1}function delay(n,a){return n<=0?Promise.resolve():new Promise((S,C)=>{let N=setTimeout(()=>{a?.removeEventListener?.(`abort`,onAbort),S()},n),onAbort=()=>{clearTimeout(N),C(signalAbortError(a))};if(a?.aborted){clearTimeout(N),C(signalAbortError(a));return}a?.addEventListener?.(`abort`,onAbort,{once:!0})})}function signalAbortError(n){let a=n&&`reason`in n?n.reason:void 0;if(a instanceof Error)return a;let S=Error(`Aborted`);return S.name=`AbortError`,S}async function verifyIntegrity(n,a){let S=a.trim().split(/\s+/);for(let a of S){let S=a.indexOf(`-`);if(S<0)continue;let C=a.slice(0,S).toLowerCase(),N=a.slice(S+1),F=globalThis.crypto?.subtle;if(!F)throw Error(`@gjsify/npm-registry: globalThis.crypto.subtle is missing`);let I=subriToWebCryptoAlgo(C);if(!I)continue;let H=await F.digest(I,dataAsArrayBuffer(n));if(bytesToBase64(new Uint8Array(H))===N)return!0}return!1}function subriToWebCryptoAlgo(n){switch(n){case`sha1`:return`SHA-1`;case`sha256`:return`SHA-256`;case`sha384`:return`SHA-384`;case`sha512`:return`SHA-512`;default:return null}}function dataAsArrayBuffer(n){if(n.byteOffset===0&&n.byteLength===n.buffer.byteLength)return n.buffer;let a=new Uint8Array(n.byteLength);return a.set(n),a.buffer}function bytesToBase64(n){let a=``;for(let S=0;S<n.length;S++)a+=String.fromCharCode(n[S]);return btoa(a)}function parseNpmrc(n){let a={registry:tE,scopes:{},authTokens:{},basicAuth:{}},S=n.split(/\r?\n/),C={};for(let n of S){let S=n.replace(/^\s+|\s+$/g,``);if(!S||S.startsWith(`#`)||S.startsWith(`;`))continue;let N=S.indexOf(`=`);if(N<0)continue;let F=S.slice(0,N).trim(),I=expandEnv(stripQuotes(S.slice(N+1).trim()));if(F===`registry`){a.registry=ensureTrailingSlash$1(I);continue}let H=F.match(/^(@[^:]+):registry$/);if(H){a.scopes[H[1]]=ensureTrailingSlash$1(I);continue}let W=F.match(/^\/\/(.+):_authToken$/);if(W){a.authTokens[normalizeAuthHost(W[1])]=I;continue}let K=F.match(/^\/\/(.+):username$/);if(K){(C[normalizeAuthHost(K[1])]??={}).user=I;continue}let q=F.match(/^\/\/(.+):_password$/);if(q){let n=base64Decode(I);(C[normalizeAuthHost(q[1])]??={}).pass=n;continue}}for(let[n,S]of Object.entries(C))S.user&&S.pass!==void 0&&(a.basicAuth[n]={username:S.user,password:S.pass});return a}function buildHeaders(n,a){let S={"user-agent":`gjsify-install/0.3.7`,"accept-encoding":a.acceptEncoding??`identity`};if(a.npmrc){let C=resolveAuthForUrl(n,a.npmrc);C&&(S.authorization=C)}if(a.headers)for(let[n,C]of Object.entries(a.headers))S[n.toLowerCase()]=C;return S}function resolveAuthForUrl(n,a){let S=pathPrefixes(new URL(n));for(let n of S){let S=a.authTokens[n];if(S)return`Bearer ${S}`;let C=a.basicAuth[n];if(C)return`Basic ${btoa(`${C.username}:${C.password}`)}`}return null}function pathPrefixes(n){let a=n.pathname.split(`/`).filter(Boolean),S=[];for(let C=a.length;C>=0;C--){let N=a.slice(0,C).join(`/`);S.push(N?`//${n.host}/${N}`:`//${n.host}`)}return S}function normalizeAuthHost(n){return`//${n.replace(/\/+$/,``)}`}function ensureTrailingSlash$1(n){return n.endsWith(`/`)?n:n+`/`}function stripQuotes(n){return n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`)?n.slice(1,-1):n}function expandEnv(n){return n.replace(/\$\{([A-Z0-9_]+)\}/gi,(n,a)=>globalThis.process?.env?.[a]??``)}function base64Decode(n){return atob(n)}async function whoami(n,a){let S=`${ensureTrailingSlash$1(n)}-/whoami`,C=buildHeaders(S,{npmrc:a});C.accept=`application/json`;let N=globalThis.fetch;if(!N)throw Error(`@gjsify/npm-registry: globalThis.fetch is missing`);let F=await N(S,{method:`GET`,headers:C});if(!F.ok)throw Error(`whoami GET ${S} -> ${F.status} ${F.statusText}`);let I=await F.json();if(I&&typeof I==`object`&&`username`in I){let n=I.username;if(typeof n==`string`&&n.length>0)return{username:n}}return{}}var tE,PackageNotFoundError,IntegrityError,RegistryTimeoutError,nE=__esmMin(()=>{tE=`https://registry.npmjs.org/`,__name$1(gunzip$1,`gunzip`),__name$1(ensureTrailingSlash$1,`ensureTrailingSlash`),PackageNotFoundError=class extends Error{name;url;constructor(n,a){super(`Package not found in registry: ${n} (${a})`),this.name=n,this.url=a,this.name=`PackageNotFoundError`}},IntegrityError=class extends Error{url;integrity;constructor(n,a){super(`Tarball integrity mismatch for ${n} (expected ${a})`),this.url=n,this.integrity=a,this.name=`IntegrityError`}},RegistryTimeoutError=class extends Error{url;timeoutMs;attempts;constructor(n,a,S){let C=Math.round(a/100)/10,N=Math.round(a*S/100)/10;super(`@gjsify/npm-registry: GET ${n} timed out after ${C}s × ${S} attempt(s) (total ~${N}s). This usually means the registry CDN is slow or unreachable.`),this.url=n,this.timeoutMs=a,this.attempts=S,this.name=`RegistryTimeoutError`}}});function parseTar(n){let a=[],S=null,C=null,N=null,F=0;for(;F+512<=n.length;){let I=n.subarray(F,F+512);if(allZeros(I)){let a=n.subarray(F+512,F+2*512);if(a.length===512&&allZeros(a))break;F+=512;continue}if(!validateChecksum(I))throw new TarParseError(`Bad header checksum at offset ${F} — file is not a valid tar archive`);let H=readString(I,0,100),W=parseOctal(I,100,8),K=parseOctal(I,124,12),q=parseOctal(I,136,12),Y=String.fromCharCode(I[156]||0),X=readString(I,157,100),te=readString(I,257,6),ne=readString(I,345,155),re=readString(I,265,32),ie=readString(I,297,32);F+=512;let ae=n.subarray(F,F+K);if(F+=alignToBlock(K),Y===`x`){S=parsePaxRecords(ae);continue}if(Y===`g`)continue;if(Y===`L`){C=bytesToString(ae).replace(/\0+$/,``);continue}if(Y===`K`){N=bytesToString(ae).replace(/\0+$/,``);continue}let oe=H;te===`ustar`&&ne!==``&&(oe=`${ne}/${H}`),C!==null&&(oe=C,C=null);let Z=X;if(N!==null&&(Z=N,N=null),S!==null){let C=S.get(`path`);C!==void 0&&(oe=C);let N=S.get(`linkpath`);N!==void 0&&(Z=N);let I=S.get(`size`);if(I!==void 0){let C=Number(I);if(Number.isFinite(C)){let N=F-alignToBlock(K),I=n.subarray(N,N+C);F=N+alignToBlock(C),S=null,a.push(buildEntry(oe,Z,Y,W,q,re,ie,I));continue}}S=null}a.push(buildEntry(oe,Z,Y,W,q,re,ie,ae))}return a}function buildEntry(n,a,S,C,N,F,I,H){return{name:n,linkname:a,type:typeflagToType(S,n),mode:C,mtime:N,body:H,uname:F,gname:I}}function typeflagToType(n,a){switch(n){case`0`:case`\0`:case``:return a.endsWith(`/`)?`directory`:`file`;case`1`:return`hardlink`;case`2`:return`symlink`;case`5`:return`directory`;case`x`:return`pax-header`;case`g`:return`pax-global`;case`L`:return`gnu-longname`;case`K`:return`gnu-longlink`;default:return`unknown`}}function parsePaxRecords(n){let a=new Map,S=0;for(;S<n.length;){let C=S;for(;C<n.length&&n[C]!==32;)C++;if(C>=n.length)break;let N=bytesToString(n.subarray(S,C)),F=Number(N);if(!Number.isFinite(F)||F<=0)break;let I=S+F;if(I>n.length)break;let H=bytesToString(n.subarray(C+1,I-1)),W=H.indexOf(`=`);if(W>0){let n=H.slice(0,W),S=H.slice(W+1);a.set(n,S)}S=I}return a}function readString(n,a,S){let C=a,N=a+S;for(;C<N&&n[C]!==0;)C++;return bytesToString(n.subarray(a,C))}function bytesToString(n){return new TextDecoder(`utf-8`,{fatal:!1}).decode(n)}function parseOctal(n,a,S){if(S>0&&n[a]&128){let C=n[a]&127;for(let N=1;N<S;N++)C=C*256+n[a+N];return C}let C=``;for(let N=0;N<S;N++){let S=n[a+N];S===0||S===32||(C+=String.fromCharCode(S))}return C===``?0:parseInt(C,8)}function alignToBlock(n){return Math.ceil(n/512)*512}function allZeros(n){for(let a=0;a<n.length;a++)if(n[a]!==0)return!1;return!0}function validateChecksum(n){let a=parseOctal(n,148,8),S=0,C=0;for(let a=0;a<512;a++){let N=a>=148&&a<156?32:n[a];S+=N,C+=N>127?N-256:N}return a===S||a===C}var TarParseError,rE=__esmMin(()=>{TarParseError=class extends Error{constructor(n){super(n),this.name=`TarParseError`}}});function createTarball(n){let a=[];for(let S of n){if(`directory`in S&&S.directory===!0){a.push(buildHeader(ensureTrailingSlash(S.name),0,`5`,S.mode??493,S.mtime??0));continue}let n=S,C=typeof n.body==`string`?new TextEncoder().encode(n.body):n.body,N=n.mode??defaultFileMode(C);a.push(buildHeader(n.name,C.byteLength,`0`,N,n.mtime??0)),a.push(C);let F=padTo512(C.byteLength);F>0&&a.push(new Uint8Array(F))}return a.push(new Uint8Array(512*2)),concatChunks(a)}function buildHeader(n,a,S,C,N){let{prefix:F,basename:I}=splitPathForUstar(n),H=new Uint8Array(512);writeAscii(H,I,0,100),writeOctal(H,C&4095,100,7),H[107]=0,writeOctal(H,0,108,7),H[115]=0,writeOctal(H,0,116,7),H[123]=0,writeOctal(H,a,124,11),H[135]=0,writeOctal(H,N,136,11),H[147]=0;for(let n=148;n<156;n++)H[n]=32;H[156]=S.charCodeAt(0),writeAscii(H,`ustar\0`,257,6),writeAscii(H,`00`,263,2),F&&writeAscii(H,F,345,155);let W=0;for(let n=0;n<512;n++)W+=H[n];return writeAscii(H,W.toString(8).padStart(6,`0`),148,6),H[154]=0,H[155]=32,H}function splitPathForUstar(n){if(n.length<=100)return{prefix:``,basename:n};if(n.length>255)throw Error(`createTarball: path too long (${n.length} > 255 chars): ${n}`);for(let a=Math.min(n.length-1,155);a>0;a--)if(n[a]===`/`&&n.length-a-1<=100)return{prefix:n.slice(0,a),basename:n.slice(a+1)};throw Error(`createTarball: cannot split path into ustar prefix+basename (basename slot is 100 chars): ${n}`)}function writeAscii(n,a,S,C){let N=new TextEncoder().encode(a);if(N.length>C)throw Error(`createTarball: field too long (${N.length} > ${C}): "${a}"`);n.set(N,S)}function writeOctal(n,a,S,C){writeAscii(n,a.toString(8).padStart(C,`0`),S,C)}function padTo512(n){let a=n%512;return a===0?0:512-a}function ensureTrailingSlash(n){return n.endsWith(`/`)?n:`${n}/`}function defaultFileMode(n){return n.length>=2&&n[0]===35&&n[1]===33?493:420}function concatChunks(n){let a=0;for(let S of n)a+=S.byteLength;let S=new Uint8Array(a),C=0;for(let a of n)S.set(a,C),C+=a.byteLength;return S}var iE=__esmMin(()=>{});async function extractTarball(n,a,S={}){let C=n instanceof Uint8Array?n:new Uint8Array(n),N=parseTar(S.gzip??(C.length>=2&&C[0]===31&&C[1]===139)?await gunzip(C):C);mkdirSync(a,{recursive:!0});let F=S.strip??1,I=S.preventEscape??!0,H={files:[],directories:[],symlinks:[],skipped:0};for(let n of N){let C=stripComponents(n.name,F);if(C===null||C===``){H.skipped++;continue}let N=Oo(a,C);if(I&&!isInside(N,a))throw Error(`tar: refusing to extract ${n.name} outside ${a} (resolved=${N})`);if(S.filter&&!S.filter(n,N)){H.skipped++;continue}if(n.type===`directory`){mkdirSync(N,{recursive:!0}),H.directories.push(N);continue}if(n.type===`file`){mkdirSync(Po(N),{recursive:!0}),writeFileSync(N,n.body);let a=S.chmod?.(n,N)??n.mode&511;if(a>0)try{chmodSync(N,a)}catch{}H.files.push(N);continue}if(n.type===`symlink`){mkdirSync(Po(N),{recursive:!0});try{symlinkSync(n.linkname,N),H.symlinks.push(N)}catch{writeFileSync(N,n.linkname),H.files.push(N)}continue}H.skipped++}return H}async function gunzip(n){let a=globalThis.DecompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.DecompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function gzip(n){let a=globalThis.CompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.CompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function drainStream(n){let a=[],S=0,C=n.getReader();for(;;){let{value:n,done:N}=await C.read();if(N)break;let F=n instanceof Uint8Array?n:new Uint8Array(n);a.push(F),S+=F.length}let N=new Uint8Array(S),F=0;for(let n of a)N.set(n,F),F+=n.length;return N}function stripComponents(n,a){if(a<=0)return n;let S=n.split(`/`).filter(n=>n!==``);return S.length<=a?null:S.slice(a).join(`/`)}function isInside(n,a){let S=Mo(a,n);return S!==``&&!S.startsWith(`..`)&&!Ao(S)}var aE=__esmMin(()=>{rE(),As(),Ho()}),oE=__exportAll$3({BLOCK_SIZE:()=>512,TarParseError:()=>TarParseError,createTarball:()=>createTarball,extractTarball:()=>extractTarball,gunzip:()=>gunzip,gzip:()=>gzip,parseTar:()=>parseTar}),sE=__esmMin(()=>{rE(),iE(),aE()});function gjsifyCacheRoot(n,a){let S=process.env.XDG_CACHE_HOME;return jo(S&&S.length>0?S:jo(homedir(),`.cache`),`gjsify`,n,a)}function atomicWrite(n,a){try{mkdirSync(jo(n,`..`),{recursive:!0});let S=`${n}.tmp.${process.pid}`;writeFileSync(S,a),renameSync(S,n)}catch{}}function readCacheFile(n){if(!existsSync(n))return null;try{let a=readFileSync(n);return a.length===0?null:a}catch{return null}}var cE=__esmMin(()=>{As(),Tf(),Ho()});function cacheRoot$1(){return gjsifyCacheRoot(`tarballs`,lE)}function parseSri(n){if(!n)return null;let a=n.indexOf(`-`);if(a<=0||a===n.length-1)return null;let S=n.slice(0,a),C=n.slice(a+1).replace(/=+$/,``),N;try{N=Buffer.from(C,`base64`).toString(`hex`)}catch{return null}return N.length<4?null:{algorithm:S,hex:N}}function pathFor$1(n){let a=parseSri(n);if(!a)return null;let S=a.hex.slice(0,2);return jo(cacheRoot$1(),a.algorithm,S,`${a.hex}.tgz`)}function getCachedTarball(n){let a=pathFor$1(n);return a?readCacheFile(a):null}function putCachedTarball(n,a){let S=pathFor$1(n);S&&(existsSync(S)||atomicWrite(S,a))}function npmCacacheContentDir(){let n=process.env.GJSIFY_NPM_CACHE;if(n!==void 0){let a=n.trim();return a===``||a===`0`||a===`false`?null:jo(a.endsWith(`_cacache`)?a:jo(a,`_cacache`),`content-v2`)}let a=process.env.npm_config_cache;return jo(a&&a.length>0?a:jo(homedir(),`.npm`),`_cacache`,`content-v2`)}function npmCachePathFor(n){let a=npmCacacheContentDir();if(!a)return null;let S=parseSri(n);return S?jo(a,S.algorithm,S.hex.slice(0,2),S.hex.slice(2,4),S.hex.slice(4)):null}function getForeignCachedTarball(n){let a=npmCachePathFor(n);return a?readCacheFile(a):null}var lE,uE=__esmMin(()=>{As(),Tf(),Ho(),cE(),lE=`v1`,__name$1(cacheRoot$1,`cacheRoot`),__name$1(pathFor$1,`pathFor`)});function isEnabled(){let n=process.env.GJSIFY_PACKUMENT_CACHE;if(n===void 0)return!0;let a=n.trim();return!(a===`0`||a===`false`||a===``)}function cacheRoot(){return gjsifyCacheRoot(`metadata`,dE)}function shardFor(n){let a=2166136261;for(let S=0;S<n.length;S++)a^=n.charCodeAt(S),a=Math.imul(a,16777619);return(a>>>0&255).toString(16).padStart(2,`0`)}function pathFor(n,a){if(!isEnabled())return null;let S=`${n}|${a}`,C=`${encodeURIComponent(n)}|${encodeURIComponent(a)}.json`;return jo(cacheRoot(),shardFor(S),C)}function getCachedPackument(n,a){let S=pathFor(n,a);if(!S)return null;let C=readCacheFile(S);if(!C)return null;try{let n=JSON.parse(C.toString(`utf-8`));return typeof n.etag!=`string`||!n.etag||!n.packument||typeof n.packument!=`object`?null:{etag:n.etag,packument:n.packument}}catch{return null}}function putCachedPackument(n,a,S,C){if(!S)return;let N=pathFor(n,a);N&&atomicWrite(N,JSON.stringify({etag:S,packument:C}))}var dE,fE=__esmMin(()=>{Ho(),cE(),dE=`v1`}),pE=__exportAll$3({installPackagesNative:()=>installPackagesNative,parseSpec:()=>parseSpec,pickVersion:()=>pickVersion});async function installPackagesNative(n){if(n.specs.length===0)throw Error(`installPackagesNative: empty specs list`);mkdirSync(n.prefix,{recursive:!0});let a=await loadNpmrc$1(n),S=makeLogger(n.verbose??!1),C=n.progress,N=jo(n.prefix,hE),F=readLockfile(N),I;if(n.frozen){if(!F)throw Error(`install: --immutable requires ${hE} at ${n.prefix} — none found. Run \`gjsify install\` (without --immutable) to generate one and commit it.`);let a=describeLockfileDrift(F,n.specs);if(a)throw Error(`install: --immutable but ${N} is stale.\n${a}\nRe-run \`gjsify install\` (without --immutable) to refresh the lockfile.`);S(`install: --immutable, using lockfile (%d package(s))`,Object.keys(F.packages).length),I=lockfileToNodes(F)}else F&&lockfileMatchesRequest(F,n.specs)?(S(`install: using lockfile (%d package(s))`,Object.keys(F.packages).length),I=lockfileToNodes(F)):(S(`install: resolving %d top-level spec(s) → %s`,n.specs.length,n.prefix),I=await resolveDeps(n.specs,a,S,n.overrides,n.skipDeps,n.signal,C),n.lockfile&&(writeLockfile(N,n.specs,I),S(`install: wrote %s (%d entries)`,hE,I.length)));return S(`install: downloading %d tarball(s)`,I.length),await downloadAndExtractAll(I,n.prefix,a,S,n.signal,C),await linkBins(I,n.prefix,S),S(`install: done`),topLevelResolutions(n.specs,I)}function errMsg(n){return n instanceof Error?n.message:String(n)}function topLevelResolutions(n,a){let S=new Map;for(let n of a)n.installPath===`node_modules/${n.name}`&&S.set(n.name,n);let C=[];for(let a of n){let n=parseSpecName(a),N=S.get(n);N&&C.push({name:N.name,version:N.version})}return C}function parseSpecName(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return n;let S=n.indexOf(`@`,a+1);return S===-1?n:n.slice(0,S)}let a=n.indexOf(`@`);return a===-1?n:n.slice(0,a)}async function resolveDeps(n,a,S,C,N,F,I){I?.beginPhase(`resolve`,n.length);let applyOverride=(n,a)=>{if(!C)return a;let N=C[n];return typeof N!=`string`||N.length===0||N===a?a:(S(`install: override %s %s → %s`,n,a,N),N)},H=new Map,fetchPkg=n=>{let C=H.get(n);if(C)return C;let N=fetchPackumentWithDiskCache(n,a,S,F);return H.set(n,N),N},W=new Map,K=new Map,q=n.map(parseSpec).map(n=>({from:null,name:n.name,range:applyOverride(n.name,n.range),required:!0}));for(;q.length>0;){let n=q.splice(0,q.length),a=[],C=new Set;for(let S of n)H.has(S.name)||C.has(S.name)||(C.add(S.name),a.push(S.name));await prefetchPackuments(a,fetchPkg,F);for(let a=0;a<n.length;a++){let C=n[a],F=findVisible(C.from,C.name,W);if(F&&satisfiesRange(F.version,C.range))continue;let H=null;try{let F=await fetchPkg(C.name);if(H=pickVersion(F,C.range),!H){if(!C.required)continue;throw Error(`No version of ${C.name} satisfies ${C.range}`)}let Y=F.versions[H];if(!Y)throw Error(`Packument for ${C.name} promised ${H} but no entry exists`);let X=decidePlacement(C.from,C.name,H,K),te={name:C.name,version:H,tarballUrl:Y.dist.tarball,integrity:Y.dist.integrity,installPath:X,dependencies:Y.dependencies??{},optionalDependencies:Y.optionalDependencies??{},bin:Y.bin};if(W.set(X,te),X===`node_modules/${C.name}`&&K.set(C.name,te),S(`resolve: %s@%s ← %s (at %s)`,C.name,H,C.range,X),I?.update({phase:`resolve`,current:W.size,total:W.size+(n.length-a-1)+q.length,name:`${C.name}@${H}`}),!N){for(let[n,a]of Object.entries(te.dependencies))q.push({from:X,name:n,range:applyOverride(n,a),required:!0});for(let[n,a]of Object.entries(te.optionalDependencies))q.push({from:X,name:n,range:applyOverride(n,a),required:!1})}}catch(n){if(!C.required){S(`resolve: optional dep %s@%s skipped (%s)`,C.name,C.range,n.message);continue}throw n}}}return I?.endPhase(`resolve`),Array.from(W.values())}async function fetchPackumentWithDiskCache(n,a,S,C){let N=registryFor(n,a),F=getCachedPackument(N,n),onRetry=({attempt:a,error:C,delayMs:N})=>{S(`packument %s: retry %d after %dms (%s)`,n,a,N,errMsg(C))},I=await fetchPackumentConditional(n,{npmrc:a,signal:C,ifNoneMatch:F?.etag,onRetry});return I.status===`not-modified`&&F?(S(`packument-cache-hit: %s (304, etag %s)`,n,F.etag),F.packument):I.status===`fresh`&&I.packument?(I.etag&&putCachedPackument(N,n,I.etag,I.packument),I.packument):fetchPackument(n,{npmrc:a,signal:C,onRetry})}async function prefetchPackuments(n,a,S){if(n.length===0)return;let C=0,N=Math.max(1,Math.min(mE,n.length)),worker=async()=>{for(;C<n.length;){if(S?.aborted)return;let N=n[C++];try{await a(N)}catch{}}};await Promise.all(Array.from({length:N},()=>worker()))}function findVisible(n,a,S){let C=[];if(n!==null){C.push(`${n}/node_modules/${a}`);let S=n;for(;;){let n=S.lastIndexOf(`/node_modules/`);if(n<0||(S=S.slice(0,n),C.push(`${S}/node_modules/${a}`),S===``))break}}C.push(`node_modules/${a}`);for(let n of C){let a=S.get(n);if(a)return a}return null}function decidePlacement(n,a,S,C){let N=C.get(a);return!N||N.version===S||n===null?`node_modules/${a}`:`${n}/node_modules/${a}`}function satisfiesRange(n,a){try{return satisfies(n,new $T(a))}catch{return!1}}function readLockfile(n){if(!existsSync(n))return null;try{let a=JSON.parse(readFileSync(n,`utf-8`));return a.lockfileVersion!==gE||!a.packages||typeof a.packages!=`object`?null:a}catch{return null}}function writeLockfile(n,a,S){let C={},N=[...S].sort((n,a)=>n.installPath<a.installPath?-1:+(n.installPath>a.installPath));for(let n of N)C[n.installPath]={version:n.version,resolved:n.tarballUrl,integrity:n.integrity,dependencies:Object.keys(n.dependencies).length>0?n.dependencies:void 0,bin:n.bin};let F={lockfileVersion:gE,requested:[...a],packages:C};writeFileSync(n,JSON.stringify(F,null,2)+`
|
|
789
789
|
`)}function lockfileToNodes(n){return Object.entries(n.packages).map(([n,a])=>({name:nameFromInstallPath(n),version:a.version,tarballUrl:a.resolved,integrity:a.integrity,installPath:n,dependencies:a.dependencies??{},optionalDependencies:{},bin:a.bin}))}function nameFromInstallPath(n){let a=n.lastIndexOf(`/node_modules/`);return a<0?n.replace(/^node_modules\//,``):n.slice(a+14)}function lockfileMatchesRequest(n,a){if(n.requested.length!==a.length)return!1;let S=[...n.requested].sort(),C=[...a].sort();return S.every((n,a)=>n===C[a])}function describeLockfileDrift(n,a){let S=new Set(n.requested),C=new Set(a),N=[],F=[];for(let n of C)S.has(n)||N.push(n);for(let n of S)C.has(n)||F.push(n);if(N.length===0&&F.length===0)return null;let I=[];return N.length>0&&I.push(` + ${N.sort().join(`
|
|
790
790
|
+ `)}`),F.length>0&&I.push(` - ${F.sort().join(`
|
|
791
791
|
- `)}`),I.join(`
|
|
@@ -815,7 +815,7 @@ Enter OTP: `);let n=await readLineFromStdin();n?pe=await doPut({...le,"npm-otp":
|
|
|
815
815
|
`),n(S);return}else C===``?(cleanup(),process.stdout.write(`
|
|
816
816
|
`),process.exit(130)):C===``||C===`\b`?S.length>0&&(S=S.slice(0,-1),process.stdout.write(`\b \b`)):C>=` `&&(S+=C,process.stdout.write(`*`))},cleanup=()=>{a.setRawMode(!1),a.removeListener(`data`,onData),a.pause()};a.on(`data`,onData)})}function readLine(){return new Promise(n=>{let a=``,onData=S=>{a+=typeof S==`string`?S:S.toString(`utf-8`);let C=a.indexOf(`
|
|
817
817
|
`);C>=0&&(cleanup(),n(a.slice(0,C).replace(/\r$/,``)))},onEnd=()=>{cleanup(),n(a.replace(/\r$/,``).trim())},cleanup=()=>{process.stdin.removeListener(`data`,onData),process.stdin.removeListener(`end`,onEnd)};process.stdin.setEncoding(`utf-8`),typeof process.stdin.isPaused==`function`&&process.stdin.isPaused()&&process.stdin.resume(),process.stdin.on(`data`,onData),process.stdin.once(`end`,onEnd)})}je(),nE();const DE={command:`login`,description:"Log in to an npm registry (Node-free `npm login`). Prompts for username + password (hidden) and writes the token to ~/.npmrc. Use --otp for 2FA. Web-OAuth flow is not supported — this is npm's legacy credentials flow.",builder:n=>n.option(`registry`,{description:`Registry URL to log in to. Default: ${tE} (or a --scope's registry).`,type:`string`}).option(`scope`,{description:`Associate the login with a scope (e.g. @gjsify) — resolves that scope's registry from .npmrc.`,type:`string`}).option(`username`,{description:`Username (prompted if omitted).`,type:`string`}).option(`otp`,{description:`npm 2FA one-time code (prompted on demand if omitted).`,type:`string`}).option(`json`,{description:"Emit `{username, registry}` JSON on success.",type:`boolean`}),handler:async n=>{let a=await loadNpmrc(process.cwd()),S=n.registry??process.env.npm_config_registry??(n.scope?registryFor(n.scope.startsWith(`@`)?`${n.scope}/_`:`@${n.scope}/_`,a):void 0)??tE,C=S.endsWith(`/`)?S:`${S}/`,N=n.username??await promptLine(`Username: `);N||(Ae.error(`gjsify login: a username is required.`),process.exit(1));let F=await promptHidden(`Password: `);F||(Ae.error(`gjsify login: a password is required.`),process.exit(1));let I=`Basic ${btoa(`${N}:${F}`)}`,H=`${C}-/user/org.couchdb.user:${encodeURIComponent(N)}`,W={_id:`org.couchdb.user:${N}`,name:N,password:F,type:`user`,roles:[],date:void 0};function authHeaders(n){let a={authorization:I,"content-type":`application/json`,accept:`*/*`};return n&&(a[`npm-otp`]=n),a}async function putUser(n,a){return fetch(`${H}${n}`,{method:`PUT`,headers:authHeaders(a),body:JSON.stringify(W)})}let K=n.otp,q=await putUser(``,K);if(q.status===401&&!K){let n=(q.headers.get(`www-authenticate`)??``).toLowerCase(),a=await q.clone().text().catch(()=>``);(n.includes(`otp`)||/one-time pass/i.test(a))&&(K=await promptLine(`This operation requires a one-time password.
|
|
818
|
-
Enter OTP: `),K||(Ae.error(`gjsify login: no OTP entered.`),process.exit(1)),q=await putUser(``,K))}if(q.status===409){let n=await fetch(`${H}?write=true`,{headers:authHeaders(K)});if(n.ok){let a=await n.json().catch(()=>({}));for(let n of Object.keys(a))(!W[n]||n===`roles`)&&(W[n]=a[n]);W._rev&&(q=await putUser(`/-rev/${W._rev}`,K))}}if(q.status===400&&(Ae.error(`gjsify login: there is no user with the username "${N}" on ${C}.`),process.exit(1)),!q.ok){let n=await q.text().catch(()=>`<no body>`);Ae.error(`gjsify login: ${q.status} ${q.statusText} from ${C}\n${n.slice(0,400)}`),process.exit(1)}let Y=await q.json().catch(()=>({}));Y.token||(Ae.error("gjsify login: the registry accepted the login but returned no token (unexpected response shape). Your registry may require the web-OAuth flow — use `npm login`."),process.exit(1));let X=writeAuthToken(C,Y.token),te=(await whoami(C,await loadNpmrc(process.cwd()))).username??N;n.json?process.stdout.write(`${JSON.stringify({username:te,registry:C})}\n`):process.stdout.write(`Logged in as ${te} on ${C}\n(token written to ${X})\n`)}};nE();const OE={command:`logout`,description:"Log out of an npm registry (Node-free `npm logout`). Revokes the token on the registry (best-effort) and removes it from ~/.npmrc.",builder:n=>n.option(`registry`,{description:`Registry URL to log out of. Default: ${tE} (or a --scope's registry).`,type:`string`}).option(`scope`,{description:`Log out of a scope's registry (e.g. @gjsify) — resolved from .npmrc.`,type:`string`}).option(`json`,{description:"Emit `{registry, revoked, removed}` JSON.",type:`boolean`}),handler:async n=>{let a=await loadNpmrc(process.cwd()),S=n.registry??process.env.npm_config_registry??(n.scope?registryFor(n.scope.startsWith(`@`)?`${n.scope}/_`:`@${n.scope}/_`,a):void 0)??tE,C=S.endsWith(`/`)?S:`${S}/`,N=resolveAuthForUrl(`${C}-/whoami`,a),F=!1;if(N?.startsWith(`Bearer `)){let n=N.slice(7);try{F=(await fetch(`${C}-/user/token/${encodeURIComponent(n)}`,{method:`DELETE`,headers:{authorization:N,accept:`*/*`}})).ok}catch{}}let{path:I,removed:H}=removeAuthToken(C);n.json?process.stdout.write(`${JSON.stringify({registry:C,revoked:F,removed:H})}\n`):H?process.stdout.write(`Logged out of ${C}${F?` (token revoked)`:``}\n(removed from ${I})\n`):process.stdout.write(`No token for ${C} found in ${I} — nothing to remove.\n`)}};je(),As(),Ho(),nn(),nE();const kE=`@gjsify/cli`,AE={command:`self-update`,description:`Update the installed ${kE} to the latest release (or pinned --tag).`,builder:n=>n.option(`check`,{description:`Only check whether a newer version is available; do not install.`,type:`boolean`,default:!1}).option(`force`,{description:`Reinstall even when the current version already matches the target tag.`,type:`boolean`,default:!1}).option(`tag`,{description:"npm dist-tag or pinned version to install (e.g. `latest`, `next`, `0.5.0`).",type:`string`,default:`latest`}),handler:async n=>{let a=defaultGlobalLayout(),S=jo(jo(a.prefix,`node_modules`,kE),`package.json`),C=readCurrentVersion(),N=existsSync(S);Ae.log(`Current ${kE}: v${C??`(unknown)`}`),N||Ae.warn(`\nWarning: no @gjsify/cli install found under ${a.prefix}.\nself-update only manages installs created by install.mjs or \`gjsify install -g\`.\nIf you installed via \`npm install -g\`, remove that and use:\n curl -fsSL https://github.com/gjsify/gjsify/releases/latest/download/install.mjs -o /tmp/g.mjs && gjs -m /tmp/g.mjs && rm /tmp/g.mjs`),Ae.log(`Fetching dist-tags for ${kE}@${n.tag} ...`);let F;try{F=await fetchPackument(kE)}catch(n){let a=n instanceof Error?n.message:String(n);Ae.error(`Failed to fetch packument: ${a}`),process.exit(1);return}let I=resolveTag(F,n.tag);if(!I){Ae.error(`Unknown dist-tag '${n.tag}' on ${kE}. Known tags: ${Object.keys(F[`dist-tags`]??{}).join(`, `)||`(none)`}`),process.exit(1);return}if(Ae.log(`Latest matching --tag ${n.tag}: v${I}`),C===I&&!n.force){Ae.log(`Already up to date (v${I}).`),n.check||Ae.log(`Run with --force to reinstall anyway.`);return}if(n.check){Ae.log(C?`Update available: v${C} → v${I}`:`Install required: → v${I}`),process.exit(1);return}Ae.log(`Installing ${kE}@${I} ...`);try{await installPackages({prefix:a.prefix,specs:[`${kE}@${I}`],verbose:!1,skipDeps:!
|
|
818
|
+
Enter OTP: `),K||(Ae.error(`gjsify login: no OTP entered.`),process.exit(1)),q=await putUser(``,K))}if(q.status===409){let n=await fetch(`${H}?write=true`,{headers:authHeaders(K)});if(n.ok){let a=await n.json().catch(()=>({}));for(let n of Object.keys(a))(!W[n]||n===`roles`)&&(W[n]=a[n]);W._rev&&(q=await putUser(`/-rev/${W._rev}`,K))}}if(q.status===400&&(Ae.error(`gjsify login: there is no user with the username "${N}" on ${C}.`),process.exit(1)),!q.ok){let n=await q.text().catch(()=>`<no body>`);Ae.error(`gjsify login: ${q.status} ${q.statusText} from ${C}\n${n.slice(0,400)}`),process.exit(1)}let Y=await q.json().catch(()=>({}));Y.token||(Ae.error("gjsify login: the registry accepted the login but returned no token (unexpected response shape). Your registry may require the web-OAuth flow — use `npm login`."),process.exit(1));let X=writeAuthToken(C,Y.token),te=(await whoami(C,await loadNpmrc(process.cwd()))).username??N;n.json?process.stdout.write(`${JSON.stringify({username:te,registry:C})}\n`):process.stdout.write(`Logged in as ${te} on ${C}\n(token written to ${X})\n`)}};nE();const OE={command:`logout`,description:"Log out of an npm registry (Node-free `npm logout`). Revokes the token on the registry (best-effort) and removes it from ~/.npmrc.",builder:n=>n.option(`registry`,{description:`Registry URL to log out of. Default: ${tE} (or a --scope's registry).`,type:`string`}).option(`scope`,{description:`Log out of a scope's registry (e.g. @gjsify) — resolved from .npmrc.`,type:`string`}).option(`json`,{description:"Emit `{registry, revoked, removed}` JSON.",type:`boolean`}),handler:async n=>{let a=await loadNpmrc(process.cwd()),S=n.registry??process.env.npm_config_registry??(n.scope?registryFor(n.scope.startsWith(`@`)?`${n.scope}/_`:`@${n.scope}/_`,a):void 0)??tE,C=S.endsWith(`/`)?S:`${S}/`,N=resolveAuthForUrl(`${C}-/whoami`,a),F=!1;if(N?.startsWith(`Bearer `)){let n=N.slice(7);try{F=(await fetch(`${C}-/user/token/${encodeURIComponent(n)}`,{method:`DELETE`,headers:{authorization:N,accept:`*/*`}})).ok}catch{}}let{path:I,removed:H}=removeAuthToken(C);n.json?process.stdout.write(`${JSON.stringify({registry:C,revoked:F,removed:H})}\n`):H?process.stdout.write(`Logged out of ${C}${F?` (token revoked)`:``}\n(removed from ${I})\n`):process.stdout.write(`No token for ${C} found in ${I} — nothing to remove.\n`)}};je(),As(),Ho(),nn(),nE();const kE=`@gjsify/cli`,AE={command:`self-update`,description:`Update the installed ${kE} to the latest release (or pinned --tag).`,builder:n=>n.option(`check`,{description:`Only check whether a newer version is available; do not install.`,type:`boolean`,default:!1}).option(`force`,{description:`Reinstall even when the current version already matches the target tag.`,type:`boolean`,default:!1}).option(`tag`,{description:"npm dist-tag or pinned version to install (e.g. `latest`, `next`, `0.5.0`).",type:`string`,default:`latest`}).option(`skip-deps`,{description:`Update only the @gjsify/cli bundle itself; do not pull its runtime dependencies (rolldown, lightningcss, @gjsify/tsc, the native gi:// bridges, …). Faster, but can leave the on-disk runtime deps stale relative to the new bundle.`,type:`boolean`,default:!1}),handler:async n=>{let a=defaultGlobalLayout(),S=jo(jo(a.prefix,`node_modules`,kE),`package.json`),C=readCurrentVersion(),N=existsSync(S);Ae.log(`Current ${kE}: v${C??`(unknown)`}`),N||Ae.warn(`\nWarning: no @gjsify/cli install found under ${a.prefix}.\nself-update only manages installs created by install.mjs or \`gjsify install -g\`.\nIf you installed via \`npm install -g\`, remove that and use:\n curl -fsSL https://github.com/gjsify/gjsify/releases/latest/download/install.mjs -o /tmp/g.mjs && gjs -m /tmp/g.mjs && rm /tmp/g.mjs`),Ae.log(`Fetching dist-tags for ${kE}@${n.tag} ...`);let F;try{F=await fetchPackument(kE)}catch(n){let a=n instanceof Error?n.message:String(n);Ae.error(`Failed to fetch packument: ${a}`),process.exit(1);return}let I=resolveTag(F,n.tag);if(!I){Ae.error(`Unknown dist-tag '${n.tag}' on ${kE}. Known tags: ${Object.keys(F[`dist-tags`]??{}).join(`, `)||`(none)`}`),process.exit(1);return}if(Ae.log(`Latest matching --tag ${n.tag}: v${I}`),C===I&&!n.force){Ae.log(`Already up to date (v${I}).`),n.check||Ae.log(`Run with --force to reinstall anyway.`);return}if(n.check){Ae.log(C?`Update available: v${C} → v${I}`:`Install required: → v${I}`),process.exit(1);return}let H=!n.skipDeps,W=H?` + runtime dependencies`:` (bundle only)`;Ae.log(`Installing ${kE}@${I}${W} ...`);try{await installPackages({prefix:a.prefix,specs:[`${kE}@${I}`],verbose:!1,skipDeps:!H})}catch(n){let a=n instanceof Error?n.message:String(n);Ae.error(`self-update: install failed — ${a}`),Ae.error("Re-run `gjsify self-update` to retry."),process.exit(1);return}let K=linkGlobalBins([kE],a);if(K.length===0)Ae.warn("self-update: install completed but no bins were linked — package.json may be missing a `bin` field.");else for(let n of K)Ae.log(` • ${n.link} → ${n.target}`);Ae.log(`\nUpdated ${kE} to v${I}.`),H?Ae.log(`Runtime dependencies were resolved alongside the bundle.`):Ae.log(`Bundle-only update (--skip-deps): on-disk runtime dependencies were left unchanged.`)}};function readCurrentVersion(){try{let n=process.env.GJSIFY_CLI_PACKAGE_JSON;if(n){let a=JSON.parse(readFileSync(n,`utf-8`));return a.name===kE&&typeof a.version==`string`?a.version:null}let a=Po(Oo(fileURLToPath(import.meta.url)));for(let n=0;n<8&&a!==Po(a);n++){let n=jo(a,`package.json`);if(existsSync(n)){let a=JSON.parse(readFileSync(n,`utf-8`));if(a.name===kE&&typeof a.version==`string`)return a.version}a=Po(a)}}catch{}return null}function resolveTag(n,a){let S=n[`dist-tags`]??{};return S[a]?S[a]:n.versions&&typeof n.versions==`object`&&n.versions[a]?a:null}je(),As(),Ho();function loadInstallerTemplate(){return readFileSync(new URL(`../templates/install.mjs.tmpl`,import.meta.url),`utf-8`)}const jE={command:`generate-installer [target]`,description:`Scaffold an install.mjs in the current directory for a GJS-runnable npm package.`,builder:n=>n.positional(`target`,{description:`Npm package name to install (default: current package.json name).`,type:`string`}).option(`bin-name`,{description:"Bin name produced by the installer (default: first key of `gjsify.bin` or `bin`).",type:`string`}).option(`bootstrap-url`,{description:`Override the cli.gjs.mjs bootstrap bundle URL (default: gjsify GitHub releases/latest).`,type:`string`}).option(`output`,{description:`Where to write the generated installer.`,type:`string`,default:`install.mjs`}).option(`force`,{description:`Overwrite an existing output file.`,type:`boolean`,default:!1}),handler:n=>{let a=Oo(process.cwd(),n.output);if(existsSync(a)&&!n.force){Ae.error(`${n.output} already exists. Re-run with --force to overwrite.`),process.exit(1);return}let S=Oo(process.cwd(),`package.json`),C=null;if(existsSync(S))try{C=JSON.parse(readFileSync(S,`utf-8`))}catch{}let N=n.target??C?.name;if(!N){Ae.error("No target package: pass `gjsify generate-installer <pkg>` or run inside a directory with a package.json."),process.exit(1);return}let F=n[`bin-name`]??pickDefaultBinName(C,N),I=n[`bootstrap-url`]??`https://github.com/gjsify/gjsify/releases/latest/download/cli.gjs.mjs`;writeFileSync(a,loadInstallerTemplate().replace(/const DEFAULT_TARGET = '[^']+';/,`const DEFAULT_TARGET = ${JSON.stringify(N)};`).replace(/const DEFAULT_BIN_NAME = '[^']+';/,`const DEFAULT_BIN_NAME = ${JSON.stringify(F)};`).replace(/const DEFAULT_BOOTSTRAP_URL =\s*'[^']+';/,`const DEFAULT_BOOTSTRAP_URL = ${JSON.stringify(I)};`),{mode:493}),Ae.log(`Wrote ${n.output} (target=${N}, bin=${F}).`),Ae.log(``),Ae.log(`Install one-liner for your README:`),Ae.log(` curl -fsSL https://github.com/<you>/<repo>/raw/main/${n.output} -o /tmp/i.mjs \\`),Ae.log(` && gjs -m /tmp/i.mjs && rm /tmp/i.mjs`)}};function pickDefaultBinName(n,a){let S=n?.gjsify?.bin;if(S&&typeof S==`object`){let n=Object.keys(S)[0];if(n)return n}let C=n?.bin;if(C&&typeof C==`object`){let n=Object.keys(C)[0];if(n)return n}return a.startsWith(`@`)?a.slice(a.indexOf(`/`)+1):a}je(),As(),Ho();const ME={command:`uninstall <packages..>`,description:"Uninstall a previously installed package. Currently only `--global` mode is supported.",builder:n=>n.positional(`packages`,{description:`Package(s) to uninstall (npm names, optionally with version).`,type:`string`,array:!0,demandOption:!0}).option(`global`,{description:`Uninstall from the user-global XDG location (the install -g target).`,type:`boolean`,alias:`g`,default:!1}).option(`dry-run`,{description:`Show what would be removed without touching the filesystem.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Verbose logging.`,type:`boolean`,default:!1}),handler:n=>{if(!n.global){Ae.error("gjsify uninstall currently only supports --global. For project-local removal, edit package.json + re-run `gjsify install`."),process.exit(1);return}let a=defaultGlobalLayout(),S=n[`dry-run`]??!1,C=n.verbose??!1,N=`gjsify uninstall${S?` (dry-run)`:``} --global`;Ae.log(`${N} ← ${a.prefix}`),Ae.log(`${` `.repeat(N.length)} bins ← ${a.binDir}`);let F=!1;for(let N of n.packages){let n=specToPackageName(N),I=jo(a.prefix,`node_modules`,n);if(!existsSync(I)){Ae.warn(` ✗ ${n} — not installed at ${I}`);continue}let H=findBinShimsForPackage(a.binDir,I,C);if(S){Ae.log(` • would remove ${I}`);for(let n of H)Ae.log(` • would remove ${n}`)}else{rmSync(I,{recursive:!0,force:!0}),Ae.log(` • removed ${I}`);for(let n of H)unlinkSync(n),Ae.log(` • removed ${n}`)}F=!0}F||(Ae.error(`
|
|
819
819
|
No packages removed.`),process.exit(1))}};function findBinShimsForPackage(n,a,S){if(!existsSync(n))return[];let C=[],N;try{N=readdirSync(n)}catch{return[]}for(let F of N){let N=jo(n,F);try{if(!statSync(N).isFile())continue;let n=readFileSync(N,`utf-8`);if(!n.startsWith(`#!/bin/sh`))continue;let S=n.split(`
|
|
820
820
|
`).find(n=>/^exec (?:gjs -m )?'/.test(n));if(!S)continue;let F=S.match(/'([^']+)'/);if(!F)continue;let I=F[1];(I.startsWith(a+`/`)||I===a)&&C.push(N)}catch(n){S&&Ae.warn(` ? could not inspect ${N}: ${n.message}`)}}return C}je(),As(),Ho();const NE={command:`format [paths..]`,description:`Format JS/TS source files via oxfmt (CSS/JSON formatting is not supported).`,builder:n=>n.positional(`paths`,{description:"Files or directories to format. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Modify files in place (default: report drift without writing).`,type:`boolean`,default:!1}).option(`check`,{description:`Report formatting drift without modifying files; exit non-zero if any file is unformatted. Useful for CI.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to an .oxfmtrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`init`,{description:`Write recommended .oxlintrc.json + .oxfmtrc.json into cwd (skips existing files unless --force).`,type:`boolean`,default:!1}).option(`force`,{description:`Overwrite existing .oxlintrc.json / .oxfmtrc.json with --init.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo the resolved oxfmt launcher + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd();if(n.init){handleInit({cwd:a,force:n.force??!1});return}let S=n.paths?.length?n.paths:[`.`],C=[];n.check?C.push(`--check`):n.write?C.push(`--write`):C.push(`--list-different`);let N=n.configPath??findOxfmtConfig(a)??void 0;N&&C.push(`--config`,Oo(N)),C.push(...S);try{let S=await runOxfmt(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};function handleInit({cwd:n,force:a}){let writeOne=(S,C)=>{let N=Oo(n,S);if(existsSync(N)&&!a){Ae.log(`[gjsify format] ${S} exists at ${N} — pass --force to overwrite.`);return}writeFileSync(N,C,`utf-8`),Ae.log(`[gjsify format] wrote ${N}`)};writeOne(`.oxlintrc.json`,loadOxlintTemplate()),writeOne(`.oxfmtrc.json`,loadOxfmtTemplate()),Ae.log("[gjsify format] Run `gjsify format --write .` to apply the formatter to the project.")}Ho();const PE={command:`lint [paths..]`,description:`Run oxlint diagnostics (spawned via its Node launcher to support JS plugins).`,builder:n=>n.positional(`paths`,{description:"Files or directories to lint. Default: `.`",type:`string`,array:!0}).option(`fix`,{description:`Apply safe lint fixes in place.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to an .oxlintrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved oxlint launcher + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=[];n.fix&&C.push(`--fix`);let N=n.configPath??findOxlintConfig(a)??void 0;N&&C.push(`--config`,Oo(N)),C.push(...S);try{let S=await runOxlint(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};Ho();const FE={command:`fix [paths..]`,description:`Run oxfmt --write then oxlint --fix — format + safe lint fixes in one pass.`,builder:n=>n.positional(`paths`,{description:"Files or directories to fix. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Apply fixes in place (default: true). Pass --no-write to report only.`,type:`boolean`,default:!0}).option(`config-path`,{description:`Path to an .oxlintrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved oxc launchers + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=n.verbose??!1,N=n.write!==!1;try{let F=[N?`--write`:`--list-different`],I=n.configPath??findOxfmtConfig(a)??void 0;I&&F.push(`--config`,Oo(I)),F.push(...S);let H=await runOxfmt(F,{cwd:a,verbose:C}),W=[];N&&W.push(`--fix`);let K=n.configPath??findOxlintConfig(a)??void 0;K&&W.push(`--config`,Oo(K)),W.push(...S);let q=await runOxlint(W,{cwd:a,verbose:C});process.exitCode=H||q}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};vs();var Interface=class extends Interface$1{question(n,a){return new Promise(a=>{super.question(n,a)})}};function createInterface(n,a){return typeof n==`object`&&n&&!(`read`in n&&typeof n.read==`function`)?new Interface(n):new Interface({input:n,output:a})}eE();function semverGt(n,a){try{return compare(n,a)===1}catch{return!1}}function groupByDependency(n){let a=new Map;for(let S of n){let n=a.get(S.name);n||(n={name:S.name,occurrences:[],declaredRanges:new Set,dominantRange:S.currentRange,highestVersion:S.currentVersion},a.set(S.name,n)),n.occurrences.push(S),n.declaredRanges.add(S.currentRange),S.currentVersion&&(!n.highestVersion||semverGt(S.currentVersion,n.highestVersion))&&(n.highestVersion=S.currentVersion)}for(let n of a.values()){let a=new Map;for(let S of n.occurrences)a.set(S.currentRange,(a.get(S.currentRange)??0)+1);let S=n.occurrences[0].currentRange,C=-1,N=null;for(let[n,F]of a.entries()){let a=parse(n.replace(/^[\^~>=<]+/,``))?.version??null;(F>C||F===C&&a&&N&&semverGt(a,N)||F===C&&n<S)&&(S=n,C=F,N=a)}n.dominantRange=S}return[...a.values()].sort((n,a)=>n.name.localeCompare(a.name))}function isInconsistent(n){return n.declaredRanges.size>1}function findInconsistencies(n){return n.filter(isInconsistent)}je(),As(),Ho(),Tf(),eE(),nE();const IE={command:`upgrade`,description:"Workspace-aware dependency upgrades. Walks every package.json in the monorepo, groups by dep, flags inconsistencies. `--latest` / `--minor` / `--patch` for bulk-mode, `--align` for offline consistency-only mode, `--check` for CI drift detection.",builder:n=>n.option(`latest`,{description:`Non-interactive: bump every dependency to its latest version (allows major).`,type:`boolean`,default:!1}).option(`minor`,{description:`Non-interactive: bump every dependency to the latest within the same major (semver-minor + semver-patch).`,type:`boolean`,default:!1}).option(`patch`,{description:`Non-interactive: bump every dependency to the latest within the same minor (semver-patch only).`,type:`boolean`,default:!1}).option(`filter`,{description:`Only consider deps whose name matches this substring (case-insensitive). Repeatable; comma-separated values are split.`,type:`string`}).option(`workspace`,{alias:`p`,description:`Restrict to a subset of workspaces. Patterns are matched against the workspace package name AND its directory path (substring + glob). Repeatable; comma-separated values are split.`,type:`string`}).option(`exclude-workspace`,{description:`Skip workspaces matching this pattern (glob-shaped; matched against workspace package name AND directory path). Repeatable; comma-separated values are split. Use for workspaces with intentional dependency drift — e.g. integration tests pinned to specific upstream versions.`,type:`string`}).option(`align`,{description:`Offline consistency mode: find deps declared at multiple ranges across the workspace and align them to the highest. No registry calls.`,type:`boolean`,default:!1}).option(`check`,{description:"CI gate: exit non-zero when any dep is declared inconsistently across workspaces. Implies offline (no registry calls). Pairs with `--align` as the fix.",type:`boolean`,default:!1}).option(`dry-run`,{description:`Print the upgrade plan without writing package.json files.`,type:`boolean`,default:!1}).option(`cwd`,{description:`Project directory. Default: process.cwd(). When inside a workspace, walks up to the monorepo root.`,type:`string`}).option(`yes`,{alias:`y`,description:`Interactive mode: select all without prompting.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Print extra resolution details.`,type:`boolean`,default:!1}),handler:async n=>{let a=discoverContext(Oo(n.cwd??process.cwd())),S=applyWorkspaceFilter(a.workspaces,n.workspace,n.excludeWorkspace);if(S.length===0){Ae.log(`[gjsify upgrade] no matching workspaces.`);return}let C=collectAllDeclarations(S,parseFilterList(n.filter));if(C.length===0){Ae.log(`[gjsify upgrade] no external npm dependencies to check.`);return}let N=groupByDependency(C);if(n.check)return runCheckMode(N);if(n.align)return runAlignMode(N,n);let F=await loadNpmrcLight(a.root),I=n.latest?`latest`:n.minor?`minor`:n.patch?`patch`:`interactive`;Ae.log(`[gjsify upgrade] checking ${N.length} unique deps across ${S.length} workspace(s) against ${F.registry}…`);let H=await resolveCandidateGroups(N,F,n.verbose??!1,I);if(H.length===0){Ae.log(`✅ all dependencies are up to date`);let n=findInconsistencies(N);n.length>0&&Ae.log(`\n⚠ ${n.length} dep(s) declared at inconsistent ranges across workspaces. Run \`gjsify upgrade --align\` to fix.`);return}printTable(H);let W;if(I===`interactive`&&!n.yes?W=await promptSelection(H):(n.yes&&I===`interactive`&&Ae.log(`[gjsify upgrade] -y / --yes: selecting all`),W=H),W.length===0){Ae.log(`[gjsify upgrade] nothing selected; no files changed.`);return}if(n.dryRun){let n=uniqueLocations(W).length;Ae.log(`[gjsify upgrade] --dry-run: would update ${W.length} deps across ${n} package.json file(s).`),printChangePlan(W);return}let K=applyToFiles(W);Ae.log(`✏️ updated ${W.length} dep(s) across ${K} package.json file(s). Run \`gjsify install\` to apply.`)}};function discoverContext(n){let a=findWorkspaceRoot(n);if(a)return{root:a,workspaces:discoverWorkspaces(a,{includeRoot:!0}),isMonorepo:!0};let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`[gjsify upgrade] no package.json at ${S}`);let C=JSON.parse(readFileSync(S,`utf-8`));return{root:n,workspaces:[{name:C.name??`<root>`,location:n,relativeLocation:`.`,version:C.version??`0.0.0`,manifest:C,private:C.private===!0}],isMonorepo:!1}}function applyWorkspaceFilter(n,a,S){let C=a?.split(`,`).map(n=>n.trim()).filter(Boolean),N=S?.split(`,`).map(n=>n.trim()).filter(Boolean);return(!C||C.length===0)&&(!N||N.length===0)?n:filterWorkspaces(n,{include:C,exclude:N})}function parseFilterList(n){return n?n.split(`,`).map(n=>n.trim().toLowerCase()).filter(Boolean):[]}const LE=[`dependencies`,`devDependencies`,`optionalDependencies`,`peerDependencies`];function collectAllDeclarations(n,a){let S=[];for(let C of n)for(let n of collectFromWorkspace(C,a))S.push(n);return S}function collectFromWorkspace(n,a){let S=[],C=n.manifest;for(let N of LE){let F=C[N];if(!(!F||typeof F!=`object`))for(let[C,I]of Object.entries(F)){if(typeof I!=`string`||a.length&&!a.some(n=>C.toLowerCase().includes(n))||I.startsWith(`workspace:`)||I.startsWith(`file:`)||I.startsWith(`link:`)||I.startsWith(`git+`)||I.startsWith(`git:`)||I.startsWith(`http:`)||I.startsWith(`https:`)||I.startsWith(`npm:`)||I.startsWith(`portal:`))continue;let{prefix:F,version:H}=splitRange(I);S.push({workspace:n.name,workspaceLocation:n.location,name:C,field:N,currentRange:I,currentVersion:H,prefix:F})}}return S}function splitRange(n){let a=n.match(/^(\^|~|>=|<=|>|<|=)?\s*([0-9].*)$/);if(!a)return{prefix:``,version:null};let S=a[1]??``,C=a[2]?.split(/\s|[|&,]/)[0]??null;return{prefix:S,version:(C?parse(C):null)?.version??null}}function runCheckMode(n){let a=findInconsistencies(n);if(a.length===0){Ae.log(`gjsify upgrade --check: OK. ${n.length} dep(s) consistently declared across workspaces.`);return}Ae.error(`gjsify upgrade --check: FAIL. ${a.length} dep(s) declared at inconsistent ranges:\n`);for(let n of a){let a=new Map;for(let S of n.occurrences){let n=a.get(S.currentRange)??[];n.push(S.workspace),a.set(S.currentRange,n)}Ae.error(` ${RE.bold}${n.name}${RE.reset}`);for(let[n,S]of a.entries())Ae.error(` ${n.padEnd(16)} — ${S.join(`, `)}`)}Ae.error("\nFix: run `gjsify upgrade --align` (offline; aligns each dep to its highest declared range)."),process.exit(1)}function runAlignMode(n,a){let S=findInconsistencies(n);if(S.length===0){Ae.log(`gjsify upgrade --align: nothing to do. ${n.length} dep(s) already consistent.`);return}let C=[];for(let n of S){if(!n.highestVersion)continue;let a=n.occurrences.find(a=>a.currentRange===n.dominantRange)?.prefix||`^`;C.push({...n,latestVersion:n.highestVersion,diff:`none`,occurrences:n.occurrences.map(n=>({...n,prefix:a}))})}if(C.length===0){Ae.log(`gjsify upgrade --align: inconsistencies present but no parseable target version. No-op.`);return}Ae.log(`gjsify upgrade --align: aligning ${C.length} inconsistent dep(s) to their highest declared version:\n`);for(let n of C){let a=n.occurrences[0]?.prefix??`^`;Ae.log(` ${n.name.padEnd(28)} ranges: ${[...n.declaredRanges].join(`, `)} → ${a}${n.latestVersion}`)}if(a.dryRun){Ae.log(`
|
|
821
821
|
[gjsify upgrade --align] --dry-run: no files changed.`);return}let N=applyToFiles(C);Ae.log(`\n✏️ updated ${C.length} dep(s) across ${N} package.json file(s).`)}async function resolveCandidateGroups(n,a,S,C){let N=[],F=0;async function worker(){for(;;){let I=F++;if(I>=n.length)return;let H=n[I];try{let n=(await fetchPackument(H.name,{npmrc:a}))[`dist-tags`]?.latest;if(!n){S&&Ae.warn(` ${H.name}: no dist-tags.latest, skipping`);continue}let F=H.highestVersion;if(!F){S&&Ae.warn(` ${H.name}: unable to parse any current range`);continue}let I=classifyDiff(F,n);if(I===`none`||C===`minor`&&I===`major`||C===`patch`&&(I===`major`||I===`minor`))continue;N.push({...H,latestVersion:n,diff:I})}catch(n){S&&Ae.warn(` ${H.name}: fetch failed (${n.message})`)}}}return await Promise.all(Array.from({length:8},()=>worker())),N.sort((n,a)=>n.name.localeCompare(a.name)),N}function classifyDiff(n,a){let S=parse(n),C=parse(a);return!S||!C?`none`:S.major===C.major?S.minor===C.minor?S.patch===C.patch?(S.prerelease??[]).join(`.`)===(C.prerelease??[]).join(`.`)?`none`:`prerelease`:C.patch>S.patch?`patch`:`none`:C.minor>S.minor?`minor`:`none`:C.major>S.major?`major`:`none`}const RE={reset:`\x1B[0m`,bold:`\x1B[1m`,dim:`\x1B[2m`,red:`\x1B[31m`,yellow:`\x1B[33m`,green:`\x1B[32m`,cyan:`\x1B[36m`,magenta:`\x1B[35m`};function colorForDiff(n){switch(n){case`major`:return RE.red;case`minor`:return RE.yellow;case`patch`:return RE.green;case`prerelease`:return RE.cyan;default:return``}}function printTable(n){let a=Math.max(...n.map(n=>n.name.length),4),S=Math.max(...n.map(n=>`${n.occurrences.length}`.length+2),3),C=Math.max(...n.map(n=>declaredCellWidth(n)),7),N=Math.max(...n.map(n=>n.latestVersion.length),6),F=String(n.length).length+2,I=` `.repeat(F+2)+RE.bold+`name`.padEnd(a)+` `+`fan`.padEnd(S)+` `+`declared`.padEnd(C)+` `+`latest`.padEnd(N)+` kind`+RE.reset;Ae.log(I),Ae.log(` `.repeat(F+2)+RE.dim+`─`.repeat(a+S+C+N+16)+RE.reset);for(let I=0;I<n.length;I++){let H=n[I],W=`${I+1}.`.padEnd(F),K=H.declaredRanges.size>1?`${RE.magenta}⚠ ${RE.reset}`:` `,q=colorForDiff(H.diff);Ae.log(W+K+H.name.padEnd(a)+` `+RE.dim+`${H.occurrences.length}`.padEnd(S)+RE.reset+` `+RE.dim+renderDeclaredCell(H).padEnd(C)+RE.reset+` `+q+H.latestVersion.padEnd(N)+RE.reset+` `+q+H.diff+RE.reset)}let H=n.filter(n=>n.declaredRanges.size>1).length;H>0&&Ae.log(`\n${RE.magenta}⚠${RE.reset} ${H} dep(s) declared at inconsistent ranges across workspaces.`)}function declaredCellWidth(n){return renderDeclaredCell(n).length}function renderDeclaredCell(n){if(n.declaredRanges.size===1)return[...n.declaredRanges][0];let a=[...n.declaredRanges].sort().join(`, `);return a.length<=32?a:a.slice(0,29)+`…`}function printChangePlan(n){for(let a of n)for(let n of a.occurrences)Ae.log(` ${n.workspace.padEnd(38)} ${a.name.padEnd(28)} ${n.currentRange.padEnd(12)} → ${n.prefix}${a.latestVersion}`)}async function promptSelection(n){if(!process.stdin.isTTY)return Ae.log(`[gjsify upgrade] non-TTY stdin: pass --latest / --minor / --patch (or --yes for interactive-all) to upgrade non-interactively.`),[];let a=createInterface({input:process.stdin,output:process.stdout});try{Ae.log(`
|
package/lib/bundler-pick.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
// Phase D-2.B.5b
|
|
1
|
+
// Runtime bundler pick (Phase D-2.B.5b → D-3.1 runtime-aware default).
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// `@gjsify/rolldown-native` Vala/Rust prebuild via
|
|
3
|
+
// The engine is chosen by `shouldUseNative()` per host runtime:
|
|
4
|
+
// - Node: npm `rolldown(opts).write(opts.output)`.
|
|
5
|
+
// - GJS: `@gjsify/rolldown-native` (the Vala/Rust prebuild) via
|
|
6
|
+
// `bundleWithPlugins()`. npm `rolldown` is a Rust N-API addon
|
|
7
|
+
// that CANNOT load under GJS, so the native engine is the GJS
|
|
8
|
+
// DEFAULT — no env var needed (this is the Node-free build
|
|
9
|
+
// chain's bundler). This writes the BundleOutput to disk
|
|
10
|
+
// (`runNativeBundle`), replicating npm rolldown's `.write()`
|
|
11
|
+
// incl. nested chunk/asset subdirectories.
|
|
6
12
|
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// different code path.
|
|
13
|
+
// `GJSIFY_BUNDLER=native|npm` is an explicit override: `native` forces
|
|
14
|
+
// the native engine and throws if its prebuild isn't loadable for the
|
|
15
|
+
// running architecture (instead of silently switching engines); `npm`
|
|
16
|
+
// forces the npm crate (Node only).
|
|
12
17
|
//
|
|
13
18
|
// Plugin shape conversion: rolldown plugins may declare hooks either
|
|
14
19
|
// as bare functions (`load(id)`) or as `{filter, handler}` objects.
|
|
@@ -264,10 +269,23 @@ async function runNativeBundle(finalOpts) {
|
|
|
264
269
|
if (outDir)
|
|
265
270
|
await fs.mkdir(outDir, { recursive: true });
|
|
266
271
|
for (const item of result.output) {
|
|
272
|
+
// A single `--outfile` build collapses to that exact path; otherwise
|
|
273
|
+
// each chunk/asset lands at `outDir/<fileName>`. Nested fileNames
|
|
274
|
+
// (e.g. `_virtual/_rolldown/runtime.js` from a `--library` /
|
|
275
|
+
// code-split build) live in subdirectories npm rolldown's `.write()`
|
|
276
|
+
// creates implicitly — replicate that here, or `writeFile` throws
|
|
277
|
+
// ENOENT on the missing parent (regression: `--library` under the
|
|
278
|
+
// native GJS engine). Also write text assets for `.write()` parity.
|
|
279
|
+
const target = outputCfg.file && item.type === 'chunk' && result.output.length === 1
|
|
280
|
+
? outputCfg.file
|
|
281
|
+
: path.join(outDir, item.fileName);
|
|
282
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
267
283
|
if (item.type === 'chunk') {
|
|
268
|
-
const target = outputCfg.file && result.output.length === 1 ? outputCfg.file : path.join(outDir, item.fileName);
|
|
269
284
|
await fs.writeFile(target, item.code, 'utf8');
|
|
270
285
|
}
|
|
286
|
+
else if (item.sourceText !== undefined) {
|
|
287
|
+
await fs.writeFile(target, item.sourceText, 'utf8');
|
|
288
|
+
}
|
|
271
289
|
}
|
|
272
290
|
// Synthesize the RolldownOutput shape downstream code touches.
|
|
273
291
|
return synthRolldownOutput(result);
|
|
@@ -36,6 +36,13 @@ export const selfUpdateCommand = {
|
|
|
36
36
|
description: 'npm dist-tag or pinned version to install (e.g. `latest`, `next`, `0.5.0`).',
|
|
37
37
|
type: 'string',
|
|
38
38
|
default: 'latest',
|
|
39
|
+
})
|
|
40
|
+
.option('skip-deps', {
|
|
41
|
+
description: 'Update only the @gjsify/cli bundle itself; do not pull its runtime dependencies ' +
|
|
42
|
+
'(rolldown, lightningcss, @gjsify/tsc, the native gi:// bridges, …). Faster, but can ' +
|
|
43
|
+
'leave the on-disk runtime deps stale relative to the new bundle.',
|
|
44
|
+
type: 'boolean',
|
|
45
|
+
default: false,
|
|
39
46
|
}),
|
|
40
47
|
handler: async (args) => {
|
|
41
48
|
const layout = defaultGlobalLayout();
|
|
@@ -80,21 +87,33 @@ export const selfUpdateCommand = {
|
|
|
80
87
|
process.exit(1);
|
|
81
88
|
return;
|
|
82
89
|
}
|
|
83
|
-
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
// published `
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
90
|
+
// `@gjsify/cli` ships two runtimes from one package: the Node `bin`
|
|
91
|
+
// (`lib/index.js`, which imports its deps from `node_modules`) and the
|
|
92
|
+
// self-contained GJS bundle (`dist/cli.gjs.mjs`, which inlines them).
|
|
93
|
+
// The published `dependencies` therefore must cover everything `lib/**`
|
|
94
|
+
// resolves at runtime PLUS the pieces only the GJS runtime loads from
|
|
95
|
+
// disk (the `gi://` native typelib bridges via the launcher's
|
|
96
|
+
// GI_TYPELIB_PATH, `rolldown`/`lightningcss` native addons, the
|
|
97
|
+
// separate `@gjsify/tsc` bundle, `@gjsify/create-app`'s disk templates).
|
|
98
|
+
//
|
|
99
|
+
// By DEFAULT self-update now resolves that full production `dependencies`
|
|
100
|
+
// tree (`skipDeps: false`) so the on-disk runtime deps move in lockstep
|
|
101
|
+
// with the freshly-installed bundle instead of skewing behind it. This is
|
|
102
|
+
// safe today because every `@gjsify/*` package — including the
|
|
103
|
+
// `@gjsify/v8` that once 404'd → 406 and forced `skipDeps: true`
|
|
104
|
+
// unconditionally — is now published to the public registry.
|
|
105
|
+
//
|
|
106
|
+
// `--skip-deps` restores the old fast path: fetch only the top-level
|
|
107
|
+
// `@gjsify/cli` tarball and re-link the bin, leaving runtime deps untouched.
|
|
108
|
+
const pullDeps = !args.skipDeps;
|
|
109
|
+
const depNote = pullDeps ? ' + runtime dependencies' : ' (bundle only)';
|
|
110
|
+
console.log(`Installing ${PACKAGE_NAME}@${target}${depNote} ...`);
|
|
92
111
|
try {
|
|
93
112
|
await installPackages({
|
|
94
113
|
prefix: layout.prefix,
|
|
95
114
|
specs: [`${PACKAGE_NAME}@${target}`],
|
|
96
115
|
verbose: false,
|
|
97
|
-
skipDeps:
|
|
116
|
+
skipDeps: !pullDeps,
|
|
98
117
|
});
|
|
99
118
|
}
|
|
100
119
|
catch (err) {
|
|
@@ -114,6 +133,12 @@ export const selfUpdateCommand = {
|
|
|
114
133
|
}
|
|
115
134
|
}
|
|
116
135
|
console.log(`\nUpdated ${PACKAGE_NAME} to v${target}.`);
|
|
136
|
+
if (pullDeps) {
|
|
137
|
+
console.log('Runtime dependencies were resolved alongside the bundle.');
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.log('Bundle-only update (--skip-deps): on-disk runtime dependencies were left unchanged.');
|
|
141
|
+
}
|
|
117
142
|
},
|
|
118
143
|
};
|
|
119
144
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.43",
|
|
4
4
|
"description": "CLI for Gjsify",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -120,19 +120,19 @@
|
|
|
120
120
|
"cli"
|
|
121
121
|
],
|
|
122
122
|
"dependencies": {
|
|
123
|
-
"@gjsify/buffer": "^0.4.
|
|
124
|
-
"@gjsify/create-app": "^0.4.
|
|
125
|
-
"@gjsify/node-globals": "^0.4.
|
|
126
|
-
"@gjsify/node-polyfills": "^0.4.
|
|
127
|
-
"@gjsify/npm-registry": "^0.4.
|
|
128
|
-
"@gjsify/resolve-npm": "^0.4.
|
|
129
|
-
"@gjsify/rolldown-plugin-gjsify": "^0.4.
|
|
130
|
-
"@gjsify/rolldown-plugin-pnp": "^0.4.
|
|
131
|
-
"@gjsify/semver": "^0.4.
|
|
132
|
-
"@gjsify/tar": "^0.4.
|
|
133
|
-
"@gjsify/tsc": "^0.4.
|
|
134
|
-
"@gjsify/web-polyfills": "^0.4.
|
|
135
|
-
"@gjsify/workspace": "^0.4.
|
|
123
|
+
"@gjsify/buffer": "^0.4.43",
|
|
124
|
+
"@gjsify/create-app": "^0.4.43",
|
|
125
|
+
"@gjsify/node-globals": "^0.4.43",
|
|
126
|
+
"@gjsify/node-polyfills": "^0.4.43",
|
|
127
|
+
"@gjsify/npm-registry": "^0.4.43",
|
|
128
|
+
"@gjsify/resolve-npm": "^0.4.43",
|
|
129
|
+
"@gjsify/rolldown-plugin-gjsify": "^0.4.43",
|
|
130
|
+
"@gjsify/rolldown-plugin-pnp": "^0.4.43",
|
|
131
|
+
"@gjsify/semver": "^0.4.43",
|
|
132
|
+
"@gjsify/tar": "^0.4.43",
|
|
133
|
+
"@gjsify/tsc": "^0.4.43",
|
|
134
|
+
"@gjsify/web-polyfills": "^0.4.43",
|
|
135
|
+
"@gjsify/workspace": "^0.4.43",
|
|
136
136
|
"cosmiconfig": "^9.0.1",
|
|
137
137
|
"get-tsconfig": "^4.14.0",
|
|
138
138
|
"pkg-types": "^2.3.1",
|
|
@@ -140,12 +140,12 @@
|
|
|
140
140
|
"yargs": "^18.0.0"
|
|
141
141
|
},
|
|
142
142
|
"devDependencies": {
|
|
143
|
-
"@gjsify/unit": "^0.4.
|
|
143
|
+
"@gjsify/unit": "^0.4.43",
|
|
144
144
|
"@types/yargs": "^17.0.35",
|
|
145
145
|
"typescript": "^6.0.3"
|
|
146
146
|
},
|
|
147
147
|
"peerDependencies": {
|
|
148
|
-
"@gjsify/rolldown-native": "^0.4.
|
|
148
|
+
"@gjsify/rolldown-native": "^0.4.43"
|
|
149
149
|
},
|
|
150
150
|
"peerDependenciesMeta": {
|
|
151
151
|
"@gjsify/rolldown-native": {
|