@gjsify/cli 0.4.39 → 0.4.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.gjs.mjs CHANGED
@@ -616,8 +616,8 @@ Additional information: BADCLIENT: Bad error code, ${K} not found in range ${F}.
616
616
  `+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 bg=4,xg=(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))(xg||{}),EditWalker=class{constructor(){this.goSubtree=!0,this.lineIndex=new Tg,this.endBranch=[],this.state=2,this.initialText=``,this.trailingText=``,this.lineIndex.root=new Eg,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=Tg.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 Eg;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 Eg}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)}},Sg=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 wg(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 wg(0,a,new Tg);a.versions[a.currentVersion]=S;let C=Tg.linesFromText(n);return S.index.load(C.lines),a}};Sg.changeNumberThreshold=8,Sg.changeLengthThreshold=256,Sg.maxVersions=8;var Cg=Sg,wg=class _LineIndexSnapshot{constructor(n,a,S,C=wh){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)}},Tg=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 Eg}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<bg)return new Eg(n);let a=Array(Math.ceil(n.length/bg)),S=0;for(let C=0;C<a.length;C++){let N=Math.min(S+bg,n.length);a[C]=new Eg(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}}},Eg=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<bg&&S===C-1&&N===1)return this.add(a[0]),this.updateCounts(),[];{let n=this.splitAfter(S),C=0;for(S++;S<bg&&C<N;)this.children[S]=a[C],S++,C++;let F=[],I=0;if(C<N){I=Math.ceil((N-C)/bg),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===bg&&(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<=bg)}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}},Dg=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 rc.validatePackageName(n)===rc.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 sc:this.typesRegistryCache=new Map(Object.entries(n.typesRegistry));break;case oc:{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 uc:{let a={message:n.message};this.event(a,`typesInstallerInitializationFailed`);break}case cc:{let a={eventId:n.eventId,packages:n.packagesToInstall};this.event(a,`beginInstallTypes`);break}case lc:{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 ac:this.projectService.updateTypingsForProject(n);break;case ic: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 dc: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}`)}};Dg.requestDelayMillis=100;var Og=Dg,kg={};__export(kg,{ActionInvalidate:()=>ac,ActionPackageInstalled:()=>oc,ActionSet:()=>ic,ActionWatchTypingLocations:()=>dc,Arguments:()=>fc,AutoImportProviderProject:()=>Uh,AuxiliaryProject:()=>AuxiliaryProject,CharRangeSection:()=>xg,CloseFileWatcherEvent:()=>ng,CommandNames:()=>gg,ConfigFileDiagEvent:()=>Xh,ConfiguredProject:()=>ConfiguredProject2,ConfiguredProjectLoadKind:()=>fg,CreateDirectoryWatcherEvent:()=>tg,CreateFileWatcherEvent:()=>eg,Errors:()=>Eh,EventBeginInstallTypes:()=>cc,EventEndInstallTypes:()=>lc,EventInitializationFailed:()=>uc,EventTypesRegistry:()=>sc,ExternalProject:()=>ExternalProject,GcTimer:()=>Oh,InferredProject:()=>InferredProject2,LargeFileReferencedEvent:()=>Yh,LineIndex:()=>Tg,LineLeaf:()=>LineLeaf,LineNode:()=>Eg,LogLevel:()=>Ch,Msg:()=>Th,OpenFileInfoTelemetryEvent:()=>$h,Project:()=>Vh,ProjectInfoTelemetryEvent:()=>Qh,ProjectKind:()=>Bh,ProjectLanguageServiceStateEvent:()=>Zh,ProjectLoadingFinishEvent:()=>Jh,ProjectLoadingStartEvent:()=>qh,ProjectService:()=>mg,ProjectsUpdatedInBackgroundEvent:()=>Kh,ScriptInfo:()=>ScriptInfo,ScriptVersionCache:()=>Cg,Session:()=>yg,TextStorage:()=>TextStorage,ThrottledOperations:()=>Dh,TypingsInstallerAdapter:()=>Og,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:()=>wh,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:()=>Gh,maxProgramSizeForNonTsFiles:()=>Wh,normalizedPathToPath:()=>normalizedPathToPath,nowString:()=>nowString,nullCancellationToken:()=>hg,nullTypingsInstaller:()=>ug,protocol:()=>kh,scriptInfoIsContainedByBackgroundProject:()=>scriptInfoIsContainedByBackgroundProject,scriptInfoIsContainedByDeferredClosedProject:()=>scriptInfoIsContainedByDeferredClosedProject,stringifyIndented:()=>stringifyIndented,toEvent:()=>toEvent,toNormalizedPath:()=>toNormalizedPath,tryConvertScriptKindName:()=>tryConvertScriptKindName,typingsInstaller:()=>xh,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 I},set exports(n){I=n,a!==void 0&&a.exports&&(a.exports=n)}})})),jf=__commonJSMin$1((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=(As(),__toCommonJS(Ds)),C=(ss(),__toCommonJS(is)),N=a((Ho(),__toCommonJS(Do))),F=(nn(),__toCommonJS(Zt)),I=(Ga(),__toCommonJS(Ua)),H;n.loadJsSync=function loadJsSync(n){return H===void 0&&(H=Bu()),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=Zu());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=(Gd(),__toCommonJS(Qu)));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=Af());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$1(Af()))).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}}})),Mf=__commonJSMin$1((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=jf();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})})),Nf=__commonJSMin$1(((n,a)=>{let S=(Ho(),__toCommonJS(Do)),C=(Tf(),__toCommonJS(vf)),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})),Pf=__commonJSMin$1((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((As(),__toCommonJS(Ds)));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})),Ff=__commonJSMin$1((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(Nf()),C=a((Tf(),__toCommonJS(vf))),N=a((Ho(),__toCommonJS(Do))),F=Pf();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:
617
617
  ${[...S,a].map((n,a)=>`${a+1}. ${n}`).join(`
618
618
  `)} (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})),If=__commonJSMin$1((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})),Lf=__commonJSMin$1((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((ss(),__toCommonJS(is))),C=a((Ho(),__toCommonJS(Do))),N=Mf(),F=Ff(),I=If(),H=Pf();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})),Rf=__commonJSMin$1((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((As(),__toCommonJS(Ds))),C=a((Ho(),__toCommonJS(Do))),N=Mf(),F=Ff(),I=If(),H=Pf();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})),zf=__commonJSMin$1((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=Mf();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=Lf(),C=Rf(),N=Pf(),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 Bf=/^[A-Za-z]:\//;function normalizeWindowsPath(n=``){return n&&n.replace(/\\/g,`/`).replace(Bf,n=>n.toUpperCase())}const Vf=/^[/\\]{2}/,Hf=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,Uf=/^[A-Za-z]:$/,normalize=function(n){if(n.length===0)return`.`;n=normalizeWindowsPath(n);let a=n.match(Vf),S=isAbsolute(n),C=n[n.length-1]===`/`;return n=normalizeString(n,!S),n.length===0?S?`/`:C?`./`:`.`:(C&&(n+=`/`),Uf.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 Hf.test(n)},Wf=Symbol.for(`__confbox_fmt__`),Gf=/^(\s+)/,Kf=/(\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:Gf.exec(n)?.[0]||``,end:Kf.exec(n)?.[0]||``}}}__name$1(i$4,`i`);function a$4(n,a,S){!a||typeof a!=`object`||Object.defineProperty(a,Wf,{enumerable:!1,configurable:!0,writable:!0,value:i$4(n,S)})}__name$1(a$4,`a`);function n$3(n,a){let S=JSON.parse(n,a?.reviver);return a$4(n,S,a),S}__name$1(n$3,`n`);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+=`
619
- `;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$2(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$2(a)){do C++,N+=String.fromCharCode(a),a=n.charCodeAt(C);while(t$2(a));return I=15}if(n$2(a))return C++,N+=String.fromCharCode(a),a===13&&n.charCodeAt(C)===10&&(C++,N+=`
620
- `),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$2(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$2(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$2(n)||n$2(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$2(n){return n===32||n===9}__name$1(t$2,`t`);function n$2(n){return n===10||n===13}__name$1(n$2,`n`);function r$2(n){return n>=48&&n<=57}__name$1(r$2,`r`);var qf;(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`})(qf||={}),Array(20).fill(0).map((n,a)=>` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
619
+ `;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$2(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$2(a))return C++,N+=String.fromCharCode(a),a===13&&n.charCodeAt(C)===10&&(C++,N+=`
620
+ `),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$2(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$2(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$2(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$2(n){return n===10||n===13}__name$1(n$2,`n`);function r$2(n){return n>=48&&n<=57}__name$1(r$2,`r`);var qf;(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`})(qf||={}),Array(20).fill(0).map((n,a)=>` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
621
621
  `+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
622
622
  `+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`
623
623
  `+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r`+` `.repeat(a)),Array(200).fill(0).map((n,a)=>`\r
@@ -794,8 +794,8 @@ jobs:
794
794
  --- gjsify post-install checks ---`);let n=runMinimalChecks().filter(n=>!n.found&&n.severity===`required`);if(n.length>0){Ae.warn(`Missing required system dependencies:
795
795
  `);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.")}maybeInstallGitHooks()}function maybeInstallGitHooks(){let n=process.cwd(),a=jo(n,`scripts`,`install-git-hooks.mjs`);if(existsSync(a)&&existsSync(jo(n,`.git`)))try{let S=spawnSync(process.execPath,[a,`--quiet`],{cwd:n,stdio:`inherit`,env:process.env});S.status!==0&&Ae.warn(`[gjsify install] scripts/install-git-hooks.mjs exited ${S.status} — git hooks may not be active.`)}catch(n){Ae.warn(`[gjsify install] git hook installation skipped: ${n instanceof Error?n.message:String(n)}`)}}je(),Gb(),Tf();const xE={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$1(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$1(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$1(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$1(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)}__name$1(runOne$1,`runOne`);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(`
796
796
  `))!==-1;)a.write(S+C.slice(0,N+1)),C=C.slice(N+1)}),n.on(`end`,()=>{C.length>0&&a.write(S+C+`
797
- `)})}je(),Gb();const SE={command:`workspace <name> <script> [args..]`,description:"Run a workspace script (`yarn workspace <name> run <script>` equivalent).",builder:n=>n.positional(`name`,{description:"Workspace name (matches package.json `name` field).",type:`string`,demandOption:!0}).positional(`script`,{description:`Script name to run inside that workspace.`,type:`string`,demandOption:!0}).positional(`args`,{description:`Extra arguments forwarded to the script.`,type:`string`,array:!0}).option(`with-dependencies`,{description:"Pre-build the target workspace's transitive workspace dependencies in topological order before running the script in the target. Deps that don't declare the script are skipped (--if-present behaviour). Replaces manual `gjsify workspace A build && gjsify workspace B build && …` chains.",type:`boolean`,alias:[`d`,`t`,`topological`],default:!1}).option(`include-dev`,{description:"When --with-dependencies is set, also walk devDependencies (production deps only by default — matches `gjsify foreach -t`).",type:`boolean`,default:!1}).option(`continue-on-error`,{description:`When --with-dependencies is set, keep running remaining deps after one fails (default: stop on first failure).`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every spawned command before running it.`,type:`boolean`,alias:`v`,default:!1}),handler:async n=>{let a=discoverWorkspaces(findWorkspaceRoot(process.cwd())??process.cwd()),S=a.find(a=>a.name===n.name);S||(Ae.error(`gjsify workspace: no workspace named "${n.name}" — discovered ${a.length} workspace(s)`),process.exit(1));let C=detectPackageManager(),N=n.verbose===!0,F=n[`with-dependencies`]===!0,I=n[`continue-on-error`]===!0;typeof(S.manifest.scripts??{})[n.script]!=`string`&&(Ae.error(`gjsify workspace: workspace "${n.name}" has no script "${n.script}"`),process.exit(1));let H;H=F?topologicalSort(buildDependencyGraph(collectTransitiveClosure(S,a,n[`include-dev`]===!0),{includeDev:n[`include-dev`]===!0})):[S];let W=[];for(let a of H){if(typeof(a.manifest.scripts??{})[n.script]!=`string`){N&&Ae.error(`[${a.name}] (no "${n.script}" script — skipping)`);continue}try{await runOne(a,n.script,n.args??[],C,N)}catch(n){let S=n instanceof Error?n:Error(String(n));Ae.error(`[${a.name}] ${S.message}`),I||process.exit(1),W.push({workspace:a.name,error:S})}}W.length>0&&(Ae.error(`gjsify workspace: ${W.length} workspace(s) failed: ${W.map(n=>n.workspace).join(`, `)}`),process.exit(1)),process.exit(0)}};function collectTransitiveClosure(n,a,S){let C=new Map;for(let n of a)C.set(n.name,n);let N=new Set,F=[],I=[n];for(;I.length>0;){let n=I.pop();if(N.has(n.name))continue;N.add(n.name),F.push(n);let a=n.manifest,H=[a.dependencies,S?a.devDependencies:void 0,a.optionalDependencies];for(let n of H)if(n)for(let[a,S]of Object.entries(n)){if(typeof S!=`string`||!S.startsWith(`workspace:`))continue;let n=C.get(a);n&&(N.has(n.name)||I.push(n))}}return F}async function runOne(n,a,S,C,N){let F=C===`gjsify`?[`run`,a,...S]:[`run`,a,...S.length>0?[`--`,...S]:[]];N&&Ae.error(`[${n.name}] $ ${C} ${F.join(` `)}`);let I=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`};await new Promise((a,S)=>{let N=spawn(C,F,{cwd:n.location,stdio:`inherit`,env:{...process.env,...I}});N.on(`close`,n=>{n===0?a():S(Error(`${C} ${F.join(` `)} exited with code ${n}`))}),N.on(`error`,S)})}function detectPackageManager(){let n=process.env.npm_config_user_agent??``;return n.startsWith(`yarn/`)?`yarn`:n.startsWith(`gjsify/`)?`gjsify`:`npm`}Gb(),Ho();async function runLifecycleScript(n,a,S,C={}){let N=(a.scripts??{})[S];if(typeof N!=`string`){if(C.optional!==!1)return!1;throw Error(`gjsify lifecycle-script: no "${S}" in ${n}/package.json`)}let F=findWorkspaceRoot(n),I=[jo(n,`node_modules`,`.bin`)];F&&F!==n&&I.push(jo(F,`node_modules`,`.bin`));let H=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`},W={...process.env,...H,PATH:[...I,process.env.PATH??``].filter(Boolean).join(Bo),npm_lifecycle_event:S,npm_package_name:a.name??``,npm_package_version:a.version??``,...C.env},K=C.stdio===`inherit-stderr`?[`inherit`,2,2]:C.stdio??`inherit`;return await new Promise((a,C)=>{let F=spawn(N,[],{cwd:n,env:W,stdio:K,shell:!0});F.on(`close`,N=>{N===0?a():C(Error(`gjsify lifecycle-script: "${S}" in ${n} exited with code ${N}`))}),F.on(`error`,C)}),!0}je(),As(),Ga(),Ho(),sE();const CE={command:`pack [path]`,description:`Produce an npm-compatible .tgz tarball for the workspace at <path> (default: cwd). Rewrites workspace:^/~/* deps to resolved versions.`,builder:n=>n.positional(`path`,{description:`Workspace path (default: cwd).`,type:`string`}).option(`pack-destination`,{description:`Directory to write the tarball into. Default: workspace cwd.`,type:`string`}).option(`json`,{description:"Emit pack metadata as JSON on stdout (mirrors `npm pack --json`).",type:`boolean`,default:!1}).option(`dry-run`,{description:`Compute everything but do not write the .tgz.`,type:`boolean`,default:!1}).option(`ignore-scripts`,{description:"Skip the `prepack` lifecycle script before packing. Mirrors `npm pack --ignore-scripts`. Use when scripts are already run by the outer workflow.",type:`boolean`,default:!1}),handler:async n=>{let a=await packWorkspace(Oo(n.path??process.cwd()),{destination:n[`pack-destination`],dryRun:n[`dry-run`]===!0,lifecycleScripts:n[`ignore-scripts`]?[]:[`prepack`],lifecycleStdio:n.json?`inherit-stderr`:`inherit`});n.json?process.stdout.write(`${JSON.stringify([a],null,2)}\n`):process.stdout.write(`${a.filename}\n`)}};async function packWorkspace(n,a={}){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`gjsify pack: no package.json at ${n}`);let C=readFileSync(S,`utf-8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:``,I=typeof N.version==`string`?N.version:`0.0.0`;if(!F)throw Error(`gjsify pack: package.json at ${n} has no "name"`);let H=a.lifecycleScripts??[`prepack`];for(let S of H)await runLifecycleScript(n,N,S,{optional:!0,stdio:a.lifecycleStdio});let W=readFileSync(S,`utf-8`),K=W===C?N:JSON.parse(W),q=a.skipWorkspaceRewrite?K:rewriteWorkspaceDeps(K,n),Y=JSON.stringify(q,null,indentOf(W))+`
798
- `,X=collectFiles(n,K),te=[{name:`package/`,directory:!0,mode:493}],ne=[],re=0;for(let a of X){let S;S=a===`package.json`?new TextEncoder().encode(Y):new Uint8Array(readFileSync(jo(n,a)));let C=statSync(jo(n,a)).mode&511;te.push({name:`package/${a}`,body:S,mode:C,mtime:0}),ne.push({path:a,size:S.byteLength,mode:C}),re+=S.byteLength}let ie=await gzip(createTarball(te)),ae=`${F.startsWith(`@`)?F.slice(1).replace(`/`,`-`):F}-${I}.tgz`,oe=createHash(`sha1`).update(ie).digest(`hex`),Z=`sha512-${createHash(`sha512`).update(ie).digest(`base64`)}`,se=a.destination?Oo(a.destination):n,ce=jo(se,ae);return a.dryRun||(mkdirSync(se,{recursive:!0}),writeFileSync(ce,ie)),{filename:ae,name:F,version:I,size:ie.byteLength,unpackedSize:re,shasum:oe,integrity:Z,entryCount:ne.length,files:ne,absolutePath:a.dryRun?null:ce}}function collectFiles(n,a){let S=forceIncluded(a),C=Array.isArray(a.files)?a.files.filter(n=>typeof n==`string`):null,N;N=C?expandFilesPatterns(n,C):walkAll(n);let F=loadIgnore(n),I=new Set;for(let n of N)F(n)||I.add(n);for(let a of S)existsSync(jo(n,a))&&I.add(a);return[...I].sort()}const wE=new Set([`.git`,`.svn`,`.hg`,`.gitignore`,`.gitattributes`,`.npmrc`,`CVS`,`.DS_Store`,`node_modules`,`.npmignore`,`package-lock.json`,`gjsify-lock.json`,`yarn.lock`,`yarn-error.log`,`.yarn`,`.pnp.cjs`,`.pnp.loader.mjs`,`tsconfig.tsbuildinfo`]);function forceIncluded(n){let a=new Set;a.add(`package.json`);for(let n of[`README`,`README.md`,`LICENSE`,`LICENSE.md`,`NOTICE`,`NOTICE.md`])a.add(n);let S=typeof n.main==`string`?n.main:null;S&&a.add(S.replace(/^\.\//,``));let C=n.bin;if(typeof C==`string`)a.add(C.replace(/^\.\//,``));else if(C&&typeof C==`object`)for(let n of Object.values(C))typeof n==`string`&&a.add(n.replace(/^\.\//,``));return[...a]}function walkAll(n,a=``){let S=[],C=a?jo(n,a):n,N;try{N=readdirSync(C,{withFileTypes:!0})}catch{return S}for(let C of N){if(wE.has(C.name)||C.name.startsWith(`.tsbuildinfo`))continue;let N=a?`${a}/${C.name}`:C.name;C.isDirectory()?S.push(...walkAll(n,N)):C.isFile()&&S.push(N)}return S}function expandFilesPatterns(n,a){let S=new Set;for(let C of a){let a=C.replace(/^\.\//,``).replace(/\/$/,``),N=jo(n,a);if(!existsSync(N))continue;let F=statSync(N);if(F.isDirectory())for(let C of walkAll(n,a))S.add(C);else F.isFile()&&S.add(a);!existsSync(N)&&/[*?[]/.test(C)&&Ae.warn(`gjsify pack: files entry "${C}" looks like a glob but glob expansion isn't implemented — pass literal files/dirs`)}return[...S]}function loadIgnore(n){let a=jo(n,`.npmignore`),S=jo(n,`.gitignore`),C=[],N=existsSync(a)?a:existsSync(S)?S:null;if(N){let n=readFileSync(N,`utf-8`).split(`
797
+ `)})}je(),Gb();const SE={command:`workspace <name> <script> [args..]`,description:"Run a workspace script (`yarn workspace <name> run <script>` equivalent).",builder:n=>n.positional(`name`,{description:"Workspace name (matches package.json `name` field).",type:`string`,demandOption:!0}).positional(`script`,{description:`Script name to run inside that workspace.`,type:`string`,demandOption:!0}).positional(`args`,{description:`Extra arguments forwarded to the script.`,type:`string`,array:!0}).option(`with-dependencies`,{description:"Pre-build the target workspace's transitive workspace dependencies in topological order before running the script in the target. Deps that don't declare the script are skipped (--if-present behaviour). Replaces manual `gjsify workspace A build && gjsify workspace B build && …` chains.",type:`boolean`,alias:[`d`,`t`,`topological`],default:!1}).option(`include-dev`,{description:"When --with-dependencies is set, also walk devDependencies (production deps only by default — matches `gjsify foreach -t`).",type:`boolean`,default:!1}).option(`continue-on-error`,{description:`When --with-dependencies is set, keep running remaining deps after one fails (default: stop on first failure).`,type:`boolean`,default:!1}).option(`verbose`,{description:`Echo every spawned command before running it.`,type:`boolean`,alias:`v`,default:!1}),handler:async n=>{let a=discoverWorkspaces(findWorkspaceRoot(process.cwd())??process.cwd()),S=a.find(a=>a.name===n.name);S||(Ae.error(`gjsify workspace: no workspace named "${n.name}" — discovered ${a.length} workspace(s)`),process.exit(1));let C=detectPackageManager(),N=n.verbose===!0,F=n[`with-dependencies`]===!0,I=n[`continue-on-error`]===!0;typeof(S.manifest.scripts??{})[n.script]!=`string`&&(Ae.error(`gjsify workspace: workspace "${n.name}" has no script "${n.script}"`),process.exit(1));let H;H=F?topologicalSort(buildDependencyGraph(collectTransitiveClosure(S,a,n[`include-dev`]===!0),{includeDev:n[`include-dev`]===!0})):[S];let W=[];for(let a of H){if(typeof(a.manifest.scripts??{})[n.script]!=`string`){N&&Ae.error(`[${a.name}] (no "${n.script}" script — skipping)`);continue}try{await runOne(a,n.script,n.args??[],C,N)}catch(n){let S=n instanceof Error?n:Error(String(n));Ae.error(`[${a.name}] ${S.message}`),I||process.exit(1),W.push({workspace:a.name,error:S})}}W.length>0&&(Ae.error(`gjsify workspace: ${W.length} workspace(s) failed: ${W.map(n=>n.workspace).join(`, `)}`),process.exit(1)),process.exit(0)}};function collectTransitiveClosure(n,a,S){let C=new Map;for(let n of a)C.set(n.name,n);let N=new Set,F=[],I=[n];for(;I.length>0;){let n=I.pop();if(N.has(n.name))continue;N.add(n.name),F.push(n);let a=n.manifest,H=[a.dependencies,S?a.devDependencies:void 0,a.optionalDependencies];for(let n of H)if(n)for(let[a,S]of Object.entries(n)){if(typeof S!=`string`||!S.startsWith(`workspace:`))continue;let n=C.get(a);n&&(N.has(n.name)||I.push(n))}}return F}async function runOne(n,a,S,C,N){let F=C===`gjsify`?[`run`,a,...S]:[`run`,a,...S.length>0?[`--`,...S]:[]];N&&Ae.error(`[${n.name}] $ ${C} ${F.join(` `)}`);let I=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`};await new Promise((a,S)=>{let N=spawn(C,F,{cwd:n.location,stdio:`inherit`,env:{...process.env,...I}});N.on(`close`,n=>{n===0?a():S(Error(`${C} ${F.join(` `)} exited with code ${n}`))}),N.on(`error`,S)})}function detectPackageManager(){let n=process.env.npm_config_user_agent??``;return n.startsWith(`yarn/`)?`yarn`:n.startsWith(`gjsify/`)?`gjsify`:`npm`}Gb(),Ho();async function runLifecycleScript(n,a,S,C={}){let N=(a.scripts??{})[S];if(typeof N!=`string`){if(C.optional!==!1)return!1;throw Error(`gjsify lifecycle-script: no "${S}" in ${n}/package.json`)}let F=findWorkspaceRoot(n),I=[jo(n,`node_modules`,`.bin`)];F&&F!==n&&I.push(jo(F,`node_modules`,`.bin`));let H=process.env.FORCE_COLOR!==void 0||process.env.NO_COLOR!==void 0?{}:{FORCE_COLOR:`1`},W={...process.env,...H,PATH:[...I,process.env.PATH??``].filter(Boolean).join(Bo),npm_lifecycle_event:S,npm_package_name:a.name??``,npm_package_version:a.version??``,...C.env},K=C.stdio===`inherit-stderr`?[`inherit`,2,2]:C.stdio??`inherit`;return await new Promise((a,C)=>{let F=spawn(N,[],{cwd:n,env:W,stdio:K,shell:!0});F.on(`close`,N=>{N===0?a():C(Error(`gjsify lifecycle-script: "${S}" in ${n} exited with code ${N}`))}),F.on(`error`,C)}),!0}As(),Ga(),Ho(),sE();const CE={command:`pack [path]`,description:`Produce an npm-compatible .tgz tarball for the workspace at <path> (default: cwd). Rewrites workspace:^/~/* deps to resolved versions.`,builder:n=>n.positional(`path`,{description:`Workspace path (default: cwd).`,type:`string`}).option(`pack-destination`,{description:`Directory to write the tarball into. Default: workspace cwd.`,type:`string`}).option(`json`,{description:"Emit pack metadata as JSON on stdout (mirrors `npm pack --json`).",type:`boolean`,default:!1}).option(`dry-run`,{description:`Compute everything but do not write the .tgz.`,type:`boolean`,default:!1}).option(`ignore-scripts`,{description:"Skip the `prepack` lifecycle script before packing. Mirrors `npm pack --ignore-scripts`. Use when scripts are already run by the outer workflow.",type:`boolean`,default:!1}),handler:async n=>{let a=await packWorkspace(Oo(n.path??process.cwd()),{destination:n[`pack-destination`],dryRun:n[`dry-run`]===!0,lifecycleScripts:n[`ignore-scripts`]?[]:[`prepack`],lifecycleStdio:n.json?`inherit-stderr`:`inherit`});n.json?process.stdout.write(`${JSON.stringify([a],null,2)}\n`):process.stdout.write(`${a.filename}\n`)}};async function packWorkspace(n,a={}){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`gjsify pack: no package.json at ${n}`);let C=readFileSync(S,`utf-8`),N=JSON.parse(C),F=typeof N.name==`string`?N.name:``,I=typeof N.version==`string`?N.version:`0.0.0`;if(!F)throw Error(`gjsify pack: package.json at ${n} has no "name"`);let H=a.lifecycleScripts??[`prepack`];for(let S of H)await runLifecycleScript(n,N,S,{optional:!0,stdio:a.lifecycleStdio});let W=readFileSync(S,`utf-8`),K=W===C?N:JSON.parse(W),q=a.skipWorkspaceRewrite?K:rewriteWorkspaceDeps(K,n),Y=JSON.stringify(q,null,indentOf(W))+`
798
+ `,X=collectFiles(n,K),te=[{name:`package/`,directory:!0,mode:493}],ne=[],re=0;for(let a of X){let S;S=a===`package.json`?new TextEncoder().encode(Y):new Uint8Array(readFileSync(jo(n,a)));let C=statSync(jo(n,a)).mode&511;te.push({name:`package/${a}`,body:S,mode:C,mtime:0}),ne.push({path:a,size:S.byteLength,mode:C}),re+=S.byteLength}let ie=await gzip(createTarball(te)),ae=`${F.startsWith(`@`)?F.slice(1).replace(`/`,`-`):F}-${I}.tgz`,oe=createHash(`sha1`).update(ie).digest(`hex`),Z=`sha512-${createHash(`sha512`).update(ie).digest(`base64`)}`,se=a.destination?Oo(a.destination):n,ce=jo(se,ae);return a.dryRun||(mkdirSync(se,{recursive:!0}),writeFileSync(ce,ie)),{filename:ae,name:F,version:I,size:ie.byteLength,unpackedSize:re,shasum:oe,integrity:Z,entryCount:ne.length,files:ne,absolutePath:a.dryRun?null:ce}}function collectFiles(n,a){let S=forceIncluded(a),C=Array.isArray(a.files)?a.files.filter(n=>typeof n==`string`):null,N;N=C?expandFilesPatterns(n,C):walkAll(n);let F=loadIgnore(n),I=new Set;for(let n of N)F(n)||I.add(n);for(let a of S)existsSync(jo(n,a))&&I.add(a);return[...I].sort()}const wE=new Set([`.git`,`.svn`,`.hg`,`.gitignore`,`.gitattributes`,`.npmrc`,`CVS`,`.DS_Store`,`node_modules`,`.npmignore`,`package-lock.json`,`gjsify-lock.json`,`yarn.lock`,`yarn-error.log`,`.yarn`,`.pnp.cjs`,`.pnp.loader.mjs`,`tsconfig.tsbuildinfo`]);function forceIncluded(n){let a=new Set;a.add(`package.json`);for(let n of[`README`,`README.md`,`LICENSE`,`LICENSE.md`,`NOTICE`,`NOTICE.md`])a.add(n);let S=typeof n.main==`string`?n.main:null;S&&a.add(S.replace(/^\.\//,``));let C=n.bin;if(typeof C==`string`)a.add(C.replace(/^\.\//,``));else if(C&&typeof C==`object`)for(let n of Object.values(C))typeof n==`string`&&a.add(n.replace(/^\.\//,``));return[...a]}function walkAll(n,a=``){let S=[],C=a?jo(n,a):n,N;try{N=readdirSync(C,{withFileTypes:!0})}catch{return S}for(let C of N){if(wE.has(C.name)||C.name.startsWith(`.tsbuildinfo`))continue;let N=a?`${a}/${C.name}`:C.name;C.isDirectory()?S.push(...walkAll(n,N)):C.isFile()&&S.push(N)}return S}function expandFilesPatterns(n,a){let S=new Set,C=null;for(let N of a){let a=N.replace(/^\.\//,``).replace(/\/$/,``);if(!a)continue;if(!/[*?[\]]/.test(a)){let C=jo(n,a);if(!existsSync(C))continue;let N=statSync(C);if(N.isDirectory())for(let C of walkAll(n,a))S.add(C);else N.isFile()&&S.add(a);continue}C??=walkAll(n);let F=filesGlobToRegExp(a),I=filesGlobToRegExp(`${a}/**`);for(let n of C)(F.test(n)||I.test(n))&&S.add(n)}return[...S]}function filesGlobToRegExp(n){let a=`^`;for(let S=0;S<n.length;S++){let C=n[S];if(C===`*`)n[S+1]===`*`?(a+=`.*`,S++,n[S+1]===`/`&&S++):a+=`[^/]*`;else if(C===`?`)a+=`[^/]`;else if(C===`[`){let C=S+1,N=`[`;for(n[C]===`!`&&(N+=`^`,C++);C<n.length&&n[C]!==`]`;C++)N+=n[C];C<n.length?(a+=`${N}]`,S=C):a+=`\\[`}else ".+^${}()|\\]".includes(C)?a+=`\\${C}`:a+=C}return RegExp(`${a}$`)}function loadIgnore(n){let a=jo(n,`.npmignore`),S=jo(n,`.gitignore`),C=[],N=existsSync(a)?a:existsSync(S)?S:null;if(N){let n=readFileSync(N,`utf-8`).split(`
799
799
  `);for(let a of n){let n=a.trim();!n||n.startsWith(`#`)||n.startsWith(`!`)||C.push(globToRegex(n))}}return n=>{for(let a of C)if(a.test(n))return!0;return!1}}function globToRegex(n){let a=n.replace(/^\//,``);return a=a.replace(/[.+^${}()|[\]\\]/g,`\\$&`),a=a.replace(/\*\*/g,`__DOUBLESTAR__`).replace(/\*/g,`[^/]*`).replace(/__DOUBLESTAR__/g,`.*`),a=a.replace(/\?/g,`[^/]`),RegExp(`^${a}($|/)`)}function rewriteWorkspaceDeps(n,a){let S=findWorkspaceRoot(a);if(!S)return n;let C=new Map;for(let n of discoverWorkspaces(S))n.name&&n.version&&C.set(n.name,n.version);let N=JSON.parse(JSON.stringify(n));for(let n of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let a=N[n];if(a)for(let[n,F]of Object.entries(a)){if(typeof F!=`string`||!F.startsWith(`workspace:`))continue;let I=C.get(n);if(!I)throw Error(`gjsify pack: ${N.name} declares workspace:^ on ${n} but no sibling workspace with that name exists in the monorepo at ${S}`);let H=F.slice(10);H===`*`||H===``?a[n]=I:H===`^`||H===`~`?a[n]=`${H}${I}`:a[n]=H}}return N}function indentOf(n){let a=n.match(/\n([ \t]+)"/);return a?a[1]:` `}var OidcUnavailableError=class extends Error{reason;constructor(n,a){super(n),this.reason=a,this.name=`OidcUnavailableError`}},OidcExchangeError=class extends Error{status;body;packageName;constructor(n,a,S,C){super(n),this.status=a,this.body=S,this.packageName=C,this.name=`OidcExchangeError`}};function hasGithubOidcEnv(){return!!(process.env.ACTIONS_ID_TOKEN_REQUEST_URL&&process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN)}async function fetchGithubOidcToken(n,a){let S=process.env.ACTIONS_ID_TOKEN_REQUEST_URL,C=process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!S||!C)throw new OidcUnavailableError("GitHub Actions OIDC env vars (ACTIONS_ID_TOKEN_REQUEST_{URL,TOKEN}) not set. The calling workflow needs `permissions: id-token: write`.",`no-env`);let N=new URL(S);N.searchParams.set(`audience`,n),a?.(`gjsify oidc: GET ${N.href.replace(C,`<bearer>`)}`);let F=await fetch(N.href,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${C}`}});if(!F.ok){let n=await F.text().catch(()=>`<no body>`);throw new OidcUnavailableError(`Failed to fetch GitHub OIDC id_token: ${F.status} ${F.statusText} — ${n.slice(0,200)}`,`fetch-id-token`)}let I=await F.json().catch(()=>({}));if(!I.value)throw new OidcUnavailableError("GitHub OIDC response missing `value` field",`no-id-token`);return I.value}async function exchangeOidcForNpmToken(n){let{packageName:a,registry:S,idToken:C,log:N}=n,F=`${S.endsWith(`/`)?S.slice(0,-1):S}/-/npm/v1/oidc/token/exchange/package/${a.startsWith(`@`)?(()=>{let n=a.indexOf(`/`),S=a.slice(1,n),C=a.slice(n+1);return`@${encodeURIComponent(S)}%2f${encodeURIComponent(C)}`})():encodeURIComponent(a)}`;N?.(`gjsify oidc: POST ${F}`);let I=await fetch(F,{method:`POST`,headers:{Authorization:`Bearer ${C}`,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`}),H=await I.text().catch(()=>``);if(!I.ok)throw new OidcExchangeError(`npm OIDC token exchange failed for ${a}: ${I.status} ${I.statusText} — ${H.slice(0,300)}`,I.status,H,a);let W;try{W=JSON.parse(H)}catch{throw new OidcExchangeError(`npm OIDC token exchange returned non-JSON body for ${a}: ${H.slice(0,200)}`,I.status,H,a)}if(!W.token)throw new OidcExchangeError(`npm OIDC token exchange returned no \`token\` field for ${a}`,I.status,H,a);return W.token}async function getNpmTrustedToken(n){let a=`npm:${new URL(n.registry).hostname}`,S=await fetchGithubOidcToken(a,n.log);return{token:await exchangeOidcForNpmToken({...n,idToken:S}),audience:a}}nE();async function diagnose404(n){let{packageName:a,version:S,registry:C,npmrc:N}=n,F={};try{F=await whoami(C,N)}catch{return{reason:`unknown`,message:formatUnknown(a,S)}}return F.username&&F.username.length>0?{reason:`live-token-404`,username:F.username,message:formatLiveToken404(a,S,F.username)}:{reason:`dead-token`,message:formatDeadToken(a,S)}}function formatDeadToken(n,a){return[`gjsify publish: ${n}@${a} — 404 Not Found`,``,`The npm token in ~/.npmrc appears to be revoked or expired (the /-/whoami probe`,`returned {} instead of {"username": "..."}). The 404 is npm's response to a PUT`,`authenticated with an invalid bearer token.`,``,`To refresh:`,` npm login`,` # or, future: gjsify login (tracked as project_gjsify_login_goal)`,``,`Then verify before publishing:`,` curl -s -H "Authorization: Bearer $(grep registry.npmjs.org ~/.npmrc | sed 's|.*=||')" \\`,` https://registry.npmjs.org/-/whoami`,` # Healthy: {"username":"<you>"}`,` # Dead: {}`].join(`
800
800
  `)}function formatLiveToken404(n,a,S){return[`gjsify publish: ${n}@${a} — 404 Not Found`,``,`Authenticated as: ${S}`,``,`Your token authenticates, so this is NOT a dead-token problem. The package`,`${n} is not (yet) on npmjs.com. Two cases:`,``,` 1. First publish of a brand-new scoped package — do the one-time bootstrap`,` (see AGENTS.md > "New @gjsify/* package: first-publish + Trusted`,` Publisher bootstrap"). The npm registry can also 404 *transiently*`,` while provisioning a brand-new package: simply re-run, or do the very`," first publish with `npm publish` (then configure the Trusted Publisher)."," 2. You lack publish access to the scope — verify with `npm access ls-packages`."].join(`
801
801
  `)}function formatUnknown(n,a){return`gjsify publish: ${n}@${a} — 404 Not Found`}function is404DiagnosticCandidate(n){let a=n.trim();return!!(a.length===0||/^not found$/i.test(a)||/"error"\s*:\s*"Not Found"/i.test(a))}As(),Tf(),Ho(),nE();async function loadNpmrc(n){let a=[],S=jo(n,`.npmrc`);existsSync(S)&&a.push(readFileSync(S,`utf-8`));let C=process.env.NPM_CONFIG_USERCONFIG;if(C&&existsSync(C))a.push(readFileSync(C,`utf-8`));else{let n=jo(homedir(),`.npmrc`);existsSync(n)&&a.push(readFileSync(n,`utf-8`))}return parseNpmrc(a.join(`
@@ -272,29 +272,91 @@ function walkAll(root, sub = '') {
272
272
  }
273
273
  function expandFilesPatterns(wsDir, patterns) {
274
274
  const out = new Set();
275
+ let allFiles = null;
275
276
  for (const pattern of patterns) {
276
- // Drop leading ./
277
+ // Drop leading ./ and trailing /
277
278
  const normalized = pattern.replace(/^\.\//, '').replace(/\/$/, '');
278
- const full = join(wsDir, normalized);
279
- if (!existsSync(full))
279
+ if (!normalized)
280
280
  continue;
281
- const st = statSync(full);
282
- if (st.isDirectory()) {
283
- for (const f of walkAll(wsDir, normalized))
281
+ // Literal file or directory (the common case: lib, dist, prebuilds).
282
+ if (!/[*?[\]]/.test(normalized)) {
283
+ const full = join(wsDir, normalized);
284
+ if (!existsSync(full))
285
+ continue;
286
+ const st = statSync(full);
287
+ if (st.isDirectory()) {
288
+ for (const f of walkAll(wsDir, normalized))
289
+ out.add(f);
290
+ }
291
+ else if (st.isFile()) {
292
+ out.add(normalized);
293
+ }
294
+ continue;
295
+ }
296
+ // Glob pattern (e.g. `lib/lib*.d.ts`, `dist/*.js`). Match every file in
297
+ // the tree against the pattern AND against `<pattern>/**` (npm semantics:
298
+ // a glob that resolves to a directory includes everything under it). `*`
299
+ // does not cross `/`; `**` does. This is what npm-packlist does — without
300
+ // it, `@gjsify/tsc`'s `files: ["lib/lib*.d.ts"]` shipped ZERO libs.
301
+ allFiles ??= walkAll(wsDir);
302
+ const fileRe = filesGlobToRegExp(normalized);
303
+ const dirRe = filesGlobToRegExp(`${normalized}/**`);
304
+ for (const f of allFiles) {
305
+ if (fileRe.test(f) || dirRe.test(f))
284
306
  out.add(f);
285
307
  }
286
- else if (st.isFile()) {
287
- out.add(normalized);
308
+ }
309
+ return [...out];
310
+ }
311
+ /**
312
+ * Translate an npm-`files`-style glob to an anchored RegExp. `*` matches any run
313
+ * of non-`/` chars, `**` matches across `/`, `?` one non-`/` char, `[…]` a class.
314
+ * All other regex metacharacters are escaped. Mirrors the subset of glob syntax
315
+ * npm-packlist accepts in the `files` field.
316
+ */
317
+ function filesGlobToRegExp(glob) {
318
+ let re = '^';
319
+ for (let i = 0; i < glob.length; i++) {
320
+ const c = glob[i];
321
+ if (c === '*') {
322
+ if (glob[i + 1] === '*') {
323
+ re += '.*';
324
+ i++;
325
+ if (glob[i + 1] === '/')
326
+ i++; // consume the `/` after `**`
327
+ }
328
+ else {
329
+ re += '[^/]*';
330
+ }
331
+ }
332
+ else if (c === '?') {
333
+ re += '[^/]';
288
334
  }
289
- // TODO: glob patterns (foo/*.js). Currently we treat the entry as a
290
- // literal file or directory. Most monorepos use file/dir entries only
291
- // (lib, dist, prebuilds) — globs are rare. Surface a warning if the
292
- // pattern contains glob chars and didn't resolve.
293
- if (!existsSync(full) && /[*?[]/.test(pattern)) {
294
- console.warn(`gjsify pack: files entry "${pattern}" looks like a glob but glob expansion isn't implemented — pass literal files/dirs`);
335
+ else if (c === '[') {
336
+ let j = i + 1;
337
+ let cls = '[';
338
+ if (glob[j] === '!') {
339
+ cls += '^';
340
+ j++;
341
+ }
342
+ for (; j < glob.length && glob[j] !== ']'; j++)
343
+ cls += glob[j];
344
+ if (j < glob.length) {
345
+ re += `${cls}]`;
346
+ i = j;
347
+ }
348
+ else {
349
+ re += '\\['; // unmatched `[` → literal
350
+ }
351
+ }
352
+ else if ('.+^${}()|\\]'.includes(c)) {
353
+ re += `\\${c}`;
354
+ }
355
+ else {
356
+ re += c;
295
357
  }
296
358
  }
297
- return [...out];
359
+ return new RegExp(`${re}$`);
298
360
  }
299
361
  function loadIgnore(wsDir) {
300
362
  // .npmignore takes precedence over .gitignore (npm semantics).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/cli",
3
- "version": "0.4.39",
3
+ "version": "0.4.40",
4
4
  "description": "CLI for Gjsify",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -120,19 +120,19 @@
120
120
  "cli"
121
121
  ],
122
122
  "dependencies": {
123
- "@gjsify/buffer": "^0.4.39",
124
- "@gjsify/create-app": "^0.4.39",
125
- "@gjsify/node-globals": "^0.4.39",
126
- "@gjsify/node-polyfills": "^0.4.39",
127
- "@gjsify/npm-registry": "^0.4.39",
128
- "@gjsify/resolve-npm": "^0.4.39",
129
- "@gjsify/rolldown-plugin-gjsify": "^0.4.39",
130
- "@gjsify/rolldown-plugin-pnp": "^0.4.39",
131
- "@gjsify/semver": "^0.4.39",
132
- "@gjsify/tar": "^0.4.39",
133
- "@gjsify/tsc": "^0.4.39",
134
- "@gjsify/web-polyfills": "^0.4.39",
135
- "@gjsify/workspace": "^0.4.39",
123
+ "@gjsify/buffer": "^0.4.40",
124
+ "@gjsify/create-app": "^0.4.40",
125
+ "@gjsify/node-globals": "^0.4.40",
126
+ "@gjsify/node-polyfills": "^0.4.40",
127
+ "@gjsify/npm-registry": "^0.4.40",
128
+ "@gjsify/resolve-npm": "^0.4.40",
129
+ "@gjsify/rolldown-plugin-gjsify": "^0.4.40",
130
+ "@gjsify/rolldown-plugin-pnp": "^0.4.40",
131
+ "@gjsify/semver": "^0.4.40",
132
+ "@gjsify/tar": "^0.4.40",
133
+ "@gjsify/tsc": "^0.4.40",
134
+ "@gjsify/web-polyfills": "^0.4.40",
135
+ "@gjsify/workspace": "^0.4.40",
136
136
  "cosmiconfig": "^9.0.1",
137
137
  "get-tsconfig": "^4.14.0",
138
138
  "pkg-types": "^2.3.1",
@@ -140,12 +140,12 @@
140
140
  "yargs": "^18.0.0"
141
141
  },
142
142
  "devDependencies": {
143
- "@gjsify/unit": "^0.4.39",
143
+ "@gjsify/unit": "^0.4.40",
144
144
  "@types/yargs": "^17.0.35",
145
145
  "typescript": "^6.0.3"
146
146
  },
147
147
  "peerDependencies": {
148
- "@gjsify/rolldown-native": "^0.4.39"
148
+ "@gjsify/rolldown-native": "^0.4.40"
149
149
  },
150
150
  "peerDependenciesMeta": {
151
151
  "@gjsify/rolldown-native": {