ts-pantry 0.9.20 → 0.9.21

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.
Files changed (223) hide show
  1. package/dist/bin/cli.js +7 -7
  2. package/dist/chunk-2dk28v6k.js +2 -0
  3. package/dist/chunk-2nfjspwd.js +1 -0
  4. package/dist/{chunk-t71cv3gr.js → chunk-9f0255fc.js} +1 -1
  5. package/dist/{chunk-2hbhg54n.js → chunk-b0zr0ad6.js} +1 -1
  6. package/dist/{chunk-vy4gt433.js → chunk-bmr9qds3.js} +1 -1
  7. package/dist/chunk-cdzdw53j.js +42 -0
  8. package/dist/chunk-f2c8kapq.js +2 -0
  9. package/dist/{chunk-j9mv6dze.js → chunk-h8phykmh.js} +1 -1
  10. package/dist/chunk-jym7xrra.js +2 -0
  11. package/dist/{chunk-th964914.js → chunk-k4yefwkp.js} +15 -15
  12. package/dist/chunk-nqztmdqz.js +275 -0
  13. package/dist/{chunk-5798tqhf.js → chunk-t8296krc.js} +1 -1
  14. package/dist/{chunk-33qtfw71.js → chunk-xkm30wah.js} +2 -2
  15. package/dist/chunk-y5rfbg9v.js +11 -0
  16. package/dist/consts.d.ts +1 -1
  17. package/dist/desktop-apps.d.ts +1 -0
  18. package/dist/packages/alacrittyorg.d.ts +1 -1
  19. package/dist/packages/alttabapp.d.ts +1 -1
  20. package/dist/packages/ansiblecom.d.ts +1 -1
  21. package/dist/packages/apktoolorg.d.ts +1 -1
  22. package/dist/packages/arkadedev.d.ts +1 -1
  23. package/dist/packages/atlasgoio.d.ts +1 -1
  24. package/dist/packages/augeasnet.d.ts +1 -1
  25. package/dist/packages/babashkaorg.d.ts +1 -1
  26. package/dist/packages/borepub.d.ts +1 -1
  27. package/dist/packages/bufbuild.d.ts +1 -1
  28. package/dist/packages/bytebasecom.d.ts +1 -1
  29. package/dist/packages/casdoororg.d.ts +1 -1
  30. package/dist/packages/ccachedev.d.ts +1 -1
  31. package/dist/packages/certbotefforg.d.ts +1 -1
  32. package/dist/packages/chezmoiio.d.ts +1 -1
  33. package/dist/packages/circlecicom.d.ts +1 -1
  34. package/dist/packages/cligithubcom.d.ts +1 -1
  35. package/dist/packages/cmakeorg.d.ts +1 -1
  36. package/dist/packages/cnqueryio.d.ts +1 -1
  37. package/dist/packages/codercom.d.ts +1 -1
  38. package/dist/packages/codevisualstudiocom.d.ts +1 -1
  39. package/dist/packages/cointopsh.d.ts +1 -1
  40. package/dist/packages/conftestdev.d.ts +1 -1
  41. package/dist/packages/convcogithubio.d.ts +1 -1
  42. package/dist/packages/cuelangorg.d.ts +1 -1
  43. package/dist/packages/cythonorg.d.ts +1 -1
  44. package/dist/packages/daggerio.d.ts +1 -1
  45. package/dist/packages/daytonaio.d.ts +1 -1
  46. package/dist/packages/dblabdanvergaracom.d.ts +1 -1
  47. package/dist/packages/denoland.d.ts +1 -1
  48. package/dist/packages/depotdev.d.ts +1 -1
  49. package/dist/packages/dgraphio.d.ts +1 -1
  50. package/dist/packages/direnvnet.d.ts +1 -1
  51. package/dist/packages/dotnetmicrosoftcom.d.ts +1 -1
  52. package/dist/packages/dozzledev.d.ts +1 -1
  53. package/dist/packages/dprintdev.d.ts +1 -1
  54. package/dist/packages/duckdborg.d.ts +1 -1
  55. package/dist/packages/elementsprojectorg.d.ts +1 -1
  56. package/dist/packages/encoredev.d.ts +1 -1
  57. package/dist/packages/etcdio.d.ts +1 -1
  58. package/dist/packages/fastlanetools.d.ts +1 -1
  59. package/dist/packages/flyio.d.ts +1 -1
  60. package/dist/packages/getcomposerorg.d.ts +1 -1
  61. package/dist/packages/getsynthcom.d.ts +1 -1
  62. package/dist/packages/getzolaorg.d.ts +1 -1
  63. package/dist/packages/gflagsgithubio.d.ts +1 -1
  64. package/dist/packages/ghostscriptcom.d.ts +1 -1
  65. package/dist/packages/gleamrun.d.ts +1 -1
  66. package/dist/packages/gohugoio.d.ts +1 -1
  67. package/dist/packages/goreleasercom.d.ts +1 -1
  68. package/dist/packages/gourceio.d.ts +1 -1
  69. package/dist/packages/graphitesilorg.d.ts +1 -1
  70. package/dist/packages/harfbuzzorg.d.ts +1 -1
  71. package/dist/packages/hasuraio.d.ts +1 -1
  72. package/dist/packages/helmsh.d.ts +1 -1
  73. package/dist/packages/htopdev.d.ts +1 -1
  74. package/dist/packages/httpieio.d.ts +1 -1
  75. package/dist/packages/huggingfaceco.d.ts +1 -1
  76. package/dist/packages/imagemagickorg.d.ts +1 -1
  77. package/dist/packages/infracostio.d.ts +1 -1
  78. package/dist/packages/ipythonorg.d.ts +1 -1
  79. package/dist/packages/irohcomputer.d.ts +1 -1
  80. package/dist/packages/istioio.d.ts +1 -1
  81. package/dist/packages/jbangdev.d.ts +1 -1
  82. package/dist/packages/jemallocnet.d.ts +1 -1
  83. package/dist/packages/jujuis.d.ts +1 -1
  84. package/dist/packages/julialangorg.d.ts +1 -1
  85. package/dist/packages/jumppaddev.d.ts +1 -1
  86. package/dist/packages/k3dio.d.ts +1 -1
  87. package/dist/packages/k6io.d.ts +1 -1
  88. package/dist/packages/kagglecom.d.ts +1 -1
  89. package/dist/packages/kubesharkco.d.ts +1 -1
  90. package/dist/packages/laravelcom.d.ts +1 -1
  91. package/dist/packages/lavinmqcom.d.ts +1 -1
  92. package/dist/packages/libcxxllvmorg.d.ts +1 -1
  93. package/dist/packages/libeventorg.d.ts +1 -1
  94. package/dist/packages/libexifgithubio.d.ts +1 -1
  95. package/dist/packages/libgdgithubio.d.ts +1 -1
  96. package/dist/packages/libssh2org.d.ts +1 -1
  97. package/dist/packages/libusbinfo.d.ts +1 -1
  98. package/dist/packages/libuvorg.d.ts +1 -1
  99. package/dist/packages/libvipsorg.d.ts +1 -1
  100. package/dist/packages/libziporg.d.ts +1 -1
  101. package/dist/packages/liteclicom.d.ts +1 -1
  102. package/dist/packages/littlecmscom.d.ts +1 -1
  103. package/dist/packages/llmdatasetteio.d.ts +1 -1
  104. package/dist/packages/llvmorg.d.ts +1 -1
  105. package/dist/packages/localaiio.d.ts +1 -1
  106. package/dist/packages/luarocksorg.d.ts +1 -1
  107. package/dist/packages/lxmlde.d.ts +1 -1
  108. package/dist/packages/macfusegithubio.d.ts +1 -1
  109. package/dist/packages/macvimorg.d.ts +1 -1
  110. package/dist/packages/mailpitaxllentorg.d.ts +1 -1
  111. package/dist/packages/maturinrs.d.ts +1 -1
  112. package/dist/packages/mavenapacheorg.d.ts +1 -1
  113. package/dist/packages/meilisearchcom.d.ts +1 -1
  114. package/dist/packages/mercurerocks.d.ts +1 -1
  115. package/dist/packages/mesonbuildcom.d.ts +1 -1
  116. package/dist/packages/misejdxdev.d.ts +1 -1
  117. package/dist/packages/mitmproxyorg.d.ts +1 -1
  118. package/dist/packages/mkcertdev.d.ts +1 -1
  119. package/dist/packages/moshorg.d.ts +1 -1
  120. package/dist/packages/msgpackorg.d.ts +1 -1
  121. package/dist/packages/neovimio.d.ts +1 -1
  122. package/dist/packages/networkxorg.d.ts +1 -1
  123. package/dist/packages/nginxorg.d.ts +1 -1
  124. package/dist/packages/nodejsorg.d.ts +1 -1
  125. package/dist/packages/nomadprojectio.d.ts +1 -1
  126. package/dist/packages/npmjscom.d.ts +1 -1
  127. package/dist/packages/nushellsh.d.ts +1 -1
  128. package/dist/packages/odigosio.d.ts +1 -1
  129. package/dist/packages/ohmyposhdev.d.ts +1 -1
  130. package/dist/packages/ollamaai.d.ts +1 -1
  131. package/dist/packages/onefetchdev.d.ts +1 -1
  132. package/dist/packages/openblasnet.d.ts +1 -1
  133. package/dist/packages/opencodeai.d.ts +1 -1
  134. package/dist/packages/openexrcom.d.ts +1 -1
  135. package/dist/packages/openjpegorg.d.ts +1 -1
  136. package/dist/packages/openmpllvmorg.d.ts +1 -1
  137. package/dist/packages/openpolicyagentorg.d.ts +1 -1
  138. package/dist/packages/opensearchorg.d.ts +1 -1
  139. package/dist/packages/opentofuorg.d.ts +1 -1
  140. package/dist/packages/orasland.d.ts +1 -1
  141. package/dist/packages/packerio.d.ts +1 -1
  142. package/dist/packages/phpnet.d.ts +1 -1
  143. package/dist/packages/pinnipeddev.d.ts +1 -1
  144. package/dist/packages/pipenvpypaio.d.ts +1 -1
  145. package/dist/packages/planetscalecom.d.ts +1 -1
  146. package/dist/packages/pocketbaseio.d.ts +1 -1
  147. package/dist/packages/podmanio.d.ts +1 -1
  148. package/dist/packages/postgrestorg.d.ts +1 -1
  149. package/dist/packages/prefixdev.d.ts +1 -1
  150. package/dist/packages/projenio.d.ts +1 -1
  151. package/dist/packages/projorg.d.ts +1 -1
  152. package/dist/packages/pulumiio.d.ts +1 -1
  153. package/dist/packages/pygmentsorg.d.ts +1 -1
  154. package/dist/packages/railwayapp.d.ts +1 -1
  155. package/dist/packages/rapidjsonorg.d.ts +1 -1
  156. package/dist/packages/rcloneorg.d.ts +1 -1
  157. package/dist/packages/rectangleapp.d.ts +1 -1
  158. package/dist/packages/rendercom.d.ts +1 -1
  159. package/dist/packages/replibytecom.d.ts +1 -1
  160. package/dist/packages/rhashsourceforgenet.d.ts +1 -1
  161. package/dist/packages/riotermcom.d.ts +1 -1
  162. package/dist/packages/rubocoporg.d.ts +1 -1
  163. package/dist/packages/rubygemsorg.d.ts +1 -1
  164. package/dist/packages/runatlantisio.d.ts +1 -1
  165. package/dist/packages/s3toolsorg.d.ts +1 -1
  166. package/dist/packages/scalewaycom.d.ts +1 -1
  167. package/dist/packages/seaweedfscom.d.ts +1 -1
  168. package/dist/packages/sentryio.d.ts +1 -1
  169. package/dist/packages/shellchecknet.d.ts +1 -1
  170. package/dist/packages/skaffolddev.d.ts +1 -1
  171. package/dist/packages/sniffnetnet.d.ts +1 -1
  172. package/dist/packages/soldeerxyz.d.ts +1 -1
  173. package/dist/packages/soliditylangorg.d.ts +1 -1
  174. package/dist/packages/sqlcdev.d.ts +1 -1
  175. package/dist/packages/squawkhqcom.d.ts +1 -1
  176. package/dist/packages/starshiprs.d.ts +1 -1
  177. package/dist/packages/statsapp.d.ts +1 -1
  178. package/dist/packages/steampipeio.d.ts +1 -1
  179. package/dist/packages/straceio.d.ts +1 -1
  180. package/dist/packages/streamlinkgithubio.d.ts +1 -1
  181. package/dist/packages/stripecom.d.ts +1 -1
  182. package/dist/packages/swiftorg.d.ts +1 -1
  183. package/dist/packages/symfonycom.d.ts +1 -1
  184. package/dist/packages/sympyorg.d.ts +1 -1
  185. package/dist/packages/syncthingnet.d.ts +1 -1
  186. package/dist/packages/tailwindcsscom.d.ts +1 -1
  187. package/dist/packages/tartrun.d.ts +1 -1
  188. package/dist/packages/taskfiledev.d.ts +1 -1
  189. package/dist/packages/terraformio.d.ts +1 -1
  190. package/dist/packages/terragruntgruntworkio.d.ts +1 -1
  191. package/dist/packages/terratagio.d.ts +1 -1
  192. package/dist/packages/tiltdev.d.ts +1 -1
  193. package/dist/packages/tinygoorg.d.ts +1 -1
  194. package/dist/packages/tldrsh.d.ts +1 -1
  195. package/dist/packages/toxwiki.d.ts +1 -1
  196. package/dist/packages/traefikio.d.ts +1 -1
  197. package/dist/packages/tursotech.d.ts +1 -1
  198. package/dist/packages/typescriptlangorg.d.ts +1 -1
  199. package/dist/packages/uriparsergithubio.d.ts +1 -1
  200. package/dist/packages/vapoursynthcom.d.ts +1 -1
  201. package/dist/packages/vaultprojectio.d.ts +1 -1
  202. package/dist/packages/wavpackcom.d.ts +1 -1
  203. package/dist/packages/werfio.d.ts +1 -1
  204. package/dist/packages/xcfiledev.d.ts +1 -1
  205. package/dist/packages/xkbcommonorg.d.ts +1 -1
  206. package/dist/packages/zarfdev.d.ts +1 -1
  207. package/dist/packages/zeddev.d.ts +1 -1
  208. package/dist/packages/zeromqorg.d.ts +1 -1
  209. package/dist/packages/ziglangorg.d.ts +3 -3
  210. package/dist/packages/zotregistrydev.d.ts +1 -1
  211. package/dist/packages/zrokio.d.ts +1 -1
  212. package/dist/pantry-api.d.ts +1 -0
  213. package/dist/src/index.js +1 -1
  214. package/dist/testing/index.d.ts +3 -0
  215. package/package.json +3 -4
  216. package/dist/chunk-c5xmxyxn.js +0 -2
  217. package/dist/chunk-hxhs2gtk.js +0 -2
  218. package/dist/chunk-r8pej0xx.js +0 -275
  219. package/dist/chunk-tjxmz5d2.js +0 -42
  220. package/dist/chunk-w6phftp9.js +0 -11
  221. package/dist/chunk-zddfmw54.js +0 -2
  222. package/dist/chunk-zsgm3kjz.js +0 -1
  223. package/scripts/pantry-cli.ts +0 -319
