@gjsify/cli 0.4.18 → 0.4.20

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 CHANGED
@@ -689,7 +689,7 @@ Defaulting to 2020, but this will stop working in the future.`)),a.ecmaVersion=1
689
689
  `)}function extractJSDocAttribute(n,a,S){if(!a)return;let C=getCommentOfNode(n,a);if(C)return parseJSDocAttributeFromText(C,S)}function getPropertyName(n,a){return a?gy(a)?getIdentifierName(a):by(a)?a.text:vy(a)?+a.text:wy(a)?a.text:hy(a)?n.createArrowFunction(void 0,void 0,[],void 0,void 0,a.expression):yy(a)?getIdentifierName(a):``:``}function getNameAsString(n){return n?gy(n)?getIdentifierName(n):by(n)||vy(n)||(0,py.isBigIntLiteral)(n)||wy(n)?n.text:hy(n)?xy(n)||vy(n)?n.text:``:yy(n)?getIdentifierName(n):joinQualifiedName(n):``}function hasModifier(n,a){return n.modifiers?n.modifiers.some(n=>n.kind===a):!1}function isExternalOrCommonJsModule(n){return(n.externalModuleIndicator||n.commonJsModuleIndicator)!==void 0}function isNodeWithLocals(n){return`locals`in n}function getGlobalsOfSourceFile(n){if(!n.redirectInfo&&isNodeWithLocals(n)){if(!isExternalOrCommonJsModule(n))return n.locals;if(n.jsGlobalAugmentations)return n.jsGlobalAugmentations;if(n.symbol&&n.symbol.globalExports)return n.symbol.globalExports}}function ensureImportIsEmitted(n,a){if(a&&n.importClause&&n.importClause.namedBindings&&_y(n.importClause.namedBindings)){for(let S of n.importClause.namedBindings.elements)if(S.name.escapedText===a.escapedText){S.flags|=Ty.Synthesized;return}}n.flags|=Ty.Synthesized}function serializeEntityNameAsExpression(n,a){switch(a.kind){case Ey.Identifier:return finish(a,n.createIdentifier(getIdentifierName(a)));case Ey.QualifiedName:return finish(a,serializeQualifiedNameAsExpression(n,a))}return a}function serializeQualifiedNameAsExpression(n,a){return n.createPropertyAccessExpression(serializeEntityNameAsExpression(n,a.left),a.right)}function finish(n,a){return Sy(a,n),a._original=a.original,a._symbol=n._symbol??n.symbol,a.symbol=a._symbol,a}var py,my,hy,gy,_y,vy,yy,by,xy,Sy,Cy,wy,Ty,Ey,cloneHook,NodeConverter,Dy=__esmMin(()=>{Ve(),py=__toESM(pp(),1),fy(),{isArrowFunction:my,isComputedPropertyName:hy,isIdentifier:gy,isNamedImports:_y,isNumericLiteral:vy,isPrivateIdentifier:yy,isStringLiteral:by,isStringLiteralLike:xy,setOriginalNode:Sy,getLeadingCommentRanges:Cy,isNoSubstitutionTemplateLiteral:wy,NodeFlags:Ty,SyntaxKind:Ey}=py.default,cloneHook=(n,a)=>{if(gy(n))return{text:()=>getIdentifierName(n)}},NodeConverter=class{constructor(n){this.f=n}toExpression(n){if(n===void 0)return this.f.createIdentifier(`undefined`);if(Array.isArray(n))return this.f.createArrayLiteralExpression(this.f.createNodeArray(n.map(n=>this.toExpression(n))));if(typeof n==`string`)return this.f.createStringLiteral(n,!0);if(typeof n==`number`)return this.f.createNumericLiteral(n);if(typeof n==`bigint`)return this.f.createBigIntLiteral(String(n));if(typeof n==`boolean`)return n?this.f.createTrue():this.f.createFalse();if(n.pos===-1&&n.end===-1&&n.parent===void 0)return my(n)?n.body.pos===-1&&n.body.end===-1&&n.body.parent===void 0?n:this.f.createArrowFunction(n.modifiers,n.typeParameters,n.parameters,n.type,n.equalsGreaterThanToken,this.toExpression(n.body)):n;switch(n.kind){case Ey.Identifier:return finish(n,this.f.createIdentifier(getIdentifierName(n)));case Ey.StringLiteral:return finish(n,this.f.createStringLiteral(n.text));case Ey.NumericLiteral:return finish(n,this.f.createNumericLiteral(n.text));case Ey.BigIntLiteral:return finish(n,this.f.createBigIntLiteral(n.text));case Ey.TrueKeyword:return finish(n,this.f.createTrue());case Ey.FalseKeyword:return finish(n,this.f.createFalse())}try{return cloneNode(n,{preserveComments:!1,factory:this.f,setOriginalNodes:!0,preserveSymbols:!0,setParents:!0,hook:cloneHook})}catch(a){throw Be.error(`could not clone node`,n),a}}}}),Oy,ky,Ay=__esmMin(()=>{(function(n){n[n.integer=0]=`integer`,n[n.int8=1]=`int8`,n[n.int16=2]=`int16`,n[n.int32=3]=`int32`,n[n.uint8=4]=`uint8`,n[n.uint16=5]=`uint16`,n[n.uint32=6]=`uint32`,n[n.float=7]=`float`,n[n.float32=8]=`float32`,n[n.float64=9]=`float64`})(Oy||={}),(function(n){n[n.never=0]=`never`,n[n.any=1]=`any`,n[n.unknown=2]=`unknown`,n[n.void=3]=`void`,n[n.object=4]=`object`,n[n.string=5]=`string`,n[n.number=6]=`number`,n[n.numberBrand=7]=`numberBrand`,n[n.boolean=8]=`boolean`,n[n.bigint=9]=`bigint`,n[n.symbol=10]=`symbol`,n[n.null=11]=`null`,n[n.undefined=12]=`undefined`,n[n.literal=13]=`literal`,n[n.function=14]=`function`,n[n.method=15]=`method`,n[n.methodSignature=16]=`methodSignature`,n[n.parameter=17]=`parameter`,n[n.property=18]=`property`,n[n.propertySignature=19]=`propertySignature`,n[n.class=20]=`class`,n[n.classExtends=21]=`classExtends`,n[n.classReference=22]=`classReference`,n[n.optional=23]=`optional`,n[n.readonly=24]=`readonly`,n[n.public=25]=`public`,n[n.private=26]=`private`,n[n.protected=27]=`protected`,n[n.abstract=28]=`abstract`,n[n.defaultValue=29]=`defaultValue`,n[n.description=30]=`description`,n[n.rest=31]=`rest`,n[n.regexp=32]=`regexp`,n[n.enum=33]=`enum`,n[n.enumMember=34]=`enumMember`,n[n.set=35]=`set`,n[n.map=36]=`map`,n[n.array=37]=`array`,n[n.tuple=38]=`tuple`,n[n.tupleMember=39]=`tupleMember`,n[n.namedTupleMember=40]=`namedTupleMember`,n[n.union=41]=`union`,n[n.intersection=42]=`intersection`,n[n.indexSignature=43]=`indexSignature`,n[n.objectLiteral=44]=`objectLiteral`,n[n.mappedType=45]=`mappedType`,n[n.in=46]=`in`,n[n.frame=47]=`frame`,n[n.moveFrame=48]=`moveFrame`,n[n.return=49]=`return`,n[n.templateLiteral=50]=`templateLiteral`,n[n.date=51]=`date`,n[n.int8Array=52]=`int8Array`,n[n.uint8ClampedArray=53]=`uint8ClampedArray`,n[n.uint8Array=54]=`uint8Array`,n[n.int16Array=55]=`int16Array`,n[n.uint16Array=56]=`uint16Array`,n[n.int32Array=57]=`int32Array`,n[n.uint32Array=58]=`uint32Array`,n[n.float32Array=59]=`float32Array`,n[n.float64Array=60]=`float64Array`,n[n.bigInt64Array=61]=`bigInt64Array`,n[n.arrayBuffer=62]=`arrayBuffer`,n[n.promise=63]=`promise`,n[n.arg=64]=`arg`,n[n.typeParameter=65]=`typeParameter`,n[n.typeParameterDefault=66]=`typeParameterDefault`,n[n.var=67]=`var`,n[n.loads=68]=`loads`,n[n.indexAccess=69]=`indexAccess`,n[n.keyof=70]=`keyof`,n[n.infer=71]=`infer`,n[n.typeof=72]=`typeof`,n[n.condition=73]=`condition`,n[n.jumpCondition=74]=`jumpCondition`,n[n.jump=75]=`jump`,n[n.call=76]=`call`,n[n.inline=77]=`inline`,n[n.inlineCall=78]=`inlineCall`,n[n.distribute=79]=`distribute`,n[n.extends=80]=`extends`,n[n.widen=81]=`widen`,n[n.static=82]=`static`,n[n.mappedType2=83]=`mappedType2`,n[n.functionReference=84]=`functionReference`,n[n.callSignature=85]=`callSignature`,n[n.typeName=86]=`typeName`,n[n.implements=87]=`implements`,n[n.nominal=88]=`nominal`})(ky||={})}),jy=__esmMin(()=>{Ay()});function patternMatch(n,a,S){let C=a.filter(n=>n[0]!==`!`),N=a.filter(n=>n[0]===`!`).map(n=>n.substring(1));return My.default.isMatch(n,C,{ignore:N})}var My,Ny,Py,Fy,Iy,Ly,Ry,Resolver,zy=__esmMin(()=>{My=__toESM(pg(),1),Ny=__toESM(pp(),1),{createSourceFile:Py,resolveModuleName:Fy,isStringLiteral:Iy,JSDocParsingMode:Ly,ScriptTarget:Ry}=Ny.default,Resolver=class{constructor(n,a,S){this.compilerOptions=n,this.host=a,this.sourceFiles=S}resolve(n,a){let S=a.moduleSpecifier;if(S&&Iy(S))return this.resolveSourceFile(n,S)}resolveImpl(n,a){if(this.host.resolveModuleNameLiterals!==void 0){let S=this.host.resolveModuleNameLiterals([n],a.fileName,void 0,this.compilerOptions,a,void 0);return S[0]?S[0].resolvedModule:void 0}return this.host.resolveModuleNames===void 0?Fy(n.text,a.fileName,this.compilerOptions,this.host).resolvedModule:this.host.resolveModuleNames([n.text],a.fileName,void 0,void 0,this.compilerOptions)[0]}resolveSourceFile(n,a){let S=this.resolveImpl(a,n);if(!S||!S.resolvedFileName.endsWith(`.ts`)&&!S.resolvedFileName.endsWith(`.tsx`)&&!S.resolvedFileName.endsWith(`.d.ts`))return;let C=S.resolvedFileName;if(this.sourceFiles[C])return this.sourceFiles[C];let N=this.host.readFile(S.resolvedFileName);if(!N)return;let F=this.sourceFiles[C]=Py(C,N,{languageVersion:this.compilerOptions.target||Ry.ES2018,jsDocParsingMode:Ly?Ly.ParseNone:void 0},!0);return this.sourceFiles[C]=F,Ny.default.bindSourceFile(F,this.compilerOptions),F}}}),By,Vy,Hy,Uy=__esmMin(()=>{Ve(),By=!1;try{By=typeof localStorage<`u`}catch{}Vy=typeof process<`u`,(By&&localStorage.getItem(`DEBUG`)||Vy&&process.env.DEBUG)&&Be.log,Hy=function knownLibFilesForCompilerOptions(n,a){var S=n.target||a.ScriptTarget.ES5,C=n.lib||[],N=`lib.d.ts,lib.decorators.d.ts,lib.decorators.legacy.d.ts,lib.dom.d.ts,lib.dom.iterable.d.ts,lib.webworker.d.ts,lib.webworker.importscripts.d.ts,lib.webworker.iterable.d.ts,lib.scripthost.d.ts,lib.es5.d.ts,lib.es6.d.ts,lib.es2015.collection.d.ts,lib.es2015.core.d.ts,lib.es2015.d.ts,lib.es2015.generator.d.ts,lib.es2015.iterable.d.ts,lib.es2015.promise.d.ts,lib.es2015.proxy.d.ts,lib.es2015.reflect.d.ts,lib.es2015.symbol.d.ts,lib.es2015.symbol.wellknown.d.ts,lib.es2016.array.include.d.ts,lib.es2016.d.ts,lib.es2016.full.d.ts,lib.es2017.d.ts,lib.es2017.date.d.ts,lib.es2017.full.d.ts,lib.es2017.intl.d.ts,lib.es2017.object.d.ts,lib.es2017.sharedmemory.d.ts,lib.es2017.string.d.ts,lib.es2017.typedarrays.d.ts,lib.es2018.asyncgenerator.d.ts,lib.es2018.asynciterable.d.ts,lib.es2018.d.ts,lib.es2018.full.d.ts,lib.es2018.intl.d.ts,lib.es2018.promise.d.ts,lib.es2018.regexp.d.ts,lib.es2019.array.d.ts,lib.es2019.d.ts,lib.es2019.full.d.ts,lib.es2019.intl.d.ts,lib.es2019.object.d.ts,lib.es2019.string.d.ts,lib.es2019.symbol.d.ts,lib.es2020.bigint.d.ts,lib.es2020.d.ts,lib.es2020.date.d.ts,lib.es2020.full.d.ts,lib.es2020.intl.d.ts,lib.es2020.number.d.ts,lib.es2020.promise.d.ts,lib.es2020.sharedmemory.d.ts,lib.es2020.string.d.ts,lib.es2020.symbol.wellknown.d.ts,lib.es2021.d.ts,lib.es2021.full.d.ts,lib.es2021.intl.d.ts,lib.es2021.promise.d.ts,lib.es2021.string.d.ts,lib.es2021.weakref.d.ts,lib.es2022.array.d.ts,lib.es2022.d.ts,lib.es2022.error.d.ts,lib.es2022.full.d.ts,lib.es2022.intl.d.ts,lib.es2022.object.d.ts,lib.es2022.regexp.d.ts,lib.es2022.sharedmemory.d.ts,lib.es2022.string.d.ts,lib.es2023.array.d.ts,lib.es2023.collection.d.ts,lib.es2023.d.ts,lib.es2023.full.d.ts,lib.esnext.array.d.ts,lib.esnext.asynciterable.d.ts,lib.esnext.bigint.d.ts,lib.esnext.d.ts,lib.esnext.decorators.d.ts,lib.esnext.disposable.d.ts,lib.esnext.full.d.ts,lib.esnext.intl.d.ts,lib.esnext.promise.d.ts,lib.esnext.string.d.ts,lib.esnext.symbol.d.ts,lib.esnext.weakref.d.ts`.split(`,`),F=a.ScriptTarget[S],I=N.filter(function(n){return n.startsWith(`lib.`+F.toLowerCase())}),H=N.indexOf(I.pop()),W=function getMax(n){return n&&n.length?n.reduce(function(n,a){return a>n?a:n}):void 0}(C.map(function(n){var a=N.filter(function(a){return a.startsWith(`lib.`+n.toLowerCase())});return a.length===0?0:N.indexOf(a.pop())}))||0,K=Math.max(H,W);return N.slice(0,K+1)}});function isDebug(n=1){let a=`deepkit`+(n>1?`+`.repeat(n-1):``);return typeof process<`u`&&typeof process.env.DEBUG==`string`&&process.env.DEBUG.includes(a)}function debug(...n){isDebug(1)&&Be.debug(...n)}function debug2(...n){isDebug(2)&&Be.debug(...n)}var Wy=__esmMin(()=>{Ve()});function isObject$1(n){return n?typeof n==`object`&&!Array.isArray(n):!1}function readTsConfig(n,a){let S=Gy.default.readConfigFile(a,a=>n.readFile(a));if(S.error){debug(`Failed to read tsconfig ${a}: ${S.error.messageText}`);return}let C=Gy.default.parseJsonConfigFileContent(S.config,n,Bo(a)),N=[18003],F=[18e3],I=C.errors.filter(n=>!N.includes(n.code));if(I.length&&debug(`Failed to parse tsconfig ${a}: ${C.errors.map(n=>n.messageText).join(`, `)}`),!I.filter(n=>!F.includes(n.code)).length)return Object.assign(S.config,{compilerOptions:C.options})}function reflectionModeMatcher(n,a){return Array.isArray(n.exclude)&&patternMatch(a,n.exclude)?`never`:Array.isArray(n.reflection)?patternMatch(a,n.reflection)?`default`:`never`:n.reflection===`default`||n.reflection===`explicit`?n.reflection:`never`}function ensureStringArray(n){return Array.isArray(n)?n.map(n=>``+n):typeof n==`string`?[n]:[]}function parseRawMode(n){return typeof n==`boolean`?n?`default`:`never`:n===`default`||n===`explicit`?n:ensureStringArray(n)}function resolvePaths(n,a){if(!(!a||!Array.isArray(a)))for(let S=0;S<a.length;S++){if(typeof a[S]!=`string`||Io(a[S]))continue;let C=a[S],N=!1;C.startsWith(`!`)&&(N=!0,C=C.substring(1)),(C.startsWith(`./`)||C.includes(`/`))&&(C=Lo(n,C)),C=C.replace(/\\/g,`/`),N&&(C=`!`+C),a[S]=C}}function appendPaths(n=Ky,a,S){return n===`replace`?[...S||a]:S?[...a,...S]:[...a]}function applyConfigValues(n,a,S){let C=isObject$1(a.deepkitCompilerOptions)?a.deepkitCompilerOptions?.reflection:a.reflection;if(isObject$1(a.deepkitCompilerOptions)&&n.mergeStrategy===void 0&&(n.mergeStrategy=a.deepkitCompilerOptions.mergeStrategy),C!==void 0){let a=parseRawMode(C);n.reflection===void 0?n.reflection=a:typeof n.reflection==`string`||(Array.isArray(a)&&Array.isArray(n.reflection)?n.reflection=appendPaths(n.mergeStrategy,a,n.reflection):typeof a==`string`&&Array.isArray(n.reflection))}if(isObject$1(a.deepkitCompilerOptions)&&a.deepkitCompilerOptions.exclude!==void 0){let S=ensureStringArray(a.deepkitCompilerOptions.exclude);n.exclude=appendPaths(n.mergeStrategy,S,n.exclude)}resolvePaths(S,n.reflection),resolvePaths(S,n.exclude),a.compilerOptions&&Object.keys(n.compilerOptions).length===0&&Object.assign(n.compilerOptions,a.compilerOptions),n.extends=a.extends}function getConfigResolver(n,a,S,C,N=``){let F={compilerOptions:{}};if(N||=typeof S.configFilePath==`string`?S.configFilePath:``,N){if(n[N])return n[N];let S=readTsConfig(a,N);S&&applyConfigValues(F,S,Bo(N))}else{if(!N&&C){let n=Bo(C.fileName),S=Gy.default.findConfigFile(n,S=>(S=Io(S)?S:Lo(n,S),a.fileExists(S)));debug2(`No tsConfigPath|compilerOptions.configFilePath provided. Manually searching for tsconfig.json in ${n} returned ${S}`),S&&(N=Io(S)?S:Lo(n,S))}if(N){if(n[N])return n[N];let S=readTsConfig(a,N);S&&applyConfigValues(F,S,Bo(N))}}if(N){let n=Bo(N),S=F,C=new Set;for(C.add(N);S.extends;){let N=Lo(n,S.extends);if(C.has(N))break;C.add(N);let F=Gy.default.readConfigFile(N,n=>a.readFile(n));if(!F)break;n=Bo(N),applyConfigValues(S,F.config,n)}}else throw Error(`No tsconfig found for ${C?.fileName}, that is weird. Either provide a tsconfig or compilerOptions.configFilePath`);F.exclude=F.exclude?[...qy,...F.exclude]:[...qy],F.compilerOptions.configFilePath=N;let I={path:N,compilerOptions:Object.assign(F.compilerOptions,S),exclude:F.exclude,reflection:F.reflection,mergeStrategy:F.mergeStrategy||Ky};isDebug()&&debug(`Found config ${I.path}:\nreflection:`,I.reflection,`
690
690
  exclude:`,I.exclude,`
691
691
  paths:`,I.compilerOptions.paths);let match=n=>({mode:reflectionModeMatcher(F,n),tsConfigPath:N});return n[N]={config:I,match}}var Gy,Ky,qy,Jy=__esmMin(()=>{Jo(),Gy=__toESM(pp(),1),Wy(),zy(),__name$1(isObject$1,`isObject`),Ky=`merge`,qy=[`lib.dom*.d.ts`,`*typedarrays.d.ts`,`lib.webworker*.d.ts`,`lib.decorator*.d.ts`,`lib.es2015.proxy.d.ts`,`lib.es2020.sharedmemory.d.ts`,`lib.es2015.core.d.ts`]});function encodeOps(n){return n.map(n=>String.fromCharCode(n+33)).join(``)}function filterUndefined(n){return Object.fromEntries(Object.entries(n).filter(([,n])=>n!==void 0))}function debugPackStruct(n,a,S){let C=[];for(let n=0;n<S.ops.length;n++){let a=S.ops[n],N=rx[a];if(C.push(ky[a]),N&&N.params>0)for(let a=0;a<N.params;a++){let a=S.ops[++n];C.push(a)}}let N=Yb(),F=[];for(let a of S.stack)typeof a==`object`&&`getText`in a?F.push(N.printNode(Zb.Unspecified,a,n)):F.push(JSON.stringify(a));Be.log(F.join(`,`),`|`,...C)}function findVariable(n,a,S=0){let C=n.variables.find(n=>n.name===a);if(C)return{frameOffset:S,stackIndex:C.index};if(n.previous)return findVariable(n.previous,a,S+1)}function findConditionalFrame(n){if(n.conditional)return n;if(n.previous)return findConditionalFrame(n.previous)}function getAssignTypeExpression(n){if(Mb(n)&&nb(n.expression)&&(n=n.expression),nb(n)&&_b(n.expression)&&getIdentifierName(n.expression)===`__assignType`&&n.arguments.length>0)return n.arguments[0]}function getReceiveTypeParameter(n){if(Ub(n))for(let a of n.types){let n=getReceiveTypeParameter(a);if(n)return n}else if(Hb(n)&&_b(n.typeName)&&getIdentifierName(n.typeName)===`ReceiveType`&&n.typeArguments&&n.typeArguments.length===1)return n}var Yy,Xy,Zy,Qy,$y,eb,tb,nb,rb,ib,ab,ob,sb,lb,ub,db,fb,pb,mb,hb,gb,_b,vb,yb,bb,xb,Sb,Cb,wb,Tb,Eb,Db,Ob,kb,Ab,jb,Mb,Nb,Pb,Fb,Ib,Lb,Rb,zb,Bb,Vb,Hb,Ub,Wb,Gb,Kb,qb,Jb,Yb,Xb,Zb,Qb,$b,ex,tx,nx,rx,CompilerProgram,Cache,ReflectionTransformer,DeclarationTransformer,ix,ax,ox,sx,cx=__esmMin(()=>{Ve(),Yy=__toESM(pp(),1),Dy(),jy(),zy(),Uy(),Wy(),Jy(),{visitEachChild:Xy,visitNode:Zy,isPropertyAssignment:Qy,isArrayTypeNode:$y,isArrowFunction:eb,isBlock:tb,isCallExpression:nb,isCallSignatureDeclaration:rb,isClassDeclaration:ib,isClassExpression:ab,isConstructorDeclaration:ob,isConstructorTypeNode:sb,isConstructSignatureDeclaration:lb,isEnumDeclaration:ub,isExportDeclaration:db,isExpression:fb,isExpressionWithTypeArguments:pb,isFunctionDeclaration:mb,isFunctionExpression:hb,isFunctionLike:gb,isIdentifier:_b,isImportClause:vb,isImportDeclaration:yb,isImportSpecifier:bb,isInferTypeNode:xb,isInterfaceDeclaration:Sb,isMethodDeclaration:Cb,isMethodSignature:wb,isModuleDeclaration:Tb,isNamedExports:Eb,isNamedTupleMember:Db,isNewExpression:Ob,isObjectLiteralExpression:kb,isOptionalTypeNode:Ab,isParameter:jb,isParenthesizedExpression:Mb,isParenthesizedTypeNode:Nb,isPropertyAccessExpression:Pb,isQualifiedName:Fb,isSourceFile:Ib,isStringLiteral:Lb,isTypeAliasDeclaration:Rb,isTypeLiteralNode:zb,isTypeParameterDeclaration:Bb,isTypeQueryNode:Vb,isTypeReferenceNode:Hb,isUnionTypeNode:Ub,isExpressionStatement:Wb,isVariableDeclaration:Gb,getEffectiveConstraintOfTypeParameter:Kb,addSyntheticLeadingComment:qb,createCompilerHost:Jb,createPrinter:Yb,escapeLeadingUnderscores:Xb,EmitHint:Zb,NodeFlags:Qb,SyntaxKind:$b,ScriptTarget:ex,ModifierFlags:tx,ScriptKind:nx}=Yy.default,rx={[ky.literal]:{params:1},[ky.classReference]:{params:1},[ky.propertySignature]:{params:1},[ky.property]:{params:1},[ky.jump]:{params:1},[ky.enum]:{params:0},[ky.enumMember]:{params:1},[ky.typeParameter]:{params:1},[ky.typeParameterDefault]:{params:1},[ky.mappedType]:{params:2},[ky.call]:{params:1},[ky.inline]:{params:1},[ky.inlineCall]:{params:2},[ky.loads]:{params:2},[ky.extends]:{params:0},[ky.infer]:{params:2},[ky.defaultValue]:{params:1},[ky.parameter]:{params:1},[ky.method]:{params:1},[ky.function]:{params:1},[ky.description]:{params:1},[ky.numberBrand]:{params:1},[ky.typeof]:{params:1},[ky.classExtends]:{params:1},[ky.distribute]:{params:1},[ky.jumpCondition]:{params:2},[ky.typeName]:{params:1},[ky.implements]:{params:1}},CompilerProgram=class{constructor(n,a){this.forNode=n,this.sourceFile=a,this.ops=[],this.stack=[],this.mainOffset=0,this.stackPosition=0,this.frame={variables:[],opIndex:0},this.activeCoRoutines=[],this.coRoutines=[],this.resolveFunctionParameters=new Map}buildPackStruct(){let n=[...this.ops];if(this.coRoutines.length)for(let a=this.coRoutines.length-1;a>=0;a--)n.unshift(...this.coRoutines[a].ops);return this.mainOffset&&n.unshift(ky.jump,this.mainOffset),{ops:n,stack:this.stack}}isEmpty(){return this.ops.length===0}pushConditionalFrame(){let n=this.pushFrame();n.conditional=!0}pushStack(n){return this.stack.push(n),this.stackPosition++}pushCoRoutine(){this.pushFrame(!0),this.activeCoRoutines.push({ops:[]})}popCoRoutine(){let n=this.activeCoRoutines.pop();if(!n)throw Error(`No active co routine found`);this.popFrameImplicit(),this.mainOffset===0&&(this.mainOffset=2);let a=this.mainOffset;return n.ops.push(ky.return),this.coRoutines.push(n),this.mainOffset+=n.ops.length,a}pushOp(...n){for(let a of n)if(typeof a!=`number`)throw Error(`No valid OP added`);if(this.activeCoRoutines.length){this.activeCoRoutines[this.activeCoRoutines.length-1].ops.push(...n);return}this.ops.push(...n)}pushOpAtFrame(n,...a){if(this.activeCoRoutines.length){this.activeCoRoutines[this.activeCoRoutines.length-1].ops.splice(n.opIndex,0,...a);return}this.ops.splice(n.opIndex,0,...a)}findOrAddStackEntry(n){let a=this.stack.indexOf(n);return a===-1?this.pushStack(n):a}increaseStackPosition(){return this.stackPosition++}resolveFunctionParametersIncrease(n){this.resolveFunctionParameters.set(n,(this.resolveFunctionParameters.get(n)||0)+1)}resolveFunctionParametersDecrease(n){this.resolveFunctionParameters.set(n,(this.resolveFunctionParameters.get(n)||1)-1)}isResolveFunctionParameters(n){return(this.resolveFunctionParameters.get(n)||0)>0}pushFrame(n=!1){n||this.pushOp(ky.frame);let a=this.activeCoRoutines.length?this.activeCoRoutines[this.activeCoRoutines.length-1].ops.length:this.ops.length;return this.frame={previous:this.frame,variables:[],opIndex:a},this.frame}findConditionalFrame(){return findConditionalFrame(this.frame)}popFrameImplicit(){this.frame.previous&&(this.frame=this.frame.previous)}moveFrame(){this.pushOp(ky.moveFrame),this.frame.previous&&(this.frame=this.frame.previous)}pushVariable(n,a=this.frame){return this.pushOpAtFrame(a,ky.var),a.variables.push({index:a.variables.length,name:n}),a.variables.length-1}pushTemplateParameter(n,a=!1){return this.pushOp(a?ky.typeParameterDefault:ky.typeParameter,this.findOrAddStackEntry(n)),this.frame.variables.push({index:this.frame.variables.length,name:n}),this.frame.variables.length-1}findVariable(n,a=this.frame){return findVariable(a,n)}},Cache=class{constructor(){this.resolver={},this.sourceFiles={}}tick(){Object.keys(this.sourceFiles).length>300&&(this.sourceFiles={})}},ReflectionTransformer=class{constructor(n,a=new Cache){this.context=n,this.cache=a,this.embedAssignType=!1,this.compileDeclarations=new Map,this.embedDeclarations=new Map,this.compiledDeclarations=new Set,this.addImports=[],this.additionalImports=new Map,this.overriddenHost=!1,this.knownClasses={Int8Array:ky.int8Array,Uint8Array:ky.uint8Array,Uint8ClampedArray:ky.uint8ClampedArray,Int16Array:ky.int16Array,Uint16Array:ky.uint16Array,Int32Array:ky.int32Array,Uint32Array:ky.uint32Array,Float32Array:ky.float32Array,Float64Array:ky.float64Array,ArrayBuffer:ky.arrayBuffer,BigInt64Array:ky.bigInt64Array,Date:ky.date,RegExp:ky.regexp,String:ky.string,Number:ky.number,BigInt:ky.bigint,Boolean:ky.boolean},this.f=n.factory,this.nodeConverter=new NodeConverter(this.f),this.compilerOptions={...filterUndefined(n.getCompilerOptions())},this.host=Jb(this.compilerOptions),this.resolver=new Resolver(this.compilerOptions,this.host,this.cache.sourceFiles),this.parseConfigHost={useCaseSensitiveFileNames:!0,fileExists:n=>this.host.fileExists(n),readFile:n=>this.host.readFile(n),readDirectory:(n,a,S,C,N)=>this.host.readDirectory?this.host.readDirectory(n,a||[],S,C||[],N):[]};{let n=this.f.createIdentifier(`T`),a=this.f.createIdentifier(`Options`);this.intrinsicMetaDeclaration=this.f.createTypeAliasDeclaration([],`TypeAnnotation`,[this.f.createTypeParameterDeclaration([],n),this.f.createTypeParameterDeclaration([],a,void 0,this.f.createTypeReferenceNode(`never`))],this.f.createTypeLiteralNode([this.f.createPropertySignature(void 0,`__meta`,this.f.createToken($b.QuestionToken),this.f.createIntersectionTypeNode([this.f.createTypeReferenceNode(`never`),this.f.createTupleTypeNode([this.f.createTypeReferenceNode(n),this.f.createTypeReferenceNode(a)])]))]))}}forHost(n){return this.host=n,this.resolver.host=n,this.overriddenHost=!0,this}withReflection(n){let match=a=>({mode:reflectionModeMatcher(n,a),tsConfigPath:``}),a={...n,path:``,mergeStrategy:`replace`,compilerOptions:this.compilerOptions};return this.overriddenConfigResolver={config:a,match},this}transformBundle(n){return n}getTempResultIdentifier(){if(this.tempResultIdentifier)return this.tempResultIdentifier;let n=isNodeWithLocals(this.sourceFile)?this.sourceFile.locals:void 0;if(n){let a=`Ωr`;for(let S=0;a=`Ωr`+(S||``),n.has(Xb(a));S++);this.tempResultIdentifier=this.f.createIdentifier(a)}else this.tempResultIdentifier=this.f.createIdentifier(`Ωr`);return this.tempResultIdentifier}getConfigResolver(n){return this.overriddenConfigResolver?this.overriddenConfigResolver:getConfigResolver(this.cache.resolver,this.parseConfigHost,this.compilerOptions,n)}getReflectionConfig(n){return this.getConfigResolver(n).match(n.fileName)}isWithReflection(n,a){let S=this.getExplicitReflectionMode(n,a);if(S===!1)return!1;if(!n)return!0;let C=this.getReflectionConfig(n);return C.mode===`explicit`?S===!0:C.mode===`default`}transformSourceFile(n){if(this.sourceFile=n,n.scriptKind!==nx.TS&&n.scriptKind!==nx.TSX||n.deepkitTransformed)return n;this.embedAssignType=!1,this.addImports=[],this.additionalImports.clear();let a=Date.now(),S=this.getConfigResolver(n),C=S.match(n.fileName);if(Object.assign(this.compilerOptions,S.config.compilerOptions),C.mode===`never`)return debug(`Transform file with reflection=${C.mode} took ${Date.now()-a}ms (${this.getModuleType()}) ${n.fileName} via config ${C.tsConfigPath||`none`}.`),n;if(n.locals||Yy.default.bindSourceFile(n,this.compilerOptions),n.kind!==$b.SourceFile){if(K===void 0)throw Error(`Invalid TypeScript library imported. SyntaxKind different ${n.kind} !== ${$b.SourceFile}.`);let a=K.resolve(`typescript`);throw Error(`Invalid TypeScript library imported. SyntaxKind different ${n.kind} !== ${$b.SourceFile}. typescript package path: ${a}`)}let visitor=a=>{if(a=Xy(a,visitor,this.context),(Sb(a)||Rb(a)||ub(a))&&this.isWithReflection(n,a)&&this.compileDeclarations.set(a,{name:a.name,sourceFile:this.sourceFile}),Cb(a)&&a.parent&&a.body&&kb(a.parent)){let n=!0;if(a.name.kind===$b.Identifier&&getIdentifierName(a.name)===`default`&&(n=!1),n){let n=this.decorateFunctionExpression(this.f.createFunctionExpression(a.modifiers,a.asteriskToken,_b(a.name)?a.name:void 0,a.typeParameters,a.parameters,a.type,a.body));a=this.f.createPropertyAssignment(a.name,n)}}if(ib(a))return this.decorateClass(n,a);if(jb(a)&&a.parent&&a.type){let n=ob(a.parent)?a.parent.parent.typeParameters:a.parent.typeParameters;if(!n)return a;let S=getReceiveTypeParameter(a.type);if(S&&S.typeArguments){let C=S.typeArguments[0];if(C&&Hb(C)&&_b(C.typeName)){let N=getIdentifierName(C.typeName),F=n.findIndex(n=>getIdentifierName(n.name)===N),I=this.f.createIdentifier(`globalThis`);if(eb(a.parent)){let n=this.getArrowFunctionΩPropertyAccessIdentifier(a.parent);if(!n)return a;I=n}else (mb(a.parent)||hb(a.parent))&&a.parent.name?I=a.parent.name:Cb(a.parent)&&_b(a.parent.name)?I=this.f.createPropertyAccessExpression(this.f.createIdentifier(`this`),a.parent.name):ob(a.parent)&&(I=this.f.createPropertyAccessExpression(this.f.createIdentifier(`this`),`constructor`));return this.f.updateParameterDeclaration(a,a.modifiers,a.dotDotDotToken,a.name,a.questionToken,S,this.f.createElementAccessChain(this.f.createPropertyAccessExpression(I,this.f.createIdentifier(`Ω`)),this.f.createToken($b.QuestionDotToken),this.f.createNumericLiteral(F)))}}}else if(ab(a))return this.decorateClass(n,a);else if(hb(a))return this.decorateFunctionExpression(this.injectResetΩ(a));else if(mb(a))return this.decorateFunctionDeclaration(this.injectResetΩ(a));else if(Cb(a)||ob(a))return this.injectResetΩ(a);else if(eb(a))return this.decorateArrowFunction(this.injectResetΩ(a));else if((Ob(a)||nb(a))&&a.typeArguments&&a.typeArguments.length>0){if(nb(a)&&_b(a.expression)&&[`valuesOf`,`propertiesOf`,`typeOf`].includes(getIdentifierName(a.expression))){let n=[...a.arguments];n.length||n.push(this.f.createArrayLiteralExpression());let S=this.getTypeOfType(a.typeArguments[0]);return S?(n.push(S),this.f.updateCallExpression(a,a.expression,a.typeArguments,this.f.createNodeArray(n))):a}if(eb(getAssignTypeExpression(a.expression)||a.expression))return a;let n=[];for(let S of a.typeArguments){let a=this.getTypeOfType(S);n.push(a||this.f.createIdentifier(`undefined`))}let S=this.f.createIdentifier(`globalThis`);(_b(a.expression)||Pb(a.expression))&&(S=a.expression);let C=this.f.createBinaryExpression(this.f.createPropertyAccessExpression(S,`Ω`),this.f.createToken($b.EqualsToken),this.f.createArrayLiteralExpression(n)),N=Ob(a)?this.f.updateNewExpression:this.f.updateCallExpression;if(Pb(a.expression)){if(nb(a.expression.expression)){let S=this.getTempResultIdentifier(),C=this.f.createBinaryExpression(this.f.createPropertyAccessExpression(this.f.createPropertyAccessExpression(S,a.expression.name),`Ω`),this.f.createToken($b.EqualsToken),this.f.createArrayLiteralExpression(n));return N(a,this.f.createPropertyAccessExpression(this.f.createParenthesizedExpression(this.f.createBinaryExpression(this.f.createBinaryExpression(this.f.createBinaryExpression(S,this.f.createToken(Yy.default.SyntaxKind.EqualsToken),a.expression.expression),this.f.createToken(Yy.default.SyntaxKind.CommaToken),C),this.f.createToken(Yy.default.SyntaxKind.CommaToken),S)),a.expression.name),a.typeArguments,a.arguments)}else if(Mb(a.expression.expression)){let S=this.getTempResultIdentifier(),C=this.f.createBinaryExpression(this.f.createPropertyAccessExpression(this.f.createPropertyAccessExpression(S,a.expression.name),`Ω`),this.f.createToken($b.EqualsToken),this.f.createArrayLiteralExpression(n)),F=N(a,this.f.updatePropertyAccessExpression(a.expression,this.f.updateParenthesizedExpression(a.expression.expression,this.f.createBinaryExpression(this.f.createBinaryExpression(this.f.createBinaryExpression(S,this.f.createToken($b.EqualsToken),a.expression.expression.expression),this.f.createToken($b.CommaToken),C),this.f.createToken($b.CommaToken),S)),a.expression.name),a.typeArguments,a.arguments);return this.f.createParenthesizedExpression(F)}}return this.f.createParenthesizedExpression(this.f.createBinaryExpression(C,this.f.createToken($b.CommaToken),a))}return a};this.sourceFile=Zy(this.sourceFile,visitor);let N=[];for(;;){let n=!0;for(let a of this.compileDeclarations.values())if(!a.compiled){n=!1;break}if(this.embedDeclarations.size===0&&n)break;for(let[n,a]of[...this.compileDeclarations.entries()])a.compiled||=this.createProgramVarFromNode(n,a.name,this.sourceFile);if(this.embedDeclarations.size){for(let n of this.embedDeclarations.keys())this.compiledDeclarations.add(n);let n=Array.from(this.embedDeclarations.entries());this.embedDeclarations.clear();for(let[a,S]of n)N.push(...this.createProgramVarFromNode(a,S.name,S.sourceFile))}}let compileDeclarations=n=>{if(n=Xy(n,compileDeclarations,this.context),Rb(n)||Sb(n)||ub(n)){let a=this.compileDeclarations.get(n);if(!a)return n;if(this.compileDeclarations.delete(n),this.compiledDeclarations.add(n),a.compiled)return[...a.compiled,n]}return n};if(this.sourceFile=Zy(this.sourceFile,compileDeclarations),this.addImports.length){let n=[],a=new Map;for(let S of this.addImports){if(n.includes(getIdentifierName(S.identifier)))continue;n.push(getIdentifierName(S.identifier));let C=a.get(S.importDeclaration);C||(C=[],a.set(S.importDeclaration,C)),C.push(S.identifier)}for(let[n,S]of a.entries()){if(this.additionalImports.has(n))throw Error(`Internal error: additional import already exists`);if(this.getModuleType()===`cjs`){let a=qb(this.f.createVariableStatement(void 0,this.f.createVariableDeclarationList([this.f.createVariableDeclaration(this.f.createObjectBindingPattern(S.map(n=>this.f.createBindingElement(void 0,void 0,n,void 0))),void 0,void 0,this.f.createCallExpression(this.f.createIdentifier(`require`),void 0,[n.moduleSpecifier]))],Yy.default.NodeFlags.None)),$b.MultiLineCommentTrivia,`@ts-ignore`,!0);this.additionalImports.set(n,a)}else{let a=this.f.createNamedImports(S.map(n=>this.f.createImportSpecifier(!1,void 0,n))),C=qb(this.f.createImportDeclaration(void 0,this.f.createImportClause(!1,void 0,a),n.moduleSpecifier),$b.MultiLineCommentTrivia,`@ts-ignore`,!0);this.additionalImports.set(n,C)}}}if(this.embedAssignType){let n=this.f.createFunctionDeclaration(void 0,void 0,this.f.createIdentifier(`__assignType`),void 0,[this.f.createParameterDeclaration(void 0,void 0,this.f.createIdentifier(`fn`),void 0,void 0,void 0),this.f.createParameterDeclaration(void 0,void 0,this.f.createIdentifier(`args`),void 0,void 0,void 0)],void 0,this.f.createBlock([this.f.createExpressionStatement(this.f.createBinaryExpression(this.f.createPropertyAccessExpression(this.f.createIdentifier(`fn`),this.f.createIdentifier(`__type`)),this.f.createToken($b.EqualsToken),this.f.createIdentifier(`args`))),this.f.createReturnStatement(this.f.createIdentifier(`fn`))],!0));N.push(n)}this.tempResultIdentifier&&N.push(this.f.createVariableStatement(void 0,this.f.createVariableDeclarationList([this.f.createVariableDeclaration(this.tempResultIdentifier,void 0,void 0,void 0)],Yy.default.NodeFlags.None)));let F=this.sourceFile.statements.findIndex(n=>Wb(n)&&Lb(n.expression)),I=F===-1?[...N,...this.attachAdditionalStatements(this.sourceFile.statements)]:[...this.sourceFile.statements.slice(0,F+1),...N,...this.attachAdditionalStatements(this.sourceFile.statements.slice(F+1))];this.sourceFile=this.f.updateSourceFile(this.sourceFile,I);let H=Date.now()-a;return debug(`Transform file with reflection=${C.mode} took ${H}ms (${this.getModuleType()}) ${n.fileName} via config ${C.tsConfigPath||`none`}.`),this.sourceFile.deepkitTransformed=!0,this.sourceFile}attachAdditionalStatements(n){let a=[];for(let S of n){if(yb(S)||(0,Yy.isJSDocImportTag)(S)){let n=this.additionalImports.get(S);n&&a.push(n)}a.push(S)}return a}getModuleType(){return this.compilerOptions.module===Yy.default.ModuleKind.Node16||this.compilerOptions.module===Yy.default.ModuleKind.NodeNext?this.sourceFile.impliedNodeFormat===Yy.default.ModuleKind.ESNext?`esm`:`cjs`:this.compilerOptions.module===Yy.default.ModuleKind.CommonJS?`cjs`:`esm`}getArrowFunctionΩPropertyAccessIdentifier(n){let{parent:a}=n.original||n;if(Gb(a)&&_b(a.name))return a.name;if(Qy(a)&&_b(a.name)){let n=[];for(;a;)if(kb(a))a=a.parent;else if(Gb(a)){n.unshift(getIdentifierName(a.name));break}else if(_b(a.name))n.unshift(getIdentifierName(a.name)),a=a.parent;else return;return this.f.createIdentifier(n.join(`.`))}}injectResetΩ(n){let a=!1;for(let S of n.parameters)S.type&&getReceiveTypeParameter(S.type)&&(a=!0);if(!a)return n;let S=this.f.createIdentifier(`globalThis`);if(eb(n)){let a=this.getArrowFunctionΩPropertyAccessIdentifier(n);if(!a)return n;S=a}else (mb(n)||hb(n))&&n.name?S=n.name:Cb(n)&&_b(n.name)?S=this.f.createPropertyAccessExpression(this.f.createIdentifier(`this`),n.name):ob(n)&&(S=this.f.createPropertyAccessExpression(this.f.createIdentifier(`this`),`constructor`));let C=this.f.createExpressionStatement(this.f.createBinaryExpression(this.f.createPropertyAccessExpression(S,this.f.createIdentifier(`Ω`)),this.f.createToken(Yy.default.SyntaxKind.EqualsToken),this.f.createIdentifier(`undefined`))),N=n.body&&tb(n.body)?n.body:void 0,F=n.body&&tb(n.body)?[...n.body.statements]:[];return n.body&&(fb(n.body)&&(F=[this.f.createReturnStatement(n.body)]),N=this.f.updateBlock(n.body,[C,...F])),eb(n)?this.f.updateArrowFunction(n,n.modifiers,n.typeParameters,n.parameters,n.type,n.equalsGreaterThanToken,N):mb(n)?this.f.updateFunctionDeclaration(n,n.modifiers,n.asteriskToken,n.name,n.typeParameters,n.parameters,n.type,N):hb(n)?this.f.updateFunctionExpression(n,n.modifiers,n.asteriskToken,n.name,n.typeParameters,n.parameters,n.type,N||n.body):Cb(n)?this.f.updateMethodDeclaration(n,n.modifiers,n.asteriskToken,n.name,n.questionToken,n.typeParameters,n.parameters,n.type,N):ob(n)?this.f.updateConstructorDeclaration(n,n.modifiers,n.parameters,N):n}createProgramVarFromNode(n,a,S){let C=new CompilerProgram(n,S);if((Rb(n)||Sb(n))&&n.typeParameters)for(let a of n.typeParameters)a.default&&this.extractPackStructOfType(a.default,C),C.pushTemplateParameter(getIdentifierName(a.name),!!a.default);this.extractPackStructOfType(n,C),(Rb(n)||Sb(n)||ib(n)||ab(n))&&C.pushOp(ky.nominal);let N=this.packOpsAndStack(C),F=this.f.createVariableStatement([],this.f.createVariableDeclarationList([this.f.createVariableDeclaration(this.getDeclarationVariableName(a),void 0,void 0,N)],Qb.Const));return hasModifier(n,$b.ExportKeyword)?[F,this.f.createExportDeclaration(void 0,!1,this.f.createNamedExports([this.f.createExportSpecifier(!1,this.getDeclarationVariableName(a),this.getDeclarationVariableName(a))]))]:[F]}extractPackStructOfExpression(n,a){switch(n.kind){case $b.StringLiteral:a.pushOp(ky.string);return;case $b.NumericLiteral:a.pushOp(ky.number);return;case $b.FalseKeyword:case $b.TrueKeyword:a.pushOp(ky.boolean);return;case $b.BigIntLiteral:a.pushOp(ky.bigint);return;case $b.CallExpression:{let S=n;if(_b(S.expression)&&getIdentifierName(S.expression)===`Symbol`){a.pushOp(ky.symbol);return}break}case $b.NewExpression:{let S=n;if(_b(S.expression)){let n={Date:ky.date,RegExp:ky.regexp,Uint8Array:ky.uint8Array,Uint8ClampedArray:ky.uint8ClampedArray,Uint16Array:ky.uint16Array,Uint32Array:ky.uint32Array,Int8Array:ky.int8Array,Int16Array:ky.int16Array,Int32Array:ky.int32Array,Float32Array:ky.float32Array,Float64Array:ky.float64Array,ArrayBuffer:ky.arrayBuffer}[getIdentifierName(S.expression)];if(n){a.pushOp(n);return}}break}}a.pushOp(ky.never)}extractPackStructOfType(n,a){if(Nb(n))return this.extractPackStructOfType(n.type,a);switch(n.kind){case $b.StringKeyword:a.pushOp(ky.string);break;case $b.NumberKeyword:a.pushOp(ky.number);break;case $b.BooleanKeyword:a.pushOp(ky.boolean);break;case $b.BigIntKeyword:a.pushOp(ky.bigint);break;case $b.VoidKeyword:a.pushOp(ky.void);break;case $b.UnknownKeyword:a.pushOp(ky.unknown);break;case $b.ObjectKeyword:a.pushOp(ky.object);break;case $b.SymbolKeyword:a.pushOp(ky.symbol);break;case $b.NullKeyword:a.pushOp(ky.null);break;case $b.NeverKeyword:a.pushOp(ky.never);break;case $b.AnyKeyword:a.pushOp(ky.any);break;case $b.UndefinedKeyword:a.pushOp(ky.undefined);break;case $b.TrueKeyword:a.pushOp(ky.literal,a.pushStack(this.f.createTrue()));break;case $b.FalseKeyword:a.pushOp(ky.literal,a.pushStack(this.f.createFalse()));break;case $b.ClassDeclaration:case $b.ClassExpression:{let S=n;if(n){let n=[];if(S.typeParameters)for(let n of S.typeParameters){let S=getNameAsString(n.name);n.default&&this.extractPackStructOfType(n.default,a),a.pushTemplateParameter(S,!!n.default)}if(S.heritageClauses){for(let n of S.heritageClauses)if(n.token===$b.ExtendsKeyword)for(let S of n.types){if(a.pushFrame(),S.typeArguments)for(let n of S.typeArguments)this.extractPackStructOfType(n,a);let n=a.pushStack(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,this.nodeConverter.toExpression(S.expression)));a.pushOp(ky.classReference,n),a.popFrameImplicit()}}for(let C of S.members){let S=getNameAsString(C.name);S&&n.some(n=>getNameAsString(n.name)===S)||(n.push(C),this.extractPackStructOfType(C,a))}if(a.pushOp(ky.class),S.heritageClauses){for(let n of S.heritageClauses)if(n.token===$b.ExtendsKeyword){let S=n.types[0];if(pb(S)&&S.typeArguments){for(let n of S.typeArguments)this.extractPackStructOfType(n,a);a.pushOp(ky.classExtends,S.typeArguments.length)}}else if(n.token===$b.ImplementsKeyword){for(let S of n.types)this.extractPackStructOfTypeReference(S,a);a.pushOp(ky.implements,n.types.length)}}S.name&&this.resolveTypeName(getIdentifierName(S.name),a);let C=extractJSDocAttribute(this.sourceFile,S.name?.parent,`description`);C&&a.pushOp(ky.description,a.findOrAddStackEntry(C))}break}case $b.IntersectionType:{let S=n;a.pushFrame();for(let n of S.types)this.extractPackStructOfType(n,a);a.pushOp(ky.intersection),a.popFrameImplicit();break}case $b.MappedType:{let S=n;a.pushFrame(),a.pushVariable(getIdentifierName(S.typeParameter.name));let C=Kb(S.typeParameter);C?this.extractPackStructOfType(C,a):a.pushOp(ky.never);let N=0;S.questionToken&&(S.questionToken.kind===$b.QuestionToken&&(N|=1),S.questionToken.kind===$b.MinusToken&&(N|=2)),S.readonlyToken&&(S.readonlyToken.kind===$b.ReadonlyKeyword&&(N|=4),S.readonlyToken.kind===$b.MinusToken&&(N|=8)),a.pushCoRoutine(),S.nameType&&a.pushFrame(),S.type?this.extractPackStructOfType(S.type,a):a.pushOp(ky.never),S.nameType&&(this.extractPackStructOfType(S.nameType,a),a.pushOp(ky.tuple),a.popFrameImplicit());let F=a.popCoRoutine();S.nameType?a.pushOp(ky.mappedType2,F,N):a.pushOp(ky.mappedType,F,N),a.popFrameImplicit();break}case $b.TypeAliasDeclaration:{let S=n;a.sourceFile&&getNameAsString(S.name)===`TypeAnnotation`&&extractJSDocAttribute(a.sourceFile,S,`intrinsic`)!==void 0&&(S=this.intrinsicMetaDeclaration),this.extractPackStructOfType(S.type,a),S.name&&this.resolveTypeName(getIdentifierName(S.name),a);break}case $b.TypeLiteral:case $b.InterfaceDeclaration:{let S=n,C=S;if(a.pushFrame(),Sb(S)&&S.heritageClauses){for(let n of S.heritageClauses)if(n.token===$b.ExtendsKeyword)for(let S of n.types)this.extractPackStructOfTypeReference(S,a)}for(let n of S.members)this.extractPackStructOfType(n,a);a.pushOp(ky.objectLiteral),zb(S)&&(C=S.parent);let N=C&&extractJSDocAttribute(this.sourceFile,C,`description`);N&&a.pushOp(ky.description,a.findOrAddStackEntry(N)),Sb(S)&&S.name&&this.resolveTypeName(getIdentifierName(S.name),a),a.popFrameImplicit();break}case $b.TypeReference:this.extractPackStructOfTypeReference(n,a);break;case $b.ArrayType:this.extractPackStructOfType(n.elementType,a),a.pushOp(ky.array);break;case $b.RestType:{let S=n.type;$y(S)&&(S=S.elementType),this.extractPackStructOfType(S,a),a.pushOp(ky.rest);break}case $b.TupleType:a.pushFrame();for(let S of n.elements)if(Ab(S))this.extractPackStructOfType(S.type,a),a.pushOp(ky.tupleMember),a.pushOp(ky.optional);else if(Db(S)){if(S.dotDotDotToken){let n=S.type;$y(n)&&(n=n.elementType),this.extractPackStructOfType(n,a),a.pushOp(ky.rest)}else this.extractPackStructOfType(S.type,a);let n=a.findOrAddStackEntry(getIdentifierName(S.name));a.pushOp(ky.namedTupleMember,n),S.questionToken&&a.pushOp(ky.optional)}else this.extractPackStructOfType(S,a);a.pushOp(ky.tuple),a.popFrameImplicit();break;case $b.PropertySignature:{let S=n;if(S.type){this.extractPackStructOfType(S.type,a);let n=getPropertyName(this.f,S.name);a.pushOp(ky.propertySignature,a.findOrAddStackEntry(n)),S.questionToken&&a.pushOp(ky.optional),hasModifier(S,$b.ReadonlyKeyword)&&a.pushOp(ky.readonly);let C=extractJSDocAttribute(this.sourceFile,S,`description`);C&&a.pushOp(ky.description,a.findOrAddStackEntry(C))}else a.pushOp(ky.unknown);break}case $b.PropertyDeclaration:{let S=n;if(!1===this.getExplicitReflectionMode(a.sourceFile,S))return;S.type?this.extractPackStructOfType(S.type,a):S.initializer?this.extractPackStructOfExpression(S.initializer,a):a.pushOp(ky.unknown);let C=getPropertyName(this.f,S.name);a.pushOp(ky.property,a.findOrAddStackEntry(C)),S.questionToken&&a.pushOp(ky.optional),hasModifier(S,$b.ReadonlyKeyword)&&a.pushOp(ky.readonly),hasModifier(S,$b.PrivateKeyword)&&a.pushOp(ky.private),hasModifier(S,$b.ProtectedKeyword)&&a.pushOp(ky.protected),hasModifier(S,$b.AbstractKeyword)&&a.pushOp(ky.abstract),hasModifier(S,$b.StaticKeyword)&&a.pushOp(ky.static),S.initializer&&a.pushOp(ky.defaultValue,a.findOrAddStackEntry(this.f.createFunctionExpression(void 0,void 0,void 0,void 0,void 0,void 0,this.f.createBlock([this.f.createReturnStatement(S.initializer)]))));let N=extractJSDocAttribute(this.sourceFile,S,`description`);N&&a.pushOp(ky.description,a.findOrAddStackEntry(N));break}case $b.ConditionalType:{let S=n,C=Hb(S.checkType)&&_b(S.checkType.typeName)?S.checkType.typeName:void 0;C&&(a.pushFrame(),this.extractPackStructOfType(S.checkType,a),a.pushVariable(getIdentifierName(C)),a.pushCoRoutine()),a.pushConditionalFrame(),this.extractPackStructOfType(S.checkType,a),this.extractPackStructOfType(S.extendsType,a),a.pushOp(ky.extends),a.pushCoRoutine(),this.extractPackStructOfType(S.trueType,a);let N=a.popCoRoutine();a.pushCoRoutine(),this.extractPackStructOfType(S.falseType,a);let F=a.popCoRoutine();if(a.pushOp(ky.jumpCondition,N,F),a.moveFrame(),C){let n=a.popCoRoutine();a.pushOp(ky.distribute,n),a.popFrameImplicit()}break}case $b.InferType:{let S=n,C=a.findConditionalFrame();if(C){let n=getIdentifierName(S.typeParameter.name),N=a.findVariable(n);if(!N&&(a.pushVariable(n,C),N=a.findVariable(n),!N))throw Error(`Could not find inserted infer variable`);a.pushOp(ky.infer,N.frameOffset,N.stackIndex)}else a.pushOp(ky.never);break}case $b.MethodSignature:case $b.MethodDeclaration:case $b.Constructor:case $b.ArrowFunction:case $b.FunctionExpression:case $b.ConstructSignature:case $b.ConstructorType:case $b.FunctionType:case $b.CallSignature:case $b.FunctionDeclaration:{let S=n;if(!1===this.getExplicitReflectionMode(a.sourceFile,S)){a.pushOp(ky.any);return}let C=rb(n)?``:sb(S)||lb(n)?`new`:ob(S)?`constructor`:getPropertyName(this.f,S.name);if(!S.type&&S.parameters.length===0&&!C)return;a.pushFrame();for(let n=0;n<S.parameters.length;n++){let C=S.parameters[n],N=_b(C.name)?getNameAsString(C.name):`param`+n,F=C.type?C.dotDotDotToken&&$y(C.type)?C.type.elementType:C.type:void 0;F?this.extractPackStructOfType(F,a):a.pushOp(ky.any),C.dotDotDotToken&&a.pushOp(ky.rest),a.pushOp(ky.parameter,a.findOrAddStackEntry(N)),C.questionToken&&a.pushOp(ky.optional),hasModifier(C,$b.PublicKeyword)&&a.pushOp(ky.public),hasModifier(C,$b.PrivateKeyword)&&a.pushOp(ky.private),hasModifier(C,$b.ProtectedKeyword)&&a.pushOp(ky.protected),hasModifier(C,$b.ReadonlyKeyword)&&a.pushOp(ky.readonly);let I=extractJSDocAttribute(this.sourceFile,C,`description`);I&&a.pushOp(ky.description,a.findOrAddStackEntry(I)),C.initializer&&C.type&&!getReceiveTypeParameter(C.type)&&a.pushOp(ky.defaultValue,a.findOrAddStackEntry(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,C.initializer)))}S.type?this.extractPackStructOfType(S.type,a):a.pushOp(ky.any),a.pushOp(rb(n)?ky.callSignature:wb(S)||lb(S)?ky.methodSignature:Cb(S)||ob(S)?ky.method:ky.function,a.findOrAddStackEntry(C)),(wb(S)||Cb(S))&&S.questionToken&&a.pushOp(ky.optional),Cb(S)&&(hasModifier(S,$b.PrivateKeyword)&&a.pushOp(ky.private),hasModifier(S,$b.ProtectedKeyword)&&a.pushOp(ky.protected),hasModifier(S,$b.AbstractKeyword)&&a.pushOp(ky.abstract),hasModifier(S,$b.StaticKeyword)&&a.pushOp(ky.static));let N=extractJSDocAttribute(this.sourceFile,S,`description`);N&&a.pushOp(ky.description,a.findOrAddStackEntry(N)),a.popFrameImplicit();break}case $b.LiteralType:{let S=n;S.literal.kind===$b.NullKeyword?a.pushOp(ky.null):a.pushOp(ky.literal,a.findOrAddStackEntry(S.literal));break}case $b.TemplateLiteralType:{let S=n;a.pushFrame(),S.head.rawText&&a.pushOp(ky.literal,a.findOrAddStackEntry(S.head.rawText));for(let n of S.templateSpans)this.extractPackStructOfType(n.type,a),n.literal.rawText&&a.pushOp(ky.literal,a.findOrAddStackEntry(n.literal.rawText));a.pushOp(ky.templateLiteral),a.popFrameImplicit();break}case $b.UnionType:{let S=n;if(S.types.length!==0)if(S.types.length===1)this.extractPackStructOfType(S.types[0],a);else{a.pushFrame();for(let n of S.types)this.extractPackStructOfType(n,a);a.pushOp(ky.union),a.popFrameImplicit()}break}case $b.EnumDeclaration:{let S=n;a.pushFrame();for(let n of S.members){let S=getPropertyName(this.f,n.name);a.pushOp(ky.enumMember,a.findOrAddStackEntry(S)),n.initializer&&a.pushOp(ky.defaultValue,a.findOrAddStackEntry(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,n.initializer)))}a.pushOp(ky.enum);let C=extractJSDocAttribute(this.sourceFile,S,`description`);C&&a.pushOp(ky.description,a.findOrAddStackEntry(C)),S.name&&this.resolveTypeName(getIdentifierName(S.name),a),a.popFrameImplicit();break}case $b.IndexSignature:{let S=n;S.parameters.length&&S.parameters[0].type?this.extractPackStructOfType(S.parameters[0].type,a):a.pushOp(ky.any),this.extractPackStructOfType(S.type,a),a.pushOp(ky.indexSignature);break}case $b.TypeQuery:{let S=n;if(_b(S.exprName)){let n=this.resolveDeclaration(S.exprName);n&&findSourceFile(n.declaration)!==this.sourceFile&&n.importDeclaration&&ensureImportIsEmitted(n.importDeclaration,S.exprName)}let C=serializeEntityNameAsExpression(this.f,S.exprName);a.pushOp(ky.typeof,a.pushStack(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,C)));break}case $b.TypeOperator:{let S=n;if(S.type.kind===$b.ThisType){a.pushOp(ky.any);break}switch(S.operator){case $b.KeyOfKeyword:this.extractPackStructOfType(S.type,a),a.pushOp(ky.keyof);break;case $b.ReadonlyKeyword:this.extractPackStructOfType(S.type,a),a.pushOp(ky.readonly);break;default:a.pushOp(ky.never)}break}case $b.IndexedAccessType:{let S=n;this.extractPackStructOfType(S.objectType,a),this.extractPackStructOfType(S.indexType,a),a.pushOp(ky.indexAccess);break}case $b.Identifier:{let S=n,C=a.findVariable(getIdentifierName(S));C?a.pushOp(ky.loads,C.frameOffset,C.stackIndex):a.pushOp(ky.never);break}default:a.pushOp(ky.never)}}getGlobalLibs(){if(this.cache.globalSourceFiles)return this.cache.globalSourceFiles;this.cache.globalSourceFiles=[];let n={...this.compilerOptions};n.target&&n.target===ex.ESNext&&(n.target=ex.ES2022);let a=Hy(n,Yy.default);for(let n of a){if(this.isExcluded(n))continue;let a=this.resolver.resolveSourceFile(this.sourceFile,this.f.createStringLiteral(`typescript/lib/`+n.replace(`.d.ts`,``)));a&&this.cache.globalSourceFiles.push(a)}return this.cache.globalSourceFiles}resolveDeclaration(n){let a=n.parent;if(n.kind===$b.QualifiedName)return;let S;for(;a;){if(isNodeWithLocals(a)&&a.locals){let C=a.locals.get(n.escapedText);if(C&&C.declarations&&C.declarations[0]&&!jb(C.declarations[0])){S=C.declarations[0];break}}if(a.kind===$b.SourceFile)break;a=a.parent}if(!S)for(let a of this.getGlobalLibs()){let C=getGlobalsOfSourceFile(a);if(!C)continue;let N=C.get(n.escapedText);if(N&&N.declarations&&N.declarations[0]){S=N.declarations[0];break}}let C,N=!1;if(S&&bb(S)?(S.isTypeOnly&&(N=!0),C=S.parent.parent.parent):S&&yb(S)?C=S:S&&vb(S)&&(C=S.parent),C&&(C.importClause&&C.importClause.isTypeOnly&&(N=!0),S=this.resolveImportSpecifier(getEscapedText(n),C,this.sourceFile)),S&&S.kind===$b.TypeParameter&&S.parent.kind===$b.TypeAliasDeclaration&&(S=S.parent),S)return{declaration:S,importDeclaration:C,typeOnly:N}}getDeclarationVariableName(n){if(_b(n))return this.f.createIdentifier(`__Ω`+getIdentifierName(n));function joinQualifiedName(n){return _b(n)?getIdentifierName(n):joinQualifiedName(n.left)+`_`+getIdentifierName(n.right)}return this.f.createIdentifier(`__Ω`+joinQualifiedName(n))}isExcluded(n){return reflectionModeMatcher({reflection:`default`,exclude:(this.overriddenConfigResolver||getConfigResolver(this.cache.resolver,this.parseConfigHost,this.compilerOptions,this.sourceFile)).config.exclude},n)===`never`}extractPackStructOfTypeReference(n,a){let S=Hb(n)?n.typeName:_b(n.expression)?n.expression:void 0;if(!S){a.pushOp(ky.any);return}if(_b(S)&&getIdentifierName(S)===`InlineRuntimeType`&&n.typeArguments&&n.typeArguments[0]&&Vb(n.typeArguments[0])){let S=serializeEntityNameAsExpression(this.f,n.typeArguments[0].exprName);a.pushOp(ky.arg,a.pushStack(S));return}if(_b(S)&&getIdentifierName(S)!==`constructor`&&this.knownClasses[getIdentifierName(S)]){let n=getIdentifierName(S),C=this.knownClasses[n];a.pushOp(C)}else if(_b(S)&&getIdentifierName(S)===`Promise`)n.typeArguments&&n.typeArguments[0]?this.extractPackStructOfType(n.typeArguments[0],a):a.pushOp(ky.any),a.pushOp(ky.promise);else if(_b(S)&&getIdentifierName(S)===`integer`)a.pushOp(ky.numberBrand,Oy.integer);else if(_b(S)&&getIdentifierName(S)!==`constructor`&&Oy[getIdentifierName(S)]!==void 0)a.pushOp(ky.numberBrand,Oy[getIdentifierName(S)]);else{if(_b(S)){let n=a.findVariable(getIdentifierName(S));if(n){a.pushOp(ky.loads,n.frameOffset,n.stackIndex);return}}else if(xb(S)){this.extractPackStructOfType(S,a);return}let C=this.resolveDeclaration(S);if(!C){if(Fb(S)&&_b(S.left)){let n=this.resolveDeclaration(S.left);if(n&&ub(n.declaration)){let C,N=0;for(let F of n.declaration.members)if(getNameAsString(F.name)===getNameAsString(S.right)){if(F.initializer)a.pushOp(ky.arg,a.pushStack(this.nodeConverter.toExpression(F.initializer)));else if(C){let n=this.nodeConverter.toExpression(C);a.pushOp(ky.arg,a.pushStack(this.f.createBinaryExpression(n,$b.PlusToken,this.nodeConverter.toExpression(N))))}else a.pushOp(ky.arg,a.pushStack(this.nodeConverter.toExpression(N)));return}else N++,F.initializer&&(C=F.initializer,N=0)}}a.pushOp(ky.never),debug2(`Could not resolve ${getNameAsString(S)} in ${a.sourceFile?.fileName||`intrinsic`}`);return}let N=C.declaration,F=findSourceFile(N),I=!F||C.importDeclaration===void 0&&F.fileName!==this.sourceFile.fileName,H=C.importDeclaration!==void 0;if(Gb(N)&&(N.type?N=N.type:N.initializer&&(N=N.initializer)),Tb(N)&&C.importDeclaration)_b(S)&&ensureImportIsEmitted(C.importDeclaration,S),a.pushOp(ky.typeof,a.pushStack(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,serializeEntityNameAsExpression(this.f,S))));else if(Rb(N)||Sb(N)||ub(N)){let W=getNameAsString(S);if(W===`Array`){n.typeArguments&&n.typeArguments[0]?this.extractPackStructOfType(n.typeArguments[0],a):a.pushOp(ky.any),a.pushOp(ky.array);return}else if(W===`Function`){a.pushFrame();let n=a.pushStack(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,this.f.createIdentifier(`Function`)));a.pushOp(ky.functionReference,n),a.popFrameImplicit();return}else if(W===`Set`){n.typeArguments&&n.typeArguments[0]?this.extractPackStructOfType(n.typeArguments[0],a):a.pushOp(ky.any),a.pushOp(ky.set);return}else if(W===`Map`){n.typeArguments&&n.typeArguments[0]?this.extractPackStructOfType(n.typeArguments[0],a):a.pushOp(ky.any),n.typeArguments&&n.typeArguments[1]?this.extractPackStructOfType(n.typeArguments[1],a):a.pushOp(ky.any),a.pushOp(ky.map);return}let K=this.getDeclarationVariableName(S);if(!this.compiledDeclarations.has(N)&&!this.compileDeclarations.has(N)){if(F&&this.isExcluded(F.fileName)){a.pushOp(ky.any);return}if(I)this.embedDeclarations.set(N,{name:S,sourceFile:F});else if(H){if(C.importDeclaration){if(C.typeOnly){this.resolveTypeOnlyImport(S,a);return}if(F.fileName.endsWith(`.d.ts`)){if(!this.resolveImportSpecifier(getEscapedText(K),C.importDeclaration,this.sourceFile)){debug2(`Symbol ${K.escapedText} not found in ${F.fileName}`),this.resolveTypeOnlyImport(S,a);return}this.addImports.push({identifier:K,importDeclaration:C.importDeclaration})}else{if(this.getReflectionConfig(F).mode===`never`){this.resolveTypeOnlyImport(S,a);return}if(!this.isWithReflection(F,N)){this.resolveTypeOnlyImport(S,a);return}this.addImports.push({identifier:K,importDeclaration:C.importDeclaration})}}}else{if(!this.isWithReflection(a.sourceFile,N)){this.resolveTypeOnlyImport(S,a);return}this.compileDeclarations.set(N,{name:S,sourceFile:F})}}let q=a.pushStack(a.forNode===N?0:this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,K));if(n.typeArguments){for(let S of n.typeArguments)this.extractPackStructOfType(S,a);a.pushOp(ky.inlineCall,q,n.typeArguments.length)}else a.pushOp(ky.inline,q)}else if(ib(N)||mb(N)||hb(N)||eb(N)){if(C.typeOnly){this.resolveTypeOnlyImport(S,a);return}if(!(F?.fileName.endsWith(`.d.ts`)||this.isWithReflection(a.sourceFile,N))){this.resolveTypeOnlyImport(S,a);return}if(C.importDeclaration&&_b(S)&&ensureImportIsEmitted(C.importDeclaration,S),a.pushFrame(),n.typeArguments)for(let S of n.typeArguments)this.extractPackStructOfType(S,a);let I=_b(S)?S:this.createAccessorForEntityName(S),H=a.pushStack(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,I));a.pushOp(ib(N)?ky.classReference:ky.functionReference,H),a.popFrameImplicit()}else Bb(N)?this.resolveTypeParameter(N,n,a):this.extractPackStructOfType(N,a)}}getTypeUser(n){let a=n;for(;a;){if(a.kind===$b.Block||a.kind===$b.ClassDeclaration||a.kind===$b.ClassExpression)return a;if(a.kind===$b.Constructor||a.kind===$b.MethodDeclaration)return a.parent;if(a.kind===$b.ArrowFunction||a.kind===$b.FunctionDeclaration||a.kind===$b.FunctionExpression)return a;a=a.parent}return a}needsToBeInferred(n,a){return this.getTypeUser(n)!==this.getTypeUser(a)}resolveTypeOnlyImport(n,a){a.pushOp(ky.any);let S=Yy.default.isIdentifier(n)?getIdentifierName(n):getIdentifierName(n.right);this.resolveTypeName(S,a)}resolveTypeName(n,a){n&&a.pushOp(ky.typeName,a.findOrAddStackEntry(n))}resolveTypeParameter(n,a,S){let C=gb(n.parent);if(C&&S.isResolveFunctionParameters(n.parent)||this.needsToBeInferred(n,a)){let a=n.name.escapedText,N=[];if(C)for(let S of n.parent.parameters){if(!S.type)continue;let C=!1,searchArgument=S=>(S=Xy(S,searchArgument,this.context),_b(S)&&S.escapedText===a&&(C=!0,S=this.f.createInferTypeNode(n)),S);if(_b(S.name)){let n=Xy(S.type,searchArgument,this.context);C&&N.push({type:n,parameterName:S.name})}}if(N.length){N.length;let a=N.find(n=>Hb(n.type)&&_b(n.type.typeName)&&getIdentifierName(n.type.typeName)===`ReceiveType`);if(a)S.pushOp(ky.inline,S.pushStack(a.parameterName));else for(let a of N)S.pushConditionalFrame(),S.pushOp(ky.typeof,S.pushStack(this.f.createArrowFunction(void 0,void 0,[],void 0,void 0,a.parameterName))),this.extractPackStructOfType(a.type,S),S.pushOp(ky.extends),S.findVariable(getIdentifierName(n.name))?this.extractPackStructOfType(n.name,S):S.pushOp(ky.any),this.extractPackStructOfType({kind:$b.NeverKeyword},S),S.pushOp(ky.condition),S.popFrameImplicit();N.length}else if(n.constraint){C&&S.resolveFunctionParametersIncrease(n.parent);let a=Kb(n);a?this.extractPackStructOfType(a,S):S.pushOp(ky.never),C&&S.resolveFunctionParametersDecrease(n.parent)}else S.pushOp(ky.never)}else S.pushOp(ky.any)}createAccessorForEntityName(n){return this.f.createPropertyAccessExpression(_b(n.left)?n.left:this.createAccessorForEntityName(n.left),n.right)}findDeclarationInFile(n,a){if(isNodeWithLocals(n)&&n.locals){let S=n.locals.get(a);if(S&&S.declarations&&S.declarations[0])return S.declarations[0]}}resolveImportSpecifier(n,a,S){let C=typeof n==`string`?n:getIdentifierName(n);if(!a.moduleSpecifier||!Lb(a.moduleSpecifier))return;let N=this.resolver.resolve(S,a);if(!N){debug(`module not found`,a.moduleSpecifier.text,`Is transpileOnly enabled? It needs to be disabled.`);return}let F=this.findDeclarationInFile(N,C);if(S=N,F&&!bb(F))return db(F)?this.followExport(C,F,S):F;if(Ib(S))for(let n of S.statements){if(!db(n))continue;let a=this.followExport(C,n,S);if(a)return a}}followExport(n,a,S){if(a.exportClause){if(Eb(a.exportClause)){for(let C of a.exportClause.elements)if(getEscapedText(C.name)===n)if(!a.moduleSpecifier||!Lb(a.moduleSpecifier)){if((!a.moduleSpecifier||!Lb(a.moduleSpecifier))&&isNodeWithLocals(S)&&S.locals){let a=S.locals.get(n);if(a&&a.declarations&&a.declarations[0]){let N=a.declarations[0];if(N&&bb(N)){let a=N.parent.parent.parent,F=this.resolveImportSpecifier(C.propertyName?getEscapedText(C.propertyName):n,a,S);if(F)return F}return N}}}else{let N=this.resolveImportSpecifier(C.propertyName?getEscapedText(C.propertyName):n,a,S);if(N)return N}}}else{let C=this.resolveImportSpecifier(n,a,S);if(C)return C}}getTypeOfType(n){if(!this.isWithReflection(this.sourceFile,n))return;let a=new CompilerProgram(n,this.sourceFile);return this.extractPackStructOfType(n,a),this.packOpsAndStack(a)}packOpsAndStack(n){let a=n.buildPackStruct();if(a.ops.length===0)return;let S=[...a.stack,encodeOps(a.ops)];return this.valueToExpression(S)}valueToExpression(n){return this.nodeConverter.toExpression(n)}decorateClass(n,a){if(!this.isWithReflection(n,a))return a;let S=this.getTypeOfType(a),C=this.f.createPropertyDeclaration(this.f.createModifiersFromModifierFlags(tx.Static),`__type`,void 0,void 0,S);return ib(a)?this.f.updateClassDeclaration(a,a.modifiers,a.name,a.typeParameters,a.heritageClauses,this.f.createNodeArray([...a.members,C])):this.f.updateClassExpression(a,a.modifiers,a.name,a.typeParameters,a.heritageClauses,this.f.createNodeArray([...a.members,C]))}decorateFunctionExpression(n){let a=this.getTypeOfType(n);return a?this.wrapWithAssignType(n,a):n}decorateFunctionDeclaration(n){let a=this.getTypeOfType(n);if(!a)return n;if(!n.name){if(!n.body)return;let S=n.modifiers?n.modifiers.filter(n=>n.kind!==$b.ExportKeyword&&n.kind!==$b.DefaultKeyword&&n.kind!==$b.Decorator):[];return this.f.createExportAssignment(void 0,void 0,this.wrapWithAssignType(this.f.createFunctionExpression(S,n.asteriskToken,n.name,n.typeParameters,n.parameters,n.type,n.body),a))}let S=[n];return S.push(this.f.createExpressionStatement(this.f.createAssignment(this.f.createPropertyAccessExpression(serializeEntityNameAsExpression(this.f,n.name),`__type`),a))),S}decorateArrowFunction(n){let a=this.getTypeOfType(n);return a?this.wrapWithAssignType(n,a):n}wrapWithAssignType(n,a){return this.embedAssignType=!0,this.f.createCallExpression(this.f.createIdentifier(`__assignType`),void 0,[n,a])}getExplicitReflectionMode(n,a){let S=a,C;for(;C===void 0&&S;){let a=n&&extractJSDocAttribute(n,S,`reflection`);a!==void 0&&(C=a),S=S.parent}if(C===``||C===`true`||C===`default`||C===`enabled`||C===`1`)return!0;if(C===`false`||C===`disabled`||C===`never`||C===`no`||C===`0`)return!1}},DeclarationTransformer=class extends ReflectionTransformer{constructor(){super(...arguments),this.addExports=[]}transformSourceFile(n){if(n.deepkitDeclarationTransformed)return n;this.sourceFile=n,this.addExports=[];let a=this.getConfigResolver(n),S=a.match(n.fileName);if(Object.assign(this.compilerOptions,a.config.compilerOptions),S.mode===`never`)return n;let visitor=a=>(a=Xy(a,visitor,this.context),(Rb(a)||Sb(a)||ub(a))&&hasModifier(a,$b.ExportKeyword)&&this.isWithReflection(n,a)&&this.addExports.push({identifier:getIdentifierName(this.getDeclarationVariableName(a.name))}),a);if(this.sourceFile=Zy(this.sourceFile,visitor),this.addExports.length){let n=[],a=[];for(let S of this.addExports)a.includes(S.identifier)||(a.push(S.identifier),n.push(this.f.createTypeAliasDeclaration([this.f.createModifier($b.ExportKeyword),this.f.createModifier($b.DeclareKeyword)],this.f.createIdentifier(S.identifier),void 0,this.f.createArrayTypeNode(this.f.createKeywordTypeNode($b.AnyKeyword)))));this.sourceFile=this.f.updateSourceFile(this.sourceFile,[...this.sourceFile.statements,...n])}return this.sourceFile.deepkitDeclarationTransformed=!0,this.sourceFile}},ix=!1,ax=new Cache,ox=function deepkitTransformer(n){return ix||=(debug(`@deepkit/type transformer loaded
692
- `),!0),ax.tick(),new ReflectionTransformer(n,ax)},sx=function deepkitDeclarationTransformer(n){return new DeclarationTransformer(n,ax)}}),lx,DeepkitLoader,ux=__esmMin(()=>{lx=__toESM(pp(),1),cx(),DeepkitLoader=class{constructor(){this.options={allowJs:!0,declaration:!1},this.host=lx.default.createCompilerHost(this.options),this.program=lx.default.createProgram([],this.options,this.host),this.printer=lx.default.createPrinter({newLine:lx.default.NewLineKind.LineFeed}),this.cache=new Cache,this.knownFiles={},this.sourceFiles={};let n=this.host.readFile;this.host.readFile=a=>this.knownFiles[a]?this.knownFiles[a]:n.call(this.host,a),this.host.writeFile=()=>{};let a=this.host.getSourceFile;this.host.getSourceFile=(n,S,C,N)=>this.sourceFiles[n]?this.sourceFiles[n]:a.call(this.host,n,S,C,N)}transform(n,a){this.knownFiles[a]=n;let S=lx.default.createSourceFile(a,n,lx.default.ScriptTarget.ESNext,!0,a.endsWith(`.tsx`)?lx.default.ScriptKind.TSX:lx.default.ScriptKind.TS),C=n;return lx.default.transform(S,[n=>{let a=new ReflectionTransformer(n,this.cache).forHost(this.host).withReflection({reflection:`default`});return n=>{let S=a.transformSourceFile(n);return C=this.printer.printNode(lx.default.EmitHint.SourceFile,S,S),S}}],this.options),C}}}),dx=__exportAll$3({Cache:()=>Cache,DeclarationTransformer:()=>DeclarationTransformer,DeepkitLoader:()=>DeepkitLoader,ReflectionTransformer:()=>ReflectionTransformer,debugPackStruct:()=>debugPackStruct,declarationTransformer:()=>sx,default:()=>myTransformerPlugin,encodeOps:()=>encodeOps,packSize:()=>64,packSizeByte:()=>6,transformer:()=>ox});function myTransformerPlugin(n,a){return{before:ox,afterDeclarations:sx}}var fx=__esmMin(()=>{cx(),cx(),ux()});Ve(),_c();let px=null;async function getLoader(){return px||(px=(async()=>new(await(Promise.resolve().then(()=>(fx(),dx)))).DeepkitLoader)(),px)}const mx=/\.(m|c)?tsx?$/;function printDiagnostics(...n){Be.log(`[deepkit] printDiagnostics`,inspect(n,!1,10,!0))}function deepkitPlugin(n={}){let a=n.reflection??!1;return{name:`gjsify-deepkit`,transform:{order:`pre`,async handler(n,S){if(!a||!mx.test(S))return null;try{let a=(await getLoader()).transform(n,S);return a===n?null:{code:a,map:null}}catch(n){return printDiagnostics({file:S,error:n}),null}}}}}function isPlainObject(n){if(typeof n!=`object`||!n)return!1;let a=Object.getPrototypeOf(n);return(a===null||a===Object.prototype||Object.getPrototypeOf(a)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)}nn();const safeNormalizeFileUrl=(n,a)=>{let S=normalizeFileUrl(normalizeDenoExecPath(n));if(typeof S!=`string`)throw TypeError(`${a} must be a string or a file URL: ${S}.`);return S},normalizeDenoExecPath=n=>isDenoExecPath(n)?n.toString():n,isDenoExecPath=n=>typeof n!=`string`&&n&&Object.getPrototypeOf(n)===String.prototype,normalizeFileUrl=n=>n instanceof URL?fileURLToPath(n):n,normalizeParameters=(n,a=[],S={})=>{let C=safeNormalizeFileUrl(n,`First argument`),[N,F]=isPlainObject(a)?[[],a]:[a,S];if(!Array.isArray(N))throw TypeError(`Second argument must be either an array of arguments or an options object: ${N}`);if(N.some(n=>typeof n==`object`&&!!n))throw TypeError(`Second argument must be an array of strings: ${N}`);let I=N.map(String),H=I.find(n=>n.includes(`\0`));if(H!==void 0)throw TypeError(`Arguments cannot contain null bytes ("\\0"): ${H}`);if(!isPlainObject(F))throw TypeError(`Last argument must be an options object: ${F}`);return[C,I,F]};var hx=__exportAll$3({ChildProcess:()=>ChildProcess,default:()=>_x,exec:()=>_exec,execFile:()=>execFile,execFileSync:()=>execFileSync,execSync:()=>execSync,spawn:()=>spawn,spawnSync:()=>spawnSync});function _spawnSubprocess(n,a,S){let C=new Se.SubprocessLauncher({flags:a});if(S?.cwd&&C.set_cwd(S.cwd),S?.env)for(let[n,a]of Object.entries(S.env))C.setenv(n,a,!0);return C.spawnv(n)}function execSync(n,a){let S=a?.encoding,C=a?.input,N=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE|(C?Se.SubprocessFlags.STDIN_PIPE:Se.SubprocessFlags.NONE),F=_spawnSubprocess([typeof a?.shell==`string`?a.shell:`/bin/sh`,`-c`,n],N,a),I=C?new le.Bytes(typeof C==`string`?new TextEncoder().encode(C):C):null,[,H,W]=F.communicate(I,null),K=F.get_exit_status();if(K!==0){let a=W?new TextDecoder().decode(gbytesToUint8Array(W)):``,S=Error(`Command failed: ${n}\n${a}`);throw S.status=K,S.stderr=a,S.stdout=H?new TextDecoder().decode(gbytesToUint8Array(H)):``,S}if(!H)return S&&S!==`buffer`?``:ut.alloc(0);let q=gbytesToUint8Array(H);return S&&S!==`buffer`?new TextDecoder().decode(q):ut.from(q)}function _exec(n,a,S){typeof a==`function`&&(S=a,a={});let C=a||{},N=new ChildProcess,F=typeof C.shell==`string`?C.shell:`/bin/sh`,I=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE;try{let a=_spawnSubprocess([F,`-c`,n],I,C);N._setSubprocess(a),ensureMainLoop(),a.communicate_utf8_async(null,null,(C,F)=>{try{let[,C,I]=a.communicate_utf8_finish(F),H=a.get_exit_status();if(N.exitCode=H,H!==0){let a=Error(`Command failed: ${n}`);a.code=H,a.killed=N.killed,a.stdout=C||``,a.stderr=I||``,S&&S(a,C||``,I||``)}else S&&S(null,C||``,I||``);N.emit(`close`,H,null),N.emit(`exit`,H,null)}catch(n){let a=n instanceof Error?n:Error(String(n));S&&S(a,``,``),N.emit(`error`,a)}})}catch(n){let a=n instanceof Error?n:Error(String(n));setTimeout(()=>{S&&S(a,``,``),N.emit(`error`,a)},0)}return N}function execFile(n,a,S,C){let N=[],F={},I;typeof a==`function`?I=a:Array.isArray(a)&&(N=a,typeof S==`function`?I=S:(F=S||{},I=C));let H=new ChildProcess,W=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE;try{let a=_spawnSubprocess([n,...N],W,F);H._setSubprocess(a),ensureMainLoop(),a.communicate_utf8_async(null,null,(S,C)=>{try{let[,S,N]=a.communicate_utf8_finish(C),F=a.get_exit_status();if(H.exitCode=F,F!==0){let a=Error(`Command failed: ${n}`);a.code=F,a.stdout=S||``,a.stderr=N||``,I&&I(a,S||``,N||``)}else I&&I(null,S||``,N||``);H.emit(`close`,F,null),H.emit(`exit`,F,null)}catch(n){let a=n instanceof Error?n:Error(String(n));I&&I(a,``,``),H.emit(`error`,a)}})}catch(n){let a=n instanceof Error?n:Error(String(n));setTimeout(()=>{I&&I(a,``,``),H.emit(`error`,a)},0)}return H}function execFileSync(n,a,S){let C=a||[],N=S?.encoding,F=S?.input,I=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE|(F?Se.SubprocessFlags.STDIN_PIPE:Se.SubprocessFlags.NONE),H=_spawnSubprocess([n,...C],I,S),W=F?new le.Bytes(typeof F==`string`?new TextEncoder().encode(F):F):null,[,K,q]=H.communicate(W,null),Y=H.get_exit_status();if(Y!==0){let a=q?new TextDecoder().decode(gbytesToUint8Array(q)):``,S=Error(`Command failed: ${n} ${C.join(` `)}`);throw S.status=Y,S.stderr=a,S}if(!K)return N&&N!==`buffer`?``:ut.alloc(0);let X=gbytesToUint8Array(K);return N&&N!==`buffer`?new TextDecoder().decode(X):ut.from(X)}function spawn(n,a,S){let C,N;Array.isArray(a)?(C=a,N=S):(C=void 0,N=a);let F=C||[],I=new ChildProcess,H=N?.shell,W;W=H?[typeof H==`string`?H:`/bin/sh`,`-c`,[n,...F].join(` `)]:[n,...F];let K=N?.stdio,q=Array.isArray(K)?[typeof K[0]==`string`?K[0]:`pipe`,typeof K[1]==`string`?K[1]:`pipe`,typeof K[2]==`string`?K[2]:`pipe`]:typeof K==`string`?[K,K,K]:[`pipe`,`pipe`,`pipe`],Y=Se.SubprocessFlags.NONE;q[0]===`pipe`&&(Y|=Se.SubprocessFlags.STDIN_PIPE),q[1]===`pipe`&&(Y|=Se.SubprocessFlags.STDOUT_PIPE),q[1]===`ignore`&&(Y|=Se.SubprocessFlags.STDOUT_SILENCE),q[2]===`pipe`&&(Y|=Se.SubprocessFlags.STDERR_PIPE),q[2]===`ignore`&&(Y|=Se.SubprocessFlags.STDERR_SILENCE);try{let n=_spawnSubprocess(W,Y,N);if(I._setSubprocess(n),gx.add(I),q[0]===`pipe`){let a=n.get_stdin_pipe();a&&(I.stdin=new GioOutputStreamWritable(a))}let a=n.get_stdout_pipe();a&&(I.stdout=new GioInputStreamReadable(a));let S=n.get_stderr_pipe();S&&(I.stderr=new GioInputStreamReadable(S));let C=N?.signal,F=null,emitAbortError=()=>{let n=N?.killSignal??`SIGTERM`;I.kill(n);let a=Error(`The operation was aborted`);a.name=`AbortError`,I.emit(`error`,a)};C&&(C.aborted?queueMicrotask(emitAbortError):(F=emitAbortError,C.addEventListener(`abort`,F,{once:!0}))),ensureMainLoop(),n.wait_async(null,(a,S)=>{try{n.wait_finish(S);let a=n.get_if_exited()?n.get_exit_status():null,N=n.get_if_signaled()?`SIGTERM`:null;I.exitCode=a,I.signalCode=N,C&&F&&C.removeEventListener(`abort`,F),I.stdin&&!I.stdin.destroyed&&I.stdin.destroy(),I.emit(`exit`,a,N),I.emit(`close`,a,N)}catch(n){I.emit(`error`,n instanceof Error?n:Error(String(n)))}gx.delete(I)}),deferEmit(I,`spawn`)}catch(n){deferEmit(I,`error`,n instanceof Error?n:Error(String(n)))}return I}function spawnSync(n,a,S){let C,N;Array.isArray(a)?(C=a,N=S):(C=void 0,N=a);let F=C||[],I=N?.shell,H=N?.input,W;W=I?[typeof I==`string`?I:`/bin/sh`,`-c`,[n,...F].join(` `)]:[n,...F];let K=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE|(H?Se.SubprocessFlags.STDIN_PIPE:Se.SubprocessFlags.NONE);try{let n=_spawnSubprocess(W,K,N),a=n.get_identifier(),S=H?new le.Bytes(typeof H==`string`?new TextEncoder().encode(H):H):null,[,C,F]=n.communicate(S,null),I=C?ut.from(gbytesToUint8Array(C)):ut.alloc(0),q=F?ut.from(gbytesToUint8Array(F)):ut.alloc(0),Y=N?.encoding,X=Y&&Y!==`buffer`?new TextDecoder().decode(I):I,te=Y&&Y!==`buffer`?new TextDecoder().decode(q):q,ne=n.get_if_exited()?n.get_exit_status():null,re=n.get_if_signaled()?`SIGTERM`:null;return{pid:a?parseInt(a,10):0,output:[null,X,te],stdout:X,stderr:te,status:ne,signal:re}}catch(n){let a=N?.encoding&&N.encoding!==`buffer`?``:ut.alloc(0);return{pid:0,output:[null,a,a],stdout:a,stderr:a,status:null,signal:null,error:n instanceof Error?n:Error(String(n))}}}var GioInputStreamReadable,GioOutputStreamWritable,gx,ChildProcess,_x,vx=__esmMin(()=>{Ce(),ue(),It(),yt(),Wr(),ot(),GioInputStreamReadable=class extends Rr{_stream;_cancellable=new Se.Cancellable;constructor(n){super(),this._stream=n}_read(n){this._stream.read_bytes_async(Math.max(n,4096),le.PRIORITY_DEFAULT,this._cancellable,(n,a)=>{try{let n=this._stream.read_bytes_finish(a).get_data();!n||n.length===0?this.push(null):this.push(ut.from(n))}catch(n){this._cancellable.is_cancelled()||this.destroy(n)}})}_destroy(n,a){this._cancellable.cancel(),a(n)}},GioOutputStreamWritable=class extends zr{_stream;_cancellable=new Se.Cancellable;_closed=!1;constructor(n){super(),this._stream=n}_write(n,a,S){if(this._closed){S(Error(`write after end`));return}let C=typeof n==`string`?ut.from(n):n instanceof Uint8Array?n:ut.from(n);this._stream.write_bytes_async(new le.Bytes(C),le.PRIORITY_DEFAULT,this._cancellable,(n,a)=>{try{this._stream.write_bytes_finish(a),S()}catch(n){this._cancellable.is_cancelled()?S():S(n)}})}_final(n){if(this._closed){n();return}this._closed=!0;try{this._stream.close(null)}catch{}n()}_destroy(n,a){if(this._cancellable.cancel(),!this._closed){this._closed=!0;try{this._stream.close(null)}catch{}}a(n)}},gx=new Set,ChildProcess=class extends Tt{pid;exitCode=null;signalCode=null;killed=!1;connected=!1;stdin=null;stdout=null;stderr=null;get stdio(){return[this.stdin,this.stdout,this.stderr]}_subprocess=null;_setSubprocess(n){this._subprocess=n;let a=n.get_identifier();a&&(this.pid=parseInt(a,10))}kill(n){if(!this._subprocess)return!1;try{return n===`SIGKILL`||n===9?this._subprocess.force_exit():this._subprocess.send_signal(typeof n==`number`?n:15),this.killed=!0,!0}catch{return!1}}ref(){return this}unref(){return this}},_x={ChildProcess,exec:_exec,execSync,execFile,execFileSync,spawn,spawnSync}});vx(),Cs();const{toString:yx}=Object.prototype,isArrayBuffer=n=>yx.call(n)===`[object ArrayBuffer]`,isUint8Array=n=>yx.call(n)===`[object Uint8Array]`,bufferToUint8Array=n=>new Uint8Array(n.buffer,n.byteOffset,n.byteLength),bx=new TextEncoder,stringToUint8Array=n=>bx.encode(n),xx=new TextDecoder,uint8ArrayToString=n=>xx.decode(n),joinToString=(n,a)=>uint8ArraysToStrings(n,a).join(``),uint8ArraysToStrings=(n,a)=>{if(a===`utf8`&&n.every(n=>typeof n==`string`))return n;let S=new Ss(a),C=n.map(n=>typeof n==`string`?stringToUint8Array(n):n).map(n=>S.write(n)),N=S.end();return N===``?C:[...C,N]},joinToUint8Array=n=>n.length===1&&isUint8Array(n[0])?n[0]:concatUint8Arrays(stringsToUint8Arrays(n)),stringsToUint8Arrays=n=>n.map(n=>typeof n==`string`?stringToUint8Array(n):n),concatUint8Arrays=n=>{let a=new Uint8Array(getJoinLength(n)),S=0;for(let C of n)a.set(C,S),S+=C.length;return a},getJoinLength=n=>{let a=0;for(let S of n)a+=S.length;return a},isTemplateString=n=>Array.isArray(n)&&Array.isArray(n.raw),parseTemplates=(n,a)=>{let S=[];for(let[C,N]of n.entries())S=parseTemplate({templates:n,expressions:a,tokens:S,index:C,template:N});if(S.length===0)throw TypeError(`Template script must not be empty`);let[C,...N]=S;return[C,N,{}]},parseTemplate=({templates:n,expressions:a,tokens:S,index:C,template:N})=>{if(N===void 0)throw TypeError(`Invalid backslash sequence: ${n.raw[C]}`);let{nextTokens:F,leadingWhitespaces:I,trailingWhitespaces:H}=splitByWhitespaces(N,n.raw[C]),W=concatTokens(S,F,I);if(C===a.length)return W;let K=a[C];return concatTokens(W,Array.isArray(K)?K.map(n=>parseExpression(n)):[parseExpression(K)],H)},splitByWhitespaces=(n,a)=>{if(a.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let S=[],C=0,N=Sx.has(a[0]);for(let N=0,F=0;N<n.length;N+=1,F+=1){let I=a[F];if(Sx.has(I))C!==N&&S.push(n.slice(C,N)),C=N+1;else if(I===`\\`){let n=a[F+1];n===`
692
+ `),!0),ax.tick(),new ReflectionTransformer(n,ax)},sx=function deepkitDeclarationTransformer(n){return new DeclarationTransformer(n,ax)}}),lx,DeepkitLoader,ux=__esmMin(()=>{lx=__toESM(pp(),1),cx(),DeepkitLoader=class{constructor(){this.options={allowJs:!0,declaration:!1},this.host=lx.default.createCompilerHost(this.options),this.program=lx.default.createProgram([],this.options,this.host),this.printer=lx.default.createPrinter({newLine:lx.default.NewLineKind.LineFeed}),this.cache=new Cache,this.knownFiles={},this.sourceFiles={};let n=this.host.readFile;this.host.readFile=a=>this.knownFiles[a]?this.knownFiles[a]:n.call(this.host,a),this.host.writeFile=()=>{};let a=this.host.getSourceFile;this.host.getSourceFile=(n,S,C,N)=>this.sourceFiles[n]?this.sourceFiles[n]:a.call(this.host,n,S,C,N)}transform(n,a){this.knownFiles[a]=n;let S=lx.default.createSourceFile(a,n,lx.default.ScriptTarget.ESNext,!0,a.endsWith(`.tsx`)?lx.default.ScriptKind.TSX:lx.default.ScriptKind.TS),C=n;return lx.default.transform(S,[n=>{let a=new ReflectionTransformer(n,this.cache).forHost(this.host).withReflection({reflection:`default`});return n=>{let S=a.transformSourceFile(n);return C=this.printer.printNode(lx.default.EmitHint.SourceFile,S,S),S}}],this.options),C}}}),dx=__exportAll$3({Cache:()=>Cache,DeclarationTransformer:()=>DeclarationTransformer,DeepkitLoader:()=>DeepkitLoader,ReflectionTransformer:()=>ReflectionTransformer,debugPackStruct:()=>debugPackStruct,declarationTransformer:()=>sx,default:()=>myTransformerPlugin,encodeOps:()=>encodeOps,packSize:()=>64,packSizeByte:()=>6,transformer:()=>ox});function myTransformerPlugin(n,a){return{before:ox,afterDeclarations:sx}}var fx=__esmMin(()=>{cx(),cx(),ux()});Ve(),_c();let px=null;async function getLoader(){return px||(px=(async()=>new(await(Promise.resolve().then(()=>(fx(),dx)))).DeepkitLoader)(),px)}const mx=/\.(m|c)?tsx?$/;function printDiagnostics(...n){Be.log(`[deepkit] printDiagnostics`,inspect(n,!1,10,!0))}function deepkitPlugin(n={}){let a=n.reflection??!1;return{name:`gjsify-deepkit`,transform:{order:`pre`,async handler(n,S){if(!a||!mx.test(S))return null;try{let a=(await getLoader()).transform(n,S);return a===n?null:{code:a,map:null}}catch(n){return printDiagnostics({file:S,error:n}),null}}}}}function isPlainObject(n){if(typeof n!=`object`||!n)return!1;let a=Object.getPrototypeOf(n);return(a===null||a===Object.prototype||Object.getPrototypeOf(a)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)}nn();const safeNormalizeFileUrl=(n,a)=>{let S=normalizeFileUrl(normalizeDenoExecPath(n));if(typeof S!=`string`)throw TypeError(`${a} must be a string or a file URL: ${S}.`);return S},normalizeDenoExecPath=n=>isDenoExecPath(n)?n.toString():n,isDenoExecPath=n=>typeof n!=`string`&&n&&Object.getPrototypeOf(n)===String.prototype,normalizeFileUrl=n=>n instanceof URL?fileURLToPath(n):n,normalizeParameters=(n,a=[],S={})=>{let C=safeNormalizeFileUrl(n,`First argument`),[N,F]=isPlainObject(a)?[[],a]:[a,S];if(!Array.isArray(N))throw TypeError(`Second argument must be either an array of arguments or an options object: ${N}`);if(N.some(n=>typeof n==`object`&&!!n))throw TypeError(`Second argument must be an array of strings: ${N}`);let I=N.map(String),H=I.find(n=>n.includes(`\0`));if(H!==void 0)throw TypeError(`Arguments cannot contain null bytes ("\\0"): ${H}`);if(!isPlainObject(F))throw TypeError(`Last argument must be an options object: ${F}`);return[C,I,F]};var hx=__exportAll$3({ChildProcess:()=>ChildProcess,default:()=>_x,exec:()=>_exec,execFile:()=>execFile,execFileSync:()=>execFileSync,execSync:()=>execSync,spawn:()=>spawn,spawnSync:()=>spawnSync});function _spawnSubprocess(n,a,S){let C=new Se.SubprocessLauncher({flags:a});if(S?.cwd&&C.set_cwd(S.cwd),S?.env)for(let[n,a]of Object.entries(S.env))C.setenv(n,a,!0);return C.spawnv(n)}function execSync(n,a){let S=a?.encoding,C=a?.input,N=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE|(C?Se.SubprocessFlags.STDIN_PIPE:Se.SubprocessFlags.NONE),F=_spawnSubprocess([typeof a?.shell==`string`?a.shell:`/bin/sh`,`-c`,n],N,a),I=C?new le.Bytes(typeof C==`string`?new TextEncoder().encode(C):C):null,[,H,W]=F.communicate(I,null),K=F.get_exit_status();if(K!==0){let a=W?new TextDecoder().decode(gbytesToUint8Array(W)):``,S=Error(`Command failed: ${n}\n${a}`);throw S.status=K,S.stderr=a,S.stdout=H?new TextDecoder().decode(gbytesToUint8Array(H)):``,S}if(!H)return S&&S!==`buffer`?``:ut.alloc(0);let q=gbytesToUint8Array(H);return S&&S!==`buffer`?new TextDecoder().decode(q):ut.from(q)}function _exec(n,a,S){typeof a==`function`&&(S=a,a={});let C=a||{},N=new ChildProcess,F=typeof C.shell==`string`?C.shell:`/bin/sh`,I=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE;try{let a=_spawnSubprocess([F,`-c`,n],I,C);N._setSubprocess(a),ensureMainLoop(),a.communicate_utf8_async(null,null,(C,F)=>{try{let[,C,I]=a.communicate_utf8_finish(F),H=a.get_exit_status();if(N.exitCode=H,H!==0){let a=Error(`Command failed: ${n}`);a.code=H,a.killed=N.killed,a.stdout=C||``,a.stderr=I||``,S&&S(a,C||``,I||``)}else S&&S(null,C||``,I||``);N.emit(`close`,H,null),N.emit(`exit`,H,null)}catch(n){let a=n instanceof Error?n:Error(String(n));S&&S(a,``,``),N.emit(`error`,a)}})}catch(n){let a=n instanceof Error?n:Error(String(n));setTimeout(()=>{S&&S(a,``,``),N.emit(`error`,a)},0)}return N}function execFile(n,a,S,C){let N=[],F={},I;typeof a==`function`?I=a:Array.isArray(a)&&(N=a,typeof S==`function`?I=S:(F=S||{},I=C));let H=new ChildProcess,W=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE;try{let a=_spawnSubprocess([n,...N],W,F);H._setSubprocess(a),ensureMainLoop(),a.communicate_utf8_async(null,null,(S,C)=>{try{let[,S,N]=a.communicate_utf8_finish(C),F=a.get_exit_status();if(H.exitCode=F,F!==0){let a=Error(`Command failed: ${n}`);a.code=F,a.stdout=S||``,a.stderr=N||``,I&&I(a,S||``,N||``)}else I&&I(null,S||``,N||``);H.emit(`close`,F,null),H.emit(`exit`,F,null)}catch(n){let a=n instanceof Error?n:Error(String(n));I&&I(a,``,``),H.emit(`error`,a)}})}catch(n){let a=n instanceof Error?n:Error(String(n));setTimeout(()=>{I&&I(a,``,``),H.emit(`error`,a)},0)}return H}function execFileSync(n,a,S){let C=a||[],N=S?.encoding,F=S?.input,I=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE|(F?Se.SubprocessFlags.STDIN_PIPE:Se.SubprocessFlags.NONE),H=_spawnSubprocess([n,...C],I,S),W=F?new le.Bytes(typeof F==`string`?new TextEncoder().encode(F):F):null,[,K,q]=H.communicate(W,null),Y=H.get_exit_status();if(Y!==0){let a=q?new TextDecoder().decode(gbytesToUint8Array(q)):``,S=Error(`Command failed: ${n} ${C.join(` `)}`);throw S.status=Y,S.stderr=a,S}if(!K)return N&&N!==`buffer`?``:ut.alloc(0);let X=gbytesToUint8Array(K);return N&&N!==`buffer`?new TextDecoder().decode(X):ut.from(X)}function spawn(n,a,S){let C,N;Array.isArray(a)?(C=a,N=S):(C=void 0,N=a);let F=C||[],I=new ChildProcess,H=N?.shell,W;W=H?[typeof H==`string`?H:`/bin/sh`,`-c`,[n,...F].join(` `)]:[n,...F];let K=N?.stdio,q=Array.isArray(K)?[typeof K[0]==`string`?K[0]:`pipe`,typeof K[1]==`string`?K[1]:`pipe`,typeof K[2]==`string`?K[2]:`pipe`]:typeof K==`string`?[K,K,K]:[`pipe`,`pipe`,`pipe`],Y=Se.SubprocessFlags.NONE;q[0]===`pipe`?Y|=Se.SubprocessFlags.STDIN_PIPE:q[0]===`inherit`&&(Y|=Se.SubprocessFlags.STDIN_INHERIT),q[1]===`pipe`&&(Y|=Se.SubprocessFlags.STDOUT_PIPE),q[1]===`ignore`&&(Y|=Se.SubprocessFlags.STDOUT_SILENCE),q[2]===`pipe`&&(Y|=Se.SubprocessFlags.STDERR_PIPE),q[2]===`ignore`&&(Y|=Se.SubprocessFlags.STDERR_SILENCE);try{let n=_spawnSubprocess(W,Y,N);if(I._setSubprocess(n),gx.add(I),q[0]===`pipe`){let a=n.get_stdin_pipe();a&&(I.stdin=new GioOutputStreamWritable(a))}let a=n.get_stdout_pipe();a&&(I.stdout=new GioInputStreamReadable(a));let S=n.get_stderr_pipe();S&&(I.stderr=new GioInputStreamReadable(S));let C=N?.signal,F=null,emitAbortError=()=>{let n=N?.killSignal??`SIGTERM`;I.kill(n);let a=Error(`The operation was aborted`);a.name=`AbortError`,I.emit(`error`,a)};C&&(C.aborted?queueMicrotask(emitAbortError):(F=emitAbortError,C.addEventListener(`abort`,F,{once:!0}))),ensureMainLoop(),n.wait_async(null,(a,S)=>{try{n.wait_finish(S);let a=n.get_if_exited()?n.get_exit_status():null,N=n.get_if_signaled()?`SIGTERM`:null;I.exitCode=a,I.signalCode=N,C&&F&&C.removeEventListener(`abort`,F),I.stdin&&!I.stdin.destroyed&&I.stdin.destroy(),I.emit(`exit`,a,N),I.emit(`close`,a,N)}catch(n){I.emit(`error`,n instanceof Error?n:Error(String(n)))}gx.delete(I)}),deferEmit(I,`spawn`)}catch(n){deferEmit(I,`error`,n instanceof Error?n:Error(String(n)))}return I}function spawnSync(n,a,S){let C,N;Array.isArray(a)?(C=a,N=S):(C=void 0,N=a);let F=C||[],I=N?.shell,H=N?.input,W;W=I?[typeof I==`string`?I:`/bin/sh`,`-c`,[n,...F].join(` `)]:[n,...F];let K=Se.SubprocessFlags.STDOUT_PIPE|Se.SubprocessFlags.STDERR_PIPE|(H?Se.SubprocessFlags.STDIN_PIPE:Se.SubprocessFlags.NONE);try{let n=_spawnSubprocess(W,K,N),a=n.get_identifier(),S=H?new le.Bytes(typeof H==`string`?new TextEncoder().encode(H):H):null,[,C,F]=n.communicate(S,null),I=C?ut.from(gbytesToUint8Array(C)):ut.alloc(0),q=F?ut.from(gbytesToUint8Array(F)):ut.alloc(0),Y=N?.encoding,X=Y&&Y!==`buffer`?new TextDecoder().decode(I):I,te=Y&&Y!==`buffer`?new TextDecoder().decode(q):q,ne=n.get_if_exited()?n.get_exit_status():null,re=n.get_if_signaled()?`SIGTERM`:null;return{pid:a?parseInt(a,10):0,output:[null,X,te],stdout:X,stderr:te,status:ne,signal:re}}catch(n){let a=N?.encoding&&N.encoding!==`buffer`?``:ut.alloc(0);return{pid:0,output:[null,a,a],stdout:a,stderr:a,status:null,signal:null,error:n instanceof Error?n:Error(String(n))}}}var GioInputStreamReadable,GioOutputStreamWritable,gx,ChildProcess,_x,vx=__esmMin(()=>{Ce(),ue(),It(),yt(),Wr(),ot(),GioInputStreamReadable=class extends Rr{_stream;_cancellable=new Se.Cancellable;constructor(n){super(),this._stream=n}_read(n){this._stream.read_bytes_async(Math.max(n,4096),le.PRIORITY_DEFAULT,this._cancellable,(n,a)=>{try{let n=this._stream.read_bytes_finish(a).get_data();!n||n.length===0?this.push(null):this.push(ut.from(n))}catch(n){this._cancellable.is_cancelled()||this.destroy(n)}})}_destroy(n,a){this._cancellable.cancel(),a(n)}},GioOutputStreamWritable=class extends zr{_stream;_cancellable=new Se.Cancellable;_closed=!1;constructor(n){super(),this._stream=n}_write(n,a,S){if(this._closed){S(Error(`write after end`));return}let C=typeof n==`string`?ut.from(n):n instanceof Uint8Array?n:ut.from(n);this._stream.write_bytes_async(new le.Bytes(C),le.PRIORITY_DEFAULT,this._cancellable,(n,a)=>{try{this._stream.write_bytes_finish(a),S()}catch(n){this._cancellable.is_cancelled()?S():S(n)}})}_final(n){if(this._closed){n();return}this._closed=!0;try{this._stream.close(null)}catch{}n()}_destroy(n,a){if(this._cancellable.cancel(),!this._closed){this._closed=!0;try{this._stream.close(null)}catch{}}a(n)}},gx=new Set,ChildProcess=class extends Tt{pid;exitCode=null;signalCode=null;killed=!1;connected=!1;stdin=null;stdout=null;stderr=null;get stdio(){return[this.stdin,this.stdout,this.stderr]}_subprocess=null;_setSubprocess(n){this._subprocess=n;let a=n.get_identifier();a&&(this.pid=parseInt(a,10))}kill(n){if(!this._subprocess)return!1;try{return n===`SIGKILL`||n===9?this._subprocess.force_exit():this._subprocess.send_signal(typeof n==`number`?n:15),this.killed=!0,!0}catch{return!1}}ref(){return this}unref(){return this}},_x={ChildProcess,exec:_exec,execSync,execFile,execFileSync,spawn,spawnSync}});vx(),Cs();const{toString:yx}=Object.prototype,isArrayBuffer=n=>yx.call(n)===`[object ArrayBuffer]`,isUint8Array=n=>yx.call(n)===`[object Uint8Array]`,bufferToUint8Array=n=>new Uint8Array(n.buffer,n.byteOffset,n.byteLength),bx=new TextEncoder,stringToUint8Array=n=>bx.encode(n),xx=new TextDecoder,uint8ArrayToString=n=>xx.decode(n),joinToString=(n,a)=>uint8ArraysToStrings(n,a).join(``),uint8ArraysToStrings=(n,a)=>{if(a===`utf8`&&n.every(n=>typeof n==`string`))return n;let S=new Ss(a),C=n.map(n=>typeof n==`string`?stringToUint8Array(n):n).map(n=>S.write(n)),N=S.end();return N===``?C:[...C,N]},joinToUint8Array=n=>n.length===1&&isUint8Array(n[0])?n[0]:concatUint8Arrays(stringsToUint8Arrays(n)),stringsToUint8Arrays=n=>n.map(n=>typeof n==`string`?stringToUint8Array(n):n),concatUint8Arrays=n=>{let a=new Uint8Array(getJoinLength(n)),S=0;for(let C of n)a.set(C,S),S+=C.length;return a},getJoinLength=n=>{let a=0;for(let S of n)a+=S.length;return a},isTemplateString=n=>Array.isArray(n)&&Array.isArray(n.raw),parseTemplates=(n,a)=>{let S=[];for(let[C,N]of n.entries())S=parseTemplate({templates:n,expressions:a,tokens:S,index:C,template:N});if(S.length===0)throw TypeError(`Template script must not be empty`);let[C,...N]=S;return[C,N,{}]},parseTemplate=({templates:n,expressions:a,tokens:S,index:C,template:N})=>{if(N===void 0)throw TypeError(`Invalid backslash sequence: ${n.raw[C]}`);let{nextTokens:F,leadingWhitespaces:I,trailingWhitespaces:H}=splitByWhitespaces(N,n.raw[C]),W=concatTokens(S,F,I);if(C===a.length)return W;let K=a[C];return concatTokens(W,Array.isArray(K)?K.map(n=>parseExpression(n)):[parseExpression(K)],H)},splitByWhitespaces=(n,a)=>{if(a.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let S=[],C=0,N=Sx.has(a[0]);for(let N=0,F=0;N<n.length;N+=1,F+=1){let I=a[F];if(Sx.has(I))C!==N&&S.push(n.slice(C,N)),C=N+1;else if(I===`\\`){let n=a[F+1];n===`
693
693
  `?(--N,F+=1):n===`u`&&a[F+2]===`{`?F=a.indexOf(`}`,F+3):F+=Cx[n]??1}}let F=C===n.length;return F||S.push(n.slice(C)),{nextTokens:S,leadingWhitespaces:N,trailingWhitespaces:F}},Sx=new Set([` `,` `,`\r`,`
694
694
  `]),Cx={x:3,u:5},concatTokens=(n,a,S)=>S||n.length===0||a.length===0?[...n,...a]:[...n.slice(0,-1),`${n.at(-1)}${a[0]}`,...a.slice(1)],parseExpression=n=>{let a=typeof n;if(a===`string`)return n;if(a===`number`)return String(n);if(isPlainObject(n)&&(`stdout`in n||`isMaxBuffer`in n))return getSubprocessResult(n);throw n instanceof ChildProcess||Object.prototype.toString.call(n)===`[object Promise]`?TypeError("Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}."):TypeError(`Unexpected "${a}" in template expression`)},getSubprocessResult=({stdout:n})=>{if(typeof n==`string`)return n;if(isUint8Array(n))return uint8ArrayToString(n);throw TypeError(n===void 0?`Missing result.stdout in template expression. This is probably due to the previous subprocess' "stdout" option.`:`Unexpected "${typeof n}" stdout in template expression`)},isStandardStream=n=>wx.includes(n),wx=[Ut.stdin,Ut.stdout,Ut.stderr],Tx=[`stdin`,`stdout`,`stderr`],getStreamName=n=>Tx[n]??`stdio[${n}]`;_c();const normalizeFdSpecificOptions=n=>{let a={...n};for(let S of kx)a[S]=normalizeFdSpecificOption(n,S);return a},normalizeFdSpecificOption=(n,a)=>{let S=Array.from({length:getStdioLength(n)+1});return Dx(normalizeFdSpecificValue(n[a],S,a),a)},getStdioLength=({stdio:n})=>Array.isArray(n)?Math.max(n.length,Tx.length):Tx.length,normalizeFdSpecificValue=(n,a,S)=>isPlainObject(n)?normalizeOptionObject(n,a,S):a.fill(n),normalizeOptionObject=(n,a,S)=>{for(let C of Object.keys(n).sort(compareFdName))for(let N of parseFdName(C,S,a))a[N]=n[C];return a},compareFdName=(n,a)=>getFdNameOrder(n)<getFdNameOrder(a)?1:-1,getFdNameOrder=n=>n===`stdout`||n===`stderr`?0:n===`all`?2:1,parseFdName=(n,a,S)=>{if(n===`ipc`)return[S.length-1];let C=parseFd(n);if(C===void 0||C===0)throw TypeError(`"${a}.${n}" is invalid.
695
695
  It must be "${a}.stdout", "${a}.stderr", "${a}.all", "${a}.ipc", or "${a}.fd3", "${a}.fd4" (and so on).`);if(C>=S.length)throw TypeError(`"${a}.${n}" is invalid: that file descriptor does not exist.
@@ -738,10 +738,10 @@ var S=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,N=Object.pr
738
738
  `+N:``)}function processStubPlugin(n={}){let a=composeBanner(`if(typeof globalThis.process==="undefined"){const _s=imports.system,_G=imports.gi.GLib;const _h=t=>t?[0,0]:[0,0];_h.bigint=()=>0n;globalThis.process={platform:"linux",arch:"x64",version:"v20.0.0",env:new Proxy({},{get(_,p){return typeof p==="string"?(_G.getenv(p)??undefined):undefined},set(_,p,v){if(typeof p==="string")_G.setenv(p,String(v),true);return true},has(_,p){return typeof p==="string"&&_G.getenv(p)!==null},deleteProperty(_,p){if(typeof p==="string")_G.unsetenv(p);return true},ownKeys(){return _G.listenv()??[]},getOwnPropertyDescriptor(_,p){const v=_G.getenv(p);return v!==null?{value:v,writable:true,enumerable:true,configurable:true}:undefined}}),argv:_s?.programArgs?["gjs",_s.programInvocationName||"",..._s.programArgs]:["gjs"],versions:{},config:{},cwd(){return _G.get_current_dir()||"/"},exit(c){_s.exit(c??0)},stderr:{write(s){printerr(s)}},stdout:{write(s){print(s)}},stdin:null,exitCode:undefined,nextTick(fn,...a){Promise.resolve().then(()=>fn(...a))},hrtime:_h,};}`,n.userBanner??``);return{name:`gjsify-process-stub`,renderChunk:{order:`post`,handler(n,S){return S.isEntry?{code:a+`
739
739
  `+n,map:null}:null}}}}var cT=__commonJSMin(((n,a)=>{let isLinux=()=>process.platform===`linux`,S=null,getReport=()=>{if(!S)if(isLinux()&&process.report){let n=process.report.excludeNetwork;process.report.excludeNetwork=!0,S=process.report.getReport(),process.report.excludeNetwork=n}else S={};return S};a.exports={isLinux,getReport}})),lT=__commonJSMin(((n,a)=>{let S=(zs(),__toCommonJS(Is)),C=2048,readFileSync=n=>{let a=S.openSync(n,`r`),N=Buffer.alloc(C),F=S.readSync(a,N,0,C,0);return S.close(a,()=>{}),N.subarray(0,F)},readFile=n=>new Promise((a,N)=>{S.open(n,`r`,(n,F)=>{if(n)N(n);else{let n=Buffer.alloc(C);S.read(F,n,0,C,0,(C,N)=>{a(n.subarray(0,N)),S.close(F,()=>{})})}})});a.exports={LDD_PATH:`/usr/bin/ldd`,SELF_PATH:`/proc/self/exe`,readFileSync,readFile}})),uT=__commonJSMin(((n,a)=>{let interpreterPath=n=>{if(n.length<64||n.readUInt32BE(0)!==2135247942||n.readUInt8(4)!==2||n.readUInt8(5)!==1)return null;let a=n.readUInt32LE(32),S=n.readUInt16LE(54),C=n.readUInt16LE(56);for(let N=0;N<C;N++){let C=a+N*S;if(n.readUInt32LE(C)===3){let a=n.readUInt32LE(C+8),S=n.readUInt32LE(C+32);return n.subarray(a,a+S).toString().replace(/\0.*$/g,``)}}return null};a.exports={interpreterPath}})),dT=__commonJSMin(((n,a)=>{let S=(vx(),__toCommonJS(hx)),{isLinux:C,getReport:N}=cT(),{LDD_PATH:F,SELF_PATH:I,readFile:H,readFileSync:W}=lT(),{interpreterPath:K}=uT(),q,Y,X,te=`getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true`,ne=``,safeCommand=()=>ne||new Promise(n=>{S.exec(te,(a,S)=>{ne=a?` `:S,n(ne)})}),safeCommandSync=()=>{if(!ne)try{ne=S.execSync(te,{encoding:`utf8`})}catch{ne=` `}return ne},re=`glibc`,ie=/LIBC[a-z0-9 \-).]*?(\d+\.\d+)/i,ae=`musl`,isFileMusl=n=>n.includes(`libc.musl-`)||n.includes(`ld-musl-`),familyFromReport=()=>{let n=N();return n.header&&n.header.glibcVersionRuntime?re:Array.isArray(n.sharedObjects)&&n.sharedObjects.some(isFileMusl)?ae:null},familyFromCommand=n=>{let[a,S]=n.split(/[\r\n]+/);return a&&a.includes(re)?re:S&&S.includes(ae)?ae:null},familyFromInterpreterPath=n=>{if(n){if(n.includes(`/ld-musl-`))return ae;if(n.includes(`/ld-linux-`))return re}return null},getFamilyFromLddContent=n=>(n=n.toString(),n.includes(`musl`)?ae:n.includes(`GNU C Library`)?re:null),familyFromFilesystem=async()=>{if(Y!==void 0)return Y;Y=null;try{Y=getFamilyFromLddContent(await H(F))}catch{}return Y},familyFromFilesystemSync=()=>{if(Y!==void 0)return Y;Y=null;try{Y=getFamilyFromLddContent(W(F))}catch{}return Y},familyFromInterpreter=async()=>{if(q!==void 0)return q;q=null;try{q=familyFromInterpreterPath(K(await H(I)))}catch{}return q},familyFromInterpreterSync=()=>{if(q!==void 0)return q;q=null;try{q=familyFromInterpreterPath(K(W(I)))}catch{}return q},family=async()=>{let n=null;return C()&&(n=await familyFromInterpreter(),n||(n=await familyFromFilesystem(),n||=familyFromReport(),n||=familyFromCommand(await safeCommand()))),n},familySync=()=>{let n=null;return C()&&(n=familyFromInterpreterSync(),n||(n=familyFromFilesystemSync(),n||=familyFromReport(),n||=familyFromCommand(safeCommandSync()))),n},isNonGlibcLinux=async()=>C()&&await family()!==re,isNonGlibcLinuxSync=()=>C()&&familySync()!==re,versionFromFilesystem=async()=>{if(X!==void 0)return X;X=null;try{let n=(await H(F)).match(ie);n&&(X=n[1])}catch{}return X},versionFromFilesystemSync=()=>{if(X!==void 0)return X;X=null;try{let n=W(F).match(ie);n&&(X=n[1])}catch{}return X},versionFromReport=()=>{let n=N();return n.header&&n.header.glibcVersionRuntime?n.header.glibcVersionRuntime:null},versionSuffix=n=>n.trim().split(/\s+/)[1],versionFromCommand=n=>{let[a,S,C]=n.split(/[\r\n]+/);return a&&a.includes(re)?versionSuffix(a):S&&C&&S.includes(ae)?versionSuffix(C):null},version=async()=>{let n=null;return C()&&(n=await versionFromFilesystem(),n||=versionFromReport(),n||=versionFromCommand(await safeCommand())),n},versionSync=()=>{let n=null;return C()&&(n=versionFromFilesystemSync(),n||=versionFromReport(),n||=versionFromCommand(safeCommandSync())),n};a.exports={GLIBC:re,MUSL:ae,family,familySync,isNonGlibcLinux,isNonGlibcLinuxSync,version,versionSync}})),fT=__commonJSMin(((n,a)=>{let S={and_chr:`chrome`,and_ff:`firefox`,ie_mob:`ie`,op_mob:`opera`,and_qq:null,and_uc:null,baidu:null,bb:null,kaios:null,op_mini:null};function browserslistToTargets(n){let a={};for(let C of n){let[n,N]=C.split(` `);if(S[n]===null)continue;let F=parseVersion(N);F!=null&&(a[n]==null||F<a[n])&&(a[n]=F)}return a}function parseVersion(n){let[a,S=0,C=0]=n.split(`-`)[0].split(`.`).map(n=>parseInt(n,10));return isNaN(a)||isNaN(S)||isNaN(C)?null:a<<16|S<<8|C}a.exports=browserslistToTargets})),pT=__commonJSMin(((n,a)=>{function composeVisitors(n){if(n.length===1)return n[0];if(n.some(n=>typeof n==`function`))return a=>composeVisitors(n.map(n=>typeof n==`function`?n(a):n));let a={};return composeSimpleVisitors(a,n,`StyleSheet`),composeSimpleVisitors(a,n,`StyleSheetExit`),composeObjectVisitors(a,n,`Rule`,ruleVisitor,wrapCustomAndUnknownAtRule),composeObjectVisitors(a,n,`RuleExit`,ruleVisitor,wrapCustomAndUnknownAtRule),composeObjectVisitors(a,n,`Declaration`,declarationVisitor,wrapCustomProperty),composeObjectVisitors(a,n,`DeclarationExit`,declarationVisitor,wrapCustomProperty),composeSimpleVisitors(a,n,`Url`),composeSimpleVisitors(a,n,`Color`),composeSimpleVisitors(a,n,`Image`),composeSimpleVisitors(a,n,`ImageExit`),composeSimpleVisitors(a,n,`Length`),composeSimpleVisitors(a,n,`Angle`),composeSimpleVisitors(a,n,`Ratio`),composeSimpleVisitors(a,n,`Resolution`),composeSimpleVisitors(a,n,`Time`),composeSimpleVisitors(a,n,`CustomIdent`),composeSimpleVisitors(a,n,`DashedIdent`),composeArrayFunctions(a,n,`MediaQuery`),composeArrayFunctions(a,n,`MediaQueryExit`),composeSimpleVisitors(a,n,`SupportsCondition`),composeSimpleVisitors(a,n,`SupportsConditionExit`),composeArrayFunctions(a,n,`Selector`),composeTokenVisitors(a,n,`Token`,`token`,!1),composeTokenVisitors(a,n,`Function`,`function`,!1),composeTokenVisitors(a,n,`FunctionExit`,`function`,!0),composeTokenVisitors(a,n,`Variable`,`var`,!1),composeTokenVisitors(a,n,`VariableExit`,`var`,!0),composeTokenVisitors(a,n,`EnvironmentVariable`,`env`,!1),composeTokenVisitors(a,n,`EnvironmentVariableExit`,`env`,!0),a}a.exports=composeVisitors;function wrapCustomAndUnknownAtRule(n,a){return n===`unknown`?(n=>a({type:`unknown`,value:n})):n===`custom`?(n=>a({type:`custom`,value:n})):a}function wrapCustomProperty(n,a){return n===`custom`?(n=>a({property:`custom`,value:n})):a}function ruleVisitor(n,a){if(typeof n==`object`){if(a.type===`unknown`){let S=n.unknown;return typeof S==`object`&&(S=S[a.value.name]),S?.(a.value)}if(a.type===`custom`){let S=n.custom;return typeof S==`object`&&(S=S[a.value.name]),S?.(a.value)}return n[a.type]?.(a)}return n?.(a)}function declarationVisitor(n,a){if(typeof n==`object`){let S=a.property;if(a.property===`unparsed`)S=a.value.propertyId.property;else if(a.property===`custom`){let S=n.custom;return typeof S==`object`&&(S=S[a.value.name]),S?.(a.value)}return n[S]?.(a)}return n?.(a)}function extractObjectsOrFunctions(n,a){let S=[],C=!1,N=new Set;for(let F of n){let n=F[a];if(n){if(typeof n==`function`)C=!0;else for(let a in n)N.add(a);S.push(n)}}return[S,C,N]}function composeObjectVisitors(n,a,S,C,N){let[F,I,H]=extractObjectsOrFunctions(a,S);if(F.length===0)return;if(F.length===1){n[S]=F[0];return}let W=createArrayVisitor(a,(n,a)=>C(n[S],a));if(I)n[S]=W;else{let a={};for(let n of H)a[n]=N(n,W);n[S]=a}}function composeTokenVisitors(n,a,S,C,N){let[F,I,H]=extractObjectsOrFunctions(a,S);if(F.length===0)return;if(F.length===1){n[S]=F[0];return}let W=createTokenVisitor(a,C,N);if(I)n[S]=W;else{let a={};for(let n of H)a[n]=W;n[S]=a}}function createTokenVisitor(n,a,S){let C=createArrayVisitor(n,(n,a)=>{let C;switch(a.type){case`token`:C=n.Token,typeof C==`object`&&(C=C[a.value.type]);break;case`function`:C=S?n.FunctionExit:n.Function,typeof C==`object`&&(C=C[a.value.name]);break;case`var`:C=S?n.VariableExit:n.Variable;break;case`env`:if(C=S?n.EnvironmentVariableExit:n.EnvironmentVariable,typeof C==`object`){let n;switch(a.value.name.type){case`ua`:case`unknown`:n=a.value.name.value;break;case`custom`:n=a.value.name.ident;break}C=C[n]}break;case`color`:C=n.Color;break;case`url`:C=n.Url;break;case`length`:C=n.Length;break;case`angle`:C=n.Angle;break;case`time`:C=n.Time;break;case`resolution`:C=n.Resolution;break;case`dashed-ident`:C=n.DashedIdent;break}if(!C)return;let N=C(a.value);switch(a.type){case`color`:case`url`:case`length`:case`angle`:case`time`:case`resolution`:case`dashed-ident`:Array.isArray(N)?N=N.map(n=>({type:a.type,value:n})):N&&={type:a.type,value:N};break}return N});return n=>C({type:a,value:n})}function extractFunctions(n,a){let S=[];for(let C of n){let n=C[a];n&&S.push(n)}return S}function composeSimpleVisitors(n,a,S){let C=extractFunctions(a,S);if(C.length!==0){if(C.length===1){n[S]=C[0];return}n[S]=n=>{let a=!1;for(let S of C){let C=S(n);C&&(n=C,a=!0)}return a?n:void 0}}}function composeArrayFunctions(n,a,S){let C=extractFunctions(a,S);if(C.length!==0){if(C.length===1){n[S]=C[0];return}n[S]=createArrayVisitor(C,(n,a)=>n(a))}}function createArrayVisitor(n,a){let S=new Bitset(n.length);return C=>{let N=[C],F=!1;S.clear();for(let C=0;C<N.length;C++)for(let I=0;I<n.length&&C<N.length;){if(S.get(I)){I++;continue}let H=N[C],W=n[I],K=a(W,H);Array.isArray(K)?(K.length===0?N.splice(C,1):K.length===1?N[C]=K[0]:N.splice(C,1,...K),F=!0,S.set(I),I=0):K?(N[C]=K,F=!0,S.set(I),I=0):I++}if(F)return N.length===1?N[0]:N}}var Bitset=class{constructor(n=32){this.bits=0,this.more=n>32?new Uint32Array(Math.ceil((n-32)/32)):null}get(n){if(n>=32&&this.more){let a=Math.floor((n-32)/32),S=n%32;return!!(this.more[a]&1<<S)}else return!!(this.bits&1<<n)}set(n){if(n>=32&&this.more){let a=Math.floor((n-32)/32),S=n%32;this.more[a]|=1<<S}else this.bits|=1<<n}clear(){this.bits=0,this.more&&this.more.fill(0)}}})),mT=__commonJSMin((n=>{n.Features={Nesting:1,NotSelectorList:2,DirSelector:4,LangSelectorList:8,IsSelector:16,TextDecorationThicknessPercent:32,MediaIntervalSyntax:64,MediaRangeSyntax:128,CustomMediaQueries:256,ClampFunction:512,ColorFunction:1024,OklabColors:2048,LabColors:4096,P3Colors:8192,HexAlphaColors:16384,SpaceSeparatedColorNotation:32768,FontFamilySystemUi:65536,DoublePositionGradients:131072,VendorPrefixes:262144,LogicalProperties:524288,LightDark:1048576,Selectors:31,MediaQueries:448,Colors:1113088}})),hT=__commonJSMin(((n,a)=>{let S=[process.platform,process.arch];if(process.platform===`linux`){let{MUSL:n,familySync:a}=dT();a()===n?S.push(`musl`):process.arch===`arm`?S.push(`gnueabihf`):S.push(`gnu`)}else process.platform===`win32`&&S.push(`msvc`);let C;try{C=K(`lightningcss-${S.join(`-`)}`)}catch{C=K(`../lightningcss.${S.join(`-`)}.node`)}a.exports.transform=wrap(C.transform),a.exports.transformStyleAttribute=wrap(C.transformStyleAttribute),a.exports.bundle=wrap(C.bundle),a.exports.bundleAsync=wrap(C.bundleAsync),a.exports.browserslistToTargets=fT(),a.exports.composeVisitors=pT(),a.exports.Features=mT().Features;function wrap(n){return a=>{if(typeof a.visitor==`function`){let S=[];a.visitor=a.visitor({addDependency(n){S.push(n)}});let C=n(a);return C instanceof Promise?C=C.then(n=>(S.length&&(n.dependencies??=[],n.dependencies.push(...S)),n)):S.length&&(C.dependencies??=[],C.dependencies.push(...S)),C}else return n(a)}}})),gT=__exportAll$3({Features:()=>wT,browserslistToTargets:()=>ST,bundle:()=>bT,bundleAsync:()=>xT,composeVisitors:()=>CT,transform:()=>vT,transformStyleAttribute:()=>yT}),_T,vT,yT,bT,xT,ST,CT,wT,TT=__esmMin(()=>{_T=__toESM(hT(),1),{transform:vT,transformStyleAttribute:yT,bundle:bT,bundleAsync:xT,browserslistToTargets:ST,composeVisitors:CT,Features:wT}=_T.default});_s(),Oc(),Jo(),nn();let ET=null;async function pickBundler(){let n=globalThis.process?.env?.GJSIFY_CSS_BACKEND;if(n===`npm`)return loadNpmBundler();if(n===`native`){let n=await tryLoadNativeBundler();if(!n)throw Error(`GJSIFY_CSS_BACKEND=native but @gjsify/lightningcss-native is not loadable`);return n}return await tryLoadNativeBundler()??loadNpmBundler()}async function tryLoadNativeBundler(){if(globalThis.imports?.gi===void 0)return null;try{let n=await import(`@gjsify/lightningcss-native`);return n.hasNativeLightningcss()?async(a,S)=>{let C=targetsToBrowserslist(S);return n.bundle({filename:a,targets:C,minify:!1,sourceMap:!1,errorRecovery:!0})}:null}catch{return null}}async function loadNpmBundler(){let{bundleAsync:n}=await Promise.resolve().then(()=>(TT(),gT));return async(a,S)=>({code:(await n({filename:a,targets:S,minify:!1,errorRecovery:!0,resolver:DT})).code})}const DT={resolve(n,a){return Io(n)?n:n.startsWith(`./`)||n.startsWith(`../`)?Po(Bo(a),n):createRequire(pathToFileURL(a).href).resolve(n)}};function targetsToBrowserslist(n){if(!n)return;let a=[];for(let[S,C]of Object.entries(n)){if(typeof C!=`number`)continue;let n=C>>>16&255;if(n===0)continue;let N=S===`ios_saf`?`ios`:S;a.push(`${N} >= ${n}`)}return a.length?a.join(`, `):void 0}function cssAsStringPlugin(n={}){let{targets:a,bundle:S=!0}=n;return{name:`gjsify-css-as-string`,load:{filter:{id:/\.css$/},async handler(n){let C=S?new TextDecoder(`utf-8`).decode(await loadAndBundleCss(n,a)):await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(C)};`,moduleType:`js`}}}}}async function loadAndBundleCss(n,a){ET||=pickBundler();let{code:S}=await(await ET)(n,a);return S}const OT=/^#![^\n]*\n/;function inputShebangStripPlugin(){return{name:`gjsify-input-shebang-strip`,transform:{order:`pre`,handler(n){return n.startsWith(`#!`)?{code:n.replace(OT,``),map:null}:null}}}}function shebangPlugin(n={}){if(!n.enabled)return null;let a=n.line??`#!/usr/bin/env -S gjs -m`;return{name:`gjsify-shebang`,renderChunk:{order:`post`,handler(n,S){return!S.isEntry||n.startsWith(`#!`)?null:{code:a+`
740
740
  `+n,map:null}}}}}function expandEnvTemplate(n,a=process.env){return n.replace(/\$\{env:([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g,(n,S,C)=>{let N=a[S];return N!==void 0&&N!==``?N:C??``})}function resolveShebangLine(n){if(n===void 0||n===!1)return null;if(n===!0)return`#!/usr/bin/env -S gjs -m`;let a=expandEnvTemplate(n);return a.trim()?a.startsWith(`#!`)?a:`#!`+a:null}nn(),Jo();const kT=Bo(fileURLToPath(import.meta.url));function resolveConsoleShim(){let n=Po(kT,`../shims/console-gjs.js`),a=null;try{a=(zs(),__toCommonJS(Is))}catch{return n}if(a.existsSync(n))return n;try{return(Oc(),__toCommonJS(wc)).createRequire(import.meta.url).resolve(`@gjsify/rolldown-plugin-gjsify/shims/console-gjs`)}catch{return n}}const setupForGjs=async n=>{let a=[`cairo`,`gettext`,`system`,...n.userExternal??[]],external=n=>!!(n.startsWith(`gi://`)||a.includes(n)),S=n.pluginOptions.format??`esm`,C=n.pluginOptions.exclude??[],N=await globToEntryPoints(n.input,C),F=Po(kT,`../shims/unicorn-magic.js`),I={...getAliasesForGjs({external}),"unicorn-magic":F,...n.pluginOptions.aliases??{},...n.userAliases??{}},H=n.pluginOptions.consoleShim===!1?null:resolveConsoleShim(),W=[];n.pluginOptions.autoGlobalsInject&&W.push(n.pluginOptions.autoGlobalsInject);let K=wrapInputWithSideEffects(N,W),q={input:K.input,platform:`neutral`,external,resolve:{mainFields:S===`esm`?[`browser`,`module`,`main`]:[`browser`,`main`,`module`],conditionNames:S===`esm`?[`browser`,`import`]:[`browser`,`require`,`import`]},transform:{target:`firefox140`,define:{global:`globalThis`,window:`globalThis`,"process.env.READABLE_STREAM":`"disable"`},...H?{inject:{console:[H,`console`]}}:{}},output:{...n.output,format:S,sourcemap:!1,codeSplitting:!1},treeshake:!0},Y=getBundleDirFromOutput(n.output);return{options:q,plugins:[...K.plugin?[K.plugin]:[],inputShebangStripPlugin(),aliasPlugin({entries:{"random-access-file":`random-access-file/index.js`,...flattenAliases$3(I)}}),blueprintPlugin(),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin({targets:{firefox:60<<16}}),nodeModulesPathRewritePlugin({bundleDir:Y}),processStubPlugin({userBanner:n.userBanner}),(()=>{let a=resolveShebangLine(n.shebang);return shebangPlugin({enabled:a!==null,line:a??void 0})})()]}};function wrapInputWithSideEffects(n,a){if(a.length===0||n===void 0)return{input:n,plugin:null};let S=new Map,C=`\0gjsify-entry:`;function wrap(n){let a=C+n;return S.set(a,n),a}let N;if(typeof n==`string`)N=wrap(n);else if(Array.isArray(n))N=n.map(wrap);else{let a={};for(let[S,C]of Object.entries(n))a[S]=wrap(C);N=a}let F=a.map(n=>`import ${JSON.stringify(n)};`).join(`
741
- `),I=new Set;return{input:N,plugin:{name:`gjsify-virtual-entry`,async resolveId(n,a){return n.startsWith(C)?n:I.has(n)?{id:n,moduleSideEffects:`no-treeshake`}:null},async load(n){if(!n.startsWith(C))return null;let a=S.get(n);if(!a)return null;let N=(await this.resolve(a,void 0,{skipSelf:!0}))?.id??a;return I.add(N),{code:`${F}\nimport ${JSON.stringify(N)};\nexport * from ${JSON.stringify(N)};\n`,moduleSideEffects:`no-treeshake`}}}}}function flattenAliases$3(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$3,`flattenAliases`);const setupForNode=async n=>{let a=n.userExternal??[],S=[...Ih,`node-datachannel`,...a],external=n=>!!(n.startsWith(`gi://`)||n.startsWith(`@girs/`)||S.includes(n)),C=n.pluginOptions.format??`esm`,N=n.pluginOptions.exclude??[],F=await globToEntryPoints(n.input,N),I={...getAliasesForNode({external}),...n.pluginOptions.aliases??{},...n.userAliases??{}},H=getBundleDirFromOutput(n.output);return{options:{input:F,platform:`node`,external,resolve:{mainFields:C===`esm`?[`module`,`main`,`browser`]:[`main`,`module`,`browser`],conditionNames:C===`esm`?[`require`,`node`,`module`]:[`require`]},transform:{target:`node24`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:C,sourcemap:!1,banner:void 0,codeSplitting:!1},treeshake:!0},plugins:[aliasPlugin({entries:flattenAliases$2(I)}),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin(),nodeModulesPathRewritePlugin({bundleDir:H})]}};function flattenAliases$2(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$2,`flattenAliases`);const AT=`\0gjsify-empty-gjs-import`;function gjsImportsEmptyPlugin(){return{name:`gjsify-gjs-imports-empty`,resolveId:{order:`pre`,filter:{id:/^(@girs\/|gi:\/\/)/},handler(n){return{id:AT}}},load(n){return n===AT?{code:`export {}; export default {};`,moduleSideEffects:!1}:null}}}const setupForBrowser=async n=>{let a=[...n.userExternal??[]],S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N={process:`@gjsify/empty`,"node:process":`@gjsify/empty`,assert:`@gjsify/assert`,"node:assert":`@gjsify/assert`,...n.pluginOptions.aliases??{},...n.userAliases??{}};return{options:{input:C,platform:`browser`,external:a,resolve:{mainFields:[`browser`,`module`,`main`],conditionNames:[`import`,`browser`]},transform:{target:`esnext`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:`esm`,sourcemap:!1,codeSplitting:!1},treeshake:!0},plugins:[gjsImportsEmptyPlugin(),aliasPlugin({entries:flattenAliases$1(N)}),blueprintPlugin(),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin()]}};function flattenAliases$1(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$1,`flattenAliases`);const setupLib=async n=>{let a=n.pluginOptions.format??n.pluginOptions.library??`esm`,S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N=computeCommonRoot(C),F={...n.pluginOptions.aliases??{},...n.userAliases??{}},external=n=>!(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`));return{options:{input:C,platform:`neutral`,external,resolve:{mainFields:a===`esm`?[`module`,`main`]:[`main`],conditionNames:a===`esm`?[`module`,`import`]:[`require`]},transform:{target:`esnext`},output:{...n.output,format:a,preserveModules:!0,preserveModulesRoot:N,sourcemap:!1},treeshake:!1},plugins:[aliasPlugin({entries:flattenAliases(F)}),cssAsStringPlugin()]}};function computeCommonRoot(n){let a=n===void 0?[]:typeof n==`string`?[n]:Array.isArray(n)?n:Object.values(n);if(a.length===0)return`src`;let S=a.map(n=>n.split(`/`).filter(Boolean)),C=S[0],N=0;for(;N<C.length;N++){let n=C[N];if(!S.every(a=>a[N]===n))break}if(N===0)return`src`;let F=C.slice(0,N);return S.some(n=>n.length>N)?F.join(`/`):F.slice(0,-1).join(`/`)||`src`}function flattenAliases(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}_s();function textLoaderPlugin(n={}){let a=Object.entries(n.loaders??{}).filter(([,n])=>n===`text`).map(([n])=>n);if(a.length===0)return null;let S=a.map(n=>n.replace(/^\./,``).replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)),C=RegExp(`\\.(?:${S.join(`|`)})$`);return{name:`gjsify-text-loader`,async load(n){if(!C.test(n))return null;let a=await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(a)};`,moduleType:`js`}}}}const gjsifyPlugin=async(n,a={})=>{if(a.library)switch(a.library){case`esm`:case`cjs`:return await setupLib({input:n.input,output:n.output,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown library type: `+a.library)}let S=a.app??`gjs`;switch(S){case`gjs`:return await setupForGjs({input:n.input,output:n.output,userExternal:n.userExternal,userBanner:n.userBanner,userAliases:n.userAliases,shebang:n.shebang,pluginOptions:a});case`node`:return await setupForNode({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});case`browser`:return await setupForBrowser({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown app platform: `+S)}};Oc(),Jo(),nn();function isPluginByName(n){return typeof n==`object`&&!!n&&typeof n.name==`string`&&!(`apply`in n)&&!(`resolveId`in n)&&!(`load`in n)&&!(`transform`in n)&&!(`renderChunk`in n)&&!(`generateBundle`in n)}async function resolveUserPlugins(n,a){let S=createRequire(Lo(a,`package.json`)),C=[];for(let N of n){if(!isPluginByName(N)){C.push(N);continue}let n;try{n=S.resolve(N.name)}catch(n){throw Error(`gjsify config: failed to resolve plugin "${N.name}" from ${a}. Add it to your project's dependencies, or pass a Plugin object directly. (${n.message})`)}let F=await import(pathToFileURL(n).href),I=N.export??`default`,H=F[I];if(typeof H!=`function`){let n=Object.keys(F).filter(n=>typeof F[n]==`function`);throw Error(`gjsify config: plugin "${N.name}" has no function export "${I}". Available function exports: ${n.length?n.join(`, `):`(none)`}.`)}let W=await H(N.options);if(W==null)throw Error(`gjsify config: plugin "${N.name}" factory returned ${W}. Check the plugin's signature — it should return a Rolldown/Vite plugin object.`);C.push(W)}return C}Ve();const defaultBundler=async({rolldownInput:n,format:a})=>{let S=await(await import(`rolldown`)).rolldown(n);try{let n=await S.generate({format:a,minify:!1,sourcemap:!1}),C=[];for(let a of n.output)a.type===`chunk`&&C.push(a.code);return C}finally{await S.close()}},jT=ay;function setsEqual(n,a){if(n.size!==a.size)return!1;for(let S of n)if(!a.has(S))return!1;return!0}async function applyExcludeGlobals(n,a,S,C){if(!C?.length)return{detected:n,injectPath:a};for(let a of C)n.delete(a);let N=detectedToRegisterPaths(n);for(let n of S)N.add(n);return{detected:n,injectPath:N.size>0?await writeRegisterInjectFile(N)??void 0:void 0}}function detectedToRegisterPaths(n){let a=new Set;for(let S of n){let n=jT[S];n&&a.add(n)}return a}async function detectAutoGlobals(n,a,S,C,N={},F=defaultBundler){let I=N.extraGlobalsList?resolveGlobalsList(N.extraGlobalsList):new Set,H=new Set(N.excludeGlobals??[]),W=new Set,K;I.size>0&&(K=await writeRegisterInjectFile(I)??void 0);let q=(n.plugins??[]).filter(n=>{let a=n&&typeof n==`object`&&`name`in n?n.name:void 0;return a!==`gjsify`&&a!==`gjsify-orchestrator`});for(let Y=1;Y<=5;Y++){let X=await S({...a,autoGlobalsInject:K}),te=await F({rolldownInput:{input:K?appendInjectAsEntry(n.input,K):n.input,external:n.external,resolve:n.resolve,transform:n.transform,plugins:[...q,X],logLevel:`silent`},format:n.format??`esm`});if(te.length===0)return{detected:new Set,injectPath:K};let ne=new Set;for(let n=0;n<te.length;n++){let a=te[n]??``;try{for(let n of detectFreeGlobals(a))ne.add(n)}catch(S){if(globalThis.process?.env?.GJSIFY_DEBUG_AUTO_GLOBALS){let S=`/tmp/gjsify-auto-globals-failed-chunk-${n}.mjs`;try{(await Promise.resolve().then(()=>(zs(),Is))).writeFileSync(S,a),Be.error(`[gjsify-auto-globals] parse failed on chunk #${n} — wrote ${S} for inspection`)}catch{}}throw S}}if(H.size>0)for(let n of H)ne.delete(n);if(setsEqual(W,ne)){if(C){let n=[...W].sort(),a=I.size>0?` (+ ${I.size} extra register module(s))`:``;Be.debug(`[gjsify] --globals auto: converged after ${Y-1} iteration(s), ${W.size} global(s)${n.length?`: `+n.join(`, `):``}${a}`)}return applyExcludeGlobals(W,K,I,N.excludeGlobals)}W=ne;let re=detectedToRegisterPaths(W);for(let n of I)re.add(n);if(re.size===0)return{detected:W,injectPath:void 0};if(K=await writeRegisterInjectFile(re)??void 0,C){let n=[...W].sort();Be.debug(`[gjsify] --globals auto: iteration ${Y}, ${W.size} global(s)${n.length?`: `+n.join(`, `):``}`)}}return C&&Be.debug(`[gjsify] --globals auto: hit max iterations (5), using last detected set`),applyExcludeGlobals(W,K,I,N.excludeGlobals)}function appendInjectAsEntry(n,a){return n===void 0?[a]:typeof n==`string`?[n,a]:Array.isArray(n)?[...n,a]:{...n,__gjsify_inject:a}}Oc(),nn(),Jo(),zs(),_s();function findPnpRoot(n){let a=n;for(;;){if(existsSync(Lo(a,`.pnp.cjs`)))return a;let n=Bo(a);if(n===a)return null;a=n}}async function loadPnpApi(){try{let n=await import(`pnpapi`);return n.default??n}catch{return null}}async function pnpPlugin(n={}){let a=n.issuerUrl??import.meta.url;if(!findPnpRoot(process.cwd()))return null;let S=await loadPnpApi();if(S===null)return null;let C=fileURLToPath(a),N=createRequire(C),F=n.relayPackages??[`@gjsify/node-polyfills`,`@gjsify/web-polyfills`],I=[];for(let n of F)try{I.push(N.resolve(`${n}/package.json`))}catch{}return{name:`gjsify-pnp`,resolveId:{order:`pre`,async handler(n,a){if(n.startsWith(`.`)||n.startsWith(`/`))return null;if(n.startsWith(`gi://`))return{id:n,external:!0};if(!a)return null;let N=a.startsWith(`file://`)?fileURLToPath(a):a;try{let a=S.resolveRequest(n,N);return a===null?null:{id:a}}catch(a){if(!isUndeclaredDependency(a))throw a;try{let a=S.resolveRequest(n,C);if(a!==null)return{id:a}}catch(n){if(!isUndeclaredDependency(n))throw n}for(let a of I)try{let C=S.resolveRequest(n,a);if(C!==null)return{id:C}}catch(n){if(!isUndeclaredDependency(n))throw n}return null}}},async load(n){if(!n.includes(`/.yarn/`)&&!n.includes(`.zip/`))return null;try{return{code:await readFile$1(n,`utf8`)}}catch(a){let S=a instanceof Error?a.message:String(a);this.error(`gjsify-pnp: failed to read ${n}: ${S}`)}}}}function isUndeclaredDependency(n){return typeof n==`object`&&!!n&&`pnpCode`in n&&n.pnpCode===`UNDECLARED_DEPENDENCY`}Ve();let MT=!1;function normalizeBundlerOptions(n){let a=n.bundler??{};if(!n.esbuild)return a;MT||(MT=!0,Be.warn(`[gjsify] DEPRECATION: the 'esbuild' config key is deprecated and will be removed in 0.5.0. Rename it to 'bundler' (typed as RolldownOptions). See the migration notes in the gjsify CHANGELOG.`));let S=legacyEsbuildToRolldown(n.esbuild),C={...S,...a};return(S.output||a.output)&&(C.output={...S.output??{},...a.output??{}}),(S.transform||a.transform)&&(C.transform={...S.transform??{},...a.transform??{}},(S.transform?.define||a.transform?.define)&&(C.transform.define={...S.transform?.define??{},...a.transform?.define??{}})),(S.resolve||a.resolve)&&(C.resolve={...S.resolve??{},...a.resolve??{}}),C}function legacyEsbuildToRolldown(n){let a={},S={},C={},N={};return n.outfile!==void 0&&(S.file=n.outfile),n.outdir!==void 0&&(S.dir=n.outdir),n.format!==void 0&&(S.format=n.format),n.minify!==void 0&&(S.minify=n.minify),n.sourcemap!==void 0&&(S.sourcemap=n.sourcemap===`inline`?`inline`:!!n.sourcemap),n.banner?.js!==void 0&&(S.banner=n.banner.js),n.target!==void 0&&(C.target=Array.isArray(n.target)?n.target.join(`,`):n.target),n.define!==void 0&&(C.define=n.define),n.mainFields!==void 0&&(N.mainFields=n.mainFields),n.conditions!==void 0&&(N.conditionNames=n.conditions),n.external!==void 0&&(a.external=n.external),n.platform!==void 0&&(a.platform=n.platform),Object.keys(S).length>0&&(a.output=S),Object.keys(C).length>0&&(a.transform=C),Object.keys(N).length>0&&(a.resolve=N),a}function mergeBundlerOptions(n,a){let{input:S,external:C,...N}=a,F={...n,...N};return(n.output||a.output)&&(F.output={...n.output??{},...a.output??{}}),(n.transform||a.transform)&&(F.transform={...n.transform??{},...a.transform??{}},(n.transform?.define||a.transform?.define)&&(F.transform.define={...n.transform?.define??{},...a.transform?.define??{}})),(n.resolve||a.resolve)&&(F.resolve={...n.resolve??{},...a.resolve??{}}),F}Ve(),Jo(),_s();function isUnsafeDefaultOutput(n){if(/\.[cm]?tsx?$/i.test(n))return!0;let a=n.replace(/\\/g,`/`);return!!/(?:^|\/)src\//.test(a)}async function buildPnpPlugin(){return pnpPlugin({issuerUrl:import.meta.url})}var BuildAction=class{configData;constructor(n={}){this.configData=n}async buildLibrary(){let{verbose:n,library:a,typescript:S,exclude:C,aliases:N}=this.configData,F=a??{},I=normalizeBundlerOptions(this.configData),H=F.module?Bo(F.module):void 0,W=F.main?Bo(F.main):void 0,K=F.module?Ho(F.module):`.js`,q=F.main?Ho(F.main):`.js`,Y=H&&W&&H!==W,X=await buildPnpPlugin(),te=X?[X]:[],ne=[];if(Y){let a=H.includes(`/cjs`)||K===`.cjs`?`cjs`:`esm`;ne.push(await runOneLibraryBuild({pluginOpts:{debug:n,library:a,exclude:C,reflection:S?.reflection,jsExtension:K},userBundler:I,output:{dir:H},userAliases:N,pnpPlugins:te}));let F=W.includes(`/cjs`)||q===`.cjs`?`cjs`:`esm`;ne.push(await runOneLibraryBuild({pluginOpts:{debug:n,library:F,exclude:C,reflection:S?.reflection,jsExtension:q},userBundler:I,output:{dir:W},userAliases:N,pnpPlugins:te}))}else{let a=I.output?.file??F.module??F.main,H=a?Ho(a):`.js`,W=I.output?.dir??(a?Bo(a):void 0),K=I.output?.format??(W?.includes(`/cjs`)||H===`.cjs`?`cjs`:`esm`);ne.push(await runOneLibraryBuild({pluginOpts:{debug:n,library:K,exclude:C,reflection:S?.reflection,jsExtension:H},userBundler:I,output:{dir:W},userAliases:N,pnpPlugins:te}))}return ne}parseGlobalsValue(n){if(n===void 0)return{autoMode:!0,extras:``};if(n===`none`||n===``)return{autoMode:!1,extras:``};let a=n.split(`,`).map(n=>n.trim()).filter(Boolean);return{autoMode:a.includes(`auto`),extras:a.filter(n=>n!==`auto`).join(`,`)}}async resolveGlobalsInject(n,a,S){if(n!==`gjs`||!a)return;let C=resolveGlobalsList(a);if(C.size===0)return;let N=await writeRegisterInjectFile(C,process.cwd());return S&&N&&Be.debug(`[gjsify] globals: injected ${C.size} register module(s) from --globals ${a}`),N??void 0}async applyShebang(n,a){if(!n){a&&Be.warn(`[gjsify] --shebang skipped: no single outfile (use --outfile for GJS executables)`);return}let S=resolveShebangLine(this.configData.shebang)??`#!/usr/bin/env -S gjs -m`,C=await readFile$1(n,`utf-8`);C.startsWith(`#!`)?a&&Be.debug(`[gjsify] --shebang skipped: ${n} already starts with a shebang`):await writeFile$1(n,S+`
742
- `+C),await chmod$1(n,493),a&&Be.debug(`[gjsify] --shebang: wrote ${S} + chmod 0o755 to ${n}`)}async buildApp(n=`gjs`,a={}){let{verbose:S,typescript:C,exclude:N,library:F,aliases:I,excludeGlobals:H}=this.configData,W=normalizeBundlerOptions(this.configData),K=W.output?.format??(W.output?.file?.endsWith(`.cjs`)?`cjs`:`esm`),q=K===`iife`?`esm`:K,Y=W.output?.file,X=W.output?.dir;if(!Y&&!X&&(F?.main||F?.module)){let n=q===`cjs`?F.main??F.module:F.module??F.main;if(n&&isUnsafeDefaultOutput(n))throw Error(`gjsify build: refusing to default --outfile to ${n} (would overwrite a TypeScript source file). Pass --outfile/--outdir explicitly, or set "gjsify.bundler.output.file" in package.json.`);Y=n}let{consoleShim:te,globals:ne}=this.configData,re=Array.isArray(W.external)?W.external:void 0,ie=typeof W.output?.banner==`string`?W.output.banner:void 0,ae={debug:S,app:n,format:q,exclude:N,reflection:C?.reflection,consoleShim:te,...I?{aliases:I}:{}},{autoMode:oe,extras:Z}=this.parseGlobalsValue(ne),se=await buildPnpPlugin(),ce=se?[se]:[],le=textLoaderPlugin({loaders:this.configData.loaders}),ue=le?[le]:[];if(W.plugins?.length){let n=await resolveUserPlugins(W.plugins,process.cwd());ue.push(...n)}if(n===`gjs`&&oe){let gjsifyPluginFactory=async n=>(await gjsifyPlugin({input:W.input,output:{file:Y,dir:X},userExternal:re,userBanner:ie,userAliases:I,shebang:this.configData.shebang},n)).plugins,{injectPath:n}=await detectAutoGlobals({input:W.input,plugins:[...ce,...ue],external:W.external,transform:W.transform,format:q},ae,gjsifyPluginFactory,S,{extraGlobalsList:Z,excludeGlobals:H},bundleToChunks);ae.autoGlobalsInject=n}else Z&&(ae.autoGlobalsInject=await this.resolveGlobalsInject(n,Z,S));let de=await gjsifyPlugin({input:W.input,output:{file:Y,dir:X},userExternal:re,userBanner:ie,userAliases:I,shebang:this.configData.shebang},ae),fe={...mergeBundlerOptions(de.options,W),plugins:[...ce,...ue,...de.plugins]};if(a.watch)return await this.runWatchLoop(fe,n,Y,S),[];let pe=await runBundle(fe);return n===`gjs`&&this.configData.shebang&&await this.applyShebang(Y,S),[pe]}async runWatchLoop(n,a,S,C){let N=await runWatch(n),F=new Promise(n=>{N.on(`close`,()=>n())}),I=!1,shutdown=async()=>{if(!I){I=!0,Be.log(`
741
+ `),I=new Set;return{input:N,plugin:{name:`gjsify-virtual-entry`,async resolveId(n,a){return n.startsWith(C)?n:I.has(n)?{id:n,moduleSideEffects:`no-treeshake`}:null},async load(n){if(!n.startsWith(C))return null;let a=S.get(n);if(!a)return null;let N=(await this.resolve(a,void 0,{skipSelf:!0}))?.id??a;return I.add(N),{code:`${F}\nimport ${JSON.stringify(N)};\nexport * from ${JSON.stringify(N)};\n`,moduleSideEffects:`no-treeshake`}}}}}function flattenAliases$3(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$3,`flattenAliases`);const setupForNode=async n=>{let a=n.userExternal??[],S=[...Ih,`node-datachannel`,...a],external=n=>!!(n.startsWith(`gi://`)||n.startsWith(`@girs/`)||S.includes(n)),C=n.pluginOptions.format??`esm`,N=n.pluginOptions.exclude??[],F=await globToEntryPoints(n.input,N),I={...getAliasesForNode({external}),...n.pluginOptions.aliases??{},...n.userAliases??{}},H=getBundleDirFromOutput(n.output);return{options:{input:F,platform:`node`,external,resolve:{mainFields:C===`esm`?[`module`,`main`,`browser`]:[`main`,`module`,`browser`],conditionNames:C===`esm`?[`require`,`node`,`module`]:[`require`]},transform:{target:`node24`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:C,sourcemap:!1,banner:void 0,codeSplitting:!1},treeshake:!0},plugins:[aliasPlugin({entries:flattenAliases$2(I)}),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin(),nodeModulesPathRewritePlugin({bundleDir:H})]}};function flattenAliases$2(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$2,`flattenAliases`);const AT=`\0gjsify-empty-gjs-import`;function gjsImportsEmptyPlugin(){return{name:`gjsify-gjs-imports-empty`,resolveId:{order:`pre`,filter:{id:/^(@girs\/|gi:\/\/)/},handler(n){return{id:AT}}},load(n){return n===AT?{code:`export {}; export default {};`,moduleSideEffects:!1}:null}}}const setupForBrowser=async n=>{let a=[...n.userExternal??[]],S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N={process:`@gjsify/empty`,"node:process":`@gjsify/empty`,assert:`@gjsify/assert`,"node:assert":`@gjsify/assert`,...n.pluginOptions.aliases??{},...n.userAliases??{}};return{options:{input:C,platform:`browser`,external:a,resolve:{mainFields:[`browser`,`module`,`main`],conditionNames:[`import`,`browser`]},transform:{target:`esnext`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:`esm`,sourcemap:!1,codeSplitting:!1},treeshake:!0},plugins:[gjsImportsEmptyPlugin(),aliasPlugin({entries:flattenAliases$1(N)}),blueprintPlugin(),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin()]}};function flattenAliases$1(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$1,`flattenAliases`);const setupLib=async n=>{let a=n.pluginOptions.format??n.pluginOptions.library??`esm`,S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N=computeCommonRoot(C),F={...n.pluginOptions.aliases??{},...n.userAliases??{}},external=n=>!(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`));return{options:{input:C,platform:`neutral`,external,resolve:{mainFields:a===`esm`?[`module`,`main`]:[`main`],conditionNames:a===`esm`?[`module`,`import`]:[`require`]},transform:{target:`esnext`},output:{...n.output,format:a,preserveModules:!0,preserveModulesRoot:N,sourcemap:!1},treeshake:!1},plugins:[aliasPlugin({entries:flattenAliases(F)}),cssAsStringPlugin()]}};function computeCommonRoot(n){let a=n===void 0?[]:typeof n==`string`?[n]:Array.isArray(n)?n:Object.values(n);if(a.length===0)return`src`;let S=a.map(n=>n.split(`/`).filter(Boolean)),C=S[0],N=0;for(;N<C.length;N++){let n=C[N];if(!S.every(a=>a[N]===n))break}if(N===0)return`src`;let F=C.slice(0,N);return S.some(n=>n.length>N)?F.join(`/`):F.slice(0,-1).join(`/`)||`src`}function flattenAliases(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}_s();function textLoaderPlugin(n={}){let a=Object.entries(n.loaders??{}).filter(([,n])=>n===`text`).map(([n])=>n);if(a.length===0)return null;let S=a.map(n=>n.replace(/^\./,``).replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)),C=RegExp(`\\.(?:${S.join(`|`)})$`);return{name:`gjsify-text-loader`,async load(n){if(!C.test(n))return null;let a=await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(a)};`,moduleType:`js`}}}}const gjsifyPlugin=async(n,a={})=>{if(a.library)switch(a.library){case`esm`:case`cjs`:return await setupLib({input:n.input,output:n.output,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown library type: `+a.library)}let S=a.app??`gjs`;switch(S){case`gjs`:return await setupForGjs({input:n.input,output:n.output,userExternal:n.userExternal,userBanner:n.userBanner,userAliases:n.userAliases,shebang:n.shebang,pluginOptions:a});case`node`:return await setupForNode({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});case`browser`:return await setupForBrowser({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown app platform: `+S)}};Oc(),Jo(),nn();function isPluginByName(n){return typeof n==`object`&&!!n&&typeof n.name==`string`&&!(`apply`in n)&&!(`resolveId`in n)&&!(`load`in n)&&!(`transform`in n)&&!(`renderChunk`in n)&&!(`generateBundle`in n)}async function resolveUserPlugins(n,a){let S=createRequire(Lo(a,`package.json`)),C=[];for(let N of n){if(!isPluginByName(N)){C.push(N);continue}let n;try{n=S.resolve(N.name)}catch(n){throw Error(`gjsify config: failed to resolve plugin "${N.name}" from ${a}. Add it to your project's dependencies, or pass a Plugin object directly. (${n.message})`)}let F=await import(pathToFileURL(n).href),I=N.export??`default`,H=F[I];if(typeof H!=`function`){let n=Object.keys(F).filter(n=>typeof F[n]==`function`);throw Error(`gjsify config: plugin "${N.name}" has no function export "${I}". Available function exports: ${n.length?n.join(`, `):`(none)`}.`)}let W=await H(N.options);if(W==null)throw Error(`gjsify config: plugin "${N.name}" factory returned ${W}. Check the plugin's signature — it should return a Rolldown/Vite plugin object.`);C.push(W)}return C}Ve();const defaultBundler=async({rolldownInput:n,format:a})=>{let S=await(await import(`rolldown`)).rolldown(n);try{let n=await S.generate({format:a,minify:!1,sourcemap:!1}),C=[];for(let a of n.output)a.type===`chunk`&&C.push(a.code);return C}finally{await S.close()}},jT=ay;function setsEqual(n,a){if(n.size!==a.size)return!1;for(let S of n)if(!a.has(S))return!1;return!0}async function applyExcludeGlobals(n,a,S,C){if(!C?.length)return{detected:n,injectPath:a};for(let a of C)n.delete(a);let N=detectedToRegisterPaths(n);for(let n of S)N.add(n);return{detected:n,injectPath:N.size>0?await writeRegisterInjectFile(N)??void 0:void 0}}function detectedToRegisterPaths(n){let a=new Set;for(let S of n){let n=jT[S];n&&a.add(n)}return a}function isFullConfig(n){return typeof n==`object`&&!!n&&!Array.isArray(n)&&`plugins`in n&&`options`in n}async function detectAutoGlobals(n,a,S,C,N={},F=defaultBundler){let I=N.extraGlobalsList?resolveGlobalsList(N.extraGlobalsList):new Set,H=new Set(N.excludeGlobals??[]),W=new Set,K;I.size>0&&(K=await writeRegisterInjectFile(I)??void 0);let q=(n.plugins??[]).filter(n=>{let a=n&&typeof n==`object`&&`name`in n?n.name:void 0;return a!==`gjsify`&&a!==`gjsify-orchestrator`});for(let Y=1;Y<=5;Y++){let X=await S({...a,autoGlobalsInject:K}),te,ne;isFullConfig(X)?(ne=X.options,te=X.plugins):te=X;let re=K?appendInjectAsEntry(n.input,K):n.input,ie=n.resolve??ne?.resolve,ae=n.external??ne?.external,oe=n.transform??ne?.transform,Z=ne?.treeshake,se=Array.isArray(te)?te:[te],ce=await F({rolldownInput:{input:re,external:ae,resolve:ie,transform:oe,plugins:[...q,...se],logLevel:`silent`,...Z===void 0?{}:{treeshake:Z}},format:n.format??`esm`});if(ce.length===0)return{detected:new Set,injectPath:K};let le=new Set;for(let n=0;n<ce.length;n++){let a=ce[n]??``;try{for(let n of detectFreeGlobals(a))le.add(n)}catch(S){if(globalThis.process?.env?.GJSIFY_DEBUG_AUTO_GLOBALS){let S=`/tmp/gjsify-auto-globals-failed-chunk-${n}.mjs`;try{(await Promise.resolve().then(()=>(zs(),Is))).writeFileSync(S,a),Be.error(`[gjsify-auto-globals] parse failed on chunk #${n} — wrote ${S} for inspection`)}catch{}}throw S}}if(H.size>0)for(let n of H)le.delete(n);if(setsEqual(W,le)){if(C){let n=[...W].sort(),a=I.size>0?` (+ ${I.size} extra register module(s))`:``;Be.debug(`[gjsify] --globals auto: converged after ${Y-1} iteration(s), ${W.size} global(s)${n.length?`: `+n.join(`, `):``}${a}`)}return applyExcludeGlobals(W,K,I,N.excludeGlobals)}W=le;let ue=detectedToRegisterPaths(W);for(let n of I)ue.add(n);if(ue.size===0)return{detected:W,injectPath:void 0};if(K=await writeRegisterInjectFile(ue)??void 0,C){let n=[...W].sort();Be.debug(`[gjsify] --globals auto: iteration ${Y}, ${W.size} global(s)${n.length?`: `+n.join(`, `):``}`)}}return C&&Be.debug(`[gjsify] --globals auto: hit max iterations (5), using last detected set`),applyExcludeGlobals(W,K,I,N.excludeGlobals)}function appendInjectAsEntry(n,a){return n===void 0?[a]:typeof n==`string`?[n,a]:Array.isArray(n)?[...n,a]:{...n,__gjsify_inject:a}}Oc(),nn(),Jo(),zs(),_s();function findPnpRoot(n){let a=n;for(;;){if(existsSync(Lo(a,`.pnp.cjs`)))return a;let n=Bo(a);if(n===a)return null;a=n}}async function loadPnpApi(){try{let n=await import(`pnpapi`);return n.default??n}catch{return null}}async function pnpPlugin(n={}){let a=n.issuerUrl??import.meta.url;if(!findPnpRoot(process.cwd()))return null;let S=await loadPnpApi();if(S===null)return null;let C=fileURLToPath(a),N=createRequire(C),F=n.relayPackages??[`@gjsify/node-polyfills`,`@gjsify/web-polyfills`],I=[];for(let n of F)try{I.push(N.resolve(`${n}/package.json`))}catch{}return{name:`gjsify-pnp`,resolveId:{order:`pre`,async handler(n,a){if(n.startsWith(`.`)||n.startsWith(`/`))return null;if(n.startsWith(`gi://`))return{id:n,external:!0};if(!a)return null;let N=a.startsWith(`file://`)?fileURLToPath(a):a;try{let a=S.resolveRequest(n,N);return a===null?null:{id:a}}catch(a){if(!isUndeclaredDependency(a))throw a;try{let a=S.resolveRequest(n,C);if(a!==null)return{id:a}}catch(n){if(!isUndeclaredDependency(n))throw n}for(let a of I)try{let C=S.resolveRequest(n,a);if(C!==null)return{id:C}}catch(n){if(!isUndeclaredDependency(n))throw n}return null}}},async load(n){if(!n.includes(`/.yarn/`)&&!n.includes(`.zip/`))return null;try{return{code:await readFile$1(n,`utf8`)}}catch(a){let S=a instanceof Error?a.message:String(a);this.error(`gjsify-pnp: failed to read ${n}: ${S}`)}}}}function isUndeclaredDependency(n){return typeof n==`object`&&!!n&&`pnpCode`in n&&n.pnpCode===`UNDECLARED_DEPENDENCY`}Ve();let MT=!1;function normalizeBundlerOptions(n){let a=n.bundler??{};if(!n.esbuild)return a;MT||(MT=!0,Be.warn(`[gjsify] DEPRECATION: the 'esbuild' config key is deprecated and will be removed in 0.5.0. Rename it to 'bundler' (typed as RolldownOptions). See the migration notes in the gjsify CHANGELOG.`));let S=legacyEsbuildToRolldown(n.esbuild),C={...S,...a};return(S.output||a.output)&&(C.output={...S.output??{},...a.output??{}}),(S.transform||a.transform)&&(C.transform={...S.transform??{},...a.transform??{}},(S.transform?.define||a.transform?.define)&&(C.transform.define={...S.transform?.define??{},...a.transform?.define??{}})),(S.resolve||a.resolve)&&(C.resolve={...S.resolve??{},...a.resolve??{}}),C}function legacyEsbuildToRolldown(n){let a={},S={},C={},N={};return n.outfile!==void 0&&(S.file=n.outfile),n.outdir!==void 0&&(S.dir=n.outdir),n.format!==void 0&&(S.format=n.format),n.minify!==void 0&&(S.minify=n.minify),n.sourcemap!==void 0&&(S.sourcemap=n.sourcemap===`inline`?`inline`:!!n.sourcemap),n.banner?.js!==void 0&&(S.banner=n.banner.js),n.target!==void 0&&(C.target=Array.isArray(n.target)?n.target.join(`,`):n.target),n.define!==void 0&&(C.define=n.define),n.mainFields!==void 0&&(N.mainFields=n.mainFields),n.conditions!==void 0&&(N.conditionNames=n.conditions),n.external!==void 0&&(a.external=n.external),n.platform!==void 0&&(a.platform=n.platform),Object.keys(S).length>0&&(a.output=S),Object.keys(C).length>0&&(a.transform=C),Object.keys(N).length>0&&(a.resolve=N),a}function mergeBundlerOptions(n,a){let{input:S,external:C,...N}=a,F={...n,...N};return(n.output||a.output)&&(F.output={...n.output??{},...a.output??{}}),(n.transform||a.transform)&&(F.transform={...n.transform??{},...a.transform??{}},(n.transform?.define||a.transform?.define)&&(F.transform.define={...n.transform?.define??{},...a.transform?.define??{}})),(n.resolve||a.resolve)&&(F.resolve={...n.resolve??{},...a.resolve??{}}),F}Ve(),Jo(),_s();function isUnsafeDefaultOutput(n){if(/\.[cm]?tsx?$/i.test(n))return!0;let a=n.replace(/\\/g,`/`);return!!/(?:^|\/)src\//.test(a)}async function buildPnpPlugin(){return pnpPlugin({issuerUrl:import.meta.url})}var BuildAction=class{configData;constructor(n={}){this.configData=n}async buildLibrary(){let{verbose:n,library:a,typescript:S,exclude:C,aliases:N}=this.configData,F=a??{},I=normalizeBundlerOptions(this.configData),H=F.module?Bo(F.module):void 0,W=F.main?Bo(F.main):void 0,K=F.module?Ho(F.module):`.js`,q=F.main?Ho(F.main):`.js`,Y=H&&W&&H!==W,X=await buildPnpPlugin(),te=X?[X]:[],ne=[];if(Y){let a=H.includes(`/cjs`)||K===`.cjs`?`cjs`:`esm`;ne.push(await runOneLibraryBuild({pluginOpts:{debug:n,library:a,exclude:C,reflection:S?.reflection,jsExtension:K},userBundler:I,output:{dir:H},userAliases:N,pnpPlugins:te}));let F=W.includes(`/cjs`)||q===`.cjs`?`cjs`:`esm`;ne.push(await runOneLibraryBuild({pluginOpts:{debug:n,library:F,exclude:C,reflection:S?.reflection,jsExtension:q},userBundler:I,output:{dir:W},userAliases:N,pnpPlugins:te}))}else{let a=I.output?.file??F.module??F.main,H=a?Ho(a):`.js`,W=I.output?.dir??(a?Bo(a):void 0),K=I.output?.format??(W?.includes(`/cjs`)||H===`.cjs`?`cjs`:`esm`);ne.push(await runOneLibraryBuild({pluginOpts:{debug:n,library:K,exclude:C,reflection:S?.reflection,jsExtension:H},userBundler:I,output:{dir:W},userAliases:N,pnpPlugins:te}))}return ne}parseGlobalsValue(n){if(n===void 0)return{autoMode:!0,extras:``};if(n===`none`||n===``)return{autoMode:!1,extras:``};let a=n.split(`,`).map(n=>n.trim()).filter(Boolean);return{autoMode:a.includes(`auto`),extras:a.filter(n=>n!==`auto`).join(`,`)}}async resolveGlobalsInject(n,a,S){if(n!==`gjs`||!a)return;let C=resolveGlobalsList(a);if(C.size===0)return;let N=await writeRegisterInjectFile(C,process.cwd());return S&&N&&Be.debug(`[gjsify] globals: injected ${C.size} register module(s) from --globals ${a}`),N??void 0}async applyShebang(n,a){if(!n){a&&Be.warn(`[gjsify] --shebang skipped: no single outfile (use --outfile for GJS executables)`);return}let S=resolveShebangLine(this.configData.shebang)??`#!/usr/bin/env -S gjs -m`,C=await readFile$1(n,`utf-8`);C.startsWith(`#!`)?a&&Be.debug(`[gjsify] --shebang skipped: ${n} already starts with a shebang`):await writeFile$1(n,S+`
742
+ `+C),await chmod$1(n,493),a&&Be.debug(`[gjsify] --shebang: wrote ${S} + chmod 0o755 to ${n}`)}async buildApp(n=`gjs`,a={}){let{verbose:S,typescript:C,exclude:N,library:F,aliases:I,excludeGlobals:H}=this.configData,W=normalizeBundlerOptions(this.configData),K=W.output?.format??(W.output?.file?.endsWith(`.cjs`)?`cjs`:`esm`),q=K===`iife`?`esm`:K,Y=W.output?.file,X=W.output?.dir;if(!Y&&!X&&(F?.main||F?.module)){let n=q===`cjs`?F.main??F.module:F.module??F.main;if(n&&isUnsafeDefaultOutput(n))throw Error(`gjsify build: refusing to default --outfile to ${n} (would overwrite a TypeScript source file). Pass --outfile/--outdir explicitly, or set "gjsify.bundler.output.file" in package.json.`);Y=n}let{consoleShim:te,globals:ne}=this.configData,re=Array.isArray(W.external)?W.external:void 0,ie=typeof W.output?.banner==`string`?W.output.banner:void 0,ae={debug:S,app:n,format:q,exclude:N,reflection:C?.reflection,consoleShim:te,...I?{aliases:I}:{}},{autoMode:oe,extras:Z}=this.parseGlobalsValue(ne),se=await buildPnpPlugin(),ce=se?[se]:[],le=textLoaderPlugin({loaders:this.configData.loaders}),ue=le?[le]:[];if(W.plugins?.length){let n=await resolveUserPlugins(W.plugins,process.cwd());ue.push(...n)}if(n===`gjs`&&oe){let gjsifyPluginFactory=async n=>{let a=await gjsifyPlugin({input:W.input,output:{file:Y,dir:X},userExternal:re,userBanner:ie,userAliases:I,shebang:this.configData.shebang},n);return{options:a.options,plugins:a.plugins}},{injectPath:n}=await detectAutoGlobals({input:W.input,plugins:[...ce,...ue],external:W.external,transform:W.transform,format:q},ae,gjsifyPluginFactory,S,{extraGlobalsList:Z,excludeGlobals:H},bundleToChunks);ae.autoGlobalsInject=n}else Z&&(ae.autoGlobalsInject=await this.resolveGlobalsInject(n,Z,S));let de=await gjsifyPlugin({input:W.input,output:{file:Y,dir:X},userExternal:re,userBanner:ie,userAliases:I,shebang:this.configData.shebang},ae),fe={...mergeBundlerOptions(de.options,W),plugins:[...ce,...ue,...de.plugins]};if(a.watch)return await this.runWatchLoop(fe,n,Y,S),[];let pe=await runBundle(fe);return n===`gjs`&&this.configData.shebang&&await this.applyShebang(Y,S),[pe]}async runWatchLoop(n,a,S,C){let N=await runWatch(n),F=new Promise(n=>{N.on(`close`,()=>n())}),I=!1,shutdown=async()=>{if(!I){I=!0,Be.log(`
743
743
  [gjsify build --watch] stopping watcher…`);try{await N.close()}catch(n){Be.error(`[gjsify build --watch] watcher close error:`,n)}}};process.on(`SIGINT`,shutdown),process.on(`SIGTERM`,shutdown),N.on(`event`,async n=>{switch(n.code){case`START`:C&&Be.log(`[gjsify build --watch] rebuild start`);break;case`BUNDLE_START`:Be.log(`[gjsify build --watch] building…`);break;case`BUNDLE_END`:Be.log(`[gjsify build --watch] built in ${n.duration}ms`);try{a===`gjs`&&this.configData.shebang&&await this.applyShebang(S,C)}finally{await n.result.close()}break;case`END`:Be.log(`[gjsify build --watch] waiting for changes…`);break;case`ERROR`:Be.error(`[gjsify build --watch] build failed:`,n.error?.message??n.error),C&&n.error?.stack&&Be.error(n.error.stack);try{await n.result.close()}catch{}break}}),C&&N.on(`change`,(n,a)=>{Be.log(`[gjsify build --watch] ${a.event}: ${n}`)}),await F}async start(n={app:`gjs`}){if(n.library){if(n.watch)throw Error(`gjsify build: --watch is not supported with --library (library mode would emit watcher rebuilds for every produced format; use --app gjs|node|browser instead).`);return await this.buildLibrary()}return await this.buildApp(n.app,{watch:n.watch})}};async function runOneLibraryBuild(n){let a=await gjsifyPlugin({input:n.userBundler.input,output:n.output,userAliases:n.userAliases},n.pluginOpts);return await runBundle({...mergeBundlerOptions(a.options,n.userBundler),plugins:[...n.pnpPlugins,...a.plugins]})}const NT={command:`build [entryPoints..]`,description:`Build and bundle your Gjs project`,builder:n=>n.option(`entry-points`,{description:`The entry points you want to bundle. Defaults to bundler.input from package.json#gjsify or .gjsifyrc.js, falling back to src/index.ts when neither is set.`,array:!0,type:`string`,normalize:!0,defaultDescription:`src/index.ts (fallback)`,coerce:n=>[...new Set(n)]}).option(`exclude`,{description:`An array of glob patterns to exclude entry-points and aliases`,array:!0,type:`string`,normalize:!0,default:[]}).option(`verbose`,{description:`Switch on the verbose mode`,type:`boolean`,normalize:!0,default:!1}).option(`app`,{description:`Use this if you want to build an application, the platform node is usually only used for tests`,type:`string`,choices:[`gjs`,`node`,`browser`],normalize:!0,default:`gjs`}).option(`format`,{description:`Override the default output format`,type:`string`,choices:[`iife`,`esm`,`cjs`],normalize:!0}).option(`minify`,{description:`Minify the bundled output. Defaults to true; use --no-minify to emit pretty-printed code (e.g. for debugging or readable bundle review).`,type:`boolean`,normalize:!0,defaultDescription:`true`}).option(`library`,{description:`Use this if you want to build a library for Gjsify`,type:`boolean`,normalize:!0,default:!1}).option(`outfile`,{alias:`o`,description:`Sets the output file name for the build operation. If no outfile is specified, the outfile will be parsed from the package.json. Only used if application mode is active`,type:`string`,normalize:!0}).option(`outdir`,{alias:`d`,description:`Sets the output directory for the build operation. If no outdir is specified, the outdir will be parsed from the package.json. Only used if library mode is active`,type:`string`,normalize:!0}).option(`reflection`,{alias:`r`,description:`Enables TypeScript types on runtime using Deepkit's type compiler`,type:`boolean`,normalize:!0,default:!1}).option(`log-level`,{description:`The log level can be changed to prevent esbuild from printing warning and/or error messages to the terminal`,type:`string`,choices:[`silent`,`error`,`warning`,`info`,`debug`,`verbose`],normalize:!0,default:`warning`}).option(`console-shim`,{description:`Inject a console shim into GJS builds for clean output without the GLib prefix and with working ANSI colors. Use --no-console-shim to disable. Only applies to GJS app builds.`,type:`boolean`,normalize:!0,default:!0}).option(`globals`,{description:"Comma-separated list of global identifiers, 'auto' (default) to detect automatically from the bundled output, or 'none' to disable. The 'auto' token may be combined with explicit identifiers/groups (e.g. 'auto,dom') for cases where the detector cannot statically see a global because it's accessed via indirection. Each identifier is mapped to the corresponding `@gjsify/<pkg>/register` module and injected into the bundle. See the CLI Reference docs for the full list of known identifiers. Only applies to GJS app builds.",type:`string`,normalize:!0,default:`auto`}).option(`shebang`,{description:"Prepend a `#!/usr/bin/env -S gjs -m` shebang to the output and mark it executable (chmod 755). Only applies to GJS app builds with a single --outfile. Default: false (use --shebang to enable, or set `shebang: true` in `.gjsifyrc.js`).",type:`boolean`,normalize:!0}).option(`external`,{description:`Module names that should NOT be bundled. Repeat the flag or pass a comma-separated list (e.g. --external typedoc,prettier). Globs are forwarded to esbuild as-is. See https://esbuild.github.io/api/#external`,array:!0,type:`string`,default:[],coerce:n=>n.flatMap(n=>n.split(`,`).map(n=>n.trim()).filter(Boolean))}).option(`define`,{description:`Substitute compile-time constants. Each entry is KEY=VALUE where VALUE is a JS expression (string literals must be quoted: --define VERSION='"1.2.3"'). Repeat the flag or pass comma-separated. See https://esbuild.github.io/api/#define`,array:!0,type:`string`,default:[]}).option(`alias`,{description:`Map module specifiers at bundle time. Each entry is FROM=TO (e.g. --alias typedoc=@gjsify/empty). Layered on top of the built-in alias map. Useful for stubbing heavy deps the test scenario never executes.`,array:!0,type:`string`,default:[],coerce:n=>n.flatMap(n=>n.split(`,`).map(n=>n.trim()).filter(Boolean))}).option(`exclude-globals`,{description:`Comma-separated global identifiers to remove from auto-detection results. Use for false positives from dead browser-compat code whose polyfills require unavailable native libraries (e.g. --exclude-globals fetch,XMLHttpRequest).`,type:`string`,normalize:!0}).option(`watch`,{alias:`w`,description:"Watch source files and rebuild on change. Logs each rebuild with duration; clean SIGINT shutdown. Only valid with --app gjs|node|browser (rejected with --library). Requires the npm `rolldown` engine — run under Node, not the GJS-bundled CLI.",type:`boolean`,normalize:!0,default:!1}),handler:async n=>{await new BuildAction(await new Config().forBuild(n)).start({library:n.library,app:n.app,watch:n.watch})}};zs(),Jo();function nodeArchToLinuxArch(n){return{x64:`x86_64`,arm64:`aarch64`,arm:`armv7`,ia32:`i686`}[n]??n}function readPackageJson$3(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$3,`readPackageJson`);function scanNodeModules(n,a){let S=[];if(!existsSync(n))return S;let C;try{C=readdirSync(n)}catch{return S}for(let N of C)if(!N.startsWith(`.`))if(N.startsWith(`@`)){let C=Lo(n,N),F;try{F=readdirSync(C)}catch{continue}for(let n of F){let F=checkPackage(Lo(C,n),`${N}/${n}`,a);F&&S.push(F)}}else{let C=checkPackage(Lo(n,N),N,a);C&&S.push(C)}return S}function checkPackage(n,a,S){let C=readPackageJson$3(Lo(n,`package.json`));if(!C)return null;let N=C.gjsify;if(!N||typeof N!=`object`)return null;let F=N.prebuilds;if(typeof F!=`string`)return null;let I=Lo(n,F,`linux-${S}`);return existsSync(I)?{name:a,prebuildsDir:I}:null}function detectNativePackages(n){let a=nodeArchToLinuxArch(process.arch),S=[],C=new Set,N=Po(n);for(;;){let n=Lo(N,`node_modules`);if(existsSync(n))for(let N of scanNodeModules(n,a))C.has(N.name)||(C.add(N.name),S.push(N));let F=Po(N,`..`);if(F===N)break;N=F}return S}function buildNativeEnv(n){let a=n.map(n=>n.prebuildsDir),S=process.env.LD_LIBRARY_PATH??``,C=process.env.GI_TYPELIB_PATH??``;return{LD_LIBRARY_PATH:[...a,...S?[S]:[]].join(`:`),GI_TYPELIB_PATH:[...a,...C?[C]:[]].join(`:`)}}Ve(),vx(),Jo();function computeNativeEnvForBundle(n,a=process.cwd()){let S=Po(n),C=detectNativePackages(a),N=detectNativePackages(Bo(S)),F=new Set(C.map(n=>n.name)),I=buildNativeEnv([...C,...N.filter(n=>!F.has(n.name))]);return{env:I,envPrefix:Object.entries(I).filter(([,n])=>n!==void 0&&n!==``).map(([n,a])=>`${n}=${a}`).join(` `)}}async function runGjsBundle(n,a=[]){let{env:S,envPrefix:C}=computeNativeEnvForBundle(n),N={...process.env,...S},F=[`-m`,n,...a],I=[`gjs`,...F.map(n=>n.includes(` `)?`"${n}"`:n)].join(` `);Be.log(`$ ${C?`${C} `:``}${I}`);let H=spawn(`gjs`,F,{env:N,stdio:`inherit`});await new Promise((n,a)=>{H.on(`close`,S=>{S===0?n():a(Error(`gjs exited with code ${S}`))}),H.on(`error`,a)}).catch(n=>{Be.error(n.message),process.exit(1)})}Ve(),zs(),Jo(),vx();const PT={command:`test`,description:"Build + run the package’s `src/test.mts` suite on GJS and Node and aggregate the results. Replaces the per-package `build:test:{gjs,node}` + `test:{gjs,node}` script boilerplate.",builder:n=>n.option(`runtime`,{description:`Target runtime. Default: both.`,type:`string`,choices:[`gjs`,`node`,`all`],default:`all`}).option(`entry`,{description:"Path to the test entry. Default: `src/test.mts` (or `gjsify.test.entry`).",type:`string`,normalize:!0}).option(`outdir`,{description:"Output directory for the built test bundles. Default: `dist/`.",type:`string`,normalize:!0}).option(`rebuild`,{description:`Always rebuild the test bundles, even when they look up-to-date.`,type:`boolean`,default:!1}).option(`build`,{description:`Build before running. Default: true (use --no-build to skip when bundles already exist).`,type:`boolean`,default:!0}).option(`verbose`,{description:`Print resolved entry/outdir + per-step timing.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).test??{},C=Po(a,n.entry??S.entry??`src/test.mts`),N=Po(a,n.outdir??S.outdir??`dist`);existsSync(C)||(Be.error(`[gjsify test] no test entry at ${Ro(a,C)} — add an \`src/test.mts\` that aggregates your \`@gjsify/unit\` suites, or set \`gjsify.test.entry\` in package.json.`),process.exit(1));let F=n.runtime===`gjs`?[`gjs`]:n.runtime===`node`?[`node`]:S.runtimes&&S.runtimes.length>0?S.runtimes:[`gjs`,`node`],I=[];for(let S of F){let F=Lo(N,`test.${S}.mjs`);if(n.build!==!1)if(n.rebuild||!isFresh(F,C,a)){let N=Date.now();n.verbose&&Be.log(`[gjsify test] building → ${Ro(a,F)} (—app ${S})`);try{await buildTestBundle(C,F,S,n.verbose),n.verbose&&Be.log(`[gjsify test] built ${S} in ${Date.now()-N}ms`)}catch(n){Be.error(`[gjsify test] build failed for ${S}:`,n.message),I.push({runtime:S,ok:!1,durationMs:0,error:`build failed`});continue}}else n.verbose&&Be.log(`[gjsify test] ${S}: bundle is up-to-date — skipping build (use --rebuild to force)`);else if(!existsSync(F)){Be.error(`[gjsify test] --no-build but ${Ro(a,F)} doesn't exist. Build first or drop --no-build.`),I.push({runtime:S,ok:!1,durationMs:0,error:`no bundle`});continue}let H=Date.now();try{await runTestBundle(F,S),I.push({runtime:S,ok:!0,durationMs:Date.now()-H})}catch(n){I.push({runtime:S,ok:!1,durationMs:Date.now()-H,error:n.message})}}let H=I.map(n=>`${n.ok?`✅`:`❌`} ${n.runtime} (${n.durationMs}ms)${n.error?` — ${n.error}`:``}`).join(` `);Be.log(`[gjsify test] ${H}`),I.some(n=>!n.ok)&&process.exit(1)}};async function buildTestBundle(n,a,S,C){let N=await new Config().forBuild({entryPoints:[n],outfile:a,app:S,verbose:C??!1,logLevel:`warning`,exclude:[]});N.library={...N.library??{}},N.bundler={...N.bundler??{},input:[n],output:{...N.bundler?.output??{},file:a}},await new BuildAction(N).start({app:S,library:!1})}async function runTestBundle(n,a){if(a===`gjs`){await runGjsBundle(n);return}await new Promise((a,S)=>{let C=spawn(`node`,[n],{stdio:`inherit`});C.on(`error`,S),C.on(`exit`,n=>{n===0?a():S(Error(`node exited with code ${n}`))})})}function isFresh(n,a,S){if(!existsSync(n))return!1;let C=statSync(n).mtimeMs,N=Bo(a);try{return C>=newestMtimeUnder(existsSync(N)?N:a)}catch{return!1}}function newestMtimeUnder(n){let a=statSync(n);if(a.isFile())return a.mtimeMs;let S=a.mtimeMs;for(let a of readdirSync(n,{withFileTypes:!0})){if(a.name===`node_modules`||a.name===`dist`||a.name===`lib`||a.name.startsWith(`.`))continue;let C=newestMtimeUnder(Lo(n,a.name));C>S&&(S=C)}return S}zs();function readPackageJson$2(n){if(!existsSync(n))return null;let a=readFileSync(n,`utf-8`);try{return JSON.parse(a)}catch(a){throw Error(`gjsify install: ${n} is not valid JSON: ${a.message}`)}}__name$1(readPackageJson$2,`readPackageJson`);function writePackageJson$1(n,a){let S=sortKnownDepFields(a);writeFileSync(n,JSON.stringify(S,null,2)+`
744
- `,`utf-8`)}__name$1(writePackageJson$1,`writePackageJson`);function parseSpec$2(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return{name:n};let S=n.indexOf(`@`,a+1);return S===-1?{name:n}:{name:n.slice(0,S),range:n.slice(S+1)}}let a=n.indexOf(`@`);return a===-1?{name:n}:{name:n.slice(0,a),range:n.slice(a+1)}}__name$1(parseSpec$2,`parseSpec`);function projectSpecsFromPackageJson(n){let a=[];for(let S of[`dependencies`,`devDependencies`,`optionalDependencies`]){let C=n[S];if(C)for(let[n,S]of Object.entries(C))typeof S==`string`&&(/^(workspace|link|file|portal|git\+|https?):/.test(S)||a.push(`${n}@${S}`))}return a}function addDependencyEntry(n,a,S,C){n[C]===void 0&&(n[C]={}),n[C][a]=S}function defaultRangeFromVersion(n){return`^${n}`}function sortKnownDepFields(n){let a={...n};for(let n of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let S=a[n];S&&(a[n]=Object.fromEntries(Object.entries(S).sort(([n],[a])=>n<a?-1:+(n>a))))}return a}zs(),Jo();function discoverWorkspaces(n,a={}){let S=Lo(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=[];a.includeRoot&&C.name&&F.push({location:n,relativeLocation:`.`,name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0});for(let a of N)for(let S of expandPattern(n,a)){let a=Lo(S,`package.json`);if(!existsSync(a))continue;let C;try{C=JSON.parse(readFileSync(a,`utf-8`))}catch{continue}C.name&&F.push({location:S,relativeLocation:Ro(n,S).split(Go).join(`/`),name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0})}return F.sort((n,a)=>n.relativeLocation.localeCompare(a.relativeLocation)),F}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 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.length>0&&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=[Po(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=Lo(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=Lo(S,n);try{statSync(N).isDirectory()&&a.push(N)}catch{}}}else{let C=Lo(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}zs(),Jo();function readPackageJson$1(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$1,`readPackageJson`);function findWorkspaceRoot(n){let a=n;for(let S=0;S<12;S++){let S=Lo(a,`package.json`);if(existsSync(S)&&readPackageJson$1(S)?.workspaces!==void 0)try{let S=discoverWorkspaces(a);if(a===n||S.some(a=>a.location===n))return a}catch{}let C=Po(a,`..`);if(C===a)break;a=C}return null}Ve(),zs(),Jo(),vx();const FT={command:`run <target> [args..]`,description:"Run a script from package.json (yarn-run-style) or a GJS bundle file. If <target> resolves to a file on disk (or has a path-like prefix), it is launched via gjs with LD_LIBRARY_PATH + GI_TYPELIB_PATH set for native packages. Otherwise it is looked up in the current package.json `scripts`.",builder:n=>n.positional(`target`,{description:"Either a script name (looked up in package.json `scripts`) or a path to a GJS bundle (e.g. dist/gjs.js).",type:`string`,demandOption:!0}).positional(`args`,{description:`Extra arguments passed through to the script / gjs.`,type:`string`,array:!0,default:[]}),handler:async n=>{let a=n.target,S=n.args??[],C=readPackageJson$2(Lo(process.cwd(),`package.json`));if(!(C?.scripts&&typeof C.scripts[a]==`string`)&&looksLikeFile(a)){await runGjsBundle(Po(a),S);return}await runScript(a,S)}};function looksLikeFile(n){if(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`)||n.includes(`/`)||n.includes(`\\`)||/\.(c?js|mjs|cjs|gjs)$/.test(n))return!0;try{return statSync(n).isFile()}catch{return!1}}async function runScript(n,a){let S=process.cwd(),C=Lo(S,`package.json`),N=readPackageJson$2(C);N||(Be.error(`gjsify run: no package.json in ${S}`),process.exit(1));let F=N.scripts??{},I=F[n];if(typeof I!=`string`){let a=Object.keys(F).join(`, `)||`<none>`;Be.error(`gjsify run: no script "${n}" in ${C} (available: ${a})`),process.exit(1)}let H=findWorkspaceRoot(S),W=[Lo(S,`node_modules`,`.bin`)];H&&H!==S&&W.push(Lo(H,`node_modules`,`.bin`));let K={...process.env,PATH:[...W,process.env.PATH??``].filter(Boolean).join(Ko),npm_lifecycle_event:n,npm_package_name:N.name??``,npm_package_version:N.version??``},q=a.length>0?`${I} ${a.map(shellEscape).join(` `)}`:I;await new Promise((a,C)=>{let N=spawn(q,[],{cwd:S,env:K,stdio:`inherit`,shell:!0});N.on(`close`,S=>{S===0?a():C(Error(`script "${n}" exited with code ${S}`))}),N.on(`error`,C)}).catch(n=>{Be.error(n.message),process.exit(1)}),process.exit(0)}function shellEscape(n){return/^[a-zA-Z0-9_\-./=:@,]+$/.test(n)?n:`'${n.replace(/'/g,`'\\''`)}'`}Ve(),Jo();const IT={command:`info [file]`,description:`Show native gjsify packages detected in node_modules and the env vars needed to run a GJS bundle directly with gjs.`,builder:n=>n.positional(`file`,{description:`Optional: the GJS bundle path to include in the example command (e.g. dist/gjs.js)`,type:`string`,normalize:!0}).option(`export`,{description:`Output only shell export statements suitable for eval (eval $(gjsify info --export))`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.file?Po(n.file):null,C=detectNativePackages(a),{LD_LIBRARY_PATH:N,GI_TYPELIB_PATH:F}=buildNativeEnv(C);if(n.export){Be.log(`export LD_LIBRARY_PATH="${N}"`),Be.log(`export GI_TYPELIB_PATH="${F}"`);return}if(C.length===0){Be.log(`No native gjsify packages detected in node_modules.`),Be.log(`Native packages declare "gjsify": { "prebuilds": "<dir>" } in their package.json.`);return}Be.log(`Native packages detected:`);for(let n of C)Be.log(` ${n.name} → ${n.prebuildsDir}`);Be.log(``),Be.log(`To run your app directly with gjs, set:`),Be.log(` export LD_LIBRARY_PATH="${N}"`),Be.log(` export GI_TYPELIB_PATH="${F}"`),S?Be.log(` gjs -m ${S}`):Be.log(` gjs -m <your-bundle.js>`),Be.log(``),Be.log(`Or use gjsify run to handle this automatically:`),S?Be.log(` gjsify run ${n.file}`):Be.log(` gjsify run <your-bundle.js>`)}};vx(),Jo(),Oc(),nn(),zs();function tryExecFile(n,a){try{return execFileSync(n,a,{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim()}catch{return null}}function checkBinary(n,a,S,C,N,F,I){let H=tryExecFile(S,C);return H===null?{id:n,name:a,found:!1,severity:N,requiredBy:I}:{id:n,name:a,found:!0,version:F?F(H):H.split(`
744
+ `,`utf-8`)}__name$1(writePackageJson$1,`writePackageJson`);function parseSpec$2(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return{name:n};let S=n.indexOf(`@`,a+1);return S===-1?{name:n}:{name:n.slice(0,S),range:n.slice(S+1)}}let a=n.indexOf(`@`);return a===-1?{name:n}:{name:n.slice(0,a),range:n.slice(a+1)}}__name$1(parseSpec$2,`parseSpec`);function projectSpecsFromPackageJson(n){let a=[];for(let S of[`dependencies`,`devDependencies`,`optionalDependencies`]){let C=n[S];if(C)for(let[n,S]of Object.entries(C))typeof S==`string`&&(/^(workspace|link|file|portal|git\+|https?):/.test(S)||a.push(`${n}@${S}`))}return a}function addDependencyEntry(n,a,S,C){n[C]===void 0&&(n[C]={}),n[C][a]=S}function defaultRangeFromVersion(n){return`^${n}`}function sortKnownDepFields(n){let a={...n};for(let n of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let S=a[n];S&&(a[n]=Object.fromEntries(Object.entries(S).sort(([n],[a])=>n<a?-1:+(n>a))))}return a}zs(),Jo();function discoverWorkspaces(n,a={}){let S=Lo(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=[];a.includeRoot&&C.name&&F.push({location:n,relativeLocation:`.`,name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0});for(let a of N)for(let S of expandPattern(n,a)){let a=Lo(S,`package.json`);if(!existsSync(a))continue;let C;try{C=JSON.parse(readFileSync(a,`utf-8`))}catch{continue}C.name&&F.push({location:S,relativeLocation:Ro(n,S).split(Go).join(`/`),name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0})}return F.sort((n,a)=>n.relativeLocation.localeCompare(a.relativeLocation)),F}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 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.length>0&&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=[Po(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=Lo(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=Lo(S,n);try{statSync(N).isDirectory()&&a.push(N)}catch{}}}else{let C=Lo(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}zs(),Jo();function readPackageJson$1(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$1,`readPackageJson`);function findWorkspaceRoot(n){let a=n;for(let S=0;S<12;S++){let S=Lo(a,`package.json`);if(existsSync(S)&&readPackageJson$1(S)?.workspaces!==void 0)try{let S=discoverWorkspaces(a);if(a===n||S.some(a=>a.location===n))return a}catch{}let C=Po(a,`..`);if(C===a)break;a=C}return null}Ve(),zs(),Jo(),vx();const FT={command:`run <target> [args..]`,description:"Run a script from package.json (yarn-run-style) or a GJS bundle file. If <target> resolves to a file on disk (or has a path-like prefix), it is launched via gjs with LD_LIBRARY_PATH + GI_TYPELIB_PATH set for native packages. Otherwise it is looked up in the current package.json `scripts`.",builder:n=>n.positional(`target`,{description:"Either a script name (looked up in package.json `scripts`) or a path to a GJS bundle (e.g. dist/gjs.js).",type:`string`,demandOption:!0}).positional(`args`,{description:`Extra arguments passed through to the script / gjs.`,type:`string`,array:!0,default:[]}),handler:async n=>{let a=n.target,S=n.args??[],C=readPackageJson$2(Lo(process.cwd(),`package.json`));if(!(C?.scripts&&typeof C.scripts[a]==`string`)&&looksLikeFile(a)){await runGjsBundle(Po(a),S);return}await runScript(a,S)}};function looksLikeFile(n){if(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`)||n.includes(`/`)||n.includes(`\\`)||/\.(c?js|mjs|cjs|gjs)$/.test(n))return!0;try{return statSync(n).isFile()}catch{return!1}}async function runScript(n,a){let S=process.cwd(),C=Lo(S,`package.json`),N=readPackageJson$2(C);N||(Be.error(`gjsify run: no package.json in ${S}`),process.exit(1));let F=N.scripts??{},I=F[n];if(typeof I!=`string`){let a=Object.keys(F).join(`, `)||`<none>`;Be.error(`gjsify run: no script "${n}" in ${C} (available: ${a})`),process.exit(1)}let H=findWorkspaceRoot(S),W=[Lo(S,`node_modules`,`.bin`)];H&&H!==S&&W.push(Lo(H,`node_modules`,`.bin`));let K=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`},q={...process.env,...K,PATH:[...W,process.env.PATH??``].filter(Boolean).join(Ko),npm_lifecycle_event:n,npm_package_name:N.name??``,npm_package_version:N.version??``},Y=a.length>0?`${I} ${a.map(shellEscape).join(` `)}`:I;await new Promise((a,C)=>{let N=spawn(Y,[],{cwd:S,env:q,stdio:`inherit`,shell:!0});N.on(`close`,S=>{S===0?a():C(Error(`script "${n}" exited with code ${S}`))}),N.on(`error`,C)}).catch(n=>{Be.error(n.message),process.exit(1)}),process.exit(0)}function shellEscape(n){return/^[a-zA-Z0-9_\-./=:@,]+$/.test(n)?n:`'${n.replace(/'/g,`'\\''`)}'`}Ve(),Jo();const IT={command:`info [file]`,description:`Show native gjsify packages detected in node_modules and the env vars needed to run a GJS bundle directly with gjs.`,builder:n=>n.positional(`file`,{description:`Optional: the GJS bundle path to include in the example command (e.g. dist/gjs.js)`,type:`string`,normalize:!0}).option(`export`,{description:`Output only shell export statements suitable for eval (eval $(gjsify info --export))`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.file?Po(n.file):null,C=detectNativePackages(a),{LD_LIBRARY_PATH:N,GI_TYPELIB_PATH:F}=buildNativeEnv(C);if(n.export){Be.log(`export LD_LIBRARY_PATH="${N}"`),Be.log(`export GI_TYPELIB_PATH="${F}"`);return}if(C.length===0){Be.log(`No native gjsify packages detected in node_modules.`),Be.log(`Native packages declare "gjsify": { "prebuilds": "<dir>" } in their package.json.`);return}Be.log(`Native packages detected:`);for(let n of C)Be.log(` ${n.name} → ${n.prebuildsDir}`);Be.log(``),Be.log(`To run your app directly with gjs, set:`),Be.log(` export LD_LIBRARY_PATH="${N}"`),Be.log(` export GI_TYPELIB_PATH="${F}"`),S?Be.log(` gjs -m ${S}`):Be.log(` gjs -m <your-bundle.js>`),Be.log(``),Be.log(`Or use gjsify run to handle this automatically:`),S?Be.log(` gjsify run ${n.file}`):Be.log(` gjsify run <your-bundle.js>`)}};vx(),Jo(),Oc(),nn(),zs();function tryExecFile(n,a){try{return execFileSync(n,a,{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim()}catch{return null}}function checkBinary(n,a,S,C,N,F,I){let H=tryExecFile(S,C);return H===null?{id:n,name:a,found:!1,severity:N,requiredBy:I}:{id:n,name:a,found:!0,version:F?F(H):H.split(`
745
745
  `)[0]??H,severity:N,requiredBy:I}}function checkPkgConfig(n,a,S,C,N){let F=tryExecFile(`pkg-config`,[`--modversion`,S]);return F===null?{id:n,name:a,found:!1,severity:C,requiredBy:N}:{id:n,name:a,found:!0,version:F.split(`
