ts-pantry 0.11.130 → 0.11.131

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/bin/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{e,x,n,d,h,P,Y,re,f,z,j,E,L,ie,ce,s,M,U,m,V,D,S,_,T,c,G,ue,de,he,Qe,et,tt}from"../chunk-49a6jmw9.js";import"../chunk-5qaednd9.js";import C from"node:fs";import O from"node:path";import v from"node:process";import{existsSync as Ge}from"node:fs";import be from"node:fs/promises";import Te from"node:os";import we from"node:path";import oe from"node:process";import{EventEmitter as qe}from"node:events";import se from"node:process";import Ae from"node:process";import Se from"node:process";import ye from"node:process";import pe from"node:process";import De from"node:tty";import Mt,{stdin as ps,stdout as fs}from"node:process";class Ne{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let t=Te.homedir(),i=we.join(t,".config","clapp");this.configPath=we.join(i,"telemetry.json")}async isEnabled(){if(oe.env.DO_NOT_TRACK==="1"||oe.env.DO_NOT_TRACK==="true")return!1;if(oe.env.NO_TELEMETRY==="1"||oe.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let t=await this.loadConfig();if(t.enabled=!0,!t.userId)t.userId=this.generateUserId();await this.saveConfig(t)}async disable(){let t=await this.loadConfig();t.enabled=!1,await this.saveConfig(t)}async track(t,i){if(!await this.isEnabled())return;let o={event:t,...i,timestamp:Date.now(),platform:Te.platform(),nodeVersion:oe.version};if(this.events.push(o),this.events.length>=10)await this.send()}async trackCommand(t,i){await this.track("command",{command:t,duration:i})}async trackError(t,i){await this.track("error",{error:t,command:i})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let i=await this.loadConfig();return i.lastSent=Date.now(),await this.saveConfig(i),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let i=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(i),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep(t){return new Promise((i)=>setTimeout(i,t))}async status(){let t=await this.loadConfig();return{enabled:t.enabled,doNotTrack:oe.env.DO_NOT_TRACK==="1"||oe.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:t.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(Ge(this.configPath)){let t=await be.readFile(this.configPath,"utf-8");return this.config=JSON.parse(t),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig(t){this.config=t;try{let i=we.dirname(this.configPath);await be.mkdir(i,{recursive:!0}),await be.writeFile(this.configPath,JSON.stringify(t,null,2),"utf-8")}catch{}}generateUserId(){let t=Math.random().toString(36).substring(2,15),i=Date.now().toString(36);return`${t}-${i}`}}var es=new Ne;function xe(t){return t.replace(/[<[].+/,"").trim()}function He(t){let i=/<([^>]+)>/g,r=/\[([^\]]+)\]/g,o=[],a=(b)=>{let u=!1,p=b[1];if(p.startsWith("..."))p=p.slice(3),u=!0;return{required:b[0].startsWith("<"),value:p,variadic:u}},l;while(l=i.exec(t))o.push(a(l));let g;while(g=r.exec(t))o.push(a(g));return o}function Ke(t){let i={alias:{},boolean:[]};for(let[r,o]of t.entries()){if(o.names.length>1)i.alias[o.names[0]]=o.names.slice(1);if(o.isBoolean)if(o.negated){if(!t.some((l,g)=>g!==r&&l.names.some((b)=>o.names.includes(b))&&typeof l.required==="boolean"))i.boolean.push(o.names[0])}else i.boolean.push(o.names[0])}return i}function _e(t){return t.reduce((i,r)=>i.length>=r.length?i:r,"")}function ve(t,i){return t.length>=i?t:`${t}${" ".repeat(i-t.length)}`}function ge(t){return t.replace(/([a-z])-([a-z])/g,(i,r,o)=>r+o.toUpperCase())}function Je(t,i,r){let o=0,a=i.length,l=t,g;for(;o<a;++o)g=l[i[o]],l=l[i[o]]=o===a-1?r:g!=null?g:!!~i[o+1].indexOf(".")||!(+i[o+1]>-1)?{}:[]}function Ye(t,i){for(let r of Object.keys(i)){let o=i[r];if(o.shouldTransform){if(t[r]=Array.prototype.concat.call([],t[r]),typeof o.transformFunction==="function")t[r]=t[r].map(o.transformFunction)}}}function Ze(t){let i=/([^\\/]+)$/.exec(t);return i?i[1]:""}function fe(t){return t.split(".").map((i,r)=>r===0?ge(i):i).join(".")}class me extends Error{exitCode=2;isUsageError=!0;usage;constructor(t,i){super(t);if(this.name=this.constructor.name,i!==void 0)this.usage=i;if(typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error(t).stack}format(t=!1){if(t&&this.stack)return`${this.message}
2
+ import{e,x,n,d,h,P,Y,re,f,z,j,E,L,ie,ce,s,M,U,m,V,D,S,_,T,c,G,ue,de,he,Qe,et,tt}from"../chunk-r5szm46d.js";import"../chunk-5qaednd9.js";import C from"node:fs";import O from"node:path";import v from"node:process";import{existsSync as Ge}from"node:fs";import be from"node:fs/promises";import Te from"node:os";import we from"node:path";import oe from"node:process";import{EventEmitter as qe}from"node:events";import se from"node:process";import Ae from"node:process";import Se from"node:process";import ye from"node:process";import pe from"node:process";import De from"node:tty";import Mt,{stdin as ps,stdout as fs}from"node:process";class Ne{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let t=Te.homedir(),i=we.join(t,".config","clapp");this.configPath=we.join(i,"telemetry.json")}async isEnabled(){if(oe.env.DO_NOT_TRACK==="1"||oe.env.DO_NOT_TRACK==="true")return!1;if(oe.env.NO_TELEMETRY==="1"||oe.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let t=await this.loadConfig();if(t.enabled=!0,!t.userId)t.userId=this.generateUserId();await this.saveConfig(t)}async disable(){let t=await this.loadConfig();t.enabled=!1,await this.saveConfig(t)}async track(t,i){if(!await this.isEnabled())return;let o={event:t,...i,timestamp:Date.now(),platform:Te.platform(),nodeVersion:oe.version};if(this.events.push(o),this.events.length>=10)await this.send()}async trackCommand(t,i){await this.track("command",{command:t,duration:i})}async trackError(t,i){await this.track("error",{error:t,command:i})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let i=await this.loadConfig();return i.lastSent=Date.now(),await this.saveConfig(i),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let i=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(i),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep(t){return new Promise((i)=>setTimeout(i,t))}async status(){let t=await this.loadConfig();return{enabled:t.enabled,doNotTrack:oe.env.DO_NOT_TRACK==="1"||oe.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:t.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(Ge(this.configPath)){let t=await be.readFile(this.configPath,"utf-8");return this.config=JSON.parse(t),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig(t){this.config=t;try{let i=we.dirname(this.configPath);await be.mkdir(i,{recursive:!0}),await be.writeFile(this.configPath,JSON.stringify(t,null,2),"utf-8")}catch{}}generateUserId(){let t=Math.random().toString(36).substring(2,15),i=Date.now().toString(36);return`${t}-${i}`}}var es=new Ne;function xe(t){return t.replace(/[<[].+/,"").trim()}function He(t){let i=/<([^>]+)>/g,r=/\[([^\]]+)\]/g,o=[],a=(b)=>{let u=!1,p=b[1];if(p.startsWith("..."))p=p.slice(3),u=!0;return{required:b[0].startsWith("<"),value:p,variadic:u}},l;while(l=i.exec(t))o.push(a(l));let g;while(g=r.exec(t))o.push(a(g));return o}function Ke(t){let i={alias:{},boolean:[]};for(let[r,o]of t.entries()){if(o.names.length>1)i.alias[o.names[0]]=o.names.slice(1);if(o.isBoolean)if(o.negated){if(!t.some((l,g)=>g!==r&&l.names.some((b)=>o.names.includes(b))&&typeof l.required==="boolean"))i.boolean.push(o.names[0])}else i.boolean.push(o.names[0])}return i}function _e(t){return t.reduce((i,r)=>i.length>=r.length?i:r,"")}function ve(t,i){return t.length>=i?t:`${t}${" ".repeat(i-t.length)}`}function ge(t){return t.replace(/([a-z])-([a-z])/g,(i,r,o)=>r+o.toUpperCase())}function Je(t,i,r){let o=0,a=i.length,l=t,g;for(;o<a;++o)g=l[i[o]],l=l[i[o]]=o===a-1?r:g!=null?g:!!~i[o+1].indexOf(".")||!(+i[o+1]>-1)?{}:[]}function Ye(t,i){for(let r of Object.keys(i)){let o=i[r];if(o.shouldTransform){if(t[r]=Array.prototype.concat.call([],t[r]),typeof o.transformFunction==="function")t[r]=t[r].map(o.transformFunction)}}}function Ze(t){let i=/([^\\/]+)$/.exec(t);return i?i[1]:""}function fe(t){return t.split(".").map((i,r)=>r===0?ge(i):i).join(".")}class me extends Error{exitCode=2;isUsageError=!0;usage;constructor(t,i){super(t);if(this.name=this.constructor.name,i!==void 0)this.usage=i;if(typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error(t).stack}format(t=!1){if(t&&this.stack)return`${this.message}
3
3
 
4
4
  Stack trace:
5
5
  ${this.stack}`;return this.message}}function Xe(t){if(t instanceof me)return!0;return!!t&&typeof t==="object"&&t.name==="ClappError"&&typeof t.message==="string"}function st(){let{env:t}=Ae,{TERM:i,TERM_PROGRAM:r}=t;if(Ae.platform!=="win32")return i!=="linux";return Boolean(t.WT_SESSION)||Boolean(t.TERMINUS_SUBLIME)||t.ConEmuTask==="{cmd::Cmder}"||r==="Terminus-Sublime"||r==="vscode"||i==="xterm-256color"||i==="alacritty"||i==="rxvt-unicode"||i==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var $e="\x1B",Z=`${$e}[`;var je={to(t,i){if(!i)return`${Z}${t+1}G`;return`${Z}${i+1};${t+1}H`},move(t,i){let r="";if(t<0)r+=`${Z}${-t}D`;else if(t>0)r+=`${Z}${t}C`;if(i<0)r+=`${Z}${-i}A`;else if(i>0)r+=`${Z}${i}B`;return r},up:(t=1)=>`${Z}${t}A`,down:(t=1)=>`${Z}${t}B`,forward:(t=1)=>`${Z}${t}C`,backward:(t=1)=>`${Z}${t}D`,nextLine:(t=1)=>`${Z}E`.repeat(t),prevLine:(t=1)=>`${Z}F`.repeat(t),left:`${Z}G`,hide:`${Z}?25l`,show:`${Z}?25h`,save:`${$e}7`,restore:`${$e}8`};var is={screen:`${Z}2J`,up:(t=1)=>`${Z}1J`.repeat(t),down:(t=1)=>`${Z}J`.repeat(t),line:`${Z}2K`,lineEnd:`${Z}K`,lineStart:`${Z}1K`,lines(t){let i="";for(let r=0;r<t;r++)i+=this.line+(r<t-1?je.up():"");if(t)i+=je.left;return i}},rs={screen:`${$e}c`};function nt(t,i){let r=[];for(let o=0;o<=i.length;o++)r[o]=[o];for(let o=0;o<=t.length;o++)r[0][o]=o;for(let o=1;o<=i.length;o++)for(let a=1;a<=t.length;a++)if(i.charAt(o-1)===t.charAt(a-1))r[o][a]=r[o-1][a-1];else r[o][a]=Math.min(r[o-1][a-1]+1,r[o][a-1]+1,r[o-1][a]+1);return r[i.length][t.length]}function Be(t,i,r=2,o=3){return i.map((a)=>({cmd:a,distance:nt(t,a)})).filter(({distance:a})=>a<=r).sort((a,l)=>a.distance-l.distance).slice(0,o).map(({cmd:a})=>a)}function it(t,i={}){let r={_:[]},o=i.alias||{},a=new Set(i.boolean||[]),l={};for(let u of Object.keys(o))for(let p of o[u])l[p]=u;for(let u of a)if(o[u])for(let p of o[u])a.add(p);function g(u,p){if(u===void 0)return p;if(typeof p==="boolean")return p;return Array.isArray(u)?[...u,p]:[u,p]}function b(u,p){let k=l[u]||u,I=g(r[k],p);if(r[k]=I,o[k])for(let y of o[k])r[y]=I;if(l[u]&&o[l[u]])for(let y of o[l[u]])r[y]=I;r[u]=I}for(let u=0;u<t.length;u++){let p=t[u];if(p==="--"){r._.push(...t.slice(u+1));break}if(p.startsWith("--")){let k=p.indexOf("=");if(k!==-1){let I=ge(p.slice(2,k)),y=p.slice(k+1);b(I,y)}else{let I=p.slice(2);if(I.startsWith("no-")){let w=ge(I.slice(3));b(w,!1);continue}let y=ge(I),A=l[y]||y;if(a.has(A)||a.has(y))b(y,!0);else{let w=t[u+1];if(w!==void 0&&!w.startsWith("-"))b(y,w),u++;else b(y,!0)}}}else if(p.startsWith("-")&&p.length>1){let k=p.slice(1);for(let I=0;I<k.length;I++){let y=k[I],A=l[y]||y;if(I===k.length-1&&!a.has(A)&&!a.has(y)){let w=t[u+1];if(w!==void 0&&!w.startsWith("-"))b(y,w),u++;else b(y,!0)}else b(y,!0)}}else r._.push(p)}return r}class Me{rawName;description;name;names;isBoolean;required;config;negated;constructor(t,i,r){if(this.rawName=t,this.description=i,this.config=Object.assign({},r),t=t.replace(/\.\*/g,""),this.negated=!1,this.names=xe(t).split(",").map((o)=>{let a=o.trim().replace(/^-{1,2}/,"");if(a.startsWith("no-"))this.negated=!0,a=a.replace(/^no-/,"");return fe(a)}).sort((o,a)=>o.length>a.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if(t.includes("<"))this.required=!0;else if(t.includes("["))this.required=!1;else this.isBoolean=!0}}var as=Se.argv,rt=`${Se.platform}-${Se.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,Pe=ye.argv,ot=`${ye.platform}-${ye.arch} node-${ye.version}`;class ke{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor(t,i,r,o){this.rawName=t,this.description=i,this.config=r,this.cli=o,this.options=[],this.aliasNames=[],this.name=xe(t);let a=xe(t),l=a.indexOf(":");if(l>0)this.namespace=a.substring(0,l),this.name=a.substring(l+1);if(this.args=He(t),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!r)this.config={}}usage(t){return this.usageText=t,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version(t,i="-v, --version"){return this.versionNumber=t,this.option(i,"Display version number"),this}example(t){return this.examples.push(t),this}option(t,i,r){let o=new Me(t,i,r);return this.options.push(o),this}alias(t){return this.aliasNames.push(t),this}action(t){return this.commandAction=t,this}before(t){return this.beforeHooks.push(t),this}after(t){return this.afterHooks.push(t),this}use(t){return this.middleware.push(t),this}isMatched(t){if(this.aliasNames.includes(t))return!0;if(this.namespace)return`${this.namespace}:${this.name}`===t;return this.name===t}get isDefaultCommand(){return this.name===""||this.aliasNames.includes("!")}get isGlobalCommand(){return this instanceof Ce}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption(t){let i=fe(t.split(".")[0]);return!!this.options.find((r)=>r.names.some((o)=>fe(o)===i))}outputHelp(){let{name:t,commands:i}=this.cli,{versionNumber:r,options:o,helpCallback:a}=this.cli.globalCommand,l=[{body:`${t}${r?`/${r}`:""}`}];if(l.push({title:"Usage",body:` $ ${t} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&i.length>0){let p=_e(i.map((w)=>w.rawName)),k=new Map,I=[];for(let w of i)if(w.namespace){if(!k.has(w.namespace))k.set(w.namespace,[]);k.get(w.namespace).push(w)}else I.push(w);let y="";if(I.sort((w,W)=>w.rawName<W.rawName?-1:w.rawName>W.rawName?1:0),I.length>0)y+=I.map((w)=>` ${ve(w.rawName,p.length)} ${w.description}`).join(`
@@ -28,7 +28,7 @@ Received ${r}, cleaning up...`),t)try{await t()}catch(o){console.error("Error du
28
28
  `)),this.enableDidYouMean){let i=[];for(let o of this.commands){if(o.displayName)i.push(o.displayName);if(o.aliasNames)i.push(...o.aliasNames)}let r=Be(t,i);if(r.length>0)console.log(le.yellow("Did you mean one of these?")),r.forEach((o)=>console.log(` ${le.dim("•")} ${this.name} ${o}`)),console.log("")}console.log(le.dim("Run"),`${this.name} --help`,le.dim("to see all available commands")),se.exit(1)}async parse(t=Pe,i={}){let{run:r=!0,exitOnError:o=!1}=i;if(o)try{return await this.parse(t,{run:r})}catch(u){throw this.handleUsageError(u),u}if(this.rawArgs=t,!this.name)this.name=t[1]?Ze(t[1]):"cli";let a=!0,l=t.slice(2),g=l[0];if(g&&!g.startsWith("-")){for(let u of this.commands)if(u.isMatched(g)){let p=this.mri(l,u);a=!1;let k={...p,args:p.args.slice(1)};this.setParsedInfo(k,u,g),this.emit(`command:${g}`,u);break}if(a){let u=l[1];if(u&&!u.startsWith("-")){let p=`${g}:${u}`;for(let k of this.commands)if(k.isMatched(p)){let I=this.mri(l,k);a=!1;let y={...I,args:I.args.slice(2)};this.setParsedInfo(y,k,p),this.emit(`command:${p}`,k);break}}}}if(a){for(let u of this.commands)if(u.name===""){a=!1;let p=this.mri(l,u);this.setParsedInfo(p,u),this.emit("command:!",u);break}}if(a){let u=this.mri(t.slice(2));this.setParsedInfo(u)}if(this.options.verbose)this.isVerbose=!0;if(this.options.quiet)this.isQuiet=!0;if(this.options.debug)this.isDebug=!0;if(this.options.noInteraction||this.options.interaction===!1)this.isNoInteraction=!0;if(this.options.env)this.environment=String(this.options.env);if(this.options.dryRun)this.isDryRun=!0;if(this.options.force)this.isForce=!0;if(this.options.noEmoji||this.options.emoji===!1)this.useEmoji=!1;if(this.options.theme)this.theme=String(this.options.theme);if(this.options.noCache||this.options.cache===!1)this.isNoCache=!0;if(this.options.help&&this.showHelpOnExit)this.outputHelp(),r=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),r=!1,this.unsetMatchedCommand();let b={args:this.args,options:this.options};if(r)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return b}mri(t,i){let r=[...this.globalCommand.options,...i?i.options:[]],o=Ke(r),a=[],l=t.indexOf("--");if(l>-1)a=t.slice(l+1),t=t.slice(0,l);let g=it(t,o),b={_:g._};for(let y of Object.keys(g))if(y!=="_")b[fe(y)]=g[y];let u=b._,p={"--":a},k=i&&i.config.ignoreOptionDefaultValue?i.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,I=Object.create(null);for(let y of r){if(!k&&y.config.default!==void 0)for(let A of y.names)p[A]=y.config.default;if(Array.isArray(y.config.type)){if(I[y.name]===void 0)I[y.name]={shouldTransform:!0,transformFunction:y.config.type[0]}}}for(let y of Object.keys(b))if(y!=="_"){let A=y.split(".");Je(p,A,b[y]),Ye(p,I)}return{args:u,options:p}}async run(t=Pe){return this.parse(t,{run:!0,exitOnError:!0})}handleUsageError(t){if(!Xe(t)||t.isUsageError===!1)return;let i=t.message||"command-line error",r=this.name?`${this.name}: `:"",o=/--help/.test(i)?"":t.usage?`
29
29
  Usage: ${t.usage}`:`
30
30
  Run \`${this.name??"cli"} --help\` for usage.`;se.stderr.write(`${r}${i}${o}
31
- `),se.exit(t.exitCode??2)}async runMatchedCommand(){let{args:t,options:i,matchedCommand:r}=this;if(!r||!r.commandAction)return;r.checkUnknownOptions(),r.checkOptionValue(),r.checkRequiredArgs();let o=[];r.args.forEach((b,u)=>{if(b.variadic)o.push(t.slice(u));else o.push(t[u])}),o.push(i);let a={command:r,args:o,options:i};for(let b of r.beforeHooks)await b(a);let l,g=async()=>{let b=r.commandAction.apply(this,o);if(b instanceof Promise)l=await b;else l=b;return l};if(r.middleware.length>0){let b=0,u=async()=>{if(b<r.middleware.length){let p=r.middleware[b++];await p({...a,next:u})}else await g()};await u()}else await g();for(let b of r.afterHooks)await b(a);return l}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return se.removeAllListeners("SIGINT"),se.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class Re{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get(t){if(!this.enabled){this.misses++;return}let i=this.cache.get(t);if(!i){this.misses++;return}if(Date.now()-i.timestamp>i.ttl){this.cache.delete(t),this.misses++;return}return this.hits++,i.value}set(t,i,r=5000){if(!this.enabled)return;this.cache.set(t,{value:i,timestamp:Date.now(),ttl:r})}has(t){if(!this.enabled)return!1;let i=this.cache.get(t);if(!i)return!1;if(Date.now()-i.timestamp>i.ttl)return this.cache.delete(t),!1;return!0}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let t=Date.now();for(let[i,r]of this.cache.entries())if(t-r.timestamp>r.ttl)this.cache.delete(i)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var ls=new Re;function ut(){if("FORCE_COLOR"in pe.env)return pe.env.FORCE_COLOR!=="0";if("NO_COLOR"in pe.env||pe.env.TERM==="dumb")return!1;if(pe.platform==="win32")return!0;return De.isatty(1)&&De.isatty(2)}var Le=ut();function J(t,i){if(!Le)return(r)=>r;return(r)=>t+r+i}var dt=J("\x1B[0m","\x1B[0m"),ht=J("\x1B[31m","\x1B[39m"),pt=J("\x1B[32m","\x1B[39m"),ft=J("\x1B[33m","\x1B[39m"),mt=J("\x1B[34m","\x1B[39m"),gt=J("\x1B[35m","\x1B[39m"),yt=J("\x1B[36m","\x1B[39m"),$t=J("\x1B[37m","\x1B[39m"),bt=J("\x1B[90m","\x1B[39m"),wt=J("\x1B[1m","\x1B[22m"),vt=J("\x1B[3m","\x1B[23m"),xt=J("\x1B[4m","\x1B[24m"),St=J("\x1B[2m","\x1B[22m"),kt=J("\x1B[7m","\x1B[27m"),Ct=J("\x1B[8m","\x1B[28m"),It=J("\x1B[9m","\x1B[29m"),Ot=J("\x1B[41m","\x1B[49m"),Et=J("\x1B[42m","\x1B[49m"),Tt=J("\x1B[43m","\x1B[49m"),At=J("\x1B[44m","\x1B[49m"),_t=J("\x1B[45m","\x1B[49m"),jt=J("\x1B[46m","\x1B[49m"),Pt=J("\x1B[47m","\x1B[49m"),Dt=Le,Nt={reset:dt,red:ht,green:pt,yellow:ft,blue:mt,magenta:gt,cyan:yt,white:$t,gray:bt,bold:wt,italic:vt,underline:xt,dim:St,inverse:kt,hidden:Ct,strikethrough:It,bgRed:Ot,bgGreen:Et,bgYellow:Tt,bgBlue:At,bgMagenta:_t,bgCyan:jt,bgWhite:Pt,isColorSupported:Dt},Bt=Nt,Rt=["up","down","left","right","space","enter","cancel"],ms={actions:new Set(Rt),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var gs=Mt.platform.startsWith("win"),ys=Symbol("clapp:cancel");var Lt=st();var K=(t,i)=>Lt?t:i,$s=K("◆","*"),bs=K("■","x"),ws=K("▲","x"),vs=K("◇","o"),xs=K("┌","T"),Vt=K("│","|"),Ss=K("└","—"),ks=K("●",">"),Cs=K("○"," "),Is=K("◻","[•]"),Os=K("◼","[+]"),Es=K("◻","[ ]"),Ts=K("▪","•"),As=K("─","-"),_s=K("╮","+"),js=K("├","+"),Ps=K("╯","+"),Ds=K("●","•"),Ns=K("◆","*"),Bs=K("▲","!"),Ms=K("■","x");var Rs={light:K("─","-"),heavy:K("━","="),block:K("█","#")};function Ft(){return`${Bt.gray(Vt)} `}var Ls=Ft();var Ve="0.11.130";x();async function Wt(t="src/pantry"){if(!C.existsSync(t))throw Error(`Pantry directory not found: ${t}. Please run 'bun ./bin/cli.ts update-pantry' first.`);let i=[];function r(o,a=""){let l=C.readdirSync(o,{withFileTypes:!0}),g=O.join(o,"package.yml");if(a&&C.existsSync(g))i.push(a);for(let b of l)if(b.isDirectory()&&!b.name.startsWith(".")){let u=a?`${a}/${b.name}`:b.name,p=O.join(o,b.name);r(p,u)}}return r(t),console.log(`\uD83D\uDCE6 Found ${i.length} packages in local pantry`),i.sort()}async function Ut(t=!1){async function i(g){let b=new URL("https://s3.amazonaws.com/dist.tea.xyz/");if(b.searchParams.set("list-type","2"),b.searchParams.set("prefix",""),b.searchParams.set("max-keys","1000"),g)b.searchParams.set("continuation-token",g);let u=await fetch(b.toString());if(!u.ok)throw Error(`Failed to fetch S3 listing: ${u.status}`);let p=await u.text(),k=[],I=p.match(/<Key>([^<]+)<\/Key>/g);if(I)for(let W of I){let q=W.replace(/<Key>([^<]+)<\/Key>/,"$1");k.push({Key:q})}let y=p.includes("<IsTruncated>true</IsTruncated>"),A=p.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/),w=A?A[1]:void 0;return{IsTruncated:y,NextContinuationToken:w,Contents:k}}console.log("Scraping packages from S3 registry...");let r=new Set,o;do{let g=await i(o);for(let b of g.Contents){let u=b.Key,p=u.split("/");if(p.length===0)continue;if(p[0].startsWith(".")||p[0].includes(" ")||u.match(/\.(md|txt|yml|yaml|json)$/i))continue;let k=["darwin","linux","windows"],I=-1;for(let y=1;y<p.length;y++)if(k.includes(p[y])){I=y;break}if(I>0){let y=p.slice(0,I).join("/");if(y.includes("."))r.add(y)}else if(p.length>=2&&p[0].includes(".")&&!p[1].startsWith("v")&&!p[1].match(/^\d/)){let y=`${p[0]}/${p[1]}`;r.add(y)}else if(p.length>=1&&p[0].includes("."))r.add(p[0])}o=g.NextContinuationToken,console.log(`Found ${r.size} packages so far...`)}while(o);let a=Array.from(r).sort(),l=[];for(let g of a){if(!g.includes(".")||g.match(/^[a-z0-9.-]+\.[a-z]{2,}(\/[\w.-]+){0,20}$/i)===null)continue;if(g.endsWith("/README.rst")||g.endsWith("/README")||g.includes("/docs/"))continue;if(g.endsWith("/.pkgroot"))continue;if(["amazon.com/aws","charm.sh","code.videolan.org","crates.io"].includes(g))continue;l.push(g)}return console.log(`\uD83D\uDCE6 Found ${l.length} valid packages in registry`),l}async function Gt(t,i){let o=`/**
31
+ `),se.exit(t.exitCode??2)}async runMatchedCommand(){let{args:t,options:i,matchedCommand:r}=this;if(!r||!r.commandAction)return;r.checkUnknownOptions(),r.checkOptionValue(),r.checkRequiredArgs();let o=[];r.args.forEach((b,u)=>{if(b.variadic)o.push(t.slice(u));else o.push(t[u])}),o.push(i);let a={command:r,args:o,options:i};for(let b of r.beforeHooks)await b(a);let l,g=async()=>{let b=r.commandAction.apply(this,o);if(b instanceof Promise)l=await b;else l=b;return l};if(r.middleware.length>0){let b=0,u=async()=>{if(b<r.middleware.length){let p=r.middleware[b++];await p({...a,next:u})}else await g()};await u()}else await g();for(let b of r.afterHooks)await b(a);return l}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return se.removeAllListeners("SIGINT"),se.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class Re{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get(t){if(!this.enabled){this.misses++;return}let i=this.cache.get(t);if(!i){this.misses++;return}if(Date.now()-i.timestamp>i.ttl){this.cache.delete(t),this.misses++;return}return this.hits++,i.value}set(t,i,r=5000){if(!this.enabled)return;this.cache.set(t,{value:i,timestamp:Date.now(),ttl:r})}has(t){if(!this.enabled)return!1;let i=this.cache.get(t);if(!i)return!1;if(Date.now()-i.timestamp>i.ttl)return this.cache.delete(t),!1;return!0}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let t=Date.now();for(let[i,r]of this.cache.entries())if(t-r.timestamp>r.ttl)this.cache.delete(i)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var ls=new Re;function ut(){if("FORCE_COLOR"in pe.env)return pe.env.FORCE_COLOR!=="0";if("NO_COLOR"in pe.env||pe.env.TERM==="dumb")return!1;if(pe.platform==="win32")return!0;return De.isatty(1)&&De.isatty(2)}var Le=ut();function J(t,i){if(!Le)return(r)=>r;return(r)=>t+r+i}var dt=J("\x1B[0m","\x1B[0m"),ht=J("\x1B[31m","\x1B[39m"),pt=J("\x1B[32m","\x1B[39m"),ft=J("\x1B[33m","\x1B[39m"),mt=J("\x1B[34m","\x1B[39m"),gt=J("\x1B[35m","\x1B[39m"),yt=J("\x1B[36m","\x1B[39m"),$t=J("\x1B[37m","\x1B[39m"),bt=J("\x1B[90m","\x1B[39m"),wt=J("\x1B[1m","\x1B[22m"),vt=J("\x1B[3m","\x1B[23m"),xt=J("\x1B[4m","\x1B[24m"),St=J("\x1B[2m","\x1B[22m"),kt=J("\x1B[7m","\x1B[27m"),Ct=J("\x1B[8m","\x1B[28m"),It=J("\x1B[9m","\x1B[29m"),Ot=J("\x1B[41m","\x1B[49m"),Et=J("\x1B[42m","\x1B[49m"),Tt=J("\x1B[43m","\x1B[49m"),At=J("\x1B[44m","\x1B[49m"),_t=J("\x1B[45m","\x1B[49m"),jt=J("\x1B[46m","\x1B[49m"),Pt=J("\x1B[47m","\x1B[49m"),Dt=Le,Nt={reset:dt,red:ht,green:pt,yellow:ft,blue:mt,magenta:gt,cyan:yt,white:$t,gray:bt,bold:wt,italic:vt,underline:xt,dim:St,inverse:kt,hidden:Ct,strikethrough:It,bgRed:Ot,bgGreen:Et,bgYellow:Tt,bgBlue:At,bgMagenta:_t,bgCyan:jt,bgWhite:Pt,isColorSupported:Dt},Bt=Nt,Rt=["up","down","left","right","space","enter","cancel"],ms={actions:new Set(Rt),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var gs=Mt.platform.startsWith("win"),ys=Symbol("clapp:cancel");var Lt=st();var K=(t,i)=>Lt?t:i,$s=K("◆","*"),bs=K("■","x"),ws=K("▲","x"),vs=K("◇","o"),xs=K("┌","T"),Vt=K("│","|"),Ss=K("└","—"),ks=K("●",">"),Cs=K("○"," "),Is=K("◻","[•]"),Os=K("◼","[+]"),Es=K("◻","[ ]"),Ts=K("▪","•"),As=K("─","-"),_s=K("╮","+"),js=K("├","+"),Ps=K("╯","+"),Ds=K("●","•"),Ns=K("◆","*"),Bs=K("▲","!"),Ms=K("■","x");var Rs={light:K("─","-"),heavy:K("━","="),block:K("█","#")};function Ft(){return`${Bt.gray(Vt)} `}var Ls=Ft();var Ve="0.11.131";x();async function Wt(t="src/pantry"){if(!C.existsSync(t))throw Error(`Pantry directory not found: ${t}. Please run 'bun ./bin/cli.ts update-pantry' first.`);let i=[];function r(o,a=""){let l=C.readdirSync(o,{withFileTypes:!0}),g=O.join(o,"package.yml");if(a&&C.existsSync(g))i.push(a);for(let b of l)if(b.isDirectory()&&!b.name.startsWith(".")){let u=a?`${a}/${b.name}`:b.name,p=O.join(o,b.name);r(p,u)}}return r(t),console.log(`\uD83D\uDCE6 Found ${i.length} packages in local pantry`),i.sort()}async function Ut(t=!1){async function i(g){let b=new URL("https://s3.amazonaws.com/dist.tea.xyz/");if(b.searchParams.set("list-type","2"),b.searchParams.set("prefix",""),b.searchParams.set("max-keys","1000"),g)b.searchParams.set("continuation-token",g);let u=await fetch(b.toString());if(!u.ok)throw Error(`Failed to fetch S3 listing: ${u.status}`);let p=await u.text(),k=[],I=p.match(/<Key>([^<]+)<\/Key>/g);if(I)for(let W of I){let q=W.replace(/<Key>([^<]+)<\/Key>/,"$1");k.push({Key:q})}let y=p.includes("<IsTruncated>true</IsTruncated>"),A=p.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/),w=A?A[1]:void 0;return{IsTruncated:y,NextContinuationToken:w,Contents:k}}console.log("Scraping packages from S3 registry...");let r=new Set,o;do{let g=await i(o);for(let b of g.Contents){let u=b.Key,p=u.split("/");if(p.length===0)continue;if(p[0].startsWith(".")||p[0].includes(" ")||u.match(/\.(md|txt|yml|yaml|json)$/i))continue;let k=["darwin","linux","windows"],I=-1;for(let y=1;y<p.length;y++)if(k.includes(p[y])){I=y;break}if(I>0){let y=p.slice(0,I).join("/");if(y.includes("."))r.add(y)}else if(p.length>=2&&p[0].includes(".")&&!p[1].startsWith("v")&&!p[1].match(/^\d/)){let y=`${p[0]}/${p[1]}`;r.add(y)}else if(p.length>=1&&p[0].includes("."))r.add(p[0])}o=g.NextContinuationToken,console.log(`Found ${r.size} packages so far...`)}while(o);let a=Array.from(r).sort(),l=[];for(let g of a){if(!g.includes(".")||g.match(/^[a-z0-9.-]+\.[a-z]{2,}(\/[\w.-]+){0,20}$/i)===null)continue;if(g.endsWith("/README.rst")||g.endsWith("/README")||g.includes("/docs/"))continue;if(g.endsWith("/.pkgroot"))continue;if(["amazon.com/aws","charm.sh","code.videolan.org","crates.io"].includes(g))continue;l.push(g)}return console.log(`\uD83D\uDCE6 Found ${l.length} valid packages in registry`),l}async function Gt(t,i){let o=`/**
32
32
  * Constants used throughout the ts-pantry package
33
33
  * This file is auto-generated from ${i}. Do not edit manually.
34
34
  * Generated on ${new Date().toISOString()}
@@ -91,17 +91,17 @@ ${a.join(`
91
91
  Conflicts found:`),y.conflicts.forEach((w)=>{console.log(` ${w.package}: ${w.versions.join(", ")}`)});if(console.log(`
92
92
  \uD83D\uDCCB All unique packages to install:`),y.uniquePackages.forEach((w,W)=>{let q=y.allDependencies.find((H)=>H.name===w),N=q&&q.version&&q.version!=="latest"?` (${q.version})`:"";console.log(` ${W+1}. ${w}${N}`)}),p)console.log(`
93
93
  \uD83D\uDE80 Install command:`),console.log(`pantry install ${y.uniquePackages.join(" ")}`);if(Object.values(y.osSpecificDeps).reduce((w,W)=>w+W.length,0)>0)console.log(`
94
- \uD83D\uDDA5️ OS-specific dependencies:`),Object.entries(y.osSpecificDeps).forEach(([w,W])=>{if(W.length>0)console.log(` ${w}: ${W.map((q)=>q.name).join(", ")}`)})}v.exit(0)}catch(r){if(i.json){let o={success:!1,error:String(r),timestamp:new Date().toISOString()};console.log(JSON.stringify(o))}else console.error("Error resolving dependencies:",r);v.exit(1)}});F.command("get-php-versions","Get PHP versions suitable for CI/CD workflows").option("--format <type>","Output format: json (default), yaml, or csv",{default:"json"}).option("--branches <branches>","Comma-separated list of PHP branches to include (e.g., 8.4,8.3,8.2)").option("--fallback <versions>","Comma-separated list of fallback versions if detection fails").action(async(t)=>{try{let{getPhpVersionsForWorkflow:i}=await import("../chunk-kdydq4xh.js"),r={};if(t.branches)r.supportedBranches=t.branches.split(",").map((a)=>a.trim());if(t.fallback)r.fallbackVersions=t.fallback.split(",").map((a)=>a.trim());let o=i(r);switch(t.format.toLowerCase()){case"yaml":console.log(`php_versions:
94
+ \uD83D\uDDA5️ OS-specific dependencies:`),Object.entries(y.osSpecificDeps).forEach(([w,W])=>{if(W.length>0)console.log(` ${w}: ${W.map((q)=>q.name).join(", ")}`)})}v.exit(0)}catch(r){if(i.json){let o={success:!1,error:String(r),timestamp:new Date().toISOString()};console.log(JSON.stringify(o))}else console.error("Error resolving dependencies:",r);v.exit(1)}});F.command("get-php-versions","Get PHP versions suitable for CI/CD workflows").option("--format <type>","Output format: json (default), yaml, or csv",{default:"json"}).option("--branches <branches>","Comma-separated list of PHP branches to include (e.g., 8.4,8.3,8.2)").option("--fallback <versions>","Comma-separated list of fallback versions if detection fails").action(async(t)=>{try{let{getPhpVersionsForWorkflow:i}=await import("../chunk-hrexw240.js"),r={};if(t.branches)r.supportedBranches=t.branches.split(",").map((a)=>a.trim());if(t.fallback)r.fallbackVersions=t.fallback.split(",").map((a)=>a.trim());let o=i(r);switch(t.format.toLowerCase()){case"yaml":console.log(`php_versions:
95
95
  ${o.map((a)=>` - "${a}"`).join(`
96
- `)}`);break;case"csv":console.log(o.join(","));break;case"json":default:console.log(JSON.stringify(o));break}v.exit(0)}catch(i){console.error("Error getting PHP versions:",i),v.exit(1)}});F.command("generate-zig","Generate Zig package definitions from TypeScript packages").option("--packages-dir <dir>","Directory containing TypeScript package files",{default:"src/packages"}).option("--output <file>","Output Zig file path",{default:"packages.zig"}).option("--aliases","Also generate aliases file").option("--aliases-output <file>","Output file for Zig aliases",{default:"aliases.zig"}).action(async(t)=>{try{let{generateZigDefinitions:i,generateZigAliases:r}=await import("../chunk-ya1t19xm.js"),{packagesDir:o="src/packages",output:a="packages.zig",aliases:l=!1,aliasesOutput:g="aliases.zig"}=t;if(console.log("\uD83D\uDE80 Generating Zig package definitions..."),await i(o,a),l)console.log(`
96
+ `)}`);break;case"csv":console.log(o.join(","));break;case"json":default:console.log(JSON.stringify(o));break}v.exit(0)}catch(i){console.error("Error getting PHP versions:",i),v.exit(1)}});F.command("generate-zig","Generate Zig package definitions from TypeScript packages").option("--packages-dir <dir>","Directory containing TypeScript package files",{default:"src/packages"}).option("--output <file>","Output Zig file path",{default:"packages.zig"}).option("--aliases","Also generate aliases file").option("--aliases-output <file>","Output file for Zig aliases",{default:"aliases.zig"}).action(async(t)=>{try{let{generateZigDefinitions:i,generateZigAliases:r}=await import("../chunk-vpgcwp7a.js"),{packagesDir:o="src/packages",output:a="packages.zig",aliases:l=!1,aliasesOutput:g="aliases.zig"}=t;if(console.log("\uD83D\uDE80 Generating Zig package definitions..."),await i(o,a),l)console.log(`
97
97
  \uD83D\uDE80 Generating Zig package aliases...`),await r(o,g);console.log(`
98
- ✅ Zig code generation complete!`),v.exit(0)}catch(i){console.error("Error generating Zig definitions:",i),v.exit(1)}});F.command("release [type]","Release a Zig package (changelog, bump, commit, tag, push, publish)").option("-y, --yes","Non-interactive mode (skip confirmation prompts)").option("--dry-run","Preview the release without changing anything").option("--no-changelog","Skip changelog generation").option("--no-push","Skip pushing the commit and tag").option("--no-publish","Skip publishing to the pantry registry").action(async(t,i)=>{let r=(t??"patch").toLowerCase();if(!["patch","minor","major"].includes(r))console.error(`error: invalid release type "${r}" (expected: patch | minor | major)`),v.exit(1);let{runRelease:o}=await import("../chunk-cwa30yjr.js"),a=await o({type:r,yes:i.yes,dryRun:i.dryRun,noChangelog:i.changelog===!1,noPush:i.push===!1,noPublish:i.publish===!1});v.exit(a.exitCode)});F.command("apps","List installed desktop applications with version info").option("-j, --json","Output as JSON").action(async(t)=>{try{let{scanInstalledApps:i}=await import("../chunk-8h6c7pf2.js"),r=i();if(t.json)console.log(JSON.stringify({success:!0,apps:r,total:r.length}));else{console.log(`
98
+ ✅ Zig code generation complete!`),v.exit(0)}catch(i){console.error("Error generating Zig definitions:",i),v.exit(1)}});F.command("release [type]","Release a Zig package (changelog, bump, commit, tag, push, publish)").option("-y, --yes","Non-interactive mode (skip confirmation prompts)").option("--dry-run","Preview the release without changing anything").option("--no-changelog","Skip changelog generation").option("--no-push","Skip pushing the commit and tag").option("--no-publish","Skip publishing to the pantry registry").action(async(t,i)=>{let r=(t??"patch").toLowerCase();if(!["patch","minor","major"].includes(r))console.error(`error: invalid release type "${r}" (expected: patch | minor | major)`),v.exit(1);let{runRelease:o}=await import("../chunk-cwa30yjr.js"),a=await o({type:r,yes:i.yes,dryRun:i.dryRun,noChangelog:i.changelog===!1,noPush:i.push===!1,noPublish:i.publish===!1});v.exit(a.exitCode)});F.command("apps","List installed desktop applications with version info").option("-j, --json","Output as JSON").action(async(t)=>{try{let{scanInstalledApps:i}=await import("../chunk-qy9xynqs.js"),r=i();if(t.json)console.log(JSON.stringify({success:!0,apps:r,total:r.length}));else{console.log(`
99
99
  Installed Desktop Apps (${r.length}):
100
- `),console.log("Application".padEnd(40)+"Version"),console.log("-".repeat(60));for(let o of r)console.log(`${o.name.padEnd(40)}${o.version}`)}v.exit(0)}catch(i){console.error("Error listing apps:",i),v.exit(1)}});F.command("apps-outdated","Check for outdated desktop applications").option("-j, --json","Output as JSON").action(async(t)=>{try{let{checkAppUpdates:i}=await import("../chunk-8h6c7pf2.js");if(!t.json)console.log("Checking desktop apps for updates...");let r=await i(),o=r.filter((a)=>a.updateAvailable);if(t.json)console.log(JSON.stringify({success:!0,apps:r,outdated:o.length,total:r.length,timestamp:new Date().toISOString()}));else{if(o.length>0){console.log(`
100
+ `),console.log("Application".padEnd(40)+"Version"),console.log("-".repeat(60));for(let o of r)console.log(`${o.name.padEnd(40)}${o.version}`)}v.exit(0)}catch(i){console.error("Error listing apps:",i),v.exit(1)}});F.command("apps-outdated","Check for outdated desktop applications").option("-j, --json","Output as JSON").action(async(t)=>{try{let{checkAppUpdates:i}=await import("../chunk-qy9xynqs.js");if(!t.json)console.log("Checking desktop apps for updates...");let r=await i(),o=r.filter((a)=>a.updateAvailable);if(t.json)console.log(JSON.stringify({success:!0,apps:r,outdated:o.length,total:r.length,timestamp:new Date().toISOString()}));else{if(o.length>0){console.log(`
101
101
  Outdated Apps (${o.length}):
102
102
  `),console.log("Application".padEnd(30)+"Current".padEnd(16)+"Latest".padEnd(16)+"Source"),console.log("-".repeat(75));for(let l of o)console.log(`${l.name.padEnd(30)}${l.currentVersion.padEnd(16)}${(l.latestVersion||"?").padEnd(16)}${l.source}`)}else console.log(`
103
103
  All desktop apps are up to date!`);let a=r.filter((l)=>!l.updateAvailable&&l.source!=="system"&&l.source!=="unknown");if(a.length>0)console.log(`
104
- ${a.length} app(s) up to date, ${r.filter((l)=>l.source==="unknown").length} unchecked`)}v.exit(0)}catch(i){console.error("Error checking app updates:",i),v.exit(1)}});F.command("apps-update <name>","Update a desktop application from the pantry registry").action(async(t)=>{try{let{updateApp:i}=await import("../chunk-8h6c7pf2.js");console.log(`Updating ${t} from the pantry registry...`);let r=await i(t);if(r.success)console.log(`Successfully updated ${t} to ${r.version}`);else console.error(`Failed to update ${t}: ${r.error}`),v.exit(1);v.exit(0)}catch(i){console.error("Error updating app:",i),v.exit(1)}});F.command("install <pkg>","Install a system package (e.g. ziglang.org@0.17.0-dev)").option("--global","Link binaries into the user-level global bin so they appear on PATH").option("--install-dir <dir>","Where to download into (default: ./pantry)").option("--platform <target>","Install for a target platform (e.g. linux-x86_64)").option("--no-bin-links","Skip creating local .bin/ symlinks").option("--quiet","Suppress progress output").action(async(t,i)=>{let r=t.lastIndexOf("@"),o=r>0,a=o?t.slice(0,r):t,l=o?t.slice(r+1):"latest";try{let g=await z(a,l,{installDir:i.installDir,platform:qt(i.platform),createBinLinks:i.binLinks!==!1,quiet:i.quiet,globalBin:i.global?!0:void 0});if(!i.quiet){if(console.log(`
104
+ ${a.length} app(s) up to date, ${r.filter((l)=>l.source==="unknown").length} unchecked`)}v.exit(0)}catch(i){console.error("Error checking app updates:",i),v.exit(1)}});F.command("apps-update <name>","Update a desktop application from the pantry registry").action(async(t)=>{try{let{updateApp:i}=await import("../chunk-qy9xynqs.js");console.log(`Updating ${t} from the pantry registry...`);let r=await i(t);if(r.success)console.log(`Successfully updated ${t} to ${r.version}`);else console.error(`Failed to update ${t}: ${r.error}`),v.exit(1);v.exit(0)}catch(i){console.error("Error updating app:",i),v.exit(1)}});F.command("install <pkg>","Install a system package (e.g. ziglang.org@0.17.0-dev)").option("--global","Link binaries into the user-level global bin so they appear on PATH").option("--install-dir <dir>","Where to download into (default: ./pantry)").option("--platform <target>","Install for a target platform (e.g. linux-x86_64)").option("--no-bin-links","Skip creating local .bin/ symlinks").option("--quiet","Suppress progress output").action(async(t,i)=>{let r=t.lastIndexOf("@"),o=r>0,a=o?t.slice(0,r):t,l=o?t.slice(r+1):"latest";try{let g=await z(a,l,{installDir:i.installDir,platform:qt(i.platform),createBinLinks:i.binLinks!==!1,quiet:i.quiet,globalBin:i.global?!0:void 0});if(!i.quiet){if(console.log(`
105
105
  ✓ ${g.name}@${g.version}`),console.log(` installed to: ${g.installPath}`),g.globalLinks&&g.globalLinks.length>0){if(console.log(` linked into: ${O.dirname(g.globalLinks[0])}`),!v.env.PATH?.split(O.delimiter).includes(O.dirname(g.globalLinks[0])))console.log(`
106
106
  ⚠ ${O.dirname(g.globalLinks[0])} is not on your PATH yet.`),console.log(" Run `ts-pantry shell-init --install` once to fix that.")}}v.exit(0)}catch(g){console.error(`Error installing ${t}:`,g instanceof Error?g.message:g),v.exit(1)}});function Kt(t){let i=re(t);if(i.length===0)return[];try{return P(i[0]).map((r)=>r.version&&r.version!=="latest"?`${r.name}@${String(r.version).replace(/^[\^~>=<]+/,"")}`:r.name)}catch{return[]}}F.command("env","Print the environment pantry-installed packages need, for a program to consume").option("--json","Print JSON instead of shell assignments").option("--dir <path>","A project directory, whose dependency file is included (default: cwd)").option("--install","Install anything the dependency file names that is missing").action(async(t)=>{let i=O.resolve(t.dir??v.cwd()),r=Kt(i);if(t.install&&r.length>0)for(let l of r){let g=l.lastIndexOf("@"),b=g>0;await z(b?l.slice(0,g):l,b?l.slice(g+1):"latest",{globalBin:!0,quiet:!0}).catch((u)=>{console.error(`# could not install ${l}: ${u instanceof Error?u.message:u}`)})}let o=f(),a=[O.join(i,".bin"),o].filter((l)=>C.existsSync(l));if(t.json)console.log(JSON.stringify({path:a,PATH:[...a,v.env.PATH??""].filter(Boolean).join(O.delimiter),dependencies:r,globalBin:o},null,2)),v.exit(0);console.log(`export PATH="${[...a,"$PATH"].join(O.delimiter)}"`),v.exit(0)});F.command("shell-init","Print the shell snippet that puts pantry-installed packages on PATH").option("--install","Append the snippet to your shell rc file (idempotent)").option("--uninstall","Remove a previously installed snippet").option("--shell <shell>","Force a shell (zsh|bash|fish) instead of autodetect").action(async(t)=>{let i=t.shell??j();try{if(t.uninstall){let o=ce({shell:i});console.log(o.changed?`✓ Removed pantry shell-init from ${o.rcFile}`:`Nothing to remove (no pantry shell-init block in ${o.rcFile})`),v.exit(0)}if(t.install){let o=ie({shell:i});if(o.changed)console.log(`✓ Added pantry shell-init to ${o.rcFile}`),console.log(` Restart your shell or run: source ${o.rcFile}`);else console.log(`✓ Already integrated in ${o.rcFile}`);v.exit(0)}let r=E(i);if(v.stdout.isTTY){if(console.log(`# Detected shell: ${i}`),console.log(`# Global bin dir: ${f()}`),r)console.log(`# Append this to: ${r}`);console.log("# Or run: ts-pantry shell-init --install"),console.log()}v.stdout.write(L({shell:i})),v.exit(0)}catch(r){console.error("Error:",r instanceof Error?r.message:r),v.exit(1)}});F.command("build [context]","Build a Dockerfile into an OCI image (no Docker daemon required)").option("-f, --file <path>","Path to the Dockerfile (default: <context>/Dockerfile)").option("-t, --tag <tag>","Image tag, e.g. myapp:latest (repeatable)").option("--target <stage>","Target stage for a multi-stage build").option("--build-arg <kv>","Set a build arg KEY=VALUE (repeatable)").option("--platform <os/arch>","Target platform (default: linux/<host-arch>)").option("--output <dir>","Where to write the image archive + OCI layout (default: <context>/.pantry/images)").option("--run-mode <mode>","How to run RUN steps: auto|chroot|host|skip (default: auto)").option("--push","Push the built image to the pantry registry after building").option("--quiet","Suppress step output").action(async(t,i)=>{try{let r=[].concat(i.tag??[]),o={};for(let l of[].concat(i.buildArg??[])){let g=l.indexOf("=");if(g!==-1)o[l.slice(0,g)]=l.slice(g+1)}let a=await de({context:t??".",dockerfile:i.file,tags:r,target:i.target,buildArgs:o,platform:i.platform,outputDir:i.output,runMode:i.runMode,quiet:i.quiet});if(!i.quiet){if(console.log(`
107
107
  ✓ Built ${a.imageId}`),r.length)console.log(` tags: ${r.join(", ")}`);console.log(` archive: ${a.archivePath}`),console.log(` oci layout: ${a.ociLayoutPath}`)}if(i.push){let l=G(r[0]||"app:latest");if(!i.quiet)console.log(`
@@ -0,0 +1 @@
1
+ import{e,Ce,Ut,je}from"./chunk-r5szm46d.js";je();export{e as aliases,Ut as packages,Ce as pantry};
@@ -1 +1 @@
1
- import{le,pe,_e,ge,Rt,Ot,me,r,qt,Nt,F,Te,Yt,Lt,Ft}from"./chunk-49a6jmw9.js";export{Nt as convertDomainToFileName,r as convertDomainToVarName,Rt as fetchPackageListFromGitHub,me as formatObjectWithoutQuotedKeys,Ft as getCanonicalDomain,_e as getGitHubPackageCache,Yt as getPackageAliases,F as guessOriginalDomain,Lt as isKnownAlias,Ot as logPkgxProjects,Te as resolvePackageDomain,ge as saveGitHubPackageCache,le as saveRateLimitInfo,pe as shouldProceedWithGitHubRequest,qt as toPropertyKey};
1
+ import{le,pe,_e,ge,Rt,Ot,me,r,qt,Nt,F,Te,Yt,Lt,Ft}from"./chunk-r5szm46d.js";export{Nt as convertDomainToFileName,r as convertDomainToVarName,Rt as fetchPackageListFromGitHub,me as formatObjectWithoutQuotedKeys,Ft as getCanonicalDomain,_e as getGitHubPackageCache,Yt as getPackageAliases,F as guessOriginalDomain,Lt as isKnownAlias,Ot as logPkgxProjects,Te as resolvePackageDomain,ge as saveGitHubPackageCache,le as saveRateLimitInfo,pe as shouldProceedWithGitHubRequest,qt as toPropertyKey};
@@ -1 +1 @@
1
- import{I,O,sa,Dt,Ue,u,q,De,na,oe,Se,se,N,$e,ra}from"./chunk-49a6jmw9.js";export{$e as compareVersionsDesc,Se as getActivePackages,O as getAvailableVersions,I as getLatestVersion,u as getPackageInfo,na as getPackagesByPattern,sa as getPhpVersionsForWorkflow,oe as getPopularPackages,Dt as isVersionAvailable,N as parseVersion,q as resolvePackageDomain,Ue as resolveVersion,ra as resolveVersionFromMetadata,De as searchPackages,se as validatePackageSpec};
1
+ import{I,O,sa,Dt,Ue,u,q,De,na,oe,Se,se,N,$e,ra}from"./chunk-r5szm46d.js";export{$e as compareVersionsDesc,Se as getActivePackages,O as getAvailableVersions,I as getLatestVersion,u as getPackageInfo,na as getPackagesByPattern,sa as getPhpVersionsForWorkflow,oe as getPopularPackages,Dt as isVersionAvailable,N as parseVersion,q as resolvePackageDomain,Ue as resolveVersion,ra as resolveVersionFromMetadata,De as searchPackages,se as validatePackageSpec};
@@ -0,0 +1,15 @@
1
+ import{existsSync as Be,readFileSync as Fe}from"node:fs";import{join as Ye,resolve as Y,sep as We}from"node:path";var _a={revision:"d675077c317c486d8b5743f3432c40ddf1cd693a",version:"0.0.295"};function be(e){let r=e.split(".");return r.length>1&&r.every((n)=>/^[A-Za-z]\w*$/.test(n))}function g(e,r){let n=Y(e,r);if(n===Y(e)||!n.startsWith(`${Y(e)}${We}`))throw Error(`Native output must be inside the project: ${r}`);return n}function te(e,r=!1){let n=Ye(e,"pantry.json");if(!Be(n)){if(r)throw Error("Native publishing requires pantry.json with a native configuration");return}let i=JSON.parse(Fe(n,"utf8")).native;if(!i){if(r)throw Error("pantry.json must declare native app settings");return}if(i.environment!==void 0&&(typeof i.environment!=="string"||!/^[a-z][a-z0-9-]*$/.test(i.environment)))throw Error("Invalid native release environment name");if(i.runtime&&(!/^[a-f0-9]{40}$/.test(i.runtime.revision)||!/^\d+\.\d+\.\d+$/.test(i.runtime.version)))throw Error("Craft requires an immutable 40-character Git revision and an exact version");for(let s of[i.build,...i.checks?.before??[],...i.checks?.after??[]])if(s!==void 0&&(!Array.isArray(s)||!s.length||s.some((o)=>typeof o!=="string"||!o)))throw Error("Native commands must be nonempty argument arrays");if(i.macos?.maxBundleSize!==void 0&&(!Number.isSafeInteger(i.macos.maxBundleSize)||i.macos.maxBundleSize<=0))throw Error("maxBundleSize must be a positive byte count");if(i.android){if(g(e,i.android.bundle),!be(i.android.packageName)||!i.android.track||!["draft","completed","inProgress"].includes(i.android.status))throw Error("Android publishing requires a package name, track and explicit release status");let s=i.android.userFraction;if(i.android.status==="inProgress"?!(typeof s==="number"&&s>0&&s<1):s!==void 0)throw Error("Only an inProgress rollout requires userFraction between zero and one")}return i}import je from"node:process";import{spawn as Ue}from"node:child_process";var a=(e,r,n={})=>new Promise((i,s)=>{let o=Ue(e,r,{cwd:n.cwd,env:n.env??je.env,stdio:n.inherit?"inherit":[n.input===void 0?"ignore":"pipe","pipe","pipe"]});if(n.input!==void 0)o.stdin?.end(n.input);let c="",f="";o.stdout?.on("data",(u)=>{c+=u.toString()}),o.stderr?.on("data",(u)=>{f+=u.toString()}),o.once("error",s),o.once("close",(u)=>i({exitCode:u??1,stdout:c,stderr:f}))});function t(e,r){if(r.exitCode!==0)throw Error(`${e} failed (${r.exitCode}): ${r.stdout}
2
+ ${r.stderr}`.trim());return r}import V from"node:process";import{createHash as ze}from"node:crypto";import{existsSync as T,mkdirSync as Ge,readFileSync as W,writeFileSync as qe}from"node:fs";import{join as w,resolve as Je}from"node:path";function ut(e,r,n=V.arch){if(!/^[a-f0-9]{40}$/.test(e))throw Error("Craft revision must be immutable");if(!/^\d+\.\d+(?:\.\d+)?$/.test(r))throw Error("A valid minimum macOS version is required");let i=n==="arm64"?"aarch64":n==="x64"?"x86_64":void 0;if(!i)throw Error(`Unsupported native architecture: ${n}`);return`revision=${e};ReleaseSmall;js-runtime=false;target=${i}-macos.${r}`}function ea(e,r,n=V.arch){if(!e.runtime)throw Error("No Craft runtime configured");return ze("sha256").update(`${ut(e.runtime.revision,r,n)};version=${e.runtime.version};schema=1`).digest("hex")}function ta(e){let r=e.workspaces?.[""]?.system?.["ziglang.org"];if(typeof r!=="string"||!/^\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(r))throw Error("Craft must lock an exact Zig compiler version");return r}async function dt(e,r,n,i={}){let s=i.env??V.env;if(s.CRAFT_BIN){let v=Je(e,s.CRAFT_BIN);if(!T(v))throw Error(`CRAFT_BIN does not exist: ${v}`);return v}if(!r.runtime)return;if(V.platform!=="darwin")throw Error("The configured macOS Craft runtime must be built on macOS");let o=i.command??a,{revision:c,version:f}=r.runtime,u=ut(c,n),l=w(e,".pantry/native/runtimes",ea(r,n)),p=w(l,"Tools/craft"),d=w(p,"packages/zig/zig-out/bin/craft"),y=w(p,".pantry-runtime-profile"),m=async(v,P,h=s,b=!1)=>t(v[0],await o(v[0],v.slice(1),{cwd:P,env:h,inherit:b})),E=async(v,P,h)=>{if(!/^[a-f0-9]{40}$/.test(P))throw Error(`Missing immutable dependency pin: ${v}`);if(Ge(h,{recursive:!0}),!T(w(h,".git")))await m(["git","init","--quiet"],h),await m(["git","remote","add","origin",`https://github.com/${v}.git`],h),await m(["git","fetch","--quiet","--depth","1","origin",P],h),await m(["git","checkout","--quiet","--detach","FETCH_HEAD"],h);let b=(await m(["git","rev-parse","HEAD"],h)).stdout.trim();if(b!==P)throw Error(`Unexpected source revision in ${h}: ${b}`);if((await m(["git","status","--porcelain","--untracked-files=no"],h)).stdout.trim())throw Error(`Modified runtime source in ${h}`)};await E("craft-native/craft",c,p);let I=W(w(p,".github/actions/first-party-zig-deps/pins.env"),"utf8");for(let[v,P]of[["zig-js","zig_js"],["zig-regex","zig_regex"],["zig-gc","zig_gc"]]){let h=I.match(new RegExp(`^${P}=([a-f0-9]{40})$`,"m"))?.[1];if(!h)throw Error(`Missing upstream dependency pin: ${P}`);await E(`zig-utils/${v}`,h,w(l,"Libraries",v))}if(!T(d)||!T(y)||W(y,"utf8")!==u){let v=JSON.parse(W(w(p,"pantry.lock"),"utf8")),P=ta(v);await m(["pantry","install",`ziglang.org@${P}`,"--no-save","--ignore-scripts"],p,s,!0);let h=w(p,"pantry/ziglang.org",`v${P}`,"bin/zig");if(!T(h))throw Error(`Locked Zig compiler is missing: ${h}`);let b=(await m(["xcrun","--sdk","macosx","--show-sdk-path"],p)).stdout.trim();if(!b)throw Error("The macOS SDK is required");let H=u.split("target=")[1];await m(["bun","scripts/zig.ts","--core","--versioned","build","-Doptimize=ReleaseSmall","-Djs-runtime=false",`-Dtarget=${H}`,`-Dmacos-sdk=${b}`],p,{...s,CRAFT_ZIG:h},!0),qe(y,u)}let C=await m([d,"--version"],p);if(!`${C.stdout}${C.stderr}`.includes(`craft version ${f}`))throw Error(`Craft does not match configured version ${f}`);return d}import Me from"node:process";import{existsSync as Z,mkdirSync as He,mkdtempSync as Xe,readFileSync as Ze,rmSync as X,writeFileSync as Q}from"node:fs";import{tmpdir as Qe}from"node:os";import{join as O,resolve as et}from"node:path";function j(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&apos;")}function aa(e){let r=(n)=>typeof n==="boolean"?`<${n}/>`:typeof n==="string"?`<string>${j(n)}</string>`:Array.isArray(n)&&n.every((i)=>typeof i==="string")?`<array>${n.map((i)=>`<string>${j(i)}</string>`).join("")}</array>`:(()=>{throw Error("Unsupported entitlement value")})();return`<?xml version="1.0" encoding="UTF-8"?>
3
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
4
+ <plist version="1.0"><dict>${Object.entries(e).map(([n,i])=>`<key>${j(n)}</key>${r(i)}`).join("")}</dict></plist>
5
+ `}async function Ta(e,r={}){let n=te(e),i=r.env??Me.env;if(!n)return{overrides:{},cleanup(){}};let s=await dt(e,n,r.minimumSystemVersion??"13.0",{env:i}),o=i.PANTRY_DISTRIBUTION==="app-store",c=o?n.macos?.entitlements?.appStore:n.macos?.entitlements?.direct,f=i.APPLE_SIGNING_IDENTITY,u=i.APPLE_PROVISIONING_PROFILE_PATH||i.APPLE_PROVISIONING_PROFILE,l=Xe(O(Qe(),"pantry-native-build-"));try{let p=O(l,"entitlements.plist");if(c)Q(p,aa(c),{mode:384});if(u&&!Z(u))throw Error("APPLE_PROVISIONING_PROFILE must name a local profile file");if(o&&(!f||!u||c?.["com.apple.security.app-sandbox"]!==!0))throw Error("App Store builds require a signing identity, provisioning profile and sandbox entitlement");return{overrides:{...s?{craftPath:s}:{},...o?{output:g(e,".pantry/native/app-store")}:{},...f?{macosSigning:{identity:f,...u?{provisioningProfile:et(u)}:{},...c?{entitlements:p}:{},hardenedRuntime:!o}}:{}},cleanup(){X(l,{recursive:!0,force:!0})}}}catch(p){throw X(l,{recursive:!0,force:!0}),p}}function Ra(e,r){g(e,r.path);let n=O(e,".pantry/native");He(n,{recursive:!0}),Q(O(n,"artifact.json"),`${JSON.stringify(r,null,2)}
6
+ `)}function ke(e){let r=JSON.parse(Ze(O(e,".pantry/native/artifact.json"),"utf8"));if(g(e,r.path),!r.name||!r.bundleId||!r.version||!r.buildNumber||!Z(r.path))throw Error("The native build did not produce a complete artifact manifest");return r}import tt from"node:process";import{createHash as rt}from"node:crypto";import{existsSync as R,mkdtempSync as re,readFileSync as ie,rmSync as ne,writeFileSync as oe}from"node:fs";import{tmpdir as se}from"node:os";import{basename as it,dirname as nt,join as x}from"node:path";import{setTimeout as ot}from"node:timers/promises";function ht(e=tt.env){if(e.APPLE_NOTARY_KEYCHAIN_PROFILE)return{keychainProfile:e.APPLE_NOTARY_KEYCHAIN_PROFILE};let r=e.APP_STORE_CONNECT_API_KEY_ID,n=e.APP_STORE_CONNECT_ISSUER_ID||e.APP_STORE_CONNECT_API_ISSUER_ID,i=e.APP_STORE_CONNECT_PRIVATE_KEY||(e.APP_STORE_CONNECT_API_KEY_PATH?ie(e.APP_STORE_CONNECT_API_KEY_PATH,"utf8"):void 0);if(r||n||i){if(!r||!n||!i)throw Error("Notarization requires complete App Store Connect API credentials");if(!/^[A-Z0-9]+$/.test(r))throw Error("Invalid App Store Connect API key ID");return{apiKeyId:r,issuerId:n,privateKey:i}}if(e.APPLE_ID&&e.APPLE_APP_SPECIFIC_PASSWORD&&e.APPLE_TEAM_ID)return{appleId:e.APPLE_ID,password:e.APPLE_APP_SPECIFIC_PASSWORD,teamId:e.APPLE_TEAM_ID};throw Error("Notarization requires an existing keychain profile, App Store Connect API key, or Apple ID credentials")}async function ee(e,r,n){let i=e==="staple"?"Staple notarization":"Validate notarization";for(let s=0;;s++){let o=await n("xcrun",["stapler",e,r]),c=/NSURLErrorDomain\s+Code=-(?:1001|1003|1004|1005|1009)\b/.test(`${o.stdout}
7
+ ${o.stderr}`);if(o.exitCode===0||!c||s===4){t(i,o);return}await ot(1000*2**s)}}async function ft(e,r,n=a){if(!R(e)||!/\.(dmg|pkg|zip)$/i.test(e))throw Error("Notarization requires an existing DMG, PKG or ZIP");let i=re(x(se(),"pantry-notary-"));try{let s;if("keychainProfile"in r)s=["--keychain-profile",r.keychainProfile];else if("apiKeyId"in r){let f=x(i,"AuthKey.p8");oe(f,r.privateKey,{mode:384}),s=["--key",f,"--key-id",r.apiKeyId,"--issuer",r.issuerId]}else s=["--apple-id",r.appleId,"--password",r.password,"--team-id",r.teamId];let o=t("Apple notarization",await n("xcrun",["notarytool","submit",e,...s,"--wait","--timeout","30m","--output-format","json"])),c=JSON.parse(o.stdout);if(!c.id||c.status!=="Accepted")throw Error(`Apple did not accept notarization: ${c.status??"unknown status"} (${c.id??"no submission ID"})`);if(!e.toLowerCase().endsWith(".zip"))await ee("staple",e,n),await ee("validate",e,n);return{schemaVersion:1,file:it(e),submissionId:c.id,status:c.status,sha256:rt("sha256").update(ie(e)).digest("hex"),completedAt:new Date().toISOString()}}finally{ne(i,{recursive:!0,force:!0})}}async function yt(e,r,n,i=a){if(!e.endsWith(".app")||!R(e)||!r.endsWith(".pkg")||!n)throw Error("App Store packaging requires an app, .pkg output and installer identity");if(R(r))throw Error(`Refusing to overwrite an existing package: ${r}`);if(!R(x(e,"Contents/embedded.provisionprofile")))throw Error("App Store app is missing its provisioning profile");t("App signature",await i("codesign",["--verify","--deep","--strict",e]));let s=t("Read signed entitlements",await i("codesign",["-d","--entitlements",":-",e])),o=re(x(se(),"pantry-app-store-package-"));try{let c=x(o,"entitlements.plist");if(oe(c,s.stdout||s.stderr),JSON.parse(t("App sandbox entitlement",await i("plutil",["-convert","json","-o","-",c])).stdout)["com.apple.security.app-sandbox"]!==!0)throw Error("App Store app sandbox must be enabled");if(t("Create signed App Store package",await i("productbuild",["--component",e,"/Applications","--sign",n,r],{cwd:nt(r)})),t("Installer signature",await i("pkgutil",["--check-signature",r])),!R(r))throw Error("productbuild did not produce the requested package");return r}finally{ne(o,{recursive:!0,force:!0})}}import st from"node:process";import{existsSync as ce,mkdtempSync as at,renameSync as ct,rmSync as ue,writeFileSync as pt}from"node:fs";import{tmpdir as lt}from"node:os";import{join as pe}from"node:path";async function bt(e,r=st.env,n=a){if(!e.endsWith(".aab")||!ce(e))throw Error("Android signing requires an existing .aab");let i=[r.ANDROID_KEYSTORE_BASE64,r.ANDROID_KEYSTORE_PASSWORD,r.ANDROID_KEY_ALIAS,r.ANDROID_KEY_PASSWORD];if(i.some(Boolean)&&!i.every(Boolean))throw Error("Android signing requires a keystore, alias, store password and key password");let s=at(pe(lt(),"pantry-android-signing-")),o=`${e}.pantry-signed.aab`,c=async(f)=>{let u=t("Android bundle signature",await n("jarsigner",["-J-Duser.language=en","-J-Duser.country=US","-verify",f]));if(!/jar verified\./i.test(u.stdout)||/jar is unsigned/i.test(`${u.stdout}${u.stderr}`))throw Error("Android bundle is not signed")};try{if(i.every(Boolean)){if(ce(o))throw Error("A previous Android signing artifact still exists");let f=pe(s,"release.keystore");pt(f,Buffer.from(r.ANDROID_KEYSTORE_BASE64,"base64"),{mode:384}),t("Android bundle signing",await n("jarsigner",["-J-Duser.language=en","-J-Duser.country=US","-keystore",f,"-storepass:env","PANTRY_ANDROID_STORE_PASSWORD","-keypass:env","PANTRY_ANDROID_KEY_PASSWORD","-signedjar",o,e,r.ANDROID_KEY_ALIAS],{env:{...r,PANTRY_ANDROID_STORE_PASSWORD:r.ANDROID_KEYSTORE_PASSWORD,PANTRY_ANDROID_KEY_PASSWORD:r.ANDROID_KEY_PASSWORD}})),await c(o),ct(o,e)}else await c(e)}finally{ue(o,{force:!0}),ue(s,{recursive:!0,force:!0})}}import{existsSync as Xt,readFileSync as Zt}from"node:fs";import{join as Qt}from"node:path";import{chmodSync as ri,existsSync as Ne,readFileSync as _e,renameSync as ii,rmSync as ni,writeFileSync as oi}from"node:fs";import{basename as ai,dirname as ci,resolve as Ae}from"node:path";import{createCipheriv as Br,createDecipheriv as de,createHash as U,createPrivateKey as mt,createPublicKey as z,diffieHellman as gt,generateKeyPairSync as Fr,hkdfSync as Et,randomBytes as Yr}from"node:crypto";var L="x25519-public:",fe="x25519-private:",le="encrypted:v2:",me="encrypted:",wt=Buffer.from("stacks-env:v2","utf8"),ye="Environment decryption failed: authentication or format error";function Nt(e){if(e.length===32)return e;return U("sha256").update(e).digest()}function _t(e,r,n,i){try{let s=de("aes-256-gcm",Nt(r),Buffer.from(n,"hex"));return s.setAuthTag(Buffer.from(i,"hex")),Buffer.concat([s.update(Buffer.from(e,"hex")),s.final()]).toString("utf8")}catch{throw Error("Decryption failed: authentication or format error")}}function G(e){return e.toString("base64url")}function A(e,r,n){if(typeof e!=="string"||e.length>0&&!/^[A-Za-z0-9_-]+$/.test(e))throw Error(`${r} is not canonical base64url`);let i=Buffer.from(e,"base64url");if(G(i)!==e)throw Error(`${r} is not canonical base64url`);if(n!==void 0&&i.length!==n)throw Error(`${r} has an invalid length`);return i}function At(e){if(!e.startsWith(L))throw Error("Legacy or invalid public key. Run buddy env:rotate before creating new ciphertext.");let r=z({key:A(e.slice(L.length),"public key"),format:"der",type:"spki"});if(r.asymmetricKeyType!=="x25519")throw Error("Public key is not X25519");return r}function K(e){if(typeof e!=="string")return!1;try{let r=At(e);return e===`${L}${G(r.export({format:"der",type:"spki"}))}`}catch{return!1}}function ge(e){if(!e.startsWith(fe))throw Error("Private key is not a version 2 X25519 key");let r=mt({key:A(e.slice(fe.length),"private key"),format:"der",type:"pkcs8"});if(r.asymmetricKeyType!=="x25519")throw Error("Private key is not X25519");return r}function B(e,r){if(!K(e)||typeof r!=="string")return!1;try{let n=z(ge(r));return e===`${L}${G(n.export({format:"der",type:"spki"}))}`}catch{return!1}}function St(e){return Buffer.from(`stacks-env:v2;${e.epk};${e.salt};${e.nonce}`,"utf8")}function It(e){let r=A(e.slice(le.length),"envelope").toString("utf8"),n=JSON.parse(r);if(!n||typeof n!=="object"||Array.isArray(n))throw Error("envelope is not an object");let i=Object.keys(n).sort(),s=["ciphertext","epk","nonce","salt","tag","v"];if(i.length!==s.length||i.some((o,c)=>o!==s[c]))throw Error("envelope fields are invalid");if(n.v!==2)throw Error("envelope version is unsupported");for(let o of["epk","salt","nonce","ciphertext","tag"])if(typeof n[o]!=="string")throw Error(`${o} is invalid`);return n}function $t(e,r){try{let n=It(e),i=ge(r),s=z({key:A(n.epk,"ephemeral public key"),format:"der",type:"spki"});if(s.asymmetricKeyType!=="x25519")throw Error("ephemeral key is not X25519");let o=A(n.salt,"salt",16),c=A(n.nonce,"nonce",12),f=A(n.ciphertext,"ciphertext"),u=A(n.tag,"tag",16),l=gt({privateKey:i,publicKey:s}),p=Buffer.from(Et("sha256",l,o,wt,32));try{let d=de("aes-256-gcm",p,c);return d.setAAD(St(n)),d.setAuthTag(u),Buffer.concat([d.update(f),d.final()]).toString("utf8")}finally{l.fill(0),p.fill(0)}}catch{throw Error(ye)}}function Ct(e,r){try{if(!/^[0-9a-f]{64}$/.test(r))throw Error("invalid legacy private key");let n=Buffer.from(e.slice(me.length),"base64");if(n.length<32)throw Error("invalid legacy payload");let i=U("sha256").update(Buffer.from(r,"hex")).digest(),s=U("sha256").update(i).digest();return _t(n.subarray(32).toString("hex"),s,n.subarray(0,16).toString("hex"),n.subarray(16,32).toString("hex"))}catch{throw Error(ye)}}function q(e,r){if(!e.startsWith(me))return e;return e.startsWith(le)?$t(e,r):Ct(e,r)}import{spawnSync as Tt}from"node:child_process";import{readFileSync as Ot}from"node:fs";import{arch as Rt,hostname as Kt,platform as Ee,release as Dt,userInfo as Vt}from"node:os";import{basename as Lt,dirname as Bt,resolve as Ft}from"node:path";function F(e){return typeof e==="string"&&(e.startsWith("encrypted:")||e.startsWith("enc:"))}function he(e,r=Object.keys(e)){let n=r.map((i)=>e[i]).filter((i)=>F(i));return Object.fromEntries(Object.entries(e).filter(([,i])=>i===void 0||!n.some((s)=>i.includes(s))))}function D(e,r={}){let n={},i=[],s=[],o=e.split(`
8
+ `),c=he(r.processEnv||process.env);for(let f of o){let u=f.trim();if(!u||u.startsWith("#"))continue;if(u.startsWith("DOTENV_PUBLIC_KEY=")){let y=u.match(/^DOTENV_PUBLIC_KEY=["']?([^"'\n]+)["']?/);if(y&&y[1]!==void 0)n.DOTENV_PUBLIC_KEY=y[1];continue}let l=u.match(/^([^=]+)=(.*)$/);if(!l||l[1]===void 0||l[2]===void 0)continue;let p=l[1].trim(),d=l[2].trim();if(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'")){if(d=d.slice(1,-1),d.includes("\\n"))d=d.replace(/\\n/g,`
9
+ `)}if(d.startsWith("encrypted:")||d.startsWith("enc:")){if(!r.privateKey){s.push(p);continue}try{let y=d.startsWith("enc:")?`encrypted:${d.slice(4)}`:d;d=q(y,r.privateKey)}catch(y){i.push(`Failed to decrypt ${p}: ${y instanceof Error?y.message:"Unknown error"}`),s.push(p);continue}}d=Yt(d,{...c,...n}),d=zt(d),n[p]=d}return{parsed:n,errors:i,skippedEncrypted:s}}function Yt(e,r){return e.replace(/\$\{([^}]+)\}/g,(n,i)=>{let s=i.match(/^([^:\-+]+)(:-|-)(.+)$/);if(s){let[,c,f,u]=s,l=r[c];if(f===":-")return l||u;else return l!==void 0?l:u}let o=i.match(/^([^:\-+]+)(:?\+)(.+)$/);if(o){let[,c,f,u]=o,l=r[c];if(f===":+")return l?u:"";else return l!==void 0?u:""}return r[i]||""})}var Wt=new Set(["date","hostname","whoami","uname","pwd","echo","printf","cat","basename","dirname"]);function jt(e){let r=[],n="",i=null,s=!1;for(let o of e.trim()){if(s){n+=o,s=!1;continue}if(o==="\\"&&i!=="'"){s=!0;continue}if(i){if(o===i)i=null;else n+=o;continue}if(o==='"'||o==="'"){i=o;continue}if(/\s/.test(o)){if(n)r.push(n),n="";continue}n+=o}if(s||i)throw Error("Command substitution contains an unterminated escape or quote");if(n)r.push(n);return r}function Ut(e){let[r,...n]=e,i=n.some((s)=>s.startsWith("-"));if(r==="echo"&&!i)return n.join(" ");if(r==="printf"&&n.length===1&&!n[0]?.includes("%"))return n[0];if(r==="hostname"&&n.length===0)return Kt();if(r==="whoami"&&n.length===0)return Vt().username;if(r==="pwd"&&n.length===0)return process.cwd();if(r==="basename"&&n.length===1)return Lt(n[0]??"");if(r==="dirname"&&n.length===1)return Bt(n[0]??"");if(r==="cat"&&n.length>0&&!i)return n.map((s)=>Ot(Ft(process.cwd(),s),"utf8")).join("");if(r==="uname"){let s=n[0]??"-s";if(n.length<=1&&s==="-m")return Rt();if(n.length<=1&&s==="-r")return Dt();if(n.length<=1&&s==="-s")return{aix:"AIX",android:"Android",cygwin:"CYGWIN",darwin:"Darwin",freebsd:"FreeBSD",haiku:"Haiku",linux:"Linux",netbsd:"NetBSD",openbsd:"OpenBSD",sunos:"SunOS",win32:"Windows_NT"}[Ee()]??Ee()}return}function zt(e){return e.replace(/\$\(([^)]+)\)/g,(r,n)=>{try{let i=jt(n),s=i[0];if(!s||!Wt.has(s))return console.warn(`[env] Blocked command substitution for disallowed command: ${s}`),"";let o=Ut(i);if(o!==void 0)return o.trim();let c=Tt(s,i.slice(1),{encoding:"utf8",env:process.env});if(c.status===0)return c.stdout.trim();let f=c.stderr.trim();console.warn(`[env] Command substitution failed (exit code ${c.status??"unknown"}): ${s}${f?`: ${f}`:""}`)}catch(i){console.warn(`[env] Command substitution error: ${i instanceof Error?i.message:String(i)}`)}return""})}function Se(e){let r=((e||".env").split("/").pop()||"").replace(/^\.env\./,"").replace(/^\.env$/,"").toUpperCase();return{publicKeyName:r?`DOTENV_PUBLIC_KEY_${r}`:"DOTENV_PUBLIC_KEY",privateKeyName:r?`DOTENV_PRIVATE_KEY_${r}`:"DOTENV_PRIVATE_KEY"}}function Gt(e){let{publicKeyName:r}=Se(e);return r==="DOTENV_PUBLIC_KEY"?[r]:[r,"DOTENV_PUBLIC_KEY"]}function Ie(e){let{privateKeyName:r}=Se(e);return r==="DOTENV_PRIVATE_KEY"?[r]:[r,"DOTENV_PRIVATE_KEY"]}function J(e={}){let r=Ae(e.cwd||process.cwd(),e.keysFile||".env.keys"),n=Ne(r)?D(_e(r,"utf8")).parsed:{};for(let i of Ie(e.file)){let s=n[i]||process.env[i];if(s)return s}return}function qt(e,r,n,i){let s=i.file||".env",o=i.keysFile||".env.keys",[c]=Ie(i.file),f=`${e.length===1?"Value":"Values"} that cannot be decrypted: ${e.join(", ")}.`;if(!n)return[`Cannot read ${s}: no private key for it.`,` Expected ${c} in ${o} or the environment, and found neither.`,` ${f}`].join(`
10
+ `);let u=Gt(i.file).find((d)=>r[d]),l=u?r[u]:void 0,p=l&&!B(l,n)?` The private key found for it does not match ${u} in the file, so it belongs to a different key pair.`:" The private key found for it did not decrypt them. It may belong to a different key pair, or the values may be damaged.";return[`Cannot read ${s}: its private key does not decrypt it.`,p,` ${f}`].join(`
11
+ `)}function $e(e,r={}){let n=r.cwd||process.cwd(),i=Ae(n,r.file||".env");if(!Ne(i))return{success:!1,error:`File not found: ${i}`};try{let s=J(r),o=_e(i,"utf-8"),{parsed:c,skippedEncrypted:f}=D(o,{privateKey:s}),u=e&&!r.all?f.filter((d)=>d===e):f;if(u.length>0)return{success:!1,error:qt(u,c,s,r)};if(e&&!r.all){let d=c[e];if(d===void 0)return{success:!1,error:`Key not found: ${e}`};return{success:!0,output:d}}let l=c,p;switch(r.format){case"shell":p=Object.entries(l).map(([d,y])=>`${d}=${y}`).join(" ");break;case"eval":p=Object.entries(l).map(([d,y])=>`${d}="${y}"`).join(`
12
+ `);break;case"json":default:p=r.prettyPrint?JSON.stringify(l,null,2):JSON.stringify(l);break}return{success:!0,output:p}}catch(s){return{success:!1,error:`Failed to get: ${s instanceof Error?s.message:"Unknown error"}`}}}var Jt=/(?:^|_)(?:PASSWORD|PASSWD|SECRET|TOKEN|APIKEY|API_KEY|CREDENTIAL|CREDENTIALS|PRIVATE|SALT|DSN|CERT|CIPHER|SIGNATURE|WEBHOOK)(?:_|$)|(?:^|_)(?:ACCESS|SECRET)_KEY(?:_|$)|_KEY$/,Mt=/^DOTENV_(?:PUBLIC|PRIVATE)_KEY/,Ht=/^\$\{[^}]+\}$/;function Ce(e,r={}){let{placeholders:n={},strict:i=!1}=r,s=[];for(let[o,c]of Object.entries(e)){if(i&&o.startsWith("DOTENV_PUBLIC_KEY")){if(!K(c))s.push({key:o,reason:"invalid-public-key"});continue}if(i&&o.startsWith("DOTENV_PRIVATE_KEY")){if(c.trim())s.push({key:o,reason:"private-key-material"});continue}if(!c||c.trim()==="")continue;if(F(c))continue;if(Mt.test(o))continue;if(Ht.test(c.trim()))continue;let f=Jt.test(o),u=Object.prototype.hasOwnProperty.call(n,o)&&n[o]===c;if(f&&!u){s.push({key:o,reason:"plaintext-secret"});continue}if(i)s.push({key:o,reason:"plaintext-value"})}return s}function xe(e,r){if(!/^[a-z][a-z0-9-]*$/.test(r))throw Error("Invalid native release environment name");let n=Qt(e,`.env.${r}`);if(!Xt(n))throw Error(`Native release environment is missing: .env.${r}`);let{parsed:i,skippedEncrypted:s}=D(Zt(n,"utf8"),{processEnv:{}});if([...Object.keys(i),...s].some((f)=>f.startsWith("DOTENV_PRIVATE_KEY")))throw Error("Private decryption keys must never be committed in environment files");let o=Ce(i,{strict:!0});if(o.length)throw Error(`Native release environment must be Buddy-encrypted: ${o.map((f)=>f.key).join(", ")}`);let c=i[`DOTENV_PUBLIC_KEY_${r.toUpperCase()}`]||i.DOTENV_PUBLIC_KEY;if(!K(c))throw Error("Native release environment requires valid Buddy public-key metadata")}function kt(e,r,n=()=>{}){xe(e,r);let i=`.env.${r}`,s=$e(void 0,{cwd:e,file:i,all:!0,format:"json"});if(!s.success||!s.output)throw Error(s.error||`Could not read ${i}`);let o=JSON.parse(s.output),c=o[`DOTENV_PUBLIC_KEY_${r.toUpperCase()}`]||o.DOTENV_PUBLIC_KEY;if(!B(c,J({cwd:e,file:i})))throw Error("Native release environment key does not match its public metadata");for(let[f,u]of Object.entries(o)){if(f.startsWith("DOTENV_PRIVATE_KEY")&&u)throw Error("Private decryption keys must never be committed in environment files");if(!f.startsWith("DOTENV_PUBLIC_KEY")&&u)n(u)}return Object.fromEntries(Object.entries(o).filter(([f])=>!f.startsWith("DOTENV_")))}import er from"node:process";import{existsSync as M,lstatSync as tr,readdirSync as rr,readFileSync as Le,rmSync as De,writeFileSync as ir}from"node:fs";import{basename as nr,dirname as Ve,join as _}from"node:path";import*as Oe from"node:crypto";import*as S from"node:fs";import*as Re from"node:os";import*as k from"node:path";function xt(e){return[...e.matchAll(/^\s*\d+\)\s+[0-9A-F]+\s+"([^"]+)"/gim)].map((r)=>r[1])}function ve(e,r){let n=r==="application"?["3rd Party Mac Developer Application","Apple Distribution","Developer ID Application"]:["3rd Party Mac Developer Installer","Developer ID Installer"];for(let i of n){let s=e.find((o)=>o.startsWith(i));if(s)return s}return}async function Ke(e,r){return a(e,r)}function N(e,r){if(r.exitCode===0)return;let n=`${r.stdout}
13
+ ${r.stderr}`.trim();throw Error(`${e} failed${n?`: ${n}`:` with exit code ${r.exitCode}`}`)}function Te(e,r,n){let i=k.join(e,r);return S.writeFileSync(i,Buffer.from(n.trim(),"base64"),{mode:384}),i}async function ae(e,r={}){if((r.platform||process.platform)!=="darwin")throw Error("Apple code signing requires a macOS runner");if(!e.applicationCertificate)throw Error("Apple code signing requires an application certificate");if(!e.certificatePassword)throw Error("Apple code signing requires the password protecting the .p12 certificates");let i=r.runCommand||Ke,s=S.mkdtempSync(k.join(r.tempDirectory||Re.tmpdir(),"pantry-signing-")),o=Oe.randomBytes(24).toString("base64"),c=k.join(s,"pantry-signing.keychain-db");try{N("Keychain creation",await i("security",["create-keychain","-p",o,c])),N("Keychain configuration",await i("security",["set-keychain-settings","-lut","21600",c])),N("Keychain unlock",await i("security",["unlock-keychain","-p",o,c]));let f=[{name:"application.p12",content:e.applicationCertificate},...e.installerCertificate?[{name:"installer.p12",content:e.installerCertificate}]:[]];for(let I of f){let C=Te(s,I.name,I.content);N(`Import of ${I.name}`,await i("security",["import",C,"-k",c,"-P",e.certificatePassword,"-T","/usr/bin/codesign","-T","/usr/bin/productbuild","-f","pkcs12","-A"])),S.rmSync(C,{force:!0})}N("Keychain partition list",await i("security",["set-key-partition-list","-S","apple-tool:,apple:,codesign:","-s","-k",o,c]));let u=await i("security",["list-keychains","-d","user"]);N("Keychain search list",u);let l=[...u.stdout.matchAll(/"([^"]+)"/g)].map((I)=>I[1]);N("Keychain search list update",await i("security",["list-keychains","-d","user","-s",c,...l]));let p=await i("security",["find-identity","-v",c]);N("Identity lookup",p);let d=xt(p.stdout),y=ve(d,"application");if(!y)throw Error(`No application signing identity found in the imported certificates (found: ${d.join(", ")||"none"})`);let m=ve(d,"installer");if(e.installerCertificate&&!m)throw Error(`No installer signing identity found in the imported certificates (found: ${d.join(", ")})`);let E=e.provisioningProfile?Te(e.outputDirectory||s,"embedded.provisionprofile",e.provisioningProfile):void 0;return{keychainPath:c,applicationIdentity:y,...m?{installerIdentity:m}:{},...E?{provisioningProfilePath:E}:{}}}catch(f){try{await i("security",["delete-keychain",c])}catch(u){throw AggregateError([f,u],"Apple signing failed and its temporary keychain could not be removed")}finally{S.rmSync(s,{recursive:!0,force:!0})}throw f}}async function Pe(e,r={}){let n=r.runCommand||Ke;try{N("Keychain removal",await n("security",["delete-keychain",e]))}finally{S.rmSync(k.dirname(e),{recursive:!0,force:!0})}}function vt(e){let r=tr(e);if(r.isSymbolicLink())throw Error(`Native app must not contain symbolic links: ${e}`);return r.isDirectory()?rr(e).reduce((n,i)=>n+vt(_(e,i)),0):r.size}async function Pt(e,r,n=a){let i=e.appPath??e.path;if(!i.endsWith(".app")||!M(i))throw Error("Native build must produce a macOS application bundle");let s=_(i,"Contents/Info.plist"),o=_(i,"Contents/MacOS",e.name);for(let p of[s,o,_(i,"Contents/Resources/index.html"),_(i,"Contents/Resources/craft.json")])if(!M(p))throw Error(`Native app is incomplete: ${p}`);let c=Le(o).subarray(0,4).toString("hex");if(!["cffaedfe","cefaedfe","cafebabe","bebafeca","cafebabf","bfbafeca"].includes(c))throw Error("Native app executable must be Mach-O");let f=vt(i);if(r!==void 0&&f>=r)throw Error(`Native bundle is ${f} bytes; it must be below ${r}`);let u=JSON.parse(t("Read bundle metadata",await n("plutil",["-convert","json","-o","-",s])).stdout);if(u.CFBundleIdentifier!==e.bundleId||u.CFBundleShortVersionString!==e.version||String(u.CFBundleVersion)!==e.buildNumber)throw Error("Built app identity/version does not match the release manifest");let l=t("Native launch check",await n(o,["--benchmark"]));if(!`${l.stdout}${l.stderr}`.includes("ready"))throw Error("Native app did not report ready")}async function we(e,r,n={}){let i=te(e,!0),s=n.command??a,o={...n.env??er.env};if(i.environment){if(xe(e,i.environment),r==="release"){let p=kt(e,i.environment,n.onSecret);Object.assign(o,p,{APP_ENV:i.environment,NODE_ENV:i.environment,DOTENV_ENV:i.environment}),n.onEnvironment?.(p)}}let c=JSON.parse(Le(_(e,"package.json"),"utf8"));if(!c.version||!/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(c.version))throw Error("A native release requires a semantic package version");if(o.PANTRY_BUILD_NUMBER=o.PANTRY_BUILD_NUMBER||o.GITHUB_RUN_NUMBER||c.version,r==="release"&&o.GITHUB_REF_TYPE==="tag"&&o.GITHUB_REF_NAME!==`v${c.version}`)throw Error("Release tag must match package.json version");if(r==="release"&&o.CRAFT_BIN)throw Error("Release builds must use the configured immutable runtime; CRAFT_BIN is a development override");let f=r==="release"&&i.macos?.notarize?ht(o):void 0;if(r==="release"&&i.android&&!o.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON)throw Error("Google Play publishing requires GOOGLE_PLAY_SERVICE_ACCOUNT_JSON");if(r==="release"&&i.macos?.appStore&&(!o.APPLE_APP_STORE_APPLICATION_CERTIFICATE||!o.APPLE_APP_STORE_INSTALLER_CERTIFICATE||!o.APPLE_APP_STORE_PROVISIONING_PROFILE_BASE64||!o.APP_STORE_CONNECT_API_KEY_ID||!o.APP_STORE_CONNECT_ISSUER_ID||!o.APP_STORE_CONNECT_PRIVATE_KEY))throw Error("App Store publishing requires distribution certificates, provisioning profile and App Store Connect credentials");if(r==="release"&&i.macos&&!(o.APPLE_SIGNING_IDENTITY||o.APPLE_APPLICATION_CERTIFICATE))throw Error("Native macOS releases require an application signing identity or certificate");let u=async(p)=>t(p[0],await s(p[0],p.slice(1),{cwd:e,env:o,inherit:!0})),l=[];try{if(r==="release"&&i.macos&&o.APPLE_APPLICATION_CERTIFICATE){let m=await ae({applicationCertificate:o.APPLE_APPLICATION_CERTIFICATE,certificatePassword:o.APPLE_CERTIFICATE_PASSWORD||"",provisioningProfile:o.APPLE_PROVISIONING_PROFILE_BASE64});if(l.push(m.keychainPath),o.APPLE_SIGNING_IDENTITY=m.applicationIdentity,m.provisioningProfilePath)o.APPLE_PROVISIONING_PROFILE_PATH=m.provisioningProfilePath}await u(["bun","install","--frozen-lockfile"]);for(let m of i.checks?.before??[])await u(m);if(De(_(e,".pantry/native/artifact.json"),{force:!0}),await u(i.build??["bun","run","package"]),r==="release"&&i.android)await bt(g(e,i.android.bundle),o,s);let p=i.macos?ke(e):void 0;if(p){if(p.version!==c.version)throw Error("Native artifact belongs to a different package version");await Pt(p,i.macos?.maxBundleSize,s)}for(let m of i.checks?.after??[])await u(m);let d=p?[p.path]:i.android?[g(e,i.android.bundle)]:[];if(!d.length||d.some((m)=>!M(m)))throw Error("Native pipeline produced no release files");if(p&&r==="release"){t("Release signature",await s("codesign",["--verify","--deep","--strict",p.appPath??p.path]));let m=t("Release identity",await s("codesign",["-dv","--verbose=4",p.appPath??p.path]));if(!`${m.stdout}${m.stderr}`.includes("Authority=Developer ID Application:"))throw Error("Direct macOS releases require a Developer ID signature")}if(f){let m=await ft(d[0],f,s),E=_(Ve(d[0]),"notarization-receipt.json");ir(E,`${JSON.stringify(m,null,2)}
14
+ `),d.push(E)}let y;if(r==="release"&&i.macos?.appStore){let m=await ae({applicationCertificate:o.APPLE_APP_STORE_APPLICATION_CERTIFICATE,installerCertificate:o.APPLE_APP_STORE_INSTALLER_CERTIFICATE,certificatePassword:o.APPLE_CERTIFICATE_PASSWORD||"",provisioningProfile:o.APPLE_APP_STORE_PROVISIONING_PROFILE_BASE64});l.push(m.keychainPath),o.PANTRY_DISTRIBUTION="app-store",o.APPLE_SIGNING_IDENTITY=m.applicationIdentity,o.APPLE_PROVISIONING_PROFILE_PATH=m.provisioningProfilePath,De(g(e,".pantry/native/app-store"),{recursive:!0,force:!0}),await u(["bun","run","build"]);let E=ke(e);await Pt(E,i.macos.maxBundleSize,s),y=_(Ve(d[0]),`${nr(E.appPath??E.path,".app")}-${c.version}.pkg`),await yt(E.appPath??E.path,y,m.installerIdentity,s),d.push(y)}return{config:i,version:c.version,files:d,...p?{artifact:p}:{},...y?{appStorePackage:y}:{}}}finally{for(let p of l.reverse())await Pe(p)}}
15
+ export{_a,be,g,te,a,t,ut,ea,ta,dt,aa,Ta,Ra,ke,ht,ft,yt,bt,xe,kt,xt,ve,ae,Pe,vt,Pt,we};
@@ -1 +1 @@
1
- import{n,d,h,ia,ca}from"./chunk-49a6jmw9.js";export{ca as ALL_KNOWN_PACKAGES,n as DEFAULT_CACHE_DIR,d as DEFAULT_CACHE_EXPIRATION_MINUTES,h as DEFAULT_TIMEOUT_MS,ia as PACKAGE_ALIASES};
1
+ import{n,d,h,ia,ca}from"./chunk-r5szm46d.js";export{ca as ALL_KNOWN_PACKAGES,n as DEFAULT_CACHE_DIR,d as DEFAULT_CACHE_EXPIRATION_MINUTES,h as DEFAULT_TIMEOUT_MS,ia as PACKAGE_ALIASES};
@@ -1 +1 @@
1
- import{s,M,Re,U,m,Mt,B,Bt,Vt,V,Oe,qe,Ne,D}from"./chunk-49a6jmw9.js";export{M as cleanStaleOutputFiles,m as cleanupBrowserResources,V as fetchAndSaveAllPackages,Oe as fetchAndSavePackage,B as fetchPantryPackage,D as fetchPantryPackageWithMetadata,Mt as fetchPkgxProjects,Re as getValidCachedPackage,Ne as readPantryPackageInfo,s as savePackageAsTypeScript,U as saveToCacheAndOutput,qe as scanPantryPackages,Bt as setupCleanupHandlers,Vt as startPeriodicCleanup};
1
+ import{s,M,Re,U,m,Mt,B,Bt,Vt,V,Oe,qe,Ne,D}from"./chunk-r5szm46d.js";export{M as cleanStaleOutputFiles,m as cleanupBrowserResources,V as fetchAndSaveAllPackages,Oe as fetchAndSavePackage,B as fetchPantryPackage,D as fetchPantryPackageWithMetadata,Mt as fetchPkgxProjects,Re as getValidCachedPackage,Ne as readPantryPackageInfo,s as savePackageAsTypeScript,U as saveToCacheAndOutput,qe as scanPantryPackages,Bt as setupCleanupHandlers,Vt as startPeriodicCleanup};
@@ -1 +1 @@
1
- import{Jt,Xt,Zt,Qt,Ze,Ua,Da}from"./chunk-49a6jmw9.js";export{Xt as MAS_APPS,Jt as SYSTEM_APPS,Ua as checkAppUpdates,Ze as fetchDesktopCatalogue,Zt as isNewerVersion,Qt as scanInstalledApps,Da as updateApp};
1
+ import{Jt,Xt,Zt,Qt,Ze,Ua,Da}from"./chunk-r5szm46d.js";export{Xt as MAS_APPS,Jt as SYSTEM_APPS,Ua as checkAppUpdates,Ze as fetchDesktopCatalogue,Zt as isNewerVersion,Qt as scanInstalledApps,Da as updateApp};