@gjsify/cli 0.4.26 → 0.4.27
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 +6 -6
- package/lib/actions/build.d.ts +8 -5
- package/lib/actions/build.js +17 -13
- package/lib/commands/build.js +1 -1
- 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}),Fe!==void 0&&(Z.loggingHost={log(n,a){switch(n){case 1:return Fe.error(a);case 2:return Fe.warn(a);case 3:return Fe.log(a);case 4:return Fe.log(a)}}})})({get exports(){return N},set exports(n){N=n,a!==void 0&&a.exports&&(a.exports=n)}})})),Fp=__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=(As(),__toCommonJS(Ds)),C=(ss(),__toCommonJS(is)),N=a((Ho(),__toCommonJS(Do))),F=(rn(),__toCommonJS(Qt)),I=(Ga(),__toCommonJS(Ua)),H;n.loadJsSync=function loadJsSync(n){return H===void 0&&(H=Ru()),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=Yu());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=(Jf(),__toCommonJS(Xu)));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=Pp());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(Pp()))).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}}})),Ip=__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=Fp();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})})),Lp=__commonJSMin(((n,a)=>{let S=(Ho(),__toCommonJS(Do)),C=(kp(),__toCommonJS(Sp)),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})),Rp=__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((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})),zp=__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(Lp()),C=a((kp(),__toCommonJS(Sp))),N=a((Ho(),__toCommonJS(Do))),F=Rp();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})),Bp=__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})),Vp=__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((ss(),__toCommonJS(is))),C=a((Ho(),__toCommonJS(Do))),N=Ip(),F=zp(),I=Bp(),H=Rp();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})),Hp=__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((As(),__toCommonJS(Ds))),C=a((Ho(),__toCommonJS(Do))),N=Ip(),F=zp(),I=Bp(),H=Rp();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})),Up=__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=Ip();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=Vp(),C=Hp(),N=Rp(),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 Wp=/^[A-Za-z]:\//;function normalizeWindowsPath(n=``){return n&&n.replace(/\\/g,`/`).replace(Wp,n=>n.toUpperCase())}const Gp=/^[/\\]{2}/,Kp=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,qp=/^[A-Za-z]:$/,normalize=function(n){if(n.length===0)return`.`;n=normalizeWindowsPath(n);let a=n.match(Gp),S=isAbsolute(n),C=n[n.length-1]===`/`;return n=normalizeString(n,!S),n.length===0?S?`/`:C?`./`:`.`:(C&&(n+=`/`),qp.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 Kp.test(n)},Jp=Symbol.for(`__confbox_fmt__`),Yp=/^(\s+)/,Xp=/(\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:Yp.exec(n)?.[0]||``,end:Xp.exec(n)?.[0]||``}}}__name$1(i$4,`i`);function a$4(n,a,S){!a||typeof a!=`object`||Object.defineProperty(a,Jp,{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 Zp;(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`})(Zp||={}),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
|
|
@@ -736,10 +736,10 @@ var S=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,N=Object.pr
|
|
|
736
736
|
`+a;let C=S[0],N=a.slice(C.length);return C+n+(N?`
|
|
737
737
|
`+N:``)}function processStubPlugin(n={}){let a=composeBanner((n.captureBundleUrl?`globalThis.__gjsifyBundleUrl??=import.meta.url;`:``)+`if(typeof globalThis.process==="undefined"){const _s=imports.system,_G=imports.gi.GLib;const _h=t=>t?[0,0]:[0,0];_h.bigint=()=>0n;globalThis.process={platform:"linux",arch:"x64",version:"v20.0.0",env:new Proxy({},{get(_,p){return typeof p==="string"?(_G.getenv(p)??undefined):undefined},set(_,p,v){if(typeof p==="string")_G.setenv(p,String(v),true);return true},has(_,p){return typeof p==="string"&&_G.getenv(p)!==null},deleteProperty(_,p){if(typeof p==="string")_G.unsetenv(p);return true},ownKeys(){return _G.listenv()??[]},getOwnPropertyDescriptor(_,p){const v=_G.getenv(p);return v!==null?{value:v,writable:true,enumerable:true,configurable:true}:undefined}}),argv:_s?.programArgs?["gjs",_s.programInvocationName||"",..._s.programArgs]:["gjs"],versions:{},config:{},cwd(){return _G.get_current_dir()||"/"},exit(c){_s.exit(c??0)},stderr:{write(s){printerr(s)}},stdout:{write(s){print(s)}},stdin:null,exitCode:undefined,nextTick(fn,...a){Promise.resolve().then(()=>fn(...a))},hrtime:_h,};}`,n.userBanner??``);return{name:`gjsify-process-stub`,renderChunk:{order:`post`,handler(n,S){return S.isEntry?{code:a+`
|
|
738
738
|
`+n,map:null}:null}}}}var NT=__commonJSMin(((n,a)=>{let isLinux=()=>process.platform===`linux`,S=null,getReport=()=>{if(!S)if(isLinux()&&process.report){let n=process.report.excludeNetwork;process.report.excludeNetwork=!0,S=process.report.getReport(),process.report.excludeNetwork=n}else S={};return S};a.exports={isLinux,getReport}})),PT=__commonJSMin(((n,a)=>{let S=(As(),__toCommonJS(Ds)),C=2048,readFileSync=n=>{let a=S.openSync(n,`r`),N=Buffer.alloc(C),F=S.readSync(a,N,0,C,0);return S.close(a,()=>{}),N.subarray(0,F)},readFile=n=>new Promise((a,N)=>{S.open(n,`r`,(n,F)=>{if(n)N(n);else{let n=Buffer.alloc(C);S.read(F,n,0,C,0,(C,N)=>{a(n.subarray(0,N)),S.close(F,()=>{})})}})});a.exports={LDD_PATH:`/usr/bin/ldd`,SELF_PATH:`/proc/self/exe`,readFileSync,readFile}})),FT=__commonJSMin(((n,a)=>{let interpreterPath=n=>{if(n.length<64||n.readUInt32BE(0)!==2135247942||n.readUInt8(4)!==2||n.readUInt8(5)!==1)return null;let a=n.readUInt32LE(32),S=n.readUInt16LE(54),C=n.readUInt16LE(56);for(let N=0;N<C;N++){let C=a+N*S;if(n.readUInt32LE(C)===3){let a=n.readUInt32LE(C+8),S=n.readUInt32LE(C+32);return n.subarray(a,a+S).toString().replace(/\0.*$/g,``)}}return null};a.exports={interpreterPath}})),IT=__commonJSMin(((n,a)=>{let S=(Hx(),__toCommonJS(zx)),{isLinux:C,getReport:N}=NT(),{LDD_PATH:F,SELF_PATH:I,readFile:H,readFileSync:W}=PT(),{interpreterPath:K}=FT(),q,Y,X,te=`getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true`,ne=``,safeCommand=()=>ne||new Promise(n=>{S.exec(te,(a,S)=>{ne=a?` `:S,n(ne)})}),safeCommandSync=()=>{if(!ne)try{ne=S.execSync(te,{encoding:`utf8`})}catch{ne=` `}return ne},re=`glibc`,ie=/LIBC[a-z0-9 \-).]*?(\d+\.\d+)/i,ae=`musl`,isFileMusl=n=>n.includes(`libc.musl-`)||n.includes(`ld-musl-`),familyFromReport=()=>{let n=N();return n.header&&n.header.glibcVersionRuntime?re:Array.isArray(n.sharedObjects)&&n.sharedObjects.some(isFileMusl)?ae:null},familyFromCommand=n=>{let[a,S]=n.split(/[\r\n]+/);return a&&a.includes(re)?re:S&&S.includes(ae)?ae:null},familyFromInterpreterPath=n=>{if(n){if(n.includes(`/ld-musl-`))return ae;if(n.includes(`/ld-linux-`))return re}return null},getFamilyFromLddContent=n=>(n=n.toString(),n.includes(`musl`)?ae:n.includes(`GNU C Library`)?re:null),familyFromFilesystem=async()=>{if(Y!==void 0)return Y;Y=null;try{Y=getFamilyFromLddContent(await H(F))}catch{}return Y},familyFromFilesystemSync=()=>{if(Y!==void 0)return Y;Y=null;try{Y=getFamilyFromLddContent(W(F))}catch{}return Y},familyFromInterpreter=async()=>{if(q!==void 0)return q;q=null;try{q=familyFromInterpreterPath(K(await H(I)))}catch{}return q},familyFromInterpreterSync=()=>{if(q!==void 0)return q;q=null;try{q=familyFromInterpreterPath(K(W(I)))}catch{}return q},family=async()=>{let n=null;return C()&&(n=await familyFromInterpreter(),n||(n=await familyFromFilesystem(),n||=familyFromReport(),n||=familyFromCommand(await safeCommand()))),n},familySync=()=>{let n=null;return C()&&(n=familyFromInterpreterSync(),n||(n=familyFromFilesystemSync(),n||=familyFromReport(),n||=familyFromCommand(safeCommandSync()))),n},isNonGlibcLinux=async()=>C()&&await family()!==re,isNonGlibcLinuxSync=()=>C()&&familySync()!==re,versionFromFilesystem=async()=>{if(X!==void 0)return X;X=null;try{let n=(await H(F)).match(ie);n&&(X=n[1])}catch{}return X},versionFromFilesystemSync=()=>{if(X!==void 0)return X;X=null;try{let n=W(F).match(ie);n&&(X=n[1])}catch{}return X},versionFromReport=()=>{let n=N();return n.header&&n.header.glibcVersionRuntime?n.header.glibcVersionRuntime:null},versionSuffix=n=>n.trim().split(/\s+/)[1],versionFromCommand=n=>{let[a,S,C]=n.split(/[\r\n]+/);return a&&a.includes(re)?versionSuffix(a):S&&C&&S.includes(ae)?versionSuffix(C):null},version=async()=>{let n=null;return C()&&(n=await versionFromFilesystem(),n||=versionFromReport(),n||=versionFromCommand(await safeCommand())),n},versionSync=()=>{let n=null;return C()&&(n=versionFromFilesystemSync(),n||=versionFromReport(),n||=versionFromCommand(safeCommandSync())),n};a.exports={GLIBC:re,MUSL:ae,family,familySync,isNonGlibcLinux,isNonGlibcLinuxSync,version,versionSync}})),LT=__commonJSMin(((n,a)=>{let S={and_chr:`chrome`,and_ff:`firefox`,ie_mob:`ie`,op_mob:`opera`,and_qq:null,and_uc:null,baidu:null,bb:null,kaios:null,op_mini:null};function browserslistToTargets(n){let a={};for(let C of n){let[n,N]=C.split(` `);if(S[n]===null)continue;let F=parseVersion(N);F!=null&&(a[n]==null||F<a[n])&&(a[n]=F)}return a}function parseVersion(n){let[a,S=0,C=0]=n.split(`-`)[0].split(`.`).map(n=>parseInt(n,10));return isNaN(a)||isNaN(S)||isNaN(C)?null:a<<16|S<<8|C}a.exports=browserslistToTargets})),RT=__commonJSMin(((n,a)=>{function composeVisitors(n){if(n.length===1)return n[0];if(n.some(n=>typeof n==`function`))return a=>composeVisitors(n.map(n=>typeof n==`function`?n(a):n));let a={};return composeSimpleVisitors(a,n,`StyleSheet`),composeSimpleVisitors(a,n,`StyleSheetExit`),composeObjectVisitors(a,n,`Rule`,ruleVisitor,wrapCustomAndUnknownAtRule),composeObjectVisitors(a,n,`RuleExit`,ruleVisitor,wrapCustomAndUnknownAtRule),composeObjectVisitors(a,n,`Declaration`,declarationVisitor,wrapCustomProperty),composeObjectVisitors(a,n,`DeclarationExit`,declarationVisitor,wrapCustomProperty),composeSimpleVisitors(a,n,`Url`),composeSimpleVisitors(a,n,`Color`),composeSimpleVisitors(a,n,`Image`),composeSimpleVisitors(a,n,`ImageExit`),composeSimpleVisitors(a,n,`Length`),composeSimpleVisitors(a,n,`Angle`),composeSimpleVisitors(a,n,`Ratio`),composeSimpleVisitors(a,n,`Resolution`),composeSimpleVisitors(a,n,`Time`),composeSimpleVisitors(a,n,`CustomIdent`),composeSimpleVisitors(a,n,`DashedIdent`),composeArrayFunctions(a,n,`MediaQuery`),composeArrayFunctions(a,n,`MediaQueryExit`),composeSimpleVisitors(a,n,`SupportsCondition`),composeSimpleVisitors(a,n,`SupportsConditionExit`),composeArrayFunctions(a,n,`Selector`),composeTokenVisitors(a,n,`Token`,`token`,!1),composeTokenVisitors(a,n,`Function`,`function`,!1),composeTokenVisitors(a,n,`FunctionExit`,`function`,!0),composeTokenVisitors(a,n,`Variable`,`var`,!1),composeTokenVisitors(a,n,`VariableExit`,`var`,!0),composeTokenVisitors(a,n,`EnvironmentVariable`,`env`,!1),composeTokenVisitors(a,n,`EnvironmentVariableExit`,`env`,!0),a}a.exports=composeVisitors;function wrapCustomAndUnknownAtRule(n,a){return n===`unknown`?(n=>a({type:`unknown`,value:n})):n===`custom`?(n=>a({type:`custom`,value:n})):a}function wrapCustomProperty(n,a){return n===`custom`?(n=>a({property:`custom`,value:n})):a}function ruleVisitor(n,a){if(typeof n==`object`){if(a.type===`unknown`){let S=n.unknown;return typeof S==`object`&&(S=S[a.value.name]),S?.(a.value)}if(a.type===`custom`){let S=n.custom;return typeof S==`object`&&(S=S[a.value.name]),S?.(a.value)}return n[a.type]?.(a)}return n?.(a)}function declarationVisitor(n,a){if(typeof n==`object`){let S=a.property;if(a.property===`unparsed`)S=a.value.propertyId.property;else if(a.property===`custom`){let S=n.custom;return typeof S==`object`&&(S=S[a.value.name]),S?.(a.value)}return n[S]?.(a)}return n?.(a)}function extractObjectsOrFunctions(n,a){let S=[],C=!1,N=new Set;for(let F of n){let n=F[a];if(n){if(typeof n==`function`)C=!0;else for(let a in n)N.add(a);S.push(n)}}return[S,C,N]}function composeObjectVisitors(n,a,S,C,N){let[F,I,H]=extractObjectsOrFunctions(a,S);if(F.length===0)return;if(F.length===1){n[S]=F[0];return}let W=createArrayVisitor(a,(n,a)=>C(n[S],a));if(I)n[S]=W;else{let a={};for(let n of H)a[n]=N(n,W);n[S]=a}}function composeTokenVisitors(n,a,S,C,N){let[F,I,H]=extractObjectsOrFunctions(a,S);if(F.length===0)return;if(F.length===1){n[S]=F[0];return}let W=createTokenVisitor(a,C,N);if(I)n[S]=W;else{let a={};for(let n of H)a[n]=W;n[S]=a}}function createTokenVisitor(n,a,S){let C=createArrayVisitor(n,(n,a)=>{let C;switch(a.type){case`token`:C=n.Token,typeof C==`object`&&(C=C[a.value.type]);break;case`function`:C=S?n.FunctionExit:n.Function,typeof C==`object`&&(C=C[a.value.name]);break;case`var`:C=S?n.VariableExit:n.Variable;break;case`env`:if(C=S?n.EnvironmentVariableExit:n.EnvironmentVariable,typeof C==`object`){let n;switch(a.value.name.type){case`ua`:case`unknown`:n=a.value.name.value;break;case`custom`:n=a.value.name.ident;break}C=C[n]}break;case`color`:C=n.Color;break;case`url`:C=n.Url;break;case`length`:C=n.Length;break;case`angle`:C=n.Angle;break;case`time`:C=n.Time;break;case`resolution`:C=n.Resolution;break;case`dashed-ident`:C=n.DashedIdent;break}if(!C)return;let N=C(a.value);switch(a.type){case`color`:case`url`:case`length`:case`angle`:case`time`:case`resolution`:case`dashed-ident`:Array.isArray(N)?N=N.map(n=>({type:a.type,value:n})):N&&={type:a.type,value:N};break}return N});return n=>C({type:a,value:n})}function extractFunctions(n,a){let S=[];for(let C of n){let n=C[a];n&&S.push(n)}return S}function composeSimpleVisitors(n,a,S){let C=extractFunctions(a,S);if(C.length!==0){if(C.length===1){n[S]=C[0];return}n[S]=n=>{let a=!1;for(let S of C){let C=S(n);C&&(n=C,a=!0)}return a?n:void 0}}}function composeArrayFunctions(n,a,S){let C=extractFunctions(a,S);if(C.length!==0){if(C.length===1){n[S]=C[0];return}n[S]=createArrayVisitor(C,(n,a)=>n(a))}}function createArrayVisitor(n,a){let S=new Bitset(n.length);return C=>{let N=[C],F=!1;S.clear();for(let C=0;C<N.length;C++)for(let I=0;I<n.length&&C<N.length;){if(S.get(I)){I++;continue}let H=N[C],W=n[I],K=a(W,H);Array.isArray(K)?(K.length===0?N.splice(C,1):K.length===1?N[C]=K[0]:N.splice(C,1,...K),F=!0,S.set(I),I=0):K?(N[C]=K,F=!0,S.set(I),I=0):I++}if(F)return N.length===1?N[0]:N}}var Bitset=class{constructor(n=32){this.bits=0,this.more=n>32?new Uint32Array(Math.ceil((n-32)/32)):null}get(n){if(n>=32&&this.more){let a=Math.floor((n-32)/32),S=n%32;return!!(this.more[a]&1<<S)}else return!!(this.bits&1<<n)}set(n){if(n>=32&&this.more){let a=Math.floor((n-32)/32),S=n%32;this.more[a]|=1<<S}else this.bits|=1<<n}clear(){this.bits=0,this.more&&this.more.fill(0)}}})),zT=__commonJSMin((n=>{n.Features={Nesting:1,NotSelectorList:2,DirSelector:4,LangSelectorList:8,IsSelector:16,TextDecorationThicknessPercent:32,MediaIntervalSyntax:64,MediaRangeSyntax:128,CustomMediaQueries:256,ClampFunction:512,ColorFunction:1024,OklabColors:2048,LabColors:4096,P3Colors:8192,HexAlphaColors:16384,SpaceSeparatedColorNotation:32768,FontFamilySystemUi:65536,DoublePositionGradients:131072,VendorPrefixes:262144,LogicalProperties:524288,LightDark:1048576,Selectors:31,MediaQueries:448,Colors:1113088}})),BT=__commonJSMin(((n,a)=>{let S=[process.platform,process.arch];if(process.platform===`linux`){let{MUSL:n,familySync:a}=IT();a()===n?S.push(`musl`):process.arch===`arm`?S.push(`gnueabihf`):S.push(`gnu`)}else process.platform===`win32`&&S.push(`msvc`);let C;try{C=K(`lightningcss-${S.join(`-`)}`)}catch{C=K(`../lightningcss.${S.join(`-`)}.node`)}a.exports.transform=wrap(C.transform),a.exports.transformStyleAttribute=wrap(C.transformStyleAttribute),a.exports.bundle=wrap(C.bundle),a.exports.bundleAsync=wrap(C.bundleAsync),a.exports.browserslistToTargets=LT(),a.exports.composeVisitors=RT(),a.exports.Features=zT().Features;function wrap(n){return a=>{if(typeof a.visitor==`function`){let S=[];a.visitor=a.visitor({addDependency(n){S.push(n)}});let C=n(a);return C instanceof Promise?C=C.then(n=>(S.length&&(n.dependencies??=[],n.dependencies.push(...S)),n)):S.length&&(C.dependencies??=[],C.dependencies.push(...S)),C}else return n(a)}}})),VT=__exportAll$3({Features:()=>YT,browserslistToTargets:()=>qT,bundle:()=>GT,bundleAsync:()=>KT,composeVisitors:()=>JT,transform:()=>UT,transformStyleAttribute:()=>WT}),HT,UT,WT,GT,KT,qT,JT,YT,XT=__esmMin(()=>{HT=__toESM(BT(),1),{transform:UT,transformStyleAttribute:WT,bundle:GT,bundleAsync:KT,browserslistToTargets:qT,composeVisitors:JT,Features:YT}=HT.default});ss(),zs(),Ho(),rn();let ZT=null;async function pickBundler(){let n=globalThis.process?.env?.GJSIFY_CSS_BACKEND;if(n===`npm`)return loadNpmBundler();if(n===`native`){let n=await tryLoadNativeBundler();if(!n)throw Error(`GJSIFY_CSS_BACKEND=native but @gjsify/lightningcss-native is not loadable`);return n}return await tryLoadNativeBundler()??loadNpmBundler()}async function tryLoadNativeBundler(){if(globalThis.imports?.gi===void 0)return null;try{let n=await import(`@gjsify/lightningcss-native`);return n.hasNativeLightningcss()?async(a,S)=>{let C=targetsToBrowserslist(S);return n.bundle({filename:a,targets:C,minify:!1,sourceMap:!1,errorRecovery:!0})}:null}catch{return null}}async function loadNpmBundler(){let{bundleAsync:n}=await Promise.resolve().then(()=>(XT(),VT));return async(a,S)=>({code:(await n({filename:a,targets:S,minify:!1,errorRecovery:!0,resolver:QT})).code})}const QT={resolve(n,a){return Ao(n)?n:n.startsWith(`./`)||n.startsWith(`../`)?Oo(Po(a),n):createRequire(pathToFileURL(a).href).resolve(n)}};function targetsToBrowserslist(n){if(!n)return;let a=[];for(let[S,C]of Object.entries(n)){if(typeof C!=`number`)continue;let n=C>>>16&255;if(n===0)continue;let N=S===`ios_saf`?`ios`:S;a.push(`${N} >= ${n}`)}return a.length?a.join(`, `):void 0}function cssAsStringPlugin(n={}){let{targets:a,bundle:S=!0}=n;return{name:`gjsify-css-as-string`,load:{filter:{id:/\.css$/},async handler(n){let C=S?new TextDecoder(`utf-8`).decode(await loadAndBundleCss(n,a)):await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(C)};`,moduleType:`js`}}}}}async function loadAndBundleCss(n,a){ZT||=pickBundler();let{code:S}=await(await ZT)(n,a);return S}const $T=/^#![^\n]*\n/;function inputShebangStripPlugin(){return{name:`gjsify-input-shebang-strip`,transform:{order:`pre`,handler(n){return n.startsWith(`#!`)?{code:n.replace($T,``),map:null}:null}}}}function shebangPlugin(n={}){if(!n.enabled)return null;let a=n.line??`#!/usr/bin/env -S gjs -m`;return{name:`gjsify-shebang`,renderChunk:{order:`post`,handler(n,S){return!S.isEntry||n.startsWith(`#!`)?null:{code:a+`
|
|
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){if(n===void 0||n===!1)return null;if(n===!0)return
|
|
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 setupForNode=async n=>{let a=n.userExternal??[],S=[...rg,`node-datachannel`,...a],external=n=>!!(n.startsWith(`gi://`)||n.startsWith(`@girs/`)||S.includes(n)),C=n.pluginOptions.format??`esm`,N=n.pluginOptions.exclude??[],F=await globToEntryPoints(n.input,N),I={...getAliasesForNode({external}),...n.pluginOptions.aliases??{},...n.userAliases??{}},H=getBundleDirFromOutput(n.output);return{options:{input:F,platform:`node`,external,resolve:{mainFields:C===`esm`?[`module`,`main`,`browser`]:[`main`,`module`,`browser`],conditionNames:C===`esm`?[`require`,`node`,`module`]:[`require`]},transform:{target:`node24`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:C,sourcemap:!1,banner:void 0,codeSplitting:!1},treeshake:!0},plugins:[aliasPlugin({entries:flattenAliases$2(I)}),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin(),nodeModulesPathRewritePlugin({bundleDir:H})]}};function flattenAliases$2(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$2,`flattenAliases`);const tE=`\0gjsify-empty-gjs-import`;function gjsImportsEmptyPlugin(){return{name:`gjsify-gjs-imports-empty`,resolveId:{order:`pre`,filter:{id:/^(@girs\/|gi:\/\/)/},handler(n){return{id:tE}}},load(n){return n===tE?{code:`export {}; export default {};`,moduleSideEffects:!1}:null}}}const setupForBrowser=async n=>{let a=[...n.userExternal??[]],S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N={process:`@gjsify/empty`,"node:process":`@gjsify/empty`,assert:`@gjsify/assert`,"node:assert":`@gjsify/assert`,...n.pluginOptions.aliases??{},...n.userAliases??{}};return{options:{input:C,platform:`browser`,external:a,resolve:{mainFields:[`browser`,`module`,`main`],conditionNames:[`import`,`browser`]},transform:{target:`esnext`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:`esm`,sourcemap:!1,codeSplitting:!1},treeshake:!0},plugins:[gjsImportsEmptyPlugin(),aliasPlugin({entries:flattenAliases$1(N)}),blueprintPlugin(),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin()]}};function flattenAliases$1(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$1,`flattenAliases`);const setupLib=async n=>{let a=n.pluginOptions.format??n.pluginOptions.library??`esm`,S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N=computeCommonRoot(C),F={...n.pluginOptions.aliases??{},...n.userAliases??{}},external=n=>!(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`));return{options:{input:C,platform:`neutral`,external,resolve:{mainFields:a===`esm`?[`module`,`main`]:[`main`],conditionNames:a===`esm`?[`module`,`import`]:[`require`]},transform:{target:`esnext`},output:{...n.output,format:a,preserveModules:!0,preserveModulesRoot:N,sourcemap:!1},treeshake:!1},plugins:[aliasPlugin({entries:flattenAliases(F)}),cssAsStringPlugin()]}};function computeCommonRoot(n){let a=n===void 0?[]:typeof n==`string`?[n]:Array.isArray(n)?n:Object.values(n);if(a.length===0)return`src`;let S=a.map(n=>n.split(`/`).filter(Boolean)),C=S[0],N=0;for(;N<C.length;N++){let n=C[N];if(!S.every(a=>a[N]===n))break}if(N===0)return`src`;let F=C.slice(0,N);return S.some(n=>n.length>N)?F.join(`/`):F.slice(0,-1).join(`/`)||`src`}function flattenAliases(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}ss();function textLoaderPlugin(n={}){let a=Object.entries(n.loaders??{}).filter(([,n])=>n===`text`).map(([n])=>n);if(a.length===0)return null;let S=a.map(n=>n.replace(/^\./,``).replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)),C=RegExp(`\\.(?:${S.join(`|`)})$`);return{name:`gjsify-text-loader`,async load(n){if(!C.test(n))return null;let a=await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(a)};`,moduleType:`js`}}}}const gjsifyPlugin=async(n,a={})=>{if(a.library)switch(a.library){case`esm`:case`cjs`:return await setupLib({input:n.input,output:n.output,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown library type: `+a.library)}let S=a.app??`gjs`;switch(S){case`gjs`:return await setupForGjs({input:n.input,output:n.output,userExternal:n.userExternal,userBanner:n.userBanner,userAliases:n.userAliases,shebang:n.shebang,pluginOptions:a});case`node`:return await setupForNode({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});case`browser`:return await setupForBrowser({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown app platform: `+S)}};zs(),Ho(),rn();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(jo(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}Ie();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()}},nE=Ey;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=nE[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(()=>(As(),Ds))).writeFileSync(S,a),Fe.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))`:``;Fe.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();Fe.debug(`[gjsify] --globals auto: iteration ${Y}, ${W.size} global(s)${n.length?`: `+n.join(`, `):``}`)}}return C&&Fe.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}}zs(),rn(),Ho(),As(),ss();function findPnpRoot(n){let a=n;for(;;){if(existsSync(jo(a,`.pnp.cjs`)))return a;let n=Po(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`}Ie();let rE=!1;function normalizeBundlerOptions(n){let a=n.bundler??{};if(!n.esbuild)return a;rE||(rE=!0,Fe.warn(`[gjsify] DEPRECATION: the 'esbuild' config key is deprecated and will be removed in 0.5.0. Rename it to 'bundler' (typed as RolldownOptions). See the migration notes in the gjsify CHANGELOG.`));let S=legacyEsbuildToRolldown(n.esbuild),C={...S,...a};return(S.output||a.output)&&(C.output={...S.output??{},...a.output??{}}),(S.transform||a.transform)&&(C.transform={...S.transform??{},...a.transform??{}},(S.transform?.define||a.transform?.define)&&(C.transform.define={...S.transform?.define??{},...a.transform?.define??{}})),(S.resolve||a.resolve)&&(C.resolve={...S.resolve??{},...a.resolve??{}}),C}function legacyEsbuildToRolldown(n){let a={},S={},C={},N={};return n.outfile!==void 0&&(S.file=n.outfile),n.outdir!==void 0&&(S.dir=n.outdir),n.format!==void 0&&(S.format=n.format),n.minify!==void 0&&(S.minify=n.minify),n.sourcemap!==void 0&&(S.sourcemap=n.sourcemap===`inline`?`inline`:!!n.sourcemap),n.banner?.js!==void 0&&(S.banner=n.banner.js),n.target!==void 0&&(C.target=Array.isArray(n.target)?n.target.join(`,`):n.target),n.define!==void 0&&(C.define=n.define),n.mainFields!==void 0&&(N.mainFields=n.mainFields),n.conditions!==void 0&&(N.conditionNames=n.conditions),n.external!==void 0&&(a.external=n.external),n.platform!==void 0&&(a.platform=n.platform),Object.keys(S).length>0&&(a.output=S),Object.keys(C).length>0&&(a.transform=C),Object.keys(N).length>0&&(a.resolve=N),a}function mergeBundlerOptions(n,a){let{input:S,external:C,...N}=a,F={...n,...N};return(n.output||a.output)&&(F.output={...n.output??{},...a.output??{}}),(n.transform||a.transform)&&(F.transform={...n.transform??{},...a.transform??{}},(n.transform?.define||a.transform?.define)&&(F.transform.define={...n.transform?.define??{},...a.transform?.define??{}})),(n.resolve||a.resolve)&&(F.resolve={...n.resolve??{},...a.resolve??{}}),F}Ie(),Ho(),ss();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?Po(F.module):void 0,W=F.main?Po(F.main):void 0,K=F.module?Io(F.module):`.js`,q=F.main?Io(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?Io(a):`.js`,W=I.output?.dir??(a?Po(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&&Fe.debug(`[gjsify] globals: injected ${C.size} register module(s) from --globals ${a}`),N??void 0}async applyShebang(n,a){if(!n){a&&Fe.warn(`[gjsify] --shebang skipped: no single outfile (use --outfile for GJS executables)`);return}let S=resolveShebangLine(this.configData.shebang)??`#!/usr/bin/env -S gjs -m`,C=await readFile$1(n,`utf-8`);C.startsWith(`#!`)?a&&Fe.debug(`[gjsify] --shebang skipped: ${n} already starts with a shebang`):await writeFile$1(n,S+`
|
|
741
|
-
`+
|
|
742
|
-
[gjsify build --watch] stopping watcher…`);try{await N.close()}catch(n){Fe.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&&Fe.log(`[gjsify build --watch] rebuild start`);break;case`BUNDLE_START`:Fe.log(`[gjsify build --watch] building…`);break;case`BUNDLE_END`:Fe.log(`[gjsify build --watch] built in ${n.duration}ms`);try{a===`gjs`&&this.configData.shebang&&await this.applyShebang(S,C)}finally{await n.result.close()}break;case`END`:Fe.log(`[gjsify build --watch] waiting for changes…`);break;case`ERROR`:Fe.error(`[gjsify build --watch] build failed:`,n.error?.message??n.error),C&&n.error?.stack&&Fe.error(n.error.stack);try{await n.result.close()}catch{}break}}),C&&N.on(`change`,(n,a)=>{Fe.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 iE={command:`build [entryPoints..]`,description:`Build and bundle your Gjs project`,builder:n=>n.option(`entry-points`,{description:`The entry points you want to bundle. Defaults to bundler.input from package.json#gjsify or .gjsifyrc.js, falling back to src/index.ts when neither is set.`,array:!0,type:`string`,normalize:!0,defaultDescription:`src/index.ts (fallback)`,coerce:n=>[...new Set(n)]}).option(`exclude`,{description:`An array of glob patterns to exclude entry-points and aliases`,array:!0,type:`string`,normalize:!0,default:[]}).option(`verbose`,{description:`Switch on the verbose mode`,type:`boolean`,normalize:!0,default:!1}).option(`app`,{description:`Use this if you want to build an application, the platform node is usually only used for tests`,type:`string`,choices:[`gjs`,`node`,`browser`],normalize:!0,default:`gjs`}).option(`format`,{description:`Override the default output format`,type:`string`,choices:[`iife`,`esm`,`cjs`],normalize:!0}).option(`minify`,{description:`Minify the bundled output. Defaults to true; use --no-minify to emit pretty-printed code (e.g. for debugging or readable bundle review).`,type:`boolean`,normalize:!0,defaultDescription:`true`}).option(`library`,{description:`Use this if you want to build a library for Gjsify`,type:`boolean`,normalize:!0,default:!1}).option(`outfile`,{alias:`o`,description:`Sets the output file name for the build operation. If no outfile is specified, the outfile will be parsed from the package.json. Only used if application mode is active`,type:`string`,normalize:!0}).option(`outdir`,{alias:`d`,description:`Sets the output directory for the build operation. If no outdir is specified, the outdir will be parsed from the package.json. Only used if library mode is active`,type:`string`,normalize:!0}).option(`reflection`,{alias:`r`,description:`Enables TypeScript types on runtime using Deepkit's type compiler`,type:`boolean`,normalize:!0,default:!1}).option(`log-level`,{description:`The log level can be changed to prevent esbuild from printing warning and/or error messages to the terminal`,type:`string`,choices:[`silent`,`error`,`warning`,`info`,`debug`,`verbose`],normalize:!0,default:`warning`}).option(`console-shim`,{description:`Inject a console shim into GJS builds for clean output without the GLib prefix and with working ANSI colors. Use --no-console-shim to disable. Only applies to GJS app builds.`,type:`boolean`,normalize:!0,default:!0}).option(`globals`,{description:"Comma-separated list of global identifiers, 'auto' (default) to detect automatically from the bundled output, or 'none' to disable. The 'auto' token may be combined with explicit identifiers/groups (e.g. 'auto,dom') for cases where the detector cannot statically see a global because it's accessed via indirection. Each identifier is mapped to the corresponding `@gjsify/<pkg>/register` module and injected into the bundle. See the CLI Reference docs for the full list of known identifiers. Only applies to GJS app builds.",type:`string`,normalize:!0,default:`auto`}).option(`shebang`,{description:"Prepend a `#!/usr/bin/env -S gjs -m` shebang to the output and mark it executable (chmod 755). Only applies to GJS app builds with a single --outfile. Default: false (use --shebang to enable, or set `shebang: true` in `.gjsifyrc.js`).",type:`boolean`,normalize:!0}).option(`external`,{description:`Module names that should NOT be bundled. Repeat the flag or pass a comma-separated list (e.g. --external typedoc,prettier). Globs are forwarded to esbuild as-is. See https://esbuild.github.io/api/#external`,array:!0,type:`string`,default:[],coerce:n=>n.flatMap(n=>n.split(`,`).map(n=>n.trim()).filter(Boolean))}).option(`define`,{description:`Substitute compile-time constants. Each entry is KEY=VALUE where VALUE is a JS expression (string literals must be quoted: --define VERSION='"1.2.3"'). Repeat the flag or pass comma-separated. See https://esbuild.github.io/api/#define`,array:!0,type:`string`,default:[]}).option(`alias`,{description:`Map module specifiers at bundle time. Each entry is FROM=TO (e.g. --alias typedoc=@gjsify/empty). Layered on top of the built-in alias map. Useful for stubbing heavy deps the test scenario never executes.`,array:!0,type:`string`,default:[],coerce:n=>n.flatMap(n=>n.split(`,`).map(n=>n.trim()).filter(Boolean))}).option(`exclude-globals`,{description:`Comma-separated global identifiers to remove from auto-detection results. Use for false positives from dead browser-compat code whose polyfills require unavailable native libraries (e.g. --exclude-globals fetch,XMLHttpRequest).`,type:`string`,normalize:!0}).option(`watch`,{alias:`w`,description:"Watch source files and rebuild on change. Logs each rebuild with duration; clean SIGINT shutdown. Only valid with --app gjs|node|browser (rejected with --library). Requires the npm `rolldown` engine — run under Node, not the GJS-bundled CLI.",type:`boolean`,normalize:!0,default:!1}),handler:async n=>{await new BuildAction(await new Config().forBuild(n)).start({library:n.library,app:n.app,watch:n.watch})}};As(),Ho();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=jo(n,N),F;try{F=readdirSync(C)}catch{continue}for(let n of F){let F=checkPackage(jo(C,n),`${N}/${n}`,a);F&&S.push(F)}}else{let C=checkPackage(jo(n,N),N,a);C&&S.push(C)}return S}function checkPackage(n,a,S){let C=readPackageJson$4(jo(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=jo(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=Oo(n);for(;;){let n=jo(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=Oo(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(`:`)}}Ie(),Hx(),Ho();function computeNativeEnvForBundle(n,a=process.cwd()){let S=Oo(n),C=detectNativePackages(a),N=detectNativePackages(Po(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(` `);Fe.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=>{Fe.error(n.message),process.exit(1)})}Ie(),As(),Ho(),Hx();const aE={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=Oo(a,n.entry??S.entry??`src/test.mts`),N=Oo(a,n.outdir??S.outdir??`dist`);existsSync(C)||(Fe.error(`[gjsify test] no test entry at ${Mo(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=jo(N,`test.${S}.mjs`);if(n.build!==!1)if(n.rebuild||!isFresh(F,C,a)){let N=Date.now();n.verbose&&Fe.log(`[gjsify test] building → ${Mo(a,F)} (—app ${S})`);try{await buildTestBundle(C,F,S,n.verbose),n.verbose&&Fe.log(`[gjsify test] built ${S} in ${Date.now()-N}ms`)}catch(n){Fe.error(`[gjsify test] build failed for ${S}:`,n.message),I.push({runtime:S,ok:!1,durationMs:0,error:`build failed`});continue}}else n.verbose&&Fe.log(`[gjsify test] ${S}: bundle is up-to-date — skipping build (use --rebuild to force)`);else if(!existsSync(F)){Fe.error(`[gjsify test] --no-build but ${Mo(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(` `);Fe.log(`[gjsify test] ${H}`),I.some(n=>!n.ok)&&process.exit(1)}};async function buildTestBundle(n,a,S,C){let N=await new Config().forBuild({entryPoints:[n],outfile:a,app:S,verbose:C??!1,logLevel:`warning`,exclude:[]});N.library={...N.library??{}},N.bundler={...N.bundler??{},input:[n],output:{...N.bundler?.output??{},file:a}},await new BuildAction(N).start({app:S,library:!1})}async function runTestBundle(n,a){if(a===`gjs`){await runGjsBundle(n);return}await new Promise((a,S)=>{let C=spawn(`node`,[n],{stdio:`inherit`});C.on(`error`,S),C.on(`exit`,n=>{n===0?a():S(Error(`node exited with code ${n}`))})})}function isFresh(n,a,S){if(!existsSync(n))return!1;let C=statSync(n).mtimeMs,N=Po(a);try{return C>=newestMtimeUnder(existsSync(N)?N:a)}catch{return!1}}function newestMtimeUnder(n){let a=statSync(n);if(a.isFile())return a.mtimeMs;let S=a.mtimeMs;for(let a of readdirSync(n,{withFileTypes:!0})){if(a.name===`node_modules`||a.name===`dist`||a.name===`lib`||a.name.startsWith(`.`))continue;let C=newestMtimeUnder(jo(n,a.name));C>S&&(S=C)}return S}As();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)+`
|
|
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}rn(),Ho();const eE=Po(fileURLToPath(import.meta.url));function resolveConsoleShim(){let n=Oo(eE,`../shims/console-gjs.js`),a=null;try{a=(As(),__toCommonJS(Ds))}catch{return n}if(a.existsSync(n))return n;try{return(zs(),__toCommonJS(Fs)).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=Oo(eE,`../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
|
+
`),I=new Set;return{input:N,plugin:{name:`gjsify-virtual-entry`,async resolveId(n,a){return n.startsWith(C)?n:I.has(n)?{id:n,moduleSideEffects:`no-treeshake`}:null},async load(n){if(!n.startsWith(C))return null;let a=S.get(n);if(!a)return null;let N=(await this.resolve(a,void 0,{skipSelf:!0}))?.id??a;return I.add(N),{code:`${F}\nimport ${JSON.stringify(N)};\nexport * from ${JSON.stringify(N)};\n`,moduleSideEffects:`no-treeshake`}}}}}function flattenAliases$3(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$3,`flattenAliases`);const setupForNode=async n=>{let a=n.userExternal??[],S=[...rg,`node-datachannel`,...a],external=n=>!!(n.startsWith(`gi://`)||n.startsWith(`@girs/`)||S.includes(n)),C=n.pluginOptions.format??`esm`,N=n.pluginOptions.exclude??[],F=await globToEntryPoints(n.input,N),I={...getAliasesForNode({external}),...n.pluginOptions.aliases??{},...n.userAliases??{}},H=getBundleDirFromOutput(n.output);return{options:{input:F,platform:`node`,external,resolve:{mainFields:C===`esm`?[`module`,`main`,`browser`]:[`main`,`module`,`browser`],conditionNames:C===`esm`?[`require`,`node`,`module`]:[`require`]},transform:{target:`node24`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:C,sourcemap:!1,banner:void 0,codeSplitting:!1},treeshake:!0},plugins:[aliasPlugin({entries:flattenAliases$2(I)}),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin(),nodeModulesPathRewritePlugin({bundleDir:H})]}};function flattenAliases$2(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$2,`flattenAliases`);const tE=`\0gjsify-empty-gjs-import`;function gjsImportsEmptyPlugin(){return{name:`gjsify-gjs-imports-empty`,resolveId:{order:`pre`,filter:{id:/^(@girs\/|gi:\/\/)/},handler(n){return{id:tE}}},load(n){return n===tE?{code:`export {}; export default {};`,moduleSideEffects:!1}:null}}}const setupForBrowser=async n=>{let a=[...n.userExternal??[]],S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N={process:`@gjsify/empty`,"node:process":`@gjsify/empty`,assert:`@gjsify/assert`,"node:assert":`@gjsify/assert`,...n.pluginOptions.aliases??{},...n.userAliases??{}};return{options:{input:C,platform:`browser`,external:a,resolve:{mainFields:[`browser`,`module`,`main`],conditionNames:[`import`,`browser`]},transform:{target:`esnext`,define:{global:`globalThis`,window:`globalThis`}},output:{...n.output,format:`esm`,sourcemap:!1,codeSplitting:!1},treeshake:!0},plugins:[gjsImportsEmptyPlugin(),aliasPlugin({entries:flattenAliases$1(N)}),blueprintPlugin(),deepkitPlugin({reflection:n.pluginOptions.reflection}),cssAsStringPlugin()]}};function flattenAliases$1(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}__name$1(flattenAliases$1,`flattenAliases`);const setupLib=async n=>{let a=n.pluginOptions.format??n.pluginOptions.library??`esm`,S=n.pluginOptions.exclude??[],C=await globToEntryPoints(n.input,S),N=computeCommonRoot(C),F={...n.pluginOptions.aliases??{},...n.userAliases??{}},external=n=>!(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`));return{options:{input:C,platform:`neutral`,external,resolve:{mainFields:a===`esm`?[`module`,`main`]:[`main`],conditionNames:a===`esm`?[`module`,`import`]:[`require`]},transform:{target:`esnext`},output:{...n.output,format:a,preserveModules:!0,preserveModulesRoot:N,sourcemap:!1},treeshake:!1},plugins:[aliasPlugin({entries:flattenAliases(F)}),cssAsStringPlugin()]}};function computeCommonRoot(n){let a=n===void 0?[]:typeof n==`string`?[n]:Array.isArray(n)?n:Object.values(n);if(a.length===0)return`src`;let S=a.map(n=>n.split(`/`).filter(Boolean)),C=S[0],N=0;for(;N<C.length;N++){let n=C[N];if(!S.every(a=>a[N]===n))break}if(N===0)return`src`;let F=C.slice(0,N);return S.some(n=>n.length>N)?F.join(`/`):F.slice(0,-1).join(`/`)||`src`}function flattenAliases(n){let a={};for(let[S,C]of Object.entries(n))C&&(a[S]=C);return a}ss();function textLoaderPlugin(n={}){let a=Object.entries(n.loaders??{}).filter(([,n])=>n===`text`).map(([n])=>n);if(a.length===0)return null;let S=a.map(n=>n.replace(/^\./,``).replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)),C=RegExp(`\\.(?:${S.join(`|`)})$`);return{name:`gjsify-text-loader`,async load(n){if(!C.test(n))return null;let a=await readFile$1(n,`utf8`);return{code:`export default ${JSON.stringify(a)};`,moduleType:`js`}}}}const gjsifyPlugin=async(n,a={})=>{if(a.library)switch(a.library){case`esm`:case`cjs`:return await setupLib({input:n.input,output:n.output,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown library type: `+a.library)}let S=a.app??`gjs`;switch(S){case`gjs`:return await setupForGjs({input:n.input,output:n.output,userExternal:n.userExternal,userBanner:n.userBanner,userAliases:n.userAliases,shebang:n.shebang,pluginOptions:a});case`node`:return await setupForNode({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});case`browser`:return await setupForBrowser({input:n.input,output:n.output,userExternal:n.userExternal,userAliases:n.userAliases,pluginOptions:a});default:throw TypeError(`Unknown app platform: `+S)}};zs(),Ho(),rn();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(jo(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}Ie();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()}},nE=Ey;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=nE[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(()=>(As(),Ds))).writeFileSync(S,a),Fe.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))`:``;Fe.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();Fe.debug(`[gjsify] --globals auto: iteration ${Y}, ${W.size} global(s)${n.length?`: `+n.join(`, `):``}`)}}return C&&Fe.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}}zs(),rn(),Ho(),As(),ss();function findPnpRoot(n){let a=n;for(;;){if(existsSync(jo(a,`.pnp.cjs`)))return a;let n=Po(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`}Ie();let rE=!1;function normalizeBundlerOptions(n){let a=n.bundler??{};if(!n.esbuild)return a;rE||(rE=!0,Fe.warn(`[gjsify] DEPRECATION: the 'esbuild' config key is deprecated and will be removed in 0.5.0. Rename it to 'bundler' (typed as RolldownOptions). See the migration notes in the gjsify CHANGELOG.`));let S=legacyEsbuildToRolldown(n.esbuild),C={...S,...a};return(S.output||a.output)&&(C.output={...S.output??{},...a.output??{}}),(S.transform||a.transform)&&(C.transform={...S.transform??{},...a.transform??{}},(S.transform?.define||a.transform?.define)&&(C.transform.define={...S.transform?.define??{},...a.transform?.define??{}})),(S.resolve||a.resolve)&&(C.resolve={...S.resolve??{},...a.resolve??{}}),C}function legacyEsbuildToRolldown(n){let a={},S={},C={},N={};return n.outfile!==void 0&&(S.file=n.outfile),n.outdir!==void 0&&(S.dir=n.outdir),n.format!==void 0&&(S.format=n.format),n.minify!==void 0&&(S.minify=n.minify),n.sourcemap!==void 0&&(S.sourcemap=n.sourcemap===`inline`?`inline`:!!n.sourcemap),n.banner?.js!==void 0&&(S.banner=n.banner.js),n.target!==void 0&&(C.target=Array.isArray(n.target)?n.target.join(`,`):n.target),n.define!==void 0&&(C.define=n.define),n.mainFields!==void 0&&(N.mainFields=n.mainFields),n.conditions!==void 0&&(N.conditionNames=n.conditions),n.external!==void 0&&(a.external=n.external),n.platform!==void 0&&(a.platform=n.platform),Object.keys(S).length>0&&(a.output=S),Object.keys(C).length>0&&(a.transform=C),Object.keys(N).length>0&&(a.resolve=N),a}function mergeBundlerOptions(n,a){let{input:S,external:C,...N}=a,F={...n,...N};return(n.output||a.output)&&(F.output={...n.output??{},...a.output??{}}),(n.transform||a.transform)&&(F.transform={...n.transform??{},...a.transform??{}},(n.transform?.define||a.transform?.define)&&(F.transform.define={...n.transform?.define??{},...a.transform?.define??{}})),(n.resolve||a.resolve)&&(F.resolve={...n.resolve??{},...a.resolve??{}}),F}Ie(),Ho(),ss();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?Po(F.module):void 0,W=F.main?Po(F.main):void 0,K=F.module?Io(F.module):`.js`,q=F.main?Io(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?Io(a):`.js`,W=I.output?.dir??(a?Po(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&&Fe.debug(`[gjsify] globals: injected ${C.size} register module(s) from --globals ${a}`),N??void 0}async applyShebang(n,a,S){if(!a){S&&Fe.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&&Fe.debug(`[gjsify] --shebang skipped: ${a} already starts with a shebang`):await writeFile$1(a,N+`
|
|
741
|
+
`+F),await chmod$1(a,493),S&&Fe.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,Fe.log(`
|
|
742
|
+
[gjsify build --watch] stopping watcher…`);try{await N.close()}catch(n){Fe.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&&Fe.log(`[gjsify build --watch] rebuild start`);break;case`BUNDLE_START`:Fe.log(`[gjsify build --watch] building…`);break;case`BUNDLE_END`:Fe.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`:Fe.log(`[gjsify build --watch] waiting for changes…`);break;case`ERROR`:Fe.error(`[gjsify build --watch] build failed:`,n.error?.message??n.error),C&&n.error?.stack&&Fe.error(n.error.stack);try{await n.result.close()}catch{}break}}),C&&N.on(`change`,(n,a)=>{Fe.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 iE={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})}};As(),Ho();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=jo(n,N),F;try{F=readdirSync(C)}catch{continue}for(let n of F){let F=checkPackage(jo(C,n),`${N}/${n}`,a);F&&S.push(F)}}else{let C=checkPackage(jo(n,N),N,a);C&&S.push(C)}return S}function checkPackage(n,a,S){let C=readPackageJson$4(jo(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=jo(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=Oo(n);for(;;){let n=jo(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=Oo(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(`:`)}}Ie(),Hx(),Ho();function computeNativeEnvForBundle(n,a=process.cwd()){let S=Oo(n),C=detectNativePackages(a),N=detectNativePackages(Po(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(` `);Fe.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=>{Fe.error(n.message),process.exit(1)})}Ie(),As(),Ho(),Hx();const aE={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=Oo(a,n.entry??S.entry??`src/test.mts`),N=Oo(a,n.outdir??S.outdir??`dist`);existsSync(C)||(Fe.error(`[gjsify test] no test entry at ${Mo(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=jo(N,`test.${S}.mjs`);if(n.build!==!1)if(n.rebuild||!isFresh(F,C,a)){let N=Date.now();n.verbose&&Fe.log(`[gjsify test] building → ${Mo(a,F)} (—app ${S})`);try{await buildTestBundle(C,F,S,n.verbose),n.verbose&&Fe.log(`[gjsify test] built ${S} in ${Date.now()-N}ms`)}catch(n){Fe.error(`[gjsify test] build failed for ${S}:`,n.message),I.push({runtime:S,ok:!1,durationMs:0,error:`build failed`});continue}}else n.verbose&&Fe.log(`[gjsify test] ${S}: bundle is up-to-date — skipping build (use --rebuild to force)`);else if(!existsSync(F)){Fe.error(`[gjsify test] --no-build but ${Mo(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(` `);Fe.log(`[gjsify test] ${H}`),I.some(n=>!n.ok)&&process.exit(1)}};async function buildTestBundle(n,a,S,C){let N=await new Config().forBuild({entryPoints:[n],outfile:a,app:S,verbose:C??!1,logLevel:`warning`,exclude:[]});N.library={...N.library??{}},N.bundler={...N.bundler??{},input:[n],output:{...N.bundler?.output??{},file:a}},await new BuildAction(N).start({app:S,library:!1})}async function runTestBundle(n,a){if(a===`gjs`){await runGjsBundle(n);return}await new Promise((a,S)=>{let C=spawn(`node`,[n],{stdio:`inherit`});C.on(`error`,S),C.on(`exit`,n=>{n===0?a():S(Error(`node exited with code ${n}`))})})}function isFresh(n,a,S){if(!existsSync(n))return!1;let C=statSync(n).mtimeMs,N=Po(a);try{return C>=newestMtimeUnder(existsSync(N)?N:a)}catch{return!1}}function newestMtimeUnder(n){let a=statSync(n);if(a.isFile())return a.mtimeMs;let S=a.mtimeMs;for(let a of readdirSync(n,{withFileTypes:!0})){if(a.name===`node_modules`||a.name===`dist`||a.name===`lib`||a.name.startsWith(`.`))continue;let C=newestMtimeUnder(jo(n,a.name));C>S&&(S=C)}return S}As();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
743
|
`,`utf-8`)}__name$1(writePackageJson$1,`writePackageJson`);function parseSpec$2(n){if(n.startsWith(`@`)){let a=n.indexOf(`/`);if(a===-1)return{name:n};let S=n.indexOf(`@`,a+1);return S===-1?{name:n}:{name:n.slice(0,S),range:n.slice(S+1)}}let a=n.indexOf(`@`);return a===-1?{name:n}:{name:n.slice(0,a),range:n.slice(a+1)}}__name$1(parseSpec$2,`parseSpec`);function projectSpecsFromPackageJson(n){let a=[];for(let S of[`dependencies`,`devDependencies`,`optionalDependencies`]){let C=n[S];if(C)for(let[n,S]of Object.entries(C))typeof S==`string`&&(/^(workspace|link|file|portal|git\+|https?):/.test(S)||a.push(`${n}@${S}`))}return a}function addDependencyEntry(n,a,S,C){n[C]===void 0&&(n[C]={}),n[C][a]=S}function defaultRangeFromVersion(n){return`^${n}`}function sortKnownDepFields(n){let a={...n};for(let n of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let S=a[n];S&&(a[n]=Object.fromEntries(Object.entries(S).sort(([n],[a])=>n<a?-1:+(n>a))))}return a}As(),Ho();function discoverWorkspaces(n,a={}){let S=jo(n,`package.json`);if(!existsSync(S))throw Error(`@gjsify/workspace: no package.json at ${n}`);let C=JSON.parse(readFileSync(S,`utf-8`)),N=a.patterns??extractWorkspacePatterns(C),F=[];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=jo(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:Mo(n,S).split(zo).join(`/`),name:C.name,version:C.version??`0.0.0`,manifest:C,private:C.private===!0})}return F.sort((n,a)=>n.relativeLocation.localeCompare(a.relativeLocation)),F}function buildDependencyGraph(n,a={}){let S=a.includeDev??!1,C=a.includePeer??!1,N=a.includeOptional??!0,F=indexByName(n),I=new Map;for(let a of n){let n=new Set,H=a.manifest;for(let a of[H.dependencies,S?H.devDependencies:void 0,C?H.peerDependencies:void 0,N?H.optionalDependencies:void 0])if(a)for(let[S,C]of Object.entries(a))typeof C==`string`&&C.startsWith(`workspace:`)&&F.has(S)&&n.add(S);I.set(a.name,n)}return{edges:I,byName:F}}function topologicalSort(n){let a=new Map;for(let S of n.edges.keys())a.set(S,0);for(let S of n.edges.values())for(let n of S)a.has(n)&&a.set(n,(a.get(n)??0)+1);let S=new Map,C=new Map;for(let a of n.edges.keys())S.set(a,new Set),C.set(a,0);for(let[a,N]of n.edges)for(let n of N)S.has(n)&&(S.get(n).add(a),C.set(a,(C.get(a)??0)+1));let N=[];for(let[n,a]of C)a===0&&N.push(n);N.sort();let F=[];for(;N.length>0;){let a=N.shift(),I=n.byName.get(a);I&&F.push(I);let H=S.get(a);if(H){let n=[];for(let a of H){let S=(C.get(a)??1)-1;C.set(a,S),S===0&&n.push(a)}n.sort(),N.push(...n)}}if(F.length!==C.size){let n=[...C.entries()].filter(([,n])=>n>0).map(([n])=>n);throw Error(`@gjsify/workspace: dependency cycle detected involving ${n.join(`, `)}`)}return F}function filterWorkspaces(n,a){let S=a.include?.map(globToRegex$1),C=a.exclude?.map(globToRegex$1);return n.filter(n=>!(a.noPrivate&&n.private||S&&S.length>0&&!S.some(a=>a.test(n.name))||C&&C.length>0&&C.some(a=>a.test(n.name))))}function extractWorkspacePatterns(n){let a=n.workspaces;return a?Array.isArray(a)?a:a.packages??[]:[]}function expandPattern(n,a){let S=a.split(`/`).filter(Boolean),C=[Oo(n)];for(let n of S){let a=[];for(let S of C)if(n===`*`){let n=[];try{n=readdirSync(S)}catch{continue}for(let C of n){if(C.startsWith(`.`))continue;let n=jo(S,C);try{statSync(n).isDirectory()&&a.push(n)}catch{}}}else if(n.includes(`*`)){let C=globToRegex$1(n),N=[];try{N=readdirSync(S)}catch{continue}for(let n of N){if(n.startsWith(`.`)||!C.test(n))continue;let N=jo(S,n);try{statSync(N).isDirectory()&&a.push(N)}catch{}}}else{let C=jo(S,n);if(existsSync(C))try{statSync(C).isDirectory()&&a.push(C)}catch{}}C=a}return C}function globToRegex$1(n){let a=n.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`[^/]*`);return RegExp(`^${a}$`)}__name$1(globToRegex$1,`globToRegex`);function indexByName(n){let a=new Map;for(let S of n)a.set(S.name,S);return a}As(),Ho();function readPackageJson$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=jo(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=Oo(a,`..`);if(C===a)break;a=C}return null}Ie(),As(),Ho(),Hx();const oE={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(jo(process.cwd(),`package.json`));if(!(C?.scripts&&typeof C.scripts[a]==`string`)&&looksLikeFile(a)){await runGjsBundle(Oo(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=jo(S,`package.json`),N=readPackageJson$3(C);N||(Fe.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>`;Fe.error(`gjsify run: no script "${n}" in ${C} (available: ${a})`),process.exit(1)}let H=findWorkspaceRoot(S),W=[jo(S,`node_modules`,`.bin`)];H&&H!==S&&W.push(jo(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(Bo),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=>{Fe.error(n.message),process.exit(1)}),process.exit(0)}function shellEscape(n){return/^[a-zA-Z0-9_\-./=:@,]+$/.test(n)?n:`'${n.replace(/'/g,`'\\''`)}'`}Ie(),Ho();const sE={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?Oo(n.file):null,C=detectNativePackages(a),{LD_LIBRARY_PATH:N,GI_TYPELIB_PATH:F}=buildNativeEnv(C);if(n.export){Fe.log(`export LD_LIBRARY_PATH="${N}"`),Fe.log(`export GI_TYPELIB_PATH="${F}"`);return}if(C.length===0){Fe.log(`No native gjsify packages detected in node_modules.`),Fe.log(`Native packages declare "gjsify": { "prebuilds": "<dir>" } in their package.json.`);return}Fe.log(`Native packages detected:`);for(let n of C)Fe.log(` ${n.name} → ${n.prebuildsDir}`);Fe.log(``),Fe.log(`To run your app directly with gjs, set:`),Fe.log(` export LD_LIBRARY_PATH="${N}"`),Fe.log(` export GI_TYPELIB_PATH="${F}"`),S?Fe.log(` gjs -m ${S}`):Fe.log(` gjs -m <your-bundle.js>`),Fe.log(``),Fe.log(`Or use gjsify run to handle this automatically:`),S?Fe.log(` gjsify run ${n.file}`):Fe.log(` gjsify run <your-bundle.js>`)}};Hx(),Ho(),zs(),rn(),As();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(jo(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 cE={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`}},lE={"@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=Oo(n);for(;;){if(existsSync(jo(a,`package.json`)))return a;let n=Oo(a,`..`);if(n===a)return null;a=n}}function discoverGjsifyPackages(n){let a=findProjectRoot(n);if(!a)return null;let S=jo(a,`node_modules`,`@gjsify`);if(!existsSync(S))return new Set;let C=jo(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=lE[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(`
|
package/lib/actions/build.d.ts
CHANGED
|
@@ -27,11 +27,14 @@ export declare class BuildAction {
|
|
|
27
27
|
private resolveGlobalsInject;
|
|
28
28
|
/**
|
|
29
29
|
* Post-processing: prepend the resolved shebang line and mark the
|
|
30
|
-
* output executable.
|
|
31
|
-
* The
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
30
|
+
* output executable. Runs for GJS and Node app builds with a single
|
|
31
|
+
* outfile. The default line depends on the target — `gjs -m` for
|
|
32
|
+
* `--app gjs`, `node` for `--app node` — so a single `shebang: true`
|
|
33
|
+
* config produces a directly-executable bin for whichever target is
|
|
34
|
+
* built. For GJS the shebang plugin already injects during bundling;
|
|
35
|
+
* this hook is the safety net for anything that bypassed it (e.g.
|
|
36
|
+
* user-supplied banners that out-ordered it) plus the chmod. For Node
|
|
37
|
+
* there is no in-bundle plugin, so this hook is the sole injection point.
|
|
35
38
|
*/
|
|
36
39
|
private applyShebang;
|
|
37
40
|
/** Application mode */
|
package/lib/actions/build.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runBundle, runWatch, bundleToChunks } from "../bundler-pick.js";
|
|
2
|
-
import { gjsifyPlugin, textLoaderPlugin, resolveShebangLine } from "@gjsify/rolldown-plugin-gjsify";
|
|
2
|
+
import { gjsifyPlugin, textLoaderPlugin, resolveShebangLine, NODE_SHEBANG } from "@gjsify/rolldown-plugin-gjsify";
|
|
3
3
|
import { resolveUserPlugins } from "../utils/resolve-plugin-by-name.js";
|
|
4
4
|
import { resolveGlobalsList, writeRegisterInjectFile, detectAutoGlobals, } from "@gjsify/rolldown-plugin-gjsify/globals";
|
|
5
5
|
import { pnpPlugin } from "@gjsify/rolldown-plugin-pnp";
|
|
@@ -152,19 +152,23 @@ export class BuildAction {
|
|
|
152
152
|
}
|
|
153
153
|
/**
|
|
154
154
|
* Post-processing: prepend the resolved shebang line and mark the
|
|
155
|
-
* output executable.
|
|
156
|
-
* The
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
155
|
+
* output executable. Runs for GJS and Node app builds with a single
|
|
156
|
+
* outfile. The default line depends on the target — `gjs -m` for
|
|
157
|
+
* `--app gjs`, `node` for `--app node` — so a single `shebang: true`
|
|
158
|
+
* config produces a directly-executable bin for whichever target is
|
|
159
|
+
* built. For GJS the shebang plugin already injects during bundling;
|
|
160
|
+
* this hook is the safety net for anything that bypassed it (e.g.
|
|
161
|
+
* user-supplied banners that out-ordered it) plus the chmod. For Node
|
|
162
|
+
* there is no in-bundle plugin, so this hook is the sole injection point.
|
|
160
163
|
*/
|
|
161
|
-
async applyShebang(outfile, verbose) {
|
|
164
|
+
async applyShebang(app, outfile, verbose) {
|
|
162
165
|
if (!outfile) {
|
|
163
166
|
if (verbose)
|
|
164
|
-
console.warn("[gjsify] --shebang skipped: no single outfile (use --outfile for
|
|
167
|
+
console.warn("[gjsify] --shebang skipped: no single outfile (use --outfile for executables)");
|
|
165
168
|
return;
|
|
166
169
|
}
|
|
167
|
-
const
|
|
170
|
+
const defaultLine = app === "node" ? NODE_SHEBANG : DEFAULT_GJS_SHEBANG;
|
|
171
|
+
const line = resolveShebangLine(this.configData.shebang, defaultLine) ?? defaultLine;
|
|
168
172
|
const content = await readFile(outfile, "utf-8");
|
|
169
173
|
if (content.startsWith("#!")) {
|
|
170
174
|
if (verbose)
|
|
@@ -293,8 +297,8 @@ export class BuildAction {
|
|
|
293
297
|
return [];
|
|
294
298
|
}
|
|
295
299
|
const writeResult = await runBundle(finalOpts);
|
|
296
|
-
if (app === "gjs" && this.configData.shebang) {
|
|
297
|
-
await this.applyShebang(outfile, verbose);
|
|
300
|
+
if ((app === "gjs" || app === "node") && this.configData.shebang) {
|
|
301
|
+
await this.applyShebang(app, outfile, verbose);
|
|
298
302
|
}
|
|
299
303
|
return [writeResult];
|
|
300
304
|
}
|
|
@@ -336,8 +340,8 @@ export class BuildAction {
|
|
|
336
340
|
case "BUNDLE_END":
|
|
337
341
|
console.log(`[gjsify build --watch] built in ${event.duration}ms`);
|
|
338
342
|
try {
|
|
339
|
-
if (app === "gjs" && this.configData.shebang) {
|
|
340
|
-
await this.applyShebang(outfile, verbose);
|
|
343
|
+
if ((app === "gjs" || app === "node") && this.configData.shebang) {
|
|
344
|
+
await this.applyShebang(app, outfile, verbose);
|
|
341
345
|
}
|
|
342
346
|
}
|
|
343
347
|
finally {
|
package/lib/commands/build.js
CHANGED
|
@@ -102,7 +102,7 @@ export const buildCommand = {
|
|
|
102
102
|
default: 'auto'
|
|
103
103
|
})
|
|
104
104
|
.option('shebang', {
|
|
105
|
-
description: "Prepend a `#!/usr/bin/env -S gjs -m`
|
|
105
|
+
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`).",
|
|
106
106
|
type: 'boolean',
|
|
107
107
|
normalize: true
|
|
108
108
|
})
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.27",
|
|
4
4
|
"description": "CLI for Gjsify",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -120,18 +120,18 @@
|
|
|
120
120
|
"cli"
|
|
121
121
|
],
|
|
122
122
|
"dependencies": {
|
|
123
|
-
"@gjsify/buffer": "^0.4.
|
|
124
|
-
"@gjsify/create-app": "^0.4.
|
|
125
|
-
"@gjsify/node-globals": "^0.4.
|
|
126
|
-
"@gjsify/node-polyfills": "^0.4.
|
|
127
|
-
"@gjsify/npm-registry": "^0.4.
|
|
128
|
-
"@gjsify/resolve-npm": "^0.4.
|
|
129
|
-
"@gjsify/rolldown-plugin-gjsify": "^0.4.
|
|
130
|
-
"@gjsify/rolldown-plugin-pnp": "^0.4.
|
|
131
|
-
"@gjsify/semver": "^0.4.
|
|
132
|
-
"@gjsify/tar": "^0.4.
|
|
133
|
-
"@gjsify/web-polyfills": "^0.4.
|
|
134
|
-
"@gjsify/workspace": "^0.4.
|
|
123
|
+
"@gjsify/buffer": "^0.4.27",
|
|
124
|
+
"@gjsify/create-app": "^0.4.27",
|
|
125
|
+
"@gjsify/node-globals": "^0.4.27",
|
|
126
|
+
"@gjsify/node-polyfills": "^0.4.27",
|
|
127
|
+
"@gjsify/npm-registry": "^0.4.27",
|
|
128
|
+
"@gjsify/resolve-npm": "^0.4.27",
|
|
129
|
+
"@gjsify/rolldown-plugin-gjsify": "^0.4.27",
|
|
130
|
+
"@gjsify/rolldown-plugin-pnp": "^0.4.27",
|
|
131
|
+
"@gjsify/semver": "^0.4.27",
|
|
132
|
+
"@gjsify/tar": "^0.4.27",
|
|
133
|
+
"@gjsify/web-polyfills": "^0.4.27",
|
|
134
|
+
"@gjsify/workspace": "^0.4.27",
|
|
135
135
|
"cosmiconfig": "^9.0.1",
|
|
136
136
|
"get-tsconfig": "^4.14.0",
|
|
137
137
|
"pkg-types": "^2.3.1",
|
|
@@ -139,12 +139,12 @@
|
|
|
139
139
|
"yargs": "^18.0.0"
|
|
140
140
|
},
|
|
141
141
|
"devDependencies": {
|
|
142
|
-
"@gjsify/unit": "^0.4.
|
|
142
|
+
"@gjsify/unit": "^0.4.27",
|
|
143
143
|
"@types/yargs": "^17.0.35",
|
|
144
144
|
"typescript": "^6.0.3"
|
|
145
145
|
},
|
|
146
146
|
"peerDependencies": {
|
|
147
|
-
"@gjsify/rolldown-native": "^0.4.
|
|
147
|
+
"@gjsify/rolldown-native": "^0.4.27"
|
|
148
148
|
},
|
|
149
149
|
"peerDependenciesMeta": {
|
|
150
150
|
"@gjsify/rolldown-native": {
|