746
746
  `)[0],severity:C,requiredBy:N}}function checkNpmPackage(n,a,S,C,N,F){try{return createRequire(pathToFileURL(Lo(C,`_check_.js`)).href).resolve(S),{id:n,name:a,found:!0,severity:N,requiredBy:F}}catch{}try{return createRequire(import.meta.url).resolve(S),{id:n,name:a,found:!0,severity:N,requiredBy:F}}catch{return{id:n,name:a,found:!1,severity:N,requiredBy:F}}}function detectPackageManager$2(){for(let n of[`apt`,`dnf`,`pacman`,`zypper`,`apk`])if(tryExecFile(`which`,[n])!==null)return n;return`unknown`}__name$1(detectPackageManager$2,`detectPackageManager`);const LT={manette:{id:`manette`,name:`libmanette`,pkgName:`manette-0.2`},gstreamer:{id:`gstreamer`,name:`GStreamer`,pkgName:`gstreamer-1.0`},"gst-app":{id:`gst-app`,name:`GStreamer App`,pkgName:`gstreamer-app-1.0`},"gdk-pixbuf":{id:`gdk-pixbuf`,name:`GdkPixbuf`,pkgName:`gdk-pixbuf-2.0`},pango:{id:`pango`,name:`Pango`,pkgName:`pango`},pangocairo:{id:`pangocairo`,name:`PangoCairo`,pkgName:`pangocairo`},webkitgtk:{id:`webkitgtk`,name:`WebKitGTK`,pkgName:`webkitgtk-6.0`},cairo:{id:`cairo`,name:`Cairo`,pkgName:`cairo`}},RT={"@gjsify/gamepad":[`manette`],"@gjsify/webaudio":[`gstreamer`,`gst-app`],"@gjsify/iframe":[`webkitgtk`],"@gjsify/canvas2d":[`gdk-pixbuf`,`pango`,`pangocairo`,`cairo`],"@gjsify/canvas2d-core":[`gdk-pixbuf`,`pango`,`pangocairo`,`cairo`],"@gjsify/dom-elements":[`gdk-pixbuf`],"@gjsify/webgl":[`gwebgl`]};function findProjectRoot(n){let a=Po(n);for(;;){if(existsSync(Lo(a,`package.json`)))return a;let n=Po(a,`..`);if(n===a)return null;a=n}}function discoverGjsifyPackages(n){let a=findProjectRoot(n);if(!a)return null;let S=Lo(a,`node_modules`,`@gjsify`);if(!existsSync(S))return new Set;let C=Lo(a,`package.json`),N={};try{N=JSON.parse(readFileSync(C,`utf-8`))}catch{}let F={...N.dependencies,...N.devDependencies},I=new Set;try{for(let n of readdirSync(S,{withFileTypes:!0}))(n.isDirectory()||n.isSymbolicLink())&&I.add(`@gjsify/${n.name}`)}catch{}for(let n of Object.keys(F))n.startsWith(`@gjsify/`)&&I.add(n);return I}function computeNeededOptionalDeps(n){let a=discoverGjsifyPackages(n);if(a===null)return null;let S=new Set;for(let n of a){let a=RT[n];if(a)for(let n of a)S.add(n)}return S}function runAllChecks(n){let a=computeNeededOptionalDeps(n);return[...runMinimalChecks(),...runRequiredChecks(n),...runOptionalChecks(a,n)]}function runMinimalChecks(){let n=[];return n.push({id:`nodejs`,name:`Node.js`,found:!0,version:process.version,severity:`required`}),n.push(checkBinary(`gjs`,`GJS`,`gjs`,[`--version`],`required`,n=>n.replace(/^GJS\s+/i,``).split(`
