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.
- package/dist/bin/cli.js +7 -7
- package/dist/chunk-2dk28v6k.js +2 -0
- package/dist/chunk-2nfjspwd.js +1 -0
- package/dist/{chunk-t71cv3gr.js → chunk-9f0255fc.js} +1 -1
- package/dist/{chunk-2hbhg54n.js → chunk-b0zr0ad6.js} +1 -1
- package/dist/{chunk-vy4gt433.js → chunk-bmr9qds3.js} +1 -1
- package/dist/chunk-cdzdw53j.js +42 -0
- package/dist/chunk-f2c8kapq.js +2 -0
- package/dist/{chunk-j9mv6dze.js → chunk-h8phykmh.js} +1 -1
- package/dist/chunk-jym7xrra.js +2 -0
- package/dist/{chunk-th964914.js → chunk-k4yefwkp.js} +15 -15
- package/dist/chunk-nqztmdqz.js +275 -0
- package/dist/{chunk-5798tqhf.js → chunk-t8296krc.js} +1 -1
- package/dist/{chunk-33qtfw71.js → chunk-xkm30wah.js} +2 -2
- package/dist/chunk-y5rfbg9v.js +11 -0
- package/dist/consts.d.ts +1 -1
- package/dist/desktop-apps.d.ts +1 -0
- package/dist/packages/alacrittyorg.d.ts +1 -1
- package/dist/packages/alttabapp.d.ts +1 -1
- package/dist/packages/ansiblecom.d.ts +1 -1
- package/dist/packages/apktoolorg.d.ts +1 -1
- package/dist/packages/arkadedev.d.ts +1 -1
- package/dist/packages/atlasgoio.d.ts +1 -1
- package/dist/packages/augeasnet.d.ts +1 -1
- package/dist/packages/babashkaorg.d.ts +1 -1
- package/dist/packages/borepub.d.ts +1 -1
- package/dist/packages/bufbuild.d.ts +1 -1
- package/dist/packages/bytebasecom.d.ts +1 -1
- package/dist/packages/casdoororg.d.ts +1 -1
- package/dist/packages/ccachedev.d.ts +1 -1
- package/dist/packages/certbotefforg.d.ts +1 -1
- package/dist/packages/chezmoiio.d.ts +1 -1
- package/dist/packages/circlecicom.d.ts +1 -1
- package/dist/packages/cligithubcom.d.ts +1 -1
- package/dist/packages/cmakeorg.d.ts +1 -1
- package/dist/packages/cnqueryio.d.ts +1 -1
- package/dist/packages/codercom.d.ts +1 -1
- package/dist/packages/codevisualstudiocom.d.ts +1 -1
- package/dist/packages/cointopsh.d.ts +1 -1
- package/dist/packages/conftestdev.d.ts +1 -1
- package/dist/packages/convcogithubio.d.ts +1 -1
- package/dist/packages/cuelangorg.d.ts +1 -1
- package/dist/packages/cythonorg.d.ts +1 -1
- package/dist/packages/daggerio.d.ts +1 -1
- package/dist/packages/daytonaio.d.ts +1 -1
- package/dist/packages/dblabdanvergaracom.d.ts +1 -1
- package/dist/packages/denoland.d.ts +1 -1
- package/dist/packages/depotdev.d.ts +1 -1
- package/dist/packages/dgraphio.d.ts +1 -1
- package/dist/packages/direnvnet.d.ts +1 -1
- package/dist/packages/dotnetmicrosoftcom.d.ts +1 -1
- package/dist/packages/dozzledev.d.ts +1 -1
- package/dist/packages/dprintdev.d.ts +1 -1
- package/dist/packages/duckdborg.d.ts +1 -1
- package/dist/packages/elementsprojectorg.d.ts +1 -1
- package/dist/packages/encoredev.d.ts +1 -1
- package/dist/packages/etcdio.d.ts +1 -1
- package/dist/packages/fastlanetools.d.ts +1 -1
- package/dist/packages/flyio.d.ts +1 -1
- package/dist/packages/getcomposerorg.d.ts +1 -1
- package/dist/packages/getsynthcom.d.ts +1 -1
- package/dist/packages/getzolaorg.d.ts +1 -1
- package/dist/packages/gflagsgithubio.d.ts +1 -1
- package/dist/packages/ghostscriptcom.d.ts +1 -1
- package/dist/packages/gleamrun.d.ts +1 -1
- package/dist/packages/gohugoio.d.ts +1 -1
- package/dist/packages/goreleasercom.d.ts +1 -1
- package/dist/packages/gourceio.d.ts +1 -1
- package/dist/packages/graphitesilorg.d.ts +1 -1
- package/dist/packages/harfbuzzorg.d.ts +1 -1
- package/dist/packages/hasuraio.d.ts +1 -1
- package/dist/packages/helmsh.d.ts +1 -1
- package/dist/packages/htopdev.d.ts +1 -1
- package/dist/packages/httpieio.d.ts +1 -1
- package/dist/packages/huggingfaceco.d.ts +1 -1
- package/dist/packages/imagemagickorg.d.ts +1 -1
- package/dist/packages/infracostio.d.ts +1 -1
- package/dist/packages/ipythonorg.d.ts +1 -1
- package/dist/packages/irohcomputer.d.ts +1 -1
- package/dist/packages/istioio.d.ts +1 -1
- package/dist/packages/jbangdev.d.ts +1 -1
- package/dist/packages/jemallocnet.d.ts +1 -1
- package/dist/packages/jujuis.d.ts +1 -1
- package/dist/packages/julialangorg.d.ts +1 -1
- package/dist/packages/jumppaddev.d.ts +1 -1
- package/dist/packages/k3dio.d.ts +1 -1
- package/dist/packages/k6io.d.ts +1 -1
- package/dist/packages/kagglecom.d.ts +1 -1
- package/dist/packages/kubesharkco.d.ts +1 -1
- package/dist/packages/laravelcom.d.ts +1 -1
- package/dist/packages/lavinmqcom.d.ts +1 -1
- package/dist/packages/libcxxllvmorg.d.ts +1 -1
- package/dist/packages/libeventorg.d.ts +1 -1
- package/dist/packages/libexifgithubio.d.ts +1 -1
- package/dist/packages/libgdgithubio.d.ts +1 -1
- package/dist/packages/libssh2org.d.ts +1 -1
- package/dist/packages/libusbinfo.d.ts +1 -1
- package/dist/packages/libuvorg.d.ts +1 -1
- package/dist/packages/libvipsorg.d.ts +1 -1
- package/dist/packages/libziporg.d.ts +1 -1
- package/dist/packages/liteclicom.d.ts +1 -1
- package/dist/packages/littlecmscom.d.ts +1 -1
- package/dist/packages/llmdatasetteio.d.ts +1 -1
- package/dist/packages/llvmorg.d.ts +1 -1
- package/dist/packages/localaiio.d.ts +1 -1
- package/dist/packages/luarocksorg.d.ts +1 -1
- package/dist/packages/lxmlde.d.ts +1 -1
- package/dist/packages/macfusegithubio.d.ts +1 -1
- package/dist/packages/macvimorg.d.ts +1 -1
- package/dist/packages/mailpitaxllentorg.d.ts +1 -1
- package/dist/packages/maturinrs.d.ts +1 -1
- package/dist/packages/mavenapacheorg.d.ts +1 -1
- package/dist/packages/meilisearchcom.d.ts +1 -1
- package/dist/packages/mercurerocks.d.ts +1 -1
- package/dist/packages/mesonbuildcom.d.ts +1 -1
- package/dist/packages/misejdxdev.d.ts +1 -1
- package/dist/packages/mitmproxyorg.d.ts +1 -1
- package/dist/packages/mkcertdev.d.ts +1 -1
- package/dist/packages/moshorg.d.ts +1 -1
- package/dist/packages/msgpackorg.d.ts +1 -1
- package/dist/packages/neovimio.d.ts +1 -1
- package/dist/packages/networkxorg.d.ts +1 -1
- package/dist/packages/nginxorg.d.ts +1 -1
- package/dist/packages/nodejsorg.d.ts +1 -1
- package/dist/packages/nomadprojectio.d.ts +1 -1
- package/dist/packages/npmjscom.d.ts +1 -1
- package/dist/packages/nushellsh.d.ts +1 -1
- package/dist/packages/odigosio.d.ts +1 -1
- package/dist/packages/ohmyposhdev.d.ts +1 -1
- package/dist/packages/ollamaai.d.ts +1 -1
- package/dist/packages/onefetchdev.d.ts +1 -1
- package/dist/packages/openblasnet.d.ts +1 -1
- package/dist/packages/opencodeai.d.ts +1 -1
- package/dist/packages/openexrcom.d.ts +1 -1
- package/dist/packages/openjpegorg.d.ts +1 -1
- package/dist/packages/openmpllvmorg.d.ts +1 -1
- package/dist/packages/openpolicyagentorg.d.ts +1 -1
- package/dist/packages/opensearchorg.d.ts +1 -1
- package/dist/packages/opentofuorg.d.ts +1 -1
- package/dist/packages/orasland.d.ts +1 -1
- package/dist/packages/packerio.d.ts +1 -1
- package/dist/packages/phpnet.d.ts +1 -1
- package/dist/packages/pinnipeddev.d.ts +1 -1
- package/dist/packages/pipenvpypaio.d.ts +1 -1
- package/dist/packages/planetscalecom.d.ts +1 -1
- package/dist/packages/pocketbaseio.d.ts +1 -1
- package/dist/packages/podmanio.d.ts +1 -1
- package/dist/packages/postgrestorg.d.ts +1 -1
- package/dist/packages/prefixdev.d.ts +1 -1
- package/dist/packages/projenio.d.ts +1 -1
- package/dist/packages/projorg.d.ts +1 -1
- package/dist/packages/pulumiio.d.ts +1 -1
- package/dist/packages/pygmentsorg.d.ts +1 -1
- package/dist/packages/railwayapp.d.ts +1 -1
- package/dist/packages/rapidjsonorg.d.ts +1 -1
- package/dist/packages/rcloneorg.d.ts +1 -1
- package/dist/packages/rectangleapp.d.ts +1 -1
- package/dist/packages/rendercom.d.ts +1 -1
- package/dist/packages/replibytecom.d.ts +1 -1
- package/dist/packages/rhashsourceforgenet.d.ts +1 -1
- package/dist/packages/riotermcom.d.ts +1 -1
- package/dist/packages/rubocoporg.d.ts +1 -1
- package/dist/packages/rubygemsorg.d.ts +1 -1
- package/dist/packages/runatlantisio.d.ts +1 -1
- package/dist/packages/s3toolsorg.d.ts +1 -1
- package/dist/packages/scalewaycom.d.ts +1 -1
- package/dist/packages/seaweedfscom.d.ts +1 -1
- package/dist/packages/sentryio.d.ts +1 -1
- package/dist/packages/shellchecknet.d.ts +1 -1
- package/dist/packages/skaffolddev.d.ts +1 -1
- package/dist/packages/sniffnetnet.d.ts +1 -1
- package/dist/packages/soldeerxyz.d.ts +1 -1
- package/dist/packages/soliditylangorg.d.ts +1 -1
- package/dist/packages/sqlcdev.d.ts +1 -1
- package/dist/packages/squawkhqcom.d.ts +1 -1
- package/dist/packages/starshiprs.d.ts +1 -1
- package/dist/packages/statsapp.d.ts +1 -1
- package/dist/packages/steampipeio.d.ts +1 -1
- package/dist/packages/straceio.d.ts +1 -1
- package/dist/packages/streamlinkgithubio.d.ts +1 -1
- package/dist/packages/stripecom.d.ts +1 -1
- package/dist/packages/swiftorg.d.ts +1 -1
- package/dist/packages/symfonycom.d.ts +1 -1
- package/dist/packages/sympyorg.d.ts +1 -1
- package/dist/packages/syncthingnet.d.ts +1 -1
- package/dist/packages/tailwindcsscom.d.ts +1 -1
- package/dist/packages/tartrun.d.ts +1 -1
- package/dist/packages/taskfiledev.d.ts +1 -1
- package/dist/packages/terraformio.d.ts +1 -1
- package/dist/packages/terragruntgruntworkio.d.ts +1 -1
- package/dist/packages/terratagio.d.ts +1 -1
- package/dist/packages/tiltdev.d.ts +1 -1
- package/dist/packages/tinygoorg.d.ts +1 -1
- package/dist/packages/tldrsh.d.ts +1 -1
- package/dist/packages/toxwiki.d.ts +1 -1
- package/dist/packages/traefikio.d.ts +1 -1
- package/dist/packages/tursotech.d.ts +1 -1
- package/dist/packages/typescriptlangorg.d.ts +1 -1
- package/dist/packages/uriparsergithubio.d.ts +1 -1
- package/dist/packages/vapoursynthcom.d.ts +1 -1
- package/dist/packages/vaultprojectio.d.ts +1 -1
- package/dist/packages/wavpackcom.d.ts +1 -1
- package/dist/packages/werfio.d.ts +1 -1
- package/dist/packages/xcfiledev.d.ts +1 -1
- package/dist/packages/xkbcommonorg.d.ts +1 -1
- package/dist/packages/zarfdev.d.ts +1 -1
- package/dist/packages/zeddev.d.ts +1 -1
- package/dist/packages/zeromqorg.d.ts +1 -1
- package/dist/packages/ziglangorg.d.ts +3 -3
- package/dist/packages/zotregistrydev.d.ts +1 -1
- package/dist/packages/zrokio.d.ts +1 -1
- package/dist/pantry-api.d.ts +1 -0
- package/dist/src/index.js +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/package.json +3 -4
- package/dist/chunk-c5xmxyxn.js +0 -2
- package/dist/chunk-hxhs2gtk.js +0 -2
- package/dist/chunk-r8pej0xx.js +0 -275
- package/dist/chunk-tjxmz5d2.js +0 -42
- package/dist/chunk-w6phftp9.js +0 -11
- package/dist/chunk-zddfmw54.js +0 -2
- package/dist/chunk-zsgm3kjz.js +0 -1
- package/scripts/pantry-cli.ts +0 -319
package/dist/chunk-r8pej0xx.js
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import{eb as k,gb as qw}from"./chunk-w6phftp9.js";import{Ab as pw,Bb as Uw,qb as dw,rb as gw,ub as mw,vb as Kw,xb as lw,zb as cw}from"./chunk-hxhs2gtk.js";import{Gb as Q6}from"./chunk-zddfmw54.js";import{Hb as t,Ib as zQ}from"./chunk-q7s2k65w.js";import{Lb as tw}from"./chunk-p9e5z92g.js";import{Pb as c}from"./chunk-yjz3e391.js";import UQ from"node:process";zQ();import hw from"node:process";function vw(w){return w in t}function KQ(w){return w.includes(".")}function X6(w){return vw(w)||KQ(w)}function Z6(w){return["darwin","linux","windows"].includes(w)}function q6(w){return["x86_64","aarch64","armv7l","i686"].includes(w)}function fw(){return Object.keys(t)}function H6(){return Object.values(t)}function Y6(w){if(vw(w))return{originalName:w,resolvedDomain:t[w],isAlias:!0};return{originalName:w,resolvedDomain:w,isAlias:!1}}function W6(w){let Q=w.lastIndexOf("@");if(Q===-1)return{name:w};let $=w.slice(0,Q),R=w.slice(Q+1);return{name:$,version:R,versionSpec:R}}function J6(w,Q){return Q?`${w}@${Q}`:w}function ww(){let w=hw.platform,Q=hw.arch,$,R,X=!0;switch(w){case"darwin":$="darwin";break;case"linux":$="linux";break;case"win32":$="windows";break;default:$="linux",X=!1}switch(Q){case"x64":R="x86_64";break;case"arm64":R="aarch64";break;case"arm":R="armv7l";break;case"ia32":R="i686";break;default:R="x86_64",X=!1}return{platform:$,architecture:R,isSupported:X}}function z6(w,Q="latest",$){let R=$||ww(),X;switch(R.platform){case"darwin":X="tar.xz";break;case"linux":X="tar.xz";break;case"windows":X="zip";break;default:X="tar.xz"}return{packageName:w,version:Q,platform:R.platform,architecture:R.architecture,format:X}}var K6={LATEST:"latest",ANY:"*"},kw={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 U6(w){return kw[w]}function G6(w,Q){return kw[Q].includes(w)}function _6(w){return w}function B6(w,Q){return[w,Q]}function O6(w){return w}async function M6(w){try{let Q=await Kw(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 C6(w){try{if(!w||w.trim().length===0)return{success:!1,error:"Search term cannot be empty"};return{success:!0,data:await lw(w.trim())}}catch(Q){return{success:!1,error:`Search failed: ${Q}`}}}async function I6(w=20){try{return{success:!0,data:(await cw(5)).slice(0,w)}}catch(Q){return{success:!1,error:`Failed to list popular packages: ${Q}`}}}async function S6(w=20){try{return{success:!0,data:await pw(w)}}catch(Q){return{success:!1,error:`Failed to list active packages: ${Q}`}}}function F6(){try{return{success:!0,data:fw()}}catch(w){return{success:!1,error:`Failed to list aliases: ${w}`}}}async function A6(w){try{let Q=await Uw(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 b6(w){try{let Q=await Uw(w);if(!Q.isValid)return{success:!1,error:Q.error};let $=Q.packageName,R=Q.version||"latest",X=await mw($,R);if(!X)return{success:!1,error:`Could not resolve version '${R}' for package '${$}'`};let H=await Kw($);if(!H)return{success:!1,error:`Package '${$}' not found`};let q=ww(),Z={packageName:$,resolvedVersion:X,platform:q.platform,architecture:q.architecture,dependencies:H.dependencies,companions:H.companions,installCommand:`pkgx install ${$}@${X}`},Y=[];if(!q.isSupported)Y.push(`Platform ${q.platform}/${q.architecture} may not be fully supported`);if(H.dependencies.length>0)Y.push(`This package has ${H.dependencies.length} dependencies that will also be installed`);return{success:!0,data:Z,warnings:Y.length>0?Y:void 0}}catch(Q){return{success:!1,error:`Failed to create install plan: ${Q}`}}}async function x6(w){try{let Q=await dw(w);if(!Q)return{success:!1,error:`Package '${w}' not found`};let $=await gw(w);return{success:!0,data:{latest:Q,total:$.length,versions:$}}}catch(Q){return{success:!1,error:`Failed to get version info: ${Q}`}}}function V6(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 y6(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 N6(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 u6(){try{let w=ww();return{success:!0,data:{platform:w.platform,architecture:w.architecture,isSupported:w.isSupported,nodeVersion:UQ.version}}}catch(w){return{success:!1,error:`Failed to get system info: ${w}`}}}import m from"node:fs";import $w from"node:path";function Rw(w){if(!m.existsSync(w))throw Error(`Dependency file not found: ${w}`);let Q=m.readFileSync(w,"utf-8"),$=[],R=Q.split(`
|
|
6
|
-
`),X=!1,H=!1,q=0;for(let Z of R){let Y=Z.trim();if(!Y||Y.startsWith("#"))continue;if(Z.match(/^(dependencies|deps):\s*$/)){X=!0,H=!1,q=Z.search(/\S/);continue}if(Z.match(/^global:\s*true\s*$/)||Z.match(/^global:\s*$/)&&!X){H=!0;continue}if(Z.match(/^\w+:/)&&!Z.includes(" ")&&X&&q===0){X=!1;continue}if(X||H){if(Z.match(/^\s+(dependencies|deps):\s*$/))continue;let z=Z.indexOf(":");if(z>0){let J=Z.substring(0,z).trim(),j=Z.substring(z+1).trim();if(J&&j){let T=J,O=j.replace(/^['"]|['"]$/g,"");if(T==="global"||T==="dependencies"||T==="deps")continue;let W=O,G=O;if(O.startsWith("^"))W=O.substring(1),G=O;else if(O.startsWith("~"))W=O.substring(1),G=O;else if(O.startsWith(">=")||O.startsWith("<=")||O.startsWith(">")||O.startsWith("<")){let _=/^([><=]+)/.exec(O);if(_){let K=_[1];W=O.substring(K.length).trim(),G=O}}else if(O==="*"||O==="latest")W="latest",G="*";else W=O,G=`@${O}`;$.push({name:T,version:W,constraint:G,isOsSpecific:!1})}}}}return $}function GQ(w){if(!m.existsSync(w))throw Error(`Dependency file not found: ${w}`);let Q=m.readFileSync(w,"utf-8"),$=Rw(w),R;try{let X=typeof Bun<"u"&&Bun.YAML?Bun.YAML.parse(Q):_Q(Q);if(X?.services){let H=Array.isArray(X.services.autoStart)?X.services.autoStart.map((q)=>String(q)):[];if(H.length>0)R={enabled:X.services.enabled===!0,autoStart:H}}}catch{}return{dependencies:$,services:R}}function _Q(w){let Q={},$=w.split(`
|
|
7
|
-
`),R=!1,X=!1,H=[],q=!1;for(let Z of $){let Y=Z.trim();if(!Y||Y.startsWith("#"))continue;if(Z.match(/^services:\s*$/)){R=!0,X=!1;continue}if(R&&!Z.startsWith(" ")&&!Z.startsWith("\t")&&!Y.startsWith("-")){if(Y!=="services:"){R=!1,X=!1;continue}}if(R){if(Y.startsWith("enabled:")){q=Y.includes("true");continue}if(Y.match(/^autoStart:\s*$/)){X=!0;continue}if(X&&Y.startsWith("- ")){let z=Y.slice(2).trim();if(z)H.push(z)}}}if(H.length>0)Q.services={enabled:q,autoStart:H};return Q}async function v6(w,Q="src/packages"){try{let $;if(w.includes("/"))$=$w.join(Q,`${w}.ts`);else{let J=`${w.replace(/\./g,"")}.ts`;$=$w.join(Q,J)}if(!m.existsSync($))return[];let R=m.readFileSync($,"utf-8"),X=R.indexOf("versions:");if(X===-1)return[];let H=R.substring(X),q=H.indexOf("["),Z=H.indexOf("] as const");if(q===-1||Z===-1)return[];let z=H.substring(q+1,Z).match(/'([^']+)'/g);if(!z)return[];return z.map((J)=>J.replace(/'/g,""))}catch{return[]}}async function BQ(w){try{let{packages:Q}=await import("./chunk-2hbhg54n.js").catch(()=>import("./src/index.js")),$=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),R=Q[$];if(!R)R=Object.values(Q).find((H)=>H.domain===w);if(!R)R=Object.values(Q).find((H)=>Array.isArray(H.aliases)&&H.aliases.includes(w));if(R&&R.versions&&Array.isArray(R.versions))return R.versions;return[]}catch{return[]}}async function ow(w,Q){let $=await BQ(w);if($.length===0)return Q.split("#")[0].trim().replace(/^[@^~>=<]+/,"")||"latest";let R=Q.split("#")[0].trim();if(R==="*"||R==="latest")return $[0];if(R.startsWith("@")){let H=R.slice(1);return $.includes(H)?H:$[0]}return OQ($,R)||$[0]}function OQ(w,Q){if(Q.startsWith("^")){let $=Q.slice(1),[R]=l($);return w.filter((H)=>{let[q]=l(H);return q===R&&g(H,$)>=0})[0]||null}if(Q.startsWith("~")){let $=Q.slice(1),[R,X]=l($);return w.filter((q)=>{let[Z,Y]=l(q);return Z===R&&Y===X&&g(q,$)>=0})[0]||null}if(Q.startsWith(">=")){let $=Q.slice(2).trim();return w.filter((X)=>g(X,$)>=0)[0]||null}if(Q.startsWith(">")){let $=Q.slice(1).trim();return w.filter((X)=>g(X,$)>0)[0]||null}if(Q.startsWith("<=")){let $=Q.slice(2).trim();return w.filter((X)=>g(X,$)<=0)[0]||null}if(Q.startsWith("<")){let $=Q.slice(1).trim();return w.filter((X)=>g(X,$)<0)[0]||null}if(Q.startsWith("=")){let $=Q.slice(1).trim();return w.includes($)?$:null}return w.includes(Q)?Q:null}function l(w){let Q=w.split(".").map(($)=>{let R=$.match(/^\d+/);return R?Number.parseInt(R[0],10):0});return[Q[0]||0,Q[1]||0,Q[2]||0]}function g(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(),R=Q.split("#")[0].trim(),[X,H,q]=l($),[Z,Y,z]=l(R);if(X>Z)return 1;if(X<Z)return-1;if(H>Y)return 1;if(H<Y)return-1;if(q>z)return 1;if(q<z)return-1;return 0}var Qw=null;async function jQ(){if(Qw)return Qw;return Qw=(await import("./chunk-2hbhg54n.js").catch(()=>import("./src/index.js"))).packages,Qw}async function TQ(w){try{let Q=await jQ(),$=Q[w];if($)return{dependencies:$.dependencies||[],companions:$.companions||[]};let R=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),X=Q[R];if(X)return{dependencies:X.dependencies||[],companions:X.companions||[]};let q=Object.values(Q).find((Z)=>Z.domain===w);if(q)return{dependencies:q.dependencies||[],companions:q.companions||[]};return null}catch(Q){return console.warn(`Failed to load package data for ${w}: ${Q}`),null}}async function Xw(w,Q={},$=new Set,R=0){let{maxDepth:X=10,verbose:H=!1,targetOs:q,includeOsSpecific:Z=!0}=Q;if(R>X||$.has(w))return[];if($.add(w),H)console.log(`${" ".repeat(R)}Resolving dependencies for: ${w}`);let Y=[];try{let J=function(W){let G=W.match(/^(linux|darwin|windows):(.+)$/),_=!!G,K=G?G[2]:W,I=G?G[1]:void 0;if(_&&(!Z||q&&I!==q))return null;let B=K,L="latest",U="*",M=K.match(/^([^@^~>=<]+)([@^~>=<].+)?$/);if(M){if(B=M[1],M[2]){let S=M[2];if(S.startsWith("@"))L=S.substring(1),U=S;else U=S,L=S.replace(/^\D*/,"")}}return{dep:{name:B,version:L,constraint:U,isOsSpecific:_,os:I},pkgName:B}},z=await TQ(w),T=[...z?.dependencies||[],...z?.companions||[]].map(J).filter((W)=>W!==null);for(let{dep:W}of T)Y.push(W);let O=await Promise.all(T.map(({pkgName:W})=>Xw(W,Q,$,R+1)));for(let W of O)Y.push(...W)}catch(z){if(H)console.warn(`${" ".repeat(R)}Warning: Could not resolve dependencies for ${w}: ${z}`)}return Y}async function Gw(w,Q={}){let $=new Map,R=[],X={linux:[],darwin:[],windows:[]};for(let Z of w){if(!$.has(Z.name))$.set(Z.name,[]);if($.get(Z.name).push(Z),Z.isOsSpecific&&Z.os)X[Z.os].push(Z)}let H=[],q=[];for(let[Z,Y]of $)if(Y.length===1){let z=await ow(Z,Y[0].constraint),J={...Y[0],version:z};H.push(J),q.push(Z)}else{let z=Y.map((W)=>W.version),J=[...new Set(z)];if(J.length>1)R.push({package:Z,versions:J});let j=await Promise.all(Y.map(async(W)=>({...W,resolvedVersion:await ow(Z,W.constraint)}))),T=j[0];for(let W of j.slice(1))if(T.constraint==="*"&&W.constraint!=="*")T=W;else if(T.constraint!=="*"&&W.constraint==="*");else if(g(W.resolvedVersion,T.resolvedVersion)>0)T=W;let O={...T,version:T.resolvedVersion};delete O.resolvedVersion,H.push(O),q.push(Z)}return{allDependencies:H,uniquePackages:q,conflicts:R,osSpecificDeps:X}}async function sw(w,Q={}){let{verbose:$=!1}=Q;if($)console.log(`Parsing dependency file: ${w}`);let R=Rw(w);if($)console.log(`Found ${R.length} direct dependencies`);let X=[...R],H=await Promise.all(R.map(async(Y)=>{if($)console.log(`Resolving transitive dependencies for: ${Y.name}`);return Xw(Y.name,Q)}));for(let Y of H)X.push(...Y);if($)console.log(`Total dependencies found (before deduplication): ${X.length}`);let q=await Gw(X,Q);if($){if(console.log(`Unique packages after deduplication: ${q.uniquePackages.length}`),q.conflicts.length>0)console.log(`Version conflicts found: ${q.conflicts.length}`)}let Z=$w.extname(w);if(Z===".yaml"||Z===".yml"){let Y=GQ(w);if(Y.services)q.services=Y.services}return q}function f6(w){let Q=["deps.yaml","deps.yml","dependencies.yaml","dependencies.yml","pkgx.yaml","pkgx.yml",".deps.yaml",".deps.yml"],$=[];for(let R of Q){let X=$w.join(w,R);if(m.existsSync(X))$.push(X)}return $}import A from"node:fs";import E from"node:path";import N from"node:process";var _w=E.join(N.cwd(),"src","packages"),Bw=E.join(N.cwd(),"docs");var o={};async function Ew(w){try{let Q=w||E.join(N.cwd(),"src","packages"),$=E.join(Q,"index.ts");if(A.existsSync($)){console.log("Using generated index file for package mapping...");let H=await import(E.resolve($)),q=H.pantry||H.packages;if(q)return console.log(`Successfully loaded ${Object.keys(q).length} packages from index`),q}console.log("Index file not found, falling back to direct file reading...");let R={};if(!A.existsSync(Q))return console.log(`Packages directory does not exist: ${Q}`),R;let X=[];try{let H=function(q,Z=""){let Y=[],z=A.readdirSync(q,{withFileTypes:!0});for(let J of z)if(J.isFile()&&J.name.endsWith(".ts")&&J.name!=="index.ts"&&J.name!=="aliases.ts")Y.push(E.join(q,J.name));else if(J.isDirectory()&&!J.name.startsWith(".")){let j=E.join(q,J.name),T=Z?`${Z}/${J.name}`:J.name;Y.push(...H(j,T))}return Y};X=H(Q),console.log(`Found ${X.length} package files`)}catch(H){console.error(`Error reading packages directory ${Q}:`,H),X=[]}console.log(`Reading package data from ${X.length} files...`);for(let H of X)try{let q=E.isAbsolute(H)?H:E.join(Q,H),Z=A.readFileSync(q,"utf-8"),Y=E.basename(H,".ts"),z=Z.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),J=z?z[1]:qw(Y),j=k(J),T=LQ(Z,J);if(T)R[j]=T,console.log(`Loaded package data for ${J} -> ${j}`)}catch(q){console.error(`Error processing file ${H}:`,q)}return console.log(`Successfully loaded ${Object.keys(R).length} packages`),R}catch(Q){return console.error("Error importing pantry:",Q),{}}}function LQ(w,Q){try{let $=w.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),R=$?$[1]:Q;if(!w.match(/export const \w+Package = \{([\s\S]*?)\}/))return console.warn(`Could not find package object in file for ${R}`),null;let H=(U)=>{let M=new RegExp(`${U}:\\s*\\[(.*?)\\]\\s*as const`,"s"),S=w.match(M);if(!S)return[];let C=S[1],F=C.match(/'([^']*)'/g);if(F)return F.map((x)=>x.replace(/'/g,""));if(F=C.match(/"([^"]*)"/g),F)return F.map((x)=>x.replace(/"/g,""));return[]},q=(U)=>{let S=new RegExp(`${U}:\\s*'([^']*)'\\s*as const`),C=w.match(S);if(C)return C[1].replace(/\\'/g,"'").replace(/\\\\/g,"\\");if(S=new RegExp(`${U}:\\s*'([^']*)'`),C=w.match(S),C)return C[1].replace(/\\'/g,"'").replace(/\\\\/g,"\\");return""},Z=q("name")||R,Y=q("description")||`A package from ${R}`,z=q("packageYmlUrl")||"",J=q("homepageUrl")||"",j=q("githubUrl")||"",T=q("installCommand")||"",O=q("pkgxInstallCommand")||`sh <(curl https://pkgx.sh) +${R} -- $SHELL -i`,W=q("pantryInstallCommand")||`pantry install ${R}`,G=q("fullPath")||R,_=H("programs"),K=H("companions"),I=H("dependencies"),B=H("versions"),L=H("aliases");return{name:Z,domain:R,description:Y,packageYmlUrl:z,homepageUrl:J,githubUrl:j,installCommand:T,pkgxInstallCommand:O,pantryInstallCommand:W,programs:_,companions:K,dependencies:I,versions:B,fullPath:G,aliases:L}}catch($){return console.error(`Error extracting package data for ${Q}:`,$),null}}function EQ(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 R=Q.replace(/\./g,"");if(w===R)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 H=Q.split("/"),q=H[H.length-1];if($.includes(q.toLowerCase())&&w===q)return!1}let X=["go","js","py","rb","sh","vi","cc","gc","jq","awk","sed","mc","gh"];if(w.length<3&&!X.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 rw(){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 iw(w){if(o[w])return o[w];return w.replace(/\W/g,"_")}function aw(w){return w.toLowerCase()}function Zw(w,Q,$){try{let R=Q||_w,X=$||E.join(R,`${w}.ts`),H=A.readFileSync(X,"utf-8"),q=H.match(/export const (\w+) = \{/),Z=q?q[1]:`${w.replace(/\W/g,"")}Package`,Y=H.match(/export type (\w+) = typeof/),z=Y?Y[1]:`${Z.charAt(0).toUpperCase()}${Z.slice(1)}`;return{packageVarName:Z,typeName:z}}catch(R){console.warn(`Could not read package file ${$||`${w}.ts`}, using fallback naming:`,R);let X=CQ(w),H=MQ(w);return{packageVarName:X,typeName:H}}}function MQ(w){if(o[w]){let R=o[w];return`${R.charAt(0).toUpperCase()}${R.slice(1)}Package`}let $=aw(w).replace(/\W/g,"");return`${$.charAt(0).toUpperCase()}${$.slice(1)}Package`}function CQ(w){if(o[w])return`${o[w]}Package`;return`${aw(w).replace(/\W/g,"")}Package`}function IQ(w,Q){let{typeName:$}=Zw(w,Q);return $}function SQ(w,Q){let{packageVarName:$}=Zw(w,Q);return $}async function Ow(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||_w,$=E.resolve(Q,"index.ts");if(console.log(`DEBUG generateIndex: packagesDir=${w}`),console.log(`DEBUG generateIndex: PACKAGES_DIR=${_w}`),console.log(`DEBUG generateIndex: targetPackagesDir=${Q}`),console.log(`DEBUG generateIndex: targetIndexFile=${$}`),console.log(`DEBUG generateIndex: path.isAbsolute(targetIndexFile)=${E.isAbsolute($)}`),!A.existsSync(Q))console.log(`Creating packages directory: ${Q}`),A.mkdirSync(Q,{recursive:!0});if(!A.existsSync(Q))return console.error(`Failed to create packages directory: ${Q}`),null;let R=[];try{let H=function(q,Z=""){let Y=[],z=A.readdirSync(q,{withFileTypes:!0});for(let J of z)if(J.isFile()&&J.name.endsWith(".ts")&&J.name!=="index.ts"&&J.name!=="aliases.ts")Y.push(E.join(q,J.name));else if(J.isDirectory()&&!J.name.startsWith(".")){let j=E.join(q,J.name),T=Z?`${Z}/${J.name}`:J.name;Y.push(...H(j,T))}return Y};R=H(Q),console.log(`Found ${R.length} package files`)}catch(H){console.error(`Error reading packages directory ${Q}:`,H),R=[]}let X=`// 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(R.length>0){console.log(`Processing ${R.length} package files...`);let H=`// Auto-generated package index
|
|
20
|
-
// Do not edit this file directly
|
|
21
|
-
|
|
22
|
-
`,q=`export interface Pantry {
|
|
23
|
-
`,Z=`export const pantry: Pantry = {
|
|
24
|
-
`,Y=new Set,z=new Set,J=R.sort();for(let G of J)try{let _=E.basename(G,".ts"),K=iw(_),B=E.relative(Q,G).replace(/\.ts$/,"").replace(/\\/g,"/"),{packageVarName:L}=Zw(_,Q,G),U=L,M=1;while(z.has(U))U=`${L}${M}`,M++;if(z.add(U),U===L)H+=`import { ${L} } from './${B}'
|
|
25
|
-
`;else H+=`import { ${L} as ${U} } from './${B}'
|
|
26
|
-
`;let S=K,C=1;while(Y.has(S))S=`${K}${C}`,C++;Y.add(S);let F=/^\d/.test(S)||!/^[a-z_$][\w$]*$/i.test(S)?`'${S}'`:S;q+=` ${F}: typeof ${U}
|
|
27
|
-
`,Z+=` ${F}: ${U},
|
|
28
|
-
`;let V=A.readFileSync(G,"utf-8").match(/domain:\s*['"]([^'"]*)['"]\s*as const/),v=V?V[1]:"";if(v){let P=k(v);if(P!==S){let D=P,u=1;while(Y.has(D))D=`${P}${u}`,u++;Y.add(D);let f=/^\d/.test(D)||!/^[a-z_$][\w$]*$/i.test(D)?`'${D}'`:D;q+=` ${f}: typeof ${U}
|
|
29
|
-
`,Z+=` ${f}: ${U},
|
|
30
|
-
`}}}catch(_){console.error(`Error processing file ${G}:`,_)}let j=await Hw(Q),T=new Map;for(let G of J)try{let K=A.readFileSync(G,"utf-8").match(/domain:\s*['"]([^'"]*)['"]\s*as const/),I=K?K[1]:"";if(I){let B=E.basename(G,".ts"),{packageVarName:L}=Zw(B,Q,G),U=L,M=1;while(z.has(U)&&U!==L)U=`${L}${M}`,M++;T.set(I,U)}}catch(_){console.error(`Error processing file for alias mapping ${G}:`,_)}for(let[G,_]of Object.entries(j).sort((K,I)=>K[0].localeCompare(I[0]))){let K=T.get(_);if(K){let I=/^\d/.test(G)||!/^[a-z_$][\w$]*$/i.test(G)?`'${G}'`:G;if(Y.has(G)){let B=I.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),L=new RegExp(`^\\s*${B}:\\s*typeof\\s+\\w+\\s*$`,"gm"),U=new RegExp(`^\\s*${B}:\\s*\\w+,\\s*$`,"gm");q=q.replace(L,""),Z=Z.replace(U,"")}q+=` ${I}: typeof ${K}
|
|
31
|
-
`,Z+=` ${I}: ${K},
|
|
32
|
-
`,Y.add(G)}}q+=`}
|
|
33
|
-
|
|
34
|
-
`,Z+=`}
|
|
35
|
-
|
|
36
|
-
`,X=`${H}
|
|
37
|
-
${q}export type Packages = Pantry
|
|
38
|
-
|
|
39
|
-
${Z}export const packages: Packages = pantry
|
|
40
|
-
|
|
41
|
-
export * from './aliases'
|
|
42
|
-
`}try{A.writeFileSync($,X),console.log(`Successfully generated ${$}`)}catch(H){return console.error(`Error writing index file ${$}:`,H),null}if(!A.existsSync($))return console.error(`Index file was not created: ${$}`),null;return console.log(`DEBUG generateIndex: returning ${$}`),console.log(`DEBUG generateIndex: return value isAbsolute=${E.isAbsolute($)}`),console.log(`DEBUG generateIndex: return value type=${typeof $}`),$}catch(Q){return console.error("Error generating index file:",Q),null}}async function Hw(w){let Q={};console.log("Generating aliases from package files (avoiding circular dependency)");let $=w||E.join(N.cwd(),"src","packages");if(!A.existsSync($))return console.log(`Packages directory does not exist: ${$}`),Q;function R(q,Z=""){let Y=[],z=A.readdirSync(q,{withFileTypes:!0});for(let J of z)if(J.isFile()&&J.name.endsWith(".ts")&&J.name!=="index.ts"&&J.name!=="aliases.ts")Y.push(E.join(q,J.name));else if(J.isDirectory()&&!J.name.startsWith(".")){let j=E.join(q,J.name),T=Z?`${Z}/${J.name}`:J.name;Y.push(...R(j,T))}return Y}let X=R($).sort();console.log(`Found ${X.length} package files`);for(let q of X)try{let Z=q,Y=A.readFileSync(Z,"utf-8"),z=E.basename(q,".ts"),J=Y.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),j=J?J[1]:qw(z),T=Y.match(/name:\s*['"]([^'"]*)['"]\s*as const/),O=T?T[1]:"";if(O&&O!==j&&EQ(O,j))if(!Q[O])Q[O]=j,console.log(`Auto-generated alias: ${O} -> ${j}`);else console.log(`Skipped auto-generated alias ${O} -> ${j} (already exists as ${Q[O]})`);let W=Y.match(/aliases:\s*\[([\s\S]*?)\]/);if(W&&W[1]){let G=W[1].match(/["']([^"']*)["']/g);if(G)for(let _ of G){let K=_.replace(/["']/g,"");if(!(!K||K.includes("--")||K.includes("$SHELL")||K.includes("curl")||K.includes("sh <(")||K.includes(" -- ")||K.includes(" -i")||K.includes("+")&&K.includes(" ")||K.includes("{{")||K.includes("}}")||K.includes("version.major")||K.includes("version.minor")||K===j))if(!Q[K])Q[K]=j,console.log(`Found explicit alias ${K} -> ${j}`);else console.log(`Skipped explicit alias ${K} -> ${j} (already exists as ${Q[K]})`);else console.log(`Filtered out invalid alias: ${K} for ${j}`)}}if(j==="aws.amazon.com/cli"){if(!Q.aws)Q.aws=j,console.log(`Added AWS CLI alias: aws -> ${j}`);if(!Q["aws/cli"])Q["aws/cli"]=j,console.log(`Added AWS CLI path alias: aws/cli -> ${j}`)}if(j==="aws.amazon.com/cdk"){if(!Q["aws/cdk"])Q["aws/cdk"]=j,console.log(`Added AWS CDK path alias: aws/cdk -> ${j}`)}}catch(Z){console.error(`Error extracting aliases from ${q}:`,Z)}let H=tw();for(let[q,Z]of Object.entries(H))if(!Q[q])Q[q]=Z,console.log(`Added alias override: ${q} -> ${Z}`);else{let Y=Q[q];Q[q]=Z,console.log(`Overrode alias ${q}: ${Y} -> ${Z}`)}return Q}async function jw(w){try{console.log(`DEBUG generateAliases START: packagesDir=${w}`),console.log(`DEBUG generateAliases START: process.cwd()=${N.cwd()}`);let Q=await Hw(w),$=w?E.resolve(w):E.resolve(N.cwd(),"src","packages"),R=E.resolve($,"aliases.ts");console.log(`DEBUG generateAliases: targetPackagesDir=${$}`),console.log(`DEBUG generateAliases: aliasesFile=${R}`),console.log(`DEBUG generateAliases: path.isAbsolute(aliasesFile)=${E.isAbsolute(R)}`);let X=E.dirname(R);if(!A.existsSync(X))A.mkdirSync(X,{recursive:!0});let H=Q,q=`/**
|
|
43
|
-
* Auto-generated aliases for pkgx packages
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
`;q+=`export const aliases: Record<string, string> = {
|
|
47
|
-
`;let Z=Object.entries(H).sort((Y,z)=>Y[0].localeCompare(z[0]));for(let[Y,z]of Z)q+=` '${Y}': '${z}',
|
|
48
|
-
`;return q+=`}
|
|
49
|
-
`,A.writeFileSync(R,q),console.log(`Successfully generated ${R} with ${Z.length} aliases`),console.log(`DEBUG generateAliases: returning ${R}`),console.log(`DEBUG generateAliases: return value isAbsolute=${E.isAbsolute(R)}`),console.log(`DEBUG generateAliases: return value type=${typeof R}`),R}catch(Q){return console.error("Error generating aliases file:",Q),""}}function FQ(w){let Q=w.split(`
|
|
50
|
-
`).map(($)=>$.trimEnd()).join(`
|
|
51
|
-
`);return Q=AQ(Q),Q=Q.replace(/\n{3,}/g,`
|
|
52
|
-
|
|
53
|
-
`),Q=`${Q.trimEnd()}
|
|
54
|
-
`,Q}function Mw(w){return FQ(w)}function AQ(w){let Q=w.split(`
|
|
55
|
-
`),$=!1;return Q.map((R)=>{if(R.trimStart().startsWith("```"))return $=!$,R;if($)return R;return R.replace(/(?<!\]\()(?<!\()(?<!<)(https?:\/\/[^\s)>\]]+)/g,(X,H,q)=>{if(q>0&&R[q-1]==="<")return X;let Z=R.slice(0,q);if(/\]\($/.test(Z))return X;if((Z.match(/`/g)||[]).length%2===1)return X;return`<${X}>`})}).join(`
|
|
56
|
-
`)}function bQ(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 xQ(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(!bQ(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 ew(w){let Q=(R)=>{if(!w.versions||w.versions.length===0)return R.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let X=w.versions[0],H=X.split("."),q=H[0]||"",Z=H[1]||"",Y=H[2]||"",z=Z?`${q}.${Z}`:q;return R.replace(/\{\{\s*version\.marketing\s*\}\}/g,z).replace(/\{\{\s*version\.major\s*\}\}/g,q).replace(/\{\{\s*version\.minor\s*\}\}/g,Z).replace(/\{\{\s*version\.patch\s*\}\}/g,Y).replace(/\{\{\s*version\.raw\s*\}\}/g,X).replace(/\{\{\s*version\s*\}\}/g,X).replace(/\{\{(?![^}]*\}\})/g,"{{")};if(w.pantryInstallCommand){let R=w.pantryInstallCommand.match(/pantry install (.+)/);if(R){let X=R[1];if(w.aliases&&w.aliases.length>0){let H=[...w.aliases].sort((Z,Y)=>Z.length-Y.length);return`pantry install ${Q(H[0])}`}if(w.aliases&&w.aliases.some((H)=>H.toLowerCase()===X.toLowerCase()))return`pantry install ${Q(X.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((X,H)=>X.length-H.length)[0];return $=Q($),`pantry install ${$}`}async function VQ(w,Q){let $=await Ew(Q),R=await Hw(Q),X=rw(),H=E.resolve(w,"package-catalog.md"),q={},Z=0;for(let[W,G]of Object.entries($))if(!p(G))q[W]=G;else Z++,console.log(`Excluding package ${G.domain||W} (placeholder data)`);console.log(`Filtered out ${Z} packages with placeholder data`);let Y=new Set,z=new Map;for(let[W,G]of Object.entries(q)){let _=G.domain;if(!Y.has(_))z.set(_,G),Y.add(_)}let J=new Set;Object.values(X).forEach((W)=>{W.forEach((G)=>J.add(G))});let j=[];if(z.forEach((W,G)=>{if(!J.has(G))j.push(G)}),j.length>0)X["Other Utilities"]=j;let T=`# Package Catalog
|
|
57
|
-
|
|
58
|
-
This comprehensive catalog lists all ${z.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**: ${z.size}
|
|
65
|
-
- **Categories**: ${Object.keys(X).length}
|
|
66
|
-
- **Last Updated**: ${new Date().toISOString()}
|
|
67
|
-
|
|
68
|
-
## Table of Contents
|
|
69
|
-
|
|
70
|
-
`,O=(W)=>{if($[W])return{domainVarName:W,pkg:$[W]};let G=R[W];if(G){let _=k(G);if($[_])return{domainVarName:_,pkg:$[_]}}return null};Object.keys(X).forEach((W)=>{let G=W.toLowerCase().replace(/[^a-z0-9]+/g,"-"),_=X[W],K=new Map;_.forEach((B)=>{let L=O(B);if(L&&!p(L.pkg)){let U=L.pkg.domain||L.pkg.fullPath||"unknown";if(!K.has(U))K.set(U,L);else{let M=K.get(U);if(L.domainVarName.length<M.domainVarName.length||L.domainVarName.length===M.domainVarName.length&&L.domainVarName<M.domainVarName)K.set(U,L)}}});let I=K.size;if(I>0)T+=`- [${W}](#${G}) (${I} packages)
|
|
71
|
-
`}),T+=`
|
|
72
|
-
`;for(let[W,G]of Object.entries(X)){let _=new Map;G.forEach((I)=>{let B=O(I);if(B&&!p(B.pkg)){let L=B.pkg.domain||B.pkg.fullPath||"unknown";if(!_.has(L))_.set(L,B);else{let U=_.get(L);if(B.domainVarName.length<U.domainVarName.length||B.domainVarName.length===U.domainVarName.length&&B.domainVarName<U.domainVarName)_.set(L,B)}}});let K=Array.from(_.values()).sort((I,B)=>(I.pkg.domain||I.domainVarName).localeCompare(B.pkg.domain||B.domainVarName));if(K.length===0)continue;T+=`## ${W}
|
|
73
|
-
|
|
74
|
-
`,T+=`${K.length} packages in this category
|
|
75
|
-
|
|
76
|
-
`,T+=`| Package | Description | Programs | Versions | Install |
|
|
77
|
-
`,T+=`|---------|-------------|----------|----------|----------|
|
|
78
|
-
`;for(let{domainVarName:I,pkg:B}of K)try{let L=B.domain||B.fullPath||"unknown",U=B.aliases?` (${B.aliases.map((u)=>u.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")).join(", ")})`:"",M=B.programs.slice(0,3).map((u)=>u.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")).join(", ");if(B.programs.length>3)M+=`, ... (+${B.programs.length-3})`;if(B.programs.length===0)M="-";let S=B.versions?.length||0,C=B.versions?.[0]||"latest",F=S>0?`${C} (+${S-1})`:"latest",x=B.description.replace(/\s+/g," ").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}").replace(/\x27/g,"'").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">").replace(/\|/g,"\\|");if(x.length>100)x=`${x.substring(0,97)}...`;let V=B.name||L;if(B.aliases&&B.aliases.length>0)V=[...B.aliases].sort((f,h)=>f.length-h.length)[0];V=V.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let v=`\`pkgx ${V}\``,P;if(L.includes("."))if(L.startsWith("github.com/")&&L.includes("/")){let f=L.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=I.toLowerCase();if(/^\d/.test(h))h=`pkg-${h}`;h=h.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),P=`./packages/${h}.md`}}else P=`./packages/${L}/index.md`;else{let u=I.toLowerCase();if(/^\d/.test(u))u=`pkg-${u}`;u=u.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),P=`./packages/${u}.md`}let D=`| **[${L}](${P})**${U} | ${x} | ${M} | ${F} | ${v} |`.replace(/\r?\n/g," ").replace(/\s+/g," ");T+=`${D}
|
|
79
|
-
`}catch(L){let U=B.domain||B.fullPath||"unknown";console.error(`Error processing ${U}:`,L),T+=`| **${U}** | Error retrieving package information | - | - | - |
|
|
80
|
-
`}T+=`
|
|
81
|
-
`}return T+=`## 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 A.promises.writeFile(H,Mw(T)),H}function nw(w,Q,$){if(w.includes("."))if(w.startsWith("github.com/")){let X=w.replace("github.com/","").split("/");if(X.length>=2){let H=X[0],q=X.slice(1).join("-");return E.join($,"github.com",H,`${q}.md`)}else{let H=X[0];return E.join($,"github.com",H,"index.md")}}else return E.join($,w,"index.md");else{let R=Q.toLowerCase();if(/^\d/.test(R))R=`pkg-${R}`;return R=R.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),E.join($,`${R}.md`)}}async function yQ(w,Q){let $=await Ew(Q),R=E.join(w,"packages");if(!A.existsSync(R))A.mkdirSync(R,{recursive:!0});let X=[],H=new Map;for(let[q,Z]of Object.entries($)){if(p(Z)){console.log(`Skipping package page for ${Z.domain||q} (placeholder data)`);continue}let Y=Z.domain;if(!H.has(Y))H.set(Y,{domainVarName:q,pkg:Z});else{let z=H.get(Y);if(q.length<z.domainVarName.length||q.length===z.domainVarName.length&&q<z.domainVarName)H.set(Y,{domainVarName:q,pkg:Z}),console.log(`Replaced ${z.domainVarName} with ${q} for domain ${Y}`)}}for(let{domainVarName:q,pkg:Z}of H.values())try{let Y=Z.domain||Z.fullPath||q,z;if(Y.includes("."))if(Y.startsWith("github.com/")){let M=Y.replace("github.com/","").split("/");if(M.length>=2){let S=M[0],C=M.slice(1).join("-"),F=E.join(R,"github.com",S);if(!A.existsSync(F))A.mkdirSync(F,{recursive:!0});z=E.join(F,`${C}.md`)}else{let S=M[0],C=E.join(R,"github.com",S);if(!A.existsSync(C))A.mkdirSync(C,{recursive:!0});z=E.join(C,"index.md")}}else{let U=E.join(R,Y);if(!A.existsSync(U))A.mkdirSync(U,{recursive:!0});z=E.join(U,"index.md")}else{let U=q.toLowerCase();if(/^\d/.test(U))U=`pkg-${U}`;U=U.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),z=E.join(R,`${U}.md`)}let J=Z.description||"",j=(U)=>{if(!Z.versions||Z.versions.length===0)return U.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let M=Z.versions[0],S=M.split("."),C=S[0]||"",F=S[1]||"",x=S[2]||"",V=F?`${C}.${F}`:C;return U.replace(/\{\{\s*version\.marketing\s*\}\}/g,V).replace(/\{\{\s*version\.major\s*\}\}/g,C).replace(/\{\{\s*version\.minor\s*\}\}/g,F).replace(/\{\{\s*version\.patch\s*\}\}/g,x).replace(/\{\{\s*version\.raw\s*\}\}/g,M).replace(/\{\{\s*version\s*\}\}/g,M).replace(/\{\{(?![^}]*\}\})/g,"{{")},T=j(Z.name||Y),O=j(J).replace(/\s+/g," "),W=`# ${T}
|
|
153
|
-
|
|
154
|
-
${O?`> ${O}`:""}
|
|
155
|
-
|
|
156
|
-
## Package Information
|
|
157
|
-
|
|
158
|
-
- **Domain**: \`${Y}\`
|
|
159
|
-
- **Name**: \`${T}\`
|
|
160
|
-
- **Homepage**: ${Z.homepageUrl||"Not specified"}
|
|
161
|
-
- **Source**: [View on GitHub](${Z.packageYmlUrl||`https://github.com/pkgxdev/pantry/tree/main/projects/${Y}/package.yml`})
|
|
162
|
-
|
|
163
|
-
## Installation
|
|
164
|
-
|
|
165
|
-
\`\`\`bash
|
|
166
|
-
# Install with pantry
|
|
167
|
-
${ew(Z)}
|
|
168
|
-
\`\`\`
|
|
169
|
-
|
|
170
|
-
## Programs
|
|
171
|
-
|
|
172
|
-
This package provides the following executable programs:
|
|
173
|
-
|
|
174
|
-
`;if(Z.programs&&Z.programs.length>0)Z.programs.forEach((U)=>{let M=j(U);W+=`- \`${M}\`
|
|
175
|
-
`});else W+=`No programs specified.
|
|
176
|
-
`;if(Z.aliases&&Z.aliases.length>0)W+=`
|
|
177
|
-
## Aliases
|
|
178
|
-
|
|
179
|
-
This package can also be accessed using these aliases:
|
|
180
|
-
|
|
181
|
-
`,Z.aliases.forEach((U)=>{let M=j(U);W+=`- \`${M}\`
|
|
182
|
-
`});if(Z.versions&&Z.versions.length>0){W+=`
|
|
183
|
-
## Available Versions
|
|
184
|
-
|
|
185
|
-
<details>
|
|
186
|
-
<summary>Show all ${Z.versions.length} versions</summary>
|
|
187
|
-
|
|
188
|
-
`;let U=new Map,M=[];Z.versions.forEach((S)=>{let C=S.split("."),F=C.length>=2?`${C[0]}.${C[1]}`:C[0];if(!U.has(F))U.set(F,[]),M.push(F);U.get(F).push(S)}),M.forEach((S)=>{let C=U.get(S);W+=`- ${C.map((F)=>`\`${F}\``).join(", ")}
|
|
189
|
-
`}),W+=`
|
|
190
|
-
</details>
|
|
191
|
-
|
|
192
|
-
**Latest Version**: \`${Z.versions[0]}\`
|
|
193
|
-
|
|
194
|
-
### Install Specific Version
|
|
195
|
-
|
|
196
|
-
\`\`\`bash
|
|
197
|
-
# Install specific version
|
|
198
|
-
${Z.pkgxInstallCommand?j(Z.pkgxInstallCommand.replace(`+${Y}`,`+${Y}@${Z.versions[0]}`)):`sh <(curl https://pkgx.sh) +${Y}@${Z.versions[0]} -- $SHELL -i`}
|
|
199
|
-
\`\`\`
|
|
200
|
-
`}if(Z.dependencies&&Z.dependencies.length>0)W+=`
|
|
201
|
-
## Dependencies
|
|
202
|
-
|
|
203
|
-
This package depends on:
|
|
204
|
-
|
|
205
|
-
`,Z.dependencies.forEach((U)=>{W+=`- \`${U}\`
|
|
206
|
-
`});if(Z.companions&&Z.companions.length>0){let U=Z.companions.filter((M)=>!xQ(M));if(U.length>0)W+=`
|
|
207
|
-
## Related Packages
|
|
208
|
-
|
|
209
|
-
These packages work well with ${Z.name||Y}:
|
|
210
|
-
|
|
211
|
-
`,U.forEach((M)=>{let S=k(M),C=$[S];if(C&&!p(C)){let F=nw(M,S,R),x=E.relative(E.dirname(z),F).replace(/\\/g,"/"),V=C.description?.trim();if(V)W+=`- [\`${M}\`](${x}) - ${V}
|
|
212
|
-
`;else W+=`- [\`${M}\`](${x})
|
|
213
|
-
`}else{let F=nw(M,S,R),x=E.relative(E.dirname(z),F).replace(/\\/g,"/"),V=C?.description?.trim()||"Package not available";if(V&&V!=="Package not available")W+=`- [\`${M}\`](${x}) - ${V}
|
|
214
|
-
`;else W+=`- [\`${M}\`](${x})
|
|
215
|
-
`}})}let G=E.dirname(R),K=`${E.relative(E.dirname(z),G)}/package-catalog.md`.replace(/\\/g,"/"),I=Z.aliases&&Z.aliases.length>0?Z.aliases[0]:Z.name||k(Y),L=/[^\w$]/.test(I)||/^\d/.test(I)?`pantry['${I}']`:`pantry.${I}`;W+=`
|
|
216
|
-
## Usage Examples
|
|
217
|
-
|
|
218
|
-
\`\`\`typescript
|
|
219
|
-
import { pantry } from 'ts-pkgx'
|
|
220
|
-
|
|
221
|
-
// Access this package
|
|
222
|
-
const pkg = ${L}
|
|
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](${Z.packageYmlUrl||`https://github.com/pkgxdev/pantry/tree/main/projects/${Y}/package.yml`})
|
|
232
|
-
- [Homepage](${Z.homepageUrl||"#"})
|
|
233
|
-
- [Back to Package Catalog](${K})
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
> Auto-generated from package data.
|
|
238
|
-
`,await A.promises.writeFile(z,Mw(W)),X.push(z)}catch(Y){console.error(`Error generating page for ${q}:`,Y)}return X}async function NQ(w,Q){let $=await Ew(Q),R=await Hw(Q),X=rw(),H=E.join(w,"categories");if(!A.existsSync(H))A.mkdirSync(H,{recursive:!0});let q=[],Z=(Y)=>{if($[Y])return{domainVarName:Y,pkg:$[Y]};if(R[Y]){let z=R[Y],J=k(z);if($[J])return{domainVarName:J,pkg:$[J]}}return null};for(let[Y,z]of Object.entries(X)){let J=new Map;z.forEach((G)=>{let _=Z(G);if(_&&!p(_.pkg)){let K=_.pkg.domain||_.pkg.fullPath||"unknown";if(!J.has(K))J.set(K,_);else{let I=J.get(K);if(_.domainVarName.length<I.domainVarName.length||_.domainVarName.length===I.domainVarName.length&&_.domainVarName<I.domainVarName)J.set(K,_)}}});let j=Array.from(J.values()).sort((G,_)=>(G.pkg.domain||G.domainVarName).localeCompare(_.pkg.domain||_.domainVarName));if(j.length===0)continue;let T=`${Y.toLowerCase().replace(/[^a-z0-9]+/g,"-")}.md`,O=E.join(H,T),W=`# ${Y}
|
|
239
|
-
|
|
240
|
-
${j.length} packages in this category
|
|
241
|
-
|
|
242
|
-
${Y==="Programming Languages"?"Popular programming languages and their runtimes available through pkgx.":Y==="Databases"?"Database systems and data storage solutions.":Y==="Development Tools"?"Development environments, editors, and programming tools.":Y==="Build Tools"?"Build systems, compilers, and development infrastructure.":Y==="DevOps"?"Tools for deployment, orchestration, and infrastructure management.":Y==="Multimedia"?"Audio, video, and image processing tools.":Y==="Security"?"Security tools, encryption, and authentication systems.":Y==="Networking"?"Network tools, protocols, and communication software.":Y==="CLI Tools & Utilities"?"Command-line utilities and system tools.":`Packages related to ${Y.toLowerCase()}.`}
|
|
243
|
-
|
|
244
|
-
## Packages
|
|
245
|
-
|
|
246
|
-
`;j.forEach(({domainVarName:G,pkg:_})=>{let K=_.domain||_.fullPath||"unknown",I=(C)=>{if(!_.versions||_.versions.length===0)return C.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let F=_.versions[0],x=F.split("."),V=x[0]||"",v=x[1]||"",P=x[2]||"",D=v?`${V}.${v}`:V;return C.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,F).replace(/\{\{\s*version\s*\}\}/g,F).replace(/\{\{(?![^}]*\}\})/g,"{{")},B=[];if(_.name&&_.name!==K)B.push(_.name);if(_.aliases&&_.aliases.length>0)B.push(..._.aliases);let L=B.length>0?` (${B.join(", ")})`:"",U=_.description||"",M=I(U).replace(/\s+/g," "),S;if(K.includes("."))if(K.startsWith("github.com/")&&K.includes("/")){let F=K.replace("github.com/","").split("/");if(F.length>=2){let x=F[0],V=F.slice(1).join("-");S=`../packages/github.com/${x}/${V}.md`}else{let x=G.toLowerCase();if(/^\d/.test(x))x=`pkg-${x}`;x=x.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),S=`../packages/${x}.md`}}else S=`../packages/${K}/index.md`;else{let C=G.toLowerCase();if(/^\d/.test(C))C=`pkg-${C}`;C=C.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),S=`../packages/${C}.md`}W+=`### [${K}](${S})${L}
|
|
247
|
-
|
|
248
|
-
${M?`${M}`:""}
|
|
249
|
-
|
|
250
|
-
**Programs**: ${_.programs&&_.programs.length>0?_.programs.map((C)=>I(C)).join(", "):"None specified"}
|
|
251
|
-
|
|
252
|
-
**Install**: \`${ew(_)}\`
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
`}),W+=`[← Back to Package Catalog](../package-catalog.md)
|
|
257
|
-
`,await A.promises.writeFile(O,Mw(W)),q.push(O)}return q}async function Tw(w=Bw,Q){console.log("\uD83D\uDE80 Generating comprehensive package documentation...");try{if(!A.existsSync(w))A.mkdirSync(w,{recursive:!0});console.log("\uD83D\uDCDA Generating package catalog...");let $=await VQ(w,Q);console.log(`✅ Generated: ${$}`),console.log("\uD83D\uDCC4 Generating individual package pages...");let R=await yQ(w,Q);console.log(`✅ Generated ${R.length} package pages`),console.log("\uD83D\uDCC2 Generating category pages...");let X=await NQ(w,Q);console.log(`✅ Generated ${X.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+R.length+X.length}`),console.log(`
|
|
259
|
-
Files generated:`),console.log(`- Package catalog: ${$}`),console.log(`- Package pages: ${R.length} files in docs/packages/`),console.log(`- Category pages: ${X.length} files in docs/categories/`)}catch($){throw console.error("❌ Error generating documentation:",$),$}}async function Lw(){try{console.log("\uD83C\uDFAF Updating Dependencies type timestamp...");let w=E.join(N.cwd(),"src","dependencies.ts");if(!A.existsSync(w)){console.log("dependencies.ts not found, skipping update");return}let Q=A.readFileSync(w,"utf-8"),$=new Date().toISOString(),R=Q.replace(/\/\/ Auto-generated precise dependency types/,`// Auto-generated precise dependency types
|
|
260
|
-
// Last updated: ${$}`);A.writeFileSync(w,R),console.log("✅ Updated dependencies.ts timestamp")}catch(w){console.error("Error updating dependencies.ts:",w)}}async function uQ(){try{let w=N.argv.slice(2);switch(w[0]||"index"){case"index":{if(console.log("\uD83D\uDD27 Generating package index..."),!await Ow())console.error("❌ Failed to generate index"),N.exit(1);if(console.log("\uD83C\uDFF7️ Generating aliases..."),!await jw())console.error("❌ Failed to generate aliases"),N.exit(1);console.log("\uD83C\uDFAF Updating PackageVersionMap..."),await Lw(),console.log("✨ Index and aliases generation completed successfully!");break}case"docs":{let $=w[1]||Bw;console.log(`\uD83D\uDCDA Generating documentation to ${$}...`),await Tw($),console.log("✨ Documentation generation completed successfully!");break}case"all":{if(console.log("\uD83D\uDE80 Generating everything..."),console.log("\uD83D\uDD27 Generating package index..."),!await Ow())console.error("❌ Failed to generate index"),N.exit(1);if(console.log("\uD83C\uDFF7️ Generating aliases..."),!await jw())console.error("❌ Failed to generate aliases"),N.exit(1);console.log("\uD83C\uDFAF Updating PackageVersionMap..."),await Lw();let X=w[1]||Bw;console.log(`\uD83D\uDCDA Generating documentation to ${X}...`),await Tw(X),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 PQ=import.meta.url===`file://${N.argv[1]}`||import.meta.url===`file:///${N.argv[1]}`;if(PQ)uQ();import s from"node:fs";import r from"node:path";import i from"node:process";async function DQ(w,Q={}){let{targetOs:$=i.platform==="darwin"?"darwin":i.platform==="win32"?"windows":"linux",includeOsSpecific:R=!0,maxDepth:X=10,verbose:H=!1}=Q,q=await sw(w,{targetOs:$,includeOsSpecific:R,maxDepth:X,verbose:H}),Z=Rw(w),Y=q.allDependencies.map((O)=>({name:O.name,version:O.version,constraint:O.constraint,isOsSpecific:O.isOsSpecific,os:O.os})),z=Z.map((O)=>O.name),J=`pkgx install ${z.join(" ")}`,j=`pantry install ${z.join(" ")}`,T=q.conflicts.map((O)=>{let W=Y.find((G)=>G.name===O.package);return{package:O.package,versions:O.versions,resolved:W?.version||"latest"}});return{packages:Y,directCount:Z.length,totalCount:Y.length,conflicts:T,pkgxCommand:J,pantryCommand:j}}async function i6(w,Q={}){let $=r.join(i.cwd(),`.temp-deps-${Date.now()}.yaml`);try{return s.writeFileSync($,w,"utf-8"),await DQ($,Q)}finally{if(s.existsSync($))s.unlinkSync($)}}async function a6(w,Q={}){let{targetOs:$=i.platform==="darwin"?"darwin":i.platform==="win32"?"windows":"linux",includeOsSpecific:R=!0,maxDepth:X=10}=Q,H=await Xw(w,{targetOs:$,includeOsSpecific:R,maxDepth:X});return H.unshift({name:w,version:"latest",constraint:"*",isOsSpecific:!1}),(await Gw(H,{targetOs:$,includeOsSpecific:R,maxDepth:X})).allDependencies.map((Z)=>({name:Z.name,version:Z.version,constraint:Z.constraint,isOsSpecific:Z.isOsSpecific,os:Z.os}))}function e6(w,Q="pantry"){if(Q==="pkgx")return`pkgx install ${w.join(" ")}`;return`pantry install ${w.join(" ")}`}function w$(w){let Q=[],$=r.join(w,"pantry");try{let H=s.readdirSync($,{withFileTypes:!0});for(let q of H){if(!q.isDirectory())continue;if(q.name.startsWith("@")){let Z=r.join($,q.name);try{let Y=s.readdirSync(Z,{withFileTypes:!0});for(let z of Y){if(!z.isDirectory())continue;let J=`${q.name}/${z.name}`,j=r.join(Z,z.name,"package.json"),T=wQ(j);Q.push({name:J,version:T,isWorkspace:J.startsWith("@stacksjs/"),isScoped:!0})}}catch{}}else{let Z=r.join($,q.name,"package.json"),Y=wQ(Z);Q.push({name:q.name,version:Y,isWorkspace:!1,isScoped:!1})}}}catch{}Q.sort((H,q)=>H.name.localeCompare(q.name));let R=Q.filter((H)=>H.isWorkspace).length,X=Q.length-R;return{packages:Q,thirdPartyCount:X,workspaceCount:R,totalCount:Q.length}}function wQ(w){try{let Q=s.readFileSync(w,"utf-8");return JSON.parse(Q).version||"0.0.0"}catch{return"0.0.0"}}Q6();function $$(w){return w}function R$(w){return w}var X$={baseUrl:"https://dist.pkgx.dev"};function Z$(w){return w}import{execSync as Cw}from"node:child_process";var a=new Set,QQ=!1;function hQ(){if(QQ)return;QQ=!0;let w=()=>{for(let Q of a)try{Cw(`pantry stop ${Q}`,{stdio:"ignore",timeout:1e4})}catch{}a.clear()};process.on("exit",w),process.on("SIGINT",()=>{w(),process.exit(130)}),process.on("SIGTERM",()=>{w(),process.exit(143)})}function Yw(w,Q=!1){let $={encoding:"utf-8",timeout:30000,stdio:Q?"pipe":["pipe","pipe","pipe"]};return Cw(`pantry ${w}`,$)}function vQ(w){let Q=w.match(/Name:\s+(\S+)/)?.[1]??"",$=/Status:\s+running/i.test(w),R=w.match(/Port:\s+(\d+)/),X=w.match(/PID:\s+(\d+)/),H=w.match(/Data Dir:\s+(.+)/);return{name:Q,running:$,port:R?Number.parseInt(R[1],10):null,pid:X?Number.parseInt(X[1],10):null,dataDir:H?H[1].trim():null}}class d{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 Cw("pantry --version",{stdio:"ignore",timeout:5000}),!0}catch{return!1}}status(){try{let w=Yw(`inspect ${this.config.name}`,!0);return vQ(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(hQ(),this.isRunning())return this.status();return Yw(`start ${this.config.name}`,this.config.quiet),this._startedByUs=!0,a.add(this.config.name),await this.waitReady(),this.status()}async stop(){if(!this._startedByUs)return;try{Yw(`stop ${this.config.name}`,this.config.quiet)}catch{}a.delete(this.config.name),this._startedByUs=!1}async forceStop(){try{Yw(`stop ${this.config.name}`,this.config.quiet)}catch{}a.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 $Q=new d({name:"postgres"});async function Iw(w){let Q=await $Q.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 Sw(){await $Q.stop()}function fQ(w){let Q=null;return{get connection(){if(!Q)throw Error("Postgres not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Iw(w)},afterAll:async()=>{await Sw(),Q=null}}}async function kQ(w,Q){let $=await Iw(Q);try{return await w($)}finally{if(Q?.stopAfter!==!1)await Sw()}}var RQ=new d({name:"redis"});async function Fw(w){let Q=await RQ.ensureRunning(),$=w?.port??Q.port??6379,R=w?.host??"localhost";return{port:$,host:R,url:`redis://${R}:${$}`}}async function Aw(){await RQ.stop()}function dQ(w){let Q=null;return{get connection(){if(!Q)throw Error("Redis not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Fw(w)},afterAll:async()=>{await Aw(),Q=null}}}async function gQ(w,Q){let $=await Fw(Q);try{return await w($)}finally{if(Q?.stopAfter!==!1)await Aw()}}var XQ=new d({name:"mysql"});async function bw(w){let Q=await XQ.ensureRunning();return{port:w?.port??Q.port??3306,host:w?.host??"localhost",database:w?.database??"test",username:w?.username??"root"}}async function xw(){await XQ.stop()}function mQ(w){let Q=null;return{get connection(){if(!Q)throw Error("MySQL not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await bw(w)},afterAll:async()=>{await xw(),Q=null}}}async function lQ(w,Q){let $=await bw(Q);try{return await w($)}finally{if(Q?.stopAfter!==!1)await xw()}}import{existsSync as Vw,mkdirSync as qQ,mkdtempSync as cQ,rmSync as HQ,writeFileSync as pQ}from"node:fs";import{tmpdir as oQ}from"node:os";import{join as yw}from"node:path";var Ww=new Set,ZQ=!1;function sQ(){if(ZQ)return;ZQ=!0;let w=()=>{for(let Q of Ww)try{if(Vw(Q))HQ(Q,{recursive:!0,force:!0})}catch{}Ww.clear()};process.on("exit",w),process.on("SIGINT",()=>{w(),process.exit(130)}),process.on("SIGTERM",()=>{w(),process.exit(143)})}function Nw(w="pantry-test-"){sQ();let Q=cQ(yw(oQ(),w));return Ww.add(Q),Q}function uw(w){Ww.delete(w);try{if(Vw(w))HQ(w,{recursive:!0,force:!0})}catch{}}async function nQ(w,Q){let $=Nw(w);try{return await Q($)}finally{uw($)}}function tQ(w,Q){let $=Nw(w);try{return Q($)}finally{uw($)}}function rQ(w,Q,$){let R=yw(w,Q),X=R.substring(0,R.lastIndexOf("/"));if(X&&!Vw(X))qQ(X,{recursive:!0});return pQ(R,$),R}function iQ(w,Q){let $=yw(w,Q);return qQ($,{recursive:!0}),$}import*as b from"node:fs";import*as y from"node:path";import*as n from"node:os";import*as Pw from"node:https";import*as Dw from"node:http";import{execSync as Jw}from"node:child_process";function YQ(){let w=n.platform(),Q=n.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"},R={darwin:"macos",linux:"linux",windows:"windows"},X=$[Q.arch],H=R[Q.os],q=Q.os==="windows"?"zip":"tar.xz";if(w.includes("-dev"))return`https://ziglang.org/builds/zig-${X}-${H}-${w}.${q}`;return`https://ziglang.org/download/${w}/zig-${X}-${H}-${w}.${q}`},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"},R={darwin:"macos",linux:"linux",windows:"windows"};return`zig-${$[Q.arch]}-${R[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"},R=`${Q.os}-${Q.arch}`,X=$[R]||"linux-x64";return`https://github.com/oven-sh/bun/releases/download/bun-v${w}/bun-${X}.zip`},getArchiveFormat(){return"zip"},getBinaries(w){return w.os==="windows"?["bun.exe"]:["bun","bunx"]},getArchivePrefix(w,Q){return{"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"}[`${Q.os}-${Q.arch}`]||"bun-linux-x64"}},"nodejs.org":{getDownloadUrl(w,Q){let $={darwin:"darwin",linux:"linux",windows:"win"},R={x86_64:"x64",aarch64:"arm64"},X=Q.os==="windows"?"zip":"tar.xz";return`https://nodejs.org/dist/v${w}/node-v${w}-${$[Q.os]}-${R[Q.arch]}.${X}`},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"},R={x86_64:"x64",aarch64:"arm64"};return`node-v${w}-${$[Q.os]}-${R[Q.arch]}`}}};async function aQ(w,Q,$={}){let R=YQ(),X=e[w];if(!X)throw Error(`Unknown package: ${w}. Supported: ${Object.keys(e).join(", ")}`);let H=$.installDir||y.join(process.cwd(),"pantry"),q=y.join(H,".bin"),Z=y.join(H,w.replace(/\./g,"-"),Q),Y=X.getBinaries(R),z=y.join(Z,Y[0]);if(b.existsSync(z)){if(!$.quiet)console.log(` ✓ ${w}@${Q} (cached)`);return{name:w,version:Q,installPath:Z,binaries:Y}}let J=X.getDownloadUrl(Q,R),j=X.getArchiveFormat(R);if(!$.quiet)console.log(` → ${w}@${Q} from ${new URL(J).hostname}`);let T=b.mkdtempSync(y.join(n.tmpdir(),"pantry-")),O=y.join(T,`archive.${j}`);try{await WQ(J,O);let W=y.join(T,"extracted");b.mkdirSync(W,{recursive:!0}),await eQ(O,W,j);let G=W,_=X.getArchivePrefix?.(Q,R);if(_){let K=y.join(W,_);if(b.existsSync(K))G=K;else{let B=b.readdirSync(W).find((L)=>b.statSync(y.join(W,L)).isDirectory());if(B)G=y.join(W,B)}}if(b.mkdirSync(Z,{recursive:!0}),w6(G,Z),R.os!=="windows")for(let K of Y){let I=y.join(Z,K);if(b.existsSync(I))b.chmodSync(I,493);let B=y.join(Z,"bin",K);if(b.existsSync(B))b.chmodSync(B,493)}if($.createBinLinks!==!1){b.mkdirSync(q,{recursive:!0});let K=null;for(let I of Y){let B=y.join(Z,I);if(!b.existsSync(B))B=y.join(Z,"bin",I);if(!b.existsSync(B)){if(K){let U=y.join(q,I);try{b.unlinkSync(U)}catch{}if(R.os==="windows")b.copyFileSync(K,U);else b.symlinkSync(K,U)}continue}if(!K)K=B;let L=y.join(q,I);try{b.unlinkSync(L)}catch{}if(R.os==="windows")b.copyFileSync(B,L);else b.symlinkSync(B,L)}}if(!$.quiet)console.log(` ✓ ${w}@${Q}`);return{name:w,version:Q,installPath:Z,binaries:Y}}finally{try{b.rmSync(T,{recursive:!0,force:!0})}catch{}}}async function F$(w,Q={}){return Promise.all(w.map(($)=>aQ($.domain,$.version,Q)))}async function A$(w){if(w==="bun.sh")return((await zw("https://api.github.com/repos/oven-sh/bun/releases/latest").catch(()=>null))?.tag_name||"").replace(/^bun-v/,"");if(w==="ziglang.org")return(await zw("https://ziglang.org/download/index.json")).master?.version||"";if(w==="nodejs.org"){let $=await zw("https://nodejs.org/dist/index.json");return($.find((X)=>X.lts)?.version||$[0]?.version||"").replace(/^v/,"")}throw Error(`Cannot resolve latest version for ${w}`)}function WQ(w,Q){return new Promise(($,R)=>{let X=b.createWriteStream(Q);(w.startsWith("https")?Pw.get:Dw.get)(w,(q)=>{if(q.statusCode&&q.statusCode>=300&&q.statusCode<400&&q.headers.location)return X.close(),b.unlinkSync(Q),WQ(q.headers.location,Q).then($,R);if(q.statusCode&&q.statusCode>=400)return X.close(),R(Error(`HTTP ${q.statusCode} downloading ${w}`));q.pipe(X),X.on("finish",()=>{X.close(),$()}),X.on("error",R)}).on("error",(q)=>{X.close(),R(q)})})}async function eQ(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 xf "${w}" -C "${Q}"`,{stdio:"pipe"});else if($==="tar.gz")Jw(`tar xzf "${w}" -C "${Q}"`,{stdio:"pipe"});else throw Error(`Unsupported archive format: ${$}`)}function w6(w,Q){b.cpSync(w,Q,{recursive:!0})}function zw(w){return new Promise((Q,$)=>{(w.startsWith("https")?Pw.get:Dw.get)(w,{headers:{"User-Agent":"pantry-installer"}},(X)=>{if(X.statusCode&&X.statusCode>=300&&X.statusCode<400&&X.headers.location)return zw(X.headers.location).then(Q,$);let H="";X.on("data",(q)=>H+=q),X.on("end",()=>{try{Q(JSON.parse(H))}catch(q){$(q)}})}).on("error",$)})}function b$(w){return w in e}function x$(){return Object.keys(e)}function V$(w){let Q=e[w];if(!Q)return;let $=YQ();return Q.getBinaries($)[0]}export{vw as a,KQ as b,X6 as c,Z6 as d,q6 as e,fw as f,H6 as g,Y6 as h,W6 as i,J6 as j,ww as k,z6 as l,K6 as m,kw as n,U6 as o,G6 as p,_6 as q,B6 as r,O6 as s,M6 as t,C6 as u,I6 as v,S6 as w,F6 as x,A6 as y,b6 as z,x6 as A,V6 as B,y6 as C,N6 as D,u6 as E,Rw as F,GQ as G,v6 as H,ow as I,g as J,Xw as K,Gw as L,sw as M,f6 as N,iw as O,IQ as P,SQ as Q,Ow as R,jw as S,Tw as T,Lw as U,DQ as V,i6 as W,a6 as X,e6 as Y,w$ as Z,$$ as _,R$ as $,X$ as aa,Z$ as ba,d as ca,Iw as da,Sw as ea,fQ as fa,kQ as ga,Fw as ha,Aw as ia,dQ as ja,gQ as ka,bw as la,xw as ma,mQ as na,lQ as oa,Nw as pa,uw as qa,nQ as ra,tQ as sa,rQ as ta,iQ as ua,aQ as va,F$ as wa,A$ as xa,b$ as ya,x$ as za,V$ as Aa};
|
package/dist/chunk-tjxmz5d2.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import{lb as k,mb as c,nb as p}from"./chunk-c5xmxyxn.js";import{Hb as h,Ib as GQ}from"./chunk-q7s2k65w.js";import{Jb as $Q,Kb as qQ}from"./chunk-p9e5z92g.js";import{Pb as QQ}from"./chunk-yjz3e391.js";import H from"node:fs";import w from"node:path";import I from"node:process";GQ();var JQ=async(...Q)=>null;function m(Q,K){let G=Q.replace(/^v/,"").split("."),$=K.replace(/^v/,"").split(".");for(let q=0;q<Math.max(G.length,$.length);q++){let Z=Number.parseInt(G[q]||"0",10),X=Number.parseInt($[q]||"0",10);if(!Number.isNaN(Z)&&!Number.isNaN(X)){if(Z!==X)return X-Z}else{let Y=($[q]||"").localeCompare(G[q]||"");if(Y!==0)return Y}}return 0}function a(Q){if(Q.includes("/")){let[K,...G]=Q.split("/"),$=G.join("/"),q=K.replace(/\./g,"");if(K.includes("github.com")){let X=$.split("/");return X[X.length-1].replace(/[.-]/g,"").toLowerCase()}let Z=$.replace(/[/.-]/g,"");return`${q}${Z}`.toLowerCase()}return Q.replace(/\./g,"").toLowerCase()}function YQ(Q,K){switch(Q){case"versions":if(Array.isArray(K)&&K.length>0)return` /**
|
|
2
|
-
* Available versions from newest to oldest.
|
|
3
|
-
* @see https://ts-pantry.netlify.app/usage for installation instructions
|
|
4
|
-
*/`;break;case"programs":if(Array.isArray(K)&&K.length>0)return` /**
|
|
5
|
-
* Executable programs provided by this package.
|
|
6
|
-
* These can be run after installation.
|
|
7
|
-
*/`;break;case"dependencies":if(Array.isArray(K)&&K.length>0)return` /**
|
|
8
|
-
* Runtime dependencies for this package.
|
|
9
|
-
* These are required when running the package.${K.some((q)=>typeof q==="string"&&q.includes(":"))?"\n * OS-specific dependencies are prefixed with `os:` (e.g., `linux:freetype.org`).":""}
|
|
10
|
-
*/`;break;case"buildDependencies":if(Array.isArray(K)&&K.length>0)return` /**
|
|
11
|
-
* Build dependencies for this package.
|
|
12
|
-
* These are only required when building the package from source.${K.some((q)=>typeof q==="string"&&q.includes(":"))?"\n * OS-specific dependencies are prefixed with `os:` (e.g., `linux:gnu.org/gcc`).":""}
|
|
13
|
-
*/`;break;case"companions":if(Array.isArray(K)&&K.length>0)return` /**
|
|
14
|
-
* Related packages that work well with this package.
|
|
15
|
-
* Consider installing these for enhanced functionality.
|
|
16
|
-
*/`;break;case"aliases":if(Array.isArray(K)&&K.length>0)return` /**
|
|
17
|
-
* Alternative names for this package.
|
|
18
|
-
* You can use any of these names to access the package.
|
|
19
|
-
*/`;break;case"installCommand":return` /**
|
|
20
|
-
* Command to install this package using pantry.
|
|
21
|
-
* @example pantry install package-name
|
|
22
|
-
*/`;case"description":return` /**
|
|
23
|
-
* Brief description of what this package does.
|
|
24
|
-
*/`;case"domain":return` /**
|
|
25
|
-
* The canonical domain name for this package.
|
|
26
|
-
*/`;case"name":return` /**
|
|
27
|
-
* The display name of this package.
|
|
28
|
-
*/`;default:return null}return null}function ZQ(Q){let K=[];K.push("{");for(let[G,$]of Object.entries(Q)){if(G==="fetchedAt")continue;let q=YQ(G,$);if(q)K.push(q);if($===void 0){K.push(` ${G}: undefined,`);continue}if(Array.isArray($))if($.length===0)K.push(` ${G}: [] as const,`);else if(typeof $[0]==="string"){let Z=$;if(G==="aliases"){let X=Q.name;Z=$.filter((Y)=>{if(Y.includes("--")||Y.includes("$SHELL")||Y.includes("+")||Y.includes("(")||Y.includes(")"))return!1;if(Y===X)return!1;return!0})}if(Z.length===0)K.push(` ${G}: [] as const,`);else{K.push(` ${G}: [`);for(let X of Z)K.push(` '${String(X).replace(/'/g,"\\'")}',`);K.push(" ] as const,")}}else{let Z=JSON.stringify($).replace(/"/g,"'");K.push(` ${G}: ${Z} as const,`)}else if(typeof $==="string")K.push(` ${G}: '${String($).replace(/'/g,"\\'")}' as const,`);else if(typeof $==="number"||typeof $==="boolean")K.push(` ${G}: ${$} as const,`);else if($===null)K.push(` ${G}: null,`);else if(typeof $==="object")K.push(` ${G}: ${ZQ($)},`);else{let Z=JSON.stringify($).replace(/"/g,"'");K.push(` ${G}: ${Z},`)}}return K.push("}"),K.join(`
|
|
29
|
-
`)}function WQ(Q,K,G){let $=[];if($.push("/**"),Q.description)$.push(` * **${G}** - ${Q.description.trim()}`);else $.push(` * **${G}** - pkgx package`);if($.push(" *"),$.push(` * @domain \`${Q.domain||K}\``),Q.programs&&Q.programs.length>0){let q=Q.programs.slice(0,5).join("`, `"),Z=Q.programs.length>5?`, ... (+${Q.programs.length-5} more)`:"";$.push(` * @programs \`${q}\`${Z}`)}if(Q.versions&&Q.versions.length>0)$.push(` * @version \`${Q.versions[0]}\` (${Q.versions.length} versions available)`),$.push(" * @versions From newest version to oldest.");if(Q.installCommand)$.push(" *"),$.push(` * @install \`${Q.installCommand}\``);if(Q.aliases&&Q.aliases.length>0){let q=Q.aliases.filter((Z)=>{return!Z.includes("--")&&!Z.includes("$SHELL")&&!Z.includes("+")&&!Z.includes("(")&&!Z.includes(")")});if(q.length>0){let Z=Q.name,X=q.filter((W)=>W!==Z),Y=q.find((W)=>W===Z);if(Y)$.push(` * @name \`${Y}\``);if(X.length>0)$.push(` * @aliases ${X.map((W)=>`\`${W}\``).join(", ")}`)}}if(Q.homepageUrl)$.push(` * @homepage ${Q.homepageUrl}`);if(Q.dependencies&&Q.dependencies.length>0){let q=Q.dependencies.slice(0,3).join("`, `"),Z=Q.dependencies.length>3?`, ... (+${Q.dependencies.length-3} more)`:"",Y=Q.dependencies.some((W)=>W.includes(":"))?" (includes OS-specific dependencies with `os:package` format)":"";$.push(` * @dependencies \`${q}\`${Z}${Y}`)}if(Q.buildDependencies&&Q.buildDependencies.length>0){let q=Q.buildDependencies.slice(0,3).join("`, `"),Z=Q.buildDependencies.length>3?`, ... (+${Q.buildDependencies.length-3} more)`:"",Y=Q.buildDependencies.some((W)=>W.includes(":"))?" (includes OS-specific dependencies with `os:package` format)":"";$.push(` * @buildDependencies \`${q}\`${Z}${Y} - required only when building from source`)}if(Q.companions&&Q.companions.length>0){let q=Q.companions.slice(0,3).join("`, `"),Z=Q.companions.length>3?`, ... (+${Q.companions.length-3} more)`:"";$.push(` * @companions \`${q}\`${Z}`)}if($.push(" *"),$.push(" * @example"),$.push(" * ```typescript"),$.push(" * import { pantry } from 'ts-pantry'"),$.push(" *"),Q.aliases&&Q.aliases.length>0){let q=Q.aliases.find((Z)=>{return!Z.includes("--")&&!Z.includes("$SHELL")&&!Z.includes("+")&&!Z.includes("(")&&!Z.includes(")")});if(q){let Z=q.replace(/[^a-z0-9]/gi,""),X=K.replace(/[.-]/g,"").replace(/\//g,"").toLowerCase();if(q===Q.name)$.push(" * // Access the package"),$.push(` * const pkg = pantry.${Z}`),$.push(" * // Or access via domain"),$.push(` * const samePkg = pantry.${X}`),$.push(" * console.log(pkg === samePkg) // true");else $.push(" * // Access via alias (recommended)"),$.push(` * const pkg = pantry.${Z}`),$.push(" * // Or access via domain"),$.push(` * const samePkg = pantry.${X}`),$.push(" * console.log(pkg === samePkg) // true")}else{let Z=K.replace(/[.-]/g,"").replace(/\//g,"").toLowerCase();$.push(` * const pkg = pantry.${Z}`)}}else{let q=K.replace(/[.-]/g,"").replace(/\//g,"").toLowerCase();$.push(` * const pkg = pantry.${q}`)}if($.push(` * console.log(pkg.name) // "${Q.name||G}"`),Q.description){let q=Q.description.length>50?`${Q.description.substring(0,47)}...`:Q.description;$.push(` * console.log(pkg.description) // "${q}"`)}if(Q.programs&&Q.programs.length>0)$.push(` * console.log(pkg.programs) // [${Q.programs.slice(0,2).map((q)=>`"${q}"`).join(", ")}${Q.programs.length>2?", ...":""}]`);if(Q.versions&&Q.versions.length>0)$.push(` * console.log(pkg.versions[0]) // "${Q.versions[0]}" (latest)`);return $.push(" * ```"),$.push(" *"),$.push(` * @see https://ts-pantry.netlify.app/packages/${K.replace(/\./g,"-")}.md`),$.push(" * @see https://ts-pantry.netlify.app/usage"),$.push(" */"),$.join(`
|
|
30
|
-
`)}function zQ(Q,K){function G(W){if(!W||W.length<2)return!1;if(W.includes("--")||W.includes("$SHELL")||W.includes("+")||W.includes("(")||W.includes(")"))return!1;if(["cli","app","tool","server","client","api","lib","core"].includes(W.toLowerCase()))return!1;if(/^[\d.]+$/.test(W)&&/^\d/.test(W))return!1;return!0}let $,q;if(K==="classic.yarnpkg.com")$="classicYarnPackage",q="yarn";else if(K==="yarnpkg.com")$="yarnPackage",q="yarn";else if(Q.aliases&&Q.aliases.length>0){let W=Q.aliases.find((J)=>G(J));if(W){let J=W.replace(/[^a-z0-9]/gi,"");$=`${J.charAt(0).toLowerCase()}${J.slice(1)}Package`,q=W}else $=`${a(K)}Package`,q=Q.name||K}else $=`${a(K)}Package`,q=Q.name||K;let Z=$.replace(/[^\w$]/g,""),X=WQ(Q,K,q),Y=ZQ(Q);return`${X}
|
|
31
|
-
export const ${Z} = ${Y}
|
|
32
|
-
|
|
33
|
-
export type ${Z.charAt(0).toUpperCase()+Z.slice(1)} = typeof ${Z}
|
|
34
|
-
`}function r(Q){let K=Q.replace(/\{\{[^}]*\}\}/g,"").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");if(!K||K.length===0)return"package";let G=K.replace(/[^\w.-]/g,"-");if(G.length>200)G=`${G.substring(0,150)}...${G.substring(G.length-45)}`;return G}function N(Q,K,G){if(!H.existsSync(Q))H.mkdirSync(Q,{recursive:!0});let $;if(K.includes("/")){let X=K.split("/"),Y=X[0],W=X.slice(1),J=w.join(Q,Y,...W.slice(0,-1));if(!H.existsSync(J))H.mkdirSync(J,{recursive:!0});let B=r(W[W.length-1]);$=w.join(J,`${B}.ts`)}else{let X=K.replace(/\./g,"");$=w.join(Q,`${X}.ts`)}let q={...G};delete q.fetchedAt;let Z=zQ(q,K);return H.writeFileSync($,Z),$}function AQ(Q,K){if(!H.existsSync(Q))return[];let G=new Set;for(let X of K)if(X.includes("/")){let Y=X.split("/"),W=Y[0],J=Y.slice(1),B=r(J[J.length-1]);G.add(w.resolve(Q,W,...J.slice(0,-1),`${B}.ts`))}else{let Y=X.replace(/\./g,"");G.add(w.resolve(Q,`${Y}.ts`))}let $=new Set(["index.ts","aliases.ts","types.ts"]),q=[];function Z(X){if(!H.existsSync(X))return;for(let Y of H.readdirSync(X,{withFileTypes:!0})){let W=w.join(X,Y.name);if(Y.isDirectory()){if(Z(W),H.existsSync(W)&&H.readdirSync(W).length===0)H.rmdirSync(W)}else if(Y.name.endsWith(".ts")&&!$.has(Y.name)){if(!G.has(w.resolve(W)))H.unlinkSync(W),q.push(W)}}}return Z(Q),q}function _Q(Q,K={}){try{let G=K.cacheDir||k;if(K.cache===!1)return console.log(`Cache disabled for ${Q}, skipping cache check`),null;let q=(h[Q]||Q).replace(/\//g,"-"),Z=w.join(G,`${q}.json`);if(console.log(`Checking for cache file: ${Z}`),!H.existsSync(Z))return null;let X=JSON.parse(H.readFileSync(Z,"utf-8"));if(!X.fetchedAt)return console.log(`Cache for ${Q} missing fetchedAt timestamp, invalidating`),null;if(["Crafters of fine Open Source products","Go home.","Package information for","pkgx package","Loading...","Please wait..."].some((A)=>X.description&&X.description.includes(A)))return console.log(`Cache for ${Q} has generic description "${X.description}", invalidating`),null;if(!X.versions||X.versions.length===0)return console.log(`Cache for ${Q} has no versions, invalidating`),null;let B=(K.cacheExpirationMinutes||c)*60*1000,C=Date.now();if(C-X.fetchedAt>B)return console.log(`Cache for ${Q} has expired (age: ${Math.round((C-X.fetchedAt)/60000)} minutes)`),null;return console.log(`Using cached data for ${Q} (age: ${Math.round((C-X.fetchedAt)/60000)} minutes)`),{packageInfo:X,filePath:Z}}catch(G){return console.error(`Error reading cache for ${Q}:`,G),null}}function jQ(Q,K,G={}){let $={...K,fetchedAt:Date.now()},q=G.cacheDir||k;if(!H.existsSync(q))H.mkdirSync(q,{recursive:!0});let Z=Q.replace(/\//g,"-"),X=w.join(q,`${Z}.json`);H.writeFileSync(X,JSON.stringify($,null,2));let Y=G.outputDir||"packages";if(!H.existsSync(Y))H.mkdirSync(Y,{recursive:!0});let W=N(Y,Q,K);return{cachePath:X,outputPath:W}}function KQ(){return Promise.resolve()}async function SQ(Q={}){let K=Q.apiUrl||"https://api.github.com/repos/pkgxdev/pantry/contents/projects";try{console.log(`Fetching projects from GitHub API: ${K}`);let G=await fetch(K,{headers:{Accept:"application/vnd.github.v3+json"}});if(!G.ok)throw Error(`Failed to fetch from GitHub API: ${G.statusText}`);let q=(await G.json()).filter((Z)=>Z.type==="dir").map((Z)=>({name:Z.name,url:Z.html_url}));return console.log(`Retrieved ${q.length} projects from GitHub API`),q.sort((Z,X)=>Z.name.localeCompare(X.name)),q}catch(G){throw console.error("Error fetching projects from GitHub API:",G),G}}async function t(Q,K={}){let G=Q,$=Q;if(Q.includes("/")){let[q,Z]=Q.split("/");console.log(`Identified nested package: domain=${q}, name=${Z}`)}if(h[Q])console.log(`'${Q}' is an alias for '${h[Q]}', redirecting...`),$=h[Q],Q=h[Q];try{let q=K.timeout||p,Z=await JQ(Q,{timeout:q,useClientSideScraper:!0}),X={name:Z.displayName||Z.name||Q.split("/").pop()||Q,domain:Z.domain||Q,description:Z.description||Z.brief||"",packageYmlUrl:`https://github.com/pkgxdev/pantry/tree/main/projects/${Q}/package.yml`,homepageUrl:Z.homepage||"",githubUrl:Z.github||"",installCommand:`pantry install ${Q}`,pkgxInstallCommand:`sh <(curl https://pkgx.sh) +${Q} -- $SHELL -i`,pantryInstallCommand:`pantry install ${Q}`,programs:Z.provides||[],companions:Array.isArray(Z.companions)?Z.companions:[],dependencies:Array.isArray(Z.dependencies)?Z.dependencies:[],buildDependencies:Z.buildDependencies||[],versions:Z.versions||[],aliases:[]};if(!X.versions||X.versions.length===0){let Y=X.domain||Q;if(!["apache.org","breakfastquay.com","catb.org","bloomreach.com","cairographics.org","certifi.io","charm.sh","aws.amazon.com","google.com","microsoft.com","mozilla.org","freedesktop.org","gnome.org","kde.org","sourceforge.net","sf.net"].some((J)=>Y.startsWith(J)))try{let J=X.domain||Q,B=await HQ(J);X.versions=B}catch(J){console.warn(`Failed to fetch versions for ${Q} from GitHub API:`,J),X.versions=[]}}if(X.versions&&X.versions.length>0)try{X.versions.sort((Y,W)=>{try{return-1*Bun.semver.order(Y,W)}catch{return m(Y,W)}})}catch(Y){console.warn(`Warning: Failed to sort versions for ${Q} using semver:`,Y)}return X.name=X.name||G,X.domain=X.domain||$,X.programs=X.programs||[],X.companions=X.companions||[],X.dependencies=X.dependencies||[],X.versions=X.versions||[],{packageInfo:X,originalName:G,fullDomainName:$}}catch(q){return console.error(`Error in fetchPantryPackage for ${Q}:`,q),RQ(Q,G,$)}}async function HQ(Q){try{let{shouldProceedWithGitHubRequest:K,saveRateLimitInfo:G}=await import("./chunk-t71cv3gr.js");if(!K())return console.warn("Skipping GitHub API request for versions due to rate limiting"),[];let $=await fetch(`https://api.github.com/repos/pkgxdev/pantry/contents/projects/${Q}`,{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"ts-pantry"},signal:AbortSignal.timeout(15000)});if(G($.headers),$.status===403){let Z=$.headers.get("X-RateLimit-Remaining"),X=$.headers.get("X-RateLimit-Reset"),Y=X?new Date(Number(X)*1000).toLocaleString():"unknown";return console.warn(`GitHub API rate limit exceeded. Remaining: ${Z||0}, Reset: ${Y}`),[]}if(!$.ok)throw Error(`GitHub API responded with ${$.status}: ${$.statusText}`);return(await $.json()).filter((Z)=>Z.name.match(/^v\d+/)).map((Z)=>Z.name)}catch(K){return console.error("Error fetching versions from GitHub:",K),[]}}var LQ=300000,l=null;function UQ(){let Q=async(K)=>{if(console.log(`
|
|
35
|
-
Received ${K} signal. Cleaning up resources...`),l)clearInterval(l);await KQ(),console.log("Resources cleaned up. Exiting."),setTimeout(()=>{console.log("Forcing process exit..."),I.exit(0)},5000)};I.on("SIGINT",()=>Q("SIGINT")),I.on("SIGTERM",()=>Q("SIGTERM")),I.on("uncaughtException",(K)=>{console.error("Uncaught exception:",K),Q("uncaughtException")})}UQ();I.on("uncaughtException",(Q)=>{let K=String(Q);if(console.error("Uncaught exception caught:",Q.message),Q.message.includes("No target found for targetId")||Q.message.includes("Assertion error")||Q.message.includes("Target page, context or browser has been closed")||Q.message.includes("Failed to connect")||Q.message.includes("Connection closed")||Q.message.includes("Protocol error")||K.includes("WebSocket connection closed")||Q.message.includes("Browser has been closed")){console.error("Browser/network connection error detected, continuing execution...");return}console.error("Non-browser error, exiting..."),I.exit(1)});I.on("unhandledRejection",(Q,K)=>{let G=String(Q);if(console.error("Unhandled rejection caught:",G),G.includes("No target found for targetId")||G.includes("Assertion error")||G.includes("Target page, context or browser has been closed")||G.includes("Failed to connect")||G.includes("Connection closed")||G.includes("Protocol error")||G.includes("WebSocket connection closed")||G.includes("Browser has been closed")){console.error("Browser/network connection error in promise, continuing execution...");return}console.error("Non-browser promise rejection, exiting..."),I.exit(1)});function yQ(){if(l)clearInterval(l);l=setInterval(()=>{console.log("Running periodic browser resource cleanup..."),KQ().then(()=>console.log("Periodic cleanup completed")).catch((Q)=>console.error("Error during periodic cleanup:",Q))},LQ)}async function vQ(Q={}){let K=Q.timeout||p,G=Q.outputDir||"packages",$=Q.cacheDir||k,q=Q.cache!==!1,Z=Q.cacheExpirationMinutes||c,X=Math.min(Q.concurrency||6,8),Y=Q.pantryDir||"src/pantry";if(!Q.outputJson)console.log(`Starting bulk fetch with concurrency: ${X}, timeout: ${K}ms`);let W=Date.now(),J=[];try{if(!Q.outputJson)console.log("Scanning local pantry for packages...");try{if(J=await OQ(Y),!Q.outputJson)console.log(`Found ${J.length} packages in local pantry`)}catch(j){if(!Q.outputJson)console.warn("Failed to scan local pantry, falling back to consts:",j);try{let{ALL_KNOWN_PACKAGES:z}=await import("./chunk-zsgm3kjz.js");if(J=[...z].filter((L)=>L&&L!=="undefined"&&L!=="aliases"&&L!=="index"),!Q.outputJson)console.log(`Using comprehensive package list: ${J.length} packages`)}catch(z){if(!Q.outputJson)console.warn("Failed to load consts, falling back to GitHub API:",z);try{let L=await fetch("https://api.github.com/repos/pkgxdev/pantry/contents/projects",{headers:{"User-Agent":"ts-pantry-fetcher",Accept:"application/vnd.github.v3+json"}});if(L.ok){let U=(await L.json()).filter((V)=>V.type==="dir").map((V)=>V.name).sort();if(!Q.outputJson)console.log(`Retrieved ${U.length} projects from GitHub API`);J=U}else throw Error(`GitHub API returned ${L.status}`)}catch(L){if(!Q.outputJson)console.warn("Failed to fetch from GitHub API, falling back to local discovery:",L);if(H.existsSync(G))J=H.readdirSync(G).filter((U)=>U.endsWith(".ts")).map((U)=>w.basename(U,".ts")),console.log(`Found ${J.length} existing packages`)}}}if(J.length===0)return console.error("No packages found to process"),[];let B=["android.com","apache.org","akuity.io","alsa-project.org","anchore.com","aomedia.googlesource.com","apollographql.com","facebook.com","google.com","microsoft.com","mozilla.org","sourceforge.net","x.org","xiph.org","yui.github.io","crates.io","gitlab.com","github.com"],C=new Set,A=J.filter((j)=>j.startsWith("github.com/"));for(let j of A){let z=j.split("/");if(z.length>2){let L=z.slice(0,2).join("/");C.add(L)}}if(J=J.filter((j)=>{if(j.endsWith("/.pkgroot"))return console.log(`Filtering out .pkgroot marker: ${j}`),!1;if(j.endsWith("/README.rst"))return console.log(`Filtering out README.rst documentation: ${j}`),!1;if(j==="agwa.name")return console.log("Filtering out standalone agwa.name - only agwa.name/git-crypt is valid"),!1;if(B.includes(j))return console.log(`Filtering out parent domain ${j} - only has nested packages`),!1;if(C.has(j))return console.log(`Filtering out GitHub parent path ${j} - only has nested packages`),!1;if(j==="undefined"||j==="aliases"||j==="index")return!1;return!0}),console.log(`Found ${J.length} packages to process`),Q.limit&&Q.limit>0)J=J.slice(0,Q.limit),console.log(`Limited to ${J.length} packages`);let F=[],E=[],x=0,_=Math.min(X,6),O=[];for(let j=0;j<J.length;j+=_)O.push(J.slice(j,j+_));if(!Q.outputJson)console.log(`Processing ${J.length} packages in ${O.length} batches...`);for(let j=0;j<O.length;j++){let z=O[j];if(!Q.outputJson)console.log(`Processing batch ${j+1}/${O.length} (${z.length} packages)`);let L=z.map(async(R)=>{try{let S=w.join($,`${R.replace(/\//g,"-")}.json`);if(q&&H.existsSync(S)){let d=H.statSync(S),u=(Date.now()-d.mtime.getTime())/60000;if(u<Z){if(!Q.outputJson)console.log(`Using cached data for ${R} (age: ${Math.round(u)} minutes)`);try{let g=JSON.parse(H.readFileSync(S,"utf-8"));delete g.fetchedAt;let f=N(G,R,g);if(!Q.outputJson)console.log(`Using cached data for ${R} (saved to ${f})`);return{success:!0,packageName:R}}catch{console.warn(`Cache file corrupted for ${R}, will refetch`)}}}let v=await VQ(R,{...Q,pantryDir:Y,timeout:K,cache:q,cacheDir:$,cacheExpirationMinutes:Z});if(v){let{outputPath:d}=jQ(R,v.packageInfo,{cacheDir:$,outputDir:G,cache:q});if(!Q.outputJson)console.log(`Successfully processed ${R} (saved to ${d})`);return{success:!0,packageName:R}}else return console.warn(`Failed to fetch ${R}`),{success:!1,packageName:R}}catch(S){return console.error(`Error processing ${R}:`,S),{success:!1,packageName:R}}}),M=await Promise.allSettled(L);for(let R of M)if(x++,R.status==="fulfilled")if(R.value.success)F.push(R.value.packageName);else E.push(R.value.packageName);else console.error("Batch promise rejected:",R.reason),E.push("unknown");let U=Math.round((Date.now()-W)/1000),V=Math.round(x/U*10)/10,y=Math.round((J.length-x)/V);if(!Q.outputJson)console.log(`Batch ${j+1}/${O.length} complete. Progress: ${x}/${J.length} (${Math.round(x/J.length*100)}%) | Success: ${F.length} | Failed: ${E.length} | Rate: ${V}/s | ETA: ${y}s`);if(j<O.length-1)await new Promise((R)=>setTimeout(R,1000))}let T=Math.round((Date.now()-W)/1000);if(!Q.outputJson){if(console.log(`
|
|
36
|
-
Completed in ${T}s. Successfully processed: ${F.length}, Failed: ${E.length}`),E.length>0)console.log(`Failed packages: ${E.slice(0,10).join(", ")}${E.length>10?` ... and ${E.length-10} more`:""}`)}return F}catch(B){return console.error("Error in fetchAndSaveAllPackages:",B),[]}}function RQ(Q,K,G){let $=Q.split("/"),q=$[0];return{packageInfo:{name:($.length>1?$.slice(1).join("/"):null)||Q,domain:q,description:`Package information for ${Q}`,packageYmlUrl:"",homepageUrl:"",githubUrl:"",installCommand:`pantry install ${Q}`,pkgxInstallCommand:`sh <(curl https://pkgx.sh) +${Q} -- $SHELL -i`,pantryInstallCommand:`pantry install ${Q}`,programs:[],companions:[],dependencies:[],versions:[]},originalName:K,fullDomainName:G}}async function EQ(Q,K,G,$=!1,q=1,Z=3,X=!1,Y={}){try{let W=Y.cache!==!1,J=Y.cacheDir||k;if(!W)console.log(`Cache disabled for ${Q}, will fetch directly`);else{let E=_Q(Q,{cacheDir:J,cacheExpirationMinutes:Y.cacheExpirationMinutes,cache:Y.cache});if(E){let{packageInfo:x}=E,_=x.domain||Q,O=x.aliases||[],T=N(K,Q,x);return console.log(`Using cached data for ${Q} (saved to ${T})`),{success:!0,fullDomainName:_,aliases:O,filePath:T}}}let C=G+(q-1)*1e4;console.log(`Using timeout for ${Q} (attempt ${q}): ${C}ms`);let A=C,F=new Promise((E,x)=>{setTimeout(()=>{console.error(`Operation timeout for ${Q} after ${A}ms`),x(Error(`Operation timeout after ${A}ms`))},A)});if(Q.includes("/")){let E=Q.split("/"),x=E[0],_=E.slice(1).join("/");console.log(`Processing nested package: domain=${x}, subPath=${_}`);try{let O=t(`${x}/${_}`,{timeout:C,browser:Y.browser}),T=await Promise.race([O,F]),{packageInfo:j,originalName:z,fullDomainName:L}=T;if(j.versions&&j.versions.length>0)try{j.versions.sort((S,v)=>{try{return-1*Bun.semver.order(S,v)}catch{return m(S,v)}})}catch(S){console.warn(`Warning: Failed to sort versions for ${Q} using semver:`,S)}let M=L.replace(/\//g,"-"),U=[];if(j.aliases&&j.aliases.length>0)U.push(...j.aliases);for(let[S,v]of Object.entries(h))if(v===L&&!U.includes(S))U.push(S);if(z!==L&&!U.includes(z))U.push(z);let V=["cli","app","tool","server","client","api","lib","core"];if(!U.includes(_)&&!V.includes(_.toLowerCase()))U.push(_);let y={...j,fullPath:Q,aliases:U.length>0?U:[]};if(W){let S=w.join(J,`${M}.json`),v={...y,fetchedAt:Date.now()};if(!H.existsSync(J))H.mkdirSync(J,{recursive:!0});H.writeFileSync(S,JSON.stringify(v,null,2)),console.log(`Saved package data to cache: ${S}`)}let R=N(K,L,y);return console.log(`Successfully saved nested package ${Q} to ${R} with aliases: ${U.join(", ")||"none"}`),{success:!0,fullDomainName:L,aliases:U,filePath:R}}catch(O){if(O.toString().includes("404")||O.toString().includes("Not Found"))return console.error(`Package ${Q} returned 404 Not Found.`),console.error(`Skipping ${Q} to avoid overwriting existing files.`),{success:!1,fullDomainName:Q};throw O}}else try{let E=t(Q,{timeout:C,browser:Y.browser}),x=await Promise.race([E,F]),{packageInfo:_,originalName:O,fullDomainName:T}=x,j=_.description&&_.description.trim()!=="",z=_.versions&&_.versions.length>0,L=_.programs&&_.programs.length>0,M=_.packageYmlUrl&&_.packageYmlUrl.length>0,U=_.dependencies&&_.dependencies.length>0,V=_.companions&&_.companions.length>0,y=j&&(_.description.toLowerCase().trim()==="go home."||_.description.toLowerCase().trim()==="page not found"||_.description.toLowerCase().trim()==="not found"||_.description.toLowerCase().trim()==="404"||_.description.toLowerCase().trim()==="error"),R=j&&!y,S=z||L||M||U||V,v=_.domain&&_.domain.includes(".");if(!(R||S||v))return console.error(`Package ${Q} appears to have no meaningful data. Skipping to avoid creating empty files.`),{success:!1,fullDomainName:Q};let u=_.name&&_.name!==T&&_.name!==T.split("/")[0]&&_.name.length>1&&!_.name.includes("/")?r(_.name):null,g=T.replace(/\//g,"-"),f=u?w.join(K,`${u}.ts`):w.join(K,`${g}.ts`);if(H.existsSync(f)){let b=H.readFileSync(f,"utf-8"),D=b.includes("dependencies: [")&&!b.includes("dependencies: [] as const"),i=_.dependencies.length===0,n=!b.includes("description: 'Package information for")&&!b.includes("description: '' as const"),e=_.description.includes("Package information for")||_.description.trim()==="";if(D&&i||n&&e)return console.warn(`⚠️ Existing file ${f} has better data than new fetch. Skipping to prevent data loss.`),console.warn(` Existing deps: ${D}, New deps: ${!i}`),console.warn(` Existing desc: ${n}, New desc: ${!e}`),{success:!1,fullDomainName:Q}}if(_.versions&&_.versions.length>0)try{_.versions.sort((b,D)=>{try{return-1*Bun.semver.order(b,D)}catch{return m(b,D)}})}catch(b){console.warn(`Warning: Failed to sort versions for ${Q} using semver:`,b)}let XQ=T.replace(/\//g,"-"),P=[];if(_.aliases&&_.aliases.length>0)P.push(..._.aliases);for(let[b,D]of Object.entries(h))if(D===T&&!P.includes(b))P.push(b);if(O!==T&&!P.includes(O))P.push(O);let s={..._,fullPath:Q,aliases:P.length>0?P:[]};if(W){let b=w.join(J,`${XQ}.json`),D={...s,fetchedAt:Date.now()};if(!H.existsSync(J))H.mkdirSync(J,{recursive:!0});H.writeFileSync(b,JSON.stringify(D,null,2)),console.log(`Saved package data to cache: ${b}`)}let o=N(K,T,s);return console.log(`Successfully saved ${Q} to ${o} with aliases: ${P.join(", ")||"none"}`),{success:!0,fullDomainName:T,aliases:P,filePath:o}}catch(E){if(E.toString().includes("404")||E.toString().includes("Not Found"))return console.error(`Package ${Q} returned 404 Not Found. Skipping to avoid overwriting existing files.`),{success:!1,fullDomainName:Q};throw E}}catch(W){let J=String(W),B=J.includes("Operation timed out after")||J.includes("Operation timeout after")||J.includes("timeout")||J.includes("Timeout")||J.includes("Navigation timeout"),C=J.includes("No target found")||J.includes("targetId")||J.includes("Target page, context or browser has been closed")||J.includes("Protocol error")||J.includes("Connection closed")||J.includes("Assertion error")||J.includes("Browser has been closed")||J.includes("Target closed")||J.includes("Session closed")||J.includes("WebSocket connection closed");if(B)console.error(`Timeout error for ${Q}:`,J.substring(0,200)),await new Promise((F)=>setTimeout(F,1000*q));else if(C){if(console.error(`Browser connection error for ${Q}:`,J.substring(0,200)),Y.browser)try{await Y.browser.close().catch(()=>{})}catch{}await new Promise((F)=>setTimeout(F,3000*q))}if(q>=Z){if(console.error(`Failed to fetch package ${Q} after ${q} attempts:`,W),X){let F=w.join(I.cwd(),`${Q.replace(/\//g,"-")}-error.txt`);H.writeFileSync(F,`Error fetching ${Q}:
|
|
37
|
-
${W.toString()}
|
|
38
|
-
|
|
39
|
-
Stack:
|
|
40
|
-
${W.stack||"No stack trace available"}`),console.error(`Saved error details to ${F}`)}return console.error(`Skipping ${Q} after ${q} failed attempts to avoid overwriting existing files.`),{success:!1,fullDomainName:Q}}console.error(`Attempt ${q} failed for ${Q}, retrying...`,W);let A=500*q;if(C)A=2000*q;else if(B)A=1000*q;return await new Promise((F)=>setTimeout(F,A)),EQ(Q,K,G,$,q+1,Z,X,Y)}}async function OQ(Q="src/pantry"){if(!H.existsSync(Q))throw Error(`Pantry directory not found: ${Q}. Please run 'bun ./bin/cli.ts update-pantry' first.`);let K=[];function G($,q=""){let Z=H.readdirSync($,{withFileTypes:!0}),X=w.join($,"package.yml");if(q&&H.existsSync(X))K.push(q);for(let Y of Z)if(Y.isDirectory()&&!Y.name.startsWith(".")){let W=q?`${q}/${Y.name}`:Y.name,J=w.join($,Y.name);G(J,W)}}return G(Q),console.log(`Found ${K.length} packages in pantry`),K.sort()}async function BQ(Q,K="src/pantry"){let G=w.join(K,Q,"package.yml");if(!H.existsSync(G))return console.warn(`Package.yml not found for ${Q}`),null;try{let $=H.readFileSync(G,"utf-8"),q=[],Z=[],X=$.split(`
|
|
41
|
-
`),Y=!1,W=!1,J=!1,B="";for(let z of X){if(z.match(/^dependencies:\s*$/)){Y=!0,W=!1,J=!1;continue}if(z.match(/^\s{2}dependencies:\s*$/)){W=!0,Y=!1,J=!1;continue}if(Y||W){if(z.match(/^\s*$/)||Y&&z.match(/^\S/)||W&&!z.match(/^\s{4,}/)){Y=!1,W=!1,J=!1;continue}let L=z.match(/^\s{2}(linux|darwin|windows):\s*$/);if(L){J=!0,B=L[1];continue}if(J){let M=z.match(/^\s{4,}([^\s:]+):\s*['"]?([^'"]+)['"]?/);if(M){let U=M[1],V=M[2].trim(),y=`${B}:`;if(V&&V!=="*"){let R=/^[~^>=<@]/.test(V),S=/^[\d.]+$/.test(V)&&/^\d/.test(V),d=`${y}${U}${R?"":S?"@":"^"}${V}`;if(W)Z.push(d);else q.push(d)}else{let R=`${y}${U}`;if(W)Z.push(R);else q.push(R)}}else if(!z.match(/^\s{4,}/)&&!z.match(/^\s*$/))J=!1,B=""}else{let M=z.match(/^\s{2,3}([^\s:]+):\s*['"]?([^'"]+)['"]?/);if(M){let U=M[1],V=M[2].trim();if(["linux","darwin","windows"].includes(U))continue;if(V&&V!=="*"){let y=/^[~^>=<@]/.test(V),R=/^[\d.]+$/.test(V)&&/^\d/.test(V),v=`${U}${y?"":R?"@":"^"}${V}`;if(W)Z.push(v);else q.push(v)}else{let y=U;if(W)Z.push(y);else q.push(y)}}}}}let C=[],A=!1;for(let z of X){if(z.match(/^runtime:\s*$/)){A=!0;continue}if(A){if(z.match(/^\s*$/)||z.match(/^\S/)){A=!1;continue}if(z.match(/^\s+env:\s*$/))continue;if(z.match(/^\s+[A-Z_]+:\s*\$\{\{/))continue;let L=z.match(/^\s+([^\s:]+):\s*['"]?([^'"]+)['"]?/);if(L){let M=L[1],U=L[2].trim();if(/^[A-Z_]+$/.test(M))continue;if(U&&U!=="*"){let V=/^[~^>=<@]/.test(U),y=/^[\d.]+$/.test(U)&&/^\d/.test(U),R=V?"":y?"@":"^";C.push(`${M}${R}${U}`)}else C.push(M)}}}let F="",E="",x=$.match(/distributable:[\t\v\f\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*\n\s*url:\s*(.+)/);if(x){let z=x[1].trim();if(z.includes("github.com")){let L=z.match(/git\+https:\/\/github\.com\/([^/]+\/[^.]+)/);if(L){if(E=`https://github.com/${L[1]}`,L[1]==="python-attrs/attrs")F="https://www.attrs.org/"}}}let _=[],O=!1,T=!1;for(let z of X){if(z.match(/^provides:\s*$/)){O=!0,T=!1;continue}if(O){if(z.match(/^\S/)&&!z.match(/^\s*$/)){O=!1;continue}if(z.match(/^\s+(darwin|linux|windows):\s*$/)){T=!0;continue}let L=z.match(/^\s+-\s+(?:bin|sbin)\/(.+)/);if(L){let M=L[1].trim();if(!_.includes(M))_.push(M)}}}return{name:Q.split("/").pop()||Q,domain:Q,dependencies:q,buildDependencies:Z,companions:C,programs:_,homepageUrl:F,githubUrl:E}}catch($){return console.warn(`Error reading package.yml for ${Q}:`,$),null}}async function VQ(Q,K={}){let G=K.pantryDir||"src/pantry";try{let $=await BQ(Q,G);try{let q=await t(Q,K),Z=$?.domain||q.packageInfo.domain,X=$Q(Z),Y=q.packageInfo.aliases||[];if(X.length>0)if(qQ(Z))Y=X;else Y=[...new Set([...Y,...X])];let W=[],J=[],B="",C="",A=q.packageInfo.versions||[],F=q.packageInfo.programs||[],E=$?.programs||[];if(A.length===0||F.length===0&&E.length===0){let _=K.outputDir||"src/packages",O=Q.split("/"),T=O.length>1?w.join(_,...O.slice(0,-1),`${O[O.length-1]}.ts`):w.join(_,`${Q.replace(/\./g,"")}.ts`);if(H.existsSync(T))try{let j=H.readFileSync(T,"utf-8");if(A.length===0){let z=j.match(/versions:\s*\[([\s\S]*?)\]\s*as\s*const/);if(z&&z[1].trim())W=z[1].match(/'([^']+)'/g)?.map((L)=>L.replace(/'/g,""))||[]}if(F.length===0&&E.length===0){let z=j.match(/programs:\s*\[([\s\S]*?)\]\s*as\s*const/);if(z&&z[1].trim())J=z[1].match(/'([^']+)'/g)?.map((L)=>L.replace(/'/g,""))||[]}if(!q.packageInfo.description){let z=j.match(/description:\s*'([^']*)'\s*as\s*const/);if(z&&z[1])B=z[1]}if(!q.packageInfo.homepageUrl&&!$?.homepageUrl){let z=j.match(/homepageUrl:\s*'([^']*)'\s*as\s*const/);if(z&&z[1])C=z[1]}}catch{}}return{packageInfo:{...q.packageInfo,dependencies:$?.dependencies&&$.dependencies.length>0?$.dependencies:q.packageInfo.dependencies,buildDependencies:$?.buildDependencies&&$.buildDependencies.length>0?$.buildDependencies:q.packageInfo.buildDependencies,companions:$?.companions&&$.companions.length>0?$.companions:q.packageInfo.companions,programs:F.length>0?F:E.length>0?E:J.length>0?J:[],versions:A.length>0?A:W,domain:$?.domain||q.packageInfo.domain,description:q.packageInfo.description||B||"",name:q.packageInfo.name||$?.name||Q.split("/").pop()||Q,homepageUrl:$?.homepageUrl||q.packageInfo.homepageUrl||C,githubUrl:$?.githubUrl||q.packageInfo.githubUrl,aliases:Y},originalName:q.originalName,fullDomainName:q.fullDomainName}}catch(q){if(!$)return console.warn(`No pantry or web data available for ${Q}:`,q),null;console.warn(`Failed to fetch web metadata for ${Q}, using pantry data only:`,q);let Z=[],X=[],Y="",W="",J=K.outputDir||"src/packages",B=Q.split("/"),C=B.length>1?w.join(J,...B.slice(0,-1),`${B[B.length-1]}.ts`):w.join(J,`${Q.replace(/\./g,"")}.ts`);if(H.existsSync(C))try{let E=H.readFileSync(C,"utf-8"),x=E.match(/versions:\s*\[([\s\S]*?)\]\s*as\s*const/);if(x&&x[1].trim())Z=x[1].match(/'([^']+)'/g)?.map((j)=>j.replace(/'/g,""))||[];let _=E.match(/programs:\s*\[([\s\S]*?)\]\s*as\s*const/);if(_&&_[1].trim())X=_[1].match(/'([^']+)'/g)?.map((j)=>j.replace(/'/g,""))||[];let O=E.match(/description:\s*'([^']*)'\s*as\s*const/);if(O&&O[1])Y=O[1];let T=E.match(/homepageUrl:\s*'([^']*)'\s*as\s*const/);if(T&&T[1])W=T[1]}catch{}let A=$.programs&&$.programs.length>0?$.programs:X;return{packageInfo:{name:$.name||Q.split("/").pop()||Q,domain:$.domain||Q,description:Y||"",installCommand:`pantry install ${Q}`,pkgxInstallCommand:`sh <(curl https://pkgx.sh) +${Q} -- $SHELL -i`,pantryInstallCommand:`pantry install ${Q}`,programs:A,companions:$.companions||[],dependencies:$.dependencies||[],versions:Z,buildDependencies:$.buildDependencies||[],packageYmlUrl:`https://github.com/pkgxdev/pantry/tree/main/projects/${Q}/package.yml`,homepageUrl:W||$.homepageUrl||"",githubUrl:$.githubUrl||""},originalName:Q,fullDomainName:Q}}}catch($){return console.error(`Error processing pantry package ${Q}:`,$),null}}
|
|
42
|
-
export{N as La,AQ as Ma,_Q as Na,jQ as Oa,KQ as Pa,SQ as Qa,t as Ra,UQ as Sa,yQ as Ta,vQ as Ua,EQ as Va,OQ as Wa,BQ as Xa,VQ as Ya};
|
package/dist/chunk-w6phftp9.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
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")),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 k(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-5798tqhf.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("/"),Z=J.replace(/\./g,""),V=$.replace(/\//g,"-");return`${Z}-${V}`.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,k 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};
|