@gjsify/cli 0.4.32 → 0.4.34
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 +11 -10
- package/lib/commands/upgrade.d.ts +4 -0
- package/lib/commands/upgrade.js +318 -79
- package/lib/utils/dep-aggregation.d.ts +43 -0
- package/lib/utils/dep-aggregation.js +86 -0
- package/package.json +15 -15
package/dist/cli.gjs.mjs
CHANGED
|
@@ -617,8 +617,8 @@ Additional information: BADCLIENT: Bad error code, ${K} not found in range ${F}.
|
|
|
617
617
|
`+a.stack)}finally{this.performanceData=K}}parseMessage(n){return JSON.parse(n)}toStringMessage(n){return n}getFormatOptions(n){return this.projectService.getFormatCodeOptions(n)}getPreferences(n){return this.projectService.getPreferences(n)}getHostFormatOptions(){return this.projectService.getHostFormatCodeOptions()}getHostPreferences(){return this.projectService.getHostPreferences()}};function toProtocolPerformanceData(n){let a=n.diagnosticsDuration&&arrayFrom(n.diagnosticsDuration,([n,a])=>({...a,file:n}));return{...n,diagnosticsDuration:a}}function toProtocolTextSpan(n,a){return{start:a.positionToLineOffset(n.start),end:a.positionToLineOffset(textSpanEnd(n))}}function toProtocolTextSpanWithContext(n,a,S){let C=toProtocolTextSpan(n,S),N=a&&toProtocolTextSpan(a,S);return N?{...C,contextStart:N.start,contextEnd:N.end}:C}function convertTextChangeToCodeEdit(n,a){return{start:positionToLineOffset(a,n.span.start),end:positionToLineOffset(a,textSpanEnd(n.span)),newText:n.newText}}function positionToLineOffset(n,a){return isConfigFile(n)?locationFromLineAndCharacter(n.getLineAndCharacterOfPosition(a)):n.positionToLineOffset(a)}function convertLinkedEditInfoToRanges(n,a){let S=n.ranges.map(n=>({start:a.positionToLineOffset(n.start),end:a.positionToLineOffset(n.start+n.length)}));return n.wordPattern?{ranges:S,wordPattern:n.wordPattern}:{ranges:S}}function locationFromLineAndCharacter(n){return{line:n.line+1,offset:n.character+1}}function convertNewFileTextChangeToCodeEdit(n){Z.assert(n.textChanges.length===1);let a=first(n.textChanges);return Z.assert(a.span.start===0&&a.span.length===0),{fileName:n.fileName,textChanges:[{start:{line:0,offset:0},end:{line:0,offset:0},newText:a.newText}]}}function getLocationInNewDocument(n,a,S,C){let{line:N,character:F}=computeLineAndCharacterOfPosition(computeLineStarts(applyEdits(n,a,C)),S);return{line:N+1,offset:F+1}}function applyEdits(n,a,S){for(let{fileName:C,textChanges:N}of S)if(C===a)for(let a=N.length-1;a>=0;a--){let{newText:S,span:{start:C,length:F}}=N[a];n=n.slice(0,C)+S+n.slice(C+F)}return n}function referenceEntryToReferencesResponseItem(n,{fileName:a,textSpan:S,contextSpan:C,isWriteAccess:N,isDefinition:F},{disableLineTextInReferences:I}){let H=Z.checkDefined(n.getScriptInfo(a)),W=toProtocolTextSpanWithContext(S,C,H),K=I?void 0:getLineText(H,W);return{file:a,...W,lineText:K,isWriteAccess:N,isDefinition:F}}function getLineText(n,a){let S=n.lineToTextSpan(a.start.line-1);return n.getSnapshot().getText(S.start,textSpanEnd(S)).replace(/\r|\n/g,``)}function isCompletionEntryData(n){return n===void 0||n&&typeof n==`object`&&typeof n.exportName==`string`&&(n.fileName===void 0||typeof n.fileName==`string`)&&(n.ambientModuleName===void 0||typeof n.ambientModuleName==`string`&&(n.isPackageJsonImport===void 0||typeof n.isPackageJsonImport==`boolean`))}var yg=4,bg=(n=>(n[n.PreStart=0]=`PreStart`,n[n.Start=1]=`Start`,n[n.Entire=2]=`Entire`,n[n.Mid=3]=`Mid`,n[n.End=4]=`End`,n[n.PostEnd=5]=`PostEnd`,n))(bg||{}),EditWalker=class{constructor(){this.goSubtree=!0,this.lineIndex=new wg,this.endBranch=[],this.state=2,this.initialText=``,this.trailingText=``,this.lineIndex.root=new Tg,this.startPath=[this.lineIndex.root],this.stack=[this.lineIndex.root]}get done(){return!1}insertLines(n,a){a&&(this.trailingText=``),n=n?this.initialText+n+this.trailingText:this.initialText+this.trailingText;let S=wg.linesFromText(n).lines;S.length>1&&S[S.length-1]===``&&S.pop();let C,N;for(let n=this.endBranch.length-1;n>=0;n--)this.endBranch[n].updateCounts(),this.endBranch[n].charCount()===0&&(N=this.endBranch[n],C=n>0?this.endBranch[n-1]:this.branchNode);N&&C.remove(N);let F=this.startPath[this.startPath.length-1];if(S.length>0)if(F.text=S[0],S.length>1){let n=Array(S.length-1),a=F;for(let a=1;a<S.length;a++)n[a-1]=new LineLeaf(S[a]);let C=this.startPath.length-2;for(;C>=0;){let S=this.startPath[C];n=S.insertAt(a,n),C--,a=S}let N=n.length;for(;N>0;){let a=new Tg;a.add(this.lineIndex.root),n=a.insertAt(this.lineIndex.root,n),N=n.length,this.lineIndex.root=a}this.lineIndex.root.updateCounts()}else for(let n=this.startPath.length-2;n>=0;n--)this.startPath[n].updateCounts();else{this.startPath[this.startPath.length-2].remove(F);for(let n=this.startPath.length-2;n>=0;n--)this.startPath[n].updateCounts()}return this.lineIndex}post(n,a,S){S===this.lineCollectionAtBranch&&(this.state=4),this.stack.pop()}pre(n,a,S,C,N){let F=this.stack[this.stack.length-1];this.state===2&&N===1&&(this.state=1,this.branchNode=F,this.lineCollectionAtBranch=S);let I;function fresh(n){return n.isLeaf()?new LineLeaf(``):new Tg}switch(N){case 0:this.goSubtree=!1,this.state!==4&&F.add(S);break;case 1:this.state===4?this.goSubtree=!1:(I=fresh(S),F.add(I),this.startPath.push(I));break;case 2:this.state===4?S.isLeaf()||(I=fresh(S),F.add(I),this.endBranch.push(I)):(I=fresh(S),F.add(I),this.startPath.push(I));break;case 3:this.goSubtree=!1;break;case 4:this.state===4?S.isLeaf()||(I=fresh(S),F.add(I),this.endBranch.push(I)):this.goSubtree=!1;break;case 5:this.goSubtree=!1,this.state!==1&&F.add(S);break}this.goSubtree&&this.stack.push(I)}leaf(n,a,S){this.state===1?this.initialText=S.text.substring(0,n):(this.state===2&&(this.initialText=S.text.substring(0,n)),this.trailingText=S.text.substring(n+a))}},TextChange9=class{constructor(n,a,S){this.pos=n,this.deleteLen=a,this.insertedText=S}getTextChangeRange(){return createTextChangeRange(createTextSpan(this.pos,this.deleteLen),this.insertedText?this.insertedText.length:0)}},xg=class _ScriptVersionCache{constructor(){this.changes=[],this.versions=Array(_ScriptVersionCache.maxVersions),this.minVersion=0,this.currentVersion=0}versionToIndex(n){if(!(n<this.minVersion||n>this.currentVersion))return n%_ScriptVersionCache.maxVersions}currentVersionToIndex(){return this.currentVersion%_ScriptVersionCache.maxVersions}edit(n,a,S){this.changes.push(new TextChange9(n,a,S)),(this.changes.length>_ScriptVersionCache.changeNumberThreshold||a>_ScriptVersionCache.changeLengthThreshold||S&&S.length>_ScriptVersionCache.changeLengthThreshold)&&this.getSnapshot()}getSnapshot(){return this._getSnapshot()}_getSnapshot(){let n=this.versions[this.currentVersionToIndex()];if(this.changes.length>0){let a=n.index;for(let n of this.changes)a=a.edit(n.pos,n.deleteLen,n.insertedText);n=new Cg(this.currentVersion+1,this,a,this.changes),this.currentVersion=n.version,this.versions[this.currentVersionToIndex()]=n,this.changes=[],this.currentVersion-this.minVersion>=_ScriptVersionCache.maxVersions&&(this.minVersion=this.currentVersion-_ScriptVersionCache.maxVersions+1)}return n}getSnapshotVersion(){return this._getSnapshot().version}getAbsolutePositionAndLineText(n){return this._getSnapshot().index.lineNumberToInfo(n)}lineOffsetToPosition(n,a){return this._getSnapshot().index.absolutePositionOfStartOfLine(n)+(a-1)}positionToLineOffset(n){return this._getSnapshot().index.positionToLineOffset(n)}lineToTextSpan(n){let a=this._getSnapshot().index,{lineText:S,absolutePosition:C}=a.lineNumberToInfo(n+1);return createTextSpan(C,S===void 0?a.absolutePositionOfStartOfLine(n+2)-C:S.length)}getTextChangesBetweenVersions(n,a){if(n<a)if(n>=this.minVersion){let S=[];for(let C=n+1;C<=a;C++){let n=this.versions[this.versionToIndex(C)];for(let a of n.changesSincePreviousVersion)S.push(a.getTextChangeRange())}return collapseTextChangeRangesAcrossMultipleVersions(S)}else return;else return Yn}getLineCount(){return this._getSnapshot().index.getLineCount()}static fromString(n){let a=new _ScriptVersionCache,S=new Cg(0,a,new wg);a.versions[a.currentVersion]=S;let C=wg.linesFromText(n);return S.index.load(C.lines),a}};xg.changeNumberThreshold=8,xg.changeLengthThreshold=256,xg.maxVersions=8;var Sg=xg,Cg=class _LineIndexSnapshot{constructor(n,a,S,C=Ch){this.version=n,this.cache=a,this.index=S,this.changesSincePreviousVersion=C}getText(n,a){return this.index.getText(n,a-n)}getLength(){return this.index.getLength()}getChangeRange(n){if(n instanceof _LineIndexSnapshot&&this.cache===n.cache)return this.version<=n.version?Yn:this.cache.getTextChangesBetweenVersions(n.version,this.version)}},wg=class _LineIndex{constructor(){this.checkEdits=!1}absolutePositionOfStartOfLine(n){return this.lineNumberToInfo(n).absolutePosition}positionToLineOffset(n){let{oneBasedLine:a,zeroBasedColumn:S}=this.root.charOffsetToLineInfo(1,n);return{line:a,offset:S+1}}positionToColumnAndLineText(n){return this.root.charOffsetToLineInfo(1,n)}getLineCount(){return this.root.lineCount()}lineNumberToInfo(n){if(n<=this.getLineCount()){let{position:a,leaf:S}=this.root.lineNumberToInfo(n,0);return{absolutePosition:a,lineText:S&&S.text}}else return{absolutePosition:this.root.charCount(),lineText:void 0}}load(n){if(n.length>0){let a=[];for(let S=0;S<n.length;S++)a[S]=new LineLeaf(n[S]);this.root=_LineIndex.buildTreeFromBottom(a)}else this.root=new Tg}walk(n,a,S){this.root.walk(n,a,S)}getText(n,a){let S=``;return a>0&&n<this.root.charCount()&&this.walk(n,a,{goSubtree:!0,done:!1,leaf:(n,a,C)=>{S=S.concat(C.text.substring(n,n+a))}}),S}getLength(){return this.root.charCount()}every(n,a,S){S||=this.root.charCount();let C={goSubtree:!0,done:!1,leaf(a,S,C){n(C,a,S)||(this.done=!0)}};return this.walk(a,S-a,C),!C.done}edit(n,a,S){if(this.root.charCount()===0)return Z.assert(a===0),S===void 0?void 0:(this.load(_LineIndex.linesFromText(S).lines),this);{let C;if(this.checkEdits){let N=this.getText(0,this.root.charCount());C=N.slice(0,n)+S+N.slice(n+a)}let N=new EditWalker,F=!1;if(n>=this.root.charCount()){n=this.root.charCount()-1;let C=this.getText(n,1);S=S?C+S:C,a=0,F=!0}else if(a>0){let C=n+a,{zeroBasedColumn:N,lineText:F}=this.positionToColumnAndLineText(C);N===0&&(a+=F.length,S=S?S+F:F)}if(this.root.walk(n,a,N),N.insertLines(S,F),this.checkEdits){let n=N.lineIndex.getText(0,N.lineIndex.getLength());Z.assert(C===n,`buffer edit mismatch`)}return N.lineIndex}}static buildTreeFromBottom(n){if(n.length<yg)return new Tg(n);let a=Array(Math.ceil(n.length/yg)),S=0;for(let C=0;C<a.length;C++){let N=Math.min(S+yg,n.length);a[C]=new Tg(n.slice(S,N)),S=N}return this.buildTreeFromBottom(a)}static linesFromText(n){let a=computeLineStarts(n);if(a.length===0)return{lines:[],lineMap:a};let S=Array(a.length),C=a.length-1;for(let N=0;N<C;N++)S[N]=n.substring(a[N],a[N+1]);let N=n.substring(a[C]);return N.length>0?S[C]=N:S.pop(),{lines:S,lineMap:a}}},Tg=class _LineNode{constructor(n=[]){this.children=n,this.totalChars=0,this.totalLines=0,n.length&&this.updateCounts()}isLeaf(){return!1}updateCounts(){this.totalChars=0,this.totalLines=0;for(let n of this.children)this.totalChars+=n.charCount(),this.totalLines+=n.lineCount()}execWalk(n,a,S,C,N){return S.pre&&S.pre(n,a,this.children[C],this,N),S.goSubtree?(this.children[C].walk(n,a,S),S.post&&S.post(n,a,this.children[C],this,N)):S.goSubtree=!0,S.done}skipChild(n,a,S,C,N){C.pre&&!C.done&&(C.pre(n,a,this.children[S],this,N),C.goSubtree=!0)}walk(n,a,S){if(this.children.length===0)return;let C=0,N=this.children[C].charCount(),F=n;for(;F>=N;)this.skipChild(F,a,C,S,0),F-=N,C++,N=this.children[C].charCount();if(F+a<=N){if(this.execWalk(F,a,S,C,2))return}else{if(this.execWalk(F,N-F,S,C,1))return;let n=a-(N-F);for(C++,N=this.children[C].charCount();n>N;){if(this.execWalk(0,N,S,C,3))return;n-=N,C++,N=this.children[C].charCount()}if(n>0&&this.execWalk(0,n,S,C,4))return}if(S.pre){let n=this.children.length;if(C<n-1)for(let a=C+1;a<n;a++)this.skipChild(0,0,a,S,5)}}charOffsetToLineInfo(n,a){if(this.children.length===0)return{oneBasedLine:n,zeroBasedColumn:a,lineText:void 0};for(let S of this.children)if(S.charCount()>a)return S.isLeaf()?{oneBasedLine:n,zeroBasedColumn:a,lineText:S.text}:S.charOffsetToLineInfo(n,a);else a-=S.charCount(),n+=S.lineCount();let S=this.lineCount();return S===0?{oneBasedLine:1,zeroBasedColumn:0,lineText:void 0}:{oneBasedLine:S,zeroBasedColumn:Z.checkDefined(this.lineNumberToInfo(S,0).leaf).charCount(),lineText:void 0}}lineNumberToInfo(n,a){for(let S of this.children){let C=S.lineCount();if(C>=n)return S.isLeaf()?{position:a,leaf:S}:S.lineNumberToInfo(n,a);n-=C,a+=S.charCount()}return{position:a,leaf:void 0}}splitAfter(n){let a,S=this.children.length;n++;let C=n;if(n<S){for(a=new _LineNode;n<S;)a.add(this.children[n]),n++;a.updateCounts()}return this.children.length=C,a}remove(n){let a=this.findChildIndex(n),S=this.children.length;if(a<S-1)for(let n=a;n<S-1;n++)this.children[n]=this.children[n+1];this.children.pop()}findChildIndex(n){let a=this.children.indexOf(n);return Z.assert(a!==-1),a}insertAt(n,a){let S=this.findChildIndex(n),C=this.children.length,N=a.length;if(C<yg&&S===C-1&&N===1)return this.add(a[0]),this.updateCounts(),[];{let n=this.splitAfter(S),C=0;for(S++;S<yg&&C<N;)this.children[S]=a[C],S++,C++;let F=[],I=0;if(C<N){I=Math.ceil((N-C)/yg),F=Array(I);let n=0;for(let n=0;n<I;n++)F[n]=new _LineNode;let S=F[0];for(;C<N;)S.add(a[C]),C++,S.children.length===yg&&(n++,S=F[n]);for(let n=F.length-1;n>=0;n--)F[n].children.length===0&&F.pop()}n&&F.push(n),this.updateCounts();for(let n=0;n<I;n++)F[n].updateCounts();return F}}add(n){this.children.push(n),Z.assert(this.children.length<=yg)}charCount(){return this.totalChars}lineCount(){return this.totalLines}},LineLeaf=class{constructor(n){this.text=n}isLeaf(){return!0}walk(n,a,S){S.leaf(n,a,this)}charCount(){return this.text.length}lineCount(){return 1}},Eg=class _TypingsInstallerAdapter{constructor(n,a,S,C,N,F){this.telemetryEnabled=n,this.logger=a,this.host=S,this.globalTypingsCacheLocation=C,this.event=N,this.maxActiveRequestCount=F,this.activeRequestCount=0,this.requestQueue=createQueue(),this.requestMap=new Map,this.requestedRegistry=!1,this.packageInstallId=0}isKnownTypesPackageName(n){return nc.validatePackageName(n)===nc.NameValidationResult.Ok?(this.requestedRegistry||(this.requestedRegistry=!0,this.installer.send({kind:`typesRegistry`})),!!this.typesRegistryCache?.has(n)):!1}installPackage(n){this.packageInstallId++;let a={kind:`installPackage`,...n,id:this.packageInstallId},S=new Promise((n,a)=>{(this.packageInstalledPromise??=new Map).set(this.packageInstallId,{resolve:n,reject:a})});return this.installer.send(a),S}attach(n){this.projectService=n,this.installer=this.createInstallerProcess()}onProjectClosed(n){this.installer.send({projectName:n.getProjectName(),kind:`closeProject`})}enqueueInstallTypingsRequest(n,a,S){let C=createInstallTypingsRequest(n,a,S);this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Scheduling throttled operation:${stringifyIndented(C)}`),this.activeRequestCount<this.maxActiveRequestCount?this.scheduleRequest(C):(this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Deferring request for: ${C.projectName}`),this.requestQueue.enqueue(C),this.requestMap.set(C.projectName,C))}handleMessage(n){var a;switch(this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Received response:${stringifyIndented(n)}`),n.kind){case oc:this.typesRegistryCache=new Map(Object.entries(n.typesRegistry));break;case ac:{let S=this.packageInstalledPromise?.get(n.id);Z.assertIsDefined(S,`Should find the promise for package install`),(a=this.packageInstalledPromise)==null||a.delete(n.id),n.success?S.resolve({successMessage:n.message}):S.reject(n.message),this.projectService.updateTypingsForProject(n),this.event(n,`setTypings`);break}case lc:{let a={message:n.message};this.event(a,`typesInstallerInitializationFailed`);break}case sc:{let a={eventId:n.eventId,packages:n.packagesToInstall};this.event(a,`beginInstallTypes`);break}case cc:{if(this.telemetryEnabled){let a={telemetryEventName:`typingsInstalled`,payload:{installedPackages:n.packagesToInstall.join(`,`),installSuccess:n.installSuccess,typingsInstallerVersion:n.typingsInstallerVersion}};this.event(a,`telemetry`)}let a={eventId:n.eventId,packages:n.packagesToInstall,success:n.installSuccess};this.event(a,`endInstallTypes`);break}case ic:this.projectService.updateTypingsForProject(n);break;case rc:for(this.activeRequestCount>0?this.activeRequestCount--:Z.fail(`TIAdapter:: Received too many responses`);!this.requestQueue.isEmpty();){let n=this.requestQueue.dequeue();if(this.requestMap.get(n.projectName)===n){this.requestMap.delete(n.projectName),this.scheduleRequest(n);break}this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Skipping defunct request for: ${n.projectName}`)}this.projectService.updateTypingsForProject(n),this.event(n,`setTypings`);break;case uc:this.projectService.watchTypingLocations(n);break;default:}}scheduleRequest(n){this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Scheduling request for: ${n.projectName}`),this.activeRequestCount++,this.host.setTimeout(()=>{this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Sending request:${stringifyIndented(n)}`),this.installer.send(n)},_TypingsInstallerAdapter.requestDelayMillis,`${n.projectName}::${n.kind}`)}};Eg.requestDelayMillis=100;var Dg=Eg,Og={};__export(Og,{ActionInvalidate:()=>ic,ActionPackageInstalled:()=>ac,ActionSet:()=>rc,ActionWatchTypingLocations:()=>uc,Arguments:()=>dc,AutoImportProviderProject:()=>Hh,AuxiliaryProject:()=>AuxiliaryProject,CharRangeSection:()=>bg,CloseFileWatcherEvent:()=>tg,CommandNames:()=>hg,ConfigFileDiagEvent:()=>Yh,ConfiguredProject:()=>ConfiguredProject2,ConfiguredProjectLoadKind:()=>dg,CreateDirectoryWatcherEvent:()=>eg,CreateFileWatcherEvent:()=>$h,Errors:()=>Th,EventBeginInstallTypes:()=>sc,EventEndInstallTypes:()=>cc,EventInitializationFailed:()=>lc,EventTypesRegistry:()=>oc,ExternalProject:()=>ExternalProject,GcTimer:()=>Dh,InferredProject:()=>InferredProject2,LargeFileReferencedEvent:()=>Jh,LineIndex:()=>wg,LineLeaf:()=>LineLeaf,LineNode:()=>Tg,LogLevel:()=>Sh,Msg:()=>wh,OpenFileInfoTelemetryEvent:()=>Qh,Project:()=>Bh,ProjectInfoTelemetryEvent:()=>Zh,ProjectKind:()=>zh,ProjectLanguageServiceStateEvent:()=>Xh,ProjectLoadingFinishEvent:()=>qh,ProjectLoadingStartEvent:()=>Kh,ProjectService:()=>pg,ProjectsUpdatedInBackgroundEvent:()=>Gh,ScriptInfo:()=>ScriptInfo,ScriptVersionCache:()=>Sg,Session:()=>vg,TextStorage:()=>TextStorage,ThrottledOperations:()=>Eh,TypingsInstallerAdapter:()=>Dg,allFilesAreJsOrDts:()=>allFilesAreJsOrDts,allRootFilesAreJsOrDts:()=>allRootFilesAreJsOrDts,asNormalizedPath:()=>asNormalizedPath,convertCompilerOptions:()=>convertCompilerOptions,convertFormatOptions:()=>convertFormatOptions,convertScriptKindName:()=>convertScriptKindName,convertTypeAcquisition:()=>convertTypeAcquisition,convertUserPreferences:()=>convertUserPreferences,convertWatchOptions:()=>convertWatchOptions,countEachFileTypes:()=>countEachFileTypes,createInstallTypingsRequest:()=>createInstallTypingsRequest,createModuleSpecifierCache:()=>createModuleSpecifierCache,createNormalizedPathMap:()=>createNormalizedPathMap,createPackageJsonCache:()=>createPackageJsonCache,createSortedArray:()=>createSortedArray2,emptyArray:()=>Ch,findArgument:()=>findArgument,formatDiagnosticToProtocol:()=>formatDiagnosticToProtocol,formatMessage:()=>formatMessage2,getBaseConfigFileName:()=>getBaseConfigFileName,getDetailWatchInfo:()=>getDetailWatchInfo,getLocationInNewDocument:()=>getLocationInNewDocument,hasArgument:()=>hasArgument,hasNoTypeScriptSource:()=>hasNoTypeScriptSource,indent:()=>indent2,isBackgroundProject:()=>isBackgroundProject,isConfigFile:()=>isConfigFile,isConfiguredProject:()=>isConfiguredProject,isDynamicFileName:()=>isDynamicFileName,isExternalProject:()=>isExternalProject,isInferredProject:()=>isInferredProject,isInferredProjectName:()=>isInferredProjectName,isProjectDeferredClose:()=>isProjectDeferredClose,makeAutoImportProviderProjectName:()=>makeAutoImportProviderProjectName,makeAuxiliaryProjectName:()=>makeAuxiliaryProjectName,makeInferredProjectName:()=>makeInferredProjectName,maxFileSize:()=>Wh,maxProgramSizeForNonTsFiles:()=>Uh,normalizedPathToPath:()=>normalizedPathToPath,nowString:()=>nowString,nullCancellationToken:()=>mg,nullTypingsInstaller:()=>lg,protocol:()=>Oh,scriptInfoIsContainedByBackgroundProject:()=>scriptInfoIsContainedByBackgroundProject,scriptInfoIsContainedByDeferredClosedProject:()=>scriptInfoIsContainedByDeferredClosedProject,stringifyIndented:()=>stringifyIndented,toEvent:()=>toEvent,toNormalizedPath:()=>toNormalizedPath,tryConvertScriptKindName:()=>tryConvertScriptKindName,typingsInstaller:()=>bh,updateProjectIfDirty:()=>updateProjectIfDirty}),Ae!==void 0&&(Z.loggingHost={log(n,a){switch(n){case 1:return Ae.error(a);case 2:return Ae.warn(a);case 3:return Ae.log(a);case 4:return Ae.log(a)}}})})({get exports(){return N},set exports(n){N=n,a!==void 0&&a.exports&&(a.exports=n)}})})),Mp=__commonJSMin((n=>{var a=n&&n.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(n,"__esModule",{value:!0}),n.loadTs=n.loadTsSync=n.loadYaml=n.loadJson=n.loadJs=n.loadJsSync=void 0;let S=(Os(),__toCommonJS(Ts)),C=(as(),__toCommonJS(ns)),N=a((Bo(),__toCommonJS(To))),F=(en(),__toCommonJS(Yt)),I=(Ua(),__toCommonJS(Va)),H;n.loadJsSync=function loadJsSync(n){return H===void 0&&(H=Iu()),H(n)},n.loadJs=async function loadJs(a){try{let{href:n}=(0,F.pathToFileURL)(await(0,C.realpath)(a));return(await import(n)).default}catch(S){try{return(0,n.loadJsSync)(a,``)}catch(n){throw n.code===`ERR_REQUIRE_ESM`||n instanceof SyntaxError&&n.toString().includes(`Cannot use import statement outside a module`)?S:n}}};let W;n.loadJson=function loadJson(n,a){W===void 0&&(W=qu());try{return W(a)}catch(a){throw a.message=`JSON Error in ${n}:\n${a.message}`,a}};let K;n.loadYaml=function loadYaml(n,a){K===void 0&&(K=(Kf(),__toCommonJS(Ju)));try{return K.load(a)}catch(a){throw a.message=`YAML Error in ${n}:\n${a.message}`,a}};let q;n.loadTsSync=function loadTsSync(a,C){q===void 0&&(q=jp());let F=`${a}.${(0,I.randomUUID)()}.cjs`;try{let I=resolveTsConfig(N.default.dirname(a))??{};return I.compilerOptions={...I.compilerOptions,module:q.ModuleKind.NodeNext,moduleResolution:q.ModuleResolutionKind.NodeNext,target:q.ScriptTarget.ES2022,noEmit:!1},C=q.transpileModule(C,I).outputText,(0,S.writeFileSync)(F,C),(0,n.loadJsSync)(F,C).default}catch(n){throw n.message=`TypeScript Error in ${a}:\n${n.message}`,n}finally{(0,S.existsSync)(F)&&(0,S.rmSync)(F)}},n.loadTs=async function loadTs(a,F){q===void 0&&(q=(await Promise.resolve().then(()=>__toESM(jp()))).default);let H=`${a}.${(0,I.randomUUID)()}.mjs`,W;try{try{let n=resolveTsConfig(N.default.dirname(a))??{};n.compilerOptions={...n.compilerOptions,module:q.ModuleKind.ES2022,moduleResolution:q.ModuleResolutionKind.Bundler,target:q.ScriptTarget.ES2022,noEmit:!1},W=q.transpileModule(F,n).outputText,await(0,C.writeFile)(H,W)}catch(n){throw n.message=`TypeScript Error in ${a}:\n${n.message}`,n}return await(0,n.loadJs)(H,W)}finally{(0,S.existsSync)(H)&&await(0,C.rm)(H)}};function resolveTsConfig(n){let a=q.findConfigFile(n,n=>q.sys.fileExists(n));if(a!==void 0){let{config:n,error:S}=q.readConfigFile(a,n=>q.sys.readFile(n));if(S)throw Error(`Error in ${a}: ${S.messageText.toString()}`);return n}}})),Np=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.defaultLoadersSync=n.defaultLoaders=n.metaSearchPlaces=n.globalConfigSearchPlacesSync=n.globalConfigSearchPlaces=n.getDefaultSearchPlacesSync=n.getDefaultSearchPlaces=void 0;let a=Mp();function getDefaultSearchPlaces(n){return[`package.json`,`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.cjs`,`.${n}rc.mjs`,`.config/${n}rc`,`.config/${n}rc.json`,`.config/${n}rc.yaml`,`.config/${n}rc.yml`,`.config/${n}rc.js`,`.config/${n}rc.ts`,`.config/${n}rc.cjs`,`.config/${n}rc.mjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.cjs`,`${n}.config.mjs`]}n.getDefaultSearchPlaces=getDefaultSearchPlaces;function getDefaultSearchPlacesSync(n){return[`package.json`,`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.cjs`,`.config/${n}rc`,`.config/${n}rc.json`,`.config/${n}rc.yaml`,`.config/${n}rc.yml`,`.config/${n}rc.js`,`.config/${n}rc.ts`,`.config/${n}rc.cjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.cjs`]}n.getDefaultSearchPlacesSync=getDefaultSearchPlacesSync,n.globalConfigSearchPlaces=[`config`,`config.json`,`config.yaml`,`config.yml`,`config.js`,`config.ts`,`config.cjs`,`config.mjs`],n.globalConfigSearchPlacesSync=[`config`,`config.json`,`config.yaml`,`config.yml`,`config.js`,`config.ts`,`config.cjs`],n.metaSearchPlaces=[`package.json`,`package.yaml`,`.config/config.json`,`.config/config.yaml`,`.config/config.yml`,`.config/config.js`,`.config/config.ts`,`.config/config.cjs`,`.config/config.mjs`],n.defaultLoaders=Object.freeze({".mjs":a.loadJs,".cjs":a.loadJs,".js":a.loadJs,".ts":a.loadTs,".json":a.loadJson,".yaml":a.loadYaml,".yml":a.loadYaml,noExt:a.loadYaml}),n.defaultLoadersSync=Object.freeze({".cjs":a.loadJsSync,".js":a.loadJsSync,".ts":a.loadTsSync,".json":a.loadJson,".yaml":a.loadYaml,".yml":a.loadYaml,noExt:a.loadYaml})})),Pp=__commonJSMin(((n,a)=>{let S=(Bo(),__toCommonJS(To)),C=(Ep(),__toCommonJS(yp)),N=C.homedir(),F=C.tmpdir(),{env:I}=process,macos=n=>{let a=S.join(N,`Library`);return{data:S.join(a,`Application Support`,n),config:S.join(a,`Preferences`,n),cache:S.join(a,`Caches`,n),log:S.join(a,`Logs`,n),temp:S.join(F,n)}},windows=n=>{let a=I.APPDATA||S.join(N,`AppData`,`Roaming`),C=I.LOCALAPPDATA||S.join(N,`AppData`,`Local`);return{data:S.join(C,n,`Data`),config:S.join(a,n,`Config`),cache:S.join(C,n,`Cache`),log:S.join(C,n,`Log`),temp:S.join(F,n)}},linux=n=>{let a=S.basename(N);return{data:S.join(I.XDG_DATA_HOME||S.join(N,`.local`,`share`),n),config:S.join(I.XDG_CONFIG_HOME||S.join(N,`.config`),n),cache:S.join(I.XDG_CACHE_HOME||S.join(N,`.cache`),n),log:S.join(I.XDG_STATE_HOME||S.join(N,`.local`,`state`),n),temp:S.join(F,a,n)}},envPaths=(n,a)=>{if(typeof n!=`string`)throw TypeError(`Expected string, got ${typeof n}`);return a=Object.assign({suffix:`nodejs`},a),a.suffix&&(n+=`-${a.suffix}`),process.platform===`darwin`?macos(n):process.platform===`win32`?windows(n):linux(n)};a.exports=envPaths,a.exports.default=envPaths})),Fp=__commonJSMin((n=>{var a=n&&n.__createBinding||(Object.create?(function(n,a,S,C){C===void 0&&(C=S);var N=Object.getOwnPropertyDescriptor(a,S);(!N||(`get`in N?!a.__esModule:N.writable||N.configurable))&&(N={enumerable:!0,get:function(){return a[S]}}),Object.defineProperty(n,C,N)}):(function(n,a,S,C){C===void 0&&(C=S),n[C]=a[S]})),S=n&&n.__setModuleDefault||(Object.create?(function(n,a){Object.defineProperty(n,"default",{enumerable:!0,value:a})}):function(n,a){n.default=a}),C=n&&n.__importStar||function(n){if(n&&n.__esModule)return n;var C={};if(n!=null)for(var N in n)N!=="default"&&Object.prototype.hasOwnProperty.call(n,N)&&a(C,n,N);return S(C,n),C};Object.defineProperty(n,"__esModule",{value:!0}),n.isDirectorySync=n.isDirectory=n.removeUndefinedValuesFromObject=n.getPropertyByPath=n.emplace=void 0;let N=C((Os(),__toCommonJS(Ts)));function emplace(n,a,S){let C=n.get(a);if(C!==void 0)return C;let N=S();return n.set(a,N),N}n.emplace=emplace;function getPropertyByPath(n,a){return typeof a==`string`&&Object.prototype.hasOwnProperty.call(n,a)?n[a]:(typeof a==`string`?a.split(`.`):a).reduce((n,a)=>n===void 0?n:n[a],n)}n.getPropertyByPath=getPropertyByPath;function removeUndefinedValuesFromObject(n){return Object.fromEntries(Object.entries(n).filter(([,n])=>n!==void 0))}n.removeUndefinedValuesFromObject=removeUndefinedValuesFromObject;async function isDirectory(n){try{return(await N.promises.stat(n)).isDirectory()}catch(n){if(n.code===`ENOENT`)return!1;throw n}}n.isDirectory=isDirectory;function isDirectorySync(n){try{return N.default.statSync(n).isDirectory()}catch(n){if(n.code===`ENOENT`)return!1;throw n}}n.isDirectorySync=isDirectorySync})),Ip=__commonJSMin((n=>{var a=n&&n.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(n,"__esModule",{value:!0}),n.getExtensionDescription=n.ExplorerBase=void 0;let S=a(Pp()),C=a((Ep(),__toCommonJS(yp))),N=a((Bo(),__toCommonJS(To))),F=Fp();var ExplorerBase=class{#e=!1;config;loadCache;searchCache;constructor(n){this.config=n,n.cache&&(this.loadCache=new Map,this.searchCache=new Map),this.#t()}set loadingMetaConfig(n){this.#e=n}#t(){let n=this.config;for(let a of n.searchPlaces){let n=N.default.extname(a),S=this.config.loaders[n||`noExt`]??this.config.loaders.default;if(S===void 0)throw Error(`Missing loader for ${getExtensionDescription(a)}.`);if(typeof S!=`function`)throw Error(`Loader for ${getExtensionDescription(a)} is not a function: Received ${typeof S}.`)}}clearLoadCache(){this.loadCache&&this.loadCache.clear()}clearSearchCache(){this.searchCache&&this.searchCache.clear()}clearCaches(){this.clearLoadCache(),this.clearSearchCache()}toCosmiconfigResult(n,a){if(a===null)return null;if(a===void 0)return{filepath:n,config:void 0,isEmpty:!0};if(this.config.applyPackagePropertyPathToConfiguration||this.#e){let n=this.config.packageProp??this.config.moduleName;a=(0,F.getPropertyByPath)(a,n)}return a===void 0?{filepath:n,config:void 0,isEmpty:!0}:{config:a,filepath:n}}validateImports(n,a,S){let C=N.default.dirname(n);for(let F of a){if(typeof F!=`string`)throw Error(`${n}: Key $import must contain a string or a list of strings`);let a=N.default.resolve(C,F);if(a===n)throw Error(`Self-import detected in ${n}`);let I=S.indexOf(a);if(I!==-1)throw Error(`Circular import detected:
|
|
618
618
|
${[...S,a].map((n,a)=>`${a+1}. ${n}`).join(`
|
|
619
619
|
`)} (same as ${I+1}.)`)}}getSearchPlacesForDir(n,a){return(n.isGlobalConfig?a:this.config.searchPlaces).map(a=>N.default.join(n.path,a))}getGlobalConfigDir(){return(0,S.default)(this.config.moduleName,{suffix:``}).config}*getGlobalDirs(n){let a=N.default.resolve(this.config.stopDir??C.default.homedir());yield{path:n,isGlobalConfig:!1};let S=n;for(;S!==a;){let n=N.default.dirname(S);if(n===S)break;yield{path:n,isGlobalConfig:!1},S=n}yield{path:this.getGlobalConfigDir(),isGlobalConfig:!0}}};n.ExplorerBase=ExplorerBase;function getExtensionDescription(n){return n?`extension "${n}"`:`files without extensions`}n.getExtensionDescription=getExtensionDescription})),Lp=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.mergeAll=n.hasOwn=void 0,n.hasOwn=Function.prototype.call.bind(Object.prototype.hasOwnProperty);let a=Function.prototype.call.bind(Object.prototype.toString);function isPlainObject(n){return a(n)===`[object Object]`}function merge(a,S,C){for(let N of Object.keys(S)){let F=S[N];if((0,n.hasOwn)(a,N)){if(Array.isArray(a[N])&&Array.isArray(F)){if(C.mergeArrays){a[N].push(...F);continue}}else if(isPlainObject(a[N])&&isPlainObject(F)){a[N]=merge(a[N],F,C);continue}}a[N]=F}return a}function mergeAll(n,a){return n.reduce((n,S)=>merge(n,S,a),{})}n.mergeAll=mergeAll})),Rp=__commonJSMin((n=>{var a=n&&n.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(n,"__esModule",{value:!0}),n.Explorer=void 0;let S=a((as(),__toCommonJS(ns))),C=a((Bo(),__toCommonJS(To))),N=Np(),F=Ip(),I=Lp(),H=Fp();var Explorer=class extends F.ExplorerBase{async load(n){n=C.default.resolve(n);let load=async()=>await this.config.transform(await this.#e(n));return this.loadCache?await(0,H.emplace)(this.loadCache,n,load):await load()}async search(n=``){if(this.config.metaConfigFilePath){this.loadingMetaConfig=!0;let n=await this.load(this.config.metaConfigFilePath);if(this.loadingMetaConfig=!1,n&&!n.isEmpty)return n}n=C.default.resolve(n);let a=this.#i(n),S=await a.next();if(S.done)throw Error(`Could not find any folders to iterate through (start from ${n})`);let F=S.value,search=async()=>{if(await(0,H.isDirectory)(F.path))for(let n of this.getSearchPlacesForDir(F,N.globalConfigSearchPlaces))try{let a=await this.#e(n);if(a!==null&&!(a.isEmpty&&this.config.ignoreEmptySearchPlaces))return await this.config.transform(a)}catch(n){if(n.code===`ENOENT`||n.code===`EISDIR`||n.code===`ENOTDIR`||n.code===`EACCES`)continue;throw n}let n=await a.next();return n.done?await this.config.transform(null):(F=n.value,this.searchCache?await(0,H.emplace)(this.searchCache,F.path,search):await search())};return this.searchCache?await(0,H.emplace)(this.searchCache,n,search):await search()}async#e(n,a=[]){let C=await S.default.readFile(n,{encoding:`utf-8`});return this.toCosmiconfigResult(n,await this.#t(n,C,a))}async#t(n,a,S){let N=await this.#n(n,a);if(!N||!(0,I.hasOwn)(N,`$import`))return N;let F=C.default.dirname(n),{$import:H,...W}=N,K=Array.isArray(H)?H:[H],q=[...S,n];this.validateImports(n,K,q);let Y=await Promise.all(K.map(async n=>{let a=C.default.resolve(F,n);return(await this.#e(a,q))?.config}));return(0,I.mergeAll)([...Y,W],{mergeArrays:this.config.mergeImportArrays})}async#n(n,a){if(a.trim()===``)return;let S=C.default.extname(n),N=this.config.loaders[S||`noExt`]??this.config.loaders.default;if(!N)throw Error(`No loader specified for ${(0,F.getExtensionDescription)(S)}`);try{let F=await N(n,a);return C.default.basename(n,S)===`package`?(0,H.getPropertyByPath)(F,this.config.packageProp??this.config.moduleName)??null:F}catch(a){throw a.filepath=n,a}}async#r(n){try{return await S.default.stat(n),!0}catch{return!1}}async*#i(n){switch(this.config.searchStrategy){case`none`:yield{path:n,isGlobalConfig:!1};return;case`project`:{let a=n;for(;;){yield{path:a,isGlobalConfig:!1};for(let n of[`json`,`yaml`]){let S=C.default.join(a,`package.${n}`);if(await this.#r(S))break}let n=C.default.dirname(a);if(n===a)break;a=n}return}case`global`:yield*this.getGlobalDirs(n)}}};n.Explorer=Explorer})),zp=__commonJSMin((n=>{var a=n&&n.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(n,"__esModule",{value:!0}),n.ExplorerSync=void 0;let S=a((Os(),__toCommonJS(Ts))),C=a((Bo(),__toCommonJS(To))),N=Np(),F=Ip(),I=Lp(),H=Fp();var ExplorerSync=class extends F.ExplorerBase{load(n){n=C.default.resolve(n);let load=()=>this.config.transform(this.#e(n));return this.loadCache?(0,H.emplace)(this.loadCache,n,load):load()}search(n=``){if(this.config.metaConfigFilePath){this.loadingMetaConfig=!0;let n=this.load(this.config.metaConfigFilePath);if(this.loadingMetaConfig=!1,n&&!n.isEmpty)return n}n=C.default.resolve(n);let a=this.#i(n),S=a.next();if(S.done)throw Error(`Could not find any folders to iterate through (start from ${n})`);let F=S.value,search=()=>{if((0,H.isDirectorySync)(F.path))for(let n of this.getSearchPlacesForDir(F,N.globalConfigSearchPlacesSync))try{let a=this.#e(n);if(a!==null&&!(a.isEmpty&&this.config.ignoreEmptySearchPlaces))return this.config.transform(a)}catch(n){if(n.code===`ENOENT`||n.code===`EISDIR`||n.code===`ENOTDIR`||n.code===`EACCES`)continue;throw n}let n=a.next();return n.done?this.config.transform(null):(F=n.value,this.searchCache?(0,H.emplace)(this.searchCache,F.path,search):search())};return this.searchCache?(0,H.emplace)(this.searchCache,n,search):search()}#e(n,a=[]){let C=S.default.readFileSync(n,`utf8`);return this.toCosmiconfigResult(n,this.#t(n,C,a))}#t(n,a,S){let N=this.#n(n,a);if(!N||!(0,I.hasOwn)(N,`$import`))return N;let F=C.default.dirname(n),{$import:H,...W}=N,K=Array.isArray(H)?H:[H],q=[...S,n];this.validateImports(n,K,q);let Y=K.map(n=>{let a=C.default.resolve(F,n);return this.#e(a,q)?.config});return(0,I.mergeAll)([...Y,W],{mergeArrays:this.config.mergeImportArrays})}#n(n,a){if(a.trim()===``)return;let S=C.default.extname(n),N=this.config.loaders[S||`noExt`]??this.config.loaders.default;if(!N)throw Error(`No loader specified for ${(0,F.getExtensionDescription)(S)}`);try{let F=N(n,a);return C.default.basename(n,S)===`package`?(0,H.getPropertyByPath)(F,this.config.packageProp??this.config.moduleName)??null:F}catch(a){throw a.filepath=n,a}}#r(n){try{return S.default.statSync(n),!0}catch{return!1}}*#i(n){switch(this.config.searchStrategy){case`none`:yield{path:n,isGlobalConfig:!1};return;case`project`:{let a=n;for(;;){yield{path:a,isGlobalConfig:!1};for(let n of[`json`,`yaml`]){let S=C.default.join(a,`package.${n}`);if(this.#r(S))break}let n=C.default.dirname(a);if(n===a)break;a=n}return}case`global`:yield*this.getGlobalDirs(n)}}loadSync(n){return this.load(n)}searchSync(n=``){return this.search(n)}};n.ExplorerSync=ExplorerSync})),Bp=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.defaultLoadersSync=n.defaultLoaders=n.globalConfigSearchPlacesSync=n.globalConfigSearchPlaces=n.getDefaultSearchPlacesSync=n.getDefaultSearchPlaces=n.cosmiconfigSync=n.cosmiconfig=void 0;let a=Np();Object.defineProperty(n,"defaultLoaders",{enumerable:!0,get:function(){return a.defaultLoaders}}),Object.defineProperty(n,"defaultLoadersSync",{enumerable:!0,get:function(){return a.defaultLoadersSync}}),Object.defineProperty(n,"getDefaultSearchPlaces",{enumerable:!0,get:function(){return a.getDefaultSearchPlaces}}),Object.defineProperty(n,"getDefaultSearchPlacesSync",{enumerable:!0,get:function(){return a.getDefaultSearchPlacesSync}}),Object.defineProperty(n,"globalConfigSearchPlaces",{enumerable:!0,get:function(){return a.globalConfigSearchPlaces}}),Object.defineProperty(n,"globalConfigSearchPlacesSync",{enumerable:!0,get:function(){return a.globalConfigSearchPlacesSync}});let S=Rp(),C=zp(),N=Fp(),F=function identity(n){return n};function getUserDefinedOptionsFromMetaConfig(){let n=new C.ExplorerSync({moduleName:`cosmiconfig`,stopDir:process.cwd(),searchPlaces:a.metaSearchPlaces,ignoreEmptySearchPlaces:!1,applyPackagePropertyPathToConfiguration:!0,loaders:a.defaultLoaders,transform:F,cache:!0,metaConfigFilePath:null,mergeImportArrays:!0,mergeSearchPlaces:!0,searchStrategy:`none`}).search();if(!n)return null;if(n.config?.loaders)throw Error(`Can not specify loaders in meta config file`);if(n.config?.searchStrategy)throw Error(`Can not specify searchStrategy in meta config file`);let S={mergeSearchPlaces:!0,...n.config??{}};return{config:(0,N.removeUndefinedValuesFromObject)(S),filepath:n.filepath}}function getResolvedSearchPlaces(n,a,S){let C=S.searchPlaces?.map(a=>a.replace(`{name}`,n));return S.mergeSearchPlaces?[...C??[],...a]:C??a}function mergeOptionsBase(n,a,S){let C=getUserDefinedOptionsFromMetaConfig();if(!C)return{...a,...(0,N.removeUndefinedValuesFromObject)(S),loaders:{...a.loaders,...S.loaders}};let F=C.config,I=S.searchPlaces??a.searchPlaces;return{...a,...(0,N.removeUndefinedValuesFromObject)(S),metaConfigFilePath:C.filepath,...F,searchPlaces:getResolvedSearchPlaces(n,I,F),loaders:{...a.loaders,...S.loaders}}}function validateOptions(n){if(n.searchStrategy!=null&&n.searchStrategy!==`global`&&n.stopDir)throw Error('Can not supply `stopDir` option with `searchStrategy` other than "global"')}function mergeOptions(n,S){return validateOptions(S),mergeOptionsBase(n,{moduleName:n,searchPlaces:(0,a.getDefaultSearchPlaces)(n),ignoreEmptySearchPlaces:!0,cache:!0,transform:F,loaders:a.defaultLoaders,metaConfigFilePath:null,mergeImportArrays:!0,mergeSearchPlaces:!0,searchStrategy:S.stopDir?`global`:`none`},S)}function mergeOptionsSync(n,S){return validateOptions(S),mergeOptionsBase(n,{moduleName:n,searchPlaces:(0,a.getDefaultSearchPlacesSync)(n),ignoreEmptySearchPlaces:!0,cache:!0,transform:F,loaders:a.defaultLoadersSync,metaConfigFilePath:null,mergeImportArrays:!0,mergeSearchPlaces:!0,searchStrategy:S.stopDir?`global`:`none`},S)}function cosmiconfig(n,a={}){let C=mergeOptions(n,a),N=new S.Explorer(C);return{search:N.search.bind(N),load:N.load.bind(N),clearLoadCache:N.clearLoadCache.bind(N),clearSearchCache:N.clearSearchCache.bind(N),clearCaches:N.clearCaches.bind(N)}}n.cosmiconfig=cosmiconfig;function cosmiconfigSync(n,a={}){let S=mergeOptionsSync(n,a),N=new C.ExplorerSync(S);return{search:N.search.bind(N),load:N.load.bind(N),clearLoadCache:N.clearLoadCache.bind(N),clearSearchCache:N.clearSearchCache.bind(N),clearCaches:N.clearCaches.bind(N)}}n.cosmiconfigSync=cosmiconfigSync}));const Vp=/^[A-Za-z]:\//;function normalizeWindowsPath(n=``){return n&&n.replace(/\\/g,`/`).replace(Vp,n=>n.toUpperCase())}const Hp=/^[/\\]{2}/,Up=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,Wp=/^[A-Za-z]:$/,normalize=function(n){if(n.length===0)return`.`;n=normalizeWindowsPath(n);let a=n.match(Hp),S=isAbsolute(n),C=n[n.length-1]===`/`;return n=normalizeString(n,!S),n.length===0?S?`/`:C?`./`:`.`:(C&&(n+=`/`),Wp.test(n)&&(n+=`/`),a?S?`//${n}`:`//./${n}`:S&&!isAbsolute(n)?`/${n}`:n)},join=function(...n){let a=``;for(let S of n)if(S)if(a.length>0){let n=a[a.length-1]===`/`,C=S[0]===`/`;n&&C?a+=S.slice(1):a+=n||C?S:`/${S}`}else a+=S;return normalize(a)};function cwd(){return typeof process<`u`&&typeof process.cwd==`function`?process.cwd().replace(/\\/g,`/`):`/`}const resolve=function(...n){n=n.map(n=>normalizeWindowsPath(n));let a=``,S=!1;for(let C=n.length-1;C>=-1&&!S;C--){let N=C>=0?n[C]:cwd();!N||N.length===0||(a=`${N}/${a}`,S=isAbsolute(N))}return a=normalizeString(a,!S),S&&!isAbsolute(a)?`/${a}`:a.length>0?a:`.`};function normalizeString(n,a){let S=``,C=0,N=-1,F=0,I=null;for(let H=0;H<=n.length;++H){if(H<n.length)I=n[H];else if(I===`/`)break;else I=`/`;if(I===`/`){if(!(N===H-1||F===1))if(F===2){if(S.length<2||C!==2||S[S.length-1]!==`.`||S[S.length-2]!==`.`){if(S.length>2){let n=S.lastIndexOf(`/`);n===-1?(S=``,C=0):(S=S.slice(0,n),C=S.length-1-S.lastIndexOf(`/`)),N=H,F=0;continue}else if(S.length>0){S=``,C=0,N=H,F=0;continue}}a&&(S+=S.length>0?`/..`:`..`,C=2)}else S.length>0?S+=`/${n.slice(N+1,H)}`:S=n.slice(N+1,H),C=H-N-1;N=H,F=0}else I===`.`&&F!==-1?++F:F=-1}return S}const isAbsolute=function(n){return Up.test(n)},Gp=Symbol.for(`__confbox_fmt__`),Kp=/^(\s+)/,qp=/(\s+)$/;function i$4(n,a={}){return{sample:a.indent===void 0&&a.preserveIndentation!==!1&&n.slice(0,a?.sampleSize||1024),whiteSpace:a.preserveWhitespace===!1?void 0:{start:Kp.exec(n)?.[0]||``,end:qp.exec(n)?.[0]||``}}}__name$1(i$4,`i`);function a$4(n,a,S){!a||typeof a!=`object`||Object.defineProperty(a,Gp,{enumerable:!1,configurable:!0,writable:!0,value:i$4(n,S)})}__name$1(a$4,`a`);function e$2(n,a=!1){let S=n.length,C=0,N=``,F=0,I=16,H=0,W=0,K=0,q=0,Y=0;function h(a,S){let N=0,F=0;for(;N<a||!S;){let a=n.charCodeAt(C);if(a>=48&&a<=57)F=F*16+a-48;else if(a>=65&&a<=70)F=F*16+a-65+10;else if(a>=97&&a<=102)F=F*16+a-97+10;else break;C++,N++}return N<a&&(F=-1),F}function g(n){C=n,N=``,F=0,I=16,Y=0}function _(){let a=C;if(n.charCodeAt(C)===48)C++;else for(C++;C<n.length&&r$2(n.charCodeAt(C));)C++;if(C<n.length&&n.charCodeAt(C)===46)if(C++,C<n.length&&r$2(n.charCodeAt(C)))for(C++;C<n.length&&r$2(n.charCodeAt(C));)C++;else return Y=3,n.substring(a,C);let S=C;if(C<n.length&&(n.charCodeAt(C)===69||n.charCodeAt(C)===101))if(C++,(C<n.length&&n.charCodeAt(C)===43||n.charCodeAt(C)===45)&&C++,C<n.length&&r$2(n.charCodeAt(C))){for(C++;C<n.length&&r$2(n.charCodeAt(C));)C++;S=C}else Y=3;return n.substring(a,S)}function v(){let a=``,N=C;for(;;){if(C>=S){a+=n.substring(N,C),Y=2;break}let F=n.charCodeAt(C);if(F===34){a+=n.substring(N,C),C++;break}if(F===92){if(a+=n.substring(N,C),C++,C>=S){Y=2;break}switch(n.charCodeAt(C++)){case 34:a+=`"`;break;case 92:a+=`\\`;break;case 47:a+=`/`;break;case 98:a+=`\b`;break;case 102:a+=`\f`;break;case 110:a+=`
|
|
620
|
-
`;break;case 114:a+=`\r`;break;case 116:a+=` `;break;case 117:let n=h(4,!0);n>=0?a+=String.fromCharCode(n):Y=4;break;default:Y=5}N=C;continue}if(F>=0&&F<=31)if(n$3(F)){a+=n.substring(N,C),Y=2;break}else Y=6;C++}return a}function y(){if(N=``,Y=0,F=C,W=H,q=K,C>=S)return F=S,I=17;let a=n.charCodeAt(C);if(t$
|
|
621
|
-
`),H++,K=C,I=14;switch(a){case 123:return C++,I=1;case 125:return C++,I=2;case 91:return C++,I=3;case 93:return C++,I=4;case 58:return C++,I=6;case 44:return C++,I=5;case 34:return C++,N=v(),I=10;case 47:let W=C-1;if(n.charCodeAt(C+1)===47){for(C+=2;C<S&&!n$3(n.charCodeAt(C));)C++;return N=n.substring(W,C),I=12}if(n.charCodeAt(C+1)===42){C+=2;let a=S-1,F=!1;for(;C<a;){let a=n.charCodeAt(C);if(a===42&&n.charCodeAt(C+1)===47){C+=2,F=!0;break}C++,n$3(a)&&(a===13&&n.charCodeAt(C)===10&&C++,H++,K=C)}return F||(C++,Y=1),N=n.substring(W,C),I=13}return N+=String.fromCharCode(a),C++,I=16;case 45:if(N+=String.fromCharCode(a),C++,C===S||!r$2(n.charCodeAt(C)))return I=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return N+=_(),I=11;default:for(;C<S&&b(a);)C++,a=n.charCodeAt(C);if(F!==C){switch(N=n.substring(F,C),N){case`true`:return I=8;case`false`:return I=9;case`null`:return I=7}return I=16}return N+=String.fromCharCode(a),C++,I=16}}function b(n){if(t$
|
|
620
|
+
`;break;case 114:a+=`\r`;break;case 116:a+=` `;break;case 117:let n=h(4,!0);n>=0?a+=String.fromCharCode(n):Y=4;break;default:Y=5}N=C;continue}if(F>=0&&F<=31)if(n$3(F)){a+=n.substring(N,C),Y=2;break}else Y=6;C++}return a}function y(){if(N=``,Y=0,F=C,W=H,q=K,C>=S)return F=S,I=17;let a=n.charCodeAt(C);if(t$3(a)){do C++,N+=String.fromCharCode(a),a=n.charCodeAt(C);while(t$3(a));return I=15}if(n$3(a))return C++,N+=String.fromCharCode(a),a===13&&n.charCodeAt(C)===10&&(C++,N+=`
|
|
621
|
+
`),H++,K=C,I=14;switch(a){case 123:return C++,I=1;case 125:return C++,I=2;case 91:return C++,I=3;case 93:return C++,I=4;case 58:return C++,I=6;case 44:return C++,I=5;case 34:return C++,N=v(),I=10;case 47:let W=C-1;if(n.charCodeAt(C+1)===47){for(C+=2;C<S&&!n$3(n.charCodeAt(C));)C++;return N=n.substring(W,C),I=12}if(n.charCodeAt(C+1)===42){C+=2;let a=S-1,F=!1;for(;C<a;){let a=n.charCodeAt(C);if(a===42&&n.charCodeAt(C+1)===47){C+=2,F=!0;break}C++,n$3(a)&&(a===13&&n.charCodeAt(C)===10&&C++,H++,K=C)}return F||(C++,Y=1),N=n.substring(W,C),I=13}return N+=String.fromCharCode(a),C++,I=16;case 45:if(N+=String.fromCharCode(a),C++,C===S||!r$2(n.charCodeAt(C)))return I=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return N+=_(),I=11;default:for(;C<S&&b(a);)C++,a=n.charCodeAt(C);if(F!==C){switch(N=n.substring(F,C),N){case`true`:return I=8;case`false`:return I=9;case`null`:return I=7}return I=16}return N+=String.fromCharCode(a),C++,I=16}}function b(n){if(t$3(n)||n$3(n))return!1;switch(n){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function x(){let n;do n=y();while(n>=12&&n<=15);return n}return{setPosition:g,getPosition:()=>C,scan:a?x:y,getToken:()=>I,getTokenValue:()=>N,getTokenOffset:()=>F,getTokenLength:()=>C-F,getTokenStartLine:()=>W,getTokenStartCharacter:()=>F-q,getTokenError:()=>Y}}__name$1(e$2,`e`);function t$3(n){return n===32||n===9}__name$1(t$3,`t`);function n$3(n){return n===10||n===13}__name$1(n$3,`n`);function r$2(n){return n>=48&&n<=57}__name$1(r$2,`r`);var Jp;(function(n){n[n.lineFeed=10]=`lineFeed`,n[n.carriageReturn=13]=`carriageReturn`,n[n.space=32]=`space`,n[n._0=48]=`_0`,n[n._1=49]=`_1`,n[n._2=50]=`_2`,n[n._3=51]=`_3`,n[n._4=52]=`_4`,n[n._5=53]=`_5`,n[n._6=54]=`_6`,n[n._7=55]=`_7`,n[n._8=56]=`_8`,n[n._9=57]=`_9`,n[n.a=97]=`a`,n[n.b=98]=`b`,n[n.c=99]=`c`,n[n.d=100]=`d`,n[n.e=101]=`e`,n[n.f=102]=`f`,n[n.g=103]=`g`,n[n.h=104]=`h`,n[n.i=105]=`i`,n[n.j=106]=`j`,n[n.k=107]=`k`,n[n.l=108]=`l`,n[n.m=109]=`m`,n[n.n=110]=`n`,n[n.o=111]=`o`,n[n.p=112]=`p`,n[n.q=113]=`q`,n[n.r=114]=`r`,n[n.s=115]=`s`,n[n.t=116]=`t`,n[n.u=117]=`u`,n[n.v=118]=`v`,n[n.w=119]=`w`,n[n.x=120]=`x`,n[n.y=121]=`y`,n[n.z=122]=`z`,n[n.A=65]=`A`,n[n.B=66]=`B`,n[n.C=67]=`C`,n[n.D=68]=`D`,n[n.E=69]=`E`,n[n.F=70]=`F`,n[n.G=71]=`G`,n[n.H=72]=`H`,n[n.I=73]=`I`,n[n.J=74]=`J`,n[n.K=75]=`K`,n[n.L=76]=`L`,n[n.M=77]=`M`,n[n.N=78]=`N`,n[n.O=79]=`O`,n[n.P=80]=`P`,n[n.Q=81]=`Q`,n[n.R=82]=`R`,n[n.S=83]=`S`,n[n.T=84]=`T`,n[n.U=85]=`U`,n[n.V=86]=`V`,n[n.W=87]=`W`,n[n.X=88]=`X`,n[n.Y=89]=`Y`,n[n.Z=90]=`Z`,n[n.asterisk=42]=`asterisk`,n[n.backslash=92]=`backslash`,n[n.closeBrace=125]=`closeBrace`,n[n.closeBracket=93]=`closeBracket`,n[n.colon=58]=`colon`,n[n.comma=44]=`comma`,n[n.dot=46]=`dot`,n[n.doubleQuote=34]=`doubleQuote`,n[n.minus=45]=`minus`,n[n.openBrace=123]=`openBrace`,n[n.openBracket=91]=`openBracket`,n[n.plus=43]=`plus`,n[n.slash=47]=`slash`,n[n.formFeed=12]=`formFeed`,n[n.tab=9]=`tab`})(Jp||={}),Array(20).fill(0).map((n,a)=>` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
|
|
622
622
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
|
|
623
623
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
|
|
624
624
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
|
|
@@ -629,7 +629,7 @@ ${[...S,a].map((n,a)=>`${a+1}. ${n}`).join(`
|
|
|
629
629
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
|
|
630
630
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
|
|
631
631
|
`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
|
|
632
|
-
`+` `.repeat(a));var th;(function(n){n.DEFAULT={allowTrailingComma:!1}})(th||={});function Pe(n,a=[],S=th.DEFAULT){let C=null,N=[],F=[];function i(n){Array.isArray(N)?N.push(n):C!==null&&(N[C]=n)}return r(i,`onValue`),We(n,{onObjectBegin:r(()=>{let n={};i(n),F.push(N),N=n,C=null},`onObjectBegin`),onObjectProperty:r(n=>{C=n},`onObjectProperty`),onObjectEnd:r(()=>{N=F.pop()},`onObjectEnd`),onArrayBegin:r(()=>{let n=[];i(n),F.push(N),N=n,C=null},`onArrayBegin`),onArrayEnd:r(()=>{N=F.pop()},`onArrayEnd`),onLiteralValue:i,onError:r((n,S,C)=>{a.push({error:n,offset:S,length:C})},`onError`)},S),N[0]}r(Pe,`parse$1`);function We(n,a,S=th.DEFAULT){let C=Ne(n,!1),N=[],F=0;function i(n){return n?()=>F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(i,`toNoArgVisit`);function f(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(f,`toOneArgVisit`);function u(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice()):()=>!0}r(u,`toOneArgVisitWithPath`);function g(n){return n?()=>{F>0?F++:n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice())===!1&&(F=1)}:()=>!0}r(g,`toBeginVisit`);function w(n){return n?()=>{F>0&&F--,F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter())}:()=>!0}r(w,`toEndVisit`);let I=g(a.onObjectBegin),H=u(a.onObjectProperty),W=w(a.onObjectEnd),K=g(a.onArrayBegin),q=w(a.onArrayEnd),Y=u(a.onLiteralValue),X=f(a.onSeparator),te=i(a.onComment),ne=f(a.onError),re=S&&S.disallowComments,ie=S&&S.allowTrailingComma;function T(){for(;;){let n=C.scan();switch(C.getTokenError()){case 4:k(14);break;case 5:k(15);break;case 3:k(13);break;case 1:re||k(11);break;case 2:k(12);break;case 6:k(16);break}switch(n){case 12:case 13:re?k(10):te();break;case 16:k(1);break;case 15:case 14:break;default:return n}}}r(T,`scanNext`);function k(n,a=[],S=[]){if(ne(n),a.length+S.length>0){let n=C.getToken();for(;n!==17;){if(a.indexOf(n)!==-1){T();break}else if(S.indexOf(n)!==-1)break;n=T()}}}r(k,`handleError`);function P(n){let a=C.getTokenValue();return n?Y(a):(H(a),N.push(a)),T(),!0}r(P,`parseString`);function M(){switch(C.getToken()){case 11:let n=C.getTokenValue(),a=Number(n);isNaN(a)&&(k(2),a=0),Y(a);break;case 7:Y(null);break;case 8:Y(!0);break;case 9:Y(!1);break;default:return!1}return T(),!0}r(M,`parseLiteral`);function V(){return C.getToken()===10?(P(!1),C.getToken()===6?(X(`:`),T(),U()||k(4,[],[2,5])):k(5,[],[2,5]),N.pop(),!0):(k(3,[],[2,5]),!1)}r(V,`parseProperty`);function z(){I(),T();let n=!1;for(;C.getToken()!==2&&C.getToken()!==17;){if(C.getToken()===5){if(n||k(4,[],[]),X(`,`),T(),C.getToken()===2&&ie)break}else n&&k(6,[],[]);V()||k(4,[],[2,5]),n=!0}return W(),C.getToken()===2?T():k(7,[2],[]),!0}r(z,`parseObject`);function G(){K(),T();let n=!0,a=!1;for(;C.getToken()!==4&&C.getToken()!==17;){if(C.getToken()===5){if(a||k(4,[],[]),X(`,`),T(),C.getToken()===4&&ie)break}else a&&k(6,[],[]);n?(N.push(0),n=!1):N[N.length-1]++,U()||k(4,[],[4,5]),a=!0}return q(),n||N.pop(),C.getToken()===4?T():k(8,[4],[]),!0}r(G,`parseArray`);function U(){switch(C.getToken()){case 3:return G();case 1:return z();case 10:return P(!0);default:return M()}}return r(U,`parseValue`),T(),C.getToken()===17?S.allowEmptyContent?!0:(k(4,[],[]),!1):U()?(C.getToken()!==17&&k(9,[],[]),!0):(k(4,[],[]),!1)}r(We,`visit`);var nh;(function(n){n[n.None=0]=`None`,n[n.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=4]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=6]=`InvalidCharacter`})(nh||={});var rh;(function(n){n[n.OpenBraceToken=1]=`OpenBraceToken`,n[n.CloseBraceToken=2]=`CloseBraceToken`,n[n.OpenBracketToken=3]=`OpenBracketToken`,n[n.CloseBracketToken=4]=`CloseBracketToken`,n[n.CommaToken=5]=`CommaToken`,n[n.ColonToken=6]=`ColonToken`,n[n.NullKeyword=7]=`NullKeyword`,n[n.TrueKeyword=8]=`TrueKeyword`,n[n.FalseKeyword=9]=`FalseKeyword`,n[n.StringLiteral=10]=`StringLiteral`,n[n.NumericLiteral=11]=`NumericLiteral`,n[n.LineCommentTrivia=12]=`LineCommentTrivia`,n[n.BlockCommentTrivia=13]=`BlockCommentTrivia`,n[n.LineBreakTrivia=14]=`LineBreakTrivia`,n[n.Trivia=15]=`Trivia`,n[n.Unknown=16]=`Unknown`,n[n.EOF=17]=`EOF`})(rh||={});const ih=Pe;var ah;(function(n){n[n.InvalidSymbol=1]=`InvalidSymbol`,n[n.InvalidNumberFormat=2]=`InvalidNumberFormat`,n[n.PropertyNameExpected=3]=`PropertyNameExpected`,n[n.ValueExpected=4]=`ValueExpected`,n[n.ColonExpected=5]=`ColonExpected`,n[n.CommaExpected=6]=`CommaExpected`,n[n.CloseBraceExpected=7]=`CloseBraceExpected`,n[n.CloseBracketExpected=8]=`CloseBracketExpected`,n[n.EndOfFileExpected=9]=`EndOfFileExpected`,n[n.InvalidCommentToken=10]=`InvalidCommentToken`,n[n.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=14]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=16]=`InvalidCharacter`})(ah||={});const oh=r((n,a)=>ih(Ym(a,n,`utf8`)),`readJsonc`),sh=Symbol(`implicitBaseUrl`),ch="${configDir}",lh=r(()=>{let{findPnpApi:n}=Is;return n&&n(process.cwd())},`getPnpApi`),uh=r((n,a,S,C)=>{let N=`resolveFromPackageJsonPath:${n}:${a}:${S}`;if(C!=null&&C.has(N))return C.get(N);let F=oh(n,C);if(!F)return;let I=a||`tsconfig.json`;if(!S&&F.exports)try{let[n]=v(F.exports,a,[`require`,`types`]);I=n}catch{return!1}else !a&&F.tsconfig&&(I=F.tsconfig);return I=zo.join(n,`..`,I),C?.set(N,I),I},`resolveFromPackageJsonPath`),dh=`package.json`,fh=`tsconfig.json`,ph=r((n,a,S)=>{let C=n;if(n===`..`&&(C=zo.join(C,fh)),n[0]===`.`&&(C=zo.resolve(a,C)),zo.isAbsolute(C)){if(Jm(S,C)){if(Xm(S,C).isFile())return C}else if(!C.endsWith(`.json`)){let n=`${C}.json`;if(Jm(S,n))return n}return}let[N,...F]=n.split(`/`),I=N[0]===`@`?`${N}/${F.shift()}`:N,H=F.join(`/`),W=lh();if(W){let{resolveRequest:C}=W;try{if(I===n){let n=C(zo.join(I,dh),a);if(n){let a=uh(n,H,!1,S);if(a&&Jm(S,a))return a}}else{let S;try{S=C(n,a,{extensions:[`.json`]})}catch{S=C(zo.join(n,fh),a)}if(S)return S}}catch{}}let K=Zm(zo.resolve(a),zo.join(`node_modules`,I),S);if(!K||!Xm(S,K).isDirectory())return;let q=zo.join(K,dh);if(Jm(S,q)){let n=uh(q,H,!1,S);if(n===!1)return;if(n&&Jm(S,n)&&Xm(S,n).isFile())return n}let Y=zo.join(K,H),X=Y.endsWith(`.json`);if(!X){let n=`${Y}.json`;if(Jm(S,n))return n}if(Jm(S,Y)){if(Xm(S,Y).isDirectory()){let n=zo.join(Y,dh);if(Jm(S,n)){let a=uh(n,``,!0,S);if(a&&Jm(S,a))return a}let a=zo.join(Y,fh);if(Jm(S,a))return a}else if(X)return Y}},`resolveExtendsPath`),mh=r((n,a)=>$m(zo.relative(n,a)),`pathRelative`),hh=[`files`,`include`,`exclude`],gh=r((n,a,S)=>{let C=zo.join(a,S);return h$1(zo.relative(n,C))||`./`},`resolveAndRelativize`),vh=r((n,a,S)=>{let C=zo.relative(n,a);return C?h$1(`${C}/${S.startsWith(`./`)?S.slice(2):S}`):S},`prefixPattern`),yh=r((n,a,S,C)=>{let N=ph(n,a,C);if(!N)throw Error(`File '${n}' not found.`);if(S.has(N))throw Error(`Circularity detected while resolving configuration: ${N}`);S.add(N);let F=zo.dirname(N),I=xh(N,C,S);delete I.references;let{compilerOptions:H}=I;if(H){let{baseUrl:n}=H;n&&!n.startsWith(ch)&&(H.baseUrl=gh(a,F,n));let{outDir:S}=H;S&&!S.startsWith(ch)&&(H.outDir=gh(a,F,S));let{declarationDir:C}=H;C&&!C.startsWith(ch)&&(H.declarationDir=gh(a,F,C));let{rootDir:N}=H;N&&!N.startsWith(ch)&&(H.rootDir=gh(a,F,N));let{rootDirs:I}=H;I&&(H.rootDirs=I.map(n=>n.startsWith(ch)?n:gh(a,F,n)));let{typeRoots:W}=H;W&&(H.typeRoots=W.map(n=>n.startsWith(ch)?n:gh(a,F,n)))}for(let n of hh){let S=I[n];S&&(I[n]=S.map(n=>n.startsWith(ch)?n:vh(a,F,n)))}return I},`resolveExtends`),bh=[`outDir`,`declarationDir`],xh=r((n,a,S=new Set)=>{let C;try{C=oh(n,a)||{}}catch{throw Error(`Cannot resolve tsconfig at path: ${n}`)}if(typeof C!=`object`)throw SyntaxError(`Failed to parse tsconfig at: ${n}`);let N=zo.dirname(n);if(C.compilerOptions){let{compilerOptions:n}=C;n.paths&&!n.baseUrl&&(n[sh]=N)}if(C.extends){let n=Array.isArray(C.extends)?C.extends:[C.extends];delete C.extends;for(let F of n.reverse()){let n=yh(F,N,new Set(S),a),I={...n,...C,compilerOptions:{...n.compilerOptions,...C.compilerOptions}};n.watchOptions&&(I.watchOptions={...n.watchOptions,...C.watchOptions}),C=I}}if(C.compilerOptions){let{compilerOptions:n}=C;for(let a of[`baseUrl`,`rootDir`]){let S=n[a];S&&!S.startsWith(ch)&&(n[a]=mh(N,zo.resolve(N,S)))}for(let a of bh){let S=n[a];S&&(Array.isArray(C.exclude)||(C.exclude=bh.map(a=>n[a]).filter(Boolean)),S.startsWith(ch)||(S=$m(S)),n[a]=S)}}else C.compilerOptions={};if(C.include&&=C.include.map(h$1),C.files&&=C.files.map(n=>n.startsWith(ch)?n:$m(n)),C.watchOptions){let{watchOptions:n}=C;n.excludeDirectories&&=n.excludeDirectories.map(n=>h$1(zo.resolve(N,n))),n.excludeFiles&&=n.excludeFiles.map(n=>h$1(zo.resolve(N,n))),n.watchFile&&=n.watchFile.toLowerCase(),n.watchDirectory&&=n.watchDirectory.toLowerCase(),n.fallbackPolling&&=n.fallbackPolling.toLowerCase()}return C},`_parseTsconfig`),Sh=r((n,a)=>{if(n.startsWith(ch))return h$1(zo.join(a,n.slice(12)))},`interpolateConfigDir`),Ch=[`outDir`,`declarationDir`,`outFile`,`rootDir`,`baseUrl`,`tsBuildInfoFile`],wh=r(n=>{if(n.strict)for(let a of[`noImplicitAny`,`noImplicitThis`,`strictNullChecks`,`strictFunctionTypes`,`strictBindCallApply`,`strictPropertyInitialization`,`strictBuiltinIteratorReturn`,`alwaysStrict`,`useUnknownInCatchVariables`])n[a]===void 0&&(n[a]=!0);if(n.composite&&(n.declaration??=!0,n.incremental??=!0),n.target){let a=n.target.toLowerCase();a===`es2015`&&(a=`es6`),n.target=a,a===`esnext`&&(n.module??=`es6`,n.useDefineForClassFields??=!0),(a===`es6`||a===`es2016`||a===`es2017`||a===`es2018`||a===`es2019`||a===`es2020`||a===`es2021`||a===`es2022`||a===`es2023`||a===`es2024`)&&(n.module??=`es6`),(a===`es2022`||a===`es2023`||a===`es2024`)&&(n.useDefineForClassFields??=!0)}if(n.module){let a=n.module.toLowerCase();if(a===`es2015`&&(a=`es6`),n.module=a,(a===`es6`||a===`es2020`||a===`es2022`||a===`esnext`||a===`none`||a===`system`||a===`umd`||a===`amd`)&&(n.moduleResolution??=`classic`),a===`system`&&(n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`||a===`preserve`)&&(n.esModuleInterop??=!0,n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`)&&(n.moduleDetection??=`force`),a===`node16`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node18`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node20`&&(n.target??=`es2023`,n.moduleResolution??=`node16`,n.resolveJsonModule??=!0),a===`nodenext`&&(n.target??=`esnext`,n.moduleResolution??=`nodenext`,n.resolveJsonModule??=!0),a===`node16`||a===`node18`||a===`node20`||a===`nodenext`){let a=n.target;(a===`es3`||a===`es2022`||a===`es2023`||a===`es2024`||a===`esnext`)&&(n.useDefineForClassFields??=!0)}a===`preserve`&&(n.moduleResolution??=`bundler`)}if(n.moduleResolution){let a=n.moduleResolution.toLowerCase();a===`node`&&(a=`node10`),n.moduleResolution=a,(a===`node16`||a===`nodenext`||a===`bundler`)&&(n.resolvePackageJsonExports??=!0,n.resolvePackageJsonImports??=!0),a===`bundler`&&(n.allowSyntheticDefaultImports??=!0,n.resolveJsonModule??=!0)}n.jsx&&=n.jsx.toLowerCase(),n.moduleDetection&&=n.moduleDetection.toLowerCase(),n.importsNotUsedAsValues&&=n.importsNotUsedAsValues.toLowerCase(),n.newLine&&=n.newLine.toLowerCase(),n.esModuleInterop&&(n.allowSyntheticDefaultImports??=!0),n.verbatimModuleSyntax&&(n.isolatedModules??=!0,n.preserveConstEnums??=!0),n.isolatedModules&&(n.preserveConstEnums??=!0),n.rewriteRelativeImportExtensions&&(n.allowImportingTsExtensions??=!0),n.lib&&=n.lib.map(n=>n.toLowerCase()),n.checkJs&&(n.allowJs??=!0)},`normalizeCompilerOptions`),Th=r((n,a=new Map)=>{let S=zo.resolve(n),C=xh(S,a),N=zo.dirname(S),{compilerOptions:F}=C;if(F){for(let n of Ch){let a=F[n];if(a){let S=Sh(a,N);F[n]=S?mh(N,S):a}}for(let n of[`rootDirs`,`typeRoots`]){let a=F[n];a&&(F[n]=a.map(n=>{let a=Sh(n,N);return a?mh(N,a):$m(n)}))}let{paths:n}=F;if(n)for(let a of Object.keys(n))n[a]=n[a].map(n=>Sh(n,N)??n);wh(F)}for(let n of hh){let a=C[n];a&&(C[n]=a.map(n=>Sh(n,N)??n))}return C},`parseTsconfig`);var Eh=Object.defineProperty,Dh=r((n,a)=>Eh(n,`name`,{value:a,configurable:!0}),`s`);const Oh=Dh(n=>{let a=``;for(let S=0;S<n.length;S+=1){let C=n[S],N=C.toUpperCase();a+=C===N?C.toLowerCase():N}return a},`invertCase`),kh=new Map,Ah=Dh((n,a)=>{let S=zo.join(n,`.is-fs-case-sensitive-test-${process.pid}`);try{return a.writeFileSync(S,``),!a.existsSync(Oh(S))}finally{try{a.unlinkSync(S)}catch{}}},`checkDirectoryCaseWithWrite`),jh=Dh((n,a,S)=>{try{return Ah(n,S)}catch(n){if(a===void 0)return Ah(Tp.tmpdir(),S);throw n}},`checkDirectoryCaseWithFallback`),Mh=Dh((n,a=Ds,S=!0)=>{let C=n??process.cwd();if(S&&kh.has(C))return kh.get(C);let N,F=Oh(C);return N=F!==C&&a.existsSync(C)?!a.existsSync(F):jh(C,n,a),S&&kh.set(C,N),N},`isFsCaseSensitive`),{join:Nh}=zo.posix,Ph={ts:[`.ts`,`.tsx`,`.d.ts`],cts:[`.cts`,`.d.cts`],mts:[`.mts`,`.d.mts`]},Fh=r(n=>{let a=[...Ph.ts],S=[...Ph.cts],C=[...Ph.mts];return n!=null&&n.allowJs&&(a.push(`.js`,`.jsx`),S.push(`.cjs`),C.push(`.mjs`)),[...a,...S,...C]},`getSupportedExtensions`),Ih=r(n=>{let a=[];if(!n)return a;let{outDir:S,declarationDir:C}=n;return S&&a.push(S),C&&a.push(C),a},`getDefaultExcludeSpec`),Lh=r(n=>n.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),`escapeForRegexp`),Rh=`(?!(${[`node_modules`,`bower_components`,`jspm_packages`].join(`|`)})(/|$))`,zh=/(?:^|\/)[^.*?]+$/,Bh=`**/*`,Vh=`[^/]`,Hh=`[^./]`,Uh=process.platform===`win32`,Wh=r(({config:n,path:a},S=Mh())=>{if(`extends`in n)throw Error(`tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.`);if(!zo.isAbsolute(a))throw Error(`The tsconfig path must be absolute`);Uh&&(a=h$1(a));let C=zo.dirname(a),{files:N,include:F,exclude:I,compilerOptions:H}=n,W=r(n=>zo.isAbsolute(n)?n:Nh(C,n),`resolvePattern`),K=N?.map(W),q=Fh(H),Y=S?``:`i`,X=(I||Ih(H)).map(n=>{let a=Lh(W(n)).replaceAll(String.raw`\*\*/`,`(.+/)?`).replaceAll(String.raw`\*`,`${Vh}*`).replaceAll(String.raw`\?`,Vh);return RegExp(`^${a}($|/)`,Y)}),te=N||F?F:[Bh],ne=te?te.map(n=>{let a=W(n);zh.test(a)&&(a=Nh(a,Bh));let S=Lh(a).replaceAll(String.raw`/\*\*`,`(/${Rh}${Hh}${Vh}*)*?`).replaceAll(/(\/)?\\\*/g,(n,a)=>{let S=`(${Hh}|(\\.(?!min\\.js$))?)*`;return a?`/${Rh}${Hh}${S}`:S}).replaceAll(/(\/)?\\\?/g,(n,a)=>{let S=Vh;return a?`/${Rh}${S}`:S});return RegExp(`^${S}$`,Y)}):void 0;return a=>{if(!zo.isAbsolute(a))throw Error(`filePath must be absolute`);if(Uh&&(a=h$1(a)),K!=null&&K.includes(a)||!(!q.some(n=>a.endsWith(n))||X.some(n=>n.test(a)))&&ne&&ne.some(n=>n.test(a)))return n}},`createFilesMatcher`),Gh=r((n,a,S)=>{let C=zo.resolve(n),N=h$1(n);for(;;){let n=Zm(N,a,S);if(!n)return;let F=zo.resolve(n),I=Th(F,S),H={path:h$1(F),config:I};if(Wh(H)(C))return H;let W=zo.dirname(n),K=zo.dirname(W);if(K===W)return;N=K}},`findConfigApplicable`),Kh=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>C?Gh(n,a,S)?.path:Zm(h$1(n),a,S),`findTsconfig`),qh=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>{if(!C){let C=Kh(n,a,S);return C?{path:C,config:Th(C,S)}:null}return Gh(n,a,S)??null},`getTsconfig`),Jh=/\*/g,Yh=r((n,a)=>{let S=n.match(Jh);if(S&&S.length>1)throw Error(a)},`assertStarCount`),Xh=r(n=>{if(n.includes(`*`)){let[a,S]=n.split(`*`);return{prefix:a,suffix:S}}return n},`parsePattern`),Zh=r(({prefix:n,suffix:a},S)=>S.startsWith(n)&&S.endsWith(a),`isPatternMatch`),Qh=r((n,a,S)=>Object.entries(n).map(([n,C])=>(Yh(n,`Pattern '${n}' can have at most one '*' character.`),{pattern:Xh(n),substitutions:C.map(C=>{if(Yh(C,`Substitution '${C}' in pattern '${n}' can have at most one '*' character.`),!a&&!Qm.test(C)&&!zo.isAbsolute(C))throw Error(`Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?`);return zo.resolve(S,C)})})),`parsePaths`);r(n=>{let{compilerOptions:a}=n.config;if(!a)return null;let{baseUrl:S,paths:C}=a;if(!S&&!C)return null;let N=sh in a&&a[sh],F=zo.resolve(zo.dirname(n.path),S||N||`.`),I=C?Qh(C,S,F):[];return n=>{if(Qm.test(n))return[];let a=[];for(let S of I){if(S.pattern===n)return S.substitutions.map(h$1);typeof S.pattern!=`string`&&a.push(S)}let C,N=-1;for(let S of a)Zh(S.pattern,n)&&S.pattern.prefix.length>N&&(N=S.pattern.prefix.length,C=S);if(!C)return S?[h$1(zo.join(F,n))]:[];let H=n.slice(C.pattern.prefix.length,n.length-C.pattern.suffix.length);return C.substitutions.map(n=>h$1(n.replace(`*`,H)))}},`createPathsMatcher`),je();function defaultSearchPlaces(n){return[`package.json`,`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.mjs`,`.${n}rc.cjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.mjs`,`${n}.config.cjs`]}function merge(n,...a){for(let S of a)if(S)for(let a of Object.keys(S)){let C=n[a],N=S[a];N!==void 0&&(isPlainObject$1(C)&&isPlainObject$1(N)?merge(C,N):n[a]=N)}return n}function isPlainObject$1(n){return typeof n==`object`&&!!n&&!Array.isArray(n)&&Object.getPrototypeOf(n)===Object.prototype}__name$1(isPlainObject$1,`isPlainObject`);function readDottedPath(n,a){if(!a.includes(`.`))return n[a];let S=n;for(let n of a.split(`.`)){if(typeof S!=`object`||!S)return;S=S[n]}return S}var Config=class{loadOptions={};constructor(n={}){Object.keys(n).length&&(this.loadOptions=n)}async load(n){let a=await(0,em.cosmiconfig)(Mu,{...this.loadOptions,searchPlaces:(this.loadOptions.searchPlaces??defaultSearchPlaces(`gjsify`)).filter(n=>n!==`package.json`)}).search(n),S={};try{let a=await this.readPackageJSON(n);isPlainObject$1(a?.gjsify)&&merge(S,a.gjsify)}catch{}return a?.config&&isPlainObject$1(a.config)&&merge(S,a.config),S.bundler||={},S.library||={},S.typescript||={},{config:S,filepath:a?.filepath??``,isEmpty:!a&&Object.keys(S).length===3}}async readPackageJSON(n){return n=await resolvePackageJSON(n),await readPackageJSON(n)}async readTSConfig(n){return qh(n)?.config||{}}async forBuild(n){let a=await this.load(process.cwd()),S={...a.config},C=a.filepath||process.cwd(),N=await this.readPackageJSON(C),F=await this.readTSConfig(C);if(F.reflection||=n.reflection,S.verbose=n.verbose||!1,S.exclude=n.exclude||[],n.consoleShim!==void 0&&(S.consoleShim=n.consoleShim),n.globals!==void 0&&(S.globals=n.globals),n.shebang!==void 0&&(S.shebang=n.shebang),n.excludeGlobals){let a=(Array.isArray(n.excludeGlobals)?n.excludeGlobals.join(`,`):String(n.excludeGlobals)).split(`,`).map(n=>n.trim()).filter(Boolean);a.length&&(S.excludeGlobals=[...S.excludeGlobals??[],...a])}merge(S.library??={},N,S.library),merge(S.typescript??={},F,S.typescript);let parseKvPairs=(n,a)=>{let S={};for(let C of n){let n=C.indexOf(`=`);if(n===-1)throw Error(`Invalid --${a} value '${C}'. Expected KEY=VALUE.`);let N=C.slice(0,n).trim(),F=C.slice(n+1);if(!N)throw Error(`Invalid --${a} value '${C}'. Empty key.`);S[N]=F}return S},I=parseKvPairs(n.define??[],`define`),H=parseKvPairs(n.alias??[],`alias`);Object.keys(H).length&&(S.aliases={...S.aliases,...H});let W={};if(S.defineFromPackageJson)for(let[n,a]of Object.entries(S.defineFromPackageJson)){if(!a||typeof a.field!=`string`||!a.field)throw Error(`gjsify config: defineFromPackageJson["${n}"] is missing a "field" string`);let S=readDottedPath(N,a.field);W[n]=S===void 0?`undefined`:JSON.stringify(S)}let K={};if(S.defineFromEnv)for(let[n,a]of Object.entries(S.defineFromEnv)){if(!a||typeof a.env!=`string`||!a.env)throw Error(`gjsify config: defineFromEnv["${n}"] is missing an "env" string`);let S=process.env[a.env],C=S===void 0?a.default:S;K[n]=C===void 0?`undefined`:JSON.stringify(C)}let q=S.bundler??={},Y=q.output??={},X=q.transform??={};return n.entryPoints?.length&&(q.input=n.entryPoints),q.input||=[`src/index.ts`],n.outfile!==void 0&&(Y.file=n.outfile),n.outdir!==void 0&&(Y.dir=n.outdir),n.format!==void 0&&(Y.format=n.format),n.minify!==void 0&&(Y.minify=n.minify),Y.minify===void 0&&(Y.minify=!0),Y.minify===!0&&(Y.keepNames=!0),n.logLevel&&(q.logLevel={silent:`silent`,error:`warn`,warning:`warn`,warn:`warn`,info:`info`,debug:`debug`,verbose:`debug`}[n.logLevel]??`warn`),n.external?.length&&(q.external=[...Array.isArray(q.external)?q.external:[],...n.external]),(Object.keys(I).length||Object.keys(W).length||Object.keys(K).length)&&(X.define={...X.define,...W,...K,...I}),S.verbose&&Ae.debug(`configData`,S),S}};je(),Os(),Bo(),Ls(),en();async function loadNpmRolldown(){return(await import(`rolldown`)).rolldown}async function bundleToChunks(n){if(await shouldUseNative()){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.rolldownInput.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let N=liftTransformExtras(stripUnserializable({...n.rolldownInput,input:normalizeInputForNative(n.rolldownInput.input),format:n.format}));delete N.plugins;let F=await a.bundleWithPlugins(N,C),I=[];for(let n of F.output)n.type===`chunk`&&I.push(n.code);return I}let a=await(await loadNpmRolldown())(n.rolldownInput);try{let S=await a.generate({format:n.format,minify:!1,sourcemap:!1}),C=[];for(let n of S.output)n.type===`chunk`&&C.push(n.code);return C}finally{await a.close()}}async function runWatch(n){if(await shouldUseNative())throw Error("`gjsify build --watch` requires the npm `rolldown` engine. The native engine (`@gjsify/rolldown-native`) does not expose a watcher API. Run the watch loop under Node (`node lib/index.js build … --watch`) or set `GJSIFY_BUNDLER=npm`.");let a=await import(`rolldown`),S=n.output??{};return a.watch({...n,output:S})}async function runBundle(n){if(await shouldUseNative())return await runNativeBundle(n);let a=await(await loadNpmRolldown())(n);try{return await a.write(n.output??{})}finally{await a.close()}}let $h=null;async function shouldUseNative(){let n=(globalThis.process?.env??{}).GJSIFY_BUNDLER;if(n===`npm`)return!1;if(n===`native`){if(!await tryLoadNative())throw Error(`GJSIFY_BUNDLER=native but @gjsify/rolldown-native is not loadable (no prebuild for this architecture, or not running under GJS).`);return!0}return globalThis.imports?.gi===void 0?!1:await tryLoadNative()!==null}async function tryLoadNative(){return $h||($h=(async()=>{let n=globalThis.imports?.gi!==void 0;if(!n)return null;try{let a=`@gjsify/rolldown-native`,S=a;n&&(S=pathToFileURL(createRequire(import.meta.url).resolve(a)).href);let C=await import(S);return C.hasNativeRolldown()?C:null}catch{return null}})(),$h)}async function runNativeBundle(n){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let{output:N,plugins:F,...I}=n,H=liftTransformExtras(stripUnserializable({...I,...N,input:normalizeInputForNative(n.input)}));globalThis.process?.env?.GJSIFY_DEBUG_NATIVE_OPTS&&Ae.error(`[gjsify-bundler-pick] native opts JSON:`,JSON.stringify(H));let W=await a.bundleWithPlugins(H,C),K=n.output??{},q=K.dir??(K.file?Mo(K.file):process.cwd());q&&await rs.mkdir(q,{recursive:!0});for(let n of W.output)if(n.type===`chunk`){let a=K.file&&W.output.length===1?K.file:ko(q,n.fileName);await rs.writeFile(a,n.code,`utf8`)}return synthRolldownOutput(W)}function stripUnserializable(n){let a={};for(let[S,C]of Object.entries(n))typeof C!=`function`&&(S===`sourcemap`&&typeof C==`boolean`||(a[S]=C));return a}function liftTransformExtras(n){let a=n.transform;if(!a)return n;let S={},C={...a};for(let n of[`define`,`inject`])n in C&&(S[n]=C[n],delete C[n]);return S.inject!==void 0&&!Array.isArray(S.inject)&&(S.inject=mapToInjectArray(S.inject)),{...n,transform:Object.keys(C).length===0?void 0:C,...S}}function mapToInjectArray(n){let a=[];for(let[S,C]of Object.entries(n))if(typeof C==`string`)a.push({type:`default`,from:C,alias:S});else{let[n,N]=C;a.push({type:`named`,from:n,imported:N,alias:S})}return a}function normalizeInputForNative(n){return n===void 0?[]:typeof n==`string`?[{import:n}]:Array.isArray(n)?n.map(n=>typeof n==`string`?{import:n}:n):Object.entries(n).map(([n,a])=>({name:n,import:a}))}function isPluginObject(n){return typeof n==`object`&&!!n&&!Array.isArray(n)}function pickHook(n){if(typeof n==`function`)return{fn:n};if(typeof n==`object`&&n&&`handler`in n){let a=n,S=filterToRegexSource(a.filter?.id),C={fn:a.handler};return S!==void 0&&(C.idFilter=S),C}}function filterToRegexSource(n){if(n!==void 0){if(Array.isArray(n)){let a=n.map(oneToSource).filter(n=>n!==void 0);return a.length===0?void 0:a.length===1?a[0]:`(?:${a.join(`|`)})`}return oneToSource(n)}}function oneToSource(n){if(n instanceof RegExp)return n.source;if(typeof n==`string`)return n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function toNativePlugin(n){let a={name:typeof n.name==`string`?n.name:`unnamed-plugin`},S={},C=pickHook(n.load);C&&(a.load=C.fn,C.idFilter&&(S.load=C.idFilter));let N=pickHook(n.transform);N&&(a.transform=N.fn,N.idFilter&&(S.transform=N.idFilter));let F=pickHook(n.resolveId);F&&(a.resolveId=F.fn,F.idFilter&&(S.resolveId=F.idFilter));let I=pickHook(n.renderChunk);I&&(a.renderChunk=I.fn);let H=pickHook(n.banner);H&&(a.banner=H.fn);let W=pickHook(n.footer);W&&(a.footer=W.fn);let K=pickHook(n.intro);K&&(a.intro=K.fn);let q=pickHook(n.outro);q&&(a.outro=q.fn);let Y=pickHook(n.buildStart);Y&&(a.buildStart=Y.fn);let X=pickHook(n.buildEnd);X&&(a.buildEnd=X.fn);let te=pickHook(n.generateBundle);te&&(a.generateBundle=te.fn);let ne=pickHook(n.writeBundle);ne&&(a.writeBundle=ne.fn);let re=pickHook(n.closeBundle);return re&&(a.closeBundle=re.fn),Object.keys(S).length>0&&(a.idFilter=S),a}function synthRolldownOutput(n){return{output:n.output.map(n=>n.type===`chunk`?{type:`chunk`,fileName:n.fileName,code:n.code,name:n.name,isEntry:n.isEntry,isDynamicEntry:n.isDynamicEntry,map:n.map??null,sourcemapFileName:n.sourcemapFilename??null,imports:n.imports,dynamicImports:n.dynamicImports,facadeModuleId:null,moduleIds:[],modules:{},exports:[],referencedFiles:[],importedBindings:{}}:{type:`asset`,fileName:n.fileName,names:n.names,originalFileNames:n.originalFileNames,source:n.sourceText??``,needsCodeReference:!1})}}je(),as(),Os(),Bo(),en();const eg=new Set([`polyfill`,`native`,`partial`,`none`]),tg=new Set([`gjs`,`node`,`browser`]);let ng=null;const rg=new Set;function findScanRoots(){let n=[],a=Mo(fileURLToPath(import.meta.url));for(let S=0;S<8;S++){let S=Eo(a,`packages`);if(existsSync(S))try{[`node`,`web`,`dom`,`framework`,`infra`].some(n=>existsSync(ko(S,n)))&&n.push({kind:`workspace`,dir:S})}catch{}let C=Eo(a,`node_modules`,`@gjsify`);existsSync(C)&&n.push({kind:`installed`,dir:C});let N=Mo(a);if(N===a)break;a=N}try{let a=Eo(process.cwd(),`node_modules`,`@gjsify`);existsSync(a)&&n.push({kind:`installed`,dir:a})}catch{}return n}function ingestPackageDirSync(n,a){let S=ko(n,`package.json`);if(existsSync(S))try{let C=readFileSync(S,`utf8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:null,I=N?.gjsify?.runtimes;if(F&&F.startsWith(`@gjsify/`)&&!a.has(F)&&I&&typeof I==`object`){let S={};for(let n of tg){let a=I[n];typeof a==`string`&&eg.has(a)&&(S[n]=a)}let C=existsSync(ko(n,`globals.mjs`));a.set(F,{name:F,dir:n,runtimes:S,hasGlobals:C})}}catch{}}function getCacheSync(){if(ng)return ng;let n=findScanRoots(),a=new Map;if(n.length===0)return ng=a,ng;function walkWorkspace(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}if(existsSync(ko(n,`package.json`))){ingestPackageDirSync(n,a);return}for(let a of S)a.isDirectory()&&(a.name===`node_modules`||a.name===`lib`||a.name===`dist`||a.name.startsWith(`.`)||walkWorkspace(ko(n,a.name)))}function walkInstalled(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}for(let C of S)!C.isDirectory()&&!C.isSymbolicLink()||C.name.startsWith(`.`)||ingestPackageDirSync(ko(n,C.name),a)}for(let a of n)a.kind===`workspace`?walkWorkspace(a.dir):walkInstalled(a.dir);return ng=a,ng}function warnOnce(n,a){rg.has(n)||(rg.add(n),Ae.warn(`[@gjsify/resolve-npm] ${a}`))}function resolveSlot(n,a){let S=n.runtimes[a];if(!S)return null;switch(S){case`polyfill`:case`partial`:return null;case`native`:return n.hasGlobals?`${n.name}/globals`:(warnOnce(`${n.name}-${a}-native-missing-globals`,`${n.name} declares runtimes.${a}="native" but ships no globals.mjs — falling back to @gjsify/empty for --app ${a} builds.`),`@gjsify/empty`);case`none`:return null;default:return null}}function getDerivedAliasesSync(n){if(!tg.has(n))return{};let a=getCacheSync(),S={};for(let C of a.values()){let a=resolveSlot(C,n);a!==null&&a!==C.name&&(S[C.name]=a)}return S}const ig=`assert.assert/strict.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.dns/promises.domain.events.fs.fs/promises.http.http2.https.inspector.module.net.os.path.path/posix.path/win32.perf_hooks.process.punycode.querystring.readline.readline/promises.repl.stream.stream/web.stream/consumers.stream/promises.string_decoder.sys.test.timers.timers/promises.tls.tty.url.util.util/types.v8.vm.wasi.sqlite.worker_threads.zlib`.split(`.`),ag=[`readable-stream`,`node-fetch`],og={jsdom:`@gjsify/empty`,"./polling-xhr.node.js":`./polling-xhr.js`,"./websocket.node.js":`./websocket.js`,"./globals.node.js":`./globals.js`},sg={assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert/strict`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,child_process:`@gjsify/child_process`,cluster:`@gjsify/cluster`,console:`@gjsify/console`,constants:`@gjsify/constants`,crypto:`@gjsify/crypto`,dgram:`@gjsify/dgram`,diagnostics_channel:`@gjsify/diagnostics_channel`,dns:`@gjsify/dns`,"dns/promises":`@gjsify/dns/promises`,domain:`@gjsify/domain`,events:`@gjsify/events`,fs:`@gjsify/fs`,"fs/promises":`@gjsify/fs/promises`,http:`@gjsify/http`,http2:`@gjsify/http2`,https:`@gjsify/https`,inspector:`@gjsify/inspector`,module:`@gjsify/module`,net:`@gjsify/net`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,perf_hooks:`@gjsify/perf_hooks`,process:`@gjsify/process`,punycode:`@gjsify/punycode`,querystring:`@gjsify/querystring`,readline:`@gjsify/readline`,"readline/promises":`@gjsify/readline/promises`,repl:`@gjsify/repl`,stream:`@gjsify/stream`,"stream/web":`@gjsify/stream/web`,"stream/consumers":`@gjsify/stream/consumers`,"stream/promises":`@gjsify/stream/promises`,string_decoder:`@gjsify/string_decoder`,sys:`@gjsify/sys`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,tls:`@gjsify/tls`,tty:`@gjsify/tty`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,v8:`@gjsify/v8`,vm:`@gjsify/vm`,wasi:`@gjsify/wasi`,sqlite:`@gjsify/sqlite`,worker_threads:`@gjsify/worker_threads`,zlib:`@gjsify/zlib`,"node-fetch":`@gjsify/fetch`,ws:`@gjsify/ws`,"isomorphic-ws":`@gjsify/websocket`},cg={"abort-controller":`@gjsify/abort-controller`,"compression-streams":`@gjsify/compression-streams`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception`,"event-target-shim":`@gjsify/dom-events`,"message-channel":`@gjsify/message-channel`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch`,formdata:`@gjsify/formdata`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/abort-controller/register`,"compression-streams/register":`@gjsify/compression-streams/register`,"dom-events/register":`@gjsify/dom-events/register`,"dom-events/register/event-target":`@gjsify/dom-events/register/event-target`,"dom-events/register/custom-events":`@gjsify/dom-events/register/custom-events`,"dom-events/register/ui-events":`@gjsify/dom-events/register/ui-events`,"dom-exception/register":`@gjsify/dom-exception/register`,"message-channel/register":`@gjsify/message-channel/register`,"eventsource/register":`@gjsify/eventsource/register`,"websocket/register":`@gjsify/websocket/register`,"fetch/register":`@gjsify/fetch/register`,"fetch/register/fetch":`@gjsify/fetch/register/fetch`,"fetch/register/xhr":`@gjsify/fetch/register/xhr`,"webcrypto/register":`@gjsify/webcrypto/register`,"web-streams/register":`@gjsify/web-streams/register`,"web-streams/register/readable":`@gjsify/web-streams/register/readable`,"web-streams/register/writable":`@gjsify/web-streams/register/writable`,"web-streams/register/transform":`@gjsify/web-streams/register/transform`,"web-streams/register/text-streams":`@gjsify/web-streams/register/text-streams`,"web-streams/register/queuing":`@gjsify/web-streams/register/queuing`,xmlhttprequest:`@gjsify/fetch`,"xmlhttprequest/register":`@gjsify/fetch/register/xhr`,"@gjsify/xmlhttprequest":`@gjsify/fetch`,"@gjsify/xmlhttprequest/register":`@gjsify/fetch/register/xhr`,domparser:`@gjsify/domparser`,"domparser/register":`@gjsify/domparser/register`,webaudio:`@gjsify/webaudio`,"webaudio/register":`@gjsify/webaudio/register`,gamepad:`@gjsify/gamepad`,"gamepad/register":`@gjsify/gamepad/register`,webrtc:`@gjsify/webrtc`,"webrtc/register":`@gjsify/webrtc/register`,"webrtc/register/peer-connection":`@gjsify/webrtc/register/peer-connection`,"webrtc/register/data-channel":`@gjsify/webrtc/register/data-channel`,"webrtc/register/error":`@gjsify/webrtc/register/error`,"webrtc/register/media":`@gjsify/webrtc/register/media`,"webrtc/register/media-devices":`@gjsify/webrtc/register/media-devices`,webassembly:`@gjsify/webassembly`,"webassembly/register":`@gjsify/webassembly/register`,"webassembly/register/promise":`@gjsify/webassembly/register/promise`},lg={"@gjsify/node-globals":`@gjsify/empty`,"@gjsify/node-globals/register":`@gjsify/empty`,"@gjsify/node-globals/register/process":`@gjsify/empty`,"@gjsify/node-globals/register/buffer":`@gjsify/empty`,"@gjsify/node-globals/register/timers":`@gjsify/empty`,"@gjsify/node-globals/register/encoding":`@gjsify/empty`,"@gjsify/node-globals/register/url":`@gjsify/empty`,"@gjsify/node-globals/register/structured-clone":`@gjsify/empty`,"@gjsify/node-globals/register/microtask":`@gjsify/empty`,"@gjsify/web-globals":`@gjsify/empty`,"@gjsify/web-globals/register":`@gjsify/empty`,"@gjsify/web-globals/register/performance":`@gjsify/empty`,"@gjsify/web-globals/register/formdata":`@gjsify/empty`},ug={},dg={"abort-controller":`@gjsify/abort-controller/globals`,"compression-streams":`@gjsify/compression-streams/globals`,"dom-events":`@gjsify/dom-events/globals`,"dom-exception":`@gjsify/dom-exception/globals`,"message-channel":`@gjsify/message-channel/globals`,eventsource:`@gjsify/eventsource/globals`,formdata:`@gjsify/formdata/globals`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto/globals`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket/globals`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/empty`,"compression-streams/register":`@gjsify/empty`,"dom-events/register":`@gjsify/empty`,"dom-events/register/event-target":`@gjsify/empty`,"dom-events/register/custom-events":`@gjsify/empty`,"dom-events/register/ui-events":`@gjsify/empty`,"dom-exception/register":`@gjsify/empty`,"message-channel/register":`@gjsify/empty`,"eventsource/register":`@gjsify/empty`,"websocket/register":`@gjsify/empty`,"fetch/register":`@gjsify/empty`,"fetch/register/fetch":`@gjsify/empty`,"fetch/register/xhr":`@gjsify/empty`,"webcrypto/register":`@gjsify/empty`,"web-streams/register":`@gjsify/empty`,"web-streams/register/readable":`@gjsify/empty`,"web-streams/register/writable":`@gjsify/empty`,"web-streams/register/transform":`@gjsify/empty`,"web-streams/register/text-streams":`@gjsify/empty`,"web-streams/register/queuing":`@gjsify/empty`,"@gjsify/abort-controller/register":`@gjsify/empty`,"@gjsify/compression-streams/register":`@gjsify/empty`,"@gjsify/dom-events/register":`@gjsify/empty`,"@gjsify/dom-events/register/event-target":`@gjsify/empty`,"@gjsify/dom-events/register/custom-events":`@gjsify/empty`,"@gjsify/dom-events/register/ui-events":`@gjsify/empty`,"@gjsify/dom-exception/register":`@gjsify/empty`,"@gjsify/message-channel/register":`@gjsify/empty`,"@gjsify/eventsource/register":`@gjsify/empty`,"@gjsify/websocket/register":`@gjsify/empty`,"@gjsify/fetch/register":`@gjsify/empty`,"@gjsify/fetch/register/fetch":`@gjsify/empty`,"@gjsify/fetch/register/xhr":`@gjsify/empty`,"@gjsify/webcrypto/register":`@gjsify/empty`,"@gjsify/web-streams/register":`@gjsify/empty`,"@gjsify/web-streams/register/readable":`@gjsify/empty`,"@gjsify/web-streams/register/writable":`@gjsify/empty`,"@gjsify/web-streams/register/transform":`@gjsify/empty`,"@gjsify/web-streams/register/text-streams":`@gjsify/empty`,"@gjsify/web-streams/register/queuing":`@gjsify/empty`,"@gjsify/dom-elements/register":`@gjsify/empty`,"@gjsify/dom-elements/register/document":`@gjsify/empty`,"@gjsify/dom-elements/register/canvas":`@gjsify/empty`,"@gjsify/dom-elements/register/image":`@gjsify/empty`,"@gjsify/dom-elements/register/observers":`@gjsify/empty`,"@gjsify/dom-elements/register/font-face":`@gjsify/empty`,"@gjsify/dom-elements/register/match-media":`@gjsify/empty`,"@gjsify/dom-elements/register/location":`@gjsify/empty`,"@gjsify/dom-elements/register/navigator":`@gjsify/empty`,"@gjsify/buffer/register":`@gjsify/empty`,xmlhttprequest:`@gjsify/empty`,"xmlhttprequest/register":`@gjsify/empty`,"@gjsify/xmlhttprequest":`@gjsify/empty`,"@gjsify/xmlhttprequest/register":`@gjsify/empty`,domparser:`@gjsify/empty`,"domparser/register":`@gjsify/empty`,"@gjsify/domparser/register":`@gjsify/empty`,webaudio:`@gjsify/empty`,"webaudio/register":`@gjsify/empty`,"@gjsify/webaudio/register":`@gjsify/empty`,gamepad:`@gjsify/empty`,"gamepad/register":`@gjsify/empty`,"@gjsify/gamepad/register":`@gjsify/empty`,webrtc:`@gjsify/empty`,"webrtc/register":`@gjsify/empty`,"webrtc/register/peer-connection":`@gjsify/empty`,"webrtc/register/data-channel":`@gjsify/empty`,"webrtc/register/error":`@gjsify/empty`,"webrtc/register/media":`@gjsify/empty`,"webrtc/register/media-devices":`@gjsify/empty`,"@gjsify/webrtc":`@gjsify/empty`,"@gjsify/webrtc/register":`@gjsify/empty`,"@gjsify/webrtc/register/peer-connection":`@gjsify/empty`,"@gjsify/webrtc/register/data-channel":`@gjsify/empty`,"@gjsify/webrtc/register/error":`@gjsify/empty`,"@gjsify/webrtc/register/media":`@gjsify/empty`,"@gjsify/webrtc/register/media-devices":`@gjsify/empty`,webassembly:`@gjsify/webassembly/globals`,"webassembly/register":`@gjsify/empty`,"webassembly/register/promise":`@gjsify/empty`,"@gjsify/webassembly/register":`@gjsify/empty`,"@gjsify/webassembly/register/promise":`@gjsify/empty`},setNodeAliasPrefix=n=>{for(let a in n){if(a.startsWith(`node:`))continue;let S=`node:${a}`;n[S]||(n[S]=n[a])}return n},getAliasesGeneralForGjs=n=>og,getAliasesNodeForGjs=n=>setNodeAliasPrefix(sg),getAliasesWebForGjs=n=>cg,getAliasesGeneralForNode=n=>lg,getAliasesGjsForNode=n=>ug,getAliasesWebForNode=n=>dg,getAliasesForGjs=n=>({...getDerivedAliasesSync(`gjs`),...getAliasesGeneralForGjs(n),...getAliasesNodeForGjs(n),...getAliasesWebForGjs(n)}),getAliasesForNode=n=>({...getDerivedAliasesSync(`node`),...getAliasesGeneralForNode(n),...getAliasesGjsForNode(n),...getAliasesWebForNode(n)});[...ig,...ig.map(n=>`node:${n}`)],[...ag];var fg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.splitWhen=n.flatten=void 0;function flatten(n){return n.reduce((n,a)=>[].concat(n,a),[])}n.flatten=flatten;function splitWhen(n,a){let S=[[]],C=0;for(let N of n)a(N)?(C++,S[C]=[]):S[C].push(N);return S}n.splitWhen=splitWhen})),pg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isEnoentCodeError=void 0;function isEnoentCodeError(n){return n.code===`ENOENT`}n.isEnoentCodeError=isEnoentCodeError})),mg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createDirentFromStats=void 0;var DirentFromStats=class{constructor(n,a){this.name=n,this.isBlockDevice=a.isBlockDevice.bind(a),this.isCharacterDevice=a.isCharacterDevice.bind(a),this.isDirectory=a.isDirectory.bind(a),this.isFIFO=a.isFIFO.bind(a),this.isFile=a.isFile.bind(a),this.isSocket=a.isSocket.bind(a),this.isSymbolicLink=a.isSymbolicLink.bind(a)}};function createDirentFromStats(n,a){return new DirentFromStats(n,a)}n.createDirentFromStats=createDirentFromStats})),hg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.convertPosixPathToPattern=n.convertWindowsPathToPattern=n.convertPathToPattern=n.escapePosixPath=n.escapeWindowsPath=n.escape=n.removeLeadingDotSegment=n.makeAbsolute=n.unixify=void 0;let a=(Ep(),__toCommonJS(yp)),S=(Bo(),__toCommonJS(To)),C=a.platform()===`win32`,N=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,F=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,I=/^\\\\([.?])/,H=/\\(?![!()+@[\]{}])/g;function unixify(n){return n.replace(/\\/g,`/`)}n.unixify=unixify;function makeAbsolute(n,a){return S.resolve(n,a)}n.makeAbsolute=makeAbsolute;function removeLeadingDotSegment(n){if(n.charAt(0)===`.`){let a=n.charAt(1);if(a===`/`||a===`\\`)return n.slice(2)}return n}n.removeLeadingDotSegment=removeLeadingDotSegment,n.escape=C?escapeWindowsPath:escapePosixPath;function escapeWindowsPath(n){return n.replace(F,`\\$2`)}n.escapeWindowsPath=escapeWindowsPath;function escapePosixPath(n){return n.replace(N,`\\$2`)}n.escapePosixPath=escapePosixPath,n.convertPathToPattern=C?convertWindowsPathToPattern:convertPosixPathToPattern;function convertWindowsPathToPattern(n){return escapeWindowsPath(n).replace(I,`//$1`).replace(H,`/`)}n.convertWindowsPathToPattern=convertWindowsPathToPattern;function convertPosixPathToPattern(n){return escapePosixPath(n)}n.convertPosixPathToPattern=convertPosixPathToPattern})),gg=__commonJSMin(((n,a)=>{
|
|
632
|
+
`+` `.repeat(a));var th;(function(n){n.DEFAULT={allowTrailingComma:!1}})(th||={});function Pe(n,a=[],S=th.DEFAULT){let C=null,N=[],F=[];function i(n){Array.isArray(N)?N.push(n):C!==null&&(N[C]=n)}return r(i,`onValue`),We(n,{onObjectBegin:r(()=>{let n={};i(n),F.push(N),N=n,C=null},`onObjectBegin`),onObjectProperty:r(n=>{C=n},`onObjectProperty`),onObjectEnd:r(()=>{N=F.pop()},`onObjectEnd`),onArrayBegin:r(()=>{let n=[];i(n),F.push(N),N=n,C=null},`onArrayBegin`),onArrayEnd:r(()=>{N=F.pop()},`onArrayEnd`),onLiteralValue:i,onError:r((n,S,C)=>{a.push({error:n,offset:S,length:C})},`onError`)},S),N[0]}r(Pe,`parse$1`);function We(n,a,S=th.DEFAULT){let C=Ne(n,!1),N=[],F=0;function i(n){return n?()=>F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(i,`toNoArgVisit`);function f(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter()):()=>!0}r(f,`toOneArgVisit`);function u(n){return n?a=>F===0&&n(a,C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice()):()=>!0}r(u,`toOneArgVisitWithPath`);function g(n){return n?()=>{F>0?F++:n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter(),()=>N.slice())===!1&&(F=1)}:()=>!0}r(g,`toBeginVisit`);function w(n){return n?()=>{F>0&&F--,F===0&&n(C.getTokenOffset(),C.getTokenLength(),C.getTokenStartLine(),C.getTokenStartCharacter())}:()=>!0}r(w,`toEndVisit`);let I=g(a.onObjectBegin),H=u(a.onObjectProperty),W=w(a.onObjectEnd),K=g(a.onArrayBegin),q=w(a.onArrayEnd),Y=u(a.onLiteralValue),X=f(a.onSeparator),te=i(a.onComment),ne=f(a.onError),re=S&&S.disallowComments,ie=S&&S.allowTrailingComma;function T(){for(;;){let n=C.scan();switch(C.getTokenError()){case 4:k(14);break;case 5:k(15);break;case 3:k(13);break;case 1:re||k(11);break;case 2:k(12);break;case 6:k(16);break}switch(n){case 12:case 13:re?k(10):te();break;case 16:k(1);break;case 15:case 14:break;default:return n}}}r(T,`scanNext`);function k(n,a=[],S=[]){if(ne(n),a.length+S.length>0){let n=C.getToken();for(;n!==17;){if(a.indexOf(n)!==-1){T();break}else if(S.indexOf(n)!==-1)break;n=T()}}}r(k,`handleError`);function P(n){let a=C.getTokenValue();return n?Y(a):(H(a),N.push(a)),T(),!0}r(P,`parseString`);function M(){switch(C.getToken()){case 11:let n=C.getTokenValue(),a=Number(n);isNaN(a)&&(k(2),a=0),Y(a);break;case 7:Y(null);break;case 8:Y(!0);break;case 9:Y(!1);break;default:return!1}return T(),!0}r(M,`parseLiteral`);function V(){return C.getToken()===10?(P(!1),C.getToken()===6?(X(`:`),T(),U()||k(4,[],[2,5])):k(5,[],[2,5]),N.pop(),!0):(k(3,[],[2,5]),!1)}r(V,`parseProperty`);function z(){I(),T();let n=!1;for(;C.getToken()!==2&&C.getToken()!==17;){if(C.getToken()===5){if(n||k(4,[],[]),X(`,`),T(),C.getToken()===2&&ie)break}else n&&k(6,[],[]);V()||k(4,[],[2,5]),n=!0}return W(),C.getToken()===2?T():k(7,[2],[]),!0}r(z,`parseObject`);function G(){K(),T();let n=!0,a=!1;for(;C.getToken()!==4&&C.getToken()!==17;){if(C.getToken()===5){if(a||k(4,[],[]),X(`,`),T(),C.getToken()===4&&ie)break}else a&&k(6,[],[]);n?(N.push(0),n=!1):N[N.length-1]++,U()||k(4,[],[4,5]),a=!0}return q(),n||N.pop(),C.getToken()===4?T():k(8,[4],[]),!0}r(G,`parseArray`);function U(){switch(C.getToken()){case 3:return G();case 1:return z();case 10:return P(!0);default:return M()}}return r(U,`parseValue`),T(),C.getToken()===17?S.allowEmptyContent?!0:(k(4,[],[]),!1):U()?(C.getToken()!==17&&k(9,[],[]),!0):(k(4,[],[]),!1)}r(We,`visit`);var nh;(function(n){n[n.None=0]=`None`,n[n.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=4]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=6]=`InvalidCharacter`})(nh||={});var rh;(function(n){n[n.OpenBraceToken=1]=`OpenBraceToken`,n[n.CloseBraceToken=2]=`CloseBraceToken`,n[n.OpenBracketToken=3]=`OpenBracketToken`,n[n.CloseBracketToken=4]=`CloseBracketToken`,n[n.CommaToken=5]=`CommaToken`,n[n.ColonToken=6]=`ColonToken`,n[n.NullKeyword=7]=`NullKeyword`,n[n.TrueKeyword=8]=`TrueKeyword`,n[n.FalseKeyword=9]=`FalseKeyword`,n[n.StringLiteral=10]=`StringLiteral`,n[n.NumericLiteral=11]=`NumericLiteral`,n[n.LineCommentTrivia=12]=`LineCommentTrivia`,n[n.BlockCommentTrivia=13]=`BlockCommentTrivia`,n[n.LineBreakTrivia=14]=`LineBreakTrivia`,n[n.Trivia=15]=`Trivia`,n[n.Unknown=16]=`Unknown`,n[n.EOF=17]=`EOF`})(rh||={});const ih=Pe;var ah;(function(n){n[n.InvalidSymbol=1]=`InvalidSymbol`,n[n.InvalidNumberFormat=2]=`InvalidNumberFormat`,n[n.PropertyNameExpected=3]=`PropertyNameExpected`,n[n.ValueExpected=4]=`ValueExpected`,n[n.ColonExpected=5]=`ColonExpected`,n[n.CommaExpected=6]=`CommaExpected`,n[n.CloseBraceExpected=7]=`CloseBraceExpected`,n[n.CloseBracketExpected=8]=`CloseBracketExpected`,n[n.EndOfFileExpected=9]=`EndOfFileExpected`,n[n.InvalidCommentToken=10]=`InvalidCommentToken`,n[n.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,n[n.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,n[n.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,n[n.InvalidUnicode=14]=`InvalidUnicode`,n[n.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,n[n.InvalidCharacter=16]=`InvalidCharacter`})(ah||={});const oh=r((n,a)=>ih(Ym(a,n,`utf8`)),`readJsonc`),sh=Symbol(`implicitBaseUrl`),ch="${configDir}",lh=r(()=>{let{findPnpApi:n}=Is;return n&&n(process.cwd())},`getPnpApi`),uh=r((n,a,S,C)=>{let N=`resolveFromPackageJsonPath:${n}:${a}:${S}`;if(C!=null&&C.has(N))return C.get(N);let F=oh(n,C);if(!F)return;let I=a||`tsconfig.json`;if(!S&&F.exports)try{let[n]=v(F.exports,a,[`require`,`types`]);I=n}catch{return!1}else !a&&F.tsconfig&&(I=F.tsconfig);return I=zo.join(n,`..`,I),C?.set(N,I),I},`resolveFromPackageJsonPath`),dh=`package.json`,fh=`tsconfig.json`,ph=r((n,a,S)=>{let C=n;if(n===`..`&&(C=zo.join(C,fh)),n[0]===`.`&&(C=zo.resolve(a,C)),zo.isAbsolute(C)){if(Jm(S,C)){if(Xm(S,C).isFile())return C}else if(!C.endsWith(`.json`)){let n=`${C}.json`;if(Jm(S,n))return n}return}let[N,...F]=n.split(`/`),I=N[0]===`@`?`${N}/${F.shift()}`:N,H=F.join(`/`),W=lh();if(W){let{resolveRequest:C}=W;try{if(I===n){let n=C(zo.join(I,dh),a);if(n){let a=uh(n,H,!1,S);if(a&&Jm(S,a))return a}}else{let S;try{S=C(n,a,{extensions:[`.json`]})}catch{S=C(zo.join(n,fh),a)}if(S)return S}}catch{}}let K=Zm(zo.resolve(a),zo.join(`node_modules`,I),S);if(!K||!Xm(S,K).isDirectory())return;let q=zo.join(K,dh);if(Jm(S,q)){let n=uh(q,H,!1,S);if(n===!1)return;if(n&&Jm(S,n)&&Xm(S,n).isFile())return n}let Y=zo.join(K,H),X=Y.endsWith(`.json`);if(!X){let n=`${Y}.json`;if(Jm(S,n))return n}if(Jm(S,Y)){if(Xm(S,Y).isDirectory()){let n=zo.join(Y,dh);if(Jm(S,n)){let a=uh(n,``,!0,S);if(a&&Jm(S,a))return a}let a=zo.join(Y,fh);if(Jm(S,a))return a}else if(X)return Y}},`resolveExtendsPath`),mh=r((n,a)=>$m(zo.relative(n,a)),`pathRelative`),hh=[`files`,`include`,`exclude`],gh=r((n,a,S)=>{let C=zo.join(a,S);return h$1(zo.relative(n,C))||`./`},`resolveAndRelativize`),vh=r((n,a,S)=>{let C=zo.relative(n,a);return C?h$1(`${C}/${S.startsWith(`./`)?S.slice(2):S}`):S},`prefixPattern`),yh=r((n,a,S,C)=>{let N=ph(n,a,C);if(!N)throw Error(`File '${n}' not found.`);if(S.has(N))throw Error(`Circularity detected while resolving configuration: ${N}`);S.add(N);let F=zo.dirname(N),I=xh(N,C,S);delete I.references;let{compilerOptions:H}=I;if(H){let{baseUrl:n}=H;n&&!n.startsWith(ch)&&(H.baseUrl=gh(a,F,n));let{outDir:S}=H;S&&!S.startsWith(ch)&&(H.outDir=gh(a,F,S));let{declarationDir:C}=H;C&&!C.startsWith(ch)&&(H.declarationDir=gh(a,F,C));let{rootDir:N}=H;N&&!N.startsWith(ch)&&(H.rootDir=gh(a,F,N));let{rootDirs:I}=H;I&&(H.rootDirs=I.map(n=>n.startsWith(ch)?n:gh(a,F,n)));let{typeRoots:W}=H;W&&(H.typeRoots=W.map(n=>n.startsWith(ch)?n:gh(a,F,n)))}for(let n of hh){let S=I[n];S&&(I[n]=S.map(n=>n.startsWith(ch)?n:vh(a,F,n)))}return I},`resolveExtends`),bh=[`outDir`,`declarationDir`],xh=r((n,a,S=new Set)=>{let C;try{C=oh(n,a)||{}}catch{throw Error(`Cannot resolve tsconfig at path: ${n}`)}if(typeof C!=`object`)throw SyntaxError(`Failed to parse tsconfig at: ${n}`);let N=zo.dirname(n);if(C.compilerOptions){let{compilerOptions:n}=C;n.paths&&!n.baseUrl&&(n[sh]=N)}if(C.extends){let n=Array.isArray(C.extends)?C.extends:[C.extends];delete C.extends;for(let F of n.reverse()){let n=yh(F,N,new Set(S),a),I={...n,...C,compilerOptions:{...n.compilerOptions,...C.compilerOptions}};n.watchOptions&&(I.watchOptions={...n.watchOptions,...C.watchOptions}),C=I}}if(C.compilerOptions){let{compilerOptions:n}=C;for(let a of[`baseUrl`,`rootDir`]){let S=n[a];S&&!S.startsWith(ch)&&(n[a]=mh(N,zo.resolve(N,S)))}for(let a of bh){let S=n[a];S&&(Array.isArray(C.exclude)||(C.exclude=bh.map(a=>n[a]).filter(Boolean)),S.startsWith(ch)||(S=$m(S)),n[a]=S)}}else C.compilerOptions={};if(C.include&&=C.include.map(h$1),C.files&&=C.files.map(n=>n.startsWith(ch)?n:$m(n)),C.watchOptions){let{watchOptions:n}=C;n.excludeDirectories&&=n.excludeDirectories.map(n=>h$1(zo.resolve(N,n))),n.excludeFiles&&=n.excludeFiles.map(n=>h$1(zo.resolve(N,n))),n.watchFile&&=n.watchFile.toLowerCase(),n.watchDirectory&&=n.watchDirectory.toLowerCase(),n.fallbackPolling&&=n.fallbackPolling.toLowerCase()}return C},`_parseTsconfig`),Sh=r((n,a)=>{if(n.startsWith(ch))return h$1(zo.join(a,n.slice(12)))},`interpolateConfigDir`),Ch=[`outDir`,`declarationDir`,`outFile`,`rootDir`,`baseUrl`,`tsBuildInfoFile`],wh=r(n=>{if(n.strict)for(let a of[`noImplicitAny`,`noImplicitThis`,`strictNullChecks`,`strictFunctionTypes`,`strictBindCallApply`,`strictPropertyInitialization`,`strictBuiltinIteratorReturn`,`alwaysStrict`,`useUnknownInCatchVariables`])n[a]===void 0&&(n[a]=!0);if(n.composite&&(n.declaration??=!0,n.incremental??=!0),n.target){let a=n.target.toLowerCase();a===`es2015`&&(a=`es6`),n.target=a,a===`esnext`&&(n.module??=`es6`,n.useDefineForClassFields??=!0),(a===`es6`||a===`es2016`||a===`es2017`||a===`es2018`||a===`es2019`||a===`es2020`||a===`es2021`||a===`es2022`||a===`es2023`||a===`es2024`)&&(n.module??=`es6`),(a===`es2022`||a===`es2023`||a===`es2024`)&&(n.useDefineForClassFields??=!0)}if(n.module){let a=n.module.toLowerCase();if(a===`es2015`&&(a=`es6`),n.module=a,(a===`es6`||a===`es2020`||a===`es2022`||a===`esnext`||a===`none`||a===`system`||a===`umd`||a===`amd`)&&(n.moduleResolution??=`classic`),a===`system`&&(n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`||a===`preserve`)&&(n.esModuleInterop??=!0,n.allowSyntheticDefaultImports??=!0),(a===`node16`||a===`node18`||a===`node20`||a===`nodenext`)&&(n.moduleDetection??=`force`),a===`node16`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node18`&&(n.target??=`es2022`,n.moduleResolution??=`node16`),a===`node20`&&(n.target??=`es2023`,n.moduleResolution??=`node16`,n.resolveJsonModule??=!0),a===`nodenext`&&(n.target??=`esnext`,n.moduleResolution??=`nodenext`,n.resolveJsonModule??=!0),a===`node16`||a===`node18`||a===`node20`||a===`nodenext`){let a=n.target;(a===`es3`||a===`es2022`||a===`es2023`||a===`es2024`||a===`esnext`)&&(n.useDefineForClassFields??=!0)}a===`preserve`&&(n.moduleResolution??=`bundler`)}if(n.moduleResolution){let a=n.moduleResolution.toLowerCase();a===`node`&&(a=`node10`),n.moduleResolution=a,(a===`node16`||a===`nodenext`||a===`bundler`)&&(n.resolvePackageJsonExports??=!0,n.resolvePackageJsonImports??=!0),a===`bundler`&&(n.allowSyntheticDefaultImports??=!0,n.resolveJsonModule??=!0)}n.jsx&&=n.jsx.toLowerCase(),n.moduleDetection&&=n.moduleDetection.toLowerCase(),n.importsNotUsedAsValues&&=n.importsNotUsedAsValues.toLowerCase(),n.newLine&&=n.newLine.toLowerCase(),n.esModuleInterop&&(n.allowSyntheticDefaultImports??=!0),n.verbatimModuleSyntax&&(n.isolatedModules??=!0,n.preserveConstEnums??=!0),n.isolatedModules&&(n.preserveConstEnums??=!0),n.rewriteRelativeImportExtensions&&(n.allowImportingTsExtensions??=!0),n.lib&&=n.lib.map(n=>n.toLowerCase()),n.checkJs&&(n.allowJs??=!0)},`normalizeCompilerOptions`),Th=r((n,a=new Map)=>{let S=zo.resolve(n),C=xh(S,a),N=zo.dirname(S),{compilerOptions:F}=C;if(F){for(let n of Ch){let a=F[n];if(a){let S=Sh(a,N);F[n]=S?mh(N,S):a}}for(let n of[`rootDirs`,`typeRoots`]){let a=F[n];a&&(F[n]=a.map(n=>{let a=Sh(n,N);return a?mh(N,a):$m(n)}))}let{paths:n}=F;if(n)for(let a of Object.keys(n))n[a]=n[a].map(n=>Sh(n,N)??n);wh(F)}for(let n of hh){let a=C[n];a&&(C[n]=a.map(n=>Sh(n,N)??n))}return C},`parseTsconfig`);var Eh=Object.defineProperty,Dh=r((n,a)=>Eh(n,`name`,{value:a,configurable:!0}),`s`);const Oh=Dh(n=>{let a=``;for(let S=0;S<n.length;S+=1){let C=n[S],N=C.toUpperCase();a+=C===N?C.toLowerCase():N}return a},`invertCase`),kh=new Map,Ah=Dh((n,a)=>{let S=zo.join(n,`.is-fs-case-sensitive-test-${process.pid}`);try{return a.writeFileSync(S,``),!a.existsSync(Oh(S))}finally{try{a.unlinkSync(S)}catch{}}},`checkDirectoryCaseWithWrite`),jh=Dh((n,a,S)=>{try{return Ah(n,S)}catch(n){if(a===void 0)return Ah(Tp.tmpdir(),S);throw n}},`checkDirectoryCaseWithFallback`),Mh=Dh((n,a=Ds,S=!0)=>{let C=n??process.cwd();if(S&&kh.has(C))return kh.get(C);let N,F=Oh(C);return N=F!==C&&a.existsSync(C)?!a.existsSync(F):jh(C,n,a),S&&kh.set(C,N),N},`isFsCaseSensitive`),{join:Nh}=zo.posix,Ph={ts:[`.ts`,`.tsx`,`.d.ts`],cts:[`.cts`,`.d.cts`],mts:[`.mts`,`.d.mts`]},Fh=r(n=>{let a=[...Ph.ts],S=[...Ph.cts],C=[...Ph.mts];return n!=null&&n.allowJs&&(a.push(`.js`,`.jsx`),S.push(`.cjs`),C.push(`.mjs`)),[...a,...S,...C]},`getSupportedExtensions`),Ih=r(n=>{let a=[];if(!n)return a;let{outDir:S,declarationDir:C}=n;return S&&a.push(S),C&&a.push(C),a},`getDefaultExcludeSpec`),Lh=r(n=>n.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),`escapeForRegexp`),Rh=`(?!(${[`node_modules`,`bower_components`,`jspm_packages`].join(`|`)})(/|$))`,zh=/(?:^|\/)[^.*?]+$/,Bh=`**/*`,Vh=`[^/]`,Hh=`[^./]`,Uh=process.platform===`win32`,Wh=r(({config:n,path:a},S=Mh())=>{if(`extends`in n)throw Error(`tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.`);if(!zo.isAbsolute(a))throw Error(`The tsconfig path must be absolute`);Uh&&(a=h$1(a));let C=zo.dirname(a),{files:N,include:F,exclude:I,compilerOptions:H}=n,W=r(n=>zo.isAbsolute(n)?n:Nh(C,n),`resolvePattern`),K=N?.map(W),q=Fh(H),Y=S?``:`i`,X=(I||Ih(H)).map(n=>{let a=Lh(W(n)).replaceAll(String.raw`\*\*/`,`(.+/)?`).replaceAll(String.raw`\*`,`${Vh}*`).replaceAll(String.raw`\?`,Vh);return RegExp(`^${a}($|/)`,Y)}),te=N||F?F:[Bh],ne=te?te.map(n=>{let a=W(n);zh.test(a)&&(a=Nh(a,Bh));let S=Lh(a).replaceAll(String.raw`/\*\*`,`(/${Rh}${Hh}${Vh}*)*?`).replaceAll(/(\/)?\\\*/g,(n,a)=>{let S=`(${Hh}|(\\.(?!min\\.js$))?)*`;return a?`/${Rh}${Hh}${S}`:S}).replaceAll(/(\/)?\\\?/g,(n,a)=>{let S=Vh;return a?`/${Rh}${S}`:S});return RegExp(`^${S}$`,Y)}):void 0;return a=>{if(!zo.isAbsolute(a))throw Error(`filePath must be absolute`);if(Uh&&(a=h$1(a)),K!=null&&K.includes(a)||!(!q.some(n=>a.endsWith(n))||X.some(n=>n.test(a)))&&ne&&ne.some(n=>n.test(a)))return n}},`createFilesMatcher`),Gh=r((n,a,S)=>{let C=zo.resolve(n),N=h$1(n);for(;;){let n=Zm(N,a,S);if(!n)return;let F=zo.resolve(n),I=Th(F,S),H={path:h$1(F),config:I};if(Wh(H)(C))return H;let W=zo.dirname(n),K=zo.dirname(W);if(K===W)return;N=K}},`findConfigApplicable`),Kh=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>C?Gh(n,a,S)?.path:Zm(h$1(n),a,S),`findTsconfig`),qh=r((n=process.cwd(),a=`tsconfig.json`,S=new Map,C=!1)=>{if(!C){let C=Kh(n,a,S);return C?{path:C,config:Th(C,S)}:null}return Gh(n,a,S)??null},`getTsconfig`),Jh=/\*/g,Yh=r((n,a)=>{let S=n.match(Jh);if(S&&S.length>1)throw Error(a)},`assertStarCount`),Xh=r(n=>{if(n.includes(`*`)){let[a,S]=n.split(`*`);return{prefix:a,suffix:S}}return n},`parsePattern`),Zh=r(({prefix:n,suffix:a},S)=>S.startsWith(n)&&S.endsWith(a),`isPatternMatch`),Qh=r((n,a,S)=>Object.entries(n).map(([n,C])=>(Yh(n,`Pattern '${n}' can have at most one '*' character.`),{pattern:Xh(n),substitutions:C.map(C=>{if(Yh(C,`Substitution '${C}' in pattern '${n}' can have at most one '*' character.`),!a&&!Qm.test(C)&&!zo.isAbsolute(C))throw Error(`Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?`);return zo.resolve(S,C)})})),`parsePaths`);r(n=>{let{compilerOptions:a}=n.config;if(!a)return null;let{baseUrl:S,paths:C}=a;if(!S&&!C)return null;let N=sh in a&&a[sh],F=zo.resolve(zo.dirname(n.path),S||N||`.`),I=C?Qh(C,S,F):[];return n=>{if(Qm.test(n))return[];let a=[];for(let S of I){if(S.pattern===n)return S.substitutions.map(h$1);typeof S.pattern!=`string`&&a.push(S)}let C,N=-1;for(let S of a)Zh(S.pattern,n)&&S.pattern.prefix.length>N&&(N=S.pattern.prefix.length,C=S);if(!C)return S?[h$1(zo.join(F,n))]:[];let H=n.slice(C.pattern.prefix.length,n.length-C.pattern.suffix.length);return C.substitutions.map(n=>h$1(n.replace(`*`,H)))}},`createPathsMatcher`),je();function defaultSearchPlaces(n){return[`package.json`,`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.mjs`,`.${n}rc.cjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.mjs`,`${n}.config.cjs`]}function merge(n,...a){for(let S of a)if(S)for(let a of Object.keys(S)){let C=n[a],N=S[a];N!==void 0&&(isPlainObject$1(C)&&isPlainObject$1(N)?merge(C,N):n[a]=N)}return n}function isPlainObject$1(n){return typeof n==`object`&&!!n&&!Array.isArray(n)&&Object.getPrototypeOf(n)===Object.prototype}__name$1(isPlainObject$1,`isPlainObject`);function readDottedPath(n,a){if(!a.includes(`.`))return n[a];let S=n;for(let n of a.split(`.`)){if(typeof S!=`object`||!S)return;S=S[n]}return S}var Config=class{loadOptions={};constructor(n={}){Object.keys(n).length&&(this.loadOptions=n)}async load(n){let a=await(0,em.cosmiconfig)(Mu,{...this.loadOptions,searchPlaces:(this.loadOptions.searchPlaces??defaultSearchPlaces(`gjsify`)).filter(n=>n!==`package.json`)}).search(n),S={};try{let a=await this.readPackageJSON(n);isPlainObject$1(a?.gjsify)&&merge(S,a.gjsify)}catch{}return a?.config&&isPlainObject$1(a.config)&&merge(S,a.config),S.bundler||={},S.library||={},S.typescript||={},{config:S,filepath:a?.filepath??``,isEmpty:!a&&Object.keys(S).length===3}}async readPackageJSON(n){return n=await resolvePackageJSON(n),await readPackageJSON(n)}async readTSConfig(n){return qh(n)?.config||{}}async forBuild(n){let a=await this.load(process.cwd()),S={...a.config},C=a.filepath||process.cwd(),N=await this.readPackageJSON(C),F=await this.readTSConfig(C);if(F.reflection||=n.reflection,S.verbose=n.verbose||!1,S.exclude=n.exclude||[],n.consoleShim!==void 0&&(S.consoleShim=n.consoleShim),n.globals!==void 0&&(S.globals=n.globals),n.shebang!==void 0&&(S.shebang=n.shebang),n.excludeGlobals){let a=(Array.isArray(n.excludeGlobals)?n.excludeGlobals.join(`,`):String(n.excludeGlobals)).split(`,`).map(n=>n.trim()).filter(Boolean);a.length&&(S.excludeGlobals=[...S.excludeGlobals??[],...a])}merge(S.library??={},N,S.library),merge(S.typescript??={},F,S.typescript);let parseKvPairs=(n,a)=>{let S={};for(let C of n){let n=C.indexOf(`=`);if(n===-1)throw Error(`Invalid --${a} value '${C}'. Expected KEY=VALUE.`);let N=C.slice(0,n).trim(),F=C.slice(n+1);if(!N)throw Error(`Invalid --${a} value '${C}'. Empty key.`);S[N]=F}return S},I=parseKvPairs(n.define??[],`define`),H=parseKvPairs(n.alias??[],`alias`);Object.keys(H).length&&(S.aliases={...S.aliases,...H});let W={};if(S.defineFromPackageJson)for(let[n,a]of Object.entries(S.defineFromPackageJson)){if(!a||typeof a.field!=`string`||!a.field)throw Error(`gjsify config: defineFromPackageJson["${n}"] is missing a "field" string`);let S=readDottedPath(N,a.field);W[n]=S===void 0?`undefined`:JSON.stringify(S)}let K={};if(S.defineFromEnv)for(let[n,a]of Object.entries(S.defineFromEnv)){if(!a||typeof a.env!=`string`||!a.env)throw Error(`gjsify config: defineFromEnv["${n}"] is missing an "env" string`);let S=process.env[a.env],C=S===void 0?a.default:S;K[n]=C===void 0?`undefined`:JSON.stringify(C)}let q=S.bundler??={},Y=q.output??={},X=q.transform??={};return n.entryPoints?.length&&(q.input=n.entryPoints),q.input||=[`src/index.ts`],n.outfile!==void 0&&(Y.file=n.outfile),n.outdir!==void 0&&(Y.dir=n.outdir),n.format!==void 0&&(Y.format=n.format),n.minify!==void 0&&(Y.minify=n.minify),Y.minify===void 0&&(Y.minify=!0),Y.minify===!0&&(Y.keepNames=!0),n.logLevel&&(q.logLevel={silent:`silent`,error:`warn`,warning:`warn`,warn:`warn`,info:`info`,debug:`debug`,verbose:`debug`}[n.logLevel]??`warn`),n.external?.length&&(q.external=[...Array.isArray(q.external)?q.external:[],...n.external]),(Object.keys(I).length||Object.keys(W).length||Object.keys(K).length)&&(X.define={...X.define,...W,...K,...I}),S.verbose&&Ae.debug(`configData`,S),S}};je(),Os(),Bo(),Ls(),en();async function loadNpmRolldown(){return(await import(`rolldown`)).rolldown}async function bundleToChunks(n){if(await shouldUseNative()){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.rolldownInput.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let N=liftTransformExtras(stripUnserializable({...n.rolldownInput,input:normalizeInputForNative(n.rolldownInput.input),format:n.format}));delete N.plugins;let F=await a.bundleWithPlugins(N,C),I=[];for(let n of F.output)n.type===`chunk`&&I.push(n.code);return I}let a=await(await loadNpmRolldown())(n.rolldownInput);try{let S=await a.generate({format:n.format,minify:!1,sourcemap:!1}),C=[];for(let n of S.output)n.type===`chunk`&&C.push(n.code);return C}finally{await a.close()}}async function runWatch(n){if(await shouldUseNative())throw Error("`gjsify build --watch` requires the npm `rolldown` engine. The native engine (`@gjsify/rolldown-native`) does not expose a watcher API. Run the watch loop under Node (`node lib/index.js build … --watch`) or set `GJSIFY_BUNDLER=npm`.");let a=await import(`rolldown`),S=n.output??{};return a.watch({...n,output:S})}async function runBundle(n){if(await shouldUseNative())return await runNativeBundle(n);let a=await(await loadNpmRolldown())(n);try{return await a.write(n.output??{})}finally{await a.close()}}let $h=null;async function shouldUseNative(){let n=(globalThis.process?.env??{}).GJSIFY_BUNDLER;if(n===`npm`)return!1;if(n===`native`){if(!await tryLoadNative())throw Error(`GJSIFY_BUNDLER=native but @gjsify/rolldown-native is not loadable (no prebuild for this architecture, or not running under GJS).`);return!0}return globalThis.imports?.gi===void 0?!1:await tryLoadNative()!==null}async function tryLoadNative(){return $h||($h=(async()=>{let n=globalThis.imports?.gi!==void 0;if(!n)return null;try{let a=`@gjsify/rolldown-native`,S=a;n&&(S=pathToFileURL(createRequire(import.meta.url).resolve(a)).href);let C=await import(S);return C.hasNativeRolldown()?C:null}catch{return null}})(),$h)}async function runNativeBundle(n){let a=await tryLoadNative();if(!a)throw Error(`@gjsify/rolldown-native not loadable`);let S=n.plugins??[],C=[];for(let n of S)isPluginObject(n)&&C.push(toNativePlugin(n));let{output:N,plugins:F,...I}=n,H=liftTransformExtras(stripUnserializable({...I,...N,input:normalizeInputForNative(n.input)}));globalThis.process?.env?.GJSIFY_DEBUG_NATIVE_OPTS&&Ae.error(`[gjsify-bundler-pick] native opts JSON:`,JSON.stringify(H));let W=await a.bundleWithPlugins(H,C),K=n.output??{},q=K.dir??(K.file?Mo(K.file):process.cwd());q&&await rs.mkdir(q,{recursive:!0});for(let n of W.output)if(n.type===`chunk`){let a=K.file&&W.output.length===1?K.file:ko(q,n.fileName);await rs.writeFile(a,n.code,`utf8`)}return synthRolldownOutput(W)}function stripUnserializable(n){let a={};for(let[S,C]of Object.entries(n))typeof C!=`function`&&(S===`sourcemap`&&typeof C==`boolean`||(a[S]=C));return a}function liftTransformExtras(n){let a=n.transform;if(!a)return n;let S={},C={...a};for(let n of[`define`,`inject`])n in C&&(S[n]=C[n],delete C[n]);return S.inject!==void 0&&!Array.isArray(S.inject)&&(S.inject=mapToInjectArray(S.inject)),{...n,transform:Object.keys(C).length===0?void 0:C,...S}}function mapToInjectArray(n){let a=[];for(let[S,C]of Object.entries(n))if(typeof C==`string`)a.push({type:`default`,from:C,alias:S});else{let[n,N]=C;a.push({type:`named`,from:n,imported:N,alias:S})}return a}function normalizeInputForNative(n){return n===void 0?[]:typeof n==`string`?[{import:n}]:Array.isArray(n)?n.map(n=>typeof n==`string`?{import:n}:n):Object.entries(n).map(([n,a])=>({name:n,import:a}))}function isPluginObject(n){return typeof n==`object`&&!!n&&!Array.isArray(n)}function pickHook(n){if(typeof n==`function`)return{fn:n};if(typeof n==`object`&&n&&`handler`in n){let a=n,S=filterToRegexSource(a.filter?.id),C={fn:a.handler};return S!==void 0&&(C.idFilter=S),C}}function filterToRegexSource(n){if(n!==void 0){if(Array.isArray(n)){let a=n.map(oneToSource).filter(n=>n!==void 0);return a.length===0?void 0:a.length===1?a[0]:`(?:${a.join(`|`)})`}return oneToSource(n)}}function oneToSource(n){if(n instanceof RegExp)return n.source;if(typeof n==`string`)return n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function toNativePlugin(n){let a={name:typeof n.name==`string`?n.name:`unnamed-plugin`},S={},C=pickHook(n.load);C&&(a.load=C.fn,C.idFilter&&(S.load=C.idFilter));let N=pickHook(n.transform);N&&(a.transform=N.fn,N.idFilter&&(S.transform=N.idFilter));let F=pickHook(n.resolveId);F&&(a.resolveId=F.fn,F.idFilter&&(S.resolveId=F.idFilter));let I=pickHook(n.renderChunk);I&&(a.renderChunk=I.fn);let H=pickHook(n.banner);H&&(a.banner=H.fn);let W=pickHook(n.footer);W&&(a.footer=W.fn);let K=pickHook(n.intro);K&&(a.intro=K.fn);let q=pickHook(n.outro);q&&(a.outro=q.fn);let Y=pickHook(n.buildStart);Y&&(a.buildStart=Y.fn);let X=pickHook(n.buildEnd);X&&(a.buildEnd=X.fn);let te=pickHook(n.generateBundle);te&&(a.generateBundle=te.fn);let ne=pickHook(n.writeBundle);ne&&(a.writeBundle=ne.fn);let re=pickHook(n.closeBundle);return re&&(a.closeBundle=re.fn),Object.keys(S).length>0&&(a.idFilter=S),a}function synthRolldownOutput(n){return{output:n.output.map(n=>n.type===`chunk`?{type:`chunk`,fileName:n.fileName,code:n.code,name:n.name,isEntry:n.isEntry,isDynamicEntry:n.isDynamicEntry,map:n.map??null,sourcemapFileName:n.sourcemapFilename??null,imports:n.imports,dynamicImports:n.dynamicImports,facadeModuleId:null,moduleIds:[],modules:{},exports:[],referencedFiles:[],importedBindings:{}}:{type:`asset`,fileName:n.fileName,names:n.names,originalFileNames:n.originalFileNames,source:n.sourceText??``,needsCodeReference:!1})}}je(),as(),Os(),Bo(),en();const eg=new Set([`polyfill`,`native`,`partial`,`none`]),tg=new Set([`gjs`,`node`,`browser`]);let ng=null;const rg=new Set;function findScanRoots(){let n=[],a=Mo(fileURLToPath(import.meta.url));for(let S=0;S<8;S++){let S=Eo(a,`packages`);if(existsSync(S))try{[`node`,`web`,`dom`,`framework`,`infra`].some(n=>existsSync(ko(S,n)))&&n.push({kind:`workspace`,dir:S})}catch{}let C=Eo(a,`node_modules`,`@gjsify`);existsSync(C)&&n.push({kind:`installed`,dir:C});let N=Mo(a);if(N===a)break;a=N}try{let a=Eo(process.cwd(),`node_modules`,`@gjsify`);existsSync(a)&&n.push({kind:`installed`,dir:a})}catch{}return n}function ingestPackageDirSync(n,a){let S=ko(n,`package.json`);if(existsSync(S))try{let C=readFileSync(S,`utf8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:null,I=N?.gjsify?.runtimes;if(F&&F.startsWith(`@gjsify/`)&&!a.has(F)&&I&&typeof I==`object`){let S={};for(let n of tg){let a=I[n];typeof a==`string`&&eg.has(a)&&(S[n]=a)}let C=existsSync(ko(n,`globals.mjs`));a.set(F,{name:F,dir:n,runtimes:S,hasGlobals:C})}}catch{}}function getCacheSync(){if(ng)return ng;let n=findScanRoots(),a=new Map;if(n.length===0)return ng=a,ng;function walkWorkspace(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}if(existsSync(ko(n,`package.json`))){ingestPackageDirSync(n,a);return}for(let a of S)a.isDirectory()&&(a.name===`node_modules`||a.name===`lib`||a.name===`dist`||a.name.startsWith(`.`)||walkWorkspace(ko(n,a.name)))}function walkInstalled(n){let S;try{S=readdirSync(n,{withFileTypes:!0})}catch{return}for(let C of S)!C.isDirectory()&&!C.isSymbolicLink()||C.name.startsWith(`.`)||ingestPackageDirSync(ko(n,C.name),a)}for(let a of n)a.kind===`workspace`?walkWorkspace(a.dir):walkInstalled(a.dir);return ng=a,ng}function warnOnce(n,a){rg.has(n)||(rg.add(n),Ae.warn(`[@gjsify/resolve-npm] ${a}`))}function resolveSlot(n,a){let S=n.runtimes[a];if(!S)return null;switch(S){case`polyfill`:case`partial`:return null;case`native`:return n.hasGlobals?`${n.name}/globals`:(warnOnce(`${n.name}-${a}-native-missing-globals`,`${n.name} declares runtimes.${a}="native" but ships no globals.mjs — falling back to @gjsify/empty for --app ${a} builds.`),`@gjsify/empty`);case`none`:return null;default:return null}}function getDerivedAliasesSync(n){if(!tg.has(n))return{};let a=getCacheSync(),S={};for(let C of a.values()){let a=resolveSlot(C,n);a!==null&&a!==C.name&&(S[C.name]=a)}return S}const ig=`assert.assert/strict.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.dns/promises.domain.events.fs.fs/promises.http.http2.https.inspector.module.net.os.path.path/posix.path/win32.perf_hooks.process.punycode.querystring.readline.readline/promises.repl.stream.stream/web.stream/consumers.stream/promises.string_decoder.sys.test.timers.timers/promises.tls.tty.url.util.util/types.v8.vm.wasi.sqlite.worker_threads.zlib`.split(`.`),ag=[`readable-stream`,`node-fetch`],og={jsdom:`@gjsify/empty`,"./polling-xhr.node.js":`./polling-xhr.js`,"./websocket.node.js":`./websocket.js`,"./globals.node.js":`./globals.js`},sg={assert:`@gjsify/assert`,"assert/strict":`@gjsify/assert/strict`,async_hooks:`@gjsify/async_hooks`,buffer:`@gjsify/buffer`,child_process:`@gjsify/child_process`,cluster:`@gjsify/cluster`,console:`@gjsify/console`,constants:`@gjsify/constants`,crypto:`@gjsify/crypto`,dgram:`@gjsify/dgram`,diagnostics_channel:`@gjsify/diagnostics_channel`,dns:`@gjsify/dns`,"dns/promises":`@gjsify/dns/promises`,domain:`@gjsify/domain`,events:`@gjsify/events`,fs:`@gjsify/fs`,"fs/promises":`@gjsify/fs/promises`,http:`@gjsify/http`,http2:`@gjsify/http2`,https:`@gjsify/https`,inspector:`@gjsify/inspector`,module:`@gjsify/module`,net:`@gjsify/net`,os:`@gjsify/os`,path:`@gjsify/path`,"path/posix":`@gjsify/path/posix`,"path/win32":`@gjsify/path/win32`,perf_hooks:`@gjsify/perf_hooks`,process:`@gjsify/process`,punycode:`@gjsify/punycode`,querystring:`@gjsify/querystring`,readline:`@gjsify/readline`,"readline/promises":`@gjsify/readline/promises`,repl:`@gjsify/repl`,stream:`@gjsify/stream`,"stream/web":`@gjsify/stream/web`,"stream/consumers":`@gjsify/stream/consumers`,"stream/promises":`@gjsify/stream/promises`,string_decoder:`@gjsify/string_decoder`,sys:`@gjsify/sys`,timers:`@gjsify/timers`,"timers/promises":`@gjsify/timers/promises`,tls:`@gjsify/tls`,tty:`@gjsify/tty`,url:`@gjsify/url`,util:`@gjsify/util`,"util/types":`@gjsify/util/types`,v8:`@gjsify/v8`,vm:`@gjsify/vm`,wasi:`@gjsify/wasi`,sqlite:`@gjsify/sqlite`,worker_threads:`@gjsify/worker_threads`,zlib:`@gjsify/zlib`,"node-fetch":`@gjsify/fetch`,ws:`@gjsify/ws`,"isomorphic-ws":`@gjsify/websocket`},cg={"abort-controller":`@gjsify/abort-controller`,"compression-streams":`@gjsify/compression-streams`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception`,"event-target-shim":`@gjsify/dom-events`,"message-channel":`@gjsify/message-channel`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch`,formdata:`@gjsify/formdata`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/abort-controller/register`,"compression-streams/register":`@gjsify/compression-streams/register`,"dom-events/register":`@gjsify/dom-events/register`,"dom-events/register/event-target":`@gjsify/dom-events/register/event-target`,"dom-events/register/custom-events":`@gjsify/dom-events/register/custom-events`,"dom-events/register/ui-events":`@gjsify/dom-events/register/ui-events`,"dom-exception/register":`@gjsify/dom-exception/register`,"message-channel/register":`@gjsify/message-channel/register`,"eventsource/register":`@gjsify/eventsource/register`,"websocket/register":`@gjsify/websocket/register`,"fetch/register":`@gjsify/fetch/register`,"fetch/register/fetch":`@gjsify/fetch/register/fetch`,"fetch/register/xhr":`@gjsify/fetch/register/xhr`,"webcrypto/register":`@gjsify/webcrypto/register`,"web-streams/register":`@gjsify/web-streams/register`,"web-streams/register/readable":`@gjsify/web-streams/register/readable`,"web-streams/register/writable":`@gjsify/web-streams/register/writable`,"web-streams/register/transform":`@gjsify/web-streams/register/transform`,"web-streams/register/text-streams":`@gjsify/web-streams/register/text-streams`,"web-streams/register/queuing":`@gjsify/web-streams/register/queuing`,xmlhttprequest:`@gjsify/fetch`,"xmlhttprequest/register":`@gjsify/fetch/register/xhr`,"@gjsify/xmlhttprequest":`@gjsify/fetch`,"@gjsify/xmlhttprequest/register":`@gjsify/fetch/register/xhr`,domparser:`@gjsify/domparser`,"domparser/register":`@gjsify/domparser/register`,webaudio:`@gjsify/webaudio`,"webaudio/register":`@gjsify/webaudio/register`,gamepad:`@gjsify/gamepad`,"gamepad/register":`@gjsify/gamepad/register`,webrtc:`@gjsify/webrtc`,"webrtc/register":`@gjsify/webrtc/register`,"webrtc/register/peer-connection":`@gjsify/webrtc/register/peer-connection`,"webrtc/register/data-channel":`@gjsify/webrtc/register/data-channel`,"webrtc/register/error":`@gjsify/webrtc/register/error`,"webrtc/register/media":`@gjsify/webrtc/register/media`,"webrtc/register/media-devices":`@gjsify/webrtc/register/media-devices`,webassembly:`@gjsify/webassembly`,"webassembly/register":`@gjsify/webassembly/register`,"webassembly/register/promise":`@gjsify/webassembly/register/promise`},lg={"@gjsify/node-globals":`@gjsify/empty`,"@gjsify/node-globals/register":`@gjsify/empty`,"@gjsify/node-globals/register/process":`@gjsify/empty`,"@gjsify/node-globals/register/buffer":`@gjsify/empty`,"@gjsify/node-globals/register/timers":`@gjsify/empty`,"@gjsify/node-globals/register/encoding":`@gjsify/empty`,"@gjsify/node-globals/register/url":`@gjsify/empty`,"@gjsify/node-globals/register/structured-clone":`@gjsify/empty`,"@gjsify/node-globals/register/microtask":`@gjsify/empty`,"@gjsify/web-globals":`@gjsify/empty`,"@gjsify/web-globals/register":`@gjsify/empty`,"@gjsify/web-globals/register/performance":`@gjsify/empty`,"@gjsify/web-globals/register/formdata":`@gjsify/empty`},ug={},dg={"abort-controller":`@gjsify/abort-controller/globals`,"compression-streams":`@gjsify/compression-streams/globals`,"dom-events":`@gjsify/dom-events`,"dom-exception":`@gjsify/dom-exception/globals`,"message-channel":`@gjsify/message-channel/globals`,eventsource:`@gjsify/eventsource`,fetch:`@gjsify/fetch/globals`,formdata:`@gjsify/formdata/globals`,"html-image-element":`@gjsify/html-image-element`,webcrypto:`@gjsify/webcrypto/globals`,webgl:`@gjsify/webgl`,websocket:`@gjsify/websocket/globals`,webstorage:`@gjsify/webstorage`,"abort-controller/register":`@gjsify/empty`,"compression-streams/register":`@gjsify/empty`,"dom-events/register":`@gjsify/empty`,"dom-events/register/event-target":`@gjsify/empty`,"dom-events/register/custom-events":`@gjsify/empty`,"dom-events/register/ui-events":`@gjsify/empty`,"dom-exception/register":`@gjsify/empty`,"message-channel/register":`@gjsify/empty`,"eventsource/register":`@gjsify/empty`,"websocket/register":`@gjsify/empty`,"fetch/register":`@gjsify/empty`,"fetch/register/fetch":`@gjsify/empty`,"fetch/register/xhr":`@gjsify/empty`,"webcrypto/register":`@gjsify/empty`,"web-streams/register":`@gjsify/empty`,"web-streams/register/readable":`@gjsify/empty`,"web-streams/register/writable":`@gjsify/empty`,"web-streams/register/transform":`@gjsify/empty`,"web-streams/register/text-streams":`@gjsify/empty`,"web-streams/register/queuing":`@gjsify/empty`,"@gjsify/abort-controller/register":`@gjsify/empty`,"@gjsify/compression-streams/register":`@gjsify/empty`,"@gjsify/dom-events/register":`@gjsify/empty`,"@gjsify/dom-events/register/event-target":`@gjsify/empty`,"@gjsify/dom-events/register/custom-events":`@gjsify/empty`,"@gjsify/dom-events/register/ui-events":`@gjsify/empty`,"@gjsify/dom-exception/register":`@gjsify/empty`,"@gjsify/message-channel/register":`@gjsify/empty`,"@gjsify/eventsource/register":`@gjsify/empty`,"@gjsify/websocket/register":`@gjsify/empty`,"@gjsify/fetch/register":`@gjsify/empty`,"@gjsify/fetch/register/fetch":`@gjsify/empty`,"@gjsify/fetch/register/xhr":`@gjsify/empty`,"@gjsify/webcrypto/register":`@gjsify/empty`,"@gjsify/web-streams/register":`@gjsify/empty`,"@gjsify/web-streams/register/readable":`@gjsify/empty`,"@gjsify/web-streams/register/writable":`@gjsify/empty`,"@gjsify/web-streams/register/transform":`@gjsify/empty`,"@gjsify/web-streams/register/text-streams":`@gjsify/empty`,"@gjsify/web-streams/register/queuing":`@gjsify/empty`,"@gjsify/dom-elements/register":`@gjsify/empty`,"@gjsify/dom-elements/register/document":`@gjsify/empty`,"@gjsify/dom-elements/register/canvas":`@gjsify/empty`,"@gjsify/dom-elements/register/image":`@gjsify/empty`,"@gjsify/dom-elements/register/observers":`@gjsify/empty`,"@gjsify/dom-elements/register/font-face":`@gjsify/empty`,"@gjsify/dom-elements/register/match-media":`@gjsify/empty`,"@gjsify/dom-elements/register/location":`@gjsify/empty`,"@gjsify/dom-elements/register/navigator":`@gjsify/empty`,"@gjsify/buffer/register":`@gjsify/empty`,xmlhttprequest:`@gjsify/empty`,"xmlhttprequest/register":`@gjsify/empty`,"@gjsify/xmlhttprequest":`@gjsify/empty`,"@gjsify/xmlhttprequest/register":`@gjsify/empty`,domparser:`@gjsify/empty`,"domparser/register":`@gjsify/empty`,"@gjsify/domparser/register":`@gjsify/empty`,webaudio:`@gjsify/empty`,"webaudio/register":`@gjsify/empty`,"@gjsify/webaudio/register":`@gjsify/empty`,gamepad:`@gjsify/empty`,"gamepad/register":`@gjsify/empty`,"@gjsify/gamepad/register":`@gjsify/empty`,webrtc:`@gjsify/empty`,"webrtc/register":`@gjsify/empty`,"webrtc/register/peer-connection":`@gjsify/empty`,"webrtc/register/data-channel":`@gjsify/empty`,"webrtc/register/error":`@gjsify/empty`,"webrtc/register/media":`@gjsify/empty`,"webrtc/register/media-devices":`@gjsify/empty`,"@gjsify/webrtc":`@gjsify/empty`,"@gjsify/webrtc/register":`@gjsify/empty`,"@gjsify/webrtc/register/peer-connection":`@gjsify/empty`,"@gjsify/webrtc/register/data-channel":`@gjsify/empty`,"@gjsify/webrtc/register/error":`@gjsify/empty`,"@gjsify/webrtc/register/media":`@gjsify/empty`,"@gjsify/webrtc/register/media-devices":`@gjsify/empty`,webassembly:`@gjsify/webassembly/globals`,"webassembly/register":`@gjsify/empty`,"webassembly/register/promise":`@gjsify/empty`,"@gjsify/webassembly/register":`@gjsify/empty`,"@gjsify/webassembly/register/promise":`@gjsify/empty`},setNodeAliasPrefix=n=>{for(let a in n){if(a.startsWith(`node:`))continue;let S=`node:${a}`;n[S]||(n[S]=n[a])}return n},getAliasesGeneralForGjs=n=>og,getAliasesNodeForGjs=n=>setNodeAliasPrefix(sg),getAliasesWebForGjs=n=>cg,getAliasesGeneralForNode=n=>lg,getAliasesGjsForNode=n=>ug,getAliasesWebForNode=n=>dg,getAliasesForGjs=n=>({...getDerivedAliasesSync(`gjs`),...getAliasesGeneralForGjs(n),...getAliasesNodeForGjs(n),...getAliasesWebForGjs(n)}),getAliasesForNode=n=>({...getDerivedAliasesSync(`node`),...getAliasesGeneralForNode(n),...getAliasesGjsForNode(n),...getAliasesWebForNode(n)});[...ig,...ig.map(n=>`node:${n}`)],[...ag];var fg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.splitWhen=n.flatten=void 0;function flatten(n){return n.reduce((n,a)=>[].concat(n,a),[])}n.flatten=flatten;function splitWhen(n,a){let S=[[]],C=0;for(let N of n)a(N)?(C++,S[C]=[]):S[C].push(N);return S}n.splitWhen=splitWhen})),pg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isEnoentCodeError=void 0;function isEnoentCodeError(n){return n.code===`ENOENT`}n.isEnoentCodeError=isEnoentCodeError})),mg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createDirentFromStats=void 0;var DirentFromStats=class{constructor(n,a){this.name=n,this.isBlockDevice=a.isBlockDevice.bind(a),this.isCharacterDevice=a.isCharacterDevice.bind(a),this.isDirectory=a.isDirectory.bind(a),this.isFIFO=a.isFIFO.bind(a),this.isFile=a.isFile.bind(a),this.isSocket=a.isSocket.bind(a),this.isSymbolicLink=a.isSymbolicLink.bind(a)}};function createDirentFromStats(n,a){return new DirentFromStats(n,a)}n.createDirentFromStats=createDirentFromStats})),hg=__commonJSMin((n=>{Object.defineProperty(n,"__esModule",{value:!0}),n.convertPosixPathToPattern=n.convertWindowsPathToPattern=n.convertPathToPattern=n.escapePosixPath=n.escapeWindowsPath=n.escape=n.removeLeadingDotSegment=n.makeAbsolute=n.unixify=void 0;let a=(Ep(),__toCommonJS(yp)),S=(Bo(),__toCommonJS(To)),C=a.platform()===`win32`,N=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,F=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,I=/^\\\\([.?])/,H=/\\(?![!()+@[\]{}])/g;function unixify(n){return n.replace(/\\/g,`/`)}n.unixify=unixify;function makeAbsolute(n,a){return S.resolve(n,a)}n.makeAbsolute=makeAbsolute;function removeLeadingDotSegment(n){if(n.charAt(0)===`.`){let a=n.charAt(1);if(a===`/`||a===`\\`)return n.slice(2)}return n}n.removeLeadingDotSegment=removeLeadingDotSegment,n.escape=C?escapeWindowsPath:escapePosixPath;function escapeWindowsPath(n){return n.replace(F,`\\$2`)}n.escapeWindowsPath=escapeWindowsPath;function escapePosixPath(n){return n.replace(N,`\\$2`)}n.escapePosixPath=escapePosixPath,n.convertPathToPattern=C?convertWindowsPathToPattern:convertPosixPathToPattern;function convertWindowsPathToPattern(n){return escapeWindowsPath(n).replace(I,`//$1`).replace(H,`/`)}n.convertWindowsPathToPattern=convertWindowsPathToPattern;function convertPosixPathToPattern(n){return escapePosixPath(n)}n.convertPosixPathToPattern=convertPosixPathToPattern})),gg=__commonJSMin(((n,a)=>{
|
|
633
633
|
/*!
|
|
634
634
|
* is-extglob <https://github.com/jonschlinkert/is-extglob>
|
|
635
635
|
*
|
|
@@ -739,8 +739,8 @@ var S=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,N=Object.pr
|
|
|
739
739
|
`+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,a=`#!/usr/bin/env -S gjs -m`){if(n===void 0||n===!1)return null;if(n===!0)return a;let S=expandEnvTemplate(n);return S.trim()?S.startsWith(`#!`)?S:`#!`+S:null}en(),Bo();const tE=Mo(fileURLToPath(import.meta.url));function resolveConsoleShim(){let n=Eo(tE,`../shims/console-gjs.js`),a=null;try{a=(Os(),__toCommonJS(Ts))}catch{return n}if(a.existsSync(n))return n;try{return(Ls(),__toCommonJS(Ns)).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=Eo(tE,`../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,runtimeResolve:S===`esm`}),processStubPlugin({userBanner:n.userBanner,captureBundleUrl:S===`esm`}),(()=>{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(`
|
|
740
740
|
`),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 nE=`\0gjsify-empty-gjs-import`;function gjsImportsEmptyPlugin(){return{name:`gjsify-gjs-imports-empty`,resolveId:{order:`pre`,filter:{id:/^(@girs\/|gi:\/\/)/},handler(n){return/^(@girs\/|gi:\/\/)/.test(n)?{id:nE}:null}},load(n){return n===nE?{code:`export {}; export default {};`,moduleSideEffects:!1}:null}}}const setupForNode=async n=>{let a=n.userExternal??[],S=[...ig,`node-datachannel`,...a],external=n=>!!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:[gjsImportsEmptyPlugin(),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 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`},F={...getDerivedAliasesSync(`browser`),...N,...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(F)}),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}as();const rE={".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".webp":`image/webp`,".svg":`image/svg+xml`,".ico":`image/x-icon`,".avif":`image/avif`,".bmp":`image/bmp`,".tiff":`image/tiff`,".tif":`image/tiff`,".wasm":`application/wasm`};function mimeForExtension(n){return rE[n.toLowerCase()]??`application/octet-stream`}function textLoaderPlugin(n={}){let a=n.loaders??{},S=Object.entries(a),C=S.filter(([,n])=>n===`text`).map(([n])=>n),N=S.filter(([,n])=>n===`dataurl`).map(([n])=>n),F=[...C,...N];if(F.length===0)return null;let I=F.map(n=>n.replace(/^\./,``).replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)),H=RegExp(`\\.(?:${I.join(`|`)})$`),W=new Map(S.map(([n,a])=>[n.toLowerCase(),a]));return{name:`gjsify-asset-loader`,async load(n){if(!H.test(n))return null;let a=n.lastIndexOf(`.`),S=a>=0?n.slice(a).toLowerCase():``;if((W.get(S)??`text`)===`dataurl`){let a=await readFile$1(n),C=mimeForExtension(S),N=a.toString(`base64`);return{code:`export default ${JSON.stringify(`data:${C};base64,${N}`)};`,moduleType:`js`}}let C=await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(C)};`,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)}};Ls(),Bo(),en();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(ko(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}je();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()}},iE=Dy;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=iE[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(()=>(Os(),Ts))).writeFileSync(S,a),Ae.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))`:``;Ae.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();Ae.debug(`[gjsify] --globals auto: iteration ${Y}, ${W.size} global(s)${n.length?`: `+n.join(`, `):``}`)}}return C&&Ae.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}}Ls(),en(),Bo(),Os(),as();function findPnpRoot(n){let a=n;for(;;){if(existsSync(ko(a,`.pnp.cjs`)))return a;let n=Mo(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`}je();let aE=!1,oE=!1;function normalizeBundlerOptions(n){let a=n.bundler??{},S=a;if(typeof a.define==`object`&&a.define!==null){oE||(oE=!0,Ae.warn(`[gjsify] WARNING: 'bundler.define' is not a valid Rolldown option and would be silently ignored — it has been auto-mapped to 'bundler.transform.define'. Move 'define' under 'bundler.transform.define' in your config to suppress this warning and avoid a ReferenceError at GJS load time.`));let{define:n,...C}=a;S={...C,transform:{...C.transform,define:{...n,...C.transform?.define}}}}if(!n.esbuild)return S;aE||(aE=!0,Ae.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 C=legacyEsbuildToRolldown(n.esbuild),N={...C,...S};return(C.output||S.output)&&(N.output={...C.output,...S.output}),(C.transform||S.transform)&&(N.transform={...C.transform,...S.transform},(C.transform?.define||S.transform?.define)&&(N.transform.define={...C.transform?.define,...S.transform?.define})),(C.resolve||S.resolve)&&(N.resolve={...C.resolve,...S.resolve}),N}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}je(),Bo(),as();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?Mo(F.module):void 0,W=F.main?Mo(F.main):void 0,K=F.module?Po(F.module):`.js`,q=F.main?Po(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?Po(a):`.js`,W=I.output?.dir??(a?Mo(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&&Ae.debug(`[gjsify] globals: injected ${C.size} register module(s) from --globals ${a}`),N??void 0}async applyShebang(n,a,S){if(!a){S&&Ae.warn(`[gjsify] --shebang skipped: no single outfile (use --outfile for executables)`);return}let C=n===`node`?`#!/usr/bin/env node`:`#!/usr/bin/env -S gjs -m`,N=resolveShebangLine(this.configData.shebang,C)??C,F=await readFile$1(a,`utf-8`);F.startsWith(`#!`)?S&&Ae.debug(`[gjsify] --shebang skipped: ${a} already starts with a shebang`):await writeFile$1(a,N+`
|
|
741
741
|
`+F),await chmod$1(a,493),S&&Ae.debug(`[gjsify] --shebang: wrote ${N} + chmod 0o755 to ${a}`)}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`||n===`node`)&&this.configData.shebang&&await this.applyShebang(n,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,Ae.log(`
|
|
742
|
-
[gjsify build --watch] stopping watcher…`);try{await N.close()}catch(n){Ae.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&&Ae.log(`[gjsify build --watch] rebuild start`);break;case`BUNDLE_START`:Ae.log(`[gjsify build --watch] building…`);break;case`BUNDLE_END`:Ae.log(`[gjsify build --watch] built in ${n.duration}ms`);try{(a===`gjs`||a===`node`)&&this.configData.shebang&&await this.applyShebang(a,S,C)}finally{await n.result.close()}break;case`END`:Ae.log(`[gjsify build --watch] waiting for changes…`);break;case`ERROR`:Ae.error(`[gjsify build --watch] build failed:`,n.error?.message??n.error),C&&n.error?.stack&&Ae.error(n.error.stack);try{await n.result.close()}catch{}break}}),C&&N.on(`change`,(n,a)=>{Ae.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 sE={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 target-appropriate shebang to the output and mark it executable (chmod 755): `#!/usr/bin/env -S gjs -m` for --app gjs, `#!/usr/bin/env node` for --app node. Applies to GJS and Node 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})}};Os(),Bo();function nodeArchToLinuxArch(n){return{x64:`x86_64`,arm64:`aarch64`,arm:`armv7`,ia32:`i686`}[n]??n}function readPackageJson$4(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$4,`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=ko(n,N),F;try{F=readdirSync(C)}catch{continue}for(let n of F){let F=checkPackage(ko(C,n),`${N}/${n}`,a);F&&S.push(F)}}else{let C=checkPackage(ko(n,N),N,a);C&&S.push(C)}return S}function checkPackage(n,a,S){let C=readPackageJson$4(ko(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=ko(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=Eo(n);for(;;){let n=ko(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=Eo(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(`:`)}}je(),Ux(),Bo();function computeNativeEnvForBundle(n,a=process.cwd()){let S=Eo(n),C=detectNativePackages(a),N=detectNativePackages(Mo(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(` `);Ae.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=>{Ae.error(n.message),process.exit(1)})}je(),Os(),Bo(),Ux();const cE={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=Eo(a,n.entry??S.entry??`src/test.mts`),N=Eo(a,n.outdir??S.outdir??`dist`);existsSync(C)||(Ae.error(`[gjsify test] no test entry at ${Ao(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=ko(N,`test.${S}.mjs`);if(n.build!==!1)if(n.rebuild||!isFresh(F,C)){let N=Date.now();n.verbose&&Ae.log(`[gjsify test] building → ${Ao(a,F)} (—app ${S})`);try{await buildTestBundle(C,F,S,n.verbose),n.verbose&&Ae.log(`[gjsify test] built ${S} in ${Date.now()-N}ms`)}catch(n){Ae.error(`[gjsify test] build failed for ${S}:`,n.message),I.push({runtime:S,ok:!1,durationMs:0,error:`build failed`});continue}}else n.verbose&&Ae.log(`[gjsify test] ${S}: bundle is up-to-date — skipping build (use --rebuild to force)`);else if(!existsSync(F)){Ae.error(`[gjsify test] --no-build but ${Ao(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(` `);Ae.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){if(!existsSync(n))return!1;let S=statSync(n).mtimeMs,C=Mo(a);try{return S>=newestMtimeUnder(existsSync(C)?C: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(ko(n,a.name));C>S&&(S=C)}return S}Os();function readPackageJson$3(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$3,`readPackageJson`);function writePackageJson$1(n,a){let S=sortKnownDepFields(a);writeFileSync(n,JSON.stringify(S,null,2)+`
|
|
743
|
-
`,`utf-8`)}
|
|
742
|
+
[gjsify build --watch] stopping watcher…`);try{await N.close()}catch(n){Ae.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&&Ae.log(`[gjsify build --watch] rebuild start`);break;case`BUNDLE_START`:Ae.log(`[gjsify build --watch] building…`);break;case`BUNDLE_END`:Ae.log(`[gjsify build --watch] built in ${n.duration}ms`);try{(a===`gjs`||a===`node`)&&this.configData.shebang&&await this.applyShebang(a,S,C)}finally{await n.result.close()}break;case`END`:Ae.log(`[gjsify build --watch] waiting for changes…`);break;case`ERROR`:Ae.error(`[gjsify build --watch] build failed:`,n.error?.message??n.error),C&&n.error?.stack&&Ae.error(n.error.stack);try{await n.result.close()}catch{}break}}),C&&N.on(`change`,(n,a)=>{Ae.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 sE={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 target-appropriate shebang to the output and mark it executable (chmod 755): `#!/usr/bin/env -S gjs -m` for --app gjs, `#!/usr/bin/env node` for --app node. Applies to GJS and Node 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})}};Os(),Bo();function nodeArchToLinuxArch(n){return{x64:`x86_64`,arm64:`aarch64`,arm:`armv7`,ia32:`i686`}[n]??n}function readPackageJson$4(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$4,`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=ko(n,N),F;try{F=readdirSync(C)}catch{continue}for(let n of F){let F=checkPackage(ko(C,n),`${N}/${n}`,a);F&&S.push(F)}}else{let C=checkPackage(ko(n,N),N,a);C&&S.push(C)}return S}function checkPackage(n,a,S){let C=readPackageJson$4(ko(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=ko(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=Eo(n);for(;;){let n=ko(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=Eo(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(`:`)}}je(),Ux(),Bo();function computeNativeEnvForBundle(n,a=process.cwd()){let S=Eo(n),C=detectNativePackages(a),N=detectNativePackages(Mo(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(` `);Ae.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=>{Ae.error(n.message),process.exit(1)})}je(),Os(),Bo(),Ux();const cE={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=Eo(a,n.entry??S.entry??`src/test.mts`),N=Eo(a,n.outdir??S.outdir??`dist`);existsSync(C)||(Ae.error(`[gjsify test] no test entry at ${Ao(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=ko(N,`test.${S}.mjs`);if(n.build!==!1)if(n.rebuild||!isFresh(F,C)){let N=Date.now();n.verbose&&Ae.log(`[gjsify test] building → ${Ao(a,F)} (—app ${S})`);try{await buildTestBundle(C,F,S,n.verbose),n.verbose&&Ae.log(`[gjsify test] built ${S} in ${Date.now()-N}ms`)}catch(n){Ae.error(`[gjsify test] build failed for ${S}:`,n.message),I.push({runtime:S,ok:!1,durationMs:0,error:`build failed`});continue}}else n.verbose&&Ae.log(`[gjsify test] ${S}: bundle is up-to-date — skipping build (use --rebuild to force)`);else if(!existsSync(F)){Ae.error(`[gjsify test] --no-build but ${Ao(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(` `);Ae.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){if(!existsSync(n))return!1;let S=statSync(n).mtimeMs,C=Mo(a);try{return S>=newestMtimeUnder(existsSync(C)?C: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(ko(n,a.name));C>S&&(S=C)}return S}Os();function readPackageJson$3(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$3,`readPackageJson`);function writePackageJson(n,a){let S=sortKnownDepFields(a);writeFileSync(n,JSON.stringify(S,null,2)+`
|
|
743
|
+
`,`utf-8`)}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}Os(),Bo();function discoverWorkspaces(n,a={}){let S=ko(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=ko(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:Ao(n,S).split(Lo).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.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=[Eo(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=ko(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=ko(S,n);try{statSync(N).isDirectory()&&a.push(N)}catch{}}}else{let C=ko(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}Os(),Bo();function readPackageJson$2(n){try{return JSON.parse(readFileSync(n,`utf-8`))}catch{return null}}__name$1(readPackageJson$2,`readPackageJson`);function findWorkspaceRoot(n){let a=n;for(let S=0;S<12;S++){let S=ko(a,`package.json`);if(existsSync(S)&&readPackageJson$2(S)?.workspaces!==void 0)try{let S=discoverWorkspaces(a);if(a===n||S.some(a=>a.location===n))return a}catch{}let C=Eo(a,`..`);if(C===a)break;a=C}return null}je(),Os(),Bo(),Ux();const lE={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$3(ko(process.cwd(),`package.json`));if(!(C?.scripts&&typeof C.scripts[a]==`string`)&&looksLikeFile(a)){await runGjsBundle(Eo(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=ko(S,`package.json`),N=readPackageJson$3(C);N||(Ae.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>`;Ae.error(`gjsify run: no script "${n}" in ${C} (available: ${a})`),process.exit(1)}let H=findWorkspaceRoot(S),W=[ko(S,`node_modules`,`.bin`)];H&&H!==S&&W.push(ko(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(Ro),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=>{Ae.error(n.message),process.exit(1)}),process.exit(0)}function shellEscape(n){return/^[a-zA-Z0-9_\-./=:@,]+$/.test(n)?n:`'${n.replace(/'/g,`'\\''`)}'`}je(),Bo();const uE={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?Eo(n.file):null,C=detectNativePackages(a),{LD_LIBRARY_PATH:N,GI_TYPELIB_PATH:F}=buildNativeEnv(C);if(n.export){Ae.log(`export LD_LIBRARY_PATH="${N}"`),Ae.log(`export GI_TYPELIB_PATH="${F}"`);return}if(C.length===0){Ae.log(`No native gjsify packages detected in node_modules.`),Ae.log(`Native packages declare "gjsify": { "prebuilds": "<dir>" } in their package.json.`);return}Ae.log(`Native packages detected:`);for(let n of C)Ae.log(` ${n.name} → ${n.prebuildsDir}`);Ae.log(``),Ae.log(`To run your app directly with gjs, set:`),Ae.log(` export LD_LIBRARY_PATH="${N}"`),Ae.log(` export GI_TYPELIB_PATH="${F}"`),S?Ae.log(` gjs -m ${S}`):Ae.log(` gjs -m <your-bundle.js>`),Ae.log(``),Ae.log(`Or use gjsify run to handle this automatically:`),S?Ae.log(` gjsify run ${n.file}`):Ae.log(` gjsify run <your-bundle.js>`)}};Ux(),Bo(),Ls(),en(),Os();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
744
|
`)[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(`
|
|
745
745
|
`)[0],severity:C,requiredBy:N}}function checkNpmPackage(n,a,S,C,N,F){try{return createRequire(pathToFileURL(ko(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 dE={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`},gnutls:{id:`gnutls`,name:`GnuTLS`,pkgName:`gnutls`},nghttp2:{id:`nghttp2`,name:`libnghttp2`,pkgName:`libnghttp2`}},fE={"@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`],"@gjsify/tls-native":[`gnutls`],"@gjsify/http2-native":[`nghttp2`]};function findProjectRoot(n){let a=Eo(n);for(;;){if(existsSync(ko(a,`package.json`)))return a;let n=Eo(a,`..`);if(n===a)return null;a=n}}function discoverGjsifyPackages(n){let a=findProjectRoot(n);if(!a)return null;let S=ko(a,`node_modules`,`@gjsify`);if(!existsSync(S))return new Set;let C=ko(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=fE[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(`
|
|
746
746
|
`)[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(dE)){if(n!==null&&!n.has(a))continue;let N=Object.entries(fE).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 pE={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`,gnutls:`libgnutls28-dev`,nghttp2:`libnghttp2-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`,gnutls:`gnutls-devel`,nghttp2:`libnghttp2-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`,gnutls:`gnutls`,nghttp2:`libnghttp2`},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`,gnutls:`libgnutls-devel`,nghttp2:`libnghttp2-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`,gnutls:`gnutls-dev`,nghttp2:`nghttp2-dev`},unknown:{}},mE={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=pE[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(`${mE[n]} ${C.join(` `)}`),N.length>0&&F.push(`npm install ${N.join(` `)}`),F.length>0?F.join(`
|
|
@@ -786,11 +786,11 @@ jobs:
|
|
|
786
786
|
cache-key: ${n.cacheKey}
|
|
787
787
|
`}je(),Os(),Bo(),Ux();const FE={command:`check [manifest]`,description:`Run Flathub pre-submission linters: appstreamcli validate + flatpak-builder-lint.`,builder:n=>n.positional(`manifest`,{description:"Path to the Flatpak manifest. Auto-detects `<app-id>.json` if omitted.",type:`string`,normalize:!0}).option(`repo`,{description:"Built ostree-repo path. If given, also runs `flatpak-builder-lint repo`.",type:`string`,normalize:!0}).option(`metainfo`,{description:"MetaInfo XML path. Default: `data/<app-id>.metainfo.xml.in`.",type:`string`,normalize:!0}).option(`appstream`,{description:"Run `appstreamcli validate --strict` (default: true).",type:`boolean`,default:!0}).option(`builder-lint`,{description:"Run `flatpak-builder-lint manifest` (default: true).",type:`boolean`,default:!0}).option(`verbose`,{description:`Stream linter stdout/stderr verbatim.`,type:`boolean`,default:!1}),handler:async n=>{let a=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},S=process.cwd(),C=resolveAppId(n.manifest,a,S),N=resolveManifestPath(n.manifest,C,S),F=Eo(S,n.metainfo??`data/${C??`unknown`}.metainfo.xml.in`),I=0;if(n.appstream!==!1&&(existsSync(F)?await runLinter(`appstreamcli`,[`validate`,`--strict`,F],n.verbose??!1)||I++:Ae.warn(`[gjsify flatpak check] skipping appstreamcli — ${F} not found`)),n.builderLint!==!1){if(!existsSync(N)){Ae.error(`[gjsify flatpak check] manifest not found: ${N}`),process.exit(1);return}await runLinter(`flatpak-builder-lint`,[`manifest`,N],n.verbose??!1)||I++,n.repo&&(await runLinter(`flatpak-builder-lint`,[`repo`,Eo(S,n.repo)],n.verbose??!1)||I++)}I>0&&(Ae.error(`\n[gjsify flatpak check] ${I} check(s) failed.`),process.exit(1)),Ae.log(`[gjsify flatpak check] all checks passed.`)}};function resolveAppId(n,a,S){if(a.appId)return a.appId;try{let n=readPackageJson(S);if(looksLikeAppId(n.name))return n.name}catch{}if(n)return n.replace(/\.json$/,``)}function resolveManifestPath(n,a,S){if(n)return Eo(S,n);if(a)return Eo(S,`${a}.json`);let C=readdirSync(S).filter(n=>n.endsWith(`.json`)&&!n.startsWith(`package`));if(C.length===1)return Eo(S,C[0]);throw Error(`gjsify flatpak check: no manifest path given and could not auto-detect. Pass the manifest as a positional argument.`)}function runLinter(n,a,S){return new Promise(C=>{let N=spawn(n,a,{stdio:S?`inherit`:[`ignore`,`pipe`,`pipe`]}),F=``,I=``;S||(N.stdout?.setEncoding(`utf-8`),N.stderr?.setEncoding(`utf-8`),N.stdout?.on(`data`,n=>{F+=n}),N.stderr?.on(`data`,n=>{I+=n})),N.on(`error`,a=>{let S=a;S.code===`ENOENT`?Ae.error(`[gjsify flatpak check] ${n} not found in PATH.\nInstall via:\n flatpak install -y flathub org.flatpak.Builder\n alias ${n}="flatpak run --command=${n} org.flatpak.Builder"`):Ae.error(`[gjsify flatpak check] ${n} failed to spawn: ${S.message}`),C(!1)}),N.on(`exit`,N=>{let H=N===0,W=H?`OK`:`FAIL`;Ae.log(`[gjsify flatpak check] ${W}: ${n} ${a.join(` `)}`),!H&&!S&&(F.trim()&&Ae.log(F.trimEnd()),I.trim()&&Ae.error(I.trimEnd())),C(H)})})}je(),Os(),Bo(),Ep(),Ux(),Gc();const IE=promisify(execFile),LE={command:`sync-flathub`,description:`Update the per-app Flathub tracking-repo manifest to a new git tag + commit. Clones, edits, commits, optionally opens a PR.`,builder:n=>n.version(!1).option(`version`,{description:"Git tag to sync to. Default: `git describe --tags --abbrev=0` in cwd.",type:`string`}).option(`app-id`,{description:"Reverse-DNS app id. Default: `gjsify.flatpak.appId`.",type:`string`}).option(`flathub-repo`,{description:"Flathub tracking-repo (owner/name). Default: `flathub/<appId>`.",type:`string`}).option(`commit`,{description:"Commit SHA to pin. Default: resolved via `git rev-list -n 1 <version>` in cwd.",type:`string`}).option(`branch`,{description:"Branch name in the flathub-repo. Default: `update-to-<version>`.",type:`string`}).option(`source-index`,{description:"Index into modules[0].sources[] to update (when manifest has multiple sources). Default: first `type: git` source.",type:`number`}).option(`pr`,{description:"After commit + push, open a PR via `gh pr create`. Pass `--no-pr` to skip and stop after push.",type:`boolean`,default:!0}).option(`dry-run`,{description:`Show what would be edited; touch no files, run no git commands.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every git / gh invocation before running.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},C=n.appId??S.appId??readPackageJson(a).name;if(!C)throw Error(`[gjsify flatpak sync-flathub] no app id available — pass --app-id or set gjsify.flatpak.appId.`);let N=n.flathubRepo??S.flathubRepo??`flathub/${C}`,F=n.version??await resolveLatestTag$1(a,n.verbose);if(!F)throw Error(`[gjsify flatpak sync-flathub] no version resolved — pass --version vX.Y.Z or create a git tag locally.`);let I=n.commit??await resolveCommitForTag(a,F,n.verbose),H=n.branch??`update-to-${normaliseBranchSegment(F)}`;if(Ae.log(`[gjsify flatpak sync-flathub] appId=${C}`),Ae.log(`[gjsify flatpak sync-flathub] flathubRepo=${N}`),Ae.log(`[gjsify flatpak sync-flathub] version=${F}`),Ae.log(`[gjsify flatpak sync-flathub] commit=${I}`),Ae.log(`[gjsify flatpak sync-flathub] branch=${H}`),n.dryRun){Ae.log(`[gjsify flatpak sync-flathub] --dry-run set; not cloning / writing / pushing.`);return}let W=flathubCacheRoot(),K=ko(W,N.replace(`/`,`__`));mkdirSync(W,{recursive:!0}),await ensureClone(K,N,n.verbose);let q=ko(K,`${C}.json`);if(!existsSync(q))throw Error(`[gjsify flatpak sync-flathub] Flathub manifest not found at ${q} — wrong appId / wrong flathub-repo?`);let Y=readFileSync(q,`utf-8`),X=editManifest(Y,{tag:F,commit:I,sourceIndex:n.sourceIndex});if(X===Y){Ae.log(`[gjsify flatpak sync-flathub] manifest already at ${F} — nothing to do.`);return}if(writeFileSync(q,X,`utf-8`),Ae.log(`[gjsify flatpak sync-flathub] manifest patched at ${q}`),await gitInRepo(K,[`checkout`,`-B`,H],n.verbose),await gitInRepo(K,[`add`,`.`],n.verbose),await gitInRepo(K,[`commit`,`-m`,`Update to ${F}`],n.verbose),n.pr===!1){Ae.log(`[gjsify flatpak sync-flathub] --no-pr set; branch ${H} committed locally in ${K}.`);return}await gitInRepo(K,[`push`,`-u`,`origin`,H,`--force-with-lease`],n.verbose),await ghCreate(K,N,H,F,`Auto-generated by \`gjsify flatpak sync-flathub\`.\n\n- Version: \`${F}\`\n- Commit: \`${I}\`\n`,n.verbose)}};async function resolveLatestTag$1(n,a){try{let{stdout:S}=await IE(`git`,[`describe`,`--tags`,`--abbrev=0`],{cwd:n});return a&&Ae.log(`[gjsify flatpak sync-flathub] resolved latest tag → ${S.trim()}`),S.trim()||null}catch{return null}}__name$1(resolveLatestTag$1,`resolveLatestTag`);async function resolveCommitForTag(n,a,S){try{let{stdout:C}=await IE(`git`,[`rev-list`,`-n`,`1`,a],{cwd:n}),N=C.trim();if(!N)throw Error(`empty rev-list output`);return S&&Ae.log(`[gjsify flatpak sync-flathub] resolved ${a} → ${N}`),N}catch(n){throw Error(`[gjsify flatpak sync-flathub] tag ${a} not found locally. Run \`git fetch --tags\` or pass --commit <sha>.\n underlying error: ${n instanceof Error?n.message:String(n)}`)}}function normaliseBranchSegment(n){return n.replace(/^v/,``).replace(/[^A-Za-z0-9._-]/g,`-`)}function flathubCacheRoot(){return ko(process.env.XDG_CACHE_HOME||ko(homedir(),`.cache`),`gjsify`,`flathub-sync`)}async function ensureClone(n,a,S){if(existsSync(ko(n,`.git`))){S&&Ae.log(`[gjsify flatpak sync-flathub] reusing clone at ${n}`),await gitInRepo(n,[`fetch`,`origin`],S);let a=await detectDefaultBranch(n,S);await gitInRepo(n,[`checkout`,a],S),await gitInRepo(n,[`reset`,`--hard`,`origin/${a}`],S);return}mkdirSync(Eo(n,`..`),{recursive:!0});let C=`https://github.com/${a}.git`;S&&Ae.log(`[gjsify flatpak sync-flathub] git clone ${C} ${n}`);try{await IE(`git`,[`clone`,C,n])}catch(n){throw n?.code===`ENOENT`?Error("[gjsify flatpak sync-flathub] `git` not found. Install git from your distro (Fedora: `dnf install git`, Debian: `apt install git`)."):n}}async function detectDefaultBranch(n,a){try{let{stdout:S}=await IE(`git`,[`remote`,`show`,`origin`],{cwd:n}),C=S.match(/HEAD branch: (\S+)/);if(C&&C[1]&&C[1]!==`(unknown)`)return a&&Ae.log(`[gjsify flatpak sync-flathub] default branch → ${C[1]}`),C[1]}catch{}return`master`}function gitInRepo(n,a,S){return S&&Ae.log(`[gjsify flatpak sync-flathub] git ${a.join(` `)} (in ${n})`),new Promise((S,C)=>{let N=spawn(`git`,a,{cwd:n,stdio:`inherit`});N.on(`error`,n=>{n.code===`ENOENT`?C(Error("[gjsify flatpak sync-flathub] `git` not found. Install it from your distro.")):C(n)}),N.on(`exit`,n=>{n===0?S():C(Error(`git ${a[0]} exited ${n}`))})})}function ghCreate(n,a,S,C,N,F){let I=[`pr`,`create`,`--repo`,a,`--head`,S,`--title`,`Update to ${C}`,`--body`,N];return F&&Ae.log(`[gjsify flatpak sync-flathub] gh ${I.join(` `)} (in ${n})`),new Promise((a,S)=>{let C=spawn(`gh`,I,{cwd:n,stdio:`inherit`});C.on(`error`,n=>{n.code===`ENOENT`?S(Error("[gjsify flatpak sync-flathub] `gh` (GitHub CLI) not found. Install via `dnf install gh` (Fedora), `apt install gh` (Debian/Ubuntu), or `flatpak install -y flathub com.github.cli`.")):S(n)}),C.on(`exit`,n=>{n===0?a():S(Error(`gh pr create exited ${n}`))})})}function editManifest(n,a){let S=JSON.parse(n),C=S.modules??[];if(C.length===0)throw Error(`[gjsify flatpak sync-flathub] manifest has no modules`);let N=C[0].sources??[];if(N.length===0)throw Error(`[gjsify flatpak sync-flathub] modules[0] has no sources`);let F=a.sourceIndex??N.findIndex(n=>n.type===`git`);if(F<0||F>=N.length)throw Error(`[gjsify flatpak sync-flathub] no git source found in modules[0].sources (use --source-index <n>)`);let I=N[F];if(I.type!==`git`)throw Error(`[gjsify flatpak sync-flathub] modules[0].sources[${F}].type is "${I.type}", expected "git"`);I.tag=a.tag,I.commit=a.commit,I[`x-checker-data`]||={type:`git`,"tag-pattern":`^v(\\d+\\.\\d+\\.\\d+)$`,"version-scheme":`semantic`};let H=detectIndent$1(n);return JSON.stringify(S,null,H)+(n.endsWith(`
|
|
788
788
|
`)?`
|
|
789
|
-
`:``)}function detectIndent$1(n){let a=n.match(/^\{\n( +)/);return a?a[1].length:2}__name$1(detectIndent$1,`detectIndent`),je(),Os(),Ux(),Gc();const RE=promisify(execFile),zE={command:`diff`,description:`Compare the per-app Flathub tracking-repo manifest against the local git state and report version / commit drift.`,builder:n=>n.version(!1).option(`version`,{description:"Local version to compare against. Default: `git describe --tags --abbrev=0` in cwd.",type:`string`}).option(`app-id`,{description:"Reverse-DNS app id. Default: `gjsify.flatpak.appId`.",type:`string`}).option(`flathub-repo`,{description:"Flathub tracking-repo (owner/name). Default: `gjsify.flatpak.flathubRepo` or `flathub/<appId>`.",type:`string`}).option(`against`,{description:`Read the Flathub manifest from a local file instead of fetching it. Useful in CI or offline.`,type:`string`}).option(`detail`,{description:`Also print the full Flathub manifest source entry alongside the resolved local version.`,type:`boolean`,default:!1}).option(`source-index`,{description:`Index into modules[0].sources[] to inspect (when the manifest has multiple sources).`,type:`number`}).option(`verbose`,{description:`Echo fetch URL + resolved values.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},C=n.appId??S.appId??readPackageJson(a).name;if(!C)throw Error(`[gjsify flatpak diff] no app id available — pass --app-id or set gjsify.flatpak.appId.`);let N=n.flathubRepo??S.flathubRepo??`flathub/${C}`,F=n.version??await resolveLatestTag(a,n.verbose),I=await loadFlathubSource({appId:C,flathubRepo:N,against:n.against,verbose:n.verbose},n.sourceIndex),H=I?.tag,W=I?.commit;if(Ae.log(`[gjsify flatpak diff] appId=${C}`),Ae.log(`[gjsify flatpak diff] flathubRepo=${N}`),Ae.log(`[gjsify flatpak diff] flathub: tag=${H??`(missing)`} commit=${W??`(missing)`}`),Ae.log(`[gjsify flatpak diff] local: tag=${F??`(none)`}`),n.detail&&I&&(Ae.log(`[gjsify flatpak diff] flathub manifest source:`),Ae.log(JSON.stringify(I,null,2))),!F){Ae.warn("[gjsify flatpak diff] no local git tag found — cut a release (`git tag vX.Y.Z`) or pass --version vX.Y.Z to compare against an explicit value.");return}if(H||(Ae.warn("[gjsify flatpak diff] flathub manifest has no `tag` field on the inspected source."),process.exit(1)),H===F){Ae.log(`✅ in sync (${F})`);return}Ae.log(`❌ drift detected — flathub=${H} vs local=${F}`),Ae.log(` run \`gjsify flatpak sync-flathub --version ${F}\` to update the Flathub manifest.`),process.exit(1)}};async function loadFlathubSource(n,a){let S;if(n.against){if(!existsSync(n.against))throw Error(`[gjsify flatpak diff] --against path ${n.against} does not exist`);S=readFileSync(n.against,`utf-8`)}else S=await fetchFlathubManifest(n.flathubRepo,n.appId,n.verbose);let C;try{C=JSON.parse(S)}catch(n){throw Error(`[gjsify flatpak diff] failed to parse Flathub manifest as JSON: ${n.message}`)}let N=(C.modules??[])[0]?.sources??[];if(N.length===0)return null;let F=a??N.findIndex(n=>n?.type===`git`);return F<0||F>=N.length?null:N[F]??null}async function fetchFlathubManifest(n,a,S){for(let C of[`master`,`main`]){let N=`https://raw.githubusercontent.com/${n}/${C}/${a}.json`;S&&Ae.log(`[gjsify flatpak diff] fetch ${N}`);try{let n=await fetch(N);if(n.ok)return await n.text();S&&Ae.log(`[gjsify flatpak diff] ${C} → HTTP ${n.status}`)}catch(n){S&&Ae.log(`[gjsify flatpak diff] ${C} fetch error: ${n.message}`)}}throw Error(`[gjsify flatpak diff] could not fetch flathub manifest from ${n} on master or main`)}async function resolveLatestTag(n,a){try{let{stdout:S}=await RE(`git`,[`describe`,`--tags`,`--abbrev=0`],{cwd:n}),C=S.trim();return a&&Ae.log(`[gjsify flatpak diff] local latest tag → ${C}`),C||null}catch{return null}}je(),Ux(),Gc(),en(),Bo();const BE=promisify(execFile),VE={command:`release <version>`,description:"Cut a release end-to-end: regenerate Flathub assets, run linters, create + push the git tag, then open the Flathub PR. Each step delegates to the equivalent `gjsify flatpak <sub>` command.",builder:n=>n.version(!1).positional(`version`,{description:"Release tag, e.g. `v0.6.6`.",type:`string`,demandOption:!0}).option(`skip-init`,{description:"Skip the `flatpak init --force` regen step.",type:`boolean`,default:!1}).option(`skip-check`,{description:"Skip the `flatpak check` linter step.",type:`boolean`,default:!1}).option(`skip-tag`,{description:"Skip the `git tag` + `git push --tags` step (use when the tag was already created out-of-band).",type:`boolean`,default:!1}).option(`push-tag`,{description:`Push the created tag after creating it. Default: true.`,type:`boolean`,default:!0}).option(`flathub-repo`,{description:`Flathub tracking-repo override forwarded to sync-flathub.`,type:`string`}).option(`dry-run`,{description:`Print each step that would run without executing any of them.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every sub-command invocation.`,type:`boolean`,default:!1}),handler:async n=>{let a=typeof n.version==`string`?n.version.trim():``;if(!a)throw Error(`[gjsify flatpak release] missing <version> positional`);let S=resolveCliEntry(),C=process.cwd(),N=[];n.skipInit||N.push({name:`init`,args:[S,`flatpak`,`init`,`--force`]}),n.skipCheck||N.push({name:`check`,args:[S,`flatpak`,`check`]});let F=[S,`flatpak`,`sync-flathub`,`--version`,a];if(n.flathubRepo&&F.push(`--flathub-repo`,n.flathubRepo),n.verbose&&F.push(`--verbose`),Ae.log(`[gjsify flatpak release] starting release of ${a}`),n.dryRun){Ae.log(`[gjsify flatpak release] --dry-run set; printing plan only:`);for(let n of N)Ae.log(` · ${n.name}: node ${n.args.join(` `)}`);n.skipTag||Ae.log(` · tag: git tag ${a}${n.pushTag===!1?``:` && git push origin `+a}`),Ae.log(` · sync: node ${F.join(` `)}`);return}for(let a of N)n.verbose&&Ae.log(`[gjsify flatpak release] step ${a.name}: node ${a.args.join(` `)}`),await runNode(a.args,C),Ae.log(`[gjsify flatpak release] ${a.name} ✔`);if(!n.skipTag){n.verbose&&Ae.log(`[gjsify flatpak release] git tag ${a}`);try{await BE(`git`,[`tag`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag ${a} created`)}catch(n){throw Error(`[gjsify flatpak release] git tag failed (${n.message}). If the tag already exists, re-run with --skip-tag.`)}n.pushTag!==!1&&(n.verbose&&Ae.log(`[gjsify flatpak release] git push origin ${a}`),await BE(`git`,[`push`,`origin`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag pushed`))}n.verbose&&Ae.log(`[gjsify flatpak release] sync: node ${F.join(` `)}`),await runNode(F,C),Ae.log(`[gjsify flatpak release] ✅ release ${a} complete`)}};function resolveCliEntry(){return Eo(Eo(Mo(fileURLToPath(import.meta.url)),`..`,`..`),`index.js`)}async function runNode(n,a){await new Promise((S,C)=>{let N=spawn(`node`,n,{cwd:a,stdio:`inherit`});N.on(`error`,C),N.on(`exit`,a=>{a===0?S():C(Error(`sub-command exited with code ${a}: node ${n.join(` `)}`))})})}const HE={command:`flatpak <subcommand>`,description:`Flatpak toolchain: init/build/deps/ci/check/sync-flathub/diff/release subcommands for shipping GJS apps and CLIs as Flatpaks.`,builder:n=>n.command(jE.command,jE.description,jE.builder,jE.handler).command(ME.command,ME.description,ME.builder,ME.handler).command(NE.command,NE.description,NE.builder,NE.handler).command(PE.command,PE.description,PE.builder,PE.handler).command(FE.command,FE.description,FE.builder,FE.handler).command(LE.command,LE.description,LE.builder,LE.handler).command(zE.command,zE.description,zE.builder,zE.handler).command(VE.command,VE.description,VE.builder,VE.handler).demandCommand(1).strict()};Os(),Bo();const UE=/^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;function parseSpec$1(n){if(!n)throw Error(`dlx: empty package spec`);if(n.startsWith(`./`)||n.startsWith(`../`)||Oo(n)||existsSync(n))return{kind:`local`,path:Eo(n)};let a=n,S,C=n.lastIndexOf(`@`);if(C>0&&(a=n.slice(0,C),S=n.slice(C+1)),!UE.test(a))throw Error(`dlx: invalid package name "${a}"`);return{kind:`registry`,name:a,version:S,spec:n}}__name$1(parseSpec$1,`parseSpec`),Os(),Bo();function resolveGjsEntry(n,a){let S=ko(n,`package.json`);if(!existsSync(S))throw Error(`dlx: no package.json found at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=C.gjsify?.bin,F=C.gjsify?.main,I=C.main,H,W=null,K=!1;if(a!==null){if(!N||!N[a]){let S=N?Object.keys(N).join(`, `):`(none)`;throw Error(`dlx: package "${C.name??n}" has no GJS bin named "${a}" — known: ${S}`)}H=N[a],W=a}else if(N&&Object.keys(N).length===1){let n=Object.keys(N)[0];H=N[n],W=n}else F?H=F:I&&(H=I,K=!0);if(N&&Object.keys(N).length>1&&a===null){let a=Object.keys(N).join(`, `);throw Error(`dlx: package "${C.name??n}" defines multiple GJS bins — pass one of: ${a}`)}if(!H)throw Error(`dlx: package "${C.name??n}" has no GJS entry — set \`gjsify.main\` (or \`gjsify.bin\`) in its package.json`);let q=Eo(n,H);if(!existsSync(q))throw Error(`dlx: GJS entry not found: ${q}`);return{bundlePath:q,binName:W,fromFallback:K}}Ua(),Os(),Ep(),Bo();function lexCompare(n,a){return n<a?-1:+(n>a)}function createCacheKey(n){let a=[...n.packages].sort(lexCompare),S=Object.entries(n.registries??{}).sort(([n],[a])=>lexCompare(n,a)),C=JSON.stringify([a,S]);return createHash(`sha256`).update(C).digest(`hex`)}function dlxCacheRoot(){let n=process.env.XDG_CACHE_HOME,a=ko(n&&n.length>0?n:ko(homedir(),`.cache`),`gjsify`,`dlx`);return mkdirSync(a,{recursive:!0}),a}function cacheDirFor(n){let a=ko(dlxCacheRoot(),n);return mkdirSync(a,{recursive:!0}),a}function makePrepareDir(n){let a=ko(n,`${Date.now().toString(16)}-${process.pid.toString(16)}`);return mkdirSync(a,{recursive:!0}),a}function getValidCachedPkg(n,a=10080){let S=ko(n,`pkg`),C;try{C=lstatSync(S)}catch(n){if(n.code===`ENOENT`)return;throw n}if(!C.isSymbolicLink())return;let N;try{N=realpathSync(S)}catch{return}return Date.now()-C.mtime.getTime()<=a*6e4?N:void 0}function symlinkSwap(n,a){let S=ko(n,`pkg`),C=ko(n,`pkg.tmp-${Date.now().toString(16)}-${process.pid.toString(16)}`);symlinkSync(a,C,`dir`);try{renameSync(C,S)}catch(n){let a=n.code;if(a===`EBUSY`||a===`EPERM`||a===`EEXIST`){try{rmSync(C)}catch{}return realpathSync(S)}throw n}return realpathSync(S)}function resolveInstalledPkgDir(n,a){return Eo(n,`node_modules`,a)}function parse(n){try{return new SemVer(n)}catch{return null}}function satisfies(n,a){let S=a instanceof KE?a:new KE(a),C=n instanceof SemVer?n:parse(String(n));return C?S.test(C):!1}function maxSatisfying(n,a){let S=a instanceof KE?a:new KE(a),C=null;for(let a of n){let n=parse(a);!n||!S.test(n)||(C===null||n.compare(C)>0)&&(C=n)}return C?C.version:null}function testComparator(n,a){if(n.semver===null)return!0;let S=a.compare(n.semver);switch(n.operator){case``:case`=`:return S===0;case`<`:return S<0;case`<=`:return S<=0;case`>`:return S>0;case`>=`:return S>=0}}function formatComparator(n){return n.semver===null?`*`:`${n.operator}${n.semver.version}`}function parseRangePart(n){let a=n.trim();if(a===``||a===`*`||a.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=a.match(/^\s*(\S+)\s+-\s+(\S+)\s*$/);if(S)return hyphenRange(S[1],S[2]);let C=a.replace(/(<=|>=|<|>|=)\s+(?=\S)/g,`$1`).split(/\s+/),N=[];for(let n of C)N.push(...parseSimple(n));return N}function parseSimple(n){if(n===`*`||n===``||n.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];if(n.startsWith(`^`))return caretRange(n.slice(1));if(n.startsWith(`~`))return tildeRange(n.slice(1).replace(/^>/,``));let a=n.match(/^(<=|>=|<|>|=)\s*(.+)$/);if(a){let n=a[1];return primitiveRange(n,a[2])}return partialRange(n)}function parsePartial(n){let a=n.trim().replace(/^v/,``);if(a===``||a===`*`)return{major:null,minor:null,patch:null,pre:``,build:``};let S=``,C=``,N=a,F=N.indexOf(`+`);F>=0&&(C=N.slice(F+1),N=N.slice(0,F));let I=N.indexOf(`-`);I>=0&&(S=N.slice(I+1),N=N.slice(0,I));let H=N.split(`.`),xr=a=>{if(a===void 0||a===``||a===`x`||a===`X`||a===`*`)return null;if(!/^\d+$/.test(a))throw TypeError(`Invalid partial version: ${n}`);return Number(a)};return{major:xr(H[0]),minor:xr(H[1]),patch:xr(H[2]),pre:S,build:C}}function partialToVersion(n){return`${n.major??0}.${n.minor??0}.${n.patch??0}${n.pre?`-${n.pre}`:``}${n.build?`+${n.build}`:``}`}function partialRange(n){let a=parsePartial(n);return a.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:a.minor===null?[{operator:`>=`,semver:new SemVer(`${a.major}.0.0`)},{operator:`<`,semver:new SemVer(`${a.major+1}.0.0`)}]:a.patch===null?[{operator:`>=`,semver:new SemVer(`${a.major}.${a.minor}.0`)},{operator:`<`,semver:new SemVer(`${a.major}.${a.minor+1}.0`)}]:[{operator:`=`,semver:new SemVer(partialToVersion(a))}]}function caretRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C;return C=a.major>0||a.minor===null?`${a.major+1}.0.0`:a.minor>0||a.patch===null?`0.${a.minor+1}.0`:`0.0.${a.patch+1}`,[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function tildeRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C=a.minor===null?`${a.major+1}.0.0`:`${a.major}.${a.minor+1}.0`;return[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function primitiveRange(n,a){let S=parsePartial(a);return S.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:n===`=`||n===``?partialRange(a):n===`>`?S.minor===null?[{operator:`>=`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`>`,semver:new SemVer(partialToVersion(S))}]:n===`<`?S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor}.0`)}]:[{operator:`<`,semver:new SemVer(partialToVersion(S))}]:n===`>=`?[{operator:`>=`,semver:new SemVer(partialToVersion(S))}]:S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`<=`,semver:new SemVer(partialToVersion(S))}]}function hyphenRange(n,a){let S=parsePartial(n),C=parsePartial(a),N=S.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor??0}.${S.patch??0}${S.pre?`-${S.pre}`:``}`)},F;return F=C.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:C.minor===null?{operator:`<`,semver:new SemVer(`${C.major+1}.0.0`)}:C.patch===null?{operator:`<`,semver:new SemVer(`${C.major}.${C.minor+1}.0`)}:{operator:`<=`,semver:new SemVer(`${C.major}.${C.minor}.${C.patch}${C.pre?`-${C.pre}`:``}`)},[N,F]}var WE,GE,SemVer,KE,qE=__esmMin(()=>{WE=/^(0|[1-9]\d*)$/,GE=/^(\d+)\.(\d+)\.(\d+)(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/,SemVer=class{major;minor;patch;prerelease;build;version;constructor(n){let a=String(n).trim().replace(/^v/,``),S=GE.exec(a);if(!S)throw TypeError(`Invalid Version: ${n}`);this.major=Number(S[1]),this.minor=Number(S[2]),this.patch=Number(S[3]),this.prerelease=S[4]?S[4].split(`.`).map(n=>WE.test(n)?Number(n):n):[],this.build=S[5]?S[5].split(`.`):[],this.version=`${this.major}.${this.minor}.${this.patch}`+(this.prerelease.length?`-${this.prerelease.join(`.`)}`:``)+(this.build.length?`+${this.build.join(`.`)}`:``)}compare(n){return this.major===n.major?this.minor===n.minor?this.patch===n.patch?this.comparePre(n):this.patch<n.patch?-1:1:this.minor<n.minor?-1:1:this.major<n.major?-1:1}comparePre(n){let a=this.prerelease,S=n.prerelease;if(a.length===0&&S.length===0)return 0;if(a.length===0)return 1;if(S.length===0)return-1;for(let n=0;;n++){let C=a[n],N=S[n];if(C===void 0&&N===void 0)return 0;if(N===void 0)return 1;if(C===void 0)return-1;if(C===N)continue;let F=typeof C==`number`,I=typeof N==`number`;return F&&!I?-1:!F&&I?1:C<N?-1:1}}toString(){return this.version}},KE=class Range{raw;set;constructor(n){if(n instanceof Range){this.raw=n.raw,this.set=n.set;return}this.raw=String(n).trim();let a=this.raw.split(/\s*\|\|\s*/),S=[];for(let n of a){let a=parseRangePart(n);if(a.length===0)throw TypeError(`Invalid range: ${this.raw}`);S.push(a)}if(S.length===0)throw TypeError(`Invalid range: ${this.raw}`);this.set=S}test(n){let a=n instanceof SemVer?n:parse(String(n));if(!a)return!1;for(let n of this.set)if(n.every(n=>testComparator(n,a))){if(a.prerelease.length>0&&!n.some(n=>n.semver!==null&&n.semver.prerelease.length>0&&n.semver.major===a.major&&n.semver.minor===a.minor&&n.semver.patch===a.patch))continue;return!0}return!1}format(){return this.set.map(n=>n.map(formatComparator).join(` `)).join(` || `)}toString(){return this.format()}}});function assertPackument(n,a){if(!a||typeof a!=`object`)throw TypeError(`registry: ${n} packument is not an object`);let S=a;if(typeof S.name!=`string`)throw TypeError(`registry: ${n} packument missing string name`);if(!S.versions||typeof S.versions!=`object`)throw TypeError(`registry: ${n} packument missing versions map`)}function registryFor(n,a){if(a&&n.startsWith(`@`)){let S=n.slice(0,n.indexOf(`/`)),C=a.scopes[S];if(C)return ensureTrailingSlash$1(C)}return a?.registry?ensureTrailingSlash$1(a.registry):JE}function packumentUrl(n,a){let S=ensureTrailingSlash$1(a);if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a<0)throw TypeError(`Invalid scoped package name: ${n}`);let C=n.slice(0,a),N=n.slice(a+1);return`${S}${encodeURIComponent(C)}/${encodeURIComponent(N)}`}return`${S}${encodeURIComponent(n)}`}async function fetchPackument(n,a={}){let S=packumentUrl(n,a.registry??registryFor(n,a.npmrc)),C=buildHeaders(S,a);C.accept??=`application/vnd.npm.install-v1+json`;let N=await fetchWithRetry(S,{headers:C,signal:a.signal},a);if(!N.ok)throw N.status===404||N.status===406?new PackageNotFoundError(n,S):Error(`registry GET ${S} -> ${N.status} ${N.statusText}`);let F=await N.json();return assertPackument(n,F),F}async function fetchTarball(n,a={}){let S=buildHeaders(n,a);S.accept??=`application/octet-stream`;let C=await fetchWithRetry(n,{headers:S,signal:a.signal},a);if(!C.ok)throw Error(`tarball GET ${n} -> ${C.status} ${C.statusText}`);let N=new Uint8Array(await C.arrayBuffer());if(a.integrity&&!await verifyIntegrity(N,a.integrity))throw new IntegrityError(n,a.integrity);return N}async function fetchWithRetry(n,a,S){let C=S.fetch??globalThis.fetch;if(!C)throw Error(`@gjsify/npm-registry: globalThis.fetch is missing`);let N=Math.max(0,S.retries??3),F=Math.max(0,S.retryDelayMs??250),I=0,H;for(;;){if(a.signal?.aborted)throw signalAbortError(a.signal);try{let S=await C(n,a);if(S.ok||!isRetryableStatus(S.status)||I>=N)return S;try{await S.arrayBuffer()}catch{}H=Error(`HTTP ${S.status} ${S.statusText}`)}catch(n){if(!isRetryableError(n)||I>=N)throw n;H=n}let W=Math.min(F*2**I,8e3);S.onRetry?.({attempt:I+1,error:H,delayMs:W}),await delay(W,a.signal),I++}}function isRetryableStatus(n){return n===408||n===425||n===429||n===500||n===502||n===503||n===504||n===521||n===522||n===524||n===525}function isRetryableError(n){if(n&&typeof n==`object`&&`name`in n&&n.name===`AbortError`)return!1;if(n instanceof TypeError)return!0;if(n&&typeof n==`object`&&`name`in n){let a=n.name;if(a===`FetchError`)return!0;if(a===`AbortError`)return!1}let a=n?.cause;if(a&&typeof a==`object`&&`code`in a){let n=a.code;if(typeof n==`string`)return n===`ECONNRESET`||n===`ECONNREFUSED`||n===`ENETUNREACH`||n===`ENOTFOUND`||n===`ETIMEDOUT`||n===`EAI_AGAIN`||n===`UND_ERR_SOCKET`||n===`UND_ERR_CONNECT_TIMEOUT`}return!1}function delay(n,a){return n<=0?Promise.resolve():new Promise((S,C)=>{let N=setTimeout(()=>{a?.removeEventListener?.(`abort`,onAbort),S()},n),onAbort=()=>{clearTimeout(N),C(signalAbortError(a))};if(a?.aborted){clearTimeout(N),C(signalAbortError(a));return}a?.addEventListener?.(`abort`,onAbort,{once:!0})})}function signalAbortError(n){let a=n&&`reason`in n?n.reason:void 0;if(a instanceof Error)return a;let S=Error(`Aborted`);return S.name=`AbortError`,S}async function verifyIntegrity(n,a){let S=a.trim().split(/\s+/);for(let a of S){let S=a.indexOf(`-`);if(S<0)continue;let C=a.slice(0,S).toLowerCase(),N=a.slice(S+1),F=globalThis.crypto?.subtle;if(!F)throw Error(`@gjsify/npm-registry: globalThis.crypto.subtle is missing`);let I=subriToWebCryptoAlgo(C);if(!I)continue;let H=await F.digest(I,dataAsArrayBuffer(n));if(bytesToBase64(new Uint8Array(H))===N)return!0}return!1}function subriToWebCryptoAlgo(n){switch(n){case`sha1`:return`SHA-1`;case`sha256`:return`SHA-256`;case`sha384`:return`SHA-384`;case`sha512`:return`SHA-512`;default:return null}}function dataAsArrayBuffer(n){if(n.byteOffset===0&&n.byteLength===n.buffer.byteLength)return n.buffer;let a=new Uint8Array(n.byteLength);return a.set(n),a.buffer}function bytesToBase64(n){let a=``;for(let S=0;S<n.length;S++)a+=String.fromCharCode(n[S]);return btoa(a)}function parseNpmrc(n){let a={registry:JE,scopes:{},authTokens:{},basicAuth:{}},S=n.split(/\r?\n/),C={};for(let n of S){let S=n.replace(/^\s+|\s+$/g,``);if(!S||S.startsWith(`#`)||S.startsWith(`;`))continue;let N=S.indexOf(`=`);if(N<0)continue;let F=S.slice(0,N).trim(),I=expandEnv(stripQuotes(S.slice(N+1).trim()));if(F===`registry`){a.registry=ensureTrailingSlash$1(I);continue}let H=F.match(/^(@[^:]+):registry$/);if(H){a.scopes[H[1]]=ensureTrailingSlash$1(I);continue}let W=F.match(/^\/\/(.+):_authToken$/);if(W){a.authTokens[normalizeAuthHost(W[1])]=I;continue}let K=F.match(/^\/\/(.+):username$/);if(K){(C[normalizeAuthHost(K[1])]??={}).user=I;continue}let q=F.match(/^\/\/(.+):_password$/);if(q){let n=base64Decode(I);(C[normalizeAuthHost(q[1])]??={}).pass=n;continue}}for(let[n,S]of Object.entries(C))S.user&&S.pass!==void 0&&(a.basicAuth[n]={username:S.user,password:S.pass});return a}function buildHeaders(n,a){let S={"user-agent":`gjsify-install/0.3.7`,"accept-encoding":`identity`};if(a.npmrc){let C=resolveAuthForUrl(n,a.npmrc);C&&(S.authorization=C)}if(a.headers)for(let[n,C]of Object.entries(a.headers))S[n.toLowerCase()]=C;return S}function resolveAuthForUrl(n,a){let S=pathPrefixes(new URL(n));for(let n of S){let S=a.authTokens[n];if(S)return`Bearer ${S}`;let C=a.basicAuth[n];if(C)return`Basic ${btoa(`${C.username}:${C.password}`)}`}return null}function pathPrefixes(n){let a=n.pathname.split(`/`).filter(Boolean),S=[];for(let C=a.length;C>=0;C--){let N=a.slice(0,C).join(`/`);S.push(N?`//${n.host}/${N}`:`//${n.host}`)}return S}function normalizeAuthHost(n){return`//${n.replace(/\/+$/,``)}`}function ensureTrailingSlash$1(n){return n.endsWith(`/`)?n:n+`/`}function stripQuotes(n){return n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`)?n.slice(1,-1):n}function expandEnv(n){return n.replace(/\$\{([A-Z0-9_]+)\}/gi,(n,a)=>globalThis.process?.env?.[a]??``)}function base64Decode(n){return atob(n)}var JE,PackageNotFoundError,IntegrityError,YE=__esmMin(()=>{JE=`https://registry.npmjs.org/`,__name$1(ensureTrailingSlash$1,`ensureTrailingSlash`),PackageNotFoundError=class extends Error{name;url;constructor(n,a){super(`Package not found in registry: ${n} (${a})`),this.name=n,this.url=a,this.name=`PackageNotFoundError`}},IntegrityError=class extends Error{url;integrity;constructor(n,a){super(`Tarball integrity mismatch for ${n} (expected ${a})`),this.url=n,this.integrity=a,this.name=`IntegrityError`}}});function parseTar(n){let a=[],S=null,C=null,N=null,F=0;for(;F+512<=n.length;){let I=n.subarray(F,F+512);if(allZeros(I)){let a=n.subarray(F+512,F+2*512);if(a.length===512&&allZeros(a))break;F+=512;continue}if(!validateChecksum(I))throw new TarParseError(`Bad header checksum at offset ${F} — file is not a valid tar archive`);let H=readString(I,0,100),W=parseOctal(I,100,8),K=parseOctal(I,124,12),q=parseOctal(I,136,12),Y=String.fromCharCode(I[156]||0),X=readString(I,157,100),te=readString(I,257,6),ne=readString(I,345,155),re=readString(I,265,32),ie=readString(I,297,32);F+=512;let ae=n.subarray(F,F+K);if(F+=alignToBlock(K),Y===`x`){S=parsePaxRecords(ae);continue}if(Y===`g`)continue;if(Y===`L`){C=bytesToString(ae).replace(/\0+$/,``);continue}if(Y===`K`){N=bytesToString(ae).replace(/\0+$/,``);continue}let oe=H;te===`ustar`&&ne!==``&&(oe=`${ne}/${H}`),C!==null&&(oe=C,C=null);let Z=X;if(N!==null&&(Z=N,N=null),S!==null){let C=S.get(`path`);C!==void 0&&(oe=C);let N=S.get(`linkpath`);N!==void 0&&(Z=N);let I=S.get(`size`);if(I!==void 0){let C=Number(I);if(Number.isFinite(C)){let N=F-alignToBlock(K),I=n.subarray(N,N+C);F=N+alignToBlock(C),S=null,a.push(buildEntry(oe,Z,Y,W,q,re,ie,I));continue}}S=null}a.push(buildEntry(oe,Z,Y,W,q,re,ie,ae))}return a}function buildEntry(n,a,S,C,N,F,I,H){return{name:n,linkname:a,type:typeflagToType(S,n),mode:C,mtime:N,body:H,uname:F,gname:I}}function typeflagToType(n,a){switch(n){case`0`:case`\0`:case``:return a.endsWith(`/`)?`directory`:`file`;case`1`:return`hardlink`;case`2`:return`symlink`;case`5`:return`directory`;case`x`:return`pax-header`;case`g`:return`pax-global`;case`L`:return`gnu-longname`;case`K`:return`gnu-longlink`;default:return`unknown`}}function parsePaxRecords(n){let a=new Map,S=0;for(;S<n.length;){let C=S;for(;C<n.length&&n[C]!==32;)C++;if(C>=n.length)break;let N=bytesToString(n.subarray(S,C)),F=Number(N);if(!Number.isFinite(F)||F<=0)break;let I=S+F;if(I>n.length)break;let H=bytesToString(n.subarray(C+1,I-1)),W=H.indexOf(`=`);if(W>0){let n=H.slice(0,W),S=H.slice(W+1);a.set(n,S)}S=I}return a}function readString(n,a,S){let C=a,N=a+S;for(;C<N&&n[C]!==0;)C++;return bytesToString(n.subarray(a,C))}function bytesToString(n){return new TextDecoder(`utf-8`,{fatal:!1}).decode(n)}function parseOctal(n,a,S){if(S>0&&n[a]&128){let C=n[a]&127;for(let N=1;N<S;N++)C=C*256+n[a+N];return C}let C=``;for(let N=0;N<S;N++){let S=n[a+N];S===0||S===32||(C+=String.fromCharCode(S))}return C===``?0:parseInt(C,8)}function alignToBlock(n){return Math.ceil(n/512)*512}function allZeros(n){for(let a=0;a<n.length;a++)if(n[a]!==0)return!1;return!0}function validateChecksum(n){let a=parseOctal(n,148,8),S=0,C=0;for(let a=0;a<512;a++){let N=a>=148&&a<156?32:n[a];S+=N,C+=N>127?N-256:N}return a===S||a===C}var TarParseError,XE=__esmMin(()=>{TarParseError=class extends Error{constructor(n){super(n),this.name=`TarParseError`}}});function createTarball(n){let a=[];for(let S of n){if(`directory`in S&&S.directory===!0){a.push(buildHeader(ensureTrailingSlash(S.name),0,`5`,S.mode??493,S.mtime??0));continue}let n=S,C=typeof n.body==`string`?new TextEncoder().encode(n.body):n.body,N=n.mode??defaultFileMode(C);a.push(buildHeader(n.name,C.byteLength,`0`,N,n.mtime??0)),a.push(C);let F=padTo512(C.byteLength);F>0&&a.push(new Uint8Array(F))}return a.push(new Uint8Array(512*2)),concatChunks(a)}function buildHeader(n,a,S,C,N){let{prefix:F,basename:I}=splitPathForUstar(n),H=new Uint8Array(512);writeAscii(H,I,0,100),writeOctal(H,C&4095,100,7),H[107]=0,writeOctal(H,0,108,7),H[115]=0,writeOctal(H,0,116,7),H[123]=0,writeOctal(H,a,124,11),H[135]=0,writeOctal(H,N,136,11),H[147]=0;for(let n=148;n<156;n++)H[n]=32;H[156]=S.charCodeAt(0),writeAscii(H,`ustar\0`,257,6),writeAscii(H,`00`,263,2),F&&writeAscii(H,F,345,155);let W=0;for(let n=0;n<512;n++)W+=H[n];return writeAscii(H,W.toString(8).padStart(6,`0`),148,6),H[154]=0,H[155]=32,H}function splitPathForUstar(n){if(n.length<=100)return{prefix:``,basename:n};if(n.length>255)throw Error(`createTarball: path too long (${n.length} > 255 chars): ${n}`);for(let a=Math.min(n.length-1,155);a>0;a--)if(n[a]===`/`&&n.length-a-1<=100)return{prefix:n.slice(0,a),basename:n.slice(a+1)};throw Error(`createTarball: cannot split path into ustar prefix+basename (basename slot is 100 chars): ${n}`)}function writeAscii(n,a,S,C){let N=new TextEncoder().encode(a);if(N.length>C)throw Error(`createTarball: field too long (${N.length} > ${C}): "${a}"`);n.set(N,S)}function writeOctal(n,a,S,C){writeAscii(n,a.toString(8).padStart(C,`0`),S,C)}function padTo512(n){let a=n%512;return a===0?0:512-a}function ensureTrailingSlash(n){return n.endsWith(`/`)?n:`${n}/`}function defaultFileMode(n){return n.length>=2&&n[0]===35&&n[1]===33?493:420}function concatChunks(n){let a=0;for(let S of n)a+=S.byteLength;let S=new Uint8Array(a),C=0;for(let a of n)S.set(a,C),C+=a.byteLength;return S}var ZE=__esmMin(()=>{});async function extractTarball(n,a,S={}){let C=n instanceof Uint8Array?n:new Uint8Array(n),N=parseTar(S.gzip??(C.length>=2&&C[0]===31&&C[1]===139)?await gunzip(C):C);mkdirSync(a,{recursive:!0});let F=S.strip??1,I=S.preventEscape??!0,H={files:[],directories:[],symlinks:[],skipped:0};for(let n of N){let C=stripComponents(n.name,F);if(C===null||C===``){H.skipped++;continue}let N=Eo(a,C);if(I&&!isInside(N,a))throw Error(`tar: refusing to extract ${n.name} outside ${a} (resolved=${N})`);if(S.filter&&!S.filter(n,N)){H.skipped++;continue}if(n.type===`directory`){mkdirSync(N,{recursive:!0}),H.directories.push(N);continue}if(n.type===`file`){mkdirSync(Mo(N),{recursive:!0}),writeFileSync(N,n.body);let a=S.chmod?.(n,N)??n.mode&511;if(a>0)try{chmodSync(N,a)}catch{}H.files.push(N);continue}if(n.type===`symlink`){mkdirSync(Mo(N),{recursive:!0});try{symlinkSync(n.linkname,N),H.symlinks.push(N)}catch{writeFileSync(N,n.linkname),H.files.push(N)}continue}H.skipped++}return H}async function gunzip(n){let a=globalThis.DecompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.DecompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function gzip(n){let a=globalThis.CompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.CompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function drainStream(n){let a=[],S=0,C=n.getReader();for(;;){let{value:n,done:N}=await C.read();if(N)break;let F=n instanceof Uint8Array?n:new Uint8Array(n);a.push(F),S+=F.length}let N=new Uint8Array(S),F=0;for(let n of a)N.set(n,F),F+=n.length;return N}function stripComponents(n,a){if(a<=0)return n;let S=n.split(`/`).filter(n=>n!==``);return S.length<=a?null:S.slice(a).join(`/`)}function isInside(n,a){let S=Ao(a,n);return S!==``&&!S.startsWith(`..`)&&!Oo(S)}var QE=__esmMin(()=>{XE(),Os(),Bo()}),$E=__exportAll$3({BLOCK_SIZE:()=>512,TarParseError:()=>TarParseError,createTarball:()=>createTarball,extractTarball:()=>extractTarball,gunzip:()=>gunzip,gzip:()=>gzip,parseTar:()=>parseTar}),eD=__esmMin(()=>{XE(),ZE(),QE()}),tD=__exportAll$3({installPackagesNative:()=>installPackagesNative,parseSpec:()=>parseSpec,pickVersion:()=>pickVersion});async function installPackagesNative(n){if(n.specs.length===0)throw Error(`installPackagesNative: empty specs list`);mkdirSync(n.prefix,{recursive:!0});let a=await loadNpmrc$1(n),S=makeLogger(n.verbose??!1),C=ko(n.prefix,rD),N=readLockfile(C),F;if(n.frozen){if(!N)throw Error(`install: --immutable requires ${rD} at ${n.prefix} — none found. Run \`gjsify install\` (without --immutable) to generate one and commit it.`);let a=describeLockfileDrift(N,n.specs);if(a)throw Error(`install: --immutable but ${C} is stale.\n${a}\nRe-run \`gjsify install\` (without --immutable) to refresh the lockfile.`);S(`install: --immutable, using lockfile (%d package(s))`,Object.keys(N.packages).length),F=lockfileToNodes(N)}else N&&lockfileMatchesRequest(N,n.specs)?(S(`install: using lockfile (%d package(s))`,Object.keys(N.packages).length),F=lockfileToNodes(N)):(S(`install: resolving %d top-level spec(s) → %s`,n.specs.length,n.prefix),F=await resolveDeps(n.specs,a,S,n.overrides,n.skipDeps),n.lockfile&&(writeLockfile(C,n.specs,F),S(`install: wrote %s (%d entries)`,rD,F.length)));return S(`install: downloading %d tarball(s)`,F.length),await downloadAndExtractAll(F,n.prefix,a,S),await linkBins(F,n.prefix,S),S(`install: done`),topLevelResolutions(n.specs,F)}function errMsg(n){return n instanceof Error?n.message:String(n)}function topLevelResolutions(n,a){let S=new Map;for(let n of a)n.installPath===`node_modules/${n.name}`&&S.set(n.name,n);let C=[];for(let a of n){let n=parseSpecName(a),N=S.get(n);N&&C.push({name:N.name,version:N.version})}return C}function parseSpecName(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return n;let S=n.indexOf(`@`,a+1);return S===-1?n:n.slice(0,S)}let a=n.indexOf(`@`);return a===-1?n:n.slice(0,a)}async function resolveDeps(n,a,S,C,N){let applyOverride=(n,a)=>{if(!C)return a;let N=C[n];return typeof N!=`string`||N.length===0||N===a?a:(S(`install: override %s %s → %s`,n,a,N),N)},F=new Map,fetchPkg=n=>{let C=F.get(n);if(C)return C;let N=fetchPackument(n,{npmrc:a,onRetry:({attempt:a,error:C,delayMs:N})=>{S(`packument %s: retry %d after %dms (%s)`,n,a,N,errMsg(C))}});return F.set(n,N),N},I=new Map,H=new Map,W=n.map(parseSpec).map(n=>({from:null,name:n.name,range:applyOverride(n.name,n.range),required:!0}));for(;W.length>0;){let n=W.shift(),a=findVisible(n.from,n.name,I);if(a&&satisfiesRange(a.version,n.range))continue;let C=null;try{let a=await fetchPkg(n.name);if(C=pickVersion(a,n.range),!C){if(!n.required)continue;throw Error(`No version of ${n.name} satisfies ${n.range}`)}let F=a.versions[C];if(!F)throw Error(`Packument for ${n.name} promised ${C} but no entry exists`);let K=decidePlacement(n.from,n.name,C,H),q={name:n.name,version:C,tarballUrl:F.dist.tarball,integrity:F.dist.integrity,installPath:K,dependencies:F.dependencies??{},optionalDependencies:F.optionalDependencies??{},bin:F.bin};if(I.set(K,q),K===`node_modules/${n.name}`&&H.set(n.name,q),S(`resolve: %s@%s ← %s (at %s)`,n.name,C,n.range,K),!N){for(let[n,a]of Object.entries(q.dependencies))W.push({from:K,name:n,range:applyOverride(n,a),required:!0});for(let[n,a]of Object.entries(q.optionalDependencies))W.push({from:K,name:n,range:applyOverride(n,a),required:!1})}}catch(a){if(!n.required){S(`resolve: optional dep %s@%s skipped (%s)`,n.name,n.range,a.message);continue}throw a}}return Array.from(I.values())}function findVisible(n,a,S){let C=[];if(n!==null){C.push(`${n}/node_modules/${a}`);let S=n;for(;;){let n=S.lastIndexOf(`/node_modules/`);if(n<0||(S=S.slice(0,n),C.push(`${S}/node_modules/${a}`),S===``))break}}C.push(`node_modules/${a}`);for(let n of C){let a=S.get(n);if(a)return a}return null}function decidePlacement(n,a,S,C){let N=C.get(a);return!N||N.version===S||n===null?`node_modules/${a}`:`${n}/node_modules/${a}`}function satisfiesRange(n,a){try{return satisfies(n,new KE(a))}catch{return!1}}function readLockfile(n){if(!existsSync(n))return null;try{let a=JSON.parse(readFileSync(n,`utf-8`));return a.lockfileVersion!==iD||!a.packages||typeof a.packages!=`object`?null:a}catch{return null}}function writeLockfile(n,a,S){let C={},N=[...S].sort((n,a)=>n.installPath<a.installPath?-1:+(n.installPath>a.installPath));for(let n of N)C[n.installPath]={version:n.version,resolved:n.tarballUrl,integrity:n.integrity,dependencies:Object.keys(n.dependencies).length>0?n.dependencies:void 0,bin:n.bin};let F={lockfileVersion:iD,requested:[...a],packages:C};writeFileSync(n,JSON.stringify(F,null,2)+`
|
|
789
|
+
`:``)}function detectIndent$1(n){let a=n.match(/^\{\n( +)/);return a?a[1].length:2}__name$1(detectIndent$1,`detectIndent`),je(),Os(),Ux(),Gc();const RE=promisify(execFile),zE={command:`diff`,description:`Compare the per-app Flathub tracking-repo manifest against the local git state and report version / commit drift.`,builder:n=>n.version(!1).option(`version`,{description:"Local version to compare against. Default: `git describe --tags --abbrev=0` in cwd.",type:`string`}).option(`app-id`,{description:"Reverse-DNS app id. Default: `gjsify.flatpak.appId`.",type:`string`}).option(`flathub-repo`,{description:"Flathub tracking-repo (owner/name). Default: `gjsify.flatpak.flathubRepo` or `flathub/<appId>`.",type:`string`}).option(`against`,{description:`Read the Flathub manifest from a local file instead of fetching it. Useful in CI or offline.`,type:`string`}).option(`detail`,{description:`Also print the full Flathub manifest source entry alongside the resolved local version.`,type:`boolean`,default:!1}).option(`source-index`,{description:`Index into modules[0].sources[] to inspect (when the manifest has multiple sources).`,type:`number`}).option(`verbose`,{description:`Echo fetch URL + resolved values.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=(await new Config().forBuild({}).catch(()=>({}))).flatpak??{},C=n.appId??S.appId??readPackageJson(a).name;if(!C)throw Error(`[gjsify flatpak diff] no app id available — pass --app-id or set gjsify.flatpak.appId.`);let N=n.flathubRepo??S.flathubRepo??`flathub/${C}`,F=n.version??await resolveLatestTag(a,n.verbose),I=await loadFlathubSource({appId:C,flathubRepo:N,against:n.against,verbose:n.verbose},n.sourceIndex),H=I?.tag,W=I?.commit;if(Ae.log(`[gjsify flatpak diff] appId=${C}`),Ae.log(`[gjsify flatpak diff] flathubRepo=${N}`),Ae.log(`[gjsify flatpak diff] flathub: tag=${H??`(missing)`} commit=${W??`(missing)`}`),Ae.log(`[gjsify flatpak diff] local: tag=${F??`(none)`}`),n.detail&&I&&(Ae.log(`[gjsify flatpak diff] flathub manifest source:`),Ae.log(JSON.stringify(I,null,2))),!F){Ae.warn("[gjsify flatpak diff] no local git tag found — cut a release (`git tag vX.Y.Z`) or pass --version vX.Y.Z to compare against an explicit value.");return}if(H||(Ae.warn("[gjsify flatpak diff] flathub manifest has no `tag` field on the inspected source."),process.exit(1)),H===F){Ae.log(`✅ in sync (${F})`);return}Ae.log(`❌ drift detected — flathub=${H} vs local=${F}`),Ae.log(` run \`gjsify flatpak sync-flathub --version ${F}\` to update the Flathub manifest.`),process.exit(1)}};async function loadFlathubSource(n,a){let S;if(n.against){if(!existsSync(n.against))throw Error(`[gjsify flatpak diff] --against path ${n.against} does not exist`);S=readFileSync(n.against,`utf-8`)}else S=await fetchFlathubManifest(n.flathubRepo,n.appId,n.verbose);let C;try{C=JSON.parse(S)}catch(n){throw Error(`[gjsify flatpak diff] failed to parse Flathub manifest as JSON: ${n.message}`)}let N=(C.modules??[])[0]?.sources??[];if(N.length===0)return null;let F=a??N.findIndex(n=>n?.type===`git`);return F<0||F>=N.length?null:N[F]??null}async function fetchFlathubManifest(n,a,S){for(let C of[`master`,`main`]){let N=`https://raw.githubusercontent.com/${n}/${C}/${a}.json`;S&&Ae.log(`[gjsify flatpak diff] fetch ${N}`);try{let n=await fetch(N);if(n.ok)return await n.text();S&&Ae.log(`[gjsify flatpak diff] ${C} → HTTP ${n.status}`)}catch(n){S&&Ae.log(`[gjsify flatpak diff] ${C} fetch error: ${n.message}`)}}throw Error(`[gjsify flatpak diff] could not fetch flathub manifest from ${n} on master or main`)}async function resolveLatestTag(n,a){try{let{stdout:S}=await RE(`git`,[`describe`,`--tags`,`--abbrev=0`],{cwd:n}),C=S.trim();return a&&Ae.log(`[gjsify flatpak diff] local latest tag → ${C}`),C||null}catch{return null}}je(),Ux(),Gc(),en(),Bo();const BE=promisify(execFile),VE={command:`release <version>`,description:"Cut a release end-to-end: regenerate Flathub assets, run linters, create + push the git tag, then open the Flathub PR. Each step delegates to the equivalent `gjsify flatpak <sub>` command.",builder:n=>n.version(!1).positional(`version`,{description:"Release tag, e.g. `v0.6.6`.",type:`string`,demandOption:!0}).option(`skip-init`,{description:"Skip the `flatpak init --force` regen step.",type:`boolean`,default:!1}).option(`skip-check`,{description:"Skip the `flatpak check` linter step.",type:`boolean`,default:!1}).option(`skip-tag`,{description:"Skip the `git tag` + `git push --tags` step (use when the tag was already created out-of-band).",type:`boolean`,default:!1}).option(`push-tag`,{description:`Push the created tag after creating it. Default: true.`,type:`boolean`,default:!0}).option(`flathub-repo`,{description:`Flathub tracking-repo override forwarded to sync-flathub.`,type:`string`}).option(`dry-run`,{description:`Print each step that would run without executing any of them.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every sub-command invocation.`,type:`boolean`,default:!1}),handler:async n=>{let a=typeof n.version==`string`?n.version.trim():``;if(!a)throw Error(`[gjsify flatpak release] missing <version> positional`);let S=resolveCliEntry(),C=process.cwd(),N=[];n.skipInit||N.push({name:`init`,args:[S,`flatpak`,`init`,`--force`]}),n.skipCheck||N.push({name:`check`,args:[S,`flatpak`,`check`]});let F=[S,`flatpak`,`sync-flathub`,`--version`,a];if(n.flathubRepo&&F.push(`--flathub-repo`,n.flathubRepo),n.verbose&&F.push(`--verbose`),Ae.log(`[gjsify flatpak release] starting release of ${a}`),n.dryRun){Ae.log(`[gjsify flatpak release] --dry-run set; printing plan only:`);for(let n of N)Ae.log(` · ${n.name}: node ${n.args.join(` `)}`);n.skipTag||Ae.log(` · tag: git tag ${a}${n.pushTag===!1?``:` && git push origin `+a}`),Ae.log(` · sync: node ${F.join(` `)}`);return}for(let a of N)n.verbose&&Ae.log(`[gjsify flatpak release] step ${a.name}: node ${a.args.join(` `)}`),await runNode(a.args,C),Ae.log(`[gjsify flatpak release] ${a.name} ✔`);if(!n.skipTag){n.verbose&&Ae.log(`[gjsify flatpak release] git tag ${a}`);try{await BE(`git`,[`tag`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag ${a} created`)}catch(n){throw Error(`[gjsify flatpak release] git tag failed (${n.message}). If the tag already exists, re-run with --skip-tag.`)}n.pushTag!==!1&&(n.verbose&&Ae.log(`[gjsify flatpak release] git push origin ${a}`),await BE(`git`,[`push`,`origin`,a],{cwd:C}),Ae.log(`[gjsify flatpak release] tag pushed`))}n.verbose&&Ae.log(`[gjsify flatpak release] sync: node ${F.join(` `)}`),await runNode(F,C),Ae.log(`[gjsify flatpak release] ✅ release ${a} complete`)}};function resolveCliEntry(){return Eo(Eo(Mo(fileURLToPath(import.meta.url)),`..`,`..`),`index.js`)}async function runNode(n,a){await new Promise((S,C)=>{let N=spawn(`node`,n,{cwd:a,stdio:`inherit`});N.on(`error`,C),N.on(`exit`,a=>{a===0?S():C(Error(`sub-command exited with code ${a}: node ${n.join(` `)}`))})})}const HE={command:`flatpak <subcommand>`,description:`Flatpak toolchain: init/build/deps/ci/check/sync-flathub/diff/release subcommands for shipping GJS apps and CLIs as Flatpaks.`,builder:n=>n.command(jE.command,jE.description,jE.builder,jE.handler).command(ME.command,ME.description,ME.builder,ME.handler).command(NE.command,NE.description,NE.builder,NE.handler).command(PE.command,PE.description,PE.builder,PE.handler).command(FE.command,FE.description,FE.builder,FE.handler).command(LE.command,LE.description,LE.builder,LE.handler).command(zE.command,zE.description,zE.builder,zE.handler).command(VE.command,VE.description,VE.builder,VE.handler).demandCommand(1).strict()};Os(),Bo();const UE=/^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;function parseSpec$1(n){if(!n)throw Error(`dlx: empty package spec`);if(n.startsWith(`./`)||n.startsWith(`../`)||Oo(n)||existsSync(n))return{kind:`local`,path:Eo(n)};let a=n,S,C=n.lastIndexOf(`@`);if(C>0&&(a=n.slice(0,C),S=n.slice(C+1)),!UE.test(a))throw Error(`dlx: invalid package name "${a}"`);return{kind:`registry`,name:a,version:S,spec:n}}__name$1(parseSpec$1,`parseSpec`),Os(),Bo();function resolveGjsEntry(n,a){let S=ko(n,`package.json`);if(!existsSync(S))throw Error(`dlx: no package.json found at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=C.gjsify?.bin,F=C.gjsify?.main,I=C.main,H,W=null,K=!1;if(a!==null){if(!N||!N[a]){let S=N?Object.keys(N).join(`, `):`(none)`;throw Error(`dlx: package "${C.name??n}" has no GJS bin named "${a}" — known: ${S}`)}H=N[a],W=a}else if(N&&Object.keys(N).length===1){let n=Object.keys(N)[0];H=N[n],W=n}else F?H=F:I&&(H=I,K=!0);if(N&&Object.keys(N).length>1&&a===null){let a=Object.keys(N).join(`, `);throw Error(`dlx: package "${C.name??n}" defines multiple GJS bins — pass one of: ${a}`)}if(!H)throw Error(`dlx: package "${C.name??n}" has no GJS entry — set \`gjsify.main\` (or \`gjsify.bin\`) in its package.json`);let q=Eo(n,H);if(!existsSync(q))throw Error(`dlx: GJS entry not found: ${q}`);return{bundlePath:q,binName:W,fromFallback:K}}Ua(),Os(),Ep(),Bo();function lexCompare(n,a){return n<a?-1:+(n>a)}function createCacheKey(n){let a=[...n.packages].sort(lexCompare),S=Object.entries(n.registries??{}).sort(([n],[a])=>lexCompare(n,a)),C=JSON.stringify([a,S]);return createHash(`sha256`).update(C).digest(`hex`)}function dlxCacheRoot(){let n=process.env.XDG_CACHE_HOME,a=ko(n&&n.length>0?n:ko(homedir(),`.cache`),`gjsify`,`dlx`);return mkdirSync(a,{recursive:!0}),a}function cacheDirFor(n){let a=ko(dlxCacheRoot(),n);return mkdirSync(a,{recursive:!0}),a}function makePrepareDir(n){let a=ko(n,`${Date.now().toString(16)}-${process.pid.toString(16)}`);return mkdirSync(a,{recursive:!0}),a}function getValidCachedPkg(n,a=10080){let S=ko(n,`pkg`),C;try{C=lstatSync(S)}catch(n){if(n.code===`ENOENT`)return;throw n}if(!C.isSymbolicLink())return;let N;try{N=realpathSync(S)}catch{return}return Date.now()-C.mtime.getTime()<=a*6e4?N:void 0}function symlinkSwap(n,a){let S=ko(n,`pkg`),C=ko(n,`pkg.tmp-${Date.now().toString(16)}-${process.pid.toString(16)}`);symlinkSync(a,C,`dir`);try{renameSync(C,S)}catch(n){let a=n.code;if(a===`EBUSY`||a===`EPERM`||a===`EEXIST`){try{rmSync(C)}catch{}return realpathSync(S)}throw n}return realpathSync(S)}function resolveInstalledPkgDir(n,a){return Eo(n,`node_modules`,a)}function parse(n){try{return new SemVer(n)}catch{return null}}function compare(n,a){let S=n instanceof SemVer?n:new SemVer(n),C=a instanceof SemVer?a:new SemVer(a);return S.compare(C)}function satisfies(n,a){let S=a instanceof KE?a:new KE(a),C=n instanceof SemVer?n:parse(String(n));return C?S.test(C):!1}function maxSatisfying(n,a){let S=a instanceof KE?a:new KE(a),C=null;for(let a of n){let n=parse(a);!n||!S.test(n)||(C===null||n.compare(C)>0)&&(C=n)}return C?C.version:null}function testComparator(n,a){if(n.semver===null)return!0;let S=a.compare(n.semver);switch(n.operator){case``:case`=`:return S===0;case`<`:return S<0;case`<=`:return S<=0;case`>`:return S>0;case`>=`:return S>=0}}function formatComparator(n){return n.semver===null?`*`:`${n.operator}${n.semver.version}`}function parseRangePart(n){let a=n.trim();if(a===``||a===`*`||a.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=a.match(/^\s*(\S+)\s+-\s+(\S+)\s*$/);if(S)return hyphenRange(S[1],S[2]);let C=a.replace(/(<=|>=|<|>|=)\s+(?=\S)/g,`$1`).split(/\s+/),N=[];for(let n of C)N.push(...parseSimple(n));return N}function parseSimple(n){if(n===`*`||n===``||n.toLowerCase()===`latest`)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];if(n.startsWith(`^`))return caretRange(n.slice(1));if(n.startsWith(`~`))return tildeRange(n.slice(1).replace(/^>/,``));let a=n.match(/^(<=|>=|<|>|=)\s*(.+)$/);if(a){let n=a[1];return primitiveRange(n,a[2])}return partialRange(n)}function parsePartial(n){let a=n.trim().replace(/^v/,``);if(a===``||a===`*`)return{major:null,minor:null,patch:null,pre:``,build:``};let S=``,C=``,N=a,F=N.indexOf(`+`);F>=0&&(C=N.slice(F+1),N=N.slice(0,F));let I=N.indexOf(`-`);I>=0&&(S=N.slice(I+1),N=N.slice(0,I));let H=N.split(`.`),xr=a=>{if(a===void 0||a===``||a===`x`||a===`X`||a===`*`)return null;if(!/^\d+$/.test(a))throw TypeError(`Invalid partial version: ${n}`);return Number(a)};return{major:xr(H[0]),minor:xr(H[1]),patch:xr(H[2]),pre:S,build:C}}function partialToVersion(n){return`${n.major??0}.${n.minor??0}.${n.patch??0}${n.pre?`-${n.pre}`:``}${n.build?`+${n.build}`:``}`}function partialRange(n){let a=parsePartial(n);return a.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:a.minor===null?[{operator:`>=`,semver:new SemVer(`${a.major}.0.0`)},{operator:`<`,semver:new SemVer(`${a.major+1}.0.0`)}]:a.patch===null?[{operator:`>=`,semver:new SemVer(`${a.major}.${a.minor}.0`)},{operator:`<`,semver:new SemVer(`${a.major}.${a.minor+1}.0`)}]:[{operator:`=`,semver:new SemVer(partialToVersion(a))}]}function caretRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C;return C=a.major>0||a.minor===null?`${a.major+1}.0.0`:a.minor>0||a.patch===null?`0.${a.minor+1}.0`:`0.0.${a.patch+1}`,[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function tildeRange(n){let a=parsePartial(n);if(a.major===null)return[{operator:`>=`,semver:new SemVer(`0.0.0`)}];let S=`${a.major}.${a.minor??0}.${a.patch??0}${a.pre?`-${a.pre}`:``}`,C=a.minor===null?`${a.major+1}.0.0`:`${a.major}.${a.minor+1}.0`;return[{operator:`>=`,semver:new SemVer(S)},{operator:`<`,semver:new SemVer(C)}]}function primitiveRange(n,a){let S=parsePartial(a);return S.major===null?[{operator:`>=`,semver:new SemVer(`0.0.0`)}]:n===`=`||n===``?partialRange(a):n===`>`?S.minor===null?[{operator:`>=`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`>`,semver:new SemVer(partialToVersion(S))}]:n===`<`?S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor}.0`)}]:[{operator:`<`,semver:new SemVer(partialToVersion(S))}]:n===`>=`?[{operator:`>=`,semver:new SemVer(partialToVersion(S))}]:S.minor===null?[{operator:`<`,semver:new SemVer(`${S.major+1}.0.0`)}]:S.patch===null?[{operator:`<`,semver:new SemVer(`${S.major}.${S.minor+1}.0`)}]:[{operator:`<=`,semver:new SemVer(partialToVersion(S))}]}function hyphenRange(n,a){let S=parsePartial(n),C=parsePartial(a),N=S.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:{operator:`>=`,semver:new SemVer(`${S.major}.${S.minor??0}.${S.patch??0}${S.pre?`-${S.pre}`:``}`)},F;return F=C.major===null?{operator:`>=`,semver:new SemVer(`0.0.0`)}:C.minor===null?{operator:`<`,semver:new SemVer(`${C.major+1}.0.0`)}:C.patch===null?{operator:`<`,semver:new SemVer(`${C.major}.${C.minor+1}.0`)}:{operator:`<=`,semver:new SemVer(`${C.major}.${C.minor}.${C.patch}${C.pre?`-${C.pre}`:``}`)},[N,F]}var WE,GE,SemVer,KE,qE=__esmMin(()=>{WE=/^(0|[1-9]\d*)$/,GE=/^(\d+)\.(\d+)\.(\d+)(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/,SemVer=class{major;minor;patch;prerelease;build;version;constructor(n){let a=String(n).trim().replace(/^v/,``),S=GE.exec(a);if(!S)throw TypeError(`Invalid Version: ${n}`);this.major=Number(S[1]),this.minor=Number(S[2]),this.patch=Number(S[3]),this.prerelease=S[4]?S[4].split(`.`).map(n=>WE.test(n)?Number(n):n):[],this.build=S[5]?S[5].split(`.`):[],this.version=`${this.major}.${this.minor}.${this.patch}`+(this.prerelease.length?`-${this.prerelease.join(`.`)}`:``)+(this.build.length?`+${this.build.join(`.`)}`:``)}compare(n){return this.major===n.major?this.minor===n.minor?this.patch===n.patch?this.comparePre(n):this.patch<n.patch?-1:1:this.minor<n.minor?-1:1:this.major<n.major?-1:1}comparePre(n){let a=this.prerelease,S=n.prerelease;if(a.length===0&&S.length===0)return 0;if(a.length===0)return 1;if(S.length===0)return-1;for(let n=0;;n++){let C=a[n],N=S[n];if(C===void 0&&N===void 0)return 0;if(N===void 0)return 1;if(C===void 0)return-1;if(C===N)continue;let F=typeof C==`number`,I=typeof N==`number`;return F&&!I?-1:!F&&I?1:C<N?-1:1}}toString(){return this.version}},KE=class Range{raw;set;constructor(n){if(n instanceof Range){this.raw=n.raw,this.set=n.set;return}this.raw=String(n).trim();let a=this.raw.split(/\s*\|\|\s*/),S=[];for(let n of a){let a=parseRangePart(n);if(a.length===0)throw TypeError(`Invalid range: ${this.raw}`);S.push(a)}if(S.length===0)throw TypeError(`Invalid range: ${this.raw}`);this.set=S}test(n){let a=n instanceof SemVer?n:parse(String(n));if(!a)return!1;for(let n of this.set)if(n.every(n=>testComparator(n,a))){if(a.prerelease.length>0&&!n.some(n=>n.semver!==null&&n.semver.prerelease.length>0&&n.semver.major===a.major&&n.semver.minor===a.minor&&n.semver.patch===a.patch))continue;return!0}return!1}format(){return this.set.map(n=>n.map(formatComparator).join(` `)).join(` || `)}toString(){return this.format()}}});function assertPackument(n,a){if(!a||typeof a!=`object`)throw TypeError(`registry: ${n} packument is not an object`);let S=a;if(typeof S.name!=`string`)throw TypeError(`registry: ${n} packument missing string name`);if(!S.versions||typeof S.versions!=`object`)throw TypeError(`registry: ${n} packument missing versions map`)}function registryFor(n,a){if(a&&n.startsWith(`@`)){let S=n.slice(0,n.indexOf(`/`)),C=a.scopes[S];if(C)return ensureTrailingSlash$1(C)}return a?.registry?ensureTrailingSlash$1(a.registry):JE}function packumentUrl(n,a){let S=ensureTrailingSlash$1(a);if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a<0)throw TypeError(`Invalid scoped package name: ${n}`);let C=n.slice(0,a),N=n.slice(a+1);return`${S}${encodeURIComponent(C)}/${encodeURIComponent(N)}`}return`${S}${encodeURIComponent(n)}`}async function fetchPackument(n,a={}){let S=packumentUrl(n,a.registry??registryFor(n,a.npmrc)),C=buildHeaders(S,a);C.accept??=`application/vnd.npm.install-v1+json`;let N=await fetchWithRetry(S,{headers:C,signal:a.signal},a);if(!N.ok)throw N.status===404||N.status===406?new PackageNotFoundError(n,S):Error(`registry GET ${S} -> ${N.status} ${N.statusText}`);let F=await N.json();return assertPackument(n,F),F}async function fetchTarball(n,a={}){let S=buildHeaders(n,a);S.accept??=`application/octet-stream`;let C=await fetchWithRetry(n,{headers:S,signal:a.signal},a);if(!C.ok)throw Error(`tarball GET ${n} -> ${C.status} ${C.statusText}`);let N=new Uint8Array(await C.arrayBuffer());if(a.integrity&&!await verifyIntegrity(N,a.integrity))throw new IntegrityError(n,a.integrity);return N}async function fetchWithRetry(n,a,S){let C=S.fetch??globalThis.fetch;if(!C)throw Error(`@gjsify/npm-registry: globalThis.fetch is missing`);let N=Math.max(0,S.retries??3),F=Math.max(0,S.retryDelayMs??250),I=0,H;for(;;){if(a.signal?.aborted)throw signalAbortError(a.signal);try{let S=await C(n,a);if(S.ok||!isRetryableStatus(S.status)||I>=N)return S;try{await S.arrayBuffer()}catch{}H=Error(`HTTP ${S.status} ${S.statusText}`)}catch(n){if(!isRetryableError(n)||I>=N)throw n;H=n}let W=Math.min(F*2**I,8e3);S.onRetry?.({attempt:I+1,error:H,delayMs:W}),await delay(W,a.signal),I++}}function isRetryableStatus(n){return n===408||n===425||n===429||n===500||n===502||n===503||n===504||n===521||n===522||n===524||n===525}function isRetryableError(n){if(n&&typeof n==`object`&&`name`in n&&n.name===`AbortError`)return!1;if(n instanceof TypeError)return!0;if(n&&typeof n==`object`&&`name`in n){let a=n.name;if(a===`FetchError`)return!0;if(a===`AbortError`)return!1}let a=n?.cause;if(a&&typeof a==`object`&&`code`in a){let n=a.code;if(typeof n==`string`)return n===`ECONNRESET`||n===`ECONNREFUSED`||n===`ENETUNREACH`||n===`ENOTFOUND`||n===`ETIMEDOUT`||n===`EAI_AGAIN`||n===`UND_ERR_SOCKET`||n===`UND_ERR_CONNECT_TIMEOUT`}return!1}function delay(n,a){return n<=0?Promise.resolve():new Promise((S,C)=>{let N=setTimeout(()=>{a?.removeEventListener?.(`abort`,onAbort),S()},n),onAbort=()=>{clearTimeout(N),C(signalAbortError(a))};if(a?.aborted){clearTimeout(N),C(signalAbortError(a));return}a?.addEventListener?.(`abort`,onAbort,{once:!0})})}function signalAbortError(n){let a=n&&`reason`in n?n.reason:void 0;if(a instanceof Error)return a;let S=Error(`Aborted`);return S.name=`AbortError`,S}async function verifyIntegrity(n,a){let S=a.trim().split(/\s+/);for(let a of S){let S=a.indexOf(`-`);if(S<0)continue;let C=a.slice(0,S).toLowerCase(),N=a.slice(S+1),F=globalThis.crypto?.subtle;if(!F)throw Error(`@gjsify/npm-registry: globalThis.crypto.subtle is missing`);let I=subriToWebCryptoAlgo(C);if(!I)continue;let H=await F.digest(I,dataAsArrayBuffer(n));if(bytesToBase64(new Uint8Array(H))===N)return!0}return!1}function subriToWebCryptoAlgo(n){switch(n){case`sha1`:return`SHA-1`;case`sha256`:return`SHA-256`;case`sha384`:return`SHA-384`;case`sha512`:return`SHA-512`;default:return null}}function dataAsArrayBuffer(n){if(n.byteOffset===0&&n.byteLength===n.buffer.byteLength)return n.buffer;let a=new Uint8Array(n.byteLength);return a.set(n),a.buffer}function bytesToBase64(n){let a=``;for(let S=0;S<n.length;S++)a+=String.fromCharCode(n[S]);return btoa(a)}function parseNpmrc(n){let a={registry:JE,scopes:{},authTokens:{},basicAuth:{}},S=n.split(/\r?\n/),C={};for(let n of S){let S=n.replace(/^\s+|\s+$/g,``);if(!S||S.startsWith(`#`)||S.startsWith(`;`))continue;let N=S.indexOf(`=`);if(N<0)continue;let F=S.slice(0,N).trim(),I=expandEnv(stripQuotes(S.slice(N+1).trim()));if(F===`registry`){a.registry=ensureTrailingSlash$1(I);continue}let H=F.match(/^(@[^:]+):registry$/);if(H){a.scopes[H[1]]=ensureTrailingSlash$1(I);continue}let W=F.match(/^\/\/(.+):_authToken$/);if(W){a.authTokens[normalizeAuthHost(W[1])]=I;continue}let K=F.match(/^\/\/(.+):username$/);if(K){(C[normalizeAuthHost(K[1])]??={}).user=I;continue}let q=F.match(/^\/\/(.+):_password$/);if(q){let n=base64Decode(I);(C[normalizeAuthHost(q[1])]??={}).pass=n;continue}}for(let[n,S]of Object.entries(C))S.user&&S.pass!==void 0&&(a.basicAuth[n]={username:S.user,password:S.pass});return a}function buildHeaders(n,a){let S={"user-agent":`gjsify-install/0.3.7`,"accept-encoding":`identity`};if(a.npmrc){let C=resolveAuthForUrl(n,a.npmrc);C&&(S.authorization=C)}if(a.headers)for(let[n,C]of Object.entries(a.headers))S[n.toLowerCase()]=C;return S}function resolveAuthForUrl(n,a){let S=pathPrefixes(new URL(n));for(let n of S){let S=a.authTokens[n];if(S)return`Bearer ${S}`;let C=a.basicAuth[n];if(C)return`Basic ${btoa(`${C.username}:${C.password}`)}`}return null}function pathPrefixes(n){let a=n.pathname.split(`/`).filter(Boolean),S=[];for(let C=a.length;C>=0;C--){let N=a.slice(0,C).join(`/`);S.push(N?`//${n.host}/${N}`:`//${n.host}`)}return S}function normalizeAuthHost(n){return`//${n.replace(/\/+$/,``)}`}function ensureTrailingSlash$1(n){return n.endsWith(`/`)?n:n+`/`}function stripQuotes(n){return n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`)?n.slice(1,-1):n}function expandEnv(n){return n.replace(/\$\{([A-Z0-9_]+)\}/gi,(n,a)=>globalThis.process?.env?.[a]??``)}function base64Decode(n){return atob(n)}var JE,PackageNotFoundError,IntegrityError,YE=__esmMin(()=>{JE=`https://registry.npmjs.org/`,__name$1(ensureTrailingSlash$1,`ensureTrailingSlash`),PackageNotFoundError=class extends Error{name;url;constructor(n,a){super(`Package not found in registry: ${n} (${a})`),this.name=n,this.url=a,this.name=`PackageNotFoundError`}},IntegrityError=class extends Error{url;integrity;constructor(n,a){super(`Tarball integrity mismatch for ${n} (expected ${a})`),this.url=n,this.integrity=a,this.name=`IntegrityError`}}});function parseTar(n){let a=[],S=null,C=null,N=null,F=0;for(;F+512<=n.length;){let I=n.subarray(F,F+512);if(allZeros(I)){let a=n.subarray(F+512,F+2*512);if(a.length===512&&allZeros(a))break;F+=512;continue}if(!validateChecksum(I))throw new TarParseError(`Bad header checksum at offset ${F} — file is not a valid tar archive`);let H=readString(I,0,100),W=parseOctal(I,100,8),K=parseOctal(I,124,12),q=parseOctal(I,136,12),Y=String.fromCharCode(I[156]||0),X=readString(I,157,100),te=readString(I,257,6),ne=readString(I,345,155),re=readString(I,265,32),ie=readString(I,297,32);F+=512;let ae=n.subarray(F,F+K);if(F+=alignToBlock(K),Y===`x`){S=parsePaxRecords(ae);continue}if(Y===`g`)continue;if(Y===`L`){C=bytesToString(ae).replace(/\0+$/,``);continue}if(Y===`K`){N=bytesToString(ae).replace(/\0+$/,``);continue}let oe=H;te===`ustar`&&ne!==``&&(oe=`${ne}/${H}`),C!==null&&(oe=C,C=null);let Z=X;if(N!==null&&(Z=N,N=null),S!==null){let C=S.get(`path`);C!==void 0&&(oe=C);let N=S.get(`linkpath`);N!==void 0&&(Z=N);let I=S.get(`size`);if(I!==void 0){let C=Number(I);if(Number.isFinite(C)){let N=F-alignToBlock(K),I=n.subarray(N,N+C);F=N+alignToBlock(C),S=null,a.push(buildEntry(oe,Z,Y,W,q,re,ie,I));continue}}S=null}a.push(buildEntry(oe,Z,Y,W,q,re,ie,ae))}return a}function buildEntry(n,a,S,C,N,F,I,H){return{name:n,linkname:a,type:typeflagToType(S,n),mode:C,mtime:N,body:H,uname:F,gname:I}}function typeflagToType(n,a){switch(n){case`0`:case`\0`:case``:return a.endsWith(`/`)?`directory`:`file`;case`1`:return`hardlink`;case`2`:return`symlink`;case`5`:return`directory`;case`x`:return`pax-header`;case`g`:return`pax-global`;case`L`:return`gnu-longname`;case`K`:return`gnu-longlink`;default:return`unknown`}}function parsePaxRecords(n){let a=new Map,S=0;for(;S<n.length;){let C=S;for(;C<n.length&&n[C]!==32;)C++;if(C>=n.length)break;let N=bytesToString(n.subarray(S,C)),F=Number(N);if(!Number.isFinite(F)||F<=0)break;let I=S+F;if(I>n.length)break;let H=bytesToString(n.subarray(C+1,I-1)),W=H.indexOf(`=`);if(W>0){let n=H.slice(0,W),S=H.slice(W+1);a.set(n,S)}S=I}return a}function readString(n,a,S){let C=a,N=a+S;for(;C<N&&n[C]!==0;)C++;return bytesToString(n.subarray(a,C))}function bytesToString(n){return new TextDecoder(`utf-8`,{fatal:!1}).decode(n)}function parseOctal(n,a,S){if(S>0&&n[a]&128){let C=n[a]&127;for(let N=1;N<S;N++)C=C*256+n[a+N];return C}let C=``;for(let N=0;N<S;N++){let S=n[a+N];S===0||S===32||(C+=String.fromCharCode(S))}return C===``?0:parseInt(C,8)}function alignToBlock(n){return Math.ceil(n/512)*512}function allZeros(n){for(let a=0;a<n.length;a++)if(n[a]!==0)return!1;return!0}function validateChecksum(n){let a=parseOctal(n,148,8),S=0,C=0;for(let a=0;a<512;a++){let N=a>=148&&a<156?32:n[a];S+=N,C+=N>127?N-256:N}return a===S||a===C}var TarParseError,XE=__esmMin(()=>{TarParseError=class extends Error{constructor(n){super(n),this.name=`TarParseError`}}});function createTarball(n){let a=[];for(let S of n){if(`directory`in S&&S.directory===!0){a.push(buildHeader(ensureTrailingSlash(S.name),0,`5`,S.mode??493,S.mtime??0));continue}let n=S,C=typeof n.body==`string`?new TextEncoder().encode(n.body):n.body,N=n.mode??defaultFileMode(C);a.push(buildHeader(n.name,C.byteLength,`0`,N,n.mtime??0)),a.push(C);let F=padTo512(C.byteLength);F>0&&a.push(new Uint8Array(F))}return a.push(new Uint8Array(512*2)),concatChunks(a)}function buildHeader(n,a,S,C,N){let{prefix:F,basename:I}=splitPathForUstar(n),H=new Uint8Array(512);writeAscii(H,I,0,100),writeOctal(H,C&4095,100,7),H[107]=0,writeOctal(H,0,108,7),H[115]=0,writeOctal(H,0,116,7),H[123]=0,writeOctal(H,a,124,11),H[135]=0,writeOctal(H,N,136,11),H[147]=0;for(let n=148;n<156;n++)H[n]=32;H[156]=S.charCodeAt(0),writeAscii(H,`ustar\0`,257,6),writeAscii(H,`00`,263,2),F&&writeAscii(H,F,345,155);let W=0;for(let n=0;n<512;n++)W+=H[n];return writeAscii(H,W.toString(8).padStart(6,`0`),148,6),H[154]=0,H[155]=32,H}function splitPathForUstar(n){if(n.length<=100)return{prefix:``,basename:n};if(n.length>255)throw Error(`createTarball: path too long (${n.length} > 255 chars): ${n}`);for(let a=Math.min(n.length-1,155);a>0;a--)if(n[a]===`/`&&n.length-a-1<=100)return{prefix:n.slice(0,a),basename:n.slice(a+1)};throw Error(`createTarball: cannot split path into ustar prefix+basename (basename slot is 100 chars): ${n}`)}function writeAscii(n,a,S,C){let N=new TextEncoder().encode(a);if(N.length>C)throw Error(`createTarball: field too long (${N.length} > ${C}): "${a}"`);n.set(N,S)}function writeOctal(n,a,S,C){writeAscii(n,a.toString(8).padStart(C,`0`),S,C)}function padTo512(n){let a=n%512;return a===0?0:512-a}function ensureTrailingSlash(n){return n.endsWith(`/`)?n:`${n}/`}function defaultFileMode(n){return n.length>=2&&n[0]===35&&n[1]===33?493:420}function concatChunks(n){let a=0;for(let S of n)a+=S.byteLength;let S=new Uint8Array(a),C=0;for(let a of n)S.set(a,C),C+=a.byteLength;return S}var ZE=__esmMin(()=>{});async function extractTarball(n,a,S={}){let C=n instanceof Uint8Array?n:new Uint8Array(n),N=parseTar(S.gzip??(C.length>=2&&C[0]===31&&C[1]===139)?await gunzip(C):C);mkdirSync(a,{recursive:!0});let F=S.strip??1,I=S.preventEscape??!0,H={files:[],directories:[],symlinks:[],skipped:0};for(let n of N){let C=stripComponents(n.name,F);if(C===null||C===``){H.skipped++;continue}let N=Eo(a,C);if(I&&!isInside(N,a))throw Error(`tar: refusing to extract ${n.name} outside ${a} (resolved=${N})`);if(S.filter&&!S.filter(n,N)){H.skipped++;continue}if(n.type===`directory`){mkdirSync(N,{recursive:!0}),H.directories.push(N);continue}if(n.type===`file`){mkdirSync(Mo(N),{recursive:!0}),writeFileSync(N,n.body);let a=S.chmod?.(n,N)??n.mode&511;if(a>0)try{chmodSync(N,a)}catch{}H.files.push(N);continue}if(n.type===`symlink`){mkdirSync(Mo(N),{recursive:!0});try{symlinkSync(n.linkname,N),H.symlinks.push(N)}catch{writeFileSync(N,n.linkname),H.files.push(N)}continue}H.skipped++}return H}async function gunzip(n){let a=globalThis.DecompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.DecompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function gzip(n){let a=globalThis.CompressionStream;if(typeof a!=`function`)throw Error(`@gjsify/tar: globalThis.CompressionStream is not available — import '@gjsify/compression-streams/register' on GJS to register it`);return drainStream(new Blob([new Uint8Array(n)]).stream().pipeThrough(new a(`gzip`)))}async function drainStream(n){let a=[],S=0,C=n.getReader();for(;;){let{value:n,done:N}=await C.read();if(N)break;let F=n instanceof Uint8Array?n:new Uint8Array(n);a.push(F),S+=F.length}let N=new Uint8Array(S),F=0;for(let n of a)N.set(n,F),F+=n.length;return N}function stripComponents(n,a){if(a<=0)return n;let S=n.split(`/`).filter(n=>n!==``);return S.length<=a?null:S.slice(a).join(`/`)}function isInside(n,a){let S=Ao(a,n);return S!==``&&!S.startsWith(`..`)&&!Oo(S)}var QE=__esmMin(()=>{XE(),Os(),Bo()}),$E=__exportAll$3({BLOCK_SIZE:()=>512,TarParseError:()=>TarParseError,createTarball:()=>createTarball,extractTarball:()=>extractTarball,gunzip:()=>gunzip,gzip:()=>gzip,parseTar:()=>parseTar}),eD=__esmMin(()=>{XE(),ZE(),QE()}),tD=__exportAll$3({installPackagesNative:()=>installPackagesNative,parseSpec:()=>parseSpec,pickVersion:()=>pickVersion});async function installPackagesNative(n){if(n.specs.length===0)throw Error(`installPackagesNative: empty specs list`);mkdirSync(n.prefix,{recursive:!0});let a=await loadNpmrc$1(n),S=makeLogger(n.verbose??!1),C=ko(n.prefix,rD),N=readLockfile(C),F;if(n.frozen){if(!N)throw Error(`install: --immutable requires ${rD} at ${n.prefix} — none found. Run \`gjsify install\` (without --immutable) to generate one and commit it.`);let a=describeLockfileDrift(N,n.specs);if(a)throw Error(`install: --immutable but ${C} is stale.\n${a}\nRe-run \`gjsify install\` (without --immutable) to refresh the lockfile.`);S(`install: --immutable, using lockfile (%d package(s))`,Object.keys(N.packages).length),F=lockfileToNodes(N)}else N&&lockfileMatchesRequest(N,n.specs)?(S(`install: using lockfile (%d package(s))`,Object.keys(N.packages).length),F=lockfileToNodes(N)):(S(`install: resolving %d top-level spec(s) → %s`,n.specs.length,n.prefix),F=await resolveDeps(n.specs,a,S,n.overrides,n.skipDeps),n.lockfile&&(writeLockfile(C,n.specs,F),S(`install: wrote %s (%d entries)`,rD,F.length)));return S(`install: downloading %d tarball(s)`,F.length),await downloadAndExtractAll(F,n.prefix,a,S),await linkBins(F,n.prefix,S),S(`install: done`),topLevelResolutions(n.specs,F)}function errMsg(n){return n instanceof Error?n.message:String(n)}function topLevelResolutions(n,a){let S=new Map;for(let n of a)n.installPath===`node_modules/${n.name}`&&S.set(n.name,n);let C=[];for(let a of n){let n=parseSpecName(a),N=S.get(n);N&&C.push({name:N.name,version:N.version})}return C}function parseSpecName(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return n;let S=n.indexOf(`@`,a+1);return S===-1?n:n.slice(0,S)}let a=n.indexOf(`@`);return a===-1?n:n.slice(0,a)}async function resolveDeps(n,a,S,C,N){let applyOverride=(n,a)=>{if(!C)return a;let N=C[n];return typeof N!=`string`||N.length===0||N===a?a:(S(`install: override %s %s → %s`,n,a,N),N)},F=new Map,fetchPkg=n=>{let C=F.get(n);if(C)return C;let N=fetchPackument(n,{npmrc:a,onRetry:({attempt:a,error:C,delayMs:N})=>{S(`packument %s: retry %d after %dms (%s)`,n,a,N,errMsg(C))}});return F.set(n,N),N},I=new Map,H=new Map,W=n.map(parseSpec).map(n=>({from:null,name:n.name,range:applyOverride(n.name,n.range),required:!0}));for(;W.length>0;){let n=W.shift(),a=findVisible(n.from,n.name,I);if(a&&satisfiesRange(a.version,n.range))continue;let C=null;try{let a=await fetchPkg(n.name);if(C=pickVersion(a,n.range),!C){if(!n.required)continue;throw Error(`No version of ${n.name} satisfies ${n.range}`)}let F=a.versions[C];if(!F)throw Error(`Packument for ${n.name} promised ${C} but no entry exists`);let K=decidePlacement(n.from,n.name,C,H),q={name:n.name,version:C,tarballUrl:F.dist.tarball,integrity:F.dist.integrity,installPath:K,dependencies:F.dependencies??{},optionalDependencies:F.optionalDependencies??{},bin:F.bin};if(I.set(K,q),K===`node_modules/${n.name}`&&H.set(n.name,q),S(`resolve: %s@%s ← %s (at %s)`,n.name,C,n.range,K),!N){for(let[n,a]of Object.entries(q.dependencies))W.push({from:K,name:n,range:applyOverride(n,a),required:!0});for(let[n,a]of Object.entries(q.optionalDependencies))W.push({from:K,name:n,range:applyOverride(n,a),required:!1})}}catch(a){if(!n.required){S(`resolve: optional dep %s@%s skipped (%s)`,n.name,n.range,a.message);continue}throw a}}return Array.from(I.values())}function findVisible(n,a,S){let C=[];if(n!==null){C.push(`${n}/node_modules/${a}`);let S=n;for(;;){let n=S.lastIndexOf(`/node_modules/`);if(n<0||(S=S.slice(0,n),C.push(`${S}/node_modules/${a}`),S===``))break}}C.push(`node_modules/${a}`);for(let n of C){let a=S.get(n);if(a)return a}return null}function decidePlacement(n,a,S,C){let N=C.get(a);return!N||N.version===S||n===null?`node_modules/${a}`:`${n}/node_modules/${a}`}function satisfiesRange(n,a){try{return satisfies(n,new KE(a))}catch{return!1}}function readLockfile(n){if(!existsSync(n))return null;try{let a=JSON.parse(readFileSync(n,`utf-8`));return a.lockfileVersion!==iD||!a.packages||typeof a.packages!=`object`?null:a}catch{return null}}function writeLockfile(n,a,S){let C={},N=[...S].sort((n,a)=>n.installPath<a.installPath?-1:+(n.installPath>a.installPath));for(let n of N)C[n.installPath]={version:n.version,resolved:n.tarballUrl,integrity:n.integrity,dependencies:Object.keys(n.dependencies).length>0?n.dependencies:void 0,bin:n.bin};let F={lockfileVersion:iD,requested:[...a],packages:C};writeFileSync(n,JSON.stringify(F,null,2)+`
|
|
790
790
|
`)}function lockfileToNodes(n){return Object.entries(n.packages).map(([n,a])=>({name:nameFromInstallPath(n),version:a.version,tarballUrl:a.resolved,integrity:a.integrity,installPath:n,dependencies:a.dependencies??{},optionalDependencies:{},bin:a.bin}))}function nameFromInstallPath(n){let a=n.lastIndexOf(`/node_modules/`);return a<0?n.replace(/^node_modules\//,``):n.slice(a+14)}function lockfileMatchesRequest(n,a){if(n.requested.length!==a.length)return!1;let S=[...n.requested].sort(),C=[...a].sort();return S.every((n,a)=>n===C[a])}function describeLockfileDrift(n,a){let S=new Set(n.requested),C=new Set(a),N=[],F=[];for(let n of C)S.has(n)||N.push(n);for(let n of S)C.has(n)||F.push(n);if(N.length===0&&F.length===0)return null;let I=[];return N.length>0&&I.push(` + ${N.sort().join(`
|
|
791
791
|
+ `)}`),F.length>0&&I.push(` - ${F.sort().join(`
|
|
792
792
|
- `)}`),I.join(`
|
|
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:`latest`}:{name:n.slice(0,S),range:n.slice(S+1)||`latest`}}let a=n.indexOf(`@`);return a<0?{name:n,range:`latest`}:{name:n.slice(0,a),range:n.slice(a+1)||`latest`}}function pickVersion(n,a){if(n[`dist-tags`][a])return n[`dist-tags`][a];let S;try{S=new KE(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(nD,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=ko(a,n.installPath);assertNodeModulesDest(N,n),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 assertNodeModulesDest(n,a){if(!n.split(Lo).includes(`node_modules`))throw Error(`gjsify install: refusing to extract ${a.name}@${a.version} into ${n} — target is not inside a node_modules/ directory. This would overwrite working-tree files. A workspace package likely leaked into the fetch queue (it must be symlinked, not fetched).`);let S;try{S=realpathSync(n)}catch{return}if(!S.split(Lo).includes(`node_modules`))throw Error(`gjsify install: refusing to extract ${a.name}@${a.version} — ${n} resolves to ${S}, which is outside any node_modules/ directory (likely a symlink to a workspace source tree). Extracting here would delete working-tree source files.`)}function depth(n){return n.split(`/node_modules/`).length}async function linkBins(n,a,S){let C=ko(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=ko(a,S.installPath,I);if(!existsSync(n))continue;try{chmodSync(n,493)}catch{}let H=ko(C,F);rmSync(H,{force:!0});let W=Ao(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??JE,scopes:{},authTokens:{},basicAuth:{}};for(let C of[ko(a,`.npmrc`),ko(n.prefix,`.npmrc`)])if(existsSync(C))try{let n=parseNpmrc(readFileSync(C,`utf-8`));S={...S,...n,scopes:{...S.scopes,...n.scopes}}}catch(n){Ae.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 nD,rD,iD,aD=__esmMin(()=>{je(),Os(),Bo(),Ep(),qE(),YE(),eD(),nD=Number(process.env.GJSIFY_INSTALL_CONCURRENCY??`8`)||8,rD=`gjsify-lock.json`,iD=2,__name$1(normalizeBin$1,`normalizeBin`),__name$1(loadNpmrc$1,`loadNpmrc`)});Ux(),Os(),Bo();const oD=process.env.GJSIFY_INSTALL_BACKEND??`native`;async function installPackages(n){if(oD===`npm`)return await installViaNpm(n),{installed:[]};let{installPackagesNative:a}=await Promise.resolve().then(()=>(aD(),tD));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(ko(n,`package.json`),JSON.stringify({name:`gjsify-dlx-cache`,version:`0.0.0`,private:!0},null,2)),C&&writeFileSync(ko(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))})})}je(),Os(),Bo();const sD={command:`dlx <spec> [binOrArg] [extraArgs..]`,description:`Run the GJS bundle of an npm-published package without installing it locally.`,builder:n=>n.parserConfiguration({"populate--":!0}).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. To pass a flag here (e.g. `--help`) use the `--` separator: `gjsify dlx <pkg> -- --help`.",type:`string`}).positional(`extraArgs`,{description:"Extra args forwarded to `gjs -m <bundle>`. Use `--` before flags to bypass gjsify-level parsing (`gjsify dlx <pkg> -- --help --verbose`).",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}),F=(n[`--`]??[]).map(n=>String(n)),I=[...n.extraArgs??[],...F],{binName:H,extraArgs:W}=splitBinAndArgs(C,n.binOrArg,I),K=resolveGjsEntry(C,H);K.fromFallback&&Ae.warn(`[gjsify dlx] package "${N??a.kind}" has no \`gjsify\` field — falling back to package.json#main. Add \`gjsify.main\` to silence.`),await runGjsBundle(K.bundlePath,W)}};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=ko(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]}}Os(),Ep(),Bo();function defaultGlobalLayout(){let n=process.env.GJSIFY_GLOBAL_PREFIX,a=process.env.GJSIFY_GLOBAL_BIN_DIR,S=homedir(),C=process.env.XDG_DATA_HOME??ko(S,`.local`,`share`);return{prefix:n??ko(C,`gjsify`,`global`),binDir:a??ko(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=ko(a.prefix,`node_modules`,N),F=ko(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=ko(n,F);if(!existsSync(I))continue;try{chmodSync(I,493)}catch{}let H=ko(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=Eo(n);return a.split(S).some(n=>n&&Eo(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)}je(),Os(),Bo(),Ux();const cD={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}).option(`backend`,{description:"Install backend. `native` (default) routes through `@gjsify/{semver,npm-registry,tar}` — no Node/npm at runtime. `npm` shells out to `npm install` as an escape hatch for cases the native backend does not yet model (Yarn PnP repos, lifecycle scripts). Overrides `GJSIFY_INSTALL_BACKEND` if both are set.",type:`string`,choices:[`native`,`npm`]}),handler:async n=>{if(n.immutable&&(n.packages&&n.packages.length>0&&(Ae.error(`gjsify install --immutable does not accept package arguments. Remove the package names or drop --immutable.`),process.exit(1)),n.global&&(Ae.error(`gjsify install --immutable is incompatible with --global.`),process.exit(1))),n.global){(!n.packages||n.packages.length===0)&&(Ae.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]&&Ae.warn(`gjsify install --global ignores --${a}: global installs do not modify a project package.json.`);await installGlobalAndLink(n.packages,{verbose:n.verbose});return}if((n.backend??process.env.GJSIFY_INSTALL_BACKEND??`native`)===`npm`){await projectInstallViaNpm(n),await runPostInstallChecks();return}await projectInstallNative(n),await runPostInstallChecks()}};function isWorkspaceRoot(n){let a=readPackageJson$3(ko(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=ko(a,`package.json`),C=[`.pnp.cjs`,`.pnp.loader.mjs`].filter(n=>existsSync(ko(a,n)));if(C.length>0)throw Error(`gjsify install uses the node_modules linker and cannot run in a Yarn PnP project (found ${C.join(`, `)} in ${a}).\n\n• If this project uses \`gjsify install\` to manage dependencies, these PnP files are stale residue from an earlier \`yarn install\` — remove them and re-run:\n rm -f .pnp.cjs .pnp.loader.mjs && rm -rf .yarn/cache .yarn/unplugged\n gjsify install\n\n• If instead you want Yarn to manage dependencies, set \`nodeLinker: node-modules\` in .yarnrc.yml and run \`yarn install\` (not \`gjsify install\`).`);if((!n.packages||n.packages.length===0)&&isWorkspaceRoot(a)){await workspaceInstall(a,n);return}let N,F=readPackageJson$3(S),I=F?projectSpecsFromPackageJson(F):[];if(n.packages&&n.packages.length>0){let a=new Set(n.packages.map(n=>parseSpec$2(n).name));N=[...I.filter(n=>!a.has(parseSpec$2(n).name)),...n.packages]}else{if(!F)throw Error(`gjsify install: no package.json in ${a}`);if(N=I,N.length===0){Ae.log(`gjsify install: no dependencies declared in package.json — nothing to do.`);return}}mkdirSync(a,{recursive:!0});let H=await installPackages({prefix:a,specs:N,verbose:n.verbose,lockfile:!n.immutable,frozen:n.immutable});if(n.packages&&n.packages.length>0&&F){let C=depKindFromArgs(n);for(let a of n.packages){let{name:n,range:S}=parseSpec$2(a),N=H.installed.find(a=>a.name===n);addDependencyEntry(F,n,S??(N?defaultRangeFromVersion(N.version):`latest`),C)}writePackageJson$1(S,F),n.immutable||syncLockfileRequested(a,projectSpecsFromPackageJson(F))}}function syncLockfileRequested(n,a){let S=ko(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)+`
|
|
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:`latest`}:{name:n.slice(0,S),range:n.slice(S+1)||`latest`}}let a=n.indexOf(`@`);return a<0?{name:n,range:`latest`}:{name:n.slice(0,a),range:n.slice(a+1)||`latest`}}function pickVersion(n,a){if(n[`dist-tags`][a])return n[`dist-tags`][a];let S;try{S=new KE(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(nD,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=ko(a,n.installPath);assertNodeModulesDest(N,n),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 assertNodeModulesDest(n,a){if(!n.split(Lo).includes(`node_modules`))throw Error(`gjsify install: refusing to extract ${a.name}@${a.version} into ${n} — target is not inside a node_modules/ directory. This would overwrite working-tree files. A workspace package likely leaked into the fetch queue (it must be symlinked, not fetched).`);let S;try{S=realpathSync(n)}catch{return}if(!S.split(Lo).includes(`node_modules`))throw Error(`gjsify install: refusing to extract ${a.name}@${a.version} — ${n} resolves to ${S}, which is outside any node_modules/ directory (likely a symlink to a workspace source tree). Extracting here would delete working-tree source files.`)}function depth(n){return n.split(`/node_modules/`).length}async function linkBins(n,a,S){let C=ko(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=ko(a,S.installPath,I);if(!existsSync(n))continue;try{chmodSync(n,493)}catch{}let H=ko(C,F);rmSync(H,{force:!0});let W=Ao(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??JE,scopes:{},authTokens:{},basicAuth:{}};for(let C of[ko(a,`.npmrc`),ko(n.prefix,`.npmrc`)])if(existsSync(C))try{let n=parseNpmrc(readFileSync(C,`utf-8`));S={...S,...n,scopes:{...S.scopes,...n.scopes}}}catch(n){Ae.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 nD,rD,iD,aD=__esmMin(()=>{je(),Os(),Bo(),Ep(),qE(),YE(),eD(),nD=Number(process.env.GJSIFY_INSTALL_CONCURRENCY??`8`)||8,rD=`gjsify-lock.json`,iD=2,__name$1(normalizeBin$1,`normalizeBin`),__name$1(loadNpmrc$1,`loadNpmrc`)});Ux(),Os(),Bo();const oD=process.env.GJSIFY_INSTALL_BACKEND??`native`;async function installPackages(n){if(oD===`npm`)return await installViaNpm(n),{installed:[]};let{installPackagesNative:a}=await Promise.resolve().then(()=>(aD(),tD));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(ko(n,`package.json`),JSON.stringify({name:`gjsify-dlx-cache`,version:`0.0.0`,private:!0},null,2)),C&&writeFileSync(ko(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))})})}je(),Os(),Bo();const sD={command:`dlx <spec> [binOrArg] [extraArgs..]`,description:`Run the GJS bundle of an npm-published package without installing it locally.`,builder:n=>n.parserConfiguration({"populate--":!0}).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. To pass a flag here (e.g. `--help`) use the `--` separator: `gjsify dlx <pkg> -- --help`.",type:`string`}).positional(`extraArgs`,{description:"Extra args forwarded to `gjs -m <bundle>`. Use `--` before flags to bypass gjsify-level parsing (`gjsify dlx <pkg> -- --help --verbose`).",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}),F=(n[`--`]??[]).map(n=>String(n)),I=[...n.extraArgs??[],...F],{binName:H,extraArgs:W}=splitBinAndArgs(C,n.binOrArg,I),K=resolveGjsEntry(C,H);K.fromFallback&&Ae.warn(`[gjsify dlx] package "${N??a.kind}" has no \`gjsify\` field — falling back to package.json#main. Add \`gjsify.main\` to silence.`),await runGjsBundle(K.bundlePath,W)}};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=ko(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]}}Os(),Ep(),Bo();function defaultGlobalLayout(){let n=process.env.GJSIFY_GLOBAL_PREFIX,a=process.env.GJSIFY_GLOBAL_BIN_DIR,S=homedir(),C=process.env.XDG_DATA_HOME??ko(S,`.local`,`share`);return{prefix:n??ko(C,`gjsify`,`global`),binDir:a??ko(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=ko(a.prefix,`node_modules`,N),F=ko(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=ko(n,F);if(!existsSync(I))continue;try{chmodSync(I,493)}catch{}let H=ko(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=Eo(n);return a.split(S).some(n=>n&&Eo(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)}je(),Os(),Bo(),Ux();const cD={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}).option(`backend`,{description:"Install backend. `native` (default) routes through `@gjsify/{semver,npm-registry,tar}` — no Node/npm at runtime. `npm` shells out to `npm install` as an escape hatch for cases the native backend does not yet model (Yarn PnP repos, lifecycle scripts). Overrides `GJSIFY_INSTALL_BACKEND` if both are set.",type:`string`,choices:[`native`,`npm`]}),handler:async n=>{if(n.immutable&&(n.packages&&n.packages.length>0&&(Ae.error(`gjsify install --immutable does not accept package arguments. Remove the package names or drop --immutable.`),process.exit(1)),n.global&&(Ae.error(`gjsify install --immutable is incompatible with --global.`),process.exit(1))),n.global){(!n.packages||n.packages.length===0)&&(Ae.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]&&Ae.warn(`gjsify install --global ignores --${a}: global installs do not modify a project package.json.`);await installGlobalAndLink(n.packages,{verbose:n.verbose});return}if((n.backend??process.env.GJSIFY_INSTALL_BACKEND??`native`)===`npm`){await projectInstallViaNpm(n),await runPostInstallChecks();return}await projectInstallNative(n),await runPostInstallChecks()}};function isWorkspaceRoot(n){let a=readPackageJson$3(ko(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=ko(a,`package.json`),C=[`.pnp.cjs`,`.pnp.loader.mjs`].filter(n=>existsSync(ko(a,n)));if(C.length>0)throw Error(`gjsify install uses the node_modules linker and cannot run in a Yarn PnP project (found ${C.join(`, `)} in ${a}).\n\n• If this project uses \`gjsify install\` to manage dependencies, these PnP files are stale residue from an earlier \`yarn install\` — remove them and re-run:\n rm -f .pnp.cjs .pnp.loader.mjs && rm -rf .yarn/cache .yarn/unplugged\n gjsify install\n\n• If instead you want Yarn to manage dependencies, set \`nodeLinker: node-modules\` in .yarnrc.yml and run \`yarn install\` (not \`gjsify install\`).`);if((!n.packages||n.packages.length===0)&&isWorkspaceRoot(a)){await workspaceInstall(a,n);return}let N,F=readPackageJson$3(S),I=F?projectSpecsFromPackageJson(F):[];if(n.packages&&n.packages.length>0){let a=new Set(n.packages.map(n=>parseSpec$2(n).name));N=[...I.filter(n=>!a.has(parseSpec$2(n).name)),...n.packages]}else{if(!F)throw Error(`gjsify install: no package.json in ${a}`);if(N=I,N.length===0){Ae.log(`gjsify install: no dependencies declared in package.json — nothing to do.`);return}}mkdirSync(a,{recursive:!0});let H=await installPackages({prefix:a,specs:N,verbose:n.verbose,lockfile:!n.immutable,frozen:n.immutable});if(n.packages&&n.packages.length>0&&F){let C=depKindFromArgs(n);for(let a of n.packages){let{name:n,range:S}=parseSpec$2(a),N=H.installed.find(a=>a.name===n);addDependencyEntry(F,n,S??(N?defaultRangeFromVersion(N.version):`latest`),C)}writePackageJson(S,F),n.immutable||syncLockfileRequested(a,projectSpecsFromPackageJson(F))}}function syncLockfileRequested(n,a){let S=ko(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`)continue;let I=C.get(a);if(I&&!/^(link|file|portal|git\+|https?):/.test(S)){F.push({fromWorkspaceName:n.name,depName:a,targetLocation:I.location});continue}if(S.startsWith(`workspace:`))throw Error(`gjsify install: ${n.name} declares "${a}: ${S}" but no workspace with that name exists`);/^(link|file|portal|git\+|https?):/.test(S)||N.add(`${a}@${S}`)}}}Ae.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&&Ae.log(`gjsify install: no external deps to fetch`);for(let n of F){let a=C.get(n.fromWorkspaceName);if(!a)continue;let S=ko(a.location,`node_modules`,n.depName);mkdirSync(Mo(S),{recursive:!0});try{rmSync(S,{recursive:!0,force:!0})}catch{}symlinkSync(Ao(Mo(S),n.targetLocation),S)}F.length>0&&Ae.log(`gjsify install: wired ${F.length} workspace symlink(s)`);let W=ko(n,`node_modules`),K=0;for(let a of S){if(a.location===n||!a.name)continue;let S=ko(W,a.name),C=!1;try{lstatSync(S),C=!0}catch{}C||(mkdirSync(Mo(S),{recursive:!0}),symlinkSync(Ao(Mo(S),a.location),S),K++)}K>0&&Ae.log(`gjsify install: hoisted ${K} workspace(s) to root node_modules/`);let q=ko(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=ko(q,a);try{rmSync(N,{force:!0})}catch{}writeFileSync(N,buildBinShim(n.location,S,C,Y),{mode:493}),chmodSync(N,493),X++}}}X>0&&Ae.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`){Ae.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?ko(n,a):null,F=S?ko(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=>{Ae.error(n.message),process.exit(1)})}async function installGlobalAndLink(n,a){let S=defaultGlobalLayout();mkdirSync(S.prefix,{recursive:!0}),Ae.log(`gjsify install --global → ${S.prefix}`),Ae.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)Ae.warn("\nNo bins declared (neither `gjsify.bin` nor `bin` in package.json) — nothing was symlinked.");else{Ae.log(`\nLinked ${C.length} bin(s):`);for(let n of C)Ae.log(` • ${n.link} → ${n.target}`)}C.length>0&&!binDirOnPath(S.binDir)&&Ae.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(){Ae.log(`
|
|
795
795
|
--- gjsify post-install checks ---`);let n=runMinimalChecks().filter(n=>!n.found&&n.severity===`required`);if(n.length>0){Ae.warn(`Missing required system dependencies:
|
|
796
796
|
`);for(let a of n)Ae.warn(` ✗ ${a.name}`);let a=buildInstallCommand(detectPackageManager$2(),n);a&&Ae.warn(`\nInstall with:\n ${a}`)}else Ae.log(`System dependencies OK.`);let a=detectNativePackages(process.cwd());if(a.length>0){Ae.log(`\nDetected ${a.length} @gjsify/* package(s) with native prebuilds:`);for(let n of a)Ae.log(` • ${n.name}`);Ae.log("\nUse `gjsify run <bundle>` to launch with LD_LIBRARY_PATH/GI_TYPELIB_PATH set.")}}je(),Ux(),Ep();const lD={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||(Ae.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||(Ae.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){Ae.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){Ae.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&&Ae.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&&Ae.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(`
|
|
@@ -802,9 +802,10 @@ Enter OTP: `);let n=await readLineFromStdin();n?pe=await doPut({...le,"npm-otp":
|
|
|
802
802
|
`).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)}async function readLineFromStdin(){return new Promise(n=>{let a=``,onData=S=>{a+=typeof S==`string`?S:S.toString(`utf-8`);let C=a.indexOf(`
|
|
803
803
|
`);C>=0&&(cleanup(),n(a.slice(0,C).trim()))},onEnd=()=>{cleanup(),n(a.trim())},onError=()=>{cleanup(),n(``)},cleanup=()=>{process.stdin.removeListener(`data`,onData),process.stdin.removeListener(`end`,onEnd),process.stdin.removeListener(`error`,onError),typeof process.stdin.unref==`function`&&process.stdin.unref?.()};process.stdin.setEncoding(`utf-8`),process.stdin.isPaused()&&process.stdin.resume(),process.stdin.once(`data`,onData),process.stdin.once(`end`,onEnd),process.stdin.once(`error`,onError)})}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`)}je(),Os(),Bo(),en(),YE();const mD=`@gjsify/cli`,hD={command:`self-update`,description:`Update the installed ${mD} 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=ko(ko(a.prefix,`node_modules`,mD),`package.json`),C=readCurrentVersion(),N=existsSync(S);Ae.log(`Current ${mD}: v${C??`(unknown)`}`),N||Ae.warn(`\nWarning: no @gjsify/cli install found under ${a.prefix}.\nself-update only manages installs created by install.mjs or \`gjsify install -g\`.\nIf you installed via \`npm install -g\`, remove that and use:\n curl -fsSL https://github.com/gjsify/gjsify/releases/latest/download/install.mjs -o /tmp/g.mjs && gjs -m /tmp/g.mjs && rm /tmp/g.mjs`),Ae.log(`Fetching dist-tags for ${mD}@${n.tag} ...`);let F;try{F=await fetchPackument(mD)}catch(n){let a=n instanceof Error?n.message:String(n);Ae.error(`Failed to fetch packument: ${a}`),process.exit(1);return}let I=resolveTag(F,n.tag);if(!I){Ae.error(`Unknown dist-tag '${n.tag}' on ${mD}. Known tags: ${Object.keys(F[`dist-tags`]??{}).join(`, `)||`(none)`}`),process.exit(1);return}if(Ae.log(`Latest matching --tag ${n.tag}: v${I}`),C===I&&!n.force){Ae.log(`Already up to date (v${I}).`),n.check||Ae.log(`Run with --force to reinstall anyway.`);return}if(n.check){Ae.log(C?`Update available: v${C} → v${I}`:`Install required: → v${I}`),process.exit(1);return}Ae.log(`Installing ${mD}@${I} ...`);try{await installPackages({prefix:a.prefix,specs:[`${mD}@${I}`],verbose:!1,skipDeps:!0})}catch(n){let a=n instanceof Error?n.message:String(n);Ae.error(`self-update: install failed — ${a}`),Ae.error("Re-run `gjsify self-update` to retry."),process.exit(1);return}let H=linkGlobalBins([mD],a);if(H.length===0)Ae.warn("self-update: install completed but no bins were linked — package.json may be missing a `bin` field.");else for(let n of H)Ae.log(` • ${n.link} → ${n.target}`);Ae.log(`\nUpdated ${mD} to v${I}.`)}};function readCurrentVersion(){try{let n=process.env.GJSIFY_CLI_PACKAGE_JSON;if(n){let a=JSON.parse(readFileSync(n,`utf-8`));return a.name===mD&&typeof a.version==`string`?a.version:null}let a=Mo(Eo(fileURLToPath(import.meta.url)));for(let n=0;n<8&&a!==Mo(a);n++){let n=ko(a,`package.json`);if(existsSync(n)){let a=JSON.parse(readFileSync(n,`utf-8`));if(a.name===mD&&typeof a.version==`string`)return a.version}a=Mo(a)}}catch{}return null}function resolveTag(n,a){let S=n[`dist-tags`]??{};return S[a]?S[a]:n.versions&&typeof n.versions==`object`&&n.versions[a]?a:null}je(),Os(),Bo();function loadInstallerTemplate(){return readFileSync(new URL(`../templates/install.mjs.tmpl`,import.meta.url),`utf-8`)}const gD={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=Eo(process.cwd(),n.output);if(existsSync(a)&&!n.force){Ae.error(`${n.output} already exists. Re-run with --force to overwrite.`),process.exit(1);return}let S=Eo(process.cwd(),`package.json`),C=null;if(existsSync(S))try{C=JSON.parse(readFileSync(S,`utf-8`))}catch{}let N=n.target??C?.name;if(!N){Ae.error("No target package: pass `gjsify generate-installer <pkg>` or run inside a directory with a package.json."),process.exit(1);return}let F=n[`bin-name`]??pickDefaultBinName(C,N),I=n[`bootstrap-url`]??`https://github.com/gjsify/gjsify/releases/latest/download/cli.gjs.mjs`;writeFileSync(a,loadInstallerTemplate().replace(/const DEFAULT_TARGET = '[^']+';/,`const DEFAULT_TARGET = ${JSON.stringify(N)};`).replace(/const DEFAULT_BIN_NAME = '[^']+';/,`const DEFAULT_BIN_NAME = ${JSON.stringify(F)};`).replace(/const DEFAULT_BOOTSTRAP_URL =\s*'[^']+';/,`const DEFAULT_BOOTSTRAP_URL = ${JSON.stringify(I)};`),{mode:493}),Ae.log(`Wrote ${n.output} (target=${N}, bin=${F}).`),Ae.log(``),Ae.log(`Install one-liner for your README:`),Ae.log(` curl -fsSL https://github.com/<you>/<repo>/raw/main/${n.output} -o /tmp/i.mjs \\`),Ae.log(` && gjs -m /tmp/i.mjs && rm /tmp/i.mjs`)}};function pickDefaultBinName(n,a){let S=n?.gjsify?.bin;if(S&&typeof S==`object`){let n=Object.keys(S)[0];if(n)return n}let C=n?.bin;if(C&&typeof C==`object`){let n=Object.keys(C)[0];if(n)return n}return a.startsWith(`@`)?a.slice(a.indexOf(`/`)+1):a}je(),Os(),Bo();const _D={command:`uninstall <packages..>`,description:"Uninstall a previously installed package. Currently only `--global` mode is supported.",builder:n=>n.positional(`packages`,{description:`Package(s) to uninstall (npm names, optionally with version).`,type:`string`,array:!0,demandOption:!0}).option(`global`,{description:`Uninstall from the user-global XDG location (the install -g target).`,type:`boolean`,alias:`g`,default:!1}).option(`dry-run`,{description:`Show what would be removed without touching the filesystem.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Verbose logging.`,type:`boolean`,default:!1}),handler:n=>{if(!n.global){Ae.error("gjsify uninstall currently only supports --global. For project-local removal, edit package.json + re-run `gjsify install`."),process.exit(1);return}let a=defaultGlobalLayout(),S=n[`dry-run`]??!1,C=n.verbose??!1,N=`gjsify uninstall${S?` (dry-run)`:``} --global`;Ae.log(`${N} ← ${a.prefix}`),Ae.log(`${` `.repeat(N.length)} bins ← ${a.binDir}`);let F=!1;for(let N of n.packages){let n=specToPackageName(N),I=ko(a.prefix,`node_modules`,n);if(!existsSync(I)){Ae.warn(` ✗ ${n} — not installed at ${I}`);continue}let H=findBinShimsForPackage(a.binDir,I,C);if(S){Ae.log(` • would remove ${I}`);for(let n of H)Ae.log(` • would remove ${n}`)}else{rmSync(I,{recursive:!0,force:!0}),Ae.log(` • removed ${I}`);for(let n of H)unlinkSync(n),Ae.log(` • removed ${n}`)}F=!0}F||(Ae.error(`
|
|
804
804
|
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=ko(n,F);try{if(!statSync(N).isFile())continue;let n=readFileSync(N,`utf-8`);if(!n.startsWith(`#!/bin/sh`))continue;let S=n.split(`
|
|
805
|
-
`).find(n=>/^exec (?:gjs -m )?'/.test(n));if(!S)continue;let F=S.match(/'([^']+)'/);if(!F)continue;let I=F[1];(I.startsWith(a+`/`)||I===a)&&C.push(N)}catch(n){S&&Ae.warn(` ? could not inspect ${N}: ${n.message}`)}}return C}je(),Os(),Bo();const vD={command:`format [paths..]`,description:`Format JS/TS source files via oxfmt (CSS/JSON formatting is not supported).`,builder:n=>n.positional(`paths`,{description:"Files or directories to format. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Modify files in place (default: report drift without writing).`,type:`boolean`,default:!1}).option(`check`,{description:`Report formatting drift without modifying files; exit non-zero if any file is unformatted. Useful for CI.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to an .oxfmtrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`init`,{description:`Write recommended .oxlintrc.json + .oxfmtrc.json into cwd (skips existing files unless --force).`,type:`boolean`,default:!1}).option(`force`,{description:`Overwrite existing .oxlintrc.json / .oxfmtrc.json with --init.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo the resolved oxfmt launcher + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd();if(n.init){handleInit({cwd:a,force:n.force??!1});return}let S=n.paths?.length?n.paths:[`.`],C=[];n.check?C.push(`--check`):n.write?C.push(`--write`):C.push(`--list-different`);let N=n.configPath??findOxfmtConfig(a)??void 0;N&&C.push(`--config`,Eo(N)),C.push(...S);try{let S=await runOxfmt(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};function handleInit({cwd:n,force:a}){let writeOne=(S,C)=>{let N=Eo(n,S);if(existsSync(N)&&!a){Ae.log(`[gjsify format] ${S} exists at ${N} — pass --force to overwrite.`);return}writeFileSync(N,C,`utf-8`),Ae.log(`[gjsify format] wrote ${N}`)};writeOne(`.oxlintrc.json`,loadOxlintTemplate()),writeOne(`.oxfmtrc.json`,loadOxfmtTemplate()),Ae.log("[gjsify format] Run `gjsify format --write .` to apply the formatter to the project.")}Bo();const yD={command:`lint [paths..]`,description:`Run oxlint diagnostics (spawned via its Node launcher to support JS plugins).`,builder:n=>n.positional(`paths`,{description:"Files or directories to lint. Default: `.`",type:`string`,array:!0}).option(`fix`,{description:`Apply safe lint fixes in place.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to an .oxlintrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved oxlint launcher + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=[];n.fix&&C.push(`--fix`);let N=n.configPath??findOxlintConfig(a)??void 0;N&&C.push(`--config`,Eo(N)),C.push(...S);try{let S=await runOxlint(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};Bo();const bD={command:`fix [paths..]`,description:`Run oxfmt --write then oxlint --fix — format + safe lint fixes in one pass.`,builder:n=>n.positional(`paths`,{description:"Files or directories to fix. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Apply fixes in place (default: true). Pass --no-write to report only.`,type:`boolean`,default:!0}).option(`config-path`,{description:`Path to an .oxlintrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved oxc launchers + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=n.verbose??!1,N=n.write!==!1;try{let F=[N?`--write`:`--list-different`],I=n.configPath??findOxfmtConfig(a)??void 0;I&&F.push(`--config`,Eo(I)),F.push(...S);let H=await runOxfmt(F,{cwd:a,verbose:C}),W=[];N&&W.push(`--fix`);let K=n.configPath??findOxlintConfig(a)??void 0;K&&W.push(`--config`,Eo(K)),W.push(...S);let q=await runOxlint(W,{cwd:a,verbose:C});process.exitCode=H||q}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};gs();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})}je(),Os(),Bo(),Ep(),qE(),YE();const xD={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=Eo(n.cwd??process.cwd()),S=ko(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){Ae.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`;Ae.log(`[gjsify upgrade] checking ${F.length} dependencies against ${I.registry}…`);let W=await resolveCandidates(F,I,n.verbose??!1,H);if(W.length===0){Ae.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`&&Ae.log(`[gjsify upgrade] -y / --yes: selecting all`),K=W),K.length===0){Ae.log(`[gjsify upgrade] nothing selected; package.json unchanged.`);return}if(n.dryRun){Ae.log(`[gjsify upgrade] --dry-run: would update ${K.length} dependencies (no write).`);return}writePackageJson(S,C,N,K),Ae.log(`✏️ updated ${K.length} dependencies in ${S}. Run \`gjsify install\` to apply.`)}},SD=[`dependencies`,`devDependencies`,`optionalDependencies`,`peerDependencies`];function collectExternalDeps(n,a){let S=[];for(let C of SD){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&&Ae.warn(` ${H.name}: no dist-tags.latest, skipping`);continue}if(!H.currentVersion){S&&Ae.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&&Ae.warn(` ${H.name}: fetch failed (${n.message})`)}}}return await Promise.all(Array.from({length:8},()=>worker())),N.sort((n,a)=>n.name.localeCompare(a.name)),N}function classifyDiff(n,a){let S=parse(n),C=parse(a);return!S||!C?`none`:S.major===C.major?S.minor===C.minor?S.patch===C.patch?(S.prerelease??[]).join(`.`)===(C.prerelease??[]).join(`.`)?`none`:`prerelease`:C.patch>S.patch?`patch`:`none`:C.minor>S.minor?`minor`:`none`:C.major>S.major?`major`:`none`}const CD={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 CD.red;case`minor`:return CD.yellow;case`patch`:return CD.green;case`prerelease`:return CD.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)+CD.bold+`name`.padEnd(a)+` `+`current`.padEnd(S)+` `+`latest`.padEnd(C)+` kind`+CD.reset;Ae.log(F),Ae.log(` `.repeat(N)+CD.dim+`─`.repeat(a+S+C+12)+CD.reset);for(let F=0;F<n.length;F++){let I=n[F],H=`${F+1}.`.padEnd(N),W=colorForDiff(I.diff);Ae.log(H+I.name.padEnd(a)+` `+CD.dim+I.currentRange.padEnd(S)+CD.reset+` `+W+I.latestVersion.padEnd(C)+CD.reset+` `+W+I.diff+CD.reset)}}async function promptSelection(n){if(!process.stdin.isTTY)return Ae.log(`[gjsify upgrade] non-TTY stdin: pass --latest / --minor / --patch (or --yes for interactive-all) to upgrade non-interactively.`),[];let a=createInterface({input:process.stdin,output:process.stdout});try{Ae.log(`
|
|
806
|
-
|
|
805
|
+
`).find(n=>/^exec (?:gjs -m )?'/.test(n));if(!S)continue;let F=S.match(/'([^']+)'/);if(!F)continue;let I=F[1];(I.startsWith(a+`/`)||I===a)&&C.push(N)}catch(n){S&&Ae.warn(` ? could not inspect ${N}: ${n.message}`)}}return C}je(),Os(),Bo();const vD={command:`format [paths..]`,description:`Format JS/TS source files via oxfmt (CSS/JSON formatting is not supported).`,builder:n=>n.positional(`paths`,{description:"Files or directories to format. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Modify files in place (default: report drift without writing).`,type:`boolean`,default:!1}).option(`check`,{description:`Report formatting drift without modifying files; exit non-zero if any file is unformatted. Useful for CI.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to an .oxfmtrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`init`,{description:`Write recommended .oxlintrc.json + .oxfmtrc.json into cwd (skips existing files unless --force).`,type:`boolean`,default:!1}).option(`force`,{description:`Overwrite existing .oxlintrc.json / .oxfmtrc.json with --init.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo the resolved oxfmt launcher + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd();if(n.init){handleInit({cwd:a,force:n.force??!1});return}let S=n.paths?.length?n.paths:[`.`],C=[];n.check?C.push(`--check`):n.write?C.push(`--write`):C.push(`--list-different`);let N=n.configPath??findOxfmtConfig(a)??void 0;N&&C.push(`--config`,Eo(N)),C.push(...S);try{let S=await runOxfmt(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};function handleInit({cwd:n,force:a}){let writeOne=(S,C)=>{let N=Eo(n,S);if(existsSync(N)&&!a){Ae.log(`[gjsify format] ${S} exists at ${N} — pass --force to overwrite.`);return}writeFileSync(N,C,`utf-8`),Ae.log(`[gjsify format] wrote ${N}`)};writeOne(`.oxlintrc.json`,loadOxlintTemplate()),writeOne(`.oxfmtrc.json`,loadOxfmtTemplate()),Ae.log("[gjsify format] Run `gjsify format --write .` to apply the formatter to the project.")}Bo();const yD={command:`lint [paths..]`,description:`Run oxlint diagnostics (spawned via its Node launcher to support JS plugins).`,builder:n=>n.positional(`paths`,{description:"Files or directories to lint. Default: `.`",type:`string`,array:!0}).option(`fix`,{description:`Apply safe lint fixes in place.`,type:`boolean`,default:!1}).option(`config-path`,{description:`Path to an .oxlintrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved oxlint launcher + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=[];n.fix&&C.push(`--fix`);let N=n.configPath??findOxlintConfig(a)??void 0;N&&C.push(`--config`,Eo(N)),C.push(...S);try{let S=await runOxlint(C,{cwd:a,verbose:n.verbose});process.exitCode=S}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};Bo();const bD={command:`fix [paths..]`,description:`Run oxfmt --write then oxlint --fix — format + safe lint fixes in one pass.`,builder:n=>n.positional(`paths`,{description:"Files or directories to fix. Default: `.`",type:`string`,array:!0}).option(`write`,{description:`Apply fixes in place (default: true). Pass --no-write to report only.`,type:`boolean`,default:!0}).option(`config-path`,{description:`Path to an .oxlintrc.json. Default: walks up from cwd to find one.`,type:`string`,normalize:!0}).option(`verbose`,{description:`Echo the resolved oxc launchers + args before spawning.`,type:`boolean`,default:!1}),handler:async n=>{let a=process.cwd(),S=n.paths?.length?n.paths:[`.`],C=n.verbose??!1,N=n.write!==!1;try{let F=[N?`--write`:`--list-different`],I=n.configPath??findOxfmtConfig(a)??void 0;I&&F.push(`--config`,Eo(I)),F.push(...S);let H=await runOxfmt(F,{cwd:a,verbose:C}),W=[];N&&W.push(`--fix`);let K=n.configPath??findOxlintConfig(a)??void 0;K&&W.push(`--config`,Eo(K)),W.push(...S);let q=await runOxlint(W,{cwd:a,verbose:C});process.exitCode=H||q}catch(n){if(n instanceof OxcNotFoundError){printOxcNotFound(n),process.exitCode=1;return}throw n}}};gs();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})}qE();function semverGt(n,a){try{return compare(n,a)===1}catch{return!1}}function groupByDependency(n){let a=new Map;for(let S of n){let n=a.get(S.name);n||(n={name:S.name,occurrences:[],declaredRanges:new Set,dominantRange:S.currentRange,highestVersion:S.currentVersion},a.set(S.name,n)),n.occurrences.push(S),n.declaredRanges.add(S.currentRange),S.currentVersion&&(!n.highestVersion||semverGt(S.currentVersion,n.highestVersion))&&(n.highestVersion=S.currentVersion)}for(let n of a.values()){let a=new Map;for(let S of n.occurrences)a.set(S.currentRange,(a.get(S.currentRange)??0)+1);let S=n.occurrences[0].currentRange,C=-1,N=null;for(let[n,F]of a.entries()){let a=parse(n.replace(/^[\^~>=<]+/,``))?.version??null;(F>C||F===C&&a&&N&&semverGt(a,N)||F===C&&n<S)&&(S=n,C=F,N=a)}n.dominantRange=S}return[...a.values()].sort((n,a)=>n.name.localeCompare(a.name))}function isInconsistent(n){return n.declaredRanges.size>1}function findInconsistencies(n){return n.filter(isInconsistent)}je(),Os(),Bo(),Ep(),qE(),YE();const xD={command:`upgrade`,description:"Workspace-aware dependency upgrades. Walks every package.json in the monorepo, groups by dep, flags inconsistencies. `--latest` / `--minor` / `--patch` for bulk-mode, `--align` for offline consistency-only mode, `--check` for CI drift detection.",builder:n=>n.option(`latest`,{description:`Non-interactive: bump every dependency to its latest version (allows major).`,type:`boolean`,default:!1}).option(`minor`,{description:`Non-interactive: bump every dependency to the latest within the same major (semver-minor + semver-patch).`,type:`boolean`,default:!1}).option(`patch`,{description:`Non-interactive: bump every dependency to the latest within the same minor (semver-patch only).`,type:`boolean`,default:!1}).option(`filter`,{description:`Only consider deps whose name matches this substring (case-insensitive). Repeatable; comma-separated values are split.`,type:`string`}).option(`workspace`,{alias:`p`,description:`Restrict to a subset of workspaces. Patterns are matched against the workspace package name AND its directory path (substring + glob). Repeatable; comma-separated values are split.`,type:`string`}).option(`exclude-workspace`,{description:`Skip workspaces matching this pattern (glob-shaped; matched against workspace package name AND directory path). Repeatable; comma-separated values are split. Use for workspaces with intentional dependency drift — e.g. integration tests pinned to specific upstream versions.`,type:`string`}).option(`align`,{description:`Offline consistency mode: find deps declared at multiple ranges across the workspace and align them to the highest. No registry calls.`,type:`boolean`,default:!1}).option(`check`,{description:"CI gate: exit non-zero when any dep is declared inconsistently across workspaces. Implies offline (no registry calls). Pairs with `--align` as the fix.",type:`boolean`,default:!1}).option(`dry-run`,{description:`Print the upgrade plan without writing package.json files.`,type:`boolean`,default:!1}).option(`cwd`,{description:`Project directory. Default: process.cwd(). When inside a workspace, walks up to the monorepo root.`,type:`string`}).option(`yes`,{alias:`y`,description:`Interactive mode: select all without prompting.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Print extra resolution details.`,type:`boolean`,default:!1}),handler:async n=>{let a=discoverContext(Eo(n.cwd??process.cwd())),S=applyWorkspaceFilter(a.workspaces,n.workspace,n.excludeWorkspace);if(S.length===0){Ae.log(`[gjsify upgrade] no matching workspaces.`);return}let C=collectAllDeclarations(S,parseFilterList(n.filter));if(C.length===0){Ae.log(`[gjsify upgrade] no external npm dependencies to check.`);return}let N=groupByDependency(C);if(n.check)return runCheckMode(N);if(n.align)return runAlignMode(N,n);let F=await loadNpmrcLight(a.root),I=n.latest?`latest`:n.minor?`minor`:n.patch?`patch`:`interactive`;Ae.log(`[gjsify upgrade] checking ${N.length} unique deps across ${S.length} workspace(s) against ${F.registry}…`);let H=await resolveCandidateGroups(N,F,n.verbose??!1,I);if(H.length===0){Ae.log(`✅ all dependencies are up to date`);let n=findInconsistencies(N);n.length>0&&Ae.log(`\n⚠ ${n.length} dep(s) declared at inconsistent ranges across workspaces. Run \`gjsify upgrade --align\` to fix.`);return}printTable(H);let W;if(I===`interactive`&&!n.yes?W=await promptSelection(H):(n.yes&&I===`interactive`&&Ae.log(`[gjsify upgrade] -y / --yes: selecting all`),W=H),W.length===0){Ae.log(`[gjsify upgrade] nothing selected; no files changed.`);return}if(n.dryRun){let n=uniqueLocations(W).length;Ae.log(`[gjsify upgrade] --dry-run: would update ${W.length} deps across ${n} package.json file(s).`),printChangePlan(W);return}let K=applyToFiles(W);Ae.log(`✏️ updated ${W.length} dep(s) across ${K} package.json file(s). Run \`gjsify install\` to apply.`)}};function discoverContext(n){let a=findWorkspaceRoot(n);if(a)return{root:a,workspaces:discoverWorkspaces(a,{includeRoot:!0}),isMonorepo:!0};let S=ko(n,`package.json`);if(!existsSync(S))throw Error(`[gjsify upgrade] no package.json at ${S}`);let C=JSON.parse(readFileSync(S,`utf-8`));return{root:n,workspaces:[{name:C.name??`<root>`,location:n,relativeLocation:`.`,version:C.version??`0.0.0`,manifest:C,private:C.private===!0}],isMonorepo:!1}}function applyWorkspaceFilter(n,a,S){let C=a?.split(`,`).map(n=>n.trim()).filter(Boolean),N=S?.split(`,`).map(n=>n.trim()).filter(Boolean);return(!C||C.length===0)&&(!N||N.length===0)?n:filterWorkspaces(n,{include:C,exclude:N})}function parseFilterList(n){return n?n.split(`,`).map(n=>n.trim().toLowerCase()).filter(Boolean):[]}const SD=[`dependencies`,`devDependencies`,`optionalDependencies`,`peerDependencies`];function collectAllDeclarations(n,a){let S=[];for(let C of n)for(let n of collectFromWorkspace(C,a))S.push(n);return S}function collectFromWorkspace(n,a){let S=[],C=n.manifest;for(let N of SD){let F=C[N];if(!(!F||typeof F!=`object`))for(let[C,I]of Object.entries(F)){if(typeof I!=`string`||a.length&&!a.some(n=>C.toLowerCase().includes(n))||I.startsWith(`workspace:`)||I.startsWith(`file:`)||I.startsWith(`link:`)||I.startsWith(`git+`)||I.startsWith(`git:`)||I.startsWith(`http:`)||I.startsWith(`https:`)||I.startsWith(`npm:`)||I.startsWith(`portal:`))continue;let{prefix:F,version:H}=splitRange(I);S.push({workspace:n.name,workspaceLocation:n.location,name:C,field:N,currentRange:I,currentVersion:H,prefix:F})}}return S}function splitRange(n){let a=n.match(/^(\^|~|>=|<=|>|<|=)?\s*([0-9].*)$/);if(!a)return{prefix:``,version:null};let S=a[1]??``,C=a[2]?.split(/\s|[|&,]/)[0]??null;return{prefix:S,version:(C?parse(C):null)?.version??null}}function runCheckMode(n){let a=findInconsistencies(n);if(a.length===0){Ae.log(`gjsify upgrade --check: OK. ${n.length} dep(s) consistently declared across workspaces.`);return}Ae.error(`gjsify upgrade --check: FAIL. ${a.length} dep(s) declared at inconsistent ranges:\n`);for(let n of a){let a=new Map;for(let S of n.occurrences){let n=a.get(S.currentRange)??[];n.push(S.workspace),a.set(S.currentRange,n)}Ae.error(` ${CD.bold}${n.name}${CD.reset}`);for(let[n,S]of a.entries())Ae.error(` ${n.padEnd(16)} — ${S.join(`, `)}`)}Ae.error("\nFix: run `gjsify upgrade --align` (offline; aligns each dep to its highest declared range)."),process.exit(1)}function runAlignMode(n,a){let S=findInconsistencies(n);if(S.length===0){Ae.log(`gjsify upgrade --align: nothing to do. ${n.length} dep(s) already consistent.`);return}let C=[];for(let n of S){if(!n.highestVersion)continue;let a=n.occurrences.find(a=>a.currentRange===n.dominantRange)?.prefix||`^`;C.push({...n,latestVersion:n.highestVersion,diff:`none`,occurrences:n.occurrences.map(n=>({...n,prefix:a}))})}if(C.length===0){Ae.log(`gjsify upgrade --align: inconsistencies present but no parseable target version. No-op.`);return}Ae.log(`gjsify upgrade --align: aligning ${C.length} inconsistent dep(s) to their highest declared version:\n`);for(let n of C){let a=n.occurrences[0]?.prefix??`^`;Ae.log(` ${n.name.padEnd(28)} ranges: ${[...n.declaredRanges].join(`, `)} → ${a}${n.latestVersion}`)}if(a.dryRun){Ae.log(`
|
|
806
|
+
[gjsify upgrade --align] --dry-run: no files changed.`);return}let N=applyToFiles(C);Ae.log(`\n✏️ updated ${C.length} dep(s) across ${N} package.json file(s).`)}async function resolveCandidateGroups(n,a,S,C){let N=[],F=0;async function worker(){for(;;){let I=F++;if(I>=n.length)return;let H=n[I];try{let n=(await fetchPackument(H.name,{npmrc:a}))[`dist-tags`]?.latest;if(!n){S&&Ae.warn(` ${H.name}: no dist-tags.latest, skipping`);continue}let F=H.highestVersion;if(!F){S&&Ae.warn(` ${H.name}: unable to parse any current range`);continue}let I=classifyDiff(F,n);if(I===`none`||C===`minor`&&I===`major`||C===`patch`&&(I===`major`||I===`minor`))continue;N.push({...H,latestVersion:n,diff:I})}catch(n){S&&Ae.warn(` ${H.name}: fetch failed (${n.message})`)}}}return await Promise.all(Array.from({length:8},()=>worker())),N.sort((n,a)=>n.name.localeCompare(a.name)),N}function classifyDiff(n,a){let S=parse(n),C=parse(a);return!S||!C?`none`:S.major===C.major?S.minor===C.minor?S.patch===C.patch?(S.prerelease??[]).join(`.`)===(C.prerelease??[]).join(`.`)?`none`:`prerelease`:C.patch>S.patch?`patch`:`none`:C.minor>S.minor?`minor`:`none`:C.major>S.major?`major`:`none`}const CD={reset:`\x1B[0m`,bold:`\x1B[1m`,dim:`\x1B[2m`,red:`\x1B[31m`,yellow:`\x1B[33m`,green:`\x1B[32m`,cyan:`\x1B[36m`,magenta:`\x1B[35m`};function colorForDiff(n){switch(n){case`major`:return CD.red;case`minor`:return CD.yellow;case`patch`:return CD.green;case`prerelease`:return CD.cyan;default:return``}}function printTable(n){let a=Math.max(...n.map(n=>n.name.length),4),S=Math.max(...n.map(n=>`${n.occurrences.length}`.length+2),3),C=Math.max(...n.map(n=>declaredCellWidth(n)),7),N=Math.max(...n.map(n=>n.latestVersion.length),6),F=String(n.length).length+2,I=` `.repeat(F+2)+CD.bold+`name`.padEnd(a)+` `+`fan`.padEnd(S)+` `+`declared`.padEnd(C)+` `+`latest`.padEnd(N)+` kind`+CD.reset;Ae.log(I),Ae.log(` `.repeat(F+2)+CD.dim+`─`.repeat(a+S+C+N+16)+CD.reset);for(let I=0;I<n.length;I++){let H=n[I],W=`${I+1}.`.padEnd(F),K=H.declaredRanges.size>1?`${CD.magenta}⚠ ${CD.reset}`:` `,q=colorForDiff(H.diff);Ae.log(W+K+H.name.padEnd(a)+` `+CD.dim+`${H.occurrences.length}`.padEnd(S)+CD.reset+` `+CD.dim+renderDeclaredCell(H).padEnd(C)+CD.reset+` `+q+H.latestVersion.padEnd(N)+CD.reset+` `+q+H.diff+CD.reset)}let H=n.filter(n=>n.declaredRanges.size>1).length;H>0&&Ae.log(`\n${CD.magenta}⚠${CD.reset} ${H} dep(s) declared at inconsistent ranges across workspaces.`)}function declaredCellWidth(n){return renderDeclaredCell(n).length}function renderDeclaredCell(n){if(n.declaredRanges.size===1)return[...n.declaredRanges][0];let a=[...n.declaredRanges].sort().join(`, `);return a.length<=32?a:a.slice(0,29)+`…`}function printChangePlan(n){for(let a of n)for(let n of a.occurrences)Ae.log(` ${n.workspace.padEnd(38)} ${a.name.padEnd(28)} ${n.currentRange.padEnd(12)} → ${n.prefix}${a.latestVersion}`)}async function promptSelection(n){if(!process.stdin.isTTY)return Ae.log(`[gjsify upgrade] non-TTY stdin: pass --latest / --minor / --patch (or --yes for interactive-all) to upgrade non-interactively.`),[];let a=createInterface({input:process.stdin,output:process.stdout});try{Ae.log(`
|
|
807
|
+
Select upgrades: comma- or space-separated indices, `+CD.bold+`a`+CD.reset+` for all, ranges like `+CD.bold+`1-3`+CD.reset+`, or `+CD.bold+`ENTER`+CD.reset+` to skip:`);let S=(await a.question(`> `)).trim();if(!S)return[];if(S.toLowerCase()===`a`||S.toLowerCase()===`all`)return[...n];let C=new Set;for(let n of S.split(/[\s,]+/).filter(Boolean)){let a=n.match(/^(\d+)-(\d+)$/);if(a){let n=Number(a[1]),S=Number(a[2]);for(let a=Math.min(n,S);a<=Math.max(n,S);a++)C.add(a-1)}else /^\d+$/.test(n)&&C.add(Number(n)-1)}return[...C].filter(a=>a>=0&&a<n.length).map(a=>n[a])}finally{a.close()}}function applyToFiles(n){let a=new Map;for(let S of n)for(let n of S.occurrences){let C=a.get(n.workspaceLocation)??[];C.push({...S,occurrences:[n]}),a.set(n.workspaceLocation,C)}let S=0;for(let[n,C]of a.entries()){let a=ko(n,`package.json`),N=readFileSync(a,`utf-8`),F=JSON.parse(N),I=!1;for(let n of C){let a=n.occurrences[0],S=F[a.field];if(!S)continue;let C=`${a.prefix}${n.latestVersion}`;S[n.name]!==C&&(S[n.name]=C,I=!0)}if(I){let n=detectIndent(N);writeFileSync(a,JSON.stringify(F,null,n)+(N.endsWith(`
|
|
807
808
|
`)?`
|
|
808
|
-
`:``),`utf-8`)}function detectIndent(n){let a=n.match(/^\{\n( +)/);return a?a[1].length:2}async function loadNpmrcLight(n){let a={registry:JE,scopes:{},authTokens:{},basicAuth:{}};for(let S of[ko(homedir(),`.npmrc`),ko(n,`.npmrc`)])if(existsSync(S))try{let n=parseNpmrc(readFileSync(S,`utf-8`));a={...a,...n,scopes:{...a.scopes,...n.scopes}}}catch{}return process.env.npm_config_registry&&(a.registry=process.env.npm_config_registry),a}je(),as(),Bo();const wD=[`\\.test\\.`,`\\.spec\\.`,`\\.test-data\\.`],TD=/\.(ts|tsx|mts|cts)$/;async function generateBarrels(n){let a=n.singleQuotes?`'`:`"`,S=n.noSemicolon?``:`;`,C=n.extension===`none`?``:`.${n.extension}`,N=0;for(let F of n.paths){let I=Eo(n.baseDir,F),H=No(I)===`types`,W;try{W=(await readdir$1(I,{withFileTypes:!0})).filter(n=>n.isFile()).filter(n=>TD.test(n.name)).filter(n=>n.name!==`index.ts`).filter(a=>!n.exclude.some(n=>n.test(a.name))).sort((n,a)=>n.name.localeCompare(a.name))}catch(a){n.verbose&&Ae.error(`[gjsify barrels] skip ${I}: ${a.message}`);continue}let K=W.map(n=>{let N=No(n.name,Po(n.name));return`${H?`export type *`:`export *`} from ${a}./${N}${C}${a}${S}`}),q=K.length?`${K.join(`
|
|
809
|
+
`:``),`utf-8`),S++}}return S}function uniqueLocations(n){let a=new Set;for(let S of n)for(let n of S.occurrences)a.add(n.workspaceLocation);return[...a]}function detectIndent(n){let a=n.match(/^\{\n( +)/);return a?a[1].length:2}async function loadNpmrcLight(n){let a={registry:JE,scopes:{},authTokens:{},basicAuth:{}};for(let S of[ko(homedir(),`.npmrc`),ko(n,`.npmrc`)])if(existsSync(S))try{let n=parseNpmrc(readFileSync(S,`utf-8`));a={...a,...n,scopes:{...a.scopes,...n.scopes}}}catch{}return process.env.npm_config_registry&&(a.registry=process.env.npm_config_registry),a}je(),as(),Bo();const wD=[`\\.test\\.`,`\\.spec\\.`,`\\.test-data\\.`],TD=/\.(ts|tsx|mts|cts)$/;async function generateBarrels(n){let a=n.singleQuotes?`'`:`"`,S=n.noSemicolon?``:`;`,C=n.extension===`none`?``:`.${n.extension}`,N=0;for(let F of n.paths){let I=Eo(n.baseDir,F),H=No(I)===`types`,W;try{W=(await readdir$1(I,{withFileTypes:!0})).filter(n=>n.isFile()).filter(n=>TD.test(n.name)).filter(n=>n.name!==`index.ts`).filter(a=>!n.exclude.some(n=>n.test(a.name))).sort((n,a)=>n.name.localeCompare(a.name))}catch(a){n.verbose&&Ae.error(`[gjsify barrels] skip ${I}: ${a.message}`);continue}let K=W.map(n=>{let N=No(n.name,Po(n.name));return`${H?`export type *`:`export *`} from ${a}./${N}${C}${a}${S}`}),q=K.length?`${K.join(`
|
|
809
810
|
`)}\n`:`export {};
|
|
810
811
|
`,Y=`${n.header}\n\n${q}`,X=ko(I,`index.ts`);if(await readFile$1(X,`utf-8`).catch(()=>``)===Y){n.verbose&&Ae.log(`[gjsify barrels] up-to-date: ${X}`);continue}n.check?(Ae.error(`[gjsify barrels] drift: ${X}`),N++):(await writeFile$1(X,Y,`utf-8`),n.verbose&&Ae.log(`[gjsify barrels] wrote: ${X}`))}return N}je();const ED={command:`barrels [paths..]`,description:"Regenerate `index.ts` barrel files for the given directories. Drop-in replacement for `barrelsby`.",builder:n=>n.positional(`paths`,{description:"Directories whose `index.ts` to (re)generate. May also be passed via `--paths`.",type:`string`,array:!0}).option(`paths`,{alias:`p`,description:`Alternative to positional — repeatable list of directories.`,type:`string`,array:!0}).option(`ext`,{description:"Import-specifier extension. Default: `none` (bundler-mode resolution).",type:`string`,choices:[`js`,`ts`,`none`],default:`none`}).option(`base-dir`,{alias:`b`,description:"Resolve `paths` against this directory. Default: cwd.",type:`string`}).option(`exclude`,{description:"Regex(es) of file names to skip. Repeatable. Defaults: `\\.test\\.`, `\\.spec\\.`, `\\.test-data\\.`.",type:`string`,array:!0}).option(`header`,{description:`Header comment prepended to every generated file.`,type:`string`}).option(`semicolon`,{description:"Emit trailing `;` on each export line. Negate with `--no-semicolon`. Default: omitted.",type:`boolean`,default:!1}).option(`single-quotes`,{description:"Use `'` for import specifiers. Default: true. Pass `--no-single-quotes` for `\"`.",type:`boolean`,default:!0}).option(`check`,{description:`Report drift without modifying files; exit non-zero if any barrel is stale.`,type:`boolean`,default:!1}).option(`verbose`,{description:`Log each file scanned + written.`,type:`boolean`,default:!1}),handler:async n=>{let a=Array.from(new Set((n.paths??[]).filter(Boolean)));if(a.length===0){Ae.error(`[gjsify barrels] no paths provided. Pass directories as positional arguments or via --paths.`),process.exitCode=1;return}let S=n.exclude?.length?n.exclude:[...wD],C=await generateBarrels({paths:a,extension:n.ext??`none`,baseDir:n.baseDir??process.cwd(),exclude:S.map(n=>new RegExp(n)),header:n.header??"// Auto-generated by `gjsify barrels` — do not edit by hand.",noSemicolon:n.semicolon===!1||n.semicolon===void 0,singleQuotes:n.singleQuotes!==!1,check:n.check??!1,verbose:n.verbose??!1});n.check&&C>0&&(Ae.error(`[gjsify barrels] ${C} barrel file(s) drifted. Run without --check to fix.`),process.exitCode=1)}};Os(),Bo(),en();function runtimeLabel(){try{let n=globalThis.imports?.system;if(n?.version!==void 0){let a=Number(n.version);return`GJS ${Math.floor(a/1e4)}.${Math.floor(a%1e4/100)}.${a%100} (SpiderMonkey)`}}catch{}return typeof process<`u`&&typeof process.versions?.node==`string`?`Node.js ${process.version}`:`unknown runtime`}function readBundleVersion(){try{let n=Mo(fileURLToPath(import.meta.url)),a=JSON.parse(readFileSync(ko(n,`..`,`package.json`),`utf8`));return typeof a.version==`string`?a.version:`unknown`}catch{return`unknown`}}const DD=ju(hideBin(process.argv));await DD.scriptName(Mu).version(readBundleVersion()).strict().wrap(DD.terminalWidth()).command(SE.command,SE.description,SE.builder,SE.handler).command(cD.command,cD.description,cD.builder,cD.handler).command(sE.command,sE.description,sE.builder,sE.handler).command(cE.command,cE.description,cE.builder,cE.handler).command(lE.command,lE.description,lE.builder,lE.handler).command(sD.command,sD.description,sD.builder,sD.handler).command(uE.command,uE.description,uE.builder,uE.handler).command(hE.command,hE.description,hE.builder,hE.handler).command(gE.command,gE.description,gE.builder,gE.handler).command(_E.command,_E.description,_E.builder,_E.handler).command(wE.command,wE.description,wE.builder,wE.handler).command(EE.command,EE.description,EE.builder,EE.handler).command(OE.command,OE.description,OE.builder,OE.handler).command(HE.command,HE.description,HE.builder,HE.handler).command(lD.command,lD.description,lD.builder,lD.handler).command(uD.command,uD.description,uD.builder,uD.handler).command(dD.command,dD.description,dD.builder,dD.handler).command(pD.command,pD.description,pD.builder,pD.handler).command(hD.command,hD.description,hD.builder,hD.handler).command(gD.command,gD.description,gD.builder,gD.handler).command(_D.command,_D.description,_D.builder,_D.handler).command(xD.command,xD.description,xD.builder,xD.handler).command(vD.command,vD.description,vD.builder,vD.handler).command(yD.command,yD.description,yD.builder,yD.handler).command(bD.command,bD.description,bD.builder,bD.handler).command(ED.command,ED.description,ED.builder,ED.handler).demandCommand(1).epilogue(`Running on ${runtimeLabel()}`).help().parseAsync();
|