747
747
  `)[0]??n)),n}function checkGwebgl(n){return checkNpmPackage(`gwebgl`,`gwebgl (@gjsify/webgl)`,`@gjsify/webgl`,n,`optional`,[`@gjsify/webgl`])}function runRequiredChecks(n){let a=[];return a.push(checkBinary(`blueprint-compiler`,`Blueprint Compiler`,`blueprint-compiler`,[`--version`],`required`)),a.push(checkBinary(`pkg-config`,`pkg-config`,`pkg-config`,[`--version`],`required`)),a.push(checkBinary(`meson`,`Meson`,`meson`,[`--version`],`required`)),a.push(checkPkgConfig(`gtk4`,`GTK4`,`gtk4`,`required`)),a.push(checkPkgConfig(`libadwaita`,`libadwaita`,`libadwaita-1`,`required`)),a.push(checkPkgConfig(`libsoup3`,`libsoup3`,`libsoup-3.0`,`required`)),a.push(checkPkgConfig(`gobject-introspection`,`GObject Introspection`,`gobject-introspection-1.0`,`required`)),a}function runOptionalChecks(n,a){let S=[];for(let[a,C]of Object.entries(LT)){if(n!==null&&!n.has(a))continue;let N=Object.entries(RT).filter(([,n])=>n.includes(a)).map(([n])=>n);S.push(checkPkgConfig(C.id,C.name,C.pkgName,`optional`,N))}return(n===null||n.has(`gwebgl`))&&S.push(checkGwebgl(a)),S}const zT={apt:{gjs:`gjs`,"blueprint-compiler":`blueprint-compiler`,"pkg-config":`pkg-config`,meson:`meson`,gtk4:`libgtk-4-dev`,libadwaita:`libadwaita-1-dev`,libsoup3:`libsoup-3.0-dev`,webkitgtk:`libwebkit2gtk-6.0-dev`,"gobject-introspection":`gobject-introspection libgirepository1.0-dev`,manette:`libmanette-0.2-0 gir1.2-manette-0.2`,gstreamer:`libgstreamer1.0-dev`,"gst-app":`libgstreamer-plugins-base1.0-dev gir1.2-gst-plugins-base-1.0`,"gdk-pixbuf":`libgdk-pixbuf-2.0-dev`,pango:`libpango1.0-dev`,pangocairo:`libpango1.0-dev`,cairo:`libcairo2-dev`},dnf:{gjs:`gjs`,"blueprint-compiler":`blueprint-compiler`,"pkg-config":`pkgconf-pkg-config`,meson:`meson`,gtk4:`gtk4-devel`,libadwaita:`libadwaita-devel`,libsoup3:`libsoup3-devel`,webkitgtk:`webkitgtk6.0-devel`,"gobject-introspection":`gobject-introspection-devel`,manette:`libmanette-devel`,gstreamer:`gstreamer1-devel`,"gst-app":`gstreamer1-plugins-base-devel`,"gdk-pixbuf":`gdk-pixbuf2-devel`,pango:`pango-devel`,pangocairo:`pango-devel`,cairo:`cairo-devel`},pacman:{gjs:`gjs`,"blueprint-compiler":`blueprint-compiler`,"pkg-config":`pkgconf`,meson:`meson`,gtk4:`gtk4`,libadwaita:`libadwaita`,libsoup3:`libsoup3`,webkitgtk:`webkitgtk-6.0`,"gobject-introspection":`gobject-introspection`,manette:`libmanette`,gstreamer:`gstreamer`,"gst-app":`gst-plugins-base`,"gdk-pixbuf":`gdk-pixbuf2`,pango:`pango`,pangocairo:`pango`,cairo:`cairo`},zypper:{gjs:`gjs`,"blueprint-compiler":`blueprint-compiler`,"pkg-config":`pkg-config`,meson:`meson`,gtk4:`gtk4-devel`,libadwaita:`libadwaita-devel`,libsoup3:`libsoup-3_0-devel`,webkitgtk:`webkitgtk6_0-devel`,"gobject-introspection":`gobject-introspection-devel`,manette:`libmanette-0_2-0-devel`,gstreamer:`gstreamer-devel`,"gst-app":`gstreamer-plugins-base-devel`,"gdk-pixbuf":`gdk-pixbuf-devel`,pango:`pango-devel`,pangocairo:`pango-devel`,cairo:`cairo-devel`},apk:{gjs:`gjs`,"blueprint-compiler":`blueprint-compiler`,"pkg-config":`pkgconf`,meson:`meson`,gtk4:`gtk4.0-dev`,libadwaita:`libadwaita-dev`,libsoup3:`libsoup3-dev`,webkitgtk:`webkit2gtk-6.0-dev`,"gobject-introspection":`gobject-introspection-dev`,manette:`libmanette-dev`,gstreamer:`gstreamer-dev`,"gst-app":`gst-plugins-base-dev`,"gdk-pixbuf":`gdk-pixbuf-dev`,pango:`pango-dev`,pangocairo:`pango-dev`,cairo:`cairo-dev`},unknown:{}},BT={apt:`sudo apt install`,dnf:`sudo dnf install`,pacman:`sudo pacman -S`,zypper:`sudo zypper install`,apk:`sudo apk add`,unknown:``};function buildInstallCommand(n,a){if(n===`unknown`)return null;let S=zT[n],C=[],N=[];for(let n of a){if(n.id===`gwebgl`){N.push(`@gjsify/webgl`);continue}if(n.id===`nodejs`)continue;let a=S[n.id];a&&C.push(a)}let F=[];return C.length>0&&F.push(`${BT[n]} ${C.join(` `)}`),N.length>0&&F.push(`npm install ${N.join(` `)}`),F.length>0?F.join(`