@@ -0,0 +1,275 @@
1
+ import{eb as d,gb as qw}from"./chunk-y5rfbg9v.js";import{Ab as ow,Bb as Gw,qb as gw,rb as mw,ub as lw,vb as Uw,xb as cw,zb as pw}from"./chunk-f2c8kapq.js";import{Gb as Z6}from"./chunk-2dk28v6k.js";import{Hb as r,Ib as KQ}from"./chunk-q7s2k65w.js";import{Lb as rw}from"./chunk-p9e5z92g.js";import{Pb as k}from"./chunk-yjz3e391.js";import GQ from"node:process";KQ();import vw from"node:process";function fw(w){return w in r}function UQ(w){if(!w.includes(".")||w.startsWith(".")||w.endsWith("."))return!1;if(/^v?\d+(\.\d+){0,10}$/.test(w))return!1;return/^[a-z0-9][\w.\-/]*$/i.test(w)}function W6(w){return fw(w)||UQ(w)}function R6(w){return["darwin","linux","windows"].includes(w)}function z6(w){return["x86_64","aarch64","armv7l","i686"].includes(w)}function kw(){return Object.keys(r)}function J6(){return Object.values(r)}function K6(w){if(fw(w))return{originalName:w,resolvedDomain:r[w],isAlias:!0};return{originalName:w,resolvedDomain:w,isAlias:!1}}function U6(w){let Q=w.lastIndexOf("@");if(Q===-1)return{name:w};let $=w.slice(0,Q),X=w.slice(Q+1);return{name:$,version:X,versionSpec:X}}function G6(w,Q){return Q?`${w}@${Q}`:w}function ww(){let w=vw.platform,Q=vw.arch,$,X,q=!0;switch(w){case"darwin":$="darwin";break;case"linux":$="linux";break;case"win32":$="windows";break;default:$="linux",q=!1}switch(Q){case"x64":X="x86_64";break;case"arm64":X="aarch64";break;case"arm":X="armv7l";break;case"ia32":X="i686";break;default:X="x86_64",q=!1}return{platform:$,architecture:X,isSupported:q}}function _6(w,Q="latest",$){let X=$||ww(),q;switch(X.platform){case"darwin":q="tar.xz";break;case"linux":q="tar.xz";break;case"windows":q="zip";break;default:q="tar.xz"}return{packageName:w,version:Q,platform:X.platform,architecture:X.architecture,format:q}}var B6={LATEST:"latest",ANY:"*"},dw={RUNTIME:["nodejs.org","python.org","go.dev","rust-lang.org"],BUILD_TOOLS:["cmake.org","ninja-build.org","gradle.org","maven.apache.org"],DATABASES:["postgresql.org","mysql.com","redis.io","mongodb.com"],EDITORS:["neovim.io","vim.org","code.visualstudio.com"],CLI_TOOLS:["cli.github.com","curl.se","wget.gnu.org","jq.dev"]};function O6(w){return dw[w]}function T6(w,Q){return dw[Q].includes(w)}function E6(w){return w}function L6(w,Q){return[w,Q]}function j6(w){return w}async function F6(w){try{let Q=await Uw(w);if(!Q)return{success:!1,error:`Package '${w}' not found. Use 'search' to find available packages.`};return{success:!0,data:Q}}catch(Q){return{success:!1,error:`Failed to get package info: ${Q}`}}}async function A6(w){try{if(!w||w.trim().length===0)return{success:!1,error:"Search term cannot be empty"};return{success:!0,data:await cw(w.trim())}}catch(Q){return{success:!1,error:`Search failed: ${Q}`}}}async function b6(w=20){try{return{success:!0,data:(await pw(w)).slice(0,w)}}catch(Q){return{success:!1,error:`Failed to list popular packages: ${Q}`}}}async function x6(w=20){try{return{success:!0,data:await ow(w)}}catch(Q){return{success:!1,error:`Failed to list active packages: ${Q}`}}}function V6(){try{return{success:!0,data:kw()}}catch(w){return{success:!1,error:`Failed to list aliases: ${w}`}}}async function y6(w){try{let Q=await Gw(w);if(!Q.isValid)return{success:!1,error:Q.error};return{success:!0,data:{packageName:Q.packageName,version:Q.version,isValid:!0}}}catch(Q){return{success:!1,error:`Validation failed: ${Q}`}}}async function N6(w){try{let Q=await Gw(w);if(!Q.isValid)return{success:!1,error:Q.error};let $=Q.packageName,X=Q.version||"latest",q=await lw($,X);if(!q)return{success:!1,error:`Could not resolve version '${X}' for package '${$}'`};let Y=await Uw($);if(!Y)return{success:!1,error:`Package '${$}' not found`};let Z=ww(),H={packageName:$,resolvedVersion:q,platform:Z.platform,architecture:Z.architecture,dependencies:Y.dependencies,companions:Y.companions,installCommand:`pkgx install ${$}@${q}`},W=[];if(!Z.isSupported)W.push(`Platform ${Z.platform}/${Z.architecture} may not be fully supported`);if(Y.dependencies.length>0)W.push(`This package has ${Y.dependencies.length} dependencies that will also be installed`);return{success:!0,data:H,warnings:W.length>0?W:void 0}}catch(Q){return{success:!1,error:`Failed to create install plan: ${Q}`}}}async function u6(w){try{let Q=await gw(w);if(!Q)return{success:!1,error:`Package '${w}' not found`};let $=await mw(w);return{success:!0,data:{latest:Q,total:$.length,versions:$}}}catch(Q){return{success:!1,error:`Failed to get version info: ${Q}`}}}function P6(w){let Q=[`Package: ${w.name}`,`Domain: ${w.domain}`,`Description: ${w.description}`,`Latest Version: ${w.latestVersion}`,`Total Versions: ${w.totalVersions}`];if(w.programs.length>0)Q.push(`Programs: ${w.programs.join(", ")}`);if(w.dependencies.length>0)Q.push(`Dependencies: ${w.dependencies.join(", ")}`);if(w.companions.length>0)Q.push(`Companions: ${w.companions.join(", ")}`);return Q.join(`
2
+ `)}function D6(w){if(w.length===0)return"No packages found matching your search.";let Q=[`Found ${w.length} package(s):
3
+ `];for(let $ of w)Q.push(`${$.name} (${$.domain})`),Q.push(` ${$.description}`),Q.push(` Latest: ${$.latestVersion} (${$.totalVersions} versions available)`),Q.push("");return Q.join(`
4
+ `)}function h6(w){let Q=[`Installation Plan for ${w.packageName}@${w.resolvedVersion}`,`Platform: ${w.platform}/${w.architecture}`,`Command: ${w.installCommand}`];if(w.dependencies.length>0)Q.push(`Dependencies: ${w.dependencies.join(", ")}`);if(w.companions.length>0)Q.push(`Companions: ${w.companions.join(", ")}`);return Q.join(`
5
+ `)}function v6(){try{let w=ww();return{success:!0,data:{platform:w.platform,architecture:w.architecture,isSupported:w.isSupported,nodeVersion:GQ.version}}}catch(w){return{success:!1,error:`Failed to get system info: ${w}`}}}import l from"node:fs";import $w from"node:path";function Xw(w){if(!l.existsSync(w))throw Error(`Dependency file not found: ${w}`);let Q=l.readFileSync(w,"utf-8"),$=[],X=Q.split(`
6
+ `),q=!1,Y=!1,Z=0;for(let H of X){let W=H.trim();if(!W||W.startsWith("#"))continue;if(H.match(/^(dependencies|deps):\s*$/)){q=!0,Y=!1,Z=H.search(/\S/);continue}if(H.match(/^global:\s*true\s*$/)||H.match(/^global:\s*$/)&&!q){Y=!0;continue}if(H.match(/^\w+:/)&&!H.includes(" ")&&q&&Z===0){q=!1;continue}if(q||Y){if(H.match(/^\s+(dependencies|deps):\s*$/))continue;let J=H.indexOf(":");if(J>0){let z=H.substring(0,J).trim(),T=H.substring(J+1).trim();if(z&&T){let L=z,B=T.replace(/^['"]|['"]$/g,"");if(L==="global"||L==="dependencies"||L==="deps")continue;let R=B,K=B;if(B.startsWith("^"))R=B.substring(1),K=B;else if(B.startsWith("~"))R=B.substring(1),K=B;else if(B.startsWith(">=")||B.startsWith("<=")||B.startsWith(">")||B.startsWith("<")){let G=/^([><=]+)/.exec(B);if(G){let _=G[1];R=B.substring(_.length).trim(),K=B}}else if(B==="*"||B==="latest")R="latest",K="*";else R=B,K=`@${B}`;$.push({name:L,version:R,constraint:K,isOsSpecific:!1})}}}}return $}function _Q(w){if(!l.existsSync(w))throw Error(`Dependency file not found: ${w}`);let Q=l.readFileSync(w,"utf-8"),$=Xw(w),X;try{let q=typeof Bun<"u"&&Bun.YAML?Bun.YAML.parse(Q):BQ(Q);if(q?.services){let Y=Array.isArray(q.services.autoStart)?q.services.autoStart.map((Z)=>String(Z)):[];if(Y.length>0)X={enabled:q.services.enabled===!0,autoStart:Y}}}catch{}return{dependencies:$,services:X}}function BQ(w){let Q={},$=w.split(`
7
+ `),X=!1,q=!1,Y=[],Z=!1;for(let H of $){let W=H.trim();if(!W||W.startsWith("#"))continue;if(H.match(/^services:\s*$/)){X=!0,q=!1;continue}if(X&&!H.startsWith(" ")&&!H.startsWith("\t")&&!W.startsWith("-")){if(W!=="services:"){X=!1,q=!1;continue}}if(X){if(W.startsWith("enabled:")){Z=W.includes("true");continue}if(W.match(/^autoStart:\s*$/)){q=!0;continue}if(q&&W.startsWith("- ")){let J=W.slice(2).trim();if(J)Y.push(J)}}}if(Y.length>0)Q.services={enabled:Z,autoStart:Y};return Q}async function g6(w,Q="src/packages"){try{let $;if(w.includes("/"))$=$w.join(Q,`${w}.ts`);else{let z=`${w.replace(/\./g,"")}.ts`;$=$w.join(Q,z)}if(!l.existsSync($))return[];let X=l.readFileSync($,"utf-8"),q=X.indexOf("versions:");if(q===-1)return[];let Y=X.substring(q),Z=Y.indexOf("["),H=Y.indexOf("] as const");if(Z===-1||H===-1)return[];let J=Y.substring(Z+1,H).match(/'([^']+)'/g);if(!J)return[];return J.map((z)=>z.replace(/'/g,""))}catch{return[]}}async function OQ(w){try{let{packages:Q}=await import("./chunk-b0zr0ad6.js").catch(()=>import("./src/index.js")),$=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),X=Q[$];if(!X){let q=Object.values(Q);X=q.find((Y)=>Y.domain===w)||q.find((Y)=>Array.isArray(Y.aliases)&&Y.aliases.includes(w))}if(X&&X.versions&&Array.isArray(X.versions))return X.versions;return[]}catch{return[]}}async function nw(w,Q){let $=await OQ(w);if($.length===0)return Q.split("#")[0].trim().replace(/^[@^~>=<]+/,"")||"latest";let X=Q.split("#")[0].trim();if(X==="*"||X==="latest")return $[0];if(X.startsWith("@")){let Y=X.slice(1);return $.includes(Y)?Y:$[0]}return TQ($,X)||$[0]}function TQ(w,Q){if(Q.startsWith("^")){let $=Q.slice(1),[X]=c($);return w.filter((Y)=>{let[Z]=c(Y);return Z===X&&m(Y,$)>=0})[0]||null}if(Q.startsWith("~")){let $=Q.slice(1),[X,q]=c($);return w.filter((Z)=>{let[H,W]=c(Z);return H===X&&W===q&&m(Z,$)>=0})[0]||null}if(Q.startsWith(">=")){let $=Q.slice(2).trim();return w.filter((q)=>m(q,$)>=0)[0]||null}if(Q.startsWith(">")){let $=Q.slice(1).trim();return w.filter((q)=>m(q,$)>0)[0]||null}if(Q.startsWith("<=")){let $=Q.slice(2).trim();return w.filter((q)=>m(q,$)<=0)[0]||null}if(Q.startsWith("<")){let $=Q.slice(1).trim();return w.filter((q)=>m(q,$)<0)[0]||null}if(Q.startsWith("=")){let $=Q.slice(1).trim();return w.includes($)?$:null}return w.includes(Q)?Q:null}function c(w){let Q=w.split(".").map(($)=>{let X=$.match(/^\d+/);return X?Number.parseInt(X[0],10):0});return[Q[0]||0,Q[1]||0,Q[2]||0]}function m(w,Q){if(w==="latest"&&Q!=="latest")return 1;if(Q==="latest"&&w!=="latest")return-1;if(w==="latest"&&Q==="latest")return 0;let $=w.split("#")[0].trim(),X=Q.split("#")[0].trim(),[q,Y,Z]=c($),[H,W,J]=c(X);if(q>H)return 1;if(q<H)return-1;if(Y>W)return 1;if(Y<W)return-1;if(Z>J)return 1;if(Z<J)return-1;return 0}var Qw=null;async function EQ(){if(Qw)return Qw;return Qw=(await import("./chunk-b0zr0ad6.js").catch(()=>import("./src/index.js"))).packages,Qw}async function LQ(w){try{let Q=await EQ(),$=Q[w];if($)return{dependencies:$.dependencies||[],companions:$.companions||[]};let X=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),q=Q[X];if(q)return{dependencies:q.dependencies||[],companions:q.companions||[]};let Z=Object.values(Q).find((H)=>H.domain===w);if(Z)return{dependencies:Z.dependencies||[],companions:Z.companions||[]};return null}catch(Q){return console.warn(`Failed to load package data for ${w}: ${Q}`),null}}async function Hw(w,Q={},$=new Set,X=0){let{maxDepth:q=10,verbose:Y=!1,targetOs:Z,includeOsSpecific:H=!0}=Q;if(X>q){if(Y)console.warn(` Warning: max dependency depth (${q}) exceeded for ${w}`);return[]}if($.has(w))return[];if($.add(w),Y)console.log(`${" ".repeat(X)}Resolving dependencies for: ${w}`);let W=[];try{let z=function(R){let K=R.match(/^(linux|darwin|windows):(.+)$/),G=!!K,_=K?K[2]:R,M=K?K[1]:void 0;if(G&&(!H||Z&&M!==Z))return null;let O=_,E="latest",U="*",j=_.match(/^(@?[^@^~>=<]+(?:\/[^@^~>=<]+)?)([@^~>=<].+)?$/);if(j){if(O=j[1],j[2]){let S=j[2];if(S.startsWith("@"))E=S.substring(1),U=S;else U=S,E=S.replace(/^\D*/,"")}}return{dep:{name:O,version:E,constraint:U,isOsSpecific:G,os:M},pkgName:O}},J=await LQ(w),L=[...J?.dependencies||[],...J?.companions||[]].map(z).filter((R)=>R!==null);for(let{dep:R}of L)W.push(R);let B=await Promise.allSettled(L.map(({pkgName:R})=>Hw(R,Q,$,X+1)));for(let R of B)if(R.status==="fulfilled")W.push(...R.value);else if(Y)console.warn(` Warning: transitive dependency resolution failed: ${R.reason}`)}catch(J){if(Y)console.warn(`${" ".repeat(X)}Warning: Could not resolve dependencies for ${w}: ${J}`)}return W}async function _w(w,Q={}){let $=new Map,X=[],q={linux:[],darwin:[],windows:[]};for(let H of w){if(!$.has(H.name))$.set(H.name,[]);if($.get(H.name).push(H),H.isOsSpecific&&H.os)q[H.os].push(H)}let Y=[],Z=[];for(let[H,W]of $)if(W.length===1){let J=await nw(H,W[0].constraint),z={...W[0],version:J};Y.push(z),Z.push(H)}else{let J=W.map((R)=>R.version),z=[...new Set(J)];if(z.length>1)X.push({package:H,versions:z});let T=await Promise.all(W.map(async(R)=>({...R,resolvedVersion:await nw(H,R.constraint)}))),L=T[0];for(let R of T.slice(1))if(L.constraint==="*"&&R.constraint!=="*")L=R;else if(L.constraint!=="*"&&R.constraint==="*");else if(m(R.resolvedVersion,L.resolvedVersion)>0)L=R;let B={...L,version:L.resolvedVersion};delete B.resolvedVersion,Y.push(B),Z.push(H)}return{allDependencies:Y,uniquePackages:Z,conflicts:X,osSpecificDeps:q}}async function sw(w,Q={}){let{verbose:$=!1}=Q;if($)console.log(`Parsing dependency file: ${w}`);let X=Xw(w);if($)console.log(`Found ${X.length} direct dependencies`);let q=[...X],Y=await Promise.all(X.map(async(W)=>{if($)console.log(`Resolving transitive dependencies for: ${W.name}`);return Hw(W.name,Q)}));for(let W of Y)q.push(...W);if($)console.log(`Total dependencies found (before deduplication): ${q.length}`);let Z=await _w(q,Q);if($){if(console.log(`Unique packages after deduplication: ${Z.uniquePackages.length}`),Z.conflicts.length>0)console.log(`Version conflicts found: ${Z.conflicts.length}`)}let H=$w.extname(w);if(H===".yaml"||H===".yml"){let W=_Q(w);if(W.services)Z.services=W.services}return Z}function m6(w){let Q=["deps.yaml","deps.yml","dependencies.yaml","dependencies.yml","pkgx.yaml","pkgx.yml",".deps.yaml",".deps.yml"],$=[];for(let X of Q){let q=$w.join(w,X);if(l.existsSync(q))$.push(q)}return $}import b from"node:fs";import C from"node:path";import N from"node:process";var Bw=C.join(N.cwd(),"src","packages"),Ow=C.join(N.cwd(),"docs");var o={};async function Cw(w){try{let Q=w||C.join(N.cwd(),"src","packages"),$=C.join(Q,"index.ts");if(b.existsSync($)){console.log("Using generated index file for package mapping...");let Y=await import(C.resolve($)),Z=Y.pantry||Y.packages;if(Z)return console.log(`Successfully loaded ${Object.keys(Z).length} packages from index`),Z}console.log("Index file not found, falling back to direct file reading...");let X={};if(!b.existsSync(Q))return console.log(`Packages directory does not exist: ${Q}`),X;let q=[];try{let Y=function(Z,H=""){let W=[],J=b.readdirSync(Z,{withFileTypes:!0});for(let z of J)if(z.isFile()&&z.name.endsWith(".ts")&&z.name!=="index.ts"&&z.name!=="aliases.ts")W.push(C.join(Z,z.name));else if(z.isDirectory()&&!z.name.startsWith(".")){let T=C.join(Z,z.name),L=H?`${H}/${z.name}`:z.name;W.push(...Y(T,L))}return W};q=Y(Q),console.log(`Found ${q.length} package files`)}catch(Y){console.error(`Error reading packages directory ${Q}:`,Y),q=[]}console.log(`Reading package data from ${q.length} files...`);for(let Y of q)try{let Z=C.isAbsolute(Y)?Y:C.join(Q,Y),H=b.readFileSync(Z,"utf-8"),W=C.basename(Y,".ts"),J=H.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),z=J?J[1]:qw(W),T=d(z),L=jQ(H,z);if(L)X[T]=L,console.log(`Loaded package data for ${z} -> ${T}`)}catch(Z){console.error(`Error processing file ${Y}:`,Z)}return console.log(`Successfully loaded ${Object.keys(X).length} packages`),X}catch(Q){return console.error("Error importing pantry:",Q),{}}}function jQ(w,Q){try{let $=w.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),X=$?$[1]:Q;if(!w.match(/export const \w+Package = \{([\s\S]*?)\}/))return console.warn(`Could not find package object in file for ${X}`),null;let Y=(U)=>{let j=new RegExp(`${U}:\\s*\\[(.*?)\\]\\s*as const`,"s"),S=w.match(j);if(!S)return[];let I=S[1],A=I.match(/'([^']*)'/g);if(A)return A.map((x)=>x.replace(/'/g,""));if(A=I.match(/"([^"]*)"/g),A)return A.map((x)=>x.replace(/"/g,""));return[]},Z=(U)=>{let S=new RegExp(`${U}:\\s*'([^']*)'\\s*as const`),I=w.match(S);if(I)return I[1].replace(/\\'/g,"'").replace(/\\\\/g,"\\");if(S=new RegExp(`${U}:\\s*'([^']*)'`),I=w.match(S),I)return I[1].replace(/\\'/g,"'").replace(/\\\\/g,"\\");return""},H=Z("name")||X,W=Z("description")||`A package from ${X}`,J=Z("packageYmlUrl")||"",z=Z("homepageUrl")||"",T=Z("githubUrl")||"",L=Z("installCommand")||"",B=Z("pkgxInstallCommand")||`sh <(curl https://pkgx.sh) +${X} -- $SHELL -i`,R=Z("pantryInstallCommand")||`pantry install ${X}`,K=Z("fullPath")||X,G=Y("programs"),_=Y("companions"),M=Y("dependencies"),O=Y("versions"),E=Y("aliases");return{name:H,domain:X,description:W,packageYmlUrl:J,homepageUrl:z,githubUrl:T,installCommand:L,pkgxInstallCommand:B,pantryInstallCommand:R,programs:G,companions:_,dependencies:M,versions:O,fullPath:K,aliases:E}}catch($){return console.error(`Error extracting package data for ${Q}:`,$),null}}function CQ(w,Q){let $=["cli","app","tool","server","client","api","lib","core","sdk","dev","bin"];if($.includes(w.toLowerCase()))return!1;if(w===Q)return!1;let X=Q.replace(/\./g,"");if(w===X)return!1;if(w.includes("--")||w.includes("$SHELL")||w.includes("curl")||w.includes("sh <("))return!1;if(w.includes(" -- ")||w.includes(" -i")||w.includes("+")&&w.includes(" "))return!1;if(Q.includes("/")){let Y=Q.split("/"),Z=Y[Y.length-1];if($.includes(Z.toLowerCase())&&w===Z)return!1}let q=["go","js","py","rb","sh","vi","cc","gc","jq","awk","sed","mc","gh"];if(w.length<3&&!q.includes(w.toLowerCase()))return!1;if(/^[\d.]+$/.test(w)&&/^\d/.test(w))return!1;if(!/[a-z]/i.test(w))return!1;if(w.includes("{{")||w.includes("}}"))return!1;if(w.includes("version.major")||w.includes("version.minor")||w.includes("version"))return!1;return!0}function iw(){return{"Programming Languages":["node","python","go","rust","ruby","julia","lua","luajit","php","crystal","nim","kotlin","scala","swift","zig","v","dart","ghc","ocaml","clojure","erl","elixir","R","perl","tcl","dmd","tinygo"],"Artificial Intelligence":["ollama","huggingface","openai","f2py","kaggle","jupyter","llm","stable-diffusion-webui","open-interpreter","interpreter","GPT Engineer","gPTEngineer","auto-gpt","autogpt","metagpt","MetaGPT","elizaOS","eliza","openplayground","chatblade","aichat"],Databases:["psql","mysql","mongod","mongos","mongosh","redis","sqlite3","duckdb","surreal","etcd","turso","mariadb","influx","clickhouse","neo4j","cassandra","couchdb","elasticsearch","opensearch","memcached","valkey","postgrest","litecli","edgedb","dgraph"],"Web Development":["vite","next","astro","vitepress","laravel","symfony","django","flask","fastapi","rails","spring","express","tailwindcss","svelte","ng","react","vue","nx","nuxt"],DevOps:["docker","compose","podman","kubectl","minikube","kustomize","helm","terraform","terragrunt","jenkins-lts","vault","consul","nomad","packer","ansible","ansible-lint","argocd","flux","lima","k3d","kind","tofu","atlantis","terratag","tflint","tfupdate","cfn-lint","infracost"],"Container & Kubernetes Tools":["docker","podman","kubectl","minikube","kustomize","helm","helmfile","stern","hubble","cilium","kube-linter","kubeshark","kubectl-cnpg","k9s","kubectx","kubecm","kubectl-krew","skaffold","tilt","linkerd","vcluster","istioctl","velero","kubeconform","kubebuilder","operator-sdk"],"Monitoring & Observability":["prometheus","grafana","datadog","newrelic","kibana","jaeger","zipkin","sentry","steampipe","logdy","loki","tempo","allure"],"Build Tools & Automation":["cmake","ninja","meson","scons","make","bazel","gradle","mvn","ant","task","just","autoconf","automake","pkg-config","vcpkg","buildctl","buildkit","earthly","buildifier","pants","scie-pants"],"Package Managers":["npm","npx","yarn","pnpm","bun","pip","pipenv","poetry","conda","bundler","cargo","composer","pod","nuget","brew","port","pkgx","mise","asdf","nixpacks","corepack","luarocks","rye","pdm"],"Editors & IDEs":["nvim","vim","emacs","code","vscode cli","micro","nano","alacritty","wezterm","helix"],"CLI Tools & Utilities":["ripgrep","rg","tree-sitter","fzf","bat","lsd","exa","eza","fd","fd-find","sed","awk","grep","find","jq","yq","tree","watch","htop","btop","bottom","tmux","screen","starship","oh-my-posh","fish","zsh","bash","curl","wget","ripgrep-all","rga","hyperfine","dust","du-dust","duf","ncdu","tokei","loc","delta","git-delta","difftastic","diff-so-fancy","gdu","procs","bandwhich","grex","choose","sd","dog","drill","xh","httpie","curlie"],Networking:["nginx","httpd","caddy","traefik","curl","wget","httpie","cloudflared","openssh","rsync","mosh"],"Security & Cryptography":["OpenSSL","gpg","gpg-tui","vault","bw","op","1Password CLI","1password_cli","mkcert","certbot","age","yubikey-agent","snyk","trivy","tfsec","checkov","git-crypt"],Multimedia:["ffmpeg","vips","mpv","yt-dlp","streamlink","gifsicle","exiftool","optipng","imagemagick"],"Graphics Libraries":["libsdlorg","libsdlorgsdl_image","openglorg","vulkanlunarcom","mesa3dorg","freeglutfileio","glewsourceforge","glmgtrucnet","cairographicsorg","opencvorg","vtkorg","ogre3dorg","irrlichtorg"],"Gaming & Game Development":["unitycom","unrealenginecom","godotengineorg","libsdlorg","love2dorg","rayliborg","allegro5org","defoldcom","constructnet","gamemakerio","cocos2dxorg","lutrisnet","steampipecom","epicgamescom"],"Cloud Platforms":["awsamazoncom","cloudgooglecom","azuremicrosoftcom","digitaloceancom","linodecom","vultrcom","hetznercom","cloudflarecom","netlifycom","vercelcom","herokucom","railwayapp","rendercom","flyio","planetscalecom","supabasecomcli","firebasecom","localstackcloudcli"],"Mobile Development":["reactnativedev","flutterdev","xamarincom","ionicio","cordovaapacheorg","capacitorjscom","nativescriptorg","expodev","fastlanetools","appiumio","androidcomcmdlinetools","gradleorg"],Testing:["jestjsio","mochajsorg","cypressio","seleniumdev","playwrightdev","puppeteerdev","testcafeio","pytestorg","unittestpythonorg","rspecinfo","junitorg","testngorg","webdriverio","vitestdev","avajs","jasminegjscom","karmatestrunnerorg"],Cryptocurrency:["bitcoinorg","ethereumorg","solanacom","getfoundrysh","racoonorg","elementsprojectorg","githubcom10gicvanitygenplusplus","ghostscriptcom","polkadotnetwork","avalanchenetwork","chainlinkcom","cardanoorg"],"Financial Tools":["raccoinorg","gnucashorg","ledgercliorg","beancountgooglecodecom","plaintextaccountingorg","quickencom","mintcom","ynabcom"],"Documentation & Text Processing":["pandocorg","texliveorg","latexprojectorg","asciidocorg","asciidoctororg","sphinxdocorg","mkdocsorg","gitbookcom","githubiohugohugorg","jekyllrb","docsifyjs","rustlangorgmdbook","typstapp","tectonic_typesettinggithubio","maaslalanicomslides"],"System Administration":["systemdio","crongnuorg","rsyncsambaorg","opensshcom","sudows","tmuxgithubcom","gnuorgscreen","htopdev","iostat","psmisc","procpsng","straceio","ltraceorg","lsofio","tcpdumporg","logrotateorg","monitoringpluginsorg"],"Scientific Computing":["numpyorg","scipyorg","pandasdataorg","matplotliborg","seabornpydataorg","plotlycom","jupyterorg","anacondacom","rorg","rstudiocom","octaveorg","matlabcom","mathematicawolframcom","sagemath","maxima","gnuplotorg","paravieworg","vtk"],"Embedded & IoT":["arduino","platformio","espressifcom","raspberrypiorg","mbed","freedosorg","qemuorg","openocdorg","stlink","jlinkorg","modbus","zigbeeorg","gpiozeropythonorg"],"Version Control":["git","gh","gitlab"],"Other Utilities":[]}}function aw(w){if(o[w])return o[w];return w.replace(/\W/g,"_")}function ew(w){return w.toLowerCase()}function Zw(w,Q,$){try{let X=Q||Bw,q=$||C.join(X,`${w}.ts`),Y=b.readFileSync(q,"utf-8"),Z=Y.match(/export const (\w+) = \{/),H=Z?Z[1]:`${w.replace(/\W/g,"")}Package`,W=Y.match(/export type (\w+) = typeof/),J=W?W[1]:`${H.charAt(0).toUpperCase()}${H.slice(1)}`;return{packageVarName:H,typeName:J}}catch(X){console.warn(`Could not read package file ${$||`${w}.ts`}, using fallback naming:`,X);let q=IQ(w),Y=MQ(w);return{packageVarName:q,typeName:Y}}}function MQ(w){if(o[w]){let X=o[w];return`${X.charAt(0).toUpperCase()}${X.slice(1)}Package`}let $=ew(w).replace(/\W/g,"");return`${$.charAt(0).toUpperCase()}${$.slice(1)}Package`}function IQ(w){if(o[w])return`${o[w]}Package`;return`${ew(w).replace(/\W/g,"")}Package`}function SQ(w,Q){let{typeName:$}=Zw(w,Q);return $}function FQ(w,Q){let{packageVarName:$}=Zw(w,Q);return $}async function Tw(w){try{console.log("\uD83D\uDD27 Generating package index..."),console.log(`DEBUG generateIndex START: packagesDir=${w}`),console.log(`DEBUG generateIndex START: process.cwd()=${N.cwd()}`);let Q=w||Bw,$=C.resolve(Q,"index.ts");if(console.log(`DEBUG generateIndex: packagesDir=${w}`),console.log(`DEBUG generateIndex: PACKAGES_DIR=${Bw}`),console.log(`DEBUG generateIndex: targetPackagesDir=${Q}`),console.log(`DEBUG generateIndex: targetIndexFile=${$}`),console.log(`DEBUG generateIndex: path.isAbsolute(targetIndexFile)=${C.isAbsolute($)}`),!b.existsSync(Q))console.log(`Creating packages directory: ${Q}`),b.mkdirSync(Q,{recursive:!0});if(!b.existsSync(Q))return console.error(`Failed to create packages directory: ${Q}`),null;let X=[];try{let Y=function(Z,H=""){let W=[],J=b.readdirSync(Z,{withFileTypes:!0});for(let z of J)if(z.isFile()&&z.name.endsWith(".ts")&&z.name!=="index.ts"&&z.name!=="aliases.ts")W.push(C.join(Z,z.name));else if(z.isDirectory()&&!z.name.startsWith(".")){let T=C.join(Z,z.name),L=H?`${H}/${z.name}`:z.name;W.push(...Y(T,L))}return W};X=Y(Q),console.log(`Found ${X.length} package files`)}catch(Y){console.error(`Error reading packages directory ${Q}:`,Y),X=[]}let q=`// Auto-generated package index
8
+ // Do not edit this file directly
9
+
10
+ export interface Pantry {
11
+ }
12
+
13
+ export type Packages = Pantry
14
+
15
+ export const pantry: Pantry = {
16
+ }
17
+
18
+ export const packages: Packages = pantry
19
+ `;if(X.length>0){console.log(`Processing ${X.length} package files...`);let Y=`// Auto-generated package index
20
+ // Do not edit this file directly
21
+
22
+ `,Z=`export interface Pantry {
23
+ `,H=`export const pantry: Pantry = {
24
+ `,W=new Set,J=new Set,z=X.sort();for(let K of z)try{let G=C.basename(K,".ts"),_=aw(G),O=C.relative(Q,K).replace(/\.ts$/,"").replace(/\\/g,"/"),{packageVarName:E}=Zw(G,Q,K),U=E,j=1;while(J.has(U))U=`${E}${j}`,j++;if(J.add(U),U===E)Y+=`import { ${E} } from './${O}'
25
+ `;else Y+=`import { ${E} as ${U} } from './${O}'
26
+ `;let S=_,I=1;while(W.has(S))S=`${_}${I}`,I++;W.add(S);let A=/^\d/.test(S)||!/^[a-z_$][\w$]*$/i.test(S)?`'${S}'`:S;Z+=` ${A}: typeof ${U}
27
+ `,H+=` ${A}: ${U},
28
+ `;let V=b.readFileSync(K,"utf-8").match(/domain:\s*['"]([^'"]*)['"]\s*as const/),v=V?V[1]:"";if(v){let P=d(v);if(P!==S){let D=P,u=1;while(W.has(D))D=`${P}${u}`,u++;W.add(D);let f=/^\d/.test(D)||!/^[a-z_$][\w$]*$/i.test(D)?`'${D}'`:D;Z+=` ${f}: typeof ${U}
29
+ `,H+=` ${f}: ${U},
30
+ `}}}catch(G){console.error(`Error processing file ${K}:`,G)}let T=await Yw(Q),L=new Map;for(let K of z)try{let _=b.readFileSync(K,"utf-8").match(/domain:\s*['"]([^'"]*)['"]\s*as const/),M=_?_[1]:"";if(M){let O=C.basename(K,".ts"),{packageVarName:E}=Zw(O,Q,K),U=E,j=1;while(J.has(U)&&U!==E)U=`${E}${j}`,j++;L.set(M,U)}}catch(G){console.error(`Error processing file for alias mapping ${K}:`,G)}for(let[K,G]of Object.entries(T).sort((_,M)=>_[0].localeCompare(M[0]))){let _=L.get(G);if(_){let M=/^\d/.test(K)||!/^[a-z_$][\w$]*$/i.test(K)?`'${K}'`:K;if(W.has(K)){let O=M.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),E=new RegExp(`^\\s*${O}:\\s*typeof\\s+\\w+\\s*$`,"gm"),U=new RegExp(`^\\s*${O}:\\s*\\w+,\\s*$`,"gm");Z=Z.replace(E,""),H=H.replace(U,"")}Z+=` ${M}: typeof ${_}
31
+ `,H+=` ${M}: ${_},
32
+ `,W.add(K)}}Z+=`}
33
+
34
+ `,H+=`}
35
+
36
+ `,q=`${Y}
37
+ ${Z}export type Packages = Pantry
38
+
39
+ ${H}export const packages: Packages = pantry
40
+
41
+ export * from './aliases'
42
+ `}try{b.writeFileSync($,q),console.log(`Successfully generated ${$}`)}catch(Y){return console.error(`Error writing index file ${$}:`,Y),null}if(!b.existsSync($))return console.error(`Index file was not created: ${$}`),null;return console.log(`DEBUG generateIndex: returning ${$}`),console.log(`DEBUG generateIndex: return value isAbsolute=${C.isAbsolute($)}`),console.log(`DEBUG generateIndex: return value type=${typeof $}`),$}catch(Q){return console.error("Error generating index file:",Q),null}}async function Yw(w){let Q={};console.log("Generating aliases from package files (avoiding circular dependency)");let $=w||C.join(N.cwd(),"src","packages");if(!b.existsSync($))return console.log(`Packages directory does not exist: ${$}`),Q;function X(Z,H=""){let W=[],J=b.readdirSync(Z,{withFileTypes:!0});for(let z of J)if(z.isFile()&&z.name.endsWith(".ts")&&z.name!=="index.ts"&&z.name!=="aliases.ts")W.push(C.join(Z,z.name));else if(z.isDirectory()&&!z.name.startsWith(".")){let T=C.join(Z,z.name),L=H?`${H}/${z.name}`:z.name;W.push(...X(T,L))}return W}let q=X($).sort();console.log(`Found ${q.length} package files`);for(let Z of q)try{let H=Z,W=b.readFileSync(H,"utf-8"),J=C.basename(Z,".ts"),z=W.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),T=z?z[1]:qw(J),L=W.match(/name:\s*['"]([^'"]*)['"]\s*as const/),B=L?L[1]:"";if(B&&B!==T&&CQ(B,T))if(!Q[B])Q[B]=T,console.log(`Auto-generated alias: ${B} -> ${T}`);else console.log(`Skipped auto-generated alias ${B} -> ${T} (already exists as ${Q[B]})`);let R=W.match(/aliases:\s*\[([\s\S]*?)\]/);if(R&&R[1]){let K=R[1].match(/["']([^"']*)["']/g);if(K)for(let G of K){let _=G.replace(/["']/g,"");if(!(!_||_.includes("--")||_.includes("$SHELL")||_.includes("curl")||_.includes("sh <(")||_.includes(" -- ")||_.includes(" -i")||_.includes("+")&&_.includes(" ")||_.includes("{{")||_.includes("}}")||_.includes("version.major")||_.includes("version.minor")||_===T))if(!Q[_])Q[_]=T,console.log(`Found explicit alias ${_} -> ${T}`);else console.log(`Skipped explicit alias ${_} -> ${T} (already exists as ${Q[_]})`);else console.log(`Filtered out invalid alias: ${_} for ${T}`)}}if(T==="aws.amazon.com/cli"){if(!Q.aws)Q.aws=T,console.log(`Added AWS CLI alias: aws -> ${T}`);if(!Q["aws/cli"])Q["aws/cli"]=T,console.log(`Added AWS CLI path alias: aws/cli -> ${T}`)}if(T==="aws.amazon.com/cdk"){if(!Q["aws/cdk"])Q["aws/cdk"]=T,console.log(`Added AWS CDK path alias: aws/cdk -> ${T}`)}}catch(H){console.error(`Error extracting aliases from ${Z}:`,H)}let Y=rw();for(let[Z,H]of Object.entries(Y))if(!Q[Z])Q[Z]=H,console.log(`Added alias override: ${Z} -> ${H}`);else{let W=Q[Z];Q[Z]=H,console.log(`Overrode alias ${Z}: ${W} -> ${H}`)}return Q}async function Ew(w){try{console.log(`DEBUG generateAliases START: packagesDir=${w}`),console.log(`DEBUG generateAliases START: process.cwd()=${N.cwd()}`);let Q=await Yw(w),$=w?C.resolve(w):C.resolve(N.cwd(),"src","packages"),X=C.resolve($,"aliases.ts");console.log(`DEBUG generateAliases: targetPackagesDir=${$}`),console.log(`DEBUG generateAliases: aliasesFile=${X}`),console.log(`DEBUG generateAliases: path.isAbsolute(aliasesFile)=${C.isAbsolute(X)}`);let q=C.dirname(X);if(!b.existsSync(q))b.mkdirSync(q,{recursive:!0});let Y=Q,Z=`/**
43
+ * Auto-generated aliases for pkgx packages
44
+ */
45
+
46
+ `;Z+=`export const aliases: Record<string, string> = {
47
+ `;let H=Object.entries(Y).sort((W,J)=>W[0].localeCompare(J[0]));for(let[W,J]of H)Z+=` '${W}': '${J}',
48
+ `;return Z+=`}
49
+ `,b.writeFileSync(X,Z),console.log(`Successfully generated ${X} with ${H.length} aliases`),console.log(`DEBUG generateAliases: returning ${X}`),console.log(`DEBUG generateAliases: return value isAbsolute=${C.isAbsolute(X)}`),console.log(`DEBUG generateAliases: return value type=${typeof X}`),X}catch(Q){return console.error("Error generating aliases file:",Q),""}}function AQ(w){let Q=w.split(`
50
+ `).map(($)=>$.trimEnd()).join(`
51
+ `);return Q=bQ(Q),Q=Q.replace(/\n{3,}/g,`
52
+
53
+ `),Q=`${Q.trimEnd()}
54
+ `,Q}function Mw(w){return AQ(w)}function bQ(w){let Q=w.split(`
55
+ `),$=!1;return Q.map((X)=>{if(X.trimStart().startsWith("```"))return $=!$,X;if($)return X;return X.replace(/(?<!\]\()(?<!\()(?<!<)(https?:\/\/[^\s)>\]]+)/g,(q,Y,Z)=>{if(Z>0&&X[Z-1]==="<")return q;let H=X.slice(0,Z);if(/\]\($/.test(H))return q;if((H.match(/`/g)||[]).length%2===1)return q;return`<${q}>`})}).join(`
56
+ `)}function xQ(w){if(["undefined","null","true","false","var","let","const","function","class","if","else","for","while","do","switch","case","default","break","continue","return","try","catch","finally","throw","new","this","super","import","export","from","as","typeof","instanceof","in","of","delete","void","async","await","yield","static","extends","implements","interface","type","enum","namespace","module","declare","abstract","public","private","protected","readonly","get","set"].includes(w.toLowerCase()))return!1;let $=["go","rust","zig","nim","dart","julia","scala","kotlin","swift","node","bun"];if(!w.includes(".")&&!$.includes(w.toLowerCase()))return!1;if(!w||w.trim().length===0)return!1;if(!/^[\w.\-/]+$/.test(w))return!1;return!0}function VQ(w){if(/^[A-Z][A-Z0-9_]*(?:\^|$)/.test(w))return!0;return[/^linux$/,/^darwin$/,/^ompi_.*flags/i,/^perl5lib/i,/^gsettings-desktop-schemas$/,/^curl\.se\/ca-certs$/,/^openssh\.com$/].some(($)=>$.test(w))}function p(w){if(!xQ(w.domain))return!0;if(!w.description)return!0;return["Go home.","Crafters of fine Open Source products","Package information for","pkgx package","Loading...","Please wait...","Package information available on pkgx.dev"].some(($)=>w.description.includes($))}function wQ(w){let Q=(X)=>{if(!w.versions||w.versions.length===0)return X.replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;");let q=w.versions[0],Y=q.split("."),Z=Y[0]||"",H=Y[1]||"",W=Y[2]||"",J=H?`${Z}.${H}`:Z;return X.replace(/\{\{\s*version\.marketing\s*\}\}/g,J).replace(/\{\{\s*version\.major\s*\}\}/g,Z).replace(/\{\{\s*version\.minor\s*\}\}/g,H).replace(/\{\{\s*version\.patch\s*\}\}/g,W).replace(/\{\{\s*version\.raw\s*\}\}/g,q).replace(/\{\{\s*version\s*\}\}/g,q).replace(/\{\{(?![^}]*\}\})/g,"&lbrace;&lbrace;")};if(w.pantryInstallCommand){let X=w.pantryInstallCommand.match(/pantry install (.+)/);if(X){let q=X[1];if(w.aliases&&w.aliases.length>0){let Y=[...w.aliases].sort((H,W)=>H.length-W.length);return`pantry install ${Q(Y[0])}`}if(w.aliases&&w.aliases.some((Y)=>Y.toLowerCase()===q.toLowerCase()))return`pantry install ${Q(q.toLowerCase())}`;return Q(w.pantryInstallCommand)}}if(w.installCommand)return Q(w.installCommand);let $=w.domain;if(w.aliases&&w.aliases.length>0)$=[...w.aliases].sort((q,Y)=>q.length-Y.length)[0];return $=Q($),`pantry install ${$}`}async function yQ(w,Q){let $=await Cw(Q),X=await Yw(Q),q=iw(),Y=C.resolve(w,"package-catalog.md"),Z={},H=0;for(let[R,K]of Object.entries($))if(!p(K))Z[R]=K;else H++,console.log(`Excluding package ${K.domain||R} (placeholder data)`);console.log(`Filtered out ${H} packages with placeholder data`);let W=new Set,J=new Map;for(let[R,K]of Object.entries(Z)){let G=K.domain;if(!W.has(G))J.set(G,K),W.add(G)}let z=new Set;Object.values(q).forEach((R)=>{R.forEach((K)=>z.add(K))});let T=[];if(J.forEach((R,K)=>{if(!z.has(K))T.push(K)}),T.length>0)q["Other Utilities"]=T;let L=`# Package Catalog
57
+
58
+ This comprehensive catalog lists all ${J.size}+ packages available in ts-pantry, organized by category.
59
+
60
+ Each package can be accessed using \`getPackage(name)\` or directly via \`pantry.domain\`.
61
+
62
+ ## Quick Stats
63
+
64
+ - **Total Packages**: ${J.size}
65
+ - **Categories**: ${Object.keys(q).length}
66
+ - **Last Updated**: ${new Date().toISOString()}
67
+
68
+ ## Table of Contents
69
+
70
+ `,B=(R)=>{if($[R])return{domainVarName:R,pkg:$[R]};let K=X[R];if(K){let G=d(K);if($[G])return{domainVarName:G,pkg:$[G]}}return null};Object.keys(q).forEach((R)=>{let K=R.toLowerCase().replace(/[^a-z0-9]+/g,"-"),G=q[R],_=new Map;G.forEach((O)=>{let E=B(O);if(E&&!p(E.pkg)){let U=E.pkg.domain||E.pkg.fullPath||"unknown";if(!_.has(U))_.set(U,E);else{let j=_.get(U);if(E.domainVarName.length<j.domainVarName.length||E.domainVarName.length===j.domainVarName.length&&E.domainVarName<j.domainVarName)_.set(U,E)}}});let M=_.size;if(M>0)L+=`- [${R}](#${K}) (${M} packages)
71
+ `}),L+=`
72
+ `;for(let[R,K]of Object.entries(q)){let G=new Map;K.forEach((M)=>{let O=B(M);if(O&&!p(O.pkg)){let E=O.pkg.domain||O.pkg.fullPath||"unknown";if(!G.has(E))G.set(E,O);else{let U=G.get(E);if(O.domainVarName.length<U.domainVarName.length||O.domainVarName.length===U.domainVarName.length&&O.domainVarName<U.domainVarName)G.set(E,O)}}});let _=Array.from(G.values()).sort((M,O)=>(M.pkg.domain||M.domainVarName).localeCompare(O.pkg.domain||O.domainVarName));if(_.length===0)continue;L+=`## ${R}
73
+
74
+ `,L+=`${_.length} packages in this category
75
+
76
+ `,L+=`| Package | Description | Programs | Versions | Install |
77
+ `,L+=`|---------|-------------|----------|----------|----------|
78
+ `;for(let{domainVarName:M,pkg:O}of _)try{let E=O.domain||O.fullPath||"unknown",U=O.aliases?` (${O.aliases.map((u)=>u.replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;")).join(", ")})`:"",j=O.programs.slice(0,3).map((u)=>u.replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;")).join(", ");if(O.programs.length>3)j+=`, ... (+${O.programs.length-3})`;if(O.programs.length===0)j="-";let S=O.versions?.length||0,I=O.versions?.[0]||"latest",A=S>0?`${I} (+${S-1})`:"latest",x=O.description.replace(/\s+/g," ").replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;").replace(/\x27/g,"&#39;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\|/g,"\\|");if(x.length>100)x=`${x.substring(0,97)}...`;let V=O.name||E;if(O.aliases&&O.aliases.length>0)V=[...O.aliases].sort((f,h)=>f.length-h.length)[0];V=V.replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;");let v=`\`pkgx ${V}\``,P;if(E.includes("."))if(E.startsWith("github.com/")&&E.includes("/")){let f=E.replace("github.com/","").split("/");if(f.length>=2){let h=f[0],JQ=f.slice(1).join("-");P=`./packages/github.com/${h}/${JQ}.md`}else{let h=M.toLowerCase();if(/^\d/.test(h))h=`pkg-${h}`;h=h.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),P=`./packages/${h}.md`}}else P=`./packages/${E}/index.md`;else{let u=M.toLowerCase();if(/^\d/.test(u))u=`pkg-${u}`;u=u.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),P=`./packages/${u}.md`}let D=`| **[${E}](${P})**${U} | ${x} | ${j} | ${A} | ${v} |`.replace(/\r?\n/g," ").replace(/\s+/g," ");L+=`${D}
79
+ `}catch(E){let U=O.domain||O.fullPath||"unknown";console.error(`Error processing ${U}:`,E),L+=`| **${U}** | Error retrieving package information | - | - | - |
80
+ `}L+=`
81
+ `}return L+=`## Usage Examples
82
+
83
+ ### Basic Usage
84
+
85
+ \`\`\`typescript
86
+ import { getPackage, pantry } from 'ts-pkgx'
87
+
88
+ // Get a package by domain
89
+ const nodePackage = pantry.nodejsorg
90
+
91
+ // Get a package by alias
92
+ const nodeByAlias = getPackage('node')
93
+
94
+ // Access package properties
95
+ console.log(\`Package: \${nodePackage.name} - \${nodePackage.description}\`)
96
+ console.log(\`Install: \${nodePackage.installCommand}\`)
97
+ console.log(\`Programs: \${nodePackage.programs.join(', ')}\`)
98
+ \`\`\`
99
+
100
+ ### Advanced Usage
101
+
102
+ \`\`\`typescript
103
+ // Find packages by category
104
+ const databases = [
105
+ pantry.postgresqlorg,
106
+ pantry.mysqlcom,
107
+ pantry.redisio,
108
+ pantry.mongodbcom
109
+ ]
110
+
111
+ // Get all available versions
112
+ const nodeVersions = pantry.nodejsorg.versions
113
+ console.log(\`Node.js versions: \${nodeVersions.slice(0, 5).join(', ')}...\`)
114
+
115
+ // Check dependencies
116
+ const nodeDeps = pantry.nodejsorg.dependencies
117
+ console.log(\`Node.js dependencies: \${nodeDeps.join(', ')}\`)
118
+ \`\`\`
119
+
120
+ ### Installation Examples
121
+
122
+ \`\`\`bash
123
+ # Install using pkgx
124
+ pkgx node
125
+ pkgx python
126
+ pkgx rust
127
+
128
+ # Install specific versions
129
+ pkgx node@20
130
+ pkgx python@3.11
131
+
132
+ # Install multiple packages
133
+ pkgx node python rust
134
+ \`\`\`
135
+
136
+ ## Package Information
137
+
138
+ Each package includes:
139
+
140
+ - **Name**: Short identifier for the package
141
+ - **Domain**: Full domain identifier
142
+ - **Description**: What the package does
143
+ - **Programs**: Executable programs provided
144
+ - **Versions**: Available versions
145
+ - **Dependencies**: Required dependencies
146
+ - **Companions**: Related packages
147
+ - **Install Command**: How to install with pkgx
148
+
149
+ ## Contributing
150
+
151
+ To add or update packages, see the pkgx [contribution guide](https://docs.pkgx.sh/appendix/packaging/pantry).
152
+ `,await b.promises.writeFile(Y,Mw(L)),Y}function tw(w,Q,$){if(w.includes("."))if(w.startsWith("github.com/")){let q=w.replace("github.com/","").split("/");if(q.length>=2){let Y=q[0],Z=q.slice(1).join("-");return C.join($,"github.com",Y,`${Z}.md`)}else{let Y=q[0];return C.join($,"github.com",Y,"index.md")}}else return C.join($,w,"index.md");else{let X=Q.toLowerCase();if(/^\d/.test(X))X=`pkg-${X}`;return X=X.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),C.join($,`${X}.md`)}}async function NQ(w,Q){let $=await Cw(Q),X=C.join(w,"packages");if(!b.existsSync(X))b.mkdirSync(X,{recursive:!0});let q=[],Y=new Map;for(let[Z,H]of Object.entries($)){if(p(H)){console.log(`Skipping package page for ${H.domain||Z} (placeholder data)`);continue}let W=H.domain;if(!Y.has(W))Y.set(W,{domainVarName:Z,pkg:H});else{let J=Y.get(W);if(Z.length<J.domainVarName.length||Z.length===J.domainVarName.length&&Z<J.domainVarName)Y.set(W,{domainVarName:Z,pkg:H}),console.log(`Replaced ${J.domainVarName} with ${Z} for domain ${W}`)}}for(let{domainVarName:Z,pkg:H}of Y.values())try{let W=H.domain||H.fullPath||Z,J;if(W.includes("."))if(W.startsWith("github.com/")){let j=W.replace("github.com/","").split("/");if(j.length>=2){let S=j[0],I=j.slice(1).join("-"),A=C.join(X,"github.com",S);if(!b.existsSync(A))b.mkdirSync(A,{recursive:!0});J=C.join(A,`${I}.md`)}else{let S=j[0],I=C.join(X,"github.com",S);if(!b.existsSync(I))b.mkdirSync(I,{recursive:!0});J=C.join(I,"index.md")}}else{let U=C.join(X,W);if(!b.existsSync(U))b.mkdirSync(U,{recursive:!0});J=C.join(U,"index.md")}else{let U=Z.toLowerCase();if(/^\d/.test(U))U=`pkg-${U}`;U=U.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),J=C.join(X,`${U}.md`)}let z=H.description||"",T=(U)=>{if(!H.versions||H.versions.length===0)return U.replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;");let j=H.versions[0],S=j.split("."),I=S[0]||"",A=S[1]||"",x=S[2]||"",V=A?`${I}.${A}`:I;return U.replace(/\{\{\s*version\.marketing\s*\}\}/g,V).replace(/\{\{\s*version\.major\s*\}\}/g,I).replace(/\{\{\s*version\.minor\s*\}\}/g,A).replace(/\{\{\s*version\.patch\s*\}\}/g,x).replace(/\{\{\s*version\.raw\s*\}\}/g,j).replace(/\{\{\s*version\s*\}\}/g,j).replace(/\{\{(?![^}]*\}\})/g,"&lbrace;&lbrace;")},L=T(H.name||W),B=T(z).replace(/\s+/g," "),R=`# ${L}
153
+
154
+ ${B?`> ${B}`:""}
155
+
156
+ ## Package Information
157
+
158
+ - **Domain**: \`${W}\`
159
+ - **Name**: \`${L}\`
160
+ - **Homepage**: ${H.homepageUrl||"Not specified"}
161
+ - **Source**: [View on GitHub](${H.packageYmlUrl||`https://github.com/pkgxdev/pantry/tree/main/projects/${W}/package.yml`})
162
+
163
+ ## Installation
164
+
165
+ \`\`\`bash
166
+ # Install with pantry
167
+ ${wQ(H)}
168
+ \`\`\`
169
+
170
+ ## Programs
171
+
172
+ This package provides the following executable programs:
173
+
174
+ `;if(H.programs&&H.programs.length>0)H.programs.forEach((U)=>{let j=T(U);R+=`- \`${j}\`
175
+ `});else R+=`No programs specified.
176
+ `;if(H.aliases&&H.aliases.length>0)R+=`
177
+ ## Aliases
178
+
179
+ This package can also be accessed using these aliases:
180
+
181
+ `,H.aliases.forEach((U)=>{let j=T(U);R+=`- \`${j}\`
182
+ `});if(H.versions&&H.versions.length>0){R+=`
183
+ ## Available Versions
184
+
185
+ <details>
186
+ <summary>Show all ${H.versions.length} versions</summary>
187
+
188
+ `;let U=new Map,j=[];H.versions.forEach((S)=>{let I=S.split("."),A=I.length>=2?`${I[0]}.${I[1]}`:I[0];if(!U.has(A))U.set(A,[]),j.push(A);U.get(A).push(S)}),j.forEach((S)=>{let I=U.get(S);R+=`- ${I.map((A)=>`\`${A}\``).join(", ")}
189
+ `}),R+=`
190
+ </details>
191
+
192
+ **Latest Version**: \`${H.versions[0]}\`
193
+
194
+ ### Install Specific Version
195
+
196
+ \`\`\`bash
197
+ # Install specific version
198
+ ${H.pkgxInstallCommand?T(H.pkgxInstallCommand.replace(`+${W}`,`+${W}@${H.versions[0]}`)):`sh <(curl https://pkgx.sh) +${W}@${H.versions[0]} -- $SHELL -i`}
199
+ \`\`\`
200
+ `}if(H.dependencies&&H.dependencies.length>0)R+=`
201
+ ## Dependencies
202
+
203
+ This package depends on:
204
+
205
+ `,H.dependencies.forEach((U)=>{R+=`- \`${U}\`
206
+ `});if(H.companions&&H.companions.length>0){let U=H.companions.filter((j)=>!VQ(j));if(U.length>0)R+=`
207
+ ## Related Packages
208
+
209
+ These packages work well with ${H.name||W}:
210
+
211
+ `,U.forEach((j)=>{let S=d(j),I=$[S];if(I&&!p(I)){let A=tw(j,S,X),x=C.relative(C.dirname(J),A).replace(/\\/g,"/"),V=I.description?.trim();if(V)R+=`- [\`${j}\`](${x}) - ${V}
212
+ `;else R+=`- [\`${j}\`](${x})
213
+ `}else{let A=tw(j,S,X),x=C.relative(C.dirname(J),A).replace(/\\/g,"/"),V=I?.description?.trim()||"Package not available";if(V&&V!=="Package not available")R+=`- [\`${j}\`](${x}) - ${V}
214
+ `;else R+=`- [\`${j}\`](${x})
215
+ `}})}let K=C.dirname(X),_=`${C.relative(C.dirname(J),K)}/package-catalog.md`.replace(/\\/g,"/"),M=H.aliases&&H.aliases.length>0?H.aliases[0]:H.name||d(W),E=/[^\w$]/.test(M)||/^\d/.test(M)?`pantry['${M}']`:`pantry.${M}`;R+=`
216
+ ## Usage Examples
217
+
218
+ \`\`\`typescript
219
+ import { pantry } from 'ts-pkgx'
220
+
221
+ // Access this package
222
+ const pkg = ${E}
223
+
224
+ console.log(\`Package: \${pkg.name}\`)
225
+ console.log(\`Description: \${pkg.description}\`)
226
+ console.log(\`Programs: \${pkg.programs.join(', ')}\`)
227
+ \`\`\`
228
+
229
+ ## Links
230
+
231
+ - [Package Source](${H.packageYmlUrl||`https://github.com/pkgxdev/pantry/tree/main/projects/${W}/package.yml`})
232
+ - [Homepage](${H.homepageUrl||"#"})
233
+ - [Back to Package Catalog](${_})
234
+
235
+ ---
236
+
237
+ > Auto-generated from package data.
238
+ `,await b.promises.writeFile(J,Mw(R)),q.push(J)}catch(W){console.error(`Error generating page for ${Z}:`,W)}return q}async function uQ(w,Q){let $=await Cw(Q),X=await Yw(Q),q=iw(),Y=C.join(w,"categories");if(!b.existsSync(Y))b.mkdirSync(Y,{recursive:!0});let Z=[],H=(W)=>{if($[W])return{domainVarName:W,pkg:$[W]};if(X[W]){let J=X[W],z=d(J);if($[z])return{domainVarName:z,pkg:$[z]}}return null};for(let[W,J]of Object.entries(q)){let z=new Map;J.forEach((K)=>{let G=H(K);if(G&&!p(G.pkg)){let _=G.pkg.domain||G.pkg.fullPath||"unknown";if(!z.has(_))z.set(_,G);else{let M=z.get(_);if(G.domainVarName.length<M.domainVarName.length||G.domainVarName.length===M.domainVarName.length&&G.domainVarName<M.domainVarName)z.set(_,G)}}});let T=Array.from(z.values()).sort((K,G)=>(K.pkg.domain||K.domainVarName).localeCompare(G.pkg.domain||G.domainVarName));if(T.length===0)continue;let L=`${W.toLowerCase().replace(/[^a-z0-9]+/g,"-")}.md`,B=C.join(Y,L),R=`# ${W}
239
+
240
+ ${T.length} packages in this category
241
+
242
+ ${W==="Programming Languages"?"Popular programming languages and their runtimes available through pkgx.":W==="Databases"?"Database systems and data storage solutions.":W==="Development Tools"?"Development environments, editors, and programming tools.":W==="Build Tools"?"Build systems, compilers, and development infrastructure.":W==="DevOps"?"Tools for deployment, orchestration, and infrastructure management.":W==="Multimedia"?"Audio, video, and image processing tools.":W==="Security"?"Security tools, encryption, and authentication systems.":W==="Networking"?"Network tools, protocols, and communication software.":W==="CLI Tools & Utilities"?"Command-line utilities and system tools.":`Packages related to ${W.toLowerCase()}.`}
243
+
244
+ ## Packages
245
+
246
+ `;T.forEach(({domainVarName:K,pkg:G})=>{let _=G.domain||G.fullPath||"unknown",M=(I)=>{if(!G.versions||G.versions.length===0)return I.replace(/\{\{/g,"&lbrace;&lbrace;").replace(/\}\}/g,"&rbrace;&rbrace;");let A=G.versions[0],x=A.split("."),V=x[0]||"",v=x[1]||"",P=x[2]||"",D=v?`${V}.${v}`:V;return I.replace(/\{\{\s*version\.marketing\s*\}\}/g,D).replace(/\{\{\s*version\.major\s*\}\}/g,V).replace(/\{\{\s*version\.minor\s*\}\}/g,v).replace(/\{\{\s*version\.patch\s*\}\}/g,P).replace(/\{\{\s*version\.raw\s*\}\}/g,A).replace(/\{\{\s*version\s*\}\}/g,A).replace(/\{\{(?![^}]*\}\})/g,"&lbrace;&lbrace;")},O=[];if(G.name&&G.name!==_)O.push(G.name);if(G.aliases&&G.aliases.length>0)O.push(...G.aliases);let E=O.length>0?` (${O.join(", ")})`:"",U=G.description||"",j=M(U).replace(/\s+/g," "),S;if(_.includes("."))if(_.startsWith("github.com/")&&_.includes("/")){let A=_.replace("github.com/","").split("/");if(A.length>=2){let x=A[0],V=A.slice(1).join("-");S=`../packages/github.com/${x}/${V}.md`}else{let x=K.toLowerCase();if(/^\d/.test(x))x=`pkg-${x}`;x=x.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),S=`../packages/${x}.md`}}else S=`../packages/${_}/index.md`;else{let I=K.toLowerCase();if(/^\d/.test(I))I=`pkg-${I}`;I=I.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),S=`../packages/${I}.md`}R+=`### [${_}](${S})${E}
247
+
248
+ ${j?`${j}`:""}
249
+
250
+ **Programs**: ${G.programs&&G.programs.length>0?G.programs.map((I)=>M(I)).join(", "):"None specified"}
251
+
252
+ **Install**: \`${wQ(G)}\`
253
+
254
+ ---
255
+
256
+ `}),R+=`[← Back to Package Catalog](../package-catalog.md)
257
+ `,await b.promises.writeFile(B,Mw(R)),Z.push(B)}return Z}async function Lw(w=Ow,Q){console.log("\uD83D\uDE80 Generating comprehensive package documentation...");try{if(!b.existsSync(w))b.mkdirSync(w,{recursive:!0});console.log("\uD83D\uDCDA Generating package catalog...");let $=await yQ(w,Q);console.log(`✅ Generated: ${$}`),console.log("\uD83D\uDCC4 Generating individual package pages...");let X=await NQ(w,Q);console.log(`✅ Generated ${X.length} package pages`),console.log("\uD83D\uDCC2 Generating category pages...");let q=await uQ(w,Q);console.log(`✅ Generated ${q.length} category pages`),console.log(`
258
+ \uD83C\uDF89 Documentation generation complete!`),console.log(`\uD83D\uDCCD Output directory: ${w}`),console.log(`\uD83D\uDCCA Total files generated: ${1+X.length+q.length}`),console.log(`
259
+ Files generated:`),console.log(`- Package catalog: ${$}`),console.log(`- Package pages: ${X.length} files in docs/packages/`),console.log(`- Category pages: ${q.length} files in docs/categories/`)}catch($){throw console.error("❌ Error generating documentation:",$),$}}async function jw(){try{console.log("\uD83C\uDFAF Updating Dependencies type timestamp...");let w=C.join(N.cwd(),"src","dependencies.ts");if(!b.existsSync(w)){console.log("dependencies.ts not found, skipping update");return}let Q=b.readFileSync(w,"utf-8"),$=new Date().toISOString(),X=Q.replace(/\/\/ Auto-generated precise dependency types/,`// Auto-generated precise dependency types
260
+ // Last updated: ${$}`);b.writeFileSync(w,X),console.log("✅ Updated dependencies.ts timestamp")}catch(w){console.error("Error updating dependencies.ts:",w)}}async function PQ(){try{let w=N.argv.slice(2);switch(w[0]||"index"){case"index":{if(console.log("\uD83D\uDD27 Generating package index..."),!await Tw())console.error("❌ Failed to generate index"),N.exit(1);if(console.log("\uD83C\uDFF7️ Generating aliases..."),!await Ew())console.error("❌ Failed to generate aliases"),N.exit(1);console.log("\uD83C\uDFAF Updating PackageVersionMap..."),await jw(),console.log("✨ Index and aliases generation completed successfully!");break}case"docs":{let $=w[1]||Ow;console.log(`\uD83D\uDCDA Generating documentation to ${$}...`),await Lw($),console.log("✨ Documentation generation completed successfully!");break}case"all":{if(console.log("\uD83D\uDE80 Generating everything..."),console.log("\uD83D\uDD27 Generating package index..."),!await Tw())console.error("❌ Failed to generate index"),N.exit(1);if(console.log("\uD83C\uDFF7️ Generating aliases..."),!await Ew())console.error("❌ Failed to generate aliases"),N.exit(1);console.log("\uD83C\uDFAF Updating PackageVersionMap..."),await jw();let q=w[1]||Ow;console.log(`\uD83D\uDCDA Generating documentation to ${q}...`),await Lw(q),console.log("✨ All generation completed successfully!");break}default:console.log(`
261
+ Usage: bun run src/generate.ts [command] [options]
262
+
263
+ Commands:
264
+ index Generate package index and aliases (default)
265
+ docs [output-dir] Generate documentation (default: ./docs)
266
+ all [output-dir] Generate everything (index, aliases, and docs)
267
+
268
+ Examples:
269
+ bun run src/generate.ts
270
+ bun run src/generate.ts index
271
+ bun run src/generate.ts docs
272
+ bun run src/generate.ts docs ./custom-docs
273
+ bun run src/generate.ts all
274
+ bun run src/generate.ts all ./custom-docs
275
+ `);break}}catch(w){console.error("\uD83D\uDCA5 Error during generation:",w),N.exit(1)}}var DQ=import.meta.url===`file://${N.argv[1]}`||import.meta.url===`file:///${N.argv[1]}`;if(DQ)PQ();import s from"node:fs";import hQ from"node:os";import n from"node:path";import Ww from"node:process";async function vQ(w,Q={}){let{targetOs:$=Ww.platform==="darwin"?"darwin":Ww.platform==="win32"?"windows":"linux",includeOsSpecific:X=!0,maxDepth:q=10,verbose:Y=!1}=Q,Z=await sw(w,{targetOs:$,includeOsSpecific:X,maxDepth:q,verbose:Y}),H=Xw(w),W=Z.allDependencies.map((B)=>({name:B.name,version:B.version,constraint:B.constraint,isOsSpecific:B.isOsSpecific,os:B.os})),J=H.map((B)=>B.name),z=`pkgx install ${J.join(" ")}`,T=`pantry install ${J.join(" ")}`,L=Z.conflicts.map((B)=>{let R=W.find((K)=>K.name===B.package);return{package:B.package,versions:B.versions,resolved:R?.version||"latest"}});return{packages:W,directCount:H.length,totalCount:W.length,conflicts:L,pkgxCommand:z,pantryCommand:T}}async function $$(w,Q={}){let $=s.mkdtempSync(n.join(hQ.tmpdir(),"pantry-deps-")),X=n.join($,"deps.yaml");try{return s.writeFileSync(X,w,{encoding:"utf-8",mode:384}),await vQ(X,Q)}finally{try{s.rmSync($,{recursive:!0,force:!0})}catch{}}}async function X$(w,Q={}){let{targetOs:$=Ww.platform==="darwin"?"darwin":Ww.platform==="win32"?"windows":"linux",includeOsSpecific:X=!0,maxDepth:q=10}=Q,Y=await Hw(w,{targetOs:$,includeOsSpecific:X,maxDepth:q});return Y.unshift({name:w,version:"latest",constraint:"*",isOsSpecific:!1}),(await _w(Y,{targetOs:$,includeOsSpecific:X,maxDepth:q})).allDependencies.map((H)=>({name:H.name,version:H.version,constraint:H.constraint,isOsSpecific:H.isOsSpecific,os:H.os}))}function H$(w,Q="pantry"){if(Q==="pkgx")return`pkgx install ${w.join(" ")}`;return`pantry install ${w.join(" ")}`}function Z$(w){let Q=[],$=n.join(w,"pantry");try{let Y=s.readdirSync($,{withFileTypes:!0});for(let Z of Y){if(!Z.isDirectory())continue;if(Z.name.startsWith("@")){let H=n.join($,Z.name);try{let W=s.readdirSync(H,{withFileTypes:!0});for(let J of W){if(!J.isDirectory())continue;let z=`${Z.name}/${J.name}`,T=n.join(H,J.name,"package.json"),L=QQ(T);Q.push({name:z,version:L,isWorkspace:z.startsWith("@stacksjs/"),isScoped:!0})}}catch{}}else{let H=n.join($,Z.name,"package.json"),W=QQ(H);Q.push({name:Z.name,version:W,isWorkspace:!1,isScoped:!1})}}}catch{}Q.sort((Y,Z)=>Y.name.localeCompare(Z.name));let X=Q.filter((Y)=>Y.isWorkspace).length,q=Q.length-X;return{packages:Q,thirdPartyCount:q,workspaceCount:X,totalCount:Q.length}}function QQ(w){try{let Q=s.readFileSync(w,"utf-8");return JSON.parse(Q).version||"0.0.0"}catch{return"0.0.0"}}Z6();function Y$(w){return w}function W$(w){return w}var R$={baseUrl:"https://dist.pkgx.dev"};function z$(w){return w}import{execSync as Iw}from"node:child_process";var i=new Set,$Q=!1;function fQ(){if($Q)return;$Q=!0;let w=()=>{for(let Q of i)try{Iw(`pantry stop ${Q}`,{stdio:"ignore",timeout:1e4})}catch{}i.clear()};process.on("exit",w),process.on("SIGINT",()=>{w(),process.exit(130)}),process.on("SIGTERM",()=>{w(),process.exit(143)})}function Rw(w,Q=!1){let $={encoding:"utf-8",timeout:30000,stdio:Q?"pipe":["pipe","pipe","pipe"]};return Iw(`pantry ${w}`,$)}function kQ(w){let Q=w.match(/Name:\s+(\S+)/)?.[1]??"",$=/Status:\s+running/i.test(w),X=w.match(/Port:\s+(\d+)/),q=w.match(/PID:\s+(\d+)/),Y=w.match(/Data Dir:\s+(.+)/);return{name:Q,running:$,port:X?Number.parseInt(X[1],10):null,pid:q?Number.parseInt(q[1],10):null,dataDir:Y?Y[1].trim():null}}class g{config;_startedByUs=!1;constructor(w){this.config={name:w.name,port:w.port??0,readyTimeoutMs:w.readyTimeoutMs??15000,pollIntervalMs:w.pollIntervalMs??200,quiet:w.quiet??!0}}static isAvailable(){try{return Iw("pantry --version",{stdio:"ignore",timeout:5000}),!0}catch{return!1}}status(){try{let w=Rw(`inspect ${this.config.name}`,!0);return kQ(w)}catch{return{name:this.config.name,running:!1,port:null,pid:null,dataDir:null}}}isRunning(){return this.status().running}getPort(){return this.status().port}async start(){if(fQ(),this.isRunning())return this.status();return Rw(`start ${this.config.name}`,this.config.quiet),this._startedByUs=!0,i.add(this.config.name),await this.waitReady(),this.status()}async stop(){if(!this._startedByUs)return;try{Rw(`stop ${this.config.name}`,this.config.quiet)}catch{}i.delete(this.config.name),this._startedByUs=!1}async forceStop(){try{Rw(`stop ${this.config.name}`,this.config.quiet)}catch{}i.delete(this.config.name),this._startedByUs=!1}async ensureRunning(){if(this.isRunning())return this.status();return this.start()}async waitReady(){let w=Date.now()+this.config.readyTimeoutMs;while(Date.now()<w){if(this.isRunning())return;await new Promise((Q)=>setTimeout(Q,this.config.pollIntervalMs))}throw Error(`Service '${this.config.name}' did not become ready within ${this.config.readyTimeoutMs}ms`)}}var XQ=new g({name:"postgres"});async function Sw(w){let Q=await XQ.ensureRunning();return{port:w?.port??Q.port??5432,host:w?.host??"localhost",database:w?.database??"postgres",username:w?.username??process.env.USER??"postgres"}}async function Fw(){await XQ.stop()}function dQ(w){let Q=null;return{get connection(){if(!Q)throw Error("Postgres not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Sw(w)},afterAll:async()=>{await Fw(),Q=null}}}async function gQ(w,Q){let $=await Sw(Q);try{return await w($)}finally{if(Q?.stopAfter!==!1)await Fw()}}var HQ=new g({name:"redis"});async function Aw(w){let Q=await HQ.ensureRunning(),$=w?.port??Q.port??6379,X=w?.host??"localhost";return{port:$,host:X,url:`redis://${X}:${$}`}}async function bw(){await HQ.stop()}function mQ(w){let Q=null;return{get connection(){if(!Q)throw Error("Redis not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Aw(w)},afterAll:async()=>{await bw(),Q=null}}}async function lQ(w,Q){let $=await Aw(Q);try{return await w($)}finally{if(Q?.stopAfter!==!1)await bw()}}var ZQ=new g({name:"mysql"});async function xw(w){let Q=await ZQ.ensureRunning();return{port:w?.port??Q.port??3306,host:w?.host??"localhost",database:w?.database??"test",username:w?.username??"root"}}async function Vw(){await ZQ.stop()}function cQ(w){let Q=null;return{get connection(){if(!Q)throw Error("MySQL not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await xw(w)},afterAll:async()=>{await Vw(),Q=null}}}async function pQ(w,Q){let $=await xw(Q);try{return await w($)}finally{if(Q?.stopAfter!==!1)await Vw()}}import{existsSync as yw,mkdirSync as YQ,mkdtempSync as oQ,rmSync as WQ,writeFileSync as nQ}from"node:fs";import{tmpdir as sQ}from"node:os";import{join as Nw}from"node:path";var zw=new Set,qQ=!1;function tQ(){if(qQ)return;qQ=!0;let w=()=>{for(let Q of zw)try{if(yw(Q))WQ(Q,{recursive:!0,force:!0})}catch{}zw.clear()};process.on("exit",w),process.on("SIGINT",()=>{w(),process.exit(130)}),process.on("SIGTERM",()=>{w(),process.exit(143)})}function uw(w="pantry-test-"){tQ();let Q=oQ(Nw(sQ(),w));return zw.add(Q),Q}function Pw(w){zw.delete(w);try{if(yw(w))WQ(w,{recursive:!0,force:!0})}catch{}}async function rQ(w,Q){let $=uw(w);try{return await Q($)}finally{Pw($)}}function iQ(w,Q){let $=uw(w);try{return Q($)}finally{Pw($)}}function aQ(w,Q,$){let X=Nw(w,Q),q=X.substring(0,X.lastIndexOf("/"));if(q&&!yw(q))YQ(q,{recursive:!0});return nQ(X,$),X}function eQ(w,Q){let $=Nw(w,Q);return YQ($,{recursive:!0}),$}import*as F from"node:fs";import*as y from"node:path";import*as t from"node:os";import*as Dw from"node:https";import*as hw from"node:http";import{execFileSync as Jw}from"node:child_process";function RQ(){let w=t.platform(),Q=t.arch();return{os:w==="darwin"?"darwin":w==="win32"?"windows":"linux",arch:Q==="arm64"?"aarch64":"x86_64"}}var e={"ziglang.org":{getDownloadUrl(w,Q){let $={x86_64:"x86_64",aarch64:"aarch64"},X={darwin:"macos",linux:"linux",windows:"windows"},q=$[Q.arch],Y=X[Q.os],Z=Q.os==="windows"?"zip":"tar.xz";if(w.includes("-dev"))return`https://ziglang.org/builds/zig-${q}-${Y}-${w}.${Z}`;return`https://ziglang.org/download/${w}/zig-${q}-${Y}-${w}.${Z}`},getArchiveFormat(w){return w.os==="windows"?"zip":"tar.xz"},getBinaries(w){return w.os==="windows"?["zig.exe"]:["zig"]},getArchivePrefix(w,Q){let $={x86_64:"x86_64",aarch64:"aarch64"},X={darwin:"macos",linux:"linux",windows:"windows"};return`zig-${$[Q.arch]}-${X[Q.os]}-${w}`}},"bun.sh":{getDownloadUrl(w,Q){let $={"darwin-aarch64":"darwin-aarch64","darwin-x86_64":"darwin-x64","linux-aarch64":"linux-aarch64","linux-x86_64":"linux-x64","windows-x86_64":"windows-x64"},X=`${Q.os}-${Q.arch}`,q=$[X]||"linux-x64";return`https://github.com/oven-sh/bun/releases/download/bun-v${w}/bun-${q}.zip`},getArchiveFormat(){return"zip"},getBinaries(w){return w.os==="windows"?["bun.exe"]:["bun","bunx"]},getArchivePrefix(w,Q){let $={"darwin-aarch64":"bun-darwin-aarch64","darwin-x86_64":"bun-darwin-x64","linux-aarch64":"bun-linux-aarch64","linux-x86_64":"bun-linux-x64","windows-x86_64":"bun-windows-x64"},X=`${Q.os}-${Q.arch}`,q=$[X];if(!q)throw Error(`Unsupported platform for bun: ${X}`);return q}},"nodejs.org":{getDownloadUrl(w,Q){let $={darwin:"darwin",linux:"linux",windows:"win"},X={x86_64:"x64",aarch64:"arm64"},q=Q.os==="windows"?"zip":"tar.xz";return`https://nodejs.org/dist/v${w}/node-v${w}-${$[Q.os]}-${X[Q.arch]}.${q}`},getArchiveFormat(w){return w.os==="windows"?"zip":"tar.xz"},getBinaries(w){return w.os==="windows"?["node.exe","npm.cmd","npx.cmd"]:["node","npm","npx"]},getArchivePrefix(w,Q){let $={darwin:"darwin",linux:"linux",windows:"win"},X={x86_64:"x64",aarch64:"arm64"};return`node-v${w}-${$[Q.os]}-${X[Q.arch]}`}}};async function w6(w,Q,$={}){let X=RQ(),q=e[w];if(!q)throw Error(`Unknown package: ${w}. Supported: ${Object.keys(e).join(", ")}`);if(/^[\^~>=<]/.test(Q))Q=await $6(w,Q);else if(Q==="latest"||Q==="*"||!Q)Q=await Kw(w);else if(w==="ziglang.org"&&Q.endsWith("-dev")){let K=await Q6(Q);if(K)Q=K}let Y=$.installDir||y.join(process.cwd(),"pantry"),Z=y.join(Y,".bin"),H=y.join(Y,w.replace(/\./g,"-"),Q),W=q.getBinaries(X);if(W.length===0)throw Error(`No binaries defined for ${w} on ${X.os}-${X.arch}`);let J=y.join(H,W[0]),z=y.join(H,"bin",W[0]);if(F.existsSync(J)||F.existsSync(z)){if(!$.quiet)console.log(` ✓ ${w}@${Q} (cached)`);return{name:w,version:Q,installPath:H,binaries:W}}let T=q.getDownloadUrl(Q,X),L=q.getArchiveFormat(X);if(!$.quiet)console.log(` → ${w}@${Q} from ${new URL(T).hostname}`);let B=F.mkdtempSync(y.join(t.tmpdir(),"pantry-")),R=y.join(B,`archive.${L}`);try{await zQ(T,R);let K=y.join(B,"extracted");F.mkdirSync(K,{recursive:!0}),await X6(R,K,L);let G=K,_=q.getArchivePrefix?.(Q,X);if(_){let M=y.join(K,_);if(F.existsSync(M))G=M;else{let E=F.readdirSync(K).find((U)=>F.statSync(y.join(K,U)).isDirectory());if(E)G=y.join(K,E)}}if(F.mkdirSync(H,{recursive:!0}),H6(G,H),X.os!=="windows")for(let M of W){let O=y.join(H,M);if(F.existsSync(O))F.chmodSync(O,493);let E=y.join(H,"bin",M);if(F.existsSync(E))F.chmodSync(E,493)}if($.createBinLinks!==!1){F.mkdirSync(Z,{recursive:!0});let M=null;for(let O of W){let E=y.join(H,O);if(!F.existsSync(E))E=y.join(H,"bin",O);if(!F.existsSync(E)){if(M){let j=y.join(Z,O);try{F.unlinkSync(j)}catch{}if(X.os==="windows")F.copyFileSync(M,j);else F.symlinkSync(M,j)}continue}if(!M)M=E;let U=y.join(Z,O);try{F.unlinkSync(U)}catch{}if(X.os==="windows")F.copyFileSync(E,U);else F.symlinkSync(E,U)}}if(!$.quiet)console.log(` ✓ ${w}@${Q}`);return{name:w,version:Q,installPath:H,binaries:W}}finally{try{F.rmSync(B,{recursive:!0,force:!0})}catch{}}}async function y$(w,Q={}){return Promise.all(w.map(($)=>w6($.domain,$.version,Q)))}async function Kw(w){if(w==="bun.sh")return((await a("https://api.github.com/repos/oven-sh/bun/releases/latest").catch(()=>null))?.tag_name||"").replace(/^bun-v/,"");if(w==="ziglang.org")return(await a("https://ziglang.org/download/index.json")).master?.version||"";if(w==="nodejs.org"){let $=await a("https://nodejs.org/dist/index.json");return($.find((q)=>q.lts)?.version||$[0]?.version||"").replace(/^v/,"")}throw Error(`Cannot resolve latest version for ${w}`)}async function Q6(w){try{let $=(await a("https://ziglang.org/download/index.json")).master?.version;if($&&$.startsWith(w))return $}catch{}return null}async function $6(w,Q){let $;try{let Z=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),{packages:H}=await import("./chunk-b0zr0ad6.js").catch(()=>import("./src/index.js"));$=H[Z]?.versions||[]}catch{$=[]}if($.length===0)return Kw(w);let X=Q.match(/^([~^>=<]+)(\d+(?:\.\d+){0,10})/);if(!X)return Kw(w);let q=X[1],Y=X[2].split(".").map(Number);for(let Z of $){if(Z.includes("-")&&!X[2].includes("-"))continue;let H=Z.split(".").map(Number);if(q==="^"){if(Y[0]===0){if(H[0]===Y[0]&&H[1]===Y[1]&&(H[2]||0)>=(Y[2]||0))return Z}else if(H[0]===Y[0]&&(H[1]>Y[1]||H[1]===Y[1]&&(H[2]||0)>=(Y[2]||0)))return Z}else if(q==="~"){if(H[0]===Y[0]&&H[1]===Y[1]&&(H[2]||0)>=(Y[2]||0))return Z}else if(q===">="){if(H[0]>Y[0]||H[0]===Y[0]&&H[1]>Y[1]||H[0]===Y[0]&&H[1]===Y[1]&&(H[2]||0)>=(Y[2]||0))return Z}}return console.warn(`No version matching ${Q} found for ${w}, falling back to latest`),Kw(w)}function zQ(w,Q,$=10){return new Promise((X,q)=>{let Y=F.createWriteStream(Q);(w.startsWith("https")?Dw.get:hw.get)(w,(H)=>{if(H.statusCode&&H.statusCode>=300&&H.statusCode<400&&H.headers.location){Y.close();try{F.unlinkSync(Q)}catch{}if($<=0)return q(Error(`Too many redirects for ${w}`));return zQ(H.headers.location,Q,$-1).then(X,q)}if(!H.statusCode||H.statusCode<200||H.statusCode>=300){Y.close();try{F.unlinkSync(Q)}catch{}return q(Error(`HTTP ${H.statusCode||"unknown"} downloading ${w}`))}H.pipe(Y),H.on("error",(W)=>{Y.close();try{F.unlinkSync(Q)}catch{}q(W)}),Y.on("finish",()=>{Y.close(),X()}),Y.on("error",(W)=>{try{F.unlinkSync(Q)}catch{}q(W)})}).on("error",(H)=>{Y.close();try{F.unlinkSync(Q)}catch{}q(H)})})}async function X6(w,Q,$){if($==="zip")if(process.platform==="win32")Jw("powershell",["-NoProfile","-Command","Expand-Archive","-Path",w,"-DestinationPath",Q,"-Force"],{stdio:"pipe"});else Jw("unzip",["-o","-q",w,"-d",Q],{stdio:"pipe"});else if($==="tar.xz")Jw("tar",["xJf",w,"-C",Q],{stdio:"pipe"});else if($==="tar.gz")Jw("tar",["xzf",w,"-C",Q],{stdio:"pipe"});else throw Error(`Unsupported archive format: ${$}`)}function H6(w,Q){F.cpSync(w,Q,{recursive:!0})}function a(w,Q=5){return new Promise(($,X)=>{let Y=(w.startsWith("https")?Dw.get:hw.get)(w,{headers:{"User-Agent":"pantry-installer"},timeout:30000},(Z)=>{if(Z.statusCode&&Z.statusCode>=300&&Z.statusCode<400&&Z.headers.location){if(Q<=0)return X(Error(`Too many redirects for ${w}`));return a(Z.headers.location,Q-1).then($,X)}if(!Z.statusCode||Z.statusCode<200||Z.statusCode>=300)return X(Error(`HTTP ${Z.statusCode||"unknown"} fetching ${w}`));let H="";Z.on("data",(W)=>H+=W),Z.on("end",()=>{try{$(JSON.parse(H))}catch(W){X(W)}})});Y.on("error",X),Y.on("timeout",()=>{Y.destroy(),X(Error(`Request timed out: ${w}`))})})}function N$(w){return w in e}function u$(){return Object.keys(e)}function P$(w){let Q=e[w];if(!Q)return;let $=RQ();return Q.getBinaries($)[0]}export{fw as a,UQ as b,W6 as c,R6 as d,z6 as e,kw as f,J6 as g,K6 as h,U6 as i,G6 as j,ww as k,_6 as l,B6 as m,dw as n,O6 as o,T6 as p,E6 as q,L6 as r,j6 as s,F6 as t,A6 as u,b6 as v,x6 as w,V6 as x,y6 as y,N6 as z,u6 as A,P6 as B,D6 as C,h6 as D,v6 as E,Xw as F,_Q as G,g6 as H,nw as I,m as J,Hw as K,_w as L,sw as M,m6 as N,aw as O,SQ as P,FQ as Q,Tw as R,Ew as S,Lw as T,jw as U,vQ as V,$$ as W,X$ as X,H$ as Y,Z$ as Z,Y$ as _,W$ as $,R$ as aa,z$ as ba,g as ca,Sw as da,Fw as ea,dQ as fa,gQ as ga,Aw as ha,bw as ia,mQ as ja,lQ as ka,xw as la,Vw as ma,cQ as na,pQ as oa,uw as pa,Pw as qa,rQ as ra,iQ as sa,aQ as ta,eQ as ua,w6 as va,y$ as wa,Kw as xa,N$ as ya,u$ as za,P$ as Aa};
@@ -1 +1 @@
1
- import{La as a,Ma as b,Na as c,Oa as d,Pa as e,Qa as f,Ra as g,Sa as h,Ta as i,Ua as j,Va as k,Wa as l,Xa as m,Ya as n}from"./chunk-tjxmz5d2.js";import"./chunk-c5xmxyxn.js";import"./chunk-q7s2k65w.js";import"./chunk-p9e5z92g.js";import"./chunk-yjz3e391.js";export{i as startPeriodicCleanup,h as setupCleanupHandlers,l as scanPantryPackages,d as saveToCacheAndOutput,a as savePackageAsTypeScript,m as readPantryPackageInfo,c as getValidCachedPackage,f as fetchPkgxProjects,n as fetchPantryPackageWithMetadata,g as fetchPantryPackage,k as fetchAndSavePackage,j as fetchAndSaveAllPackages,e as cleanupBrowserResources,b as cleanStaleOutputFiles};
1
+ import{La as a,Ma as b,Na as c,Oa as d,Pa as e,Qa as f,Ra as g,Sa as h,Ta as i,Ua as j,Va as k,Wa as l,Xa as m,Ya as n}from"./chunk-cdzdw53j.js";import"./chunk-jym7xrra.js";import"./chunk-q7s2k65w.js";import"./chunk-p9e5z92g.js";import"./chunk-yjz3e391.js";export{i as startPeriodicCleanup,h as setupCleanupHandlers,l as scanPantryPackages,d as saveToCacheAndOutput,a as savePackageAsTypeScript,m as readPantryPackageInfo,c as getValidCachedPackage,f as fetchPkgxProjects,n as fetchPantryPackageWithMetadata,g as fetchPantryPackage,k as fetchAndSavePackage,j as fetchAndSaveAllPackages,e as cleanupBrowserResources,b as cleanStaleOutputFiles};
@@ -1,3 +1,3 @@
1
- import{execSync as $}from"node:child_process";import z from"node:fs";var O={Arc:"arc","Brave Browser":"brave-browser",Firefox:"firefox","Google Chrome":"google-chrome","Microsoft Edge":"microsoft-edge",Opera:"opera",Vivaldi:"vivaldi","Zen Browser":"zen-browser",Orion:"orion",Chromium:"chromium","Tor Browser":"tor-browser","Visual Studio Code":"visual-studio-code",Cursor:"cursor",Zed:"zed","Sublime Text":"sublime-text","Sublime Merge":"sublime-merge",Nova:"nova",BBEdit:"bbedit",CotEditor:"coteditor","IntelliJ IDEA":"intellij-idea","IntelliJ IDEA CE":"intellij-idea-ce",PhpStorm:"phpstorm",WebStorm:"webstorm",PyCharm:"pycharm","PyCharm CE":"pycharm-ce",RubyMine:"rubymine",CLion:"clion",GoLand:"goland",DataGrip:"datagrip",Rider:"rider","Android Studio":"android-studio",Fleet:"jetbrains-fleet",iTerm:"iterm2",Ghostty:"ghostty",Warp:"warp",Alacritty:"alacritty",Kitty:"kitty",Hyper:"hyper","GitHub Desktop":"github",GitKraken:"gitkraken",Tower:"tower",Fork:"fork",Tinkerwell:"tinkerwell",TablePlus:"tableplus","Sequel Pro":"sequel-pro","Sequel Ace":"sequel-ace",Postman:"postman",Insomnia:"insomnia",Proxyman:"proxyman",Docker:"docker",OrbStack:"orbstack",Dynobase:"dynobase",HTTPie:"httpie",Charles:"charles",Paw:"paw",Dash:"dash",SourceTree:"sourcetree",WhatsApp:"whatsapp",Slack:"slack",Discord:"discord",Telegram:"telegram","Microsoft Teams":"microsoft-teams",Zoom:"zoom",Signal:"signal",Skype:"skype",Lark:"lark",Claude:"claude",ChatGPT:"chatgpt",Obsidian:"obsidian",Notion:"notion",Bear:"bear",Craft:"craft",Logseq:"logseq",Typora:"typora",Joplin:"joplin",Things3:"things",Things:"things",Todoist:"todoist",TickTick:"ticktick",Fantastical:"fantastical",Spark:"readdle-spark","1Password":"1password","1Password 7":"1password",Raycast:"raycast",Alfred:"alfred",BetterTouchTool:"bettertouchtool",Bartender:"bartender",Setapp:"setapp","Grammarly Desktop":"grammarly-desktop",Spotify:"spotify",IINA:"iina",VLC:"vlc",HandBrake:"handbrake",Kap:"kap",OBS:"obs","DaVinci Resolve":"davinci-resolve",Plex:"plex",Audacity:"audacity","Elmedia Player":"elmedia-player",Figma:"figma",Sketch:"sketch","Affinity Designer":"affinity-designer","Affinity Designer 2":"affinity-designer","Affinity Photo":"affinity-photo","Affinity Photo 2":"affinity-photo","Affinity Publisher":"affinity-publisher","Affinity Publisher 2":"affinity-publisher",ImageOptim:"imageoptim","Pixelmator Pro":"pixelmator-pro",Canva:"canva",AppCleaner:"appcleaner",Pearcleaner:"pearcleaner",CleanMyMac:"cleanmymac","CleanMyMac X":"cleanmymac",Caffeine:"caffeine",KeepingYouAwake:"keepingyouawake",Muzzle:"muzzle",Rectangle:"rectangle",Magnet:"magnet",MonitorControl:"monitorcontrol","iStat Menus":"istat-menus","CleanShot X":"cleanshot",Shottr:"shottr","Karabiner-Elements":"karabiner-elements","Logi Options+":"logi-options-plus",logioptionsplus:"logi-options-plus","Logi Options Plus":"logi-options-plus",Transmit:"transmit",Cyberduck:"cyberduck","The Unarchiver":"the-unarchiver",Keka:"keka",ForkLift:"forklift","Mountain Duck":"mountain-duck","Parallels Desktop":"parallels","VMware Fusion":"vmware-fusion",UTM:"utm",Steam:"steam","Epic Games Launcher":"epic-games",Tailscale:"tailscale",WireGuard:"wireguard-go",NordVPN:"nordvpn","Mullvad VPN":"mullvad-vpn","MongoDB Compass":"mongodb-compass","Redis Insight":"redisinsight","Robo 3T":"robo-3t",Numi:"numi",Maccy:"maccy",Camo:"camo",Linear:"linear-linear",Loom:"loom",Dropbox:"dropbox","Google Drive":"google-drive",OneDrive:"onedrive",MediaInfo:"mediainfo"},C=new Set(["Safari","Numbers","Pages","Keynote","GarageBand","iMovie","Color Picker","Simulator","Simulator (Watch)","Preview","TextEdit","Automator","Font Book","Migration Assistant","Photo Booth","System Preferences","System Settings","Disk Utility","Terminal","Activity Monitor","Console","Grapher","Script Editor","Time Machine","Photos","Mail","Calendar","Contacts","Reminders","Notes","Maps","Messages","FaceTime","Books","News","Stocks","Weather","Home","Podcasts","Music","TV","Voice Memos","Freeform","Shortcuts","Chess","Dictionary","Stickies","Image Capture","Xcode"]),D=new Set(["Xcode","Numbers","Pages","Keynote","GarageBand","iMovie","Things3","Grammarly for Safari","AdBlock","HP Smart","Audible","CleanMyMac_5_MAS","Mini Motorways","Snake.io+","Numbers Creator Studio"]);function E(F,G){if(!F||!G||F===G)return!1;if(G==="?")return!!F;let Q=(L)=>L.replace(/[,+].*/g,"").replace(/-.*$/,"").split(".").map((R)=>Number.parseInt(R,10)||0),J=Q(F),X=Q(G);for(let L=0;L<Math.max(J.length,X.length);L++){let R=J[L]||0,j=X[L]||0;if(R>j)return!0;if(R<j)return!1}return!1}function I(F){if(/[+()_]/.test(F))return null;if(F.length<2)return null;return F.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").trim()||null}function w(F){if(O[F])return O[F];return I(F)}function V(F="/Applications"){let G=[];if(!z.existsSync(F))return G;let Q=z.readdirSync(F).filter((J)=>J.endsWith(".app"));for(let J of Q){let X=J.replace(/\.app$/,""),L=`${F}/${J}`,R="?",j;try{let H=`${L}/Contents/Info.plist`;if(z.existsSync(H)){let W=$(`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${H}" 2>/dev/null`,{timeout:5000,encoding:"utf-8"}).trim();if(W)R=W;try{j=$(`/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${H}" 2>/dev/null`,{timeout:5000,encoding:"utf-8"}).trim()||void 0}catch{}}}catch{}G.push({name:X,version:R,path:L,bundleId:j})}return G}function _(F){let G=new Map;if(F.length===0)return G;let Q=20;for(let J=0;J<F.length;J+=Q){let X=F.slice(J,J+Q);try{let L=$(`brew info --cask --json=v2 ${X.join(" ")} 2>/dev/null`,{timeout:60000,encoding:"utf-8",maxBuffer:10485760});if(!L)continue;let R=JSON.parse(L);for(let j of R.casks||[]){let H=[];for(let W of j.artifacts||[])if(W.app){for(let Z of W.app)if(typeof Z==="string")H.push(Z.replace(/\.app$/,""))}G.set(j.token,{token:j.token,version:(j.version||"").split(",")[0],autoUpdates:j.auto_updates||!1,appNames:H})}}catch{for(let L of X)try{let R=$(`brew info --cask --json=v2 ${L} 2>/dev/null`,{timeout:15000,encoding:"utf-8"});if(!R)continue;let H=JSON.parse(R).casks?.[0];if(H){let W=[];for(let Z of H.artifacts||[])if(Z.app){for(let q of Z.app)if(typeof q==="string")W.push(q.replace(/\.app$/,""))}G.set(H.token,{token:H.token,version:(H.version||"").split(",")[0],autoUpdates:H.auto_updates||!1,appNames:W})}}catch{}}}return G}function M(F){let G=F||V(),Q=[],J=new Map,X=new Map;for(let j of G){if(C.has(j.name))continue;let H=w(j.name);if(H){X.set(j.name,H);let W=J.get(H)||[];W.push(j),J.set(H,W)}}let L=Array.from(J.keys()),R=_(L);for(let j of G){let H=C.has(j.name),W=D.has(j.name),Z=X.get(j.name)||null,q=Z?R.get(Z):null,B="unknown",K=null,Y=!1,U=!1;if(H)B="system";else if(W)B="mas";else if(q)if(K=q.version,U=q.autoUpdates,U)B="self-updating",Y=E(K,j.version);else B="brew-cask",Y=E(K,j.version);Q.push({name:j.name,currentVersion:j.version,latestVersion:K,updateAvailable:Y,source:B,caskToken:Z,autoUpdates:U})}return Q.sort((j,H)=>{if(j.updateAvailable&&!H.updateAvailable)return-1;if(!j.updateAvailable&&H.updateAvailable)return 1;return j.name.localeCompare(H.name)}),Q}async function h(F){try{try{$(`brew upgrade --cask ${F} 2>&1`,{timeout:120000,encoding:"utf-8"});let G=$(`brew info --cask --json=v2 ${F} 2>/dev/null`,{timeout:15000,encoding:"utf-8"});return{success:!0,version:JSON.parse(G).casks?.[0]?.version?.split(",")?.[0]||"latest"}}catch(G){let Q=G.stderr?.toString()||G.message||"";if(Q.includes("not installed")||Q.includes("No available")){$(`brew install --cask ${F} 2>&1`,{timeout:120000,encoding:"utf-8"});let J=$(`brew info --cask --json=v2 ${F} 2>/dev/null`,{timeout:15000,encoding:"utf-8"});return{success:!0,version:JSON.parse(J).casks?.[0]?.version?.split(",")?.[0]||"latest"}}throw G}}catch(G){return{success:!1,error:(G.stderr?.toString()||G.stdout?.toString()||G.message||"Update failed").trim().split(`
1
+ import{execSync as $}from"node:child_process";import z from"node:fs";var O={Arc:"arc","Brave Browser":"brave-browser",Firefox:"firefox","Google Chrome":"google-chrome","Microsoft Edge":"microsoft-edge",Opera:"opera",Vivaldi:"vivaldi","Zen Browser":"zen-browser",Orion:"orion",Chromium:"chromium","Tor Browser":"tor-browser","Visual Studio Code":"visual-studio-code",Cursor:"cursor",Zed:"zed","Sublime Text":"sublime-text","Sublime Merge":"sublime-merge",Nova:"nova",BBEdit:"bbedit",CotEditor:"coteditor","IntelliJ IDEA":"intellij-idea","IntelliJ IDEA CE":"intellij-idea-ce",PhpStorm:"phpstorm",WebStorm:"webstorm",PyCharm:"pycharm","PyCharm CE":"pycharm-ce",RubyMine:"rubymine",CLion:"clion",GoLand:"goland",DataGrip:"datagrip",Rider:"rider","Android Studio":"android-studio",Fleet:"jetbrains-fleet",iTerm:"iterm2",Ghostty:"ghostty",Warp:"warp",Alacritty:"alacritty",Kitty:"kitty",Hyper:"hyper","GitHub Desktop":"github",GitKraken:"gitkraken",Tower:"tower",Fork:"fork",Tinkerwell:"tinkerwell",TablePlus:"tableplus","Sequel Pro":"sequel-pro","Sequel Ace":"sequel-ace",Postman:"postman",Insomnia:"insomnia",Proxyman:"proxyman",Docker:"docker",OrbStack:"orbstack",Dynobase:"dynobase",HTTPie:"httpie",Charles:"charles",Paw:"paw",Dash:"dash",SourceTree:"sourcetree",WhatsApp:"whatsapp",Slack:"slack",Discord:"discord",Telegram:"telegram","Microsoft Teams":"microsoft-teams",Zoom:"zoom",Signal:"signal",Skype:"skype",Lark:"lark",Claude:"claude",ChatGPT:"chatgpt",Obsidian:"obsidian",Notion:"notion",Bear:"bear",Craft:"craft",Logseq:"logseq",Typora:"typora",Joplin:"joplin",Things3:"things",Things:"things",Todoist:"todoist",TickTick:"ticktick",Fantastical:"fantastical",Spark:"readdle-spark","1Password":"1password","1Password 7":"1password",Raycast:"raycast",Alfred:"alfred",BetterTouchTool:"bettertouchtool",Bartender:"bartender",Setapp:"setapp","Grammarly Desktop":"grammarly-desktop",Spotify:"spotify",IINA:"iina",VLC:"vlc",HandBrake:"handbrake",Kap:"kap",OBS:"obs","DaVinci Resolve":"davinci-resolve",Plex:"plex",Audacity:"audacity","Elmedia Player":"elmedia-player",Figma:"figma",Sketch:"sketch","Affinity Designer":"affinity-designer","Affinity Designer 2":"affinity-designer","Affinity Photo":"affinity-photo","Affinity Photo 2":"affinity-photo","Affinity Publisher":"affinity-publisher","Affinity Publisher 2":"affinity-publisher",ImageOptim:"imageoptim","Pixelmator Pro":"pixelmator-pro",Canva:"canva",AppCleaner:"appcleaner",Pearcleaner:"pearcleaner",CleanMyMac:"cleanmymac","CleanMyMac X":"cleanmymac",Caffeine:"caffeine",KeepingYouAwake:"keepingyouawake",Muzzle:"muzzle",Rectangle:"rectangle",Magnet:"magnet",MonitorControl:"monitorcontrol","iStat Menus":"istat-menus","CleanShot X":"cleanshot",Shottr:"shottr","Karabiner-Elements":"karabiner-elements","Logi Options+":"logi-options-plus",logioptionsplus:"logi-options-plus","Logi Options Plus":"logi-options-plus",Transmit:"transmit",Cyberduck:"cyberduck","The Unarchiver":"the-unarchiver",Keka:"keka",ForkLift:"forklift","Mountain Duck":"mountain-duck","Parallels Desktop":"parallels","VMware Fusion":"vmware-fusion",UTM:"utm",Steam:"steam","Epic Games Launcher":"epic-games",Tailscale:"tailscale",WireGuard:"wireguard-go",NordVPN:"nordvpn","Mullvad VPN":"mullvad-vpn","MongoDB Compass":"mongodb-compass","Redis Insight":"redisinsight","Robo 3T":"robo-3t",Numi:"numi",Maccy:"maccy",Camo:"camo",Linear:"linear-linear",Loom:"loom",Dropbox:"dropbox","Google Drive":"google-drive",OneDrive:"onedrive",MediaInfo:"mediainfo"},E=new Set(["Safari","Numbers","Pages","Keynote","GarageBand","iMovie","Color Picker","Simulator","Simulator (Watch)","Preview","TextEdit","Automator","Font Book","Migration Assistant","Photo Booth","System Preferences","System Settings","Disk Utility","Terminal","Activity Monitor","Console","Grapher","Script Editor","Time Machine","Photos","Mail","Calendar","Contacts","Reminders","Notes","Maps","Messages","FaceTime","Books","News","Stocks","Weather","Home","Podcasts","Music","TV","Voice Memos","Freeform","Shortcuts","Chess","Dictionary","Stickies","Image Capture","Xcode"]),I=new Set(["Xcode","Numbers","Pages","Keynote","GarageBand","iMovie","Things3","Grammarly for Safari","AdBlock","HP Smart","Audible","CleanMyMac_5_MAS","Mini Motorways","Snake.io+","Numbers Creator Studio"]);function D(G,F){if(!G||!F||G===F)return!1;if(F==="?")return!!G;let L=(Q)=>Q.replace(/[,+].*/g,"").replace(/-.*$/,"").split(".").map((R)=>Number.parseInt(R,10)||0),J=L(G),W=L(F);for(let Q=0;Q<Math.max(J.length,W.length);Q++){let R=J[Q]||0,j=W[Q]||0;if(R>j)return!0;if(R<j)return!1}return!1}function w(G){if(/[+()_]/.test(G))return null;if(G.length<2)return null;return G.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").trim()||null}function C(G){if(O[G])return O[G];return w(G)}function V(G="/Applications"){if(process.platform!=="darwin")return[];let F=[];if(!z.existsSync(G))return F;let L=z.readdirSync(G).filter((J)=>J.endsWith(".app"));for(let J of L){let W=J.replace(/\.app$/,""),Q=`${G}/${J}`,R="?",j;try{let H=`${Q}/Contents/Info.plist`;if(z.existsSync(H)){let X=$(`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${H}" 2>/dev/null`,{timeout:5000,encoding:"utf-8"}).trim();if(X)R=X;try{j=$(`/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${H}" 2>/dev/null`,{timeout:5000,encoding:"utf-8"}).trim()||void 0}catch{}}}catch{}F.push({name:W,version:R,path:Q,bundleId:j})}return F}function _(G){let F=new Map;if(G.length===0)return F;let L=20;for(let J=0;J<G.length;J+=L){let W=G.slice(J,J+L);try{let Q=$(["brew","info","--cask","--json=v2",...W].map((j)=>`'${j.replace(/'/g,"'\\''")}'`).join(" "),{timeout:60000,encoding:"utf-8",maxBuffer:10485760,shell:"/bin/sh"});if(!Q)continue;let R=JSON.parse(Q);for(let j of R.casks||[]){let H=[];for(let X of j.artifacts||[])if(X.app){for(let Z of X.app)if(typeof Z==="string")H.push(Z.replace(/\.app$/,""))}F.set(j.token,{token:j.token,version:(j.version||"").split(",")[0],autoUpdates:j.auto_updates||!1,appNames:H})}}catch{for(let Q of W)try{let R=$(`brew info --cask --json=v2 ${Q} 2>/dev/null`,{timeout:15000,encoding:"utf-8"});if(!R)continue;let H=JSON.parse(R).casks?.[0];if(H){let X=[];for(let Z of H.artifacts||[])if(Z.app){for(let q of Z.app)if(typeof q==="string")X.push(q.replace(/\.app$/,""))}F.set(H.token,{token:H.token,version:(H.version||"").split(",")[0],autoUpdates:H.auto_updates||!1,appNames:X})}}catch{}}}return F}function M(G){let F=G||V(),L=[],J=new Map,W=new Map;for(let j of F){if(E.has(j.name))continue;let H=C(j.name);if(H){W.set(j.name,H);let X=J.get(H)||[];X.push(j),J.set(H,X)}}let Q=Array.from(J.keys()),R=_(Q);for(let j of F){let H=E.has(j.name),X=I.has(j.name),Z=W.get(j.name)||null,q=Z?R.get(Z):null,B="unknown",K=null,Y=!1,U=!1;if(H)B="system";else if(X)B="mas";else if(q)if(K=q.version,U=q.autoUpdates,U)B="self-updating",Y=D(K,j.version);else B="brew-cask",Y=D(K,j.version);L.push({name:j.name,currentVersion:j.version,latestVersion:K,updateAvailable:Y,source:B,caskToken:Z,autoUpdates:U})}return L.sort((j,H)=>{if(j.updateAvailable&&!H.updateAvailable)return-1;if(!j.updateAvailable&&H.updateAvailable)return 1;return j.name.localeCompare(H.name)}),L}async function h(G){try{try{$(`brew upgrade --cask '${G.replace(/'/g,"'\\''")}' 2>&1`,{timeout:120000,encoding:"utf-8"});let F=G.replace(/'/g,"'\\''"),L=$(`brew info --cask --json=v2 '${F}' 2>/dev/null`,{timeout:15000,encoding:"utf-8"});return{success:!0,version:JSON.parse(L).casks?.[0]?.version?.split(",")?.[0]||"latest"}}catch(F){let L=F.stderr?.toString()||F.message||"",J=G.replace(/'/g,"'\\''");if(L.includes("not installed")||L.includes("No available")){$(`brew install --cask '${J}' 2>&1`,{timeout:120000,encoding:"utf-8"});let W=$(`brew info --cask --json=v2 '${J}' 2>/dev/null`,{timeout:15000,encoding:"utf-8"});return{success:!0,version:JSON.parse(W).casks?.[0]?.version?.split(",")?.[0]||"latest"}}throw F}}catch(F){return{success:!1,error:(F.stderr?.toString()||F.stdout?.toString()||F.message||"Update failed").trim().split(`
2
2
  `).pop()||"Update failed"}}}
3
- export{O as Ba,C as Ca,D as Da,E as Ea,I as Fa,w as Ga,V as Ha,_ as Ia,M as Ja,h as Ka};
3
+ export{O as Ba,E as Ca,I as Da,D as Ea,w as Fa,C as Ga,V as Ha,_ as Ia,M as Ja,h as Ka};
@@ -0,0 +1,11 @@
1
+ import{Hb as y,Ib as H}from"./chunk-q7s2k65w.js";import{Pb as E}from"./chunk-yjz3e391.js";H();import x from"node:fs";import S from"node:path";import A from"node:process";var O=S.join(A.cwd(),"github-rate-limit.json"),w=S.join(A.cwd(),"github-cache.json"),R=10,W=3600000;function F(X){try{let J=X.get("X-RateLimit-Remaining"),$=X.get("X-RateLimit-Reset"),Z=X.get("X-RateLimit-Limit");if(J&&$&&Z){let V=new Date(Number($)*1000),Y={remaining:Number(J),limit:Number(Z),resetTime:V.toISOString(),resetTimestamp:Number($)*1000,lastUpdated:new Date().toISOString()};x.writeFileSync(O,JSON.stringify(Y,null,2)),console.warn(`GitHub API rate limit info saved to ${O}`),console.warn(`Rate limit: ${J}/${Z} remaining, resets at ${V.toLocaleString()}`)}}catch(J){console.error("Failed to save GitHub rate limit info:",J)}}function M(){try{if(!x.existsSync(O))return!0;let X=JSON.parse(x.readFileSync(O,"utf8"));if(!X||typeof X.resetTimestamp!=="number"||typeof X.remaining!=="number")return!0;let J=Date.now();if(J>=X.resetTimestamp)return!0;if(X.remaining<=R){let $=new Date(X.resetTimestamp);console.warn(`GitHub API rate limit almost exhausted (${X.remaining}/${X.limit} remaining). Preserving remaining calls until reset at ${$.toLocaleString()}`);let Z=X.resetTimestamp-J;if(Z<300000)console.error(`Waiting ${Math.round(Z/1000)} seconds for rate limit to reset...`);return!1}return!0}catch(X){return console.error("Error checking GitHub rate limit:",X),!0}}function T(){try{if(!x.existsSync(w))return null;let X=JSON.parse(x.readFileSync(w,"utf8")),J=Date.now();if(X.timestamp&&J-X.timestamp<W){let $=new Date(X.timestamp+W);if(console.error(`Using GitHub API cache from ${new Date(X.timestamp).toLocaleString()}, expires at ${$.toLocaleString()}`),Array.isArray(X.packages))return console.error(`Using ${X.packages.length} packages from GitHub API cache`),X.packages;else if(Array.isArray(X.data))return console.error(`Using ${X.data.length} packages from GitHub API cache (old format)`),X.data;else return console.error("GitHub API cache has invalid format, fetching fresh data"),null}return console.error(`GitHub API cache expired (older than ${W/1000/60} minutes), fetching fresh data`),null}catch(X){return console.error("Error reading GitHub cache:",X),null}}function U(X){try{let J={timestamp:Date.now(),packages:X};x.writeFileSync(w,JSON.stringify(J,null,2)),console.error(`GitHub API package list cached to ${w} (${X.length} packages)`)}catch(J){console.error("Error saving GitHub cache:",J)}}async function f(X=0,J){if(J){if(J.startsWith("/")||J.includes("/bin/"))return console.error(`Error: '${J}' appears to be a path, not a valid package name.`),[];return console.log(`Single package mode: only fetching '${J}'`),[J]}console.log("Fetching package list from GitHub API...");let $=T();if($)return console.log("Using cached package list, no GitHub API calls needed"),X>0?$.slice(0,X):$;try{if(!M()){console.warn("GitHub API rate limit preventing request - using cached data or hardcoded list");let z=["node","bun.sh","python.org","go.dev","rust-lang.org","deno.land","ruby-lang.org","php.net","dart.dev","postgresql.org","mozilla.org","mysql.com","nginx.org","redis.io","mongodb.com"];return U(z),X>0?z.slice(0,X):z}console.error("No valid cache found, making GitHub API requests");let Z=await fetch("https://api.github.com/repos/pkgxdev/pantry/contents/projects",{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"ts-pantry"}});if(F(Z.headers),!Z.ok)throw Error(`GitHub API responded with ${Z.status}: ${Z.statusText}`);let Y=(await Z.json()).filter((z)=>z.type==="dir").map((z)=>z.name);console.error(`Found ${Y.length} base projects on GitHub`);let q=[...Y],K=["agwa.name","acorn.io","apache.org","aquasecurity.github.io","aws.amazon.com"],C=["alsa-project.org/alsa-lib","apple.com/remote_cmds","android.com/cmdline-tools","anchore.com/syft","argoproj.github.io/cd","argoproj.github.io/workflows","amrdeveloper.github.io/GQL","authzed.com/spicedb","arduino.github.io/arduino-cli","aomedia.googlesource.com/aom","akuity.io/kargo","asciinema.org/agg","ansible.com/ansible-lint","astral.sh/ruff","astral.sh/uv","apollographql.com/rover","brxken128.github.io/dexios","cedarpolicy.com/cli","blake2.net/libb2"];for(let z of K){if(!M()){console.error(`Skipping nested path check for ${z} due to rate limit concerns`);continue}try{console.error(`Checking for nested projects in ${z}...`);let Q=await fetch(`https://api.github.com/repos/pkgxdev/pantry/contents/projects/${z}`,{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"ts-pantry"}});if(F(Q.headers),!Q.ok){console.error(`Failed to fetch nested projects for ${z}: ${Q.status}`);continue}let B=(await Q.json()).filter((v)=>v.type==="dir").map((v)=>`${z}/${v.name}`);console.error(`Found ${B.length} nested projects for ${z}: ${B.join(", ")}`),q.push(...B)}catch(Q){console.error(`Error fetching nested projects for ${z}:`,Q)}}for(let z of C)if(!q.includes(z))console.error(`Adding known nested project: ${z}`),q.push(z);U(q),console.error(`Cached ${q.length} packages for future use (valid for ${W/60000} minutes)`);let D=X>0?q.slice(0,X):q;return console.error(`Total of ${q.length} projects found (including nested paths)`),D}catch(Z){return console.error("Error fetching package list from GitHub:",Z),[]}}async function b(){try{let{fetchPkgxProjects:X}=await import("./chunk-t8296krc.js"),J=await X();if(console.error(`Found ${J.length} projects`),J.length>0){if(console.error("First 10 projects:"),J.slice(0,10).forEach(($)=>{console.error(`- ${$.name}`)}),J.length>10)console.error(`... and ${J.length-10} more`)}return J}catch(X){return console.error("Failed to fetch projects:",X),[]}}function G(X,J=2){if(X===null)return"null";if(X===void 0)return"undefined";if(Array.isArray(X)){if(X.length===0)return"[]";if(X.every((Z)=>typeof Z==="string")){if(X.length===1)return`[${JSON.stringify(X[0])}]`;let Z=X.map((V)=>JSON.stringify(V)).join(`,
2
+ ${" ".repeat(J)}`);return`[
3
+ ${" ".repeat(J)}${Z}
4
+ ${" ".repeat(J-2)}]`}let $=X.map((Z)=>G(Z,J+2)).join(`,
5
+ ${" ".repeat(J+2)}`);return`[
6
+ ${" ".repeat(J+2)}${$}
7
+ ${" ".repeat(J)}]`}if(typeof X==="object")return`{
8
+ ${Object.entries(X).map(([Z,V])=>{let Y=typeof V==="string"?JSON.stringify(V):G(V,J+2);return`${" ".repeat(J)}${Z}: ${Y}`}).join(`,
9
+ `)}
10
+ }`;return String(X)}function g(X){if(X.includes("/")){let J=X.split("/"),$=J[0],Z=J.slice(1),V=$.replace(/[.-]/g,""),Y=Z.map((K)=>K.replace(/[.-]/g,"")),q="";if(Y.length>0){let K=Y[0];if(V.includes(K.toLowerCase()))q="";else if(Y.length===1)q=K;else q=K}return`${V}${q}`.toLowerCase()}return X.replace(/[.-]/g,"").toLowerCase()}function j(X){if(X.includes("/")){let J=X.split("/"),$=J[0],Z=J.slice(1).join("/"),V=$.replace(/\./g,""),Y=Z.replace(/\//g,"-");return`${V}-${Y}`.toLowerCase()}return X.replace(/\./g,"").toLowerCase()}function P(X){if(X.includes("-")){let $=X.indexOf("-"),Z=X.substring(0,$),V=X.substring($+1),Y=Z;if(Y.endsWith("org")&&!Y.endsWith(".org"))Y=Y.replace(/org$/,".org");if(Y.endsWith("io")&&!Y.endsWith(".io"))Y=Y.replace(/io$/,".io");if(Y.endsWith("com")&&!Y.endsWith(".com"))Y=Y.replace(/com$/,".com");if(Y.endsWith("sh")&&!Y.endsWith(".sh"))Y=Y.replace(/sh$/,".sh");if(Y.endsWith("dev")&&!Y.endsWith(".dev"))Y=Y.replace(/dev$/,".dev");if(Y.endsWith("net")&&!Y.endsWith(".net"))Y=Y.replace(/net$/,".net");if(Y.endsWith("name")&&!Y.endsWith(".name"))Y=Y.replace(/name$/,".name");return`${Y}/${V}`}let J=X;if(J.endsWith("org")&&!J.endsWith(".org"))J=J.replace(/org$/,".org");if(J.endsWith("io")&&!J.endsWith(".io"))J=J.replace(/io$/,".io");if(J.endsWith("com")&&!J.endsWith(".com"))J=J.replace(/com$/,".com");if(J.endsWith("sh")&&!J.endsWith(".sh"))J=J.replace(/sh$/,".sh");if(J.endsWith("dev")&&!J.endsWith(".dev"))J=J.replace(/dev$/,".dev");if(J.endsWith("net")&&!J.endsWith(".net"))J=J.replace(/net$/,".net");if(J.endsWith("land")&&!J.endsWith(".land"))J=J.replace(/land$/,".land");return J}function N(X){let[J]=X.split("@");if(y[J])return y[J];if(J.includes("."))return J;return`${J}.org`}function p(){return{...y}}function h(X){let[J]=X.split("@");return J in y}function l(X){return N(X)}
11
+ export{F as Za,M as _a,T as $a,U as ab,f as bb,b as cb,G as db,g as eb,j as fb,P as gb,N as hb,p as ib,h as jb,l as kb};
package/dist/consts.d.ts CHANGED
@@ -30,7 +30,7 @@ export declare const PACKAGE_ALIASES: {
30
30
  'bun': 'bun.sh';
31
31
  'bun.com': 'bun.sh';
32
32
  'git': 'git-scm.com';
33
- 'docker': 'docker.com';
33
+ 'docker': 'docker.com/cli';
34
34
  'kubectl': 'kubernetes.io';
35
35
  'terraform': 'terraform.io';
36
36
  'ansible': 'ansible.com';
@@ -20,6 +20,7 @@ export declare function scanInstalledApps(applicationsDir?: string): InstalledAp
20
20
  * Query Homebrew for latest cask versions in batch.
21
21
  * Pass an array of cask tokens, returns a map of token → info.
22
22
  */
23
+ // eslint-disable-next-line pickier/no-unused-vars
23
24
  export declare function queryBrewCaskVersions(tokens: string[]): Map<string, BrewCaskInfo>;
24
25
  /**
25
26
  * Check for available updates for installed desktop apps.
@@ -64,7 +64,7 @@ export declare const alacrittyorgPackage: {
64
64
  * Available versions from newest to oldest.
65
65
  * @see https://ts-pantry.netlify.app/usage for installation instructions
66
66
  */
67
- versions: readonly ['0.16.1', '0.16.0', '0.15.1', '0.15.0', '0.14.0', '0.13.2', '0.13.1', '0.13.0', '0.12.3', '0.12.2', '0.12.1', '0.12.0', '0.11.0', '0.10.1', '0.10.0', '0.9.0', '0.8.0'];
67
+ versions: readonly ['0.17.0', '0.16.1', '0.16.0', '0.15.1', '0.15.0', '0.14.0', '0.13.2', '0.13.1', '0.13.0', '0.12.3', '0.12.2', '0.12.1', '0.12.0', '0.11.0', '0.10.1', '0.10.0', '0.9.0', '0.8.0'];
68
68
  aliases: readonly []
69
69
  };
70
70
  export type AlacrittyorgPackage = typeof alacrittyorgPackage;
@@ -21,7 +21,7 @@ export declare const alttabappPackage: {
21
21
  companions: readonly [];
22
22
  dependencies: readonly [];
23
23
  buildDependencies: readonly [];
24
- versions: readonly ['10.9.0', '10.8.0', '10.7.0', '10.6.0', '10.5.0', '10.4.0', '10.3.0', '10.2.0', '10.1.0', '10.0.0', '9.0.0', '8.3.4', '8.3.3', '8.3.2', '8.3.1', '8.3.0', '8.2.0', '8.1.0', '8.0.0', '7.39.0', '7.38.1', '7.38.0', '7.37.0', '7.36.0', '7.35.0', '7.34.0', '7.33.0', '7.32.0', '7.31.0', '7.30.0', '7.29.0', '7.28.0', '7.27.0', '7.26.0', '7.25.0', '7.24.0', '7.23.0', '7.22.0', '7.21.1', '7.21.0', '7.20.1', '7.20.0', '7.19.1', '7.19.0', '7.18.1', '7.18.0', '7.17.0', '7.16.0', '7.15.0', '7.14.1'];
24
+ versions: readonly ['10.12.0', '10.11.0', '10.10.1', '10.10.0', '10.9.0', '10.8.0', '10.7.0', '10.6.0', '10.5.0', '10.4.0', '10.3.0', '10.2.0', '10.1.0', '10.0.0', '9.0.0', '8.3.4', '8.3.3', '8.3.2', '8.3.1', '8.3.0', '8.2.0', '8.1.0', '8.0.0', '7.39.0', '7.38.1', '7.38.0', '7.37.0', '7.36.0', '7.35.0', '7.34.0', '7.33.0', '7.32.0', '7.31.0', '7.30.0', '7.29.0', '7.28.0', '7.27.0', '7.26.0', '7.25.0', '7.24.0', '7.23.0', '7.22.0', '7.21.1', '7.21.0', '7.20.1', '7.20.0', '7.19.1', '7.19.0', '7.18.1', '7.18.0', '7.17.0', '7.16.0', '7.15.0', '7.14.1'];
25
25
  aliases: readonly ['alttab', 'alt-tab']
26
26
  };
27
27
  export type AlttabappPackage = typeof alttabappPackage;
@@ -68,7 +68,7 @@ export declare const ansiblecomPackage: {
68
68
  * Available versions from newest to oldest.
69
69
  * @see https://ts-pantry.netlify.app/usage for installation instructions
70
70
  */
71
- versions: readonly ['2.20.4', '2.20.3', '2.20.1', '2.20.0', '2.19.8', '2.19.7', '2.19.6', '2.19.5', '2.19.4', '2.19.3', '2.19.2', '2.19.1', '2.19.0', '2.18.15', '2.18.14', '2.18.12', '2.18.11', '2.18.10', '2.18.9', '2.18.8', '2.18.7', '2.18.6', '2.18.5', '2.18.4', '2.18.3', '2.18.2', '2.18.1', '2.18.0', '2.17.14', '2.17.13', '2.17.12', '2.17.11', '2.17.10', '2.17.9', '2.17.7', '2.17.6', '2.17.5', '2.17.4', '2.17.3', '2.17.2', '2.17.1', '2.17.0', '2.16.18', '2.16.17', '2.16.16', '2.16.15', '2.16.14', '2.16.13', '2.16.12', '2.16.11', '2.16.10', '2.16.9', '2.16.8', '2.16.7', '2.16.6', '2.16.5', '2.16.4', '2.16.3', '2.16.2', '2.16.1', '2.16.0', '2.15.13', '2.15.12', '2.15.11', '2.15.10', '2.15.9', '2.15.8', '2.15.7', '2.15.6', '2.15.5', '2.15.4', '2.15.3', '2.15.2', '2.15.1', '2.15.0', '2.14.18', '2.14.17', '2.14.16', '2.14.15', '2.14.14', '2.14.13', '2.14.12', '2.14.11', '2.14.10', '2.14.9', '2.14.8', '2.14.7', '2.14.6', '2.14.5', '2.14.4', '2.14.3', '2.13.13', '2.13.12', '2.13.11', '2.13.10', '2.13.9'];
71
+ versions: readonly ['2.20.5', '2.20.4', '2.20.3', '2.20.2', '2.20.1', '2.20.0', '2.19.9', '2.19.8', '2.19.7', '2.19.6', '2.19.5', '2.19.4', '2.19.3', '2.19.2', '2.19.1', '2.19.0', '2.18.16', '2.18.15', '2.18.14', '2.18.13', '2.18.12', '2.18.11', '2.18.10', '2.18.9', '2.18.8', '2.18.7', '2.18.6', '2.18.5', '2.18.4', '2.18.3', '2.18.2', '2.18.1', '2.18.0', '2.17.14', '2.17.13', '2.17.12', '2.17.11', '2.17.10', '2.17.9', '2.17.7', '2.17.6', '2.17.5', '2.17.4', '2.17.3', '2.17.2', '2.17.1', '2.17.0', '2.16.18', '2.16.17', '2.16.16', '2.16.15', '2.16.14', '2.16.13', '2.16.12', '2.16.11', '2.16.10', '2.16.9', '2.16.8', '2.16.7', '2.16.6', '2.16.5', '2.16.4', '2.16.3', '2.16.2', '2.16.1', '2.16.0', '2.15.13', '2.15.12', '2.15.11', '2.15.10', '2.15.9', '2.15.8', '2.15.7', '2.15.6', '2.15.5', '2.15.4', '2.15.3', '2.15.2', '2.15.1', '2.15.0', '2.14.18', '2.14.17', '2.14.16', '2.14.15', '2.14.14', '2.14.13', '2.14.12', '2.14.11', '2.14.10', '2.14.9', '2.14.8', '2.14.7', '2.14.6', '2.14.5', '2.14.4', '2.14.3', '2.13.13', '2.13.12', '2.13.11', '2.13.10', '2.13.9'];
72
72
  aliases: readonly []
73
73
  };
74
74
  export type AnsiblecomPackage = typeof ansiblecomPackage;
@@ -68,7 +68,7 @@ export declare const apktoolorgPackage: {
68
68
  * Available versions from newest to oldest.
69
69
  * @see https://ts-pantry.netlify.app/usage for installation instructions
70
70
  */
71
- versions: readonly ['3.0.1', '2.12.1', '2.12.0', '2.11.1', '2.11.0', '2.10.0', '2.9.3', '2.9.2', '2.9.1', '2.9.0', '2.8.1', '2.8.0', '2.7.0', '2.6.1', '2.6.0', '2.5.0', '2.4.1', '2.4.0', '2.3.4', '2.3.3', '2.3.2', '2.3.1', '2.3.0', '2.2.4', '2.2.3', '2.2.2', '2.2.1', '2.0.3'];
71
+ versions: readonly ['3.0.2', '3.0.1', '2.12.1', '2.12.0', '2.11.1', '2.11.0', '2.10.0', '2.9.3', '2.9.2', '2.9.1', '2.9.0', '2.8.1', '2.8.0', '2.7.0', '2.6.1', '2.6.0', '2.5.0', '2.4.1', '2.4.0', '2.3.4', '2.3.3', '2.3.2', '2.3.1', '2.3.0', '2.2.4', '2.2.3', '2.2.2', '2.2.1', '2.0.3'];
72
72
  aliases: readonly []
73
73
  };
74
74
  export type ApktoolorgPackage = typeof apktoolorgPackage;