@@ -793,11 +793,11 @@ jobs:
793
793
  `)}function parseSpec(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a<0)throw Error(`Invalid spec (scoped name without slash): ${n}`);let S=n.indexOf(`@`,a);return S<0?{name:n,range:`*`}:{name:n.slice(0,S),range:n.slice(S+1)||`*`}}let a=n.indexOf(`@`);return a<0?{name:n,range:`*`}:{name:n.slice(0,a),range:n.slice(a+1)||`*`}}function pickVersion(n,a){if(n[`dist-tags`][a])return n[`dist-tags`][a];let S;try{S=new _E(a)}catch{throw Error(`Invalid version range for ${n.name}: ${a}`)}return maxSatisfying(Object.keys(n.versions).filter(n=>{try{return new SemVer(n),!0}catch{return!1}}),S)}async function downloadAndExtractAll(n,a,S,C){let N=[...n].sort((n,a)=>depth(n.installPath)-depth(a.installPath)||(n.installPath<a.installPath?-1:1)),F=[],I=Math.max(1,Math.min(DE,N.length)),H=0,W=N.findIndex(n=>depth(n.installPath)>1),K=W<0?N.length:W;for(;H<K;){let n=N[H++];if(!n)break;await extractOne(n,a,S,C)}for(let n=0;n<I;n++)F.push((async()=>{for(;;){let n=H++;if(n>=N.length)return;let F=N[n];if(!F)return;await extractOne(F,a,S,C)}})());await Promise.all(F)}async function extractOne(n,a,S,C){let N=Lo(a,n.installPath);C(`fetch: %s@%s ← %s (→ %s)`,n.name,n.version,n.tarballUrl,n.installPath);let F=await fetchTarball(n.tarballUrl,{npmrc:S,integrity:n.integrity,onRetry:({attempt:a,error:S,delayMs:N})=>{C(`tarball %s@%s: retry %d after %dms (%s)`,n.name,n.version,a,N,errMsg(S))}});rmSync(N,{recursive:!0,force:!0}),mkdirSync(N,{recursive:!0}),await extractTarball(F,N)}function depth(n){return n.split(`/node_modules/`).length}async function linkBins(n,a,S){let C=Lo(a,`node_modules`,`.bin`),N=0;for(let S of n){if(!S.bin||depth(S.installPath)!==1)continue;let n=normalizeBin$1(S.name,S.bin);if(n.size!==0){mkdirSync(C,{recursive:!0});for(let[F,I]of n){let n=Lo(a,S.installPath,I);if(!existsSync(n))continue;try{chmodSync(n,493)}catch{}let H=Lo(C,F);rmSync(H,{force:!0});let W=Ro(C,n);try{symlinkSync(W,H),N++}catch{copyFileSync(n,H),chmodSync(H,493),N++}}}}N>0&&S(`bin: linked %d entry(ies) under .bin/`,N)}function normalizeBin$1(n,a){let S=new Map;if(typeof a==`string`){let C=n.startsWith(`@`)?n.slice(n.indexOf(`/`)+1):n;return S.set(C,a),S}for(let[n,C]of Object.entries(a))S.set(n,C);return S}async function loadNpmrc$1(n){let a=homedir(),S={registry:n.registry??yE,scopes:{},authTokens:{},basicAuth:{}};for(let C of[Lo(a,`.npmrc`),Lo(n.prefix,`.npmrc`)])if(existsSync(C))try{let n=parseNpmrc(readFileSync(C,`utf-8`));S={...S,...n,scopes:{...S.scopes,...n.scopes}}}catch(n){Be.warn(`gjsify install: ignoring malformed ${C}: ${n.message}`)}let C=process.env.npm_config_registry;return C&&(S.registry=C),n.registry&&(S.registry=n.registry),S}function makeLogger(n){return n?(n,...a)=>{let S=n.replace(/%s|%d/g,()=>String(a.shift()));process.stderr.write(`gjsify install: ${S}\n`)}:()=>{}}var DE,OE,kE,AE=__esmMin(()=>{Ve(),zs(),Jo(),sp(),vE(),bE(),TE(),DE=Number(process.env.GJSIFY_INSTALL_CONCURRENCY??`8`)||8,OE=`gjsify-lock.json`,kE=2,__name$1(normalizeBin$1,`normalizeBin`),__name$1(loadNpmrc$1,`loadNpmrc`)});vx(),zs(),Jo();const jE=process.env.GJSIFY_INSTALL_BACKEND??`native`;async function installPackages(n){if(jE===`npm`)return await installViaNpm(n),{installed:[]};let{installPackagesNative:a}=await Promise.resolve().then(()=>(AE(),EE));return{installed:await a(n)}}async function installViaNpm({prefix:n,specs:a,verbose:S,registry:C}){if(a.length===0)throw Error(`installPackages: empty specs list`);writeFileSync(Lo(n,`package.json`),JSON.stringify({name:`gjsify-dlx-cache`,version:`0.0.0`,private:!0},null,2)),C&&writeFileSync(Lo(n,`.npmrc`),`registry=${C}\n`);let N=[`install`,`--no-package-lock`,`--no-audit`,`--no-fund`,`--prefix`,n,...S?[`--loglevel`,`verbose`]:[`--loglevel`,`warn`],...a];await new Promise((n,a)=>{let S=spawn(`npm`,N,{stdio:`inherit`});S.on(`close`,S=>{S===0?n():a(Error(`npm install exited with code ${S}`))}),S.on(`error`,n=>{let S=n.code===`ENOENT`?`npm not found on PATH — install Node.js or set GJSIFY_INSTALL_BACKEND=native (not yet supported)`:`npm install failed: ${n.message}`;a(Error(S))})})}Ve(),zs(),Jo();const ME={command:`dlx <spec> [binOrArg] [extraArgs..]`,description:`Run the GJS bundle of an npm-published package without installing it locally.`,builder:n=>n.positional(`spec`,{description:"Package spec (`name`, `name@version`, `@scope/name@spec`, or local path).",type:`string`,demandOption:!0}).positional(`binOrArg`,{description:"Optional bin name when the package defines `gjsify.bin` with multiple entries; otherwise treated as the first argument forwarded to the bundle.",type:`string`}).positional(`extraArgs`,{description:"Extra args forwarded to `gjs -m <bundle>`.",type:`string`,array:!0}).option(`cache-max-age`,{description:`Cache TTL in minutes. Defaults to 7 days. Use 0 to bypass cache.`,type:`number`,default:1440*7}).option(`reinstall`,{description:`Bypass the cache for this run (alias for --cache-max-age=0).`,type:`boolean`,default:!1}).option(`frozen`,{description:`Use the project-local gjsify-lock.json verbatim — fail if missing or stale (no resolver pass).`,type:`boolean`,default:!1}).option(`verbose`,{description:`Verbose logging (passes --loglevel verbose to npm).`,type:`boolean`,default:!1}).option(`registry`,{description:`Registry URL override.`,type:`string`}),handler:async n=>{let a=parseSpec$1(n.spec),S=n.reinstall?0:n[`cache-max-age`],{pkgDir:C,cachedPkgName:N}=await ensurePkgDir(a,{verbose:n.verbose,registry:n.registry,cacheMaxAge:S,frozen:n.frozen}),{binName:F,extraArgs:I}=splitBinAndArgs(C,n.binOrArg,n.extraArgs??[]),H=resolveGjsEntry(C,F);H.fromFallback&&Be.warn(`[gjsify dlx] package "${N??a.kind}" has no \`gjsify\` field — falling back to package.json#main. Add \`gjsify.main\` to silence.`),await runGjsBundle(H.bundlePath,I)}};async function ensurePkgDir(n,a){if(n.kind===`local`)return{pkgDir:n.path,cachedPkgName:null};let S=cacheDirFor(createCacheKey({packages:[n.spec]})),C=a.cacheMaxAge>0?getValidCachedPkg(S,a.cacheMaxAge):void 0;if(C)return{pkgDir:resolveInstalledPkgDir(C,n.name),cachedPkgName:n.name};let N=makePrepareDir(S);return await installPackages({prefix:N,specs:[n.spec],verbose:a.verbose,registry:a.registry,lockfile:!0,frozen:a.frozen}),{pkgDir:resolveInstalledPkgDir(symlinkSwap(S,N),n.name),cachedPkgName:n.name}}function splitBinAndArgs(n,a,S){if(!a)return{binName:null,extraArgs:S};let C=Lo(n,`package.json`);if(existsSync(C))try{let n=JSON.parse(readFileSync(C,`utf-8`)).gjsify?.bin;if(n&&Object.prototype.hasOwnProperty.call(n,a))return{binName:a,extraArgs:S}}catch{}return{binName:null,extraArgs:[a,...S]}}zs(),sp(),Jo();function defaultGlobalLayout(){let n=process.env.GJSIFY_GLOBAL_PREFIX,a=process.env.GJSIFY_GLOBAL_BIN_DIR,S=homedir(),C=process.env.XDG_DATA_HOME??Lo(S,`.local`,`share`);return{prefix:n??Lo(C,`gjsify`,`global`),binDir:a??Lo(S,`.local`,`bin`)}}function linkGlobalBins(n,a){mkdirSync(a.binDir,{recursive:!0});let S=[],C=buildLauncherEnvPreamble(detectNativePackages(a.prefix).map(n=>n.prebuildsDir));for(let N of n){let n=Lo(a.prefix,`node_modules`,N),F=Lo(n,`package.json`);if(!existsSync(F))continue;let I=pickBinMap(N,readJson(F));if(!(!I||I.size===0))for(let[N,F]of I){let I=Lo(n,F);if(!existsSync(I))continue;try{chmodSync(I,493)}catch{}let H=Lo(a.binDir,N);rmSync(H,{force:!0}),writeFileSync(H,I.endsWith(`.gjs.mjs`)||I.endsWith(`.mjs`)?`#!/bin/sh\n${C}exec gjs -m ${shQuote(I)} "$@"\n`:`#!/bin/sh\nexec ${shQuote(I)} "$@"\n`),chmodSync(H,493),S.push({name:N,target:I,link:H})}}return S}function shQuote(n){return`'${n.replace(/'/g,`'\\''`)}'`}function buildLauncherEnvPreamble(n){if(n.length===0)return``;let a=shQuote(n.join(`:`));return`GI_TYPELIB_PATH=${a}\${GI_TYPELIB_PATH:+":$GI_TYPELIB_PATH"}\nLD_LIBRARY_PATH=${a}\${LD_LIBRARY_PATH:+":$LD_LIBRARY_PATH"}\nexport GI_TYPELIB_PATH LD_LIBRARY_PATH\n`}function pickBinMap(n,a){let S=a.gjsify;if(S?.bin!==void 0)return normalizeBin(n,S.bin);let C=a.bin;return C===void 0?null:normalizeBin(n,C)}function normalizeBin(n,a){let S=new Map;if(typeof a==`string`){let C=n.startsWith(`@`)?n.slice(n.indexOf(`/`)+1):n;return S.set(C,a),S}for(let[n,C]of Object.entries(a))S.set(n,C);return S}function readJson(n){return JSON.parse(readFileSync(n,`utf-8`))}function binDirOnPath(n){let a=process.env.PATH??``,S=process.platform===`win32`?`;`:`:`,C=Po(n);return a.split(S).some(n=>n&&Po(n)===C)}function specToPackageName(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a<0)return n;let S=n.indexOf(`@`,a);return S<0?n:n.slice(0,S)}let a=n.indexOf(`@`);return a<0?n:n.slice(0,a)}Ve(),zs(),Jo(),vx();const NE={command:`install [packages..]`,description:`Install npm dependencies in the current project (or globally with -g), then run gjsify-aware post-checks.`,builder:n=>n.positional(`packages`,{description:`Optional package specs. With none, runs a full project install.`,type:`string`,array:!0}).option(`global`,{description:`Install into the user-global XDG location and symlink bins into ~/.local/bin.`,type:`boolean`,alias:`g`,default:!1}).option(`save-dev`,{type:`boolean`,alias:`D`}).option(`save-peer`,{type:`boolean`}).option(`save-optional`,{type:`boolean`,alias:`O`}).option(`immutable`,{description:`CI mode: install strictly from gjsify-lock.json, fail if the lockfile is missing or stale. Equivalent to yarn --immutable / npm ci --frozen-lockfile.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Verbose install logging.`,type:`boolean`,default:!1}),handler:async n=>{if(n.immutable&&(n.packages&&n.packages.length>0&&(Be.error(`gjsify install --immutable does not accept package arguments. Remove the package names or drop --immutable.`),process.exit(1)),n.global&&(Be.error(`gjsify install --immutable is incompatible with --global.`),process.exit(1))),n.global){(!n.packages||n.packages.length===0)&&(Be.error(`gjsify install --global requires at least one <pkg> argument.`),process.exit(1));for(let a of[`save-dev`,`save-peer`,`save-optional`])n[a]&&Be.warn(`gjsify install --global ignores --${a}: global installs do not modify a project package.json.`);await installGlobalAndLink(n.packages,{verbose:n.verbose});return}if(process.env.GJSIFY_INSTALL_BACKEND===`npm`){await projectInstallViaNpm(n),await runPostInstallChecks();return}await projectInstallNative(n),await runPostInstallChecks()}};function isWorkspaceRoot(n){let a=readPackageJson$2(Lo(n,`package.json`));return a?a.workspaces!==void 0:!1}function depKindFromArgs(n){return n[`save-dev`]?`devDependencies`:n[`save-peer`]?`peerDependencies`:n[`save-optional`]?`optionalDependencies`:`dependencies`}async function projectInstallNative(n){let a=process.cwd(),S=Lo(a,`package.json`);if(existsSync(Lo(a,`.pnp.cjs`))||existsSync(Lo(a,`.pnp.loader.mjs`)))throw Error("gjsify install: detected Yarn PnP (.pnp.cjs) — native install is not PnP-aware yet. Use `yarn install` or set GJSIFY_INSTALL_BACKEND=npm.");if((!n.packages||n.packages.length===0)&&isWorkspaceRoot(a)){await workspaceInstall(a,n);return}let C,N=readPackageJson$2(S),F=N?projectSpecsFromPackageJson(N):[];if(n.packages&&n.packages.length>0){let a=new Set(n.packages.map(n=>parseSpec$2(n).name));C=[...F.filter(n=>!a.has(parseSpec$2(n).name)),...n.packages]}else{if(!N)throw Error(`gjsify install: no package.json in ${a}`);if(C=F,C.length===0){Be.log(`gjsify install: no dependencies declared in package.json — nothing to do.`);return}}mkdirSync(a,{recursive:!0});let I=await installPackages({prefix:a,specs:C,verbose:n.verbose,lockfile:!n.immutable,frozen:n.immutable});if(n.packages&&n.packages.length>0&&N){let C=depKindFromArgs(n);for(let a of n.packages){let{name:n,range:S}=parseSpec$2(a),F=I.installed.find(a=>a.name===n);addDependencyEntry(N,n,S??(F?defaultRangeFromVersion(F.version):`latest`),C)}writePackageJson$1(S,N),n.immutable||syncLockfileRequested(a,projectSpecsFromPackageJson(N))}}function syncLockfileRequested(n,a){let S=Lo(n,`gjsify-lock.json`);if(existsSync(S))try{let n=JSON.parse(readFileSync(S,`utf-8`)),C=[...a].sort(),N=[...n.requested??[]].sort();if(C.length===N.length&&C.every((n,a)=>n===N[a]))return;n.requested=a,writeFileSync(S,JSON.stringify(n,null,2)+`
794
794
  `)}catch{}}async function workspaceInstall(n,a){let S=discoverWorkspaces(n,{includeRoot:!0});if(S.length===0)throw Error(`gjsify install: ${n} has a "workspaces" field but no workspaces were discovered`);let C=new Map(S.map(n=>[n.name,n])),N=new Set,F=[];for(let n of S){let a=n.manifest;for(let S of[`dependencies`,`devDependencies`,`optionalDependencies`]){let I=a[S];if(I){for(let[a,S]of Object.entries(I))if(typeof S==`string`){if(S.startsWith(`workspace:`)){let N=C.get(a);if(!N)throw Error(`gjsify install: ${n.name} declares "${a}: ${S}" but no workspace with that name exists`);F.push({fromWorkspaceName:n.name,depName:a,targetLocation:N.location});continue}/^(link|file|portal|git\+|https?):/.test(S)||N.add(`${a}@${S}`)}}}}Be.log(`gjsify install: ${S.length} workspace(s), ${N.size} external dep spec(s), ${F.length} workspace symlink(s)`);let I=S.find(a=>a.location===n)?.manifest,H=extractOverrides(I);N.size>0?await installPackages({prefix:n,specs:[...N],verbose:a.verbose,lockfile:!a.immutable,frozen:a.immutable,overrides:H}):a.verbose&&Be.log(`gjsify install: no external deps to fetch`);for(let n of F){let a=C.get(n.fromWorkspaceName);if(!a)continue;let S=Lo(a.location,`node_modules`,n.depName);mkdirSync(Bo(S),{recursive:!0});try{let n=lstatSync(S);n.isSymbolicLink()||n.isFile()?rmSync(S,{force:!0}):n.isDirectory()&&rmSync(S,{recursive:!0,force:!0})}catch{}symlinkSync(Ro(Bo(S),n.targetLocation),S)}F.length>0&&Be.log(`gjsify install: wired ${F.length} workspace symlink(s)`);let W=Lo(n,`node_modules`),K=0;for(let a of S){if(a.location===n||!a.name)continue;let S=Lo(W,a.name),C=!1;try{lstatSync(S),C=!0}catch{}C||(mkdirSync(Bo(S),{recursive:!0}),symlinkSync(Ro(Bo(S),a.location),S),K++)}K>0&&Be.log(`gjsify install: hoisted ${K} workspace(s) to root node_modules/`);let q=Lo(n,`node_modules`,`.bin`),Y=detectNativePackages(n).map(n=>n.prebuildsDir),X=0;for(let n of S){let a=n.manifest,S=a.gjsify?.bin,C=a.bin,N=mergeWorkspaceBins(n.name,S,C);if(N.size!==0){mkdirSync(q,{recursive:!0});for(let[a,{nodeTarget:S,gjsTarget:C}]of N){let N=Lo(q,a);try{rmSync(N,{force:!0})}catch{}writeFileSync(N,buildBinShim(n.location,S,C,Y),{mode:493}),chmodSync(N,493),X++}}}X>0&&Be.log(`gjsify install: linked ${X} workspace bin(s) into node_modules/.bin/`)}function extractOverrides(n){if(!n)return;let a={},merge=(n,S)=>{if(n)for(let[C,N]of Object.entries(n)){if(C.startsWith(`_`))continue;if(typeof N!=`string`){Be.warn(`gjsify install: ${S}["${C}"] is not a string — nested override shape isn't supported yet, skipping`);continue}let n=C,F=C.startsWith(`@`)?C.indexOf(`@`,1):C.indexOf(`@`);F>0&&(n=C.slice(0,F)),a[n]=N}};return merge(n.overrides,`overrides`),merge(n.resolutions,`resolutions`),Object.keys(a).length>0?a:void 0}function buildBinShim(n,a,S,C=[]){let N=a?Lo(n,a):null,F=S?Lo(n,S):null,I=C.length===0?``:(()=>{let n=`'${C.join(`:`).replace(/'/g,`'\\''`)}'`;return`GI_TYPELIB_PATH=${n}\${GI_TYPELIB_PATH:+":$GI_TYPELIB_PATH"}\nLD_LIBRARY_PATH=${n}\${LD_LIBRARY_PATH:+":$LD_LIBRARY_PATH"}\nexport GI_TYPELIB_PATH LD_LIBRARY_PATH\n`})();if(N&&F)return`#!/bin/sh\nif [ -f "${N}" ]; then\n exec node "${N}" "$@"\nfi\n${I}exec gjs -m "${F}" "$@"\n`;if(N)return`#!/bin/sh\nexec node "${N}" "$@"\n`;if(F)return`#!/bin/sh\n${I}exec gjs -m "${F}" "$@"\n`;throw Error(`buildBinShim: either nodeTarget or gjsTarget must be provided`)}function mergeWorkspaceBins(n,a,S){let C=new Map,N=n.startsWith(`@`)?n.slice(n.indexOf(`/`)+1):n,get=n=>{let a=C.get(n);return a||(a={},C.set(n,a)),a};if(typeof S==`string`)get(N).nodeTarget=S;else if(S&&typeof S==`object`)for(let[n,a]of Object.entries(S))typeof a==`string`&&a.length>0&&(get(n).nodeTarget=a);if(typeof a==`string`)get(N).gjsTarget=a;else if(a&&typeof a==`object`)for(let[n,S]of Object.entries(a))typeof S==`string`&&S.length>0&&(get(n).gjsTarget=S);return C}async function projectInstallViaNpm(n){let a=[`install`];n[`save-dev`]&&a.push(`--save-dev`),n[`save-peer`]&&a.push(`--save-peer`),n[`save-optional`]&&a.push(`--save-optional`),n.verbose&&a.push(`--loglevel`,`verbose`),n.packages&&n.packages.length>0&&a.push(...n.packages),await spawnNpm(a)}async function spawnNpm(n){return new Promise((a,S)=>{let C=spawn(`npm`,n,{stdio:`inherit`});C.on(`close`,n=>{n===0?a():S(Error(`npm install exited with code ${n}`))}),C.on(`error`,n=>{let a=n.code===`ENOENT`?`npm not found on PATH — install Node.js first.`:`npm install failed: ${n.message}`;S(Error(a))})}).catch(n=>{Be.error(n.message),process.exit(1)})}async function installGlobalAndLink(n,a){let S=defaultGlobalLayout();mkdirSync(S.prefix,{recursive:!0}),Be.log(`gjsify install --global → ${S.prefix}`),Be.log(` bins → ${S.binDir}`),await installPackages({prefix:S.prefix,specs:n,verbose:a.verbose});let C=linkGlobalBins(n.map(specToPackageName),S);if(C.length===0)Be.warn("\nNo bins declared (neither `gjsify.bin` nor `bin` in package.json) — nothing was symlinked.");else{Be.log(`\nLinked ${C.length} bin(s):`);for(let n of C)Be.log(` • ${n.link} → ${n.target}`)}C.length>0&&!binDirOnPath(S.binDir)&&Be.warn(`\nNote: ${S.binDir} is not on your PATH.\nAdd it to your shell rc file:\n export PATH="${S.binDir}:$PATH"`)}async function runPostInstallChecks(){Be.log(`
795
795
  --- gjsify post-install checks ---`);let n=runMinimalChecks().filter(n=>!n.found&&n.severity===`required`);if(n.length>0){Be.warn(`Missing required system dependencies:
796
- `);for(let a of n)Be.warn(` ✗ ${a.name}`);let a=buildInstallCommand(detectPackageManager$2(),n);a&&Be.warn(`\nInstall with:\n ${a}`)}else Be.log(`System dependencies OK.`);let a=detectNativePackages(process.cwd());if(a.length>0){Be.log(`\nDetected ${a.length} @gjsify/* package(s) with native prebuilds:`);for(let n of a)Be.log(` • ${n.name}`);Be.log("\nUse `gjsify run <bundle>` to launch with LD_LIBRARY_PATH/GI_TYPELIB_PATH set.")}}Ve(),vx(),sp();const PE={command:`foreach [script] [args..]`,description:"Run a workspace script across all (or filtered) workspaces. Drop-in for `yarn workspaces foreach`: -A/--all, -p/--parallel, -t/--topological, --include, --exclude, --no-private. Pass --exec to run an arbitrary command instead of a script.",builder:n=>n.positional(`script`,{description:"Script name to run in each workspace (`run <name>`-equivalent). With --exec, the command to run instead.",type:`string`}).positional(`args`,{description:`Extra arguments forwarded to each child invocation.`,type:`string`,array:!0}).option(`all`,{description:"Include workspaces declared as `private: true`.",type:`boolean`,alias:`A`,default:!1}).option(`parallel`,{description:`Run workspaces in parallel (capped by --jobs).`,type:`boolean`,alias:`p`,default:!1}).option(`topological`,{description:`Wait for each workspace's deps to finish before starting it (production deps only).`,type:`boolean`,alias:`t`,default:!1}).option(`topological-dev`,{description:`Like --topological but also respects devDependencies (often cyclic — use sparingly).`,type:`boolean`,default:!1}).option(`include`,{description:`Glob pattern to include workspaces by name (repeatable).`,type:`string`,array:!0}).option(`exclude`,{description:`Glob pattern to exclude workspaces by name (repeatable).`,type:`string`,array:!0}).option(`private`,{description:`Include private workspaces (default true). Pass --no-private to skip them.`,type:`boolean`,default:!0}).option(`verbose`,{description:`Echo every spawned command before running it.`,type:`boolean`,alias:`v`,default:!1}).option(`jobs`,{description:`Maximum concurrent workspaces in --parallel mode (default: cpu count).`,type:`number`,alias:`j`}).option(`exec`,{description:"Treat <script> [args..] as an arbitrary command (yarn `workspaces foreach exec`-equivalent) instead of a package.json script lookup. Workspace filtering by script presence is skipped. Use `-- <cmd> <args...>` to pass flags to the command without yargs intercepting them.",type:`boolean`,default:!1}).parserConfiguration({"populate--":!0}),handler:async n=>{let a=discoverWorkspaces(findWorkspaceRoot(process.cwd())??process.cwd()),S=n.exec===!0,C=n.script,N=n.args??[];if(S){let a=(n[`--`]??[]).filter(n=>typeof n==`string`);a.length>0&&(C?N=[...N,...a]:(C=a[0],N=[...N,...a.slice(1)])),C||(Be.error("gjsify foreach --exec: missing command. Pass it after `--`, e.g. `gjsify foreach --exec -- npm publish --tag latest`."),process.exit(1))}let F=filterWorkspaces(a,{include:n.include,exclude:n.exclude,noPrivate:n.private===!1});if(!S){C||(Be.error(`gjsify foreach: missing <script> positional. Pass --exec to run an arbitrary command instead.`),process.exit(1));let n=C;F=F.filter(a=>typeof(a.manifest.scripts??{})[n]==`string`)}if(F.length===0){Be.log(`gjsify foreach: no workspaces match (${S?`exec`:`script`}="${C}", include=${JSON.stringify(n.include??[])}, exclude=${JSON.stringify(n.exclude??[])})`);return}(n.topological||n[`topological-dev`])&&(F=topologicalSort(buildDependencyGraph(F,{includeDev:n[`topological-dev`]===!0})));let I=n.verbose===!0,H=C;try{if(n.parallel&&!n.topological&&!n[`topological-dev`]){let a=n.jobs&&n.jobs>0?n.jobs:cpus().length;await runParallel(F,H,N,a,I,S)}else if(n.parallel){let a=n.jobs&&n.jobs>0?n.jobs:cpus().length;await runTopologicalParallel(F,H,N,a,I,n[`topological-dev`]===!0,S)}else await runSequential(F,H,N,I,S)}catch(n){Be.error(n.message),process.exit(1)}process.exit(0)}};async function runSequential(n,a,S,C,N){for(let F of n)await runOne(F,a,S,!1,C,N)}async function runParallel(n,a,S,C,N,F){let I=0,H=[];for(let W=0;W<C;W++)H.push((async()=>{for(;I<n.length;)await runOne(n[I++],a,S,!0,N,F)})());await Promise.all(H)}async function runTopologicalParallel(n,a,S,C,N,F,I){let H=new Set(n.map(n=>n.name)),W=new Map;for(let a of n){let n=new Set,S=a.manifest;for(let a of[S.dependencies,F?S.devDependencies:void 0,S.optionalDependencies])if(a)for(let[S,C]of Object.entries(a))typeof C==`string`&&C.startsWith(`workspace:`)&&H.has(S)&&n.add(S);W.set(a.name,n)}let K=new Map(n.map(n=>[n.name,n])),q=new Set,Y=0;return new Promise((n,F)=>{let H=null,pump=()=>{if(!H){for(;Y<C;){let C=[...W.entries()].filter(([,n])=>[...n].every(n=>q.has(n))).map(([n])=>n);if(C.length===0)break;let X=C.sort()[0];W.delete(X),Y++,runOne(K.get(X),a,S,!0,N,I).then(()=>{if(Y--,q.add(X),W.size===0&&Y===0){n();return}pump()}).catch(n=>{H=n instanceof Error?n:Error(String(n)),Y===0&&F(H)})}W.size>0&&Y===0&&!H&&F(Error(`gjsify foreach --topological: stuck — workspaces ${[...W.keys()].join(`, `)} have unsatisfied deps in the selected set`))}};pump()})}async function runOne(n,a,S,C,N,F){if(F){N&&Be.error(`[${n.name}] $ ${a} ${S.join(` `)}`),await spawnPrefixed(a,S,n.location,C?`[${n.name}] `:null);return}let I=detectPackageManager$1(),H=I===`gjsify`?[`run`,a,...S]:[`run`,a,...S.length>0?[`--`,...S]:[]];N&&Be.error(`[${n.name}] $ ${I} ${H.join(` `)}`),await spawnPrefixed(I,H,n.location,C?`[${n.name}] `:null)}function detectPackageManager$1(){let n=process.env.npm_config_user_agent??``;return n.startsWith(`yarn/`)?`yarn`:n.startsWith(`gjsify/`)?`gjsify`:`npm`}__name$1(detectPackageManager$1,`detectPackageManager`);function spawnPrefixed(n,a,S,C){return new Promise((N,F)=>{let I=spawn(n,a,{cwd:S,stdio:C?[`ignore`,`pipe`,`pipe`]:`inherit`,env:process.env});C&&I.stdout&&I.stderr&&(prefixLines(I.stdout,process.stdout,C),prefixLines(I.stderr,process.stderr,C)),I.on(`close`,S=>{S===0?N():F(Error(`${n} ${a.join(` `)} exited with code ${S}`))}),I.on(`error`,n=>F(n))})}function prefixLines(n,a,S){let C=``;n.setEncoding(`utf-8`),n.on(`data`,n=>{C+=n;let N;for(;(N=C.indexOf(`
796
+ `);for(let a of n)Be.warn(` ✗ ${a.name}`);let a=buildInstallCommand(detectPackageManager$2(),n);a&&Be.warn(`\nInstall with:\n ${a}`)}else Be.log(`System dependencies OK.`);let a=detectNativePackages(process.cwd());if(a.length>0){Be.log(`\nDetected ${a.length} @gjsify/* package(s) with native prebuilds:`);for(let n of a)Be.log(` • ${n.name}`);Be.log("\nUse `gjsify run <bundle>` to launch with LD_LIBRARY_PATH/GI_TYPELIB_PATH set.")}}Ve(),vx(),sp();const PE={command:`foreach [script] [args..]`,description:"Run a workspace script across all (or filtered) workspaces. Drop-in for `yarn workspaces foreach`: -A/--all, -p/--parallel, -t/--topological, --include, --exclude, --no-private. Pass --exec to run an arbitrary command instead of a script.",builder:n=>n.positional(`script`,{description:"Script name to run in each workspace (`run <name>`-equivalent). With --exec, the command to run instead.",type:`string`}).positional(`args`,{description:`Extra arguments forwarded to each child invocation.`,type:`string`,array:!0}).option(`all`,{description:"Include workspaces declared as `private: true`.",type:`boolean`,alias:`A`,default:!1}).option(`parallel`,{description:`Run workspaces in parallel (capped by --jobs).`,type:`boolean`,alias:`p`,default:!1}).option(`topological`,{description:`Wait for each workspace's deps to finish before starting it (production deps only).`,type:`boolean`,alias:`t`,default:!1}).option(`topological-dev`,{description:`Like --topological but also respects devDependencies (often cyclic — use sparingly).`,type:`boolean`,default:!1}).option(`include`,{description:`Glob pattern to include workspaces by name (repeatable).`,type:`string`,array:!0}).option(`exclude`,{description:`Glob pattern to exclude workspaces by name (repeatable).`,type:`string`,array:!0}).option(`private`,{description:`Include private workspaces (default true). Pass --no-private to skip them.`,type:`boolean`,default:!0}).option(`verbose`,{description:`Echo every spawned command before running it.`,type:`boolean`,alias:`v`,default:!1}).option(`jobs`,{description:`Maximum concurrent workspaces in --parallel mode (default: cpu count).`,type:`number`,alias:`j`}).option(`exec`,{description:"Treat <script> [args..] as an arbitrary command (yarn `workspaces foreach exec`-equivalent) instead of a package.json script lookup. Workspace filtering by script presence is skipped. Use `-- <cmd> <args...>` to pass flags to the command without yargs intercepting them.",type:`boolean`,default:!1}).parserConfiguration({"populate--":!0}),handler:async n=>{let a=discoverWorkspaces(findWorkspaceRoot(process.cwd())??process.cwd()),S=n.exec===!0,C=n.script,N=n.args??[];if(S){let a=(n[`--`]??[]).filter(n=>typeof n==`string`);a.length>0&&(C?N=[...N,...a]:(C=a[0],N=[...N,...a.slice(1)])),C||(Be.error("gjsify foreach --exec: missing command. Pass it after `--`, e.g. `gjsify foreach --exec -- npm publish --tag latest`."),process.exit(1))}let F=filterWorkspaces(a,{include:n.include,exclude:n.exclude,noPrivate:n.private===!1});if(!S){C||(Be.error(`gjsify foreach: missing <script> positional. Pass --exec to run an arbitrary command instead.`),process.exit(1));let n=C;F=F.filter(a=>typeof(a.manifest.scripts??{})[n]==`string`)}if(F.length===0){Be.log(`gjsify foreach: no workspaces match (${S?`exec`:`script`}="${C}", include=${JSON.stringify(n.include??[])}, exclude=${JSON.stringify(n.exclude??[])})`);return}(n.topological||n[`topological-dev`])&&(F=topologicalSort(buildDependencyGraph(F,{includeDev:n[`topological-dev`]===!0})));let I=n.verbose===!0,H=C;try{if(n.parallel&&!n.topological&&!n[`topological-dev`]){let a=n.jobs&&n.jobs>0?n.jobs:cpus().length;await runParallel(F,H,N,a,I,S)}else if(n.parallel){let a=n.jobs&&n.jobs>0?n.jobs:cpus().length;await runTopologicalParallel(F,H,N,a,I,n[`topological-dev`]===!0,S)}else await runSequential(F,H,N,I,S)}catch(n){Be.error(n.message),process.exit(1)}process.exit(0)}};async function runSequential(n,a,S,C,N){for(let F of n)await runOne(F,a,S,!1,C,N)}async function runParallel(n,a,S,C,N,F){let I=0,H=[];for(let W=0;W<C;W++)H.push((async()=>{for(;I<n.length;)await runOne(n[I++],a,S,!0,N,F)})());await Promise.all(H)}async function runTopologicalParallel(n,a,S,C,N,F,I){let H=new Set(n.map(n=>n.name)),W=new Map;for(let a of n){let n=new Set,S=a.manifest;for(let a of[S.dependencies,F?S.devDependencies:void 0,S.optionalDependencies])if(a)for(let[S,C]of Object.entries(a))typeof C==`string`&&C.startsWith(`workspace:`)&&H.has(S)&&n.add(S);W.set(a.name,n)}let K=new Map(n.map(n=>[n.name,n])),q=new Set,Y=0;return new Promise((n,F)=>{let H=null,pump=()=>{if(!H){for(;Y<C;){let C=[...W.entries()].filter(([,n])=>[...n].every(n=>q.has(n))).map(([n])=>n);if(C.length===0)break;let X=C.sort()[0];W.delete(X),Y++,runOne(K.get(X),a,S,!0,N,I).then(()=>{if(Y--,q.add(X),W.size===0&&Y===0){n();return}pump()}).catch(n=>{H=n instanceof Error?n:Error(String(n)),Y===0&&F(H)})}W.size>0&&Y===0&&!H&&F(Error(`gjsify foreach --topological: stuck — workspaces ${[...W.keys()].join(`, `)} have unsatisfied deps in the selected set`))}};pump()})}async function runOne(n,a,S,C,N,F){if(F){N&&Be.error(`[${n.name}] $ ${a} ${S.join(` `)}`),await spawnPrefixed(a,S,n.location,C?`[${n.name}] `:null);return}let I=detectPackageManager$1(),H=I===`gjsify`?[`run`,a,...S]:[`run`,a,...S.length>0?[`--`,...S]:[]];N&&Be.error(`[${n.name}] $ ${I} ${H.join(` `)}`),await spawnPrefixed(I,H,n.location,C?`[${n.name}] `:null)}function detectPackageManager$1(){let n=process.env.npm_config_user_agent??``;return n.startsWith(`yarn/`)?`yarn`:n.startsWith(`gjsify/`)?`gjsify`:`npm`}__name$1(detectPackageManager$1,`detectPackageManager`);function spawnPrefixed(n,a,S,C){let N=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`};return new Promise((F,I)=>{let H=spawn(n,a,{cwd:S,stdio:C?[`ignore`,`pipe`,`pipe`]:`inherit`,env:{...process.env,...N}});C&&H.stdout&&H.stderr&&(prefixLines(H.stdout,process.stdout,C),prefixLines(H.stderr,process.stderr,C)),H.on(`close`,S=>{S===0?F():I(Error(`${n} ${a.join(` `)} exited with code ${S}`))}),H.on(`error`,n=>I(n))})}function prefixLines(n,a,S){let C=``;n.setEncoding(`utf-8`),n.on(`data`,n=>{C+=n;let N;for(;(N=C.indexOf(`
797
797
  `))!==-1;)a.write(S+C.slice(0,N+1)),C=C.slice(N+1)}),n.on(`end`,()=>{C.length>0&&a.write(S+C+`
798
- `)})}Ve(),vx();const FE={command:`workspace <name> <script> [args..]`,description:"Run a workspace script (`yarn workspace <name> run <script>` equivalent).",builder:n=>n.positional(`name`,{description:"Workspace name (matches package.json `name` field).",type:`string`,demandOption:!0}).positional(`script`,{description:`Script name to run inside that workspace.`,type:`string`,demandOption:!0}).positional(`args`,{description:`Extra arguments forwarded to the script.`,type:`string`,array:!0}),handler:async n=>{let a=discoverWorkspaces(findWorkspaceRoot(process.cwd())??process.cwd()),S=a.find(a=>a.name===n.name);S||(Be.error(`gjsify workspace: no workspace named "${n.name}" — discovered ${a.length} workspace(s)`),process.exit(1)),typeof(S.manifest.scripts??{})[n.script]!=`string`&&(Be.error(`gjsify workspace: workspace "${n.name}" has no script "${n.script}"`),process.exit(1));let C=detectPackageManager(),N=C===`gjsify`?[`run`,n.script,...n.args??[]]:[`run`,n.script,...n.args&&n.args.length>0?[`--`,...n.args]:[]];await new Promise((n,a)=>{let F=spawn(C,N,{cwd:S.location,stdio:`inherit`,env:process.env});F.on(`close`,S=>{S===0?n():a(Error(`${C} ${N.join(` `)} exited with code ${S}`))}),F.on(`error`,a)}).catch(n=>{Be.error(n.message),process.exit(1)}),process.exit(0)}};function detectPackageManager(){let n=process.env.npm_config_user_agent??``;return n.startsWith(`yarn/`)?`yarn`:n.startsWith(`gjsify/`)?`gjsify`:`npm`}Ve(),zs(),Na(),Jo(),TE();const IE={command:`pack [path]`,description:`Produce an npm-compatible .tgz tarball for the workspace at <path> (default: cwd). Rewrites workspace:^/~/* deps to resolved versions.`,builder:n=>n.positional(`path`,{description:`Workspace path (default: cwd).`,type:`string`}).option(`pack-destination`,{description:`Directory to write the tarball into. Default: workspace cwd.`,type:`string`}).option(`json`,{description:"Emit pack metadata as JSON on stdout (mirrors `npm pack --json`).",type:`boolean`,default:!1}).option(`dry-run`,{description:`Compute everything but do not write the .tgz.`,type:`boolean`,default:!1}),handler:async n=>{let a=await packWorkspace(Po(n.path??process.cwd()),{destination:n[`pack-destination`],dryRun:n[`dry-run`]===!0});n.json?process.stdout.write(`${JSON.stringify([a],null,2)}\n`):process.stdout.write(`${a.filename}\n`)}};async function packWorkspace(n,a={}){let S=Lo(n,`package.json`);if(!existsSync(S))throw Error(`gjsify pack: no package.json at ${n}`);let C=readFileSync(S,`utf-8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:``,I=typeof N.version==`string`?N.version:`0.0.0`;if(!F)throw Error(`gjsify pack: package.json at ${n} has no "name"`);let H=a.skipWorkspaceRewrite?N:rewriteWorkspaceDeps(N,n),W=JSON.stringify(H,null,indentOf(C))+`
798
+ `)})}Ve(),vx();const FE={command:`workspace <name> <script> [args..]`,description:"Run a workspace script (`yarn workspace <name> run <script>` equivalent).",builder:n=>n.positional(`name`,{description:"Workspace name (matches package.json `name` field).",type:`string`,demandOption:!0}).positional(`script`,{description:`Script name to run inside that workspace.`,type:`string`,demandOption:!0}).positional(`args`,{description:`Extra arguments forwarded to the script.`,type:`string`,array:!0}),handler:async n=>{let a=discoverWorkspaces(findWorkspaceRoot(process.cwd())??process.cwd()),S=a.find(a=>a.name===n.name);S||(Be.error(`gjsify workspace: no workspace named "${n.name}" — discovered ${a.length} workspace(s)`),process.exit(1)),typeof(S.manifest.scripts??{})[n.script]!=`string`&&(Be.error(`gjsify workspace: workspace "${n.name}" has no script "${n.script}"`),process.exit(1));let C=detectPackageManager(),N=C===`gjsify`?[`run`,n.script,...n.args??[]]:[`run`,n.script,...n.args&&n.args.length>0?[`--`,...n.args]:[]],F=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`};await new Promise((n,a)=>{let I=spawn(C,N,{cwd:S.location,stdio:`inherit`,env:{...process.env,...F}});I.on(`close`,S=>{S===0?n():a(Error(`${C} ${N.join(` `)} exited with code ${S}`))}),I.on(`error`,a)}).catch(n=>{Be.error(n.message),process.exit(1)}),process.exit(0)}};function detectPackageManager(){let n=process.env.npm_config_user_agent??``;return n.startsWith(`yarn/`)?`yarn`:n.startsWith(`gjsify/`)?`gjsify`:`npm`}Ve(),zs(),Na(),Jo(),TE();const IE={command:`pack [path]`,description:`Produce an npm-compatible .tgz tarball for the workspace at <path> (default: cwd). Rewrites workspace:^/~/* deps to resolved versions.`,builder:n=>n.positional(`path`,{description:`Workspace path (default: cwd).`,type:`string`}).option(`pack-destination`,{description:`Directory to write the tarball into. Default: workspace cwd.`,type:`string`}).option(`json`,{description:"Emit pack metadata as JSON on stdout (mirrors `npm pack --json`).",type:`boolean`,default:!1}).option(`dry-run`,{description:`Compute everything but do not write the .tgz.`,type:`boolean`,default:!1}),handler:async n=>{let a=await packWorkspace(Po(n.path??process.cwd()),{destination:n[`pack-destination`],dryRun:n[`dry-run`]===!0});n.json?process.stdout.write(`${JSON.stringify([a],null,2)}\n`):process.stdout.write(`${a.filename}\n`)}};async function packWorkspace(n,a={}){let S=Lo(n,`package.json`);if(!existsSync(S))throw Error(`gjsify pack: no package.json at ${n}`);let C=readFileSync(S,`utf-8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:``,I=typeof N.version==`string`?N.version:`0.0.0`;if(!F)throw Error(`gjsify pack: package.json at ${n} has no "name"`);let H=a.skipWorkspaceRewrite?N:rewriteWorkspaceDeps(N,n),W=JSON.stringify(H,null,indentOf(C))+`
799
799
  `,K=collectFiles(n,N),q=[{name:`package/`,directory:!0,mode:493}],Y=[],X=0;for(let a of K){let S;S=a===`package.json`?new TextEncoder().encode(W):new Uint8Array(readFileSync(Lo(n,a)));let C=statSync(Lo(n,a)).mode&511;q.push({name:`package/${a}`,body:S,mode:C,mtime:0}),Y.push({path:a,size:S.byteLength,mode:C}),X+=S.byteLength}let te=await gzip(createTarball(q)),ne=`${F.startsWith(`@`)?F.slice(1).replace(`/`,`-`):F}-${I}.tgz`,re=createHash(`sha1`).update(te).digest(`hex`),ie=`sha512-${createHash(`sha512`).update(te).digest(`base64`)}`,ae=a.destination?Po(a.destination):n,oe=Lo(ae,ne);return a.dryRun||(mkdirSync(ae,{recursive:!0}),writeFileSync(oe,te)),{filename:ne,name:F,version:I,size:te.byteLength,unpackedSize:X,shasum:re,integrity:ie,entryCount:Y.length,files:Y,absolutePath:a.dryRun?null:oe}}function collectFiles(n,a){let S=forceIncluded(a),C=Array.isArray(a.files)?a.files.filter(n=>typeof n==`string`):null,N;N=C?expandFilesPatterns(n,C):walkAll(n);let F=loadIgnore(n),I=new Set;for(let n of N)F(n)||I.add(n);for(let a of S)existsSync(Lo(n,a))&&I.add(a);return[...I].sort()}const LE=new Set([`.git`,`.svn`,`.hg`,`.gitignore`,`.gitattributes`,`.npmrc`,`CVS`,`.DS_Store`,`node_modules`,`.npmignore`,`package-lock.json`,`gjsify-lock.json`,`yarn.lock`,`yarn-error.log`,`.yarn`,`.pnp.cjs`,`.pnp.loader.mjs`,`tsconfig.tsbuildinfo`]);function forceIncluded(n){let a=new Set;a.add(`package.json`);for(let n of[`README`,`README.md`,`LICENSE`,`LICENSE.md`,`NOTICE`,`NOTICE.md`])a.add(n);let S=typeof n.main==`string`?n.main:null;S&&a.add(S.replace(/^\.\//,``));let C=n.bin;if(typeof C==`string`)a.add(C.replace(/^\.\//,``));else if(C&&typeof C==`object`)for(let n of Object.values(C))typeof n==`string`&&a.add(n.replace(/^\.\//,``));return[...a]}function walkAll(n,a=``){let S=[],C=a?Lo(n,a):n,N;try{N=readdirSync(C,{withFileTypes:!0})}catch{return S}for(let C of N){if(LE.has(C.name)||C.name.startsWith(`.tsbuildinfo`))continue;let N=a?`${a}/${C.name}`:C.name;C.isDirectory()?S.push(...walkAll(n,N)):C.isFile()&&S.push(N)}return S}function expandFilesPatterns(n,a){let S=new Set;for(let C of a){let a=C.replace(/^\.\//,``).replace(/\/$/,``),N=Lo(n,a);if(!existsSync(N))continue;let F=statSync(N);if(F.isDirectory())for(let C of walkAll(n,a))S.add(C);else F.isFile()&&S.add(a);!existsSync(N)&&/[*?[]/.test(C)&&Be.warn(`gjsify pack: files entry "${C}" looks like a glob but glob expansion isn't implemented — pass literal files/dirs`)}return[...S]}function loadIgnore(n){let a=Lo(n,`.npmignore`),S=Lo(n,`.gitignore`),C=[],N=existsSync(a)?a:existsSync(S)?S:null;if(N){let n=readFileSync(N,`utf-8`).split(`
800
- `);for(let a of n){let n=a.trim();!n||n.startsWith(`#`)||n.startsWith(`!`)||C.push(globToRegex(n))}}return n=>{for(let a of C)if(a.test(n))return!0;return!1}}function globToRegex(n){let a=n.replace(/^\//,``);return a=a.replace(/[.+^${}()|[\]\\]/g,`\\$&`),a=a.replace(/\*\*/g,`__DOUBLESTAR__`).replace(/\*/g,`[^/]*`).replace(/__DOUBLESTAR__/g,`.*`),a=a.replace(/\?/g,`[^/]`),RegExp(`^${a}($|/)`)}function rewriteWorkspaceDeps(n,a){let S=findWorkspaceRoot(a);if(!S)return n;let C=new Map;for(let n of discoverWorkspaces(S))n.name&&n.version&&C.set(n.name,n.version);let N=JSON.parse(JSON.stringify(n));for(let n of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let a=N[n];if(a)for(let[n,F]of Object.entries(a)){if(typeof F!=`string`||!F.startsWith(`workspace:`))continue;let I=C.get(n);if(!I)throw Error(`gjsify pack: ${N.name} declares workspace:^ on ${n} but no sibling workspace with that name exists in the monorepo at ${S}`);let H=F.slice(10);H===`*`||H===``?a[n]=I:H===`^`||H===`~`?a[n]=`${H}${I}`:a[n]=H}}return N}function indentOf(n){let a=n.match(/\n([ \t]+)"/);return a?a[1]:` `}var OidcUnavailableError=class extends Error{reason;constructor(n,a){super(n),this.reason=a,this.name=`OidcUnavailableError`}},OidcExchangeError=class extends Error{status;body;packageName;constructor(n,a,S,C){super(n),this.status=a,this.body=S,this.packageName=C,this.name=`OidcExchangeError`}};function hasGithubOidcEnv(){return!!(process.env.ACTIONS_ID_TOKEN_REQUEST_URL&&process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN)}async function fetchGithubOidcToken(n,a){let S=process.env.ACTIONS_ID_TOKEN_REQUEST_URL,C=process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!S||!C)throw new OidcUnavailableError("GitHub Actions OIDC env vars (ACTIONS_ID_TOKEN_REQUEST_{URL,TOKEN}) not set. The calling workflow needs `permissions: id-token: write`.",`no-env`);let N=new URL(S);N.searchParams.set(`audience`,n),a?.(`gjsify oidc: GET ${N.href.replace(C,`<bearer>`)}`);let F=await fetch(N.href,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${C}`}});if(!F.ok){let n=await F.text().catch(()=>`<no body>`);throw new OidcUnavailableError(`Failed to fetch GitHub OIDC id_token: ${F.status} ${F.statusText} — ${n.slice(0,200)}`,`fetch-id-token`)}let I=await F.json().catch(()=>({}));if(!I.value)throw new OidcUnavailableError("GitHub OIDC response missing `value` field",`no-id-token`);return I.value}async function exchangeOidcForNpmToken(n){let{packageName:a,registry:S,idToken:C,log:N}=n,F=`${S.endsWith(`/`)?S.slice(0,-1):S}/-/npm/v1/oidc/token/exchange/package/${a.startsWith(`@`)?(()=>{let n=a.indexOf(`/`),S=a.slice(1,n),C=a.slice(n+1);return`@${encodeURIComponent(S)}%2f${encodeURIComponent(C)}`})():encodeURIComponent(a)}`;N?.(`gjsify oidc: POST ${F}`);let I=await fetch(F,{method:`POST`,headers:{Authorization:`Bearer ${C}`,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`}),H=await I.text().catch(()=>``);if(!I.ok)throw new OidcExchangeError(`npm OIDC token exchange failed for ${a}: ${I.status} ${I.statusText} — ${H.slice(0,300)}`,I.status,H,a);let W;try{W=JSON.parse(H)}catch{throw new OidcExchangeError(`npm OIDC token exchange returned non-JSON body for ${a}: ${H.slice(0,200)}`,I.status,H,a)}if(!W.token)throw new OidcExchangeError(`npm OIDC token exchange returned no \`token\` field for ${a}`,I.status,H,a);return W.token}async function getNpmTrustedToken(n){let a=`npm:${new URL(n.registry).hostname}`,S=await fetchGithubOidcToken(a,n.log);return{token:await exchangeOidcForNpmToken({...n,idToken:S}),audience:a}}Ve(),zs(),sp(),Jo(),bE();const RE={command:`publish [path]`,description:"Pack + upload the workspace at <path> (default: cwd) to its npm registry. Drop-in for `npm publish` with workspace:^ rewrite handled automatically.",builder:n=>n.positional(`path`,{description:`Workspace path (default: cwd).`,type:`string`}).option(`tag`,{description:`Dist-tag to publish under. Default: latest.`,type:`string`,default:`latest`}).option(`access`,{description:"Package access — `public` or `restricted` (required for first publish of scoped packages on the public registry).",type:`string`}).option(`tolerate-republish`,{description:"Treat a 409 conflict (version already published) as success. Matches yarn `--tolerate-republish`.",type:`boolean`,default:!1}).option(`provenance`,{description:`Pass-through flag — recorded in the payload but no signing happens (gjsify doesn't ship a sigstore signer yet).`,type:`boolean`,default:!1}).option(`dry-run`,{description:`Pack only, do not PUT.`,type:`boolean`,default:!1}).option(`json`,{description:`Emit publish metadata as JSON on stdout.`,type:`boolean`,default:!1}).option(`trusted`,{description:"Authenticate via npm Trusted Publishing (OIDC): exchange the GitHub Actions id-token for a short-lived npm token. Pass `--trusted` to force this mode (errors if env vars missing). Omit to auto-detect: OIDC is used iff `ACTIONS_ID_TOKEN_REQUEST_URL`+`_TOKEN` are set AND no `_authToken` is present in the resolved npmrc; otherwise the long-lived token path is used. Requires the calling workflow to declare `permissions: id-token: write` AND the target package to have a Trusted Publisher configured on npmjs.com.",type:`boolean`,default:void 0}).option(`check-trusted`,{description:"Diagnostic mode: perform the OIDC id-token request + npm token exchange, report success/failure, then exit WITHOUT publishing. Useful as a bulk-verifier (e.g. via `gjsify foreach publish --check-trusted`) to confirm Trusted Publisher config across many packages.",type:`boolean`,default:!1}),handler:async n=>{let a=Po(n.path??process.cwd()),S=n.tag??`latest`,C=n.access,N=n[`tolerate-republish`]===!0,F=n.provenance===!0,I=n[`dry-run`]===!0,H=n[`check-trusted`]===!0,W=n.trusted,K=!!process.env.GJSIFY_PUBLISH_DEBUG;if(F&&Be.warn(`gjsify publish: --provenance recorded but not signed (no sigstore integration yet).`),H){let S=Lo(a,`package.json`),C=JSON.parse(readFileSync(S,`utf-8`));if(typeof C.name!=`string`&&(process.stderr.write(`gjsify publish --check-trusted: ${S} has no \`name\` field\n`),process.exit(2)),C.private===!0){let a={ok:!0,action:`check-trusted`,name:C.name,skipped:`private`};n.json?process.stdout.write(`${JSON.stringify(a)}\n`):process.stdout.write(`- ${C.name}: skipped (private package)\n`);return}let N=await loadNpmrc(a),F=process.env.npm_config_registry??registryFor(C.name,N)??yE;try{await getNpmTrustedToken({packageName:C.name,registry:F,log:K?n=>Be.error(n):void 0});let a={ok:!0,action:`check-trusted`,name:C.name,registry:F};n.json?process.stdout.write(`${JSON.stringify(a)}\n`):process.stdout.write(`✓ ${C.name}: trusted publisher OK\n`);return}catch(a){handleOidcFailure(a,C.name,n.json===!0);return}}let q=await packWorkspace(a,{dryRun:!0}),Y=await packWorkspaceToBytes(a),X=readFileSync(Lo(a,`package.json`),`utf-8`),te=await loadRewrittenManifest(a,JSON.parse(X));if(I){let a={ok:!0,action:`dry-run`,name:q.name,version:q.version,filename:q.filename,size:q.size,shasum:q.shasum,integrity:q.integrity};n.json?process.stdout.write(`${JSON.stringify(a,null,2)}\n`):process.stdout.write(`+ ${q.name}@${q.version} (dry-run, ${q.size} bytes, ${q.entryCount} files)\n`);return}let ne=await loadNpmrc(a),re=process.env.npm_config_registry??registryFor(q.name,ne)??yE,ie=re.endsWith(`/`)?re.slice(0,-1):re,ae=`${ie}/${q.name.startsWith(`@`)?(()=>{let n=q.name.indexOf(`/`),a=q.name.slice(1,n),S=q.name.slice(n+1);return`@${encodeURIComponent(a)}%2f${encodeURIComponent(S)}`})():encodeURIComponent(q.name)}`,oe=`${q.name.includes(`/`)?q.name.slice(q.name.indexOf(`/`)+1):q.name}-${q.version}.tgz`,Z=buildPublishPayload({pkg:te,tag:S,access:C,tarballBytes:Y,tarballUrl:`${ie}/${q.name}/-/${oe}`,packed:{...q,wireFilename:oe},provenance:F}),se=buildHeaders(ae,{npmrc:ne});se[`content-type`]=`application/json`,se.accept=`*/*`;let ce=W===!0||W===void 0&&hasGithubOidcEnv()&&!process.env.NODE_AUTH_TOKEN,le=`token`;if(ce)try{let{token:n,audience:a}=await getNpmTrustedToken({packageName:q.name,registry:re,log:K?n=>Be.error(n):void 0});se.authorization=`Bearer ${n}`,le=`oidc`,K&&Be.error(`gjsify publish: OIDC token obtained (audience=${a})`)}catch(a){if(W===!0&&(handleOidcFailure(a,q.name,n.json===!0),process.exit(1)),K){let n=a instanceof Error?a.message:String(a);Be.error(`gjsify publish: OIDC auto-detect failed (${n}) — falling back to token auth`)}}K&&(Be.error(`gjsify publish: PUT ${ae} (${q.name}@${q.version})`),Be.error(` auth-mode: ${le}`),Be.error(` authorization: ${se.authorization?`(set)`:`(none)`}`),Be.error(` payload size: ${JSON.stringify(Z).length} bytes`));let ue=await fetch(ae,{method:`PUT`,headers:se,body:JSON.stringify(Z)});if(ue.ok){let a={ok:!0,name:q.name,version:q.version,filename:q.filename,size:q.size,integrity:q.integrity,tag:S,registry:ie};n.json?process.stdout.write(`${JSON.stringify(a,null,2)}\n`):process.stdout.write(`+ ${q.name}@${q.version}\n`);return}let de=await ue.text().catch(()=>`<no body>`);if(ue.status===409&&N){let a={ok:!0,action:`republish-tolerated`,name:q.name,version:q.version,status:409};n.json?process.stdout.write(`${JSON.stringify(a,null,2)}\n`):process.stdout.write(`= ${q.name}@${q.version} (already published, tolerated)\n`);return}Be.error(`gjsify publish: ${q.name}@${q.version} — ${ue.status} ${ue.statusText}`),Be.error(de),process.exit(1)}};async function packWorkspaceToBytes(n){let a=`/tmp/gjsify-publish-${process.pid}-${Date.now()}`,S=await packWorkspace(n,{destination:a,dryRun:!1});if(!S.absolutePath)throw Error(`gjsify publish: pack did not produce a file`);let C=new Uint8Array(readFileSync(S.absolutePath));try{(await Promise.resolve().then(()=>(zs(),Is))).rmSync(S.absolutePath)}catch{}try{(await Promise.resolve().then(()=>(zs(),Is))).rmdirSync(a)}catch{}return C}async function loadRewrittenManifest(n,a){let S=`/tmp/gjsify-publish-manifest-${process.pid}-${Date.now()}.tgz`,C=await packWorkspace(n,{destination:S.substring(0,S.lastIndexOf(`/`)),dryRun:!1}),{rmSync:N}=await Promise.resolve().then(()=>(zs(),Is));if(!C.absolutePath)throw Error(`gjsify publish: pack did not produce a file`);let{gunzip:F,parseTar:I}=await Promise.resolve().then(()=>(TE(),wE)),H=new Uint8Array(readFileSync(C.absolutePath));N(C.absolutePath);let W=await F(H);for(let n of I(W))if(n.name===`package/package.json`&&n.body)return JSON.parse(new TextDecoder().decode(n.body));return a}async function loadNpmrc(n){let a=[],S=Lo(n,`.npmrc`);existsSync(S)&&a.push(readFileSync(S,`utf-8`));let C=process.env.NPM_CONFIG_USERCONFIG;if(C&&existsSync(C))a.push(readFileSync(C,`utf-8`));else{let n=Lo(homedir(),`.npmrc`);existsSync(n)&&a.push(readFileSync(n,`utf-8`))}return parseNpmrc(a.join(`
800
+ `);for(let a of n){let n=a.trim();!n||n.startsWith(`#`)||n.startsWith(`!`)||C.push(globToRegex(n))}}return n=>{for(let a of C)if(a.test(n))return!0;return!1}}function globToRegex(n){let a=n.replace(/^\//,``);return a=a.replace(/[.+^${}()|[\]\\]/g,`\\$&`),a=a.replace(/\*\*/g,`__DOUBLESTAR__`).replace(/\*/g,`[^/]*`).replace(/__DOUBLESTAR__/g,`.*`),a=a.replace(/\?/g,`[^/]`),RegExp(`^${a}($|/)`)}function rewriteWorkspaceDeps(n,a){let S=findWorkspaceRoot(a);if(!S)return n;let C=new Map;for(let n of discoverWorkspaces(S))n.name&&n.version&&C.set(n.name,n.version);let N=JSON.parse(JSON.stringify(n));for(let n of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let a=N[n];if(a)for(let[n,F]of Object.entries(a)){if(typeof F!=`string`||!F.startsWith(`workspace:`))continue;let I=C.get(n);if(!I)throw Error(`gjsify pack: ${N.name} declares workspace:^ on ${n} but no sibling workspace with that name exists in the monorepo at ${S}`);let H=F.slice(10);H===`*`||H===``?a[n]=I:H===`^`||H===`~`?a[n]=`${H}${I}`:a[n]=H}}return N}function indentOf(n){let a=n.match(/\n([ \t]+)"/);return a?a[1]:` `}var OidcUnavailableError=class extends Error{reason;constructor(n,a){super(n),this.reason=a,this.name=`OidcUnavailableError`}},OidcExchangeError=class extends Error{status;body;packageName;constructor(n,a,S,C){super(n),this.status=a,this.body=S,this.packageName=C,this.name=`OidcExchangeError`}};function hasGithubOidcEnv(){return!!(process.env.ACTIONS_ID_TOKEN_REQUEST_URL&&process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN)}async function fetchGithubOidcToken(n,a){let S=process.env.ACTIONS_ID_TOKEN_REQUEST_URL,C=process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!S||!C)throw new OidcUnavailableError("GitHub Actions OIDC env vars (ACTIONS_ID_TOKEN_REQUEST_{URL,TOKEN}) not set. The calling workflow needs `permissions: id-token: write`.",`no-env`);let N=new URL(S);N.searchParams.set(`audience`,n),a?.(`gjsify oidc: GET ${N.href.replace(C,`<bearer>`)}`);let F=await fetch(N.href,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${C}`}});if(!F.ok){let n=await F.text().catch(()=>`<no body>`);throw new OidcUnavailableError(`Failed to fetch GitHub OIDC id_token: ${F.status} ${F.statusText} — ${n.slice(0,200)}`,`fetch-id-token`)}let I=await F.json().catch(()=>({}));if(!I.value)throw new OidcUnavailableError("GitHub OIDC response missing `value` field",`no-id-token`);return I.value}async function exchangeOidcForNpmToken(n){let{packageName:a,registry:S,idToken:C,log:N}=n,F=`${S.endsWith(`/`)?S.slice(0,-1):S}/-/npm/v1/oidc/token/exchange/package/${a.startsWith(`@`)?(()=>{let n=a.indexOf(`/`),S=a.slice(1,n),C=a.slice(n+1);return`@${encodeURIComponent(S)}%2f${encodeURIComponent(C)}`})():encodeURIComponent(a)}`;N?.(`gjsify oidc: POST ${F}`);let I=await fetch(F,{method:`POST`,headers:{Authorization:`Bearer ${C}`,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`}),H=await I.text().catch(()=>``);if(!I.ok)throw new OidcExchangeError(`npm OIDC token exchange failed for ${a}: ${I.status} ${I.statusText} — ${H.slice(0,300)}`,I.status,H,a);let W;try{W=JSON.parse(H)}catch{throw new OidcExchangeError(`npm OIDC token exchange returned non-JSON body for ${a}: ${H.slice(0,200)}`,I.status,H,a)}if(!W.token)throw new OidcExchangeError(`npm OIDC token exchange returned no \`token\` field for ${a}`,I.status,H,a);return W.token}async function getNpmTrustedToken(n){let a=`npm:${new URL(n.registry).hostname}`,S=await fetchGithubOidcToken(a,n.log);return{token:await exchangeOidcForNpmToken({...n,idToken:S}),audience:a}}Ve(),zs(),sp(),Jo(),bE();const RE={command:`publish [path]`,description:"Pack + upload the workspace at <path> (default: cwd) to its npm registry. Drop-in for `npm publish` with workspace:^ rewrite handled automatically.",builder:n=>n.positional(`path`,{description:`Workspace path (default: cwd).`,type:`string`}).option(`tag`,{description:`Dist-tag to publish under. Default: latest.`,type:`string`,default:`latest`}).option(`access`,{description:"Package access — `public` or `restricted` (required for first publish of scoped packages on the public registry).",type:`string`}).option(`tolerate-republish`,{description:'Treat "version already published" as success — covers both classic 409 Conflict and the npm OIDC-path 403 Forbidden + `"previously published"` body shape. Matches yarn `--tolerate-republish`.',type:`boolean`,default:!1}).option(`provenance`,{description:`Pass-through flag — recorded in the payload but no signing happens (gjsify doesn't ship a sigstore signer yet).`,type:`boolean`,default:!1}).option(`dry-run`,{description:`Pack only, do not PUT.`,type:`boolean`,default:!1}).option(`json`,{description:`Emit publish metadata as JSON on stdout.`,type:`boolean`,default:!1}).option(`trusted`,{description:"Authenticate via npm Trusted Publishing (OIDC): exchange the GitHub Actions id-token for a short-lived npm token. Pass `--trusted` to force this mode (errors if env vars missing). Omit to auto-detect: OIDC is used iff `ACTIONS_ID_TOKEN_REQUEST_URL`+`_TOKEN` are set AND no `_authToken` is present in the resolved npmrc; otherwise the long-lived token path is used. Requires the calling workflow to declare `permissions: id-token: write` AND the target package to have a Trusted Publisher configured on npmjs.com.",type:`boolean`,default:void 0}).option(`check-trusted`,{description:"Diagnostic mode: perform the OIDC id-token request + npm token exchange, report success/failure, then exit WITHOUT publishing. Useful as a bulk-verifier (e.g. via `gjsify foreach publish --check-trusted`) to confirm Trusted Publisher config across many packages.",type:`boolean`,default:!1}),handler:async n=>{let a=Po(n.path??process.cwd()),S=n.tag??`latest`,C=n.access,N=n[`tolerate-republish`]===!0,F=n.provenance===!0,I=n[`dry-run`]===!0,H=n[`check-trusted`]===!0,W=n.trusted,K=!!process.env.GJSIFY_PUBLISH_DEBUG;if(F&&Be.warn(`gjsify publish: --provenance recorded but not signed (no sigstore integration yet).`),H){let S=Lo(a,`package.json`),C=JSON.parse(readFileSync(S,`utf-8`));if(typeof C.name!=`string`&&(process.stderr.write(`gjsify publish --check-trusted: ${S} has no \`name\` field\n`),process.exit(2)),C.private===!0){let a={ok:!0,action:`check-trusted`,name:C.name,skipped:`private`};n.json?process.stdout.write(`${JSON.stringify(a)}\n`):process.stdout.write(`- ${C.name}: skipped (private package)\n`);return}let N=await loadNpmrc(a),F=process.env.npm_config_registry??registryFor(C.name,N)??yE;try{await getNpmTrustedToken({packageName:C.name,registry:F,log:K?n=>Be.error(n):void 0});let a={ok:!0,action:`check-trusted`,name:C.name,registry:F};n.json?process.stdout.write(`${JSON.stringify(a)}\n`):process.stdout.write(`✓ ${C.name}: trusted publisher OK\n`);return}catch(a){handleOidcFailure(a,C.name,n.json===!0);return}}let q=await packWorkspace(a,{dryRun:!0}),Y=await packWorkspaceToBytes(a),X=readFileSync(Lo(a,`package.json`),`utf-8`),te=await loadRewrittenManifest(a,JSON.parse(X));if(I){let a={ok:!0,action:`dry-run`,name:q.name,version:q.version,filename:q.filename,size:q.size,shasum:q.shasum,integrity:q.integrity};n.json?process.stdout.write(`${JSON.stringify(a,null,2)}\n`):process.stdout.write(`+ ${q.name}@${q.version} (dry-run, ${q.size} bytes, ${q.entryCount} files)\n`);return}let ne=await loadNpmrc(a),re=process.env.npm_config_registry??registryFor(q.name,ne)??yE,ie=re.endsWith(`/`)?re.slice(0,-1):re,ae=`${ie}/${q.name.startsWith(`@`)?(()=>{let n=q.name.indexOf(`/`),a=q.name.slice(1,n),S=q.name.slice(n+1);return`@${encodeURIComponent(a)}%2f${encodeURIComponent(S)}`})():encodeURIComponent(q.name)}`,oe=`${q.name.includes(`/`)?q.name.slice(q.name.indexOf(`/`)+1):q.name}-${q.version}.tgz`,Z=buildPublishPayload({pkg:te,tag:S,access:C,tarballBytes:Y,tarballUrl:`${ie}/${q.name}/-/${oe}`,packed:{...q,wireFilename:oe},provenance:F}),se=buildHeaders(ae,{npmrc:ne});se[`content-type`]=`application/json`,se.accept=`*/*`;let ce=W===!0||W===void 0&&hasGithubOidcEnv()&&!process.env.NODE_AUTH_TOKEN,le=`token`;if(ce)try{let{token:n,audience:a}=await getNpmTrustedToken({packageName:q.name,registry:re,log:K?n=>Be.error(n):void 0});se.authorization=`Bearer ${n}`,le=`oidc`,K&&Be.error(`gjsify publish: OIDC token obtained (audience=${a})`)}catch(a){if(W===!0&&(handleOidcFailure(a,q.name,n.json===!0),process.exit(1)),K){let n=a instanceof Error?a.message:String(a);Be.error(`gjsify publish: OIDC auto-detect failed (${n}) — falling back to token auth`)}}K&&(Be.error(`gjsify publish: PUT ${ae} (${q.name}@${q.version})`),Be.error(` auth-mode: ${le}`),Be.error(` authorization: ${se.authorization?`(set)`:`(none)`}`),Be.error(` payload size: ${JSON.stringify(Z).length} bytes`));let ue=await fetch(ae,{method:`PUT`,headers:se,body:JSON.stringify(Z)});if(ue.ok){let a={ok:!0,name:q.name,version:q.version,filename:q.filename,size:q.size,integrity:q.integrity,tag:S,registry:ie};n.json?process.stdout.write(`${JSON.stringify(a,null,2)}\n`):process.stdout.write(`+ ${q.name}@${q.version}\n`);return}let de=await ue.text().catch(()=>`<no body>`);if((ue.status===409||ue.status===403&&/previously published/i.test(de))&&N){let a={ok:!0,action:`republish-tolerated`,name:q.name,version:q.version,status:ue.status};n.json?process.stdout.write(`${JSON.stringify(a,null,2)}\n`):process.stdout.write(`= ${q.name}@${q.version} (already published, tolerated)\n`);return}Be.error(`gjsify publish: ${q.name}@${q.version} — ${ue.status} ${ue.statusText}`),Be.error(de),process.exit(1)}};async function packWorkspaceToBytes(n){let a=`/tmp/gjsify-publish-${process.pid}-${Date.now()}`,S=await packWorkspace(n,{destination:a,dryRun:!1});if(!S.absolutePath)throw Error(`gjsify publish: pack did not produce a file`);let C=new Uint8Array(readFileSync(S.absolutePath));try{(await Promise.resolve().then(()=>(zs(),Is))).rmSync(S.absolutePath)}catch{}try{(await Promise.resolve().then(()=>(zs(),Is))).rmdirSync(a)}catch{}return C}async function loadRewrittenManifest(n,a){let S=`/tmp/gjsify-publish-manifest-${process.pid}-${Date.now()}.tgz`,C=await packWorkspace(n,{destination:S.substring(0,S.lastIndexOf(`/`)),dryRun:!1}),{rmSync:N}=await Promise.resolve().then(()=>(zs(),Is));if(!C.absolutePath)throw Error(`gjsify publish: pack did not produce a file`);let{gunzip:F,parseTar:I}=await Promise.resolve().then(()=>(TE(),wE)),H=new Uint8Array(readFileSync(C.absolutePath));N(C.absolutePath);let W=await F(H);for(let n of I(W))if(n.name===`package/package.json`&&n.body)return JSON.parse(new TextDecoder().decode(n.body));return a}async function loadNpmrc(n){let a=[],S=Lo(n,`.npmrc`);existsSync(S)&&a.push(readFileSync(S,`utf-8`));let C=process.env.NPM_CONFIG_USERCONFIG;if(C&&existsSync(C))a.push(readFileSync(C,`utf-8`));else{let n=Lo(homedir(),`.npmrc`);existsSync(n)&&a.push(readFileSync(n,`utf-8`))}return parseNpmrc(a.join(`
801
801
  `).replace(/\$\{([A-Z_][A-Z0-9_]*)\}/gi,(n,a)=>process.env[a]??``))}function buildPublishPayload(n){let{pkg:a,tag:S,access:C,tarballBytes:N,tarballUrl:F,packed:I,provenance:H}=n,W={...a,_id:`${I.name}@${I.version}`,dist:{integrity:I.integrity,shasum:I.shasum,tarball:F}};H&&(W._hasShrinkwrap=!1);let K={_id:I.name,name:I.name,description:typeof a.description==`string`?a.description:``,"dist-tags":{[S]:I.version},versions:{[I.version]:W},readme:``,_attachments:{[I.wireFilename]:{content_type:`application/octet-stream`,data:base64Encode(N),length:N.byteLength}}};return C&&(K.access=C),K}function base64Encode(n){let a=``,S=32768;for(let C=0;C<n.length;C+=S)a+=String.fromCharCode(...n.subarray(C,C+S));return btoa(a)}function handleOidcFailure(n,a,S){if(n instanceof OidcUnavailableError){let C=`gjsify publish: OIDC not available — ${n.message}`;S?process.stdout.write(`${JSON.stringify({ok:!1,name:a,error:`oidc-unavailable`,reason:n.reason,message:n.message})}\n`):process.stderr.write(`${C}\n`);return}if(n instanceof OidcExchangeError){let C=n.status===401||n.status===403?`npm rejected the OIDC exchange (${n.status}) — check that ${a} has a Trusted Publisher configured at https://www.npmjs.com/package/${encodeURIComponent(a)}/access pointing at this workflow.`:n.message;S?process.stdout.write(`${JSON.stringify({ok:!1,name:a,error:`oidc-exchange`,status:n.status,body:n.body,message:n.message})}\n`):process.stderr.write(`✗ ${a}: ${C}\n`);return}let C=n instanceof Error?n.message:String(n);S?process.stdout.write(`${JSON.stringify({ok:!1,name:a,error:`unknown`,message:C})}\n`):process.stderr.write(`✗ ${a}: ${C}\n`)}Ve(),zs(),Jo(),nn(),bE();const zE=`@gjsify/cli`,BE={command:`self-update`,description:`Update the installed ${zE} 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=Lo(Lo(a.prefix,`node_modules`,zE),`package.json`),C=readCurrentVersion(),N=existsSync(S);Be.log(`Current ${zE}: v${C??`(unknown)`}`),N||Be.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`),Be.log(`Fetching dist-tags for ${zE}@${n.tag} ...`);let F;try{F=await fetchPackument(zE)}catch(n){let a=n instanceof Error?n.message:String(n);Be.error(`Failed to fetch packument: ${a}`),process.exit(1);return}let I=resolveTag(F,n.tag);if(!I){Be.error(`Unknown dist-tag '${n.tag}' on ${zE}. Known tags: ${Object.keys(F[`dist-tags`]??{}).join(`, `)||`(none)`}`),process.exit(1);return}if(Be.log(`Latest matching --tag ${n.tag}: v${I}`),C===I&&!n.force){Be.log(`Already up to date (v${I}).`),n.check||Be.log(`Run with --force to reinstall anyway.`);return}if(n.check){Be.log(C?`Update available: v${C} → v${I}`:`Install required: → v${I}`),process.exit(1);return}Be.log(`Installing ${zE}@${I} ...`),await installPackages({prefix:a.prefix,specs:[`${zE}@${I}`],verbose:!1});let H=linkGlobalBins([zE],a);if(H.length===0)Be.warn("self-update: install completed but no bins were linked — package.json may be missing a `bin` field.");else for(let n of H)Be.log(` • ${n.link} → ${n.target}`);Be.log(`\nUpdated ${zE} to v${I}.`)}};function readCurrentVersion(){try{let n=Bo(Po(fileURLToPath(import.meta.url)));for(let a=0;a<8&&n!==Bo(n);a++){let a=Lo(n,`package.json`);if(existsSync(a)){let n=JSON.parse(readFileSync(a,`utf-8`));if(n.name===zE&&typeof n.version==`string`)return n.version}n=Bo(n)}}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}Ve(),zs(),Jo();function loadInstallerTemplate(){return readFileSync(new URL(`../templates/install.mjs.tmpl`,import.meta.url),`utf-8`)}const VE={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=Po(process.cwd(),n.output);if(existsSync(a)&&!n.force){Be.error(`${n.output} already exists. Re-run with --force to overwrite.`),process.exit(1);return}let S=Po(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){Be.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}),Be.log(`Wrote ${n.output} (target=${N}, bin=${F}).`),Be.log(``),Be.log(`Install one-liner for your README:`),Be.log(` curl -fsSL https://github.com/<you>/<repo>/raw/main/${n.output} -o /tmp/i.mjs \\`),Be.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}Ve(),zs(),Jo();const HE={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){Be.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`;Be.log(`${N} ← ${a.prefix}`),Be.log(`${` `.repeat(N.length)} bins ← ${a.binDir}`);let F=!1;for(let N of n.packages){let n=specToPackageName(N),I=Lo(a.prefix,`node_modules`,n);if(!existsSync(I)){Be.warn(` ✗ ${n} — not installed at ${I}`);continue}let H=findBinShimsForPackage(a.binDir,I,C);if(S){Be.log(` • would remove ${I}`);for(let n of H)Be.log(` • would remove ${n}`)}else{rmSync(I,{recursive:!0,force:!0}),Be.log(` • removed ${I}`);for(let n of H)unlinkSync(n),Be.log(` • removed ${n}`)}F=!0}F||(Be.error(`
802
802
  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=Lo(n,F);try{if(!statSync(N).isFile())continue;let n=readFileSync(N,`utf-8`);if(!n.startsWith(`#!/bin/sh`))continue;let S=n.split(`
803
803
  `).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&&Be.warn(` ? could not inspect ${N}: ${n.message}`)}}return C}Ve(),zs(),Jo();const UE={command:`format [paths..]`,description:`Format source files via Biome (native binary spawn — no Node launcher).`,builder:n=>n.positional(`paths`,{description:"Files or directories to format. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Modify files in place (default: stdout / report).`,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 a biome.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`init`,{description:`Write a recommended biome.json into cwd (skips if one exists; --force to overwrite).`,type:`boolean`,default:!1}).option(`force`,{description:`Overwrite an existing biome.json with --init.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo the resolved biome binary + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd();if(n.init){await handleInit({cwd:a,force:n.force??!1});return}let S=n.paths?.length?n.paths:[`.`],C=[`format`];n.write&&!n.check&&C.push(`--write`);let N=n.configPath??findBiomeConfig(a)??void 0;N&&C.push(`--config-path=${Po(N,`..`)}`),C.push(...S);try{let S=await runBiome(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof BiomeNotFoundError){printBiomeNotFound(n),process.exitCode=1;return}throw n}}};async function handleInit({cwd:n,force:a}){let S=Po(n,`biome.json`);if(existsSync(S)&&!a){Be.log(`[gjsify format] biome.json exists at ${S} — pass --force to overwrite.`),process.exitCode=0;return}writeFileSync(S,loadBiomeTemplate(),`utf-8`),Be.log(`[gjsify format] wrote ${S}`),Be.log("[gjsify format] Run `gjsify format --write .` to apply the formatter to the project.")}Jo();const WE={command:`lint [paths..]`,description:`Run Biome lint diagnostics (native binary spawn — no Node launcher).`,builder:n=>n.positional(`paths`,{description:"Files or directories to lint. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Apply safe lint fixes in place.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to a biome.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved biome binary + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=[`lint`];n.write&&C.push(`--write`);let N=n.configPath??findBiomeConfig(a)??void 0;N&&C.push(`--config-path=${Po(N,`..`)}`),C.push(...S);try{let S=await runBiome(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof BiomeNotFoundError){printBiomeNotFound(n),process.exitCode=1;return}throw n}}};Jo();const GE={command:`fix [paths..]`,description:`Run Biome check --write — format + safe-lint-fix + organize-imports 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 a biome.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved biome binary + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=[`check`];n.write!==!1&&C.push(`--write`);let N=n.configPath??findBiomeConfig(a)??void 0;N&&C.push(`--config-path=${Po(N,`..`)}`),C.push(...S);try{let S=await runBiome(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof BiomeNotFoundError){printBiomeNotFound(n),process.exitCode=1;return}throw n}}};Ds();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})}Ve(),zs(),Jo(),sp(),vE(),bE();const KE={command:`upgrade`,description:"Check the npm registry for newer versions of declared dependencies and update package.json. Interactive by default; `--latest` / `--minor` / `--patch` switch to non-interactive bulk-update mode.",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 packages whose name matches this substring (case-insensitive). Repeatable; comma-separated values are split.`,type:`string`}).option(`dry-run`,{description:`Print the upgrade plan without writing package.json.`,type:`boolean`,default:!1}).option(`cwd`,{description:`Project directory. Default: process.cwd().`,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=Po(n.cwd??process.cwd()),S=Lo(a,`package.json`);if(!existsSync(S))throw Error(`[gjsify upgrade] no package.json at ${S}`);let C=readFileSync(S,`utf-8`),N=JSON.parse(C),F=collectExternalDeps(N,n.filter?n.filter.split(`,`).map(n=>n.trim().toLowerCase()).filter(Boolean):[]);if(F.length===0){Be.log(`[gjsify upgrade] no external npm dependencies to check.`);return}let I=await loadNpmrcLight(a),H=n.latest?`latest`:n.minor?`minor`:n.patch?`patch`:`interactive`;Be.log(`[gjsify upgrade] checking ${F.length} dependencies against ${I.registry}…`);let W=await resolveCandidates(F,I,n.verbose??!1,H);if(W.length===0){Be.log(`✅ all dependencies are up to date`);return}printTable(W);let K;if(H===`interactive`&&!n.yes?K=await promptSelection(W):(n.yes&&H===`interactive`&&Be.log(`[gjsify upgrade] -y / --yes: selecting all`),K=W),K.length===0){Be.log(`[gjsify upgrade] nothing selected; package.json unchanged.`);return}if(n.dryRun){Be.log(`[gjsify upgrade] --dry-run: would update ${K.length} dependencies (no write).`);return}writePackageJson(S,C,N,K),Be.log(`✏️ updated ${K.length} dependencies in ${S}. Run \`gjsify install\` to apply.`)}},qE=[`dependencies`,`devDependencies`,`optionalDependencies`,`peerDependencies`];function collectExternalDeps(n,a){let S=[];for(let C of qE){let N=n[C];if(!(!N||typeof N!=`object`))for(let[n,F]of Object.entries(N)){if(typeof F!=`string`||a.length&&!a.some(a=>n.toLowerCase().includes(a))||F.startsWith(`workspace:`)||F.startsWith(`file:`)||F.startsWith(`link:`)||F.startsWith(`git+`)||F.startsWith(`git:`)||F.startsWith(`http`)||F.startsWith(`npm:`)||F===`*`||F===`latest`)continue;let{prefix:N,version:I}=splitRange(F);S.push({name:n,field:C,currentRange:F,currentVersion:I,prefix:N})}}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}}async function resolveCandidates(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&&Be.warn(` ${H.name}: no dist-tags.latest, skipping`);continue}if(!H.currentVersion){S&&Be.warn(` ${H.name}: unable to parse current range "${H.currentRange}"`);continue}let F=classifyDiff(H.currentVersion,n);if(F===`none`||C===`minor`&&F===`major`||C===`patch`&&(F===`major`||F===`minor`))continue;N.push({...H,latestVersion:n,diff:F})}catch(n){S&&Be.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 JE={reset:`\x1B[0m`,bold:`\x1B[1m`,dim:`\x1B[2m`,red:`\x1B[31m`,yellow:`\x1B[33m`,green:`\x1B[32m`,cyan:`\x1B[36m`};function colorForDiff(n){switch(n){case`major`:return JE.red;case`minor`:return JE.yellow;case`patch`:return JE.green;case`prerelease`:return JE.cyan;default:return``}}function printTable(n){let a=Math.max(...n.map(n=>n.name.length),4),S=Math.max(...n.map(n=>n.currentRange.length),7),C=Math.max(...n.map(n=>n.latestVersion.length),6),N=String(n.length).length+2,F=` `.repeat(N)+JE.bold+`name`.padEnd(a)+` `+`current`.padEnd(S)+` `+`latest`.padEnd(C)+` kind`+JE.reset;Be.log(F),Be.log(` `.repeat(N)+JE.dim+`─`.repeat(a+S+C+12)+JE.reset);for(let F=0;F<n.length;F++){let I=n[F],H=`${F+1}.`.padEnd(N),W=colorForDiff(I.diff);Be.log(H+I.name.padEnd(a)+` `+JE.dim+I.currentRange.padEnd(S)+JE.reset+` `+W+I.latestVersion.padEnd(C)+JE.reset+` `+W+I.diff+JE.reset)}}async function promptSelection(n){if(!process.stdin.isTTY)return Be.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{Be.log(`
@@ -239,6 +239,13 @@ export class BuildAction {
239
239
  }
240
240
  // --- Auto mode (with optional extras): iterative multi-pass build ---
241
241
  if (app === "gjs" && autoMode) {
242
+ // Return the full orchestrator config (options + plugins) so
243
+ // auto-globals can reuse the per-app `resolve.conditionNames` /
244
+ // `mainFields` / `external` / `treeshake` for the in-memory
245
+ // analysis bundle. Without these, native-rolldown defaults to
246
+ // a different module-resolution condition set than npm-rolldown
247
+ // and the detected free-global set diverges (see PR for the
248
+ // missing-URL case under the GJS-CLI self-host loop).
242
249
  const gjsifyPluginFactory = async (opts) => {
243
250
  const cfg = await gjsifyPlugin({
244
251
  input: userBundler.input,
@@ -248,7 +255,7 @@ export class BuildAction {
248
255
  userAliases: aliases,
249
256
  shebang: this.configData.shebang,
250
257
  }, opts);
251
- return cfg.plugins;
258
+ return { options: cfg.options, plugins: cfg.plugins };
252
259
  };
253
260
  const { injectPath } = await detectAutoGlobals({
254
261
  input: userBundler.input,
@@ -304,11 +304,17 @@ function detectPackageManager() {
304
304
  return 'npm';
305
305
  }
306
306
  function spawnPrefixed(cmd, args, cwd, prefix) {
307
+ // Default FORCE_COLOR=1 unless the user explicitly opted out, so tools
308
+ // that key on `process.stdout.isTTY` (chalk, picocolors, …) still emit
309
+ // ANSI colors when run under gjsify foreach. Mirrors yarn / npm.
310
+ const colorEnv = process.env.FORCE_COLOR !== undefined || process.env.NO_COLOR !== undefined
311
+ ? {}
312
+ : { FORCE_COLOR: '1' };
307
313
  return new Promise((resolve, reject) => {
308
314
  const child = spawn(cmd, args, {
309
315
  cwd,
310
316
  stdio: prefix ? ['ignore', 'pipe', 'pipe'] : 'inherit',
311
- env: process.env,
317
+ env: { ...process.env, ...colorEnv },
312
318
  });
313
319
  if (prefix && child.stdout && child.stderr) {
314
320
  prefixLines(child.stdout, process.stdout, prefix);
@@ -9,8 +9,9 @@
9
9
  // - Scoped packages route to the scope's registry if configured
10
10
  // (`@scope:registry=...` in .npmrc).
11
11
  // - Auth: bearer token (`_authToken`) or basic (`_auth`).
12
- // - --tolerate-republish: surface a 409 conflict as a notice + exit 0
13
- // (matches yarn's flag of the same name).
12
+ // - --tolerate-republish: surface a 409 conflict (or 403 with a
13
+ // "previously published" body the OIDC-path response shape) as a
14
+ // notice + exit 0 (matches yarn's flag of the same name).
14
15
  // - --tag: published version gets this dist-tag (default `latest`).
15
16
  // - --access: public | restricted — required for first publish of a
16
17
  // scoped package on the public registry.
@@ -53,7 +54,7 @@ export const publishCommand = {
53
54
  type: 'string',
54
55
  })
55
56
  .option('tolerate-republish', {
56
- description: 'Treat a 409 conflict (version already published) as success. Matches yarn `--tolerate-republish`.',
57
+ description: 'Treat "version already published" as success — covers both classic 409 Conflict and the npm OIDC-path 403 Forbidden + `"previously published"` body shape. Matches yarn `--tolerate-republish`.',
57
58
  type: 'boolean',
58
59
  default: false,
59
60
  })
@@ -283,13 +284,25 @@ export const publishCommand = {
283
284
  return;
284
285
  }
285
286
  const text = await res.text().catch(() => '<no body>');
286
- if (res.status === 409 && tolerate) {
287
+ // npm signals "version already published" via two distinct shapes:
288
+ // - HTTP 409 Conflict (classic libnpmpublish behaviour)
289
+ // - HTTP 403 Forbidden with body
290
+ // `{"error":"You cannot publish over the previously published
291
+ // versions: <ver>."}` (observed on the OIDC publish path
292
+ // starting around npm registry's 2026-05 changes — same
293
+ // idempotency outcome, different status code)
294
+ // Both are intentionally tolerated under --tolerate-republish so
295
+ // that re-running a release workflow after a partial failure does
296
+ // not error on the already-published packages.
297
+ const isRepublishConflict = res.status === 409 ||
298
+ (res.status === 403 && /previously published/i.test(text));
299
+ if (isRepublishConflict && tolerate) {
287
300
  const out = {
288
301
  ok: true,
289
302
  action: 'republish-tolerated',
290
303
  name: packed.name,
291
304
  version: packed.version,
292
- status: 409,
305
+ status: res.status,
293
306
  };
294
307
  if (args.json)
295
308
  process.stdout.write(`${JSON.stringify(out, null, 2)}\n`);
@@ -101,8 +101,19 @@ async function runScript(script, extraArgs) {
101
101
  if (monorepoRoot && monorepoRoot !== cwd) {
102
102
  binDirs.push(join(monorepoRoot, 'node_modules', '.bin'));
103
103
  }
104
+ // Default FORCE_COLOR=1 when not already set, matching yarn / npm
105
+ // script-runner behaviour. Without this, tools that check
106
+ // `process.stdout.isTTY` (chalk, picocolors, biome, …) disable colors
107
+ // whenever the child's stdout is piped — including GitHub Actions
108
+ // (stdout is always a pipe there, but the GHA log viewer renders ANSI
109
+ // fine). Respect user overrides: FORCE_COLOR=0 or NO_COLOR keeps
110
+ // colors off.
111
+ const colorEnv = process.env.FORCE_COLOR !== undefined || process.env.NO_COLOR !== undefined
112
+ ? {}
113
+ : { FORCE_COLOR: '1' };
104
114
  const env = {
105
115
  ...process.env,
116
+ ...colorEnv,
106
117
  PATH: [...binDirs, process.env.PATH ?? ''].filter(Boolean).join(delimiter),
107
118
  npm_lifecycle_event: script,
108
119
  npm_package_name: pkg.name ?? '',
@@ -46,11 +46,19 @@ export const workspaceCommand = {
46
46
  const argv = runner === 'gjsify'
47
47
  ? ['run', args.script, ...(args.args ?? [])]
48
48
  : ['run', args.script, ...(args.args && args.args.length > 0 ? ['--', ...args.args] : [])];
49
+ // Default FORCE_COLOR=1 unless the user explicitly opted out (matches
50
+ // yarn / npm / gjsify run behaviour) — without this, tools that key
51
+ // on isTTY (chalk, picocolors, biome) drop colors when stdout is a
52
+ // pipe, including GitHub Actions where the log viewer renders ANSI
53
+ // fine.
54
+ const colorEnv = process.env.FORCE_COLOR !== undefined || process.env.NO_COLOR !== undefined
55
+ ? {}
56
+ : { FORCE_COLOR: '1' };
49
57
  await new Promise((resolve, reject) => {
50
58
  const child = spawn(runner, argv, {
51
59
  cwd: target.location,
52
60
  stdio: 'inherit',
53
- env: process.env,
61
+ env: { ...process.env, ...colorEnv },
54
62
  });
55
63
  child.on('close', (code) => {
56
64
  if (code === 0)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/cli",
3
- "version": "0.4.18",
3
+ "version": "0.4.20",
4
4
  "description": "CLI for Gjsify",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -37,18 +37,18 @@
37
37
  "cli"
38
38
  ],
39
39
  "dependencies": {
40
- "@gjsify/buffer": "^0.4.18",
41
- "@gjsify/create-app": "^0.4.18",
42
- "@gjsify/node-globals": "^0.4.18",
43
- "@gjsify/node-polyfills": "^0.4.18",
44
- "@gjsify/npm-registry": "^0.4.18",
45
- "@gjsify/resolve-npm": "^0.4.18",
46
- "@gjsify/rolldown-plugin-gjsify": "^0.4.18",
47
- "@gjsify/rolldown-plugin-pnp": "^0.4.18",
48
- "@gjsify/semver": "^0.4.18",
49
- "@gjsify/tar": "^0.4.18",
50
- "@gjsify/web-polyfills": "^0.4.18",
51
- "@gjsify/workspace": "^0.4.18",
40
+ "@gjsify/buffer": "^0.4.20",
41
+ "@gjsify/create-app": "^0.4.20",
42
+ "@gjsify/node-globals": "^0.4.20",
43
+ "@gjsify/node-polyfills": "^0.4.20",
44
+ "@gjsify/npm-registry": "^0.4.20",
45
+ "@gjsify/resolve-npm": "^0.4.20",
46
+ "@gjsify/rolldown-plugin-gjsify": "^0.4.20",
47
+ "@gjsify/rolldown-plugin-pnp": "^0.4.20",
48
+ "@gjsify/semver": "^0.4.20",
49
+ "@gjsify/tar": "^0.4.20",
50
+ "@gjsify/web-polyfills": "^0.4.20",
51
+ "@gjsify/workspace": "^0.4.20",
52
52
  "cosmiconfig": "^9.0.1",
53
53
  "get-tsconfig": "^4.14.0",
54
54
  "pkg-types": "^2.3.1",
@@ -56,12 +56,12 @@
56
56
  "yargs": "^18.0.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@gjsify/unit": "^0.4.18",
59
+ "@gjsify/unit": "^0.4.20",
60
60
  "@types/yargs": "^17.0.35",
61
61
  "typescript": "^6.0.3"
62
62
  },
63
63
  "peerDependencies": {
64
- "@gjsify/rolldown-native": "^0.4.18"
64
+ "@gjsify/rolldown-native": "^0.4.20"
65
65
  },
66
66
  "peerDependenciesMeta": {
67
67
  "@gjsify/rolldown-native": {