ts-pantry 0.9.13 → 0.9.18
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-1e0qbphx.js +1 -0
- package/dist/{chunk-mtvbvxsd.js → chunk-25sbj7mh.js} +2 -2
- package/dist/{chunk-g70t2h3c.js → chunk-3kd72v8e.js} +1 -1
- package/dist/{chunk-zeg3rmkd.js → chunk-7988wrce.js} +1 -1
- package/dist/{chunk-04eamjdw.js → chunk-9yep1cys.js} +1 -1
- package/dist/{chunk-9vn4jn9p.js → chunk-cret7mf0.js} +2 -2
- package/dist/{chunk-jywhngj7.js → chunk-cxg0wv4z.js} +2 -2
- package/dist/{chunk-5kvy4he0.js → chunk-dmcn6rf1.js} +2 -2
- package/dist/chunk-dyq40v7s.js +1 -0
- package/dist/{chunk-h2pyrnjr.js → chunk-f5n4jscp.js} +4 -4
- package/dist/{chunk-sm3nm634.js → chunk-h59trmsa.js} +1 -1
- package/dist/chunk-h75t6wv0.js +1 -0
- package/dist/{chunk-gt3n3063.js → chunk-mcz89rzg.js} +1 -1
- package/dist/chunk-q1zn0ezj.js +275 -0
- package/dist/{chunk-7vhbay27.js → chunk-qfevhm4j.js} +1 -1
- package/dist/{chunk-xxpems7r.js → chunk-rkak2mvz.js} +1 -1
- package/dist/{chunk-sd8qadhd.js → chunk-z5kje5x9.js} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/installer.d.ts +39 -0
- package/dist/src/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-9dtaqjcw.js +0 -1
- package/dist/chunk-hz1p5s8f.js +0 -1
- package/dist/chunk-tj7z6teg.js +0 -275
- package/dist/chunk-v54492f4.js +0 -1
package/dist/chunk-tj7z6teg.js
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import{_a as v,ab as Rw}from"./chunk-9vn4jn9p.js";import{kb as Nw,lb as uw,ob as Dw,pb as qw,rb as Pw,tb as hw,ub as vw,vb as Hw}from"./chunk-mtvbvxsd.js";import{Ab as mQ}from"./chunk-5kvy4he0.js";import{Bb as o,Cb as QQ}from"./chunk-jywhngj7.js";import{Fb as gw}from"./chunk-04eamjdw.js";import{Jb as m}from"./chunk-sd8qadhd.js";import $Q from"node:process";QQ();import Aw from"node:process";function xw(w){return w in o}function RQ(w){return w.includes(".")}function pQ(w){return xw(w)||RQ(w)}function oQ(w){return["darwin","linux","windows"].includes(w)}function sQ(w){return["x86_64","aarch64","armv7l","i686"].includes(w)}function Vw(){return Object.keys(o)}function rQ(){return Object.values(o)}function tQ(w){if(xw(w))return{originalName:w,resolvedDomain:o[w],isAlias:!0};return{originalName:w,resolvedDomain:w,isAlias:!1}}function nQ(w){let Q=w.lastIndexOf("@");if(Q===-1)return{name:w};let R=w.slice(0,Q),$=w.slice(Q+1);return{name:R,version:$,versionSpec:$}}function iQ(w,Q){return Q?`${w}@${Q}`:w}function n(){let w=Aw.platform,Q=Aw.arch,R,$,q=!0;switch(w){case"darwin":R="darwin";break;case"linux":R="linux";break;case"win32":R="windows";break;default:R="linux",q=!1}switch(Q){case"x64":$="x86_64";break;case"arm64":$="aarch64";break;case"arm":$="armv7l";break;case"ia32":$="i686";break;default:$="x86_64",q=!1}return{platform:R,architecture:$,isSupported:q}}function eQ(w,Q="latest",R){let $=R||n(),q;switch($.platform){case"darwin":q="tar.xz";break;case"linux":q="tar.xz";break;case"windows":q="zip";break;default:q="tar.xz"}return{packageName:w,version:Q,platform:$.platform,architecture:$.architecture,format:q}}var aQ={LATEST:"latest",ANY:"*"},yw={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 wR(w){return yw[w]}function QR(w,Q){return yw[Q].includes(w)}function RR(w){return w}function $R(w,Q){return[w,Q]}function XR(w){return w}async function JR(w){try{let Q=await qw(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 WR(w){try{if(!w||w.trim().length===0)return{success:!1,error:"Search term cannot be empty"};return{success:!0,data:await Pw(w.trim())}}catch(Q){return{success:!1,error:`Search failed: ${Q}`}}}async function zR(w=20){try{return{success:!0,data:(await hw(5)).slice(0,w)}}catch(Q){return{success:!1,error:`Failed to list popular packages: ${Q}`}}}async function BR(w=20){try{return{success:!0,data:await vw(w)}}catch(Q){return{success:!1,error:`Failed to list active packages: ${Q}`}}}function KR(){try{return{success:!0,data:Vw()}}catch(w){return{success:!1,error:`Failed to list aliases: ${w}`}}}async function UR(w){try{let Q=await Hw(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 GR(w){try{let Q=await Hw(w);if(!Q.isValid)return{success:!1,error:Q.error};let R=Q.packageName,$=Q.version||"latest",q=await Dw(R,$);if(!q)return{success:!1,error:`Could not resolve version '${$}' for package '${R}'`};let Y=await qw(R);if(!Y)return{success:!1,error:`Package '${R}' not found`};let Z=n(),X={packageName:R,resolvedVersion:q,platform:Z.platform,architecture:Z.architecture,dependencies:Y.dependencies,companions:Y.companions,installCommand:`pkgx install ${R}@${q}`},H=[];if(!Z.isSupported)H.push(`Platform ${Z.platform}/${Z.architecture} may not be fully supported`);if(Y.dependencies.length>0)H.push(`This package has ${Y.dependencies.length} dependencies that will also be installed`);return{success:!0,data:X,warnings:H.length>0?H:void 0}}catch(Q){return{success:!1,error:`Failed to create install plan: ${Q}`}}}async function _R(w){try{let Q=await Nw(w);if(!Q)return{success:!1,error:`Package '${w}' not found`};let R=await uw(w);return{success:!0,data:{latest:Q,total:R.length,versions:R}}}catch(Q){return{success:!1,error:`Failed to get version info: ${Q}`}}}function jR(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 OR(w){if(w.length===0)return"No packages found matching your search.";let Q=[`Found ${w.length} package(s):
|
|
3
|
-
`];for(let R of w)Q.push(`${R.name} (${R.domain})`),Q.push(` ${R.description}`),Q.push(` Latest: ${R.latestVersion} (${R.totalVersions} versions available)`),Q.push("");return Q.join(`
|
|
4
|
-
`)}function TR(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 LR(){try{let w=n();return{success:!0,data:{platform:w.platform,architecture:w.architecture,isSupported:w.isSupported,nodeVersion:$Q.version}}}catch(w){return{success:!1,error:`Failed to get system info: ${w}`}}}import d from"node:fs";import e from"node:path";function a(w){if(!d.existsSync(w))throw Error(`Dependency file not found: ${w}`);let Q=d.readFileSync(w,"utf-8"),R=[],$=Q.split(`
|
|
6
|
-
`),q=!1,Y=!1,Z=0;for(let X of $){let H=X.trim();if(!H||H.startsWith("#"))continue;if(X.match(/^(dependencies|deps):\s*$/)){q=!0,Y=!1,Z=X.search(/\S/);continue}if(X.match(/^global:\s*true\s*$/)||X.match(/^global:\s*$/)&&!q){Y=!0;continue}if(X.match(/^\w+:/)&&!X.includes(" ")&&q&&Z===0){q=!1;continue}if(q||Y){if(X.match(/^\s+(dependencies|deps):\s*$/))continue;let W=X.indexOf(":");if(W>0){let J=X.substring(0,W).trim(),j=X.substring(W+1).trim();if(J&&j){let O=J,_=j.replace(/^['"]|['"]$/g,"");if(O==="global"||O==="dependencies"||O==="deps")continue;let z=_,K=_;if(_.startsWith("^"))z=_.substring(1),K=_;else if(_.startsWith("~"))z=_.substring(1),K=_;else if(_.startsWith(">=")||_.startsWith("<=")||_.startsWith(">")||_.startsWith("<")){let U=/^([><=]+)/.exec(_);if(U){let G=U[1];z=_.substring(G.length).trim(),K=_}}else if(_==="*"||_==="latest")z="latest",K="*";else z=_,K=`@${_}`;R.push({name:O,version:z,constraint:K,isOsSpecific:!1})}}}}return R}function XQ(w){if(!d.existsSync(w))throw Error(`Dependency file not found: ${w}`);let Q=d.readFileSync(w,"utf-8"),R=a(w),$;try{let q=typeof Bun<"u"&&Bun.YAML?Bun.YAML.parse(Q):ZQ(Q);if(q?.services){let Y=Array.isArray(q.services.autoStart)?q.services.autoStart.map((Z)=>String(Z)):[];if(Y.length>0)$={enabled:q.services.enabled===!0,autoStart:Y}}}catch{}return{dependencies:R,services:$}}function ZQ(w){let Q={},R=w.split(`
|
|
7
|
-
`),$=!1,q=!1,Y=[],Z=!1;for(let X of R){let H=X.trim();if(!H||H.startsWith("#"))continue;if(X.match(/^services:\s*$/)){$=!0,q=!1;continue}if($&&!X.startsWith(" ")&&!X.startsWith("\t")&&!H.startsWith("-")){if(H!=="services:"){$=!1,q=!1;continue}}if($){if(H.startsWith("enabled:")){Z=H.includes("true");continue}if(H.match(/^autoStart:\s*$/)){q=!0;continue}if(q&&H.startsWith("- ")){let W=H.slice(2).trim();if(W)Y.push(W)}}}if(Y.length>0)Q.services={enabled:Z,autoStart:Y};return Q}async function IR(w,Q="src/packages"){try{let R;if(w.includes("/"))R=e.join(Q,`${w}.ts`);else{let J=`${w.replace(/\./g,"")}.ts`;R=e.join(Q,J)}if(!d.existsSync(R))return[];let $=d.readFileSync(R,"utf-8"),q=$.indexOf("versions:");if(q===-1)return[];let Y=$.substring(q),Z=Y.indexOf("["),X=Y.indexOf("] as const");if(Z===-1||X===-1)return[];let W=Y.substring(Z+1,X).match(/'([^']+)'/g);if(!W)return[];return W.map((J)=>J.replace(/'/g,""))}catch{return[]}}async function qQ(w){try{let{packages:Q}=await import("./chunk-hz1p5s8f.js").catch(()=>import("./src/index.js")),R=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),$=Q[R];if(!$)$=Object.values(Q).find((Y)=>Y.domain===w);if(!$)$=Object.values(Q).find((Y)=>Array.isArray(Y.aliases)&&Y.aliases.includes(w));if($&&$.versions&&Array.isArray($.versions))return $.versions;return[]}catch{return[]}}async function fw(w,Q){let R=await qQ(w);if(R.length===0)return Q.split("#")[0].trim().replace(/^[@^~>=<]+/,"")||"latest";let $=Q.split("#")[0].trim();if($==="*"||$==="latest")return R[0];if($.startsWith("@")){let Y=$.slice(1);return R.includes(Y)?Y:R[0]}return HQ(R,$)||R[0]}function HQ(w,Q){if(Q.startsWith("^")){let R=Q.slice(1),[$]=g(R);return w.filter((Y)=>{let[Z]=g(Y);return Z===$&&k(Y,R)>=0})[0]||null}if(Q.startsWith("~")){let R=Q.slice(1),[$,q]=g(R);return w.filter((Z)=>{let[X,H]=g(Z);return X===$&&H===q&&k(Z,R)>=0})[0]||null}if(Q.startsWith(">=")){let R=Q.slice(2).trim();return w.filter((q)=>k(q,R)>=0)[0]||null}if(Q.startsWith(">")){let R=Q.slice(1).trim();return w.filter((q)=>k(q,R)>0)[0]||null}if(Q.startsWith("<=")){let R=Q.slice(2).trim();return w.filter((q)=>k(q,R)<=0)[0]||null}if(Q.startsWith("<")){let R=Q.slice(1).trim();return w.filter((q)=>k(q,R)<0)[0]||null}if(Q.startsWith("=")){let R=Q.slice(1).trim();return w.includes(R)?R:null}return w.includes(Q)?Q:null}function g(w){let Q=w.split(".").map((R)=>{let $=R.match(/^\d+/);return $?Number.parseInt($[0],10):0});return[Q[0]||0,Q[1]||0,Q[2]||0]}function k(w,Q){if(w==="latest"&&Q!=="latest")return 1;if(Q==="latest"&&w!=="latest")return-1;if(w==="latest"&&Q==="latest")return 0;let R=w.split("#")[0].trim(),$=Q.split("#")[0].trim(),[q,Y,Z]=g(R),[X,H,W]=g($);if(q>X)return 1;if(q<X)return-1;if(Y>H)return 1;if(Y<H)return-1;if(Z>W)return 1;if(Z<W)return-1;return 0}var i=null;async function YQ(){if(i)return i;return i=(await import("./chunk-hz1p5s8f.js").catch(()=>import("./src/index.js"))).packages,i}async function JQ(w){try{let Q=await YQ(),R=Q[w];if(R)return{dependencies:R.dependencies||[],companions:R.companions||[]};let $=w.replace(/[^a-z0-9]/gi,"").toLowerCase(),q=Q[$];if(q)return{dependencies:q.dependencies||[],companions:q.companions||[]};let Z=Object.values(Q).find((X)=>X.domain===w);if(Z)return{dependencies:Z.dependencies||[],companions:Z.companions||[]};return null}catch(Q){return console.warn(`Failed to load package data for ${w}: ${Q}`),null}}async function ww(w,Q={},R=new Set,$=0){let{maxDepth:q=10,verbose:Y=!1,targetOs:Z,includeOsSpecific:X=!0}=Q;if($>q||R.has(w))return[];if(R.add(w),Y)console.log(`${" ".repeat($)}Resolving dependencies for: ${w}`);let H=[];try{let J=function(z){let K=z.match(/^(linux|darwin|windows):(.+)$/),U=!!K,G=K?K[2]:z,F=K?K[1]:void 0;if(U&&(!X||Z&&F!==Z))return null;let T=G,I="latest",B="*",E=G.match(/^([^@^~>=<]+)([@^~>=<].+)?$/);if(E){if(T=E[1],E[2]){let C=E[2];if(C.startsWith("@"))I=C.substring(1),B=C;else B=C,I=C.replace(/^\D*/,"")}}return{dep:{name:T,version:I,constraint:B,isOsSpecific:U,os:F},pkgName:T}},W=await JQ(w),O=[...W?.dependencies||[],...W?.companions||[]].map(J).filter((z)=>z!==null);for(let{dep:z}of O)H.push(z);let _=await Promise.all(O.map(({pkgName:z})=>ww(z,Q,R,$+1)));for(let z of _)H.push(...z)}catch(W){if(Y)console.warn(`${" ".repeat($)}Warning: Could not resolve dependencies for ${w}: ${W}`)}return H}async function Yw(w,Q={}){let R=new Map,$=[],q={linux:[],darwin:[],windows:[]};for(let X of w){if(!R.has(X.name))R.set(X.name,[]);if(R.get(X.name).push(X),X.isOsSpecific&&X.os)q[X.os].push(X)}let Y=[],Z=[];for(let[X,H]of R)if(H.length===1){let W=await fw(X,H[0].constraint),J={...H[0],version:W};Y.push(J),Z.push(X)}else{let W=H.map((z)=>z.version),J=[...new Set(W)];if(J.length>1)$.push({package:X,versions:J});let j=await Promise.all(H.map(async(z)=>({...z,resolvedVersion:await fw(X,z.constraint)}))),O=j[0];for(let z of j.slice(1))if(O.constraint==="*"&&z.constraint!=="*")O=z;else if(O.constraint!=="*"&&z.constraint==="*");else if(k(z.resolvedVersion,O.resolvedVersion)>0)O=z;let _={...O,version:O.resolvedVersion};delete _.resolvedVersion,Y.push(_),Z.push(X)}return{allDependencies:Y,uniquePackages:Z,conflicts:$,osSpecificDeps:q}}async function kw(w,Q={}){let{verbose:R=!1}=Q;if(R)console.log(`Parsing dependency file: ${w}`);let $=a(w);if(R)console.log(`Found ${$.length} direct dependencies`);let q=[...$],Y=await Promise.all($.map(async(H)=>{if(R)console.log(`Resolving transitive dependencies for: ${H.name}`);return ww(H.name,Q)}));for(let H of Y)q.push(...H);if(R)console.log(`Total dependencies found (before deduplication): ${q.length}`);let Z=await Yw(q,Q);if(R){if(console.log(`Unique packages after deduplication: ${Z.uniquePackages.length}`),Z.conflicts.length>0)console.log(`Version conflicts found: ${Z.conflicts.length}`)}let X=e.extname(w);if(X===".yaml"||X===".yml"){let H=XQ(w);if(H.services)Z.services=H.services}return Z}function SR(w){let Q=["deps.yaml","deps.yml","dependencies.yaml","dependencies.yml","pkgx.yaml","pkgx.yml",".deps.yaml",".deps.yml"],R=[];for(let $ of Q){let q=e.join(w,$);if(d.existsSync(q))R.push(q)}return R}import b from"node:fs";import L from"node:path";import V from"node:process";var Jw=L.join(V.cwd(),"src","packages"),Ww=L.join(V.cwd(),"docs");var c={};async function Gw(w){try{let Q=w||L.join(V.cwd(),"src","packages"),R=L.join(Q,"index.ts");if(b.existsSync(R)){console.log("Using generated index file for package mapping...");let Y=await import(L.resolve(R)),Z=Y.pantry||Y.packages;if(Z)return console.log(`Successfully loaded ${Object.keys(Z).length} packages from index`),Z}console.log("Index file not found, falling back to direct file reading...");let $={};if(!b.existsSync(Q))return console.log(`Packages directory does not exist: ${Q}`),$;let q=[];try{let Y=function(Z,X=""){let H=[],W=b.readdirSync(Z,{withFileTypes:!0});for(let J of W)if(J.isFile()&&J.name.endsWith(".ts")&&J.name!=="index.ts"&&J.name!=="aliases.ts")H.push(L.join(Z,J.name));else if(J.isDirectory()&&!J.name.startsWith(".")){let j=L.join(Z,J.name),O=X?`${X}/${J.name}`:J.name;H.push(...Y(j,O))}return H};q=Y(Q),console.log(`Found ${q.length} package files`)}catch(Y){console.error(`Error reading packages directory ${Q}:`,Y),q=[]}console.log(`Reading package data from ${q.length} files...`);for(let Y of q)try{let Z=L.isAbsolute(Y)?Y:L.join(Q,Y),X=b.readFileSync(Z,"utf-8"),H=L.basename(Y,".ts"),W=X.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),J=W?W[1]:Rw(H),j=v(J),O=WQ(X,J);if(O)$[j]=O,console.log(`Loaded package data for ${J} -> ${j}`)}catch(Z){console.error(`Error processing file ${Y}:`,Z)}return console.log(`Successfully loaded ${Object.keys($).length} packages`),$}catch(Q){return console.error("Error importing pantry:",Q),{}}}function WQ(w,Q){try{let R=w.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),$=R?R[1]:Q;if(!w.match(/export const \w+Package = \{([\s\S]*?)\}/))return console.warn(`Could not find package object in file for ${$}`),null;let Y=(B)=>{let E=new RegExp(`${B}:\\s*\\[(.*?)\\]\\s*as const`,"s"),C=w.match(E);if(!C)return[];let M=C[1],S=M.match(/'([^']*)'/g);if(S)return S.map((A)=>A.replace(/'/g,""));if(S=M.match(/"([^"]*)"/g),S)return S.map((A)=>A.replace(/"/g,""));return[]},Z=(B)=>{let C=new RegExp(`${B}:\\s*'([^']*)'\\s*as const`),M=w.match(C);if(M)return M[1].replace(/\\'/g,"'").replace(/\\\\/g,"\\");if(C=new RegExp(`${B}:\\s*'([^']*)'`),M=w.match(C),M)return M[1].replace(/\\'/g,"'").replace(/\\\\/g,"\\");return""},X=Z("name")||$,H=Z("description")||`A package from ${$}`,W=Z("packageYmlUrl")||"",J=Z("homepageUrl")||"",j=Z("githubUrl")||"",O=Z("installCommand")||"",_=Z("pkgxInstallCommand")||`sh <(curl https://pkgx.sh) +${$} -- $SHELL -i`,z=Z("pantryInstallCommand")||`pantry install ${$}`,K=Z("fullPath")||$,U=Y("programs"),G=Y("companions"),F=Y("dependencies"),T=Y("versions"),I=Y("aliases");return{name:X,domain:$,description:H,packageYmlUrl:W,homepageUrl:J,githubUrl:j,installCommand:O,pkgxInstallCommand:_,pantryInstallCommand:z,programs:U,companions:G,dependencies:F,versions:T,fullPath:K,aliases:I}}catch(R){return console.error(`Error extracting package data for ${Q}:`,R),null}}function zQ(w,Q){let R=["cli","app","tool","server","client","api","lib","core","sdk","dev","bin"];if(R.includes(w.toLowerCase()))return!1;if(w===Q)return!1;let $=Q.replace(/\./g,"");if(w===$)return!1;if(w.includes("--")||w.includes("$SHELL")||w.includes("curl")||w.includes("sh <("))return!1;if(w.includes(" -- ")||w.includes(" -i")||w.includes("+")&&w.includes(" "))return!1;if(Q.includes("/")){let Y=Q.split("/"),Z=Y[Y.length-1];if(R.includes(Z.toLowerCase())&&w===Z)return!1}let q=["go","js","py","rb","sh","vi","cc","gc","jq","awk","sed","mc","gh"];if(w.length<3&&!q.includes(w.toLowerCase()))return!1;if(/^[\d.]+$/.test(w)&&/^\d/.test(w))return!1;if(!/[a-z]/i.test(w))return!1;if(w.includes("{{")||w.includes("}}"))return!1;if(w.includes("version.major")||w.includes("version.minor")||w.includes("version"))return!1;return!0}function mw(){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 lw(w){if(c[w])return c[w];return w.replace(/\W/g,"_")}function cw(w){return w.toLowerCase()}function Qw(w,Q,R){try{let $=Q||Jw,q=R||L.join($,`${w}.ts`),Y=b.readFileSync(q,"utf-8"),Z=Y.match(/export const (\w+) = \{/),X=Z?Z[1]:`${w.replace(/\W/g,"")}Package`,H=Y.match(/export type (\w+) = typeof/),W=H?H[1]:`${X.charAt(0).toUpperCase()}${X.slice(1)}`;return{packageVarName:X,typeName:W}}catch($){console.warn(`Could not read package file ${R||`${w}.ts`}, using fallback naming:`,$);let q=KQ(w),Y=BQ(w);return{packageVarName:q,typeName:Y}}}function BQ(w){if(c[w]){let $=c[w];return`${$.charAt(0).toUpperCase()}${$.slice(1)}Package`}let R=cw(w).replace(/\W/g,"");return`${R.charAt(0).toUpperCase()}${R.slice(1)}Package`}function KQ(w){if(c[w])return`${c[w]}Package`;return`${cw(w).replace(/\W/g,"")}Package`}function UQ(w,Q){let{typeName:R}=Qw(w,Q);return R}function GQ(w,Q){let{packageVarName:R}=Qw(w,Q);return R}async function zw(w){try{console.log("\uD83D\uDD27 Generating package index..."),console.log(`DEBUG generateIndex START: packagesDir=${w}`),console.log(`DEBUG generateIndex START: process.cwd()=${V.cwd()}`);let Q=w||Jw,R=L.resolve(Q,"index.ts");if(console.log(`DEBUG generateIndex: packagesDir=${w}`),console.log(`DEBUG generateIndex: PACKAGES_DIR=${Jw}`),console.log(`DEBUG generateIndex: targetPackagesDir=${Q}`),console.log(`DEBUG generateIndex: targetIndexFile=${R}`),console.log(`DEBUG generateIndex: path.isAbsolute(targetIndexFile)=${L.isAbsolute(R)}`),!b.existsSync(Q))console.log(`Creating packages directory: ${Q}`),b.mkdirSync(Q,{recursive:!0});if(!b.existsSync(Q))return console.error(`Failed to create packages directory: ${Q}`),null;let $=[];try{let Y=function(Z,X=""){let H=[],W=b.readdirSync(Z,{withFileTypes:!0});for(let J of W)if(J.isFile()&&J.name.endsWith(".ts")&&J.name!=="index.ts"&&J.name!=="aliases.ts")H.push(L.join(Z,J.name));else if(J.isDirectory()&&!J.name.startsWith(".")){let j=L.join(Z,J.name),O=X?`${X}/${J.name}`:J.name;H.push(...Y(j,O))}return H};$=Y(Q),console.log(`Found ${$.length} package files`)}catch(Y){console.error(`Error reading packages directory ${Q}:`,Y),$=[]}let q=`// Auto-generated package index
|
|
8
|
-
// Do not edit this file directly
|
|
9
|
-
|
|
10
|
-
export interface Pantry {
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type Packages = Pantry
|
|
14
|
-
|
|
15
|
-
export const pantry: Pantry = {
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const packages: Packages = pantry
|
|
19
|
-
`;if($.length>0){console.log(`Processing ${$.length} package files...`);let Y=`// Auto-generated package index
|
|
20
|
-
// Do not edit this file directly
|
|
21
|
-
|
|
22
|
-
`,Z=`export interface Pantry {
|
|
23
|
-
`,X=`export const pantry: Pantry = {
|
|
24
|
-
`,H=new Set,W=new Set,J=$.sort();for(let K of J)try{let U=L.basename(K,".ts"),G=lw(U),T=L.relative(Q,K).replace(/\.ts$/,"").replace(/\\/g,"/"),{packageVarName:I}=Qw(U,Q,K),B=I,E=1;while(W.has(B))B=`${I}${E}`,E++;if(W.add(B),B===I)Y+=`import { ${I} } from './${T}'
|
|
25
|
-
`;else Y+=`import { ${I} as ${B} } from './${T}'
|
|
26
|
-
`;let C=G,M=1;while(H.has(C))C=`${G}${M}`,M++;H.add(C);let S=/^\d/.test(C)||!/^[a-z_$][\w$]*$/i.test(C)?`'${C}'`:C;Z+=` ${S}: typeof ${B}
|
|
27
|
-
`,X+=` ${S}: ${B},
|
|
28
|
-
`;let x=b.readFileSync(K,"utf-8").match(/domain:\s*['"]([^'"]*)['"]\s*as const/),P=x?x[1]:"";if(P){let N=v(P);if(N!==C){let u=N,y=1;while(H.has(u))u=`${N}${y}`,y++;H.add(u);let h=/^\d/.test(u)||!/^[a-z_$][\w$]*$/i.test(u)?`'${u}'`:u;Z+=` ${h}: typeof ${B}
|
|
29
|
-
`,X+=` ${h}: ${B},
|
|
30
|
-
`}}}catch(U){console.error(`Error processing file ${K}:`,U)}let j=await $w(Q),O=new Map;for(let K of J)try{let G=b.readFileSync(K,"utf-8").match(/domain:\s*['"]([^'"]*)['"]\s*as const/),F=G?G[1]:"";if(F){let T=L.basename(K,".ts"),{packageVarName:I}=Qw(T,Q,K),B=I,E=1;while(W.has(B)&&B!==I)B=`${I}${E}`,E++;O.set(F,B)}}catch(U){console.error(`Error processing file for alias mapping ${K}:`,U)}for(let[K,U]of Object.entries(j)){let G=O.get(U);if(G){let F=/^\d/.test(K)||!/^[a-z_$][\w$]*$/i.test(K)?`'${K}'`:K;if(H.has(K)){let T=F.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),I=new RegExp(`^\\s*${T}:\\s*typeof\\s+\\w+\\s*$`,"gm"),B=new RegExp(`^\\s*${T}:\\s*\\w+,\\s*$`,"gm");Z=Z.replace(I,""),X=X.replace(B,"")}Z+=` ${F}: typeof ${G}
|
|
31
|
-
`,X+=` ${F}: ${G},
|
|
32
|
-
`,H.add(K)}}Z+=`}
|
|
33
|
-
|
|
34
|
-
`,X+=`}
|
|
35
|
-
|
|
36
|
-
`,q=`${Y}
|
|
37
|
-
${Z}export type Packages = Pantry
|
|
38
|
-
|
|
39
|
-
${X}export const packages: Packages = pantry
|
|
40
|
-
|
|
41
|
-
export * from './aliases'
|
|
42
|
-
`}try{b.writeFileSync(R,q),console.log(`Successfully generated ${R}`)}catch(Y){return console.error(`Error writing index file ${R}:`,Y),null}if(!b.existsSync(R))return console.error(`Index file was not created: ${R}`),null;return console.log(`DEBUG generateIndex: returning ${R}`),console.log(`DEBUG generateIndex: return value isAbsolute=${L.isAbsolute(R)}`),console.log(`DEBUG generateIndex: return value type=${typeof R}`),R}catch(Q){return console.error("Error generating index file:",Q),null}}async function $w(w){let Q={};console.log("Generating aliases from package files (avoiding circular dependency)");let R=w||L.join(V.cwd(),"src","packages");if(!b.existsSync(R))return console.log(`Packages directory does not exist: ${R}`),Q;function $(Z,X=""){let H=[],W=b.readdirSync(Z,{withFileTypes:!0});for(let J of W)if(J.isFile()&&J.name.endsWith(".ts")&&J.name!=="index.ts"&&J.name!=="aliases.ts")H.push(L.join(Z,J.name));else if(J.isDirectory()&&!J.name.startsWith(".")){let j=L.join(Z,J.name),O=X?`${X}/${J.name}`:J.name;H.push(...$(j,O))}return H}let q=$(R);console.log(`Found ${q.length} package files`);for(let Z of q)try{let X=Z,H=b.readFileSync(X,"utf-8"),W=L.basename(Z,".ts"),J=H.match(/domain:\s*['"]([^'"]*)['"]\s*as const/),j=J?J[1]:Rw(W),O=H.match(/name:\s*['"]([^'"]*)['"]\s*as const/),_=O?O[1]:"";if(_&&_!==j&&zQ(_,j))if(!Q[_])Q[_]=j,console.log(`Auto-generated alias: ${_} -> ${j}`);else console.log(`Skipped auto-generated alias ${_} -> ${j} (already exists as ${Q[_]})`);let z=H.match(/aliases:\s*\[([\s\S]*?)\]/);if(z&&z[1]){let K=z[1].match(/["']([^"']*)["']/g);if(K)for(let U of K){let G=U.replace(/["']/g,"");if(!(!G||G.includes("--")||G.includes("$SHELL")||G.includes("curl")||G.includes("sh <(")||G.includes(" -- ")||G.includes(" -i")||G.includes("+")&&G.includes(" ")||G.includes("{{")||G.includes("}}")||G.includes("version.major")||G.includes("version.minor")||G===j))if(!Q[G])Q[G]=j,console.log(`Found explicit alias ${G} -> ${j}`);else console.log(`Skipped explicit alias ${G} -> ${j} (already exists as ${Q[G]})`);else console.log(`Filtered out invalid alias: ${G} 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(X){console.error(`Error extracting aliases from ${Z}:`,X)}let Y=gw();for(let[Z,X]of Object.entries(Y))if(!Q[Z])Q[Z]=X,console.log(`Added alias override: ${Z} -> ${X}`);else{let H=Q[Z];Q[Z]=X,console.log(`Overrode alias ${Z}: ${H} -> ${X}`)}return Q}async function Bw(w){try{console.log(`DEBUG generateAliases START: packagesDir=${w}`),console.log(`DEBUG generateAliases START: process.cwd()=${V.cwd()}`);let Q=await $w(w),R=w?L.resolve(w):L.resolve(V.cwd(),"src","packages"),$=L.resolve(R,"aliases.ts");console.log(`DEBUG generateAliases: targetPackagesDir=${R}`),console.log(`DEBUG generateAliases: aliasesFile=${$}`),console.log(`DEBUG generateAliases: path.isAbsolute(aliasesFile)=${L.isAbsolute($)}`);let q=L.dirname($);if(!b.existsSync(q))b.mkdirSync(q,{recursive:!0});let Y=Q,Z=`/**
|
|
43
|
-
* Auto-generated aliases for pkgx packages
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
`;Z+=`export const aliases: Record<string, string> = {
|
|
47
|
-
`;let X=Object.entries(Y).sort((H,W)=>H[0].localeCompare(W[0]));for(let[H,W]of X)Z+=` '${H}': '${W}',
|
|
48
|
-
`;return Z+=`}
|
|
49
|
-
`,b.writeFileSync($,Z),console.log(`Successfully generated ${$} with ${X.length} aliases`),console.log(`DEBUG generateAliases: returning ${$}`),console.log(`DEBUG generateAliases: return value isAbsolute=${L.isAbsolute($)}`),console.log(`DEBUG generateAliases: return value type=${typeof $}`),$}catch(Q){return console.error("Error generating aliases file:",Q),""}}function _Q(w){let Q=w.split(`
|
|
50
|
-
`).map((R)=>R.trimEnd()).join(`
|
|
51
|
-
`);return Q=jQ(Q),Q=Q.replace(/\n{3,}/g,`
|
|
52
|
-
|
|
53
|
-
`),Q=`${Q.trimEnd()}
|
|
54
|
-
`,Q}function _w(w){return _Q(w)}function jQ(w){let Q=w.split(`
|
|
55
|
-
`),R=!1;return Q.map(($)=>{if($.trimStart().startsWith("```"))return R=!R,$;if(R)return $;return $.replace(/(?<!\]\()(?<!\()(?<!<)(https?:\/\/[^\s)>\]]+)/g,(q,Y,Z)=>{if(Z>0&&$[Z-1]==="<")return q;let X=$.slice(0,Z);if(/\]\($/.test(X))return q;if((X.match(/`/g)||[]).length%2===1)return q;return`<${q}>`})}).join(`
|
|
56
|
-
`)}function OQ(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 R=["go","rust","zig","nim","dart","julia","scala","kotlin","swift","node","bun"];if(!w.includes(".")&&!R.includes(w.toLowerCase()))return!1;if(!w||w.trim().length===0)return!1;if(!/^[\w.\-/]+$/.test(w))return!1;return!0}function TQ(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((R)=>R.test(w))}function l(w){if(!OQ(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((R)=>w.description.includes(R))}function pw(w){let Q=($)=>{if(!w.versions||w.versions.length===0)return $.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let q=w.versions[0],Y=q.split("."),Z=Y[0]||"",X=Y[1]||"",H=Y[2]||"",W=X?`${Z}.${X}`:Z;return $.replace(/\{\{\s*version\.marketing\s*\}\}/g,W).replace(/\{\{\s*version\.major\s*\}\}/g,Z).replace(/\{\{\s*version\.minor\s*\}\}/g,X).replace(/\{\{\s*version\.patch\s*\}\}/g,H).replace(/\{\{\s*version\.raw\s*\}\}/g,q).replace(/\{\{\s*version\s*\}\}/g,q).replace(/\{\{(?![^}]*\}\})/g,"{{")};if(w.pantryInstallCommand){let $=w.pantryInstallCommand.match(/pantry install (.+)/);if($){let q=$[1];if(w.aliases&&w.aliases.length>0){let Y=[...w.aliases].sort((X,H)=>X.length-H.length);return`pantry install ${Q(Y[0])}`}if(w.aliases&&w.aliases.some((Y)=>Y.toLowerCase()===q.toLowerCase()))return`pantry install ${Q(q.toLowerCase())}`;return Q(w.pantryInstallCommand)}}if(w.installCommand)return Q(w.installCommand);let R=w.domain;if(w.aliases&&w.aliases.length>0)R=[...w.aliases].sort((q,Y)=>q.length-Y.length)[0];return R=Q(R),`pantry install ${R}`}async function LQ(w,Q){let R=await Gw(Q),$=await $w(Q),q=mw(),Y=L.resolve(w,"package-catalog.md"),Z={},X=0;for(let[z,K]of Object.entries(R))if(!l(K))Z[z]=K;else X++,console.log(`Excluding package ${K.domain||z} (placeholder data)`);console.log(`Filtered out ${X} packages with placeholder data`);let H=new Set,W=new Map;for(let[z,K]of Object.entries(Z)){let U=K.domain;if(!H.has(U))W.set(U,K),H.add(U)}let J=new Set;Object.values(q).forEach((z)=>{z.forEach((K)=>J.add(K))});let j=[];if(W.forEach((z,K)=>{if(!J.has(K))j.push(K)}),j.length>0)q["Other Utilities"]=j;let O=`# Package Catalog
|
|
57
|
-
|
|
58
|
-
This comprehensive catalog lists all ${W.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**: ${W.size}
|
|
65
|
-
- **Categories**: ${Object.keys(q).length}
|
|
66
|
-
- **Last Updated**: ${new Date().toISOString()}
|
|
67
|
-
|
|
68
|
-
## Table of Contents
|
|
69
|
-
|
|
70
|
-
`,_=(z)=>{if(R[z])return{domainVarName:z,pkg:R[z]};let K=$[z];if(K){let U=v(K);if(R[U])return{domainVarName:U,pkg:R[U]}}return null};Object.keys(q).forEach((z)=>{let K=z.toLowerCase().replace(/[^a-z0-9]+/g,"-"),U=q[z],G=new Map;U.forEach((T)=>{let I=_(T);if(I&&!l(I.pkg)){let B=I.pkg.domain||I.pkg.fullPath||"unknown";if(!G.has(B))G.set(B,I);else{let E=G.get(B);if(I.domainVarName.length<E.domainVarName.length||I.domainVarName.length===E.domainVarName.length&&I.domainVarName<E.domainVarName)G.set(B,I)}}});let F=G.size;if(F>0)O+=`- [${z}](#${K}) (${F} packages)
|
|
71
|
-
`}),O+=`
|
|
72
|
-
`;for(let[z,K]of Object.entries(q)){let U=new Map;K.forEach((F)=>{let T=_(F);if(T&&!l(T.pkg)){let I=T.pkg.domain||T.pkg.fullPath||"unknown";if(!U.has(I))U.set(I,T);else{let B=U.get(I);if(T.domainVarName.length<B.domainVarName.length||T.domainVarName.length===B.domainVarName.length&&T.domainVarName<B.domainVarName)U.set(I,T)}}});let G=Array.from(U.values()).sort((F,T)=>(F.pkg.domain||F.domainVarName).localeCompare(T.pkg.domain||T.domainVarName));if(G.length===0)continue;O+=`## ${z}
|
|
73
|
-
|
|
74
|
-
`,O+=`${G.length} packages in this category
|
|
75
|
-
|
|
76
|
-
`,O+=`| Package | Description | Programs | Versions | Install |
|
|
77
|
-
`,O+=`|---------|-------------|----------|----------|----------|
|
|
78
|
-
`;for(let{domainVarName:F,pkg:T}of G)try{let I=T.domain||T.fullPath||"unknown",B=T.aliases?` (${T.aliases.map((y)=>y.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")).join(", ")})`:"",E=T.programs.slice(0,3).map((y)=>y.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")).join(", ");if(T.programs.length>3)E+=`, ... (+${T.programs.length-3})`;if(T.programs.length===0)E="-";let C=T.versions?.length||0,M=T.versions?.[0]||"latest",S=C>0?`${M} (+${C-1})`:"latest",A=T.description.replace(/\s+/g," ").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}").replace(/\x27/g,"'").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">").replace(/\|/g,"\\|");if(A.length>100)A=`${A.substring(0,97)}...`;let x=T.name||I;if(T.aliases&&T.aliases.length>0)x=[...T.aliases].sort((h,D)=>h.length-D.length)[0];x=x.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let P=`\`pkgx ${x}\``,N;if(I.includes("."))if(I.startsWith("github.com/")&&I.includes("/")){let h=I.replace("github.com/","").split("/");if(h.length>=2){let D=h[0],wQ=h.slice(1).join("-");N=`./packages/github.com/${D}/${wQ}.md`}else{let D=F.toLowerCase();if(/^\d/.test(D))D=`pkg-${D}`;D=D.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),N=`./packages/${D}.md`}}else N=`./packages/${I}/index.md`;else{let y=F.toLowerCase();if(/^\d/.test(y))y=`pkg-${y}`;y=y.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),N=`./packages/${y}.md`}let u=`| **[${I}](${N})**${B} | ${A} | ${E} | ${S} | ${P} |`.replace(/\r?\n/g," ").replace(/\s+/g," ");O+=`${u}
|
|
79
|
-
`}catch(I){let B=T.domain||T.fullPath||"unknown";console.error(`Error processing ${B}:`,I),O+=`| **${B}** | Error retrieving package information | - | - | - |
|
|
80
|
-
`}O+=`
|
|
81
|
-
`}return O+=`## Usage Examples
|
|
82
|
-
|
|
83
|
-
### Basic Usage
|
|
84
|
-
|
|
85
|
-
\`\`\`typescript
|
|
86
|
-
import { getPackage, pantry } from 'ts-pkgx'
|
|
87
|
-
|
|
88
|
-
// Get a package by domain
|
|
89
|
-
const nodePackage = pantry.nodejsorg
|
|
90
|
-
|
|
91
|
-
// Get a package by alias
|
|
92
|
-
const nodeByAlias = getPackage('node')
|
|
93
|
-
|
|
94
|
-
// Access package properties
|
|
95
|
-
console.log(\`Package: \${nodePackage.name} - \${nodePackage.description}\`)
|
|
96
|
-
console.log(\`Install: \${nodePackage.installCommand}\`)
|
|
97
|
-
console.log(\`Programs: \${nodePackage.programs.join(', ')}\`)
|
|
98
|
-
\`\`\`
|
|
99
|
-
|
|
100
|
-
### Advanced Usage
|
|
101
|
-
|
|
102
|
-
\`\`\`typescript
|
|
103
|
-
// Find packages by category
|
|
104
|
-
const databases = [
|
|
105
|
-
pantry.postgresqlorg,
|
|
106
|
-
pantry.mysqlcom,
|
|
107
|
-
pantry.redisio,
|
|
108
|
-
pantry.mongodbcom
|
|
109
|
-
]
|
|
110
|
-
|
|
111
|
-
// Get all available versions
|
|
112
|
-
const nodeVersions = pantry.nodejsorg.versions
|
|
113
|
-
console.log(\`Node.js versions: \${nodeVersions.slice(0, 5).join(', ')}...\`)
|
|
114
|
-
|
|
115
|
-
// Check dependencies
|
|
116
|
-
const nodeDeps = pantry.nodejsorg.dependencies
|
|
117
|
-
console.log(\`Node.js dependencies: \${nodeDeps.join(', ')}\`)
|
|
118
|
-
\`\`\`
|
|
119
|
-
|
|
120
|
-
### Installation Examples
|
|
121
|
-
|
|
122
|
-
\`\`\`bash
|
|
123
|
-
# Install using pkgx
|
|
124
|
-
pkgx node
|
|
125
|
-
pkgx python
|
|
126
|
-
pkgx rust
|
|
127
|
-
|
|
128
|
-
# Install specific versions
|
|
129
|
-
pkgx node@20
|
|
130
|
-
pkgx python@3.11
|
|
131
|
-
|
|
132
|
-
# Install multiple packages
|
|
133
|
-
pkgx node python rust
|
|
134
|
-
\`\`\`
|
|
135
|
-
|
|
136
|
-
## Package Information
|
|
137
|
-
|
|
138
|
-
Each package includes:
|
|
139
|
-
|
|
140
|
-
- **Name**: Short identifier for the package
|
|
141
|
-
- **Domain**: Full domain identifier
|
|
142
|
-
- **Description**: What the package does
|
|
143
|
-
- **Programs**: Executable programs provided
|
|
144
|
-
- **Versions**: Available versions
|
|
145
|
-
- **Dependencies**: Required dependencies
|
|
146
|
-
- **Companions**: Related packages
|
|
147
|
-
- **Install Command**: How to install with pkgx
|
|
148
|
-
|
|
149
|
-
## Contributing
|
|
150
|
-
|
|
151
|
-
To add or update packages, see the pkgx [contribution guide](https://docs.pkgx.sh/appendix/packaging/pantry).
|
|
152
|
-
`,await b.promises.writeFile(Y,_w(O)),Y}function dw(w,Q,R){if(w.includes("."))if(w.startsWith("github.com/")){let q=w.replace("github.com/","").split("/");if(q.length>=2){let Y=q[0],Z=q.slice(1).join("-");return L.join(R,"github.com",Y,`${Z}.md`)}else{let Y=q[0];return L.join(R,"github.com",Y,"index.md")}}else return L.join(R,w,"index.md");else{let $=Q.toLowerCase();if(/^\d/.test($))$=`pkg-${$}`;return $=$.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),L.join(R,`${$}.md`)}}async function EQ(w,Q){let R=await Gw(Q),$=L.join(w,"packages");if(!b.existsSync($))b.mkdirSync($,{recursive:!0});let q=[],Y=new Map;for(let[Z,X]of Object.entries(R)){if(l(X)){console.log(`Skipping package page for ${X.domain||Z} (placeholder data)`);continue}let H=X.domain;if(!Y.has(H))Y.set(H,{domainVarName:Z,pkg:X});else{let W=Y.get(H);if(Z.length<W.domainVarName.length||Z.length===W.domainVarName.length&&Z<W.domainVarName)Y.set(H,{domainVarName:Z,pkg:X}),console.log(`Replaced ${W.domainVarName} with ${Z} for domain ${H}`)}}for(let{domainVarName:Z,pkg:X}of Y.values())try{let H=X.domain||X.fullPath||Z,W;if(H.includes("."))if(H.startsWith("github.com/")){let E=H.replace("github.com/","").split("/");if(E.length>=2){let C=E[0],M=E.slice(1).join("-"),S=L.join($,"github.com",C);if(!b.existsSync(S))b.mkdirSync(S,{recursive:!0});W=L.join(S,`${M}.md`)}else{let C=E[0],M=L.join($,"github.com",C);if(!b.existsSync(M))b.mkdirSync(M,{recursive:!0});W=L.join(M,"index.md")}}else{let B=L.join($,H);if(!b.existsSync(B))b.mkdirSync(B,{recursive:!0});W=L.join(B,"index.md")}else{let B=Z.toLowerCase();if(/^\d/.test(B))B=`pkg-${B}`;B=B.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),W=L.join($,`${B}.md`)}let J=X.description||"",j=(B)=>{if(!X.versions||X.versions.length===0)return B.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let E=X.versions[0],C=E.split("."),M=C[0]||"",S=C[1]||"",A=C[2]||"",x=S?`${M}.${S}`:M;return B.replace(/\{\{\s*version\.marketing\s*\}\}/g,x).replace(/\{\{\s*version\.major\s*\}\}/g,M).replace(/\{\{\s*version\.minor\s*\}\}/g,S).replace(/\{\{\s*version\.patch\s*\}\}/g,A).replace(/\{\{\s*version\.raw\s*\}\}/g,E).replace(/\{\{\s*version\s*\}\}/g,E).replace(/\{\{(?![^}]*\}\})/g,"{{")},O=j(X.name||H),_=j(J).replace(/\s+/g," "),z=`# ${O}
|
|
153
|
-
|
|
154
|
-
${_?`> ${_}`:""}
|
|
155
|
-
|
|
156
|
-
## Package Information
|
|
157
|
-
|
|
158
|
-
- **Domain**: \`${H}\`
|
|
159
|
-
- **Name**: \`${O}\`
|
|
160
|
-
- **Homepage**: ${X.homepageUrl||"Not specified"}
|
|
161
|
-
- **Source**: [View on GitHub](${X.packageYmlUrl||`https://github.com/pkgxdev/pantry/tree/main/projects/${H}/package.yml`})
|
|
162
|
-
|
|
163
|
-
## Installation
|
|
164
|
-
|
|
165
|
-
\`\`\`bash
|
|
166
|
-
# Install with pantry
|
|
167
|
-
${pw(X)}
|
|
168
|
-
\`\`\`
|
|
169
|
-
|
|
170
|
-
## Programs
|
|
171
|
-
|
|
172
|
-
This package provides the following executable programs:
|
|
173
|
-
|
|
174
|
-
`;if(X.programs&&X.programs.length>0)X.programs.forEach((B)=>{let E=j(B);z+=`- \`${E}\`
|
|
175
|
-
`});else z+=`No programs specified.
|
|
176
|
-
`;if(X.aliases&&X.aliases.length>0)z+=`
|
|
177
|
-
## Aliases
|
|
178
|
-
|
|
179
|
-
This package can also be accessed using these aliases:
|
|
180
|
-
|
|
181
|
-
`,X.aliases.forEach((B)=>{let E=j(B);z+=`- \`${E}\`
|
|
182
|
-
`});if(X.versions&&X.versions.length>0){z+=`
|
|
183
|
-
## Available Versions
|
|
184
|
-
|
|
185
|
-
<details>
|
|
186
|
-
<summary>Show all ${X.versions.length} versions</summary>
|
|
187
|
-
|
|
188
|
-
`;let B=new Map,E=[];X.versions.forEach((C)=>{let M=C.split("."),S=M.length>=2?`${M[0]}.${M[1]}`:M[0];if(!B.has(S))B.set(S,[]),E.push(S);B.get(S).push(C)}),E.forEach((C)=>{let M=B.get(C);z+=`- ${M.map((S)=>`\`${S}\``).join(", ")}
|
|
189
|
-
`}),z+=`
|
|
190
|
-
</details>
|
|
191
|
-
|
|
192
|
-
**Latest Version**: \`${X.versions[0]}\`
|
|
193
|
-
|
|
194
|
-
### Install Specific Version
|
|
195
|
-
|
|
196
|
-
\`\`\`bash
|
|
197
|
-
# Install specific version
|
|
198
|
-
${X.pkgxInstallCommand?j(X.pkgxInstallCommand.replace(`+${H}`,`+${H}@${X.versions[0]}`)):`sh <(curl https://pkgx.sh) +${H}@${X.versions[0]} -- $SHELL -i`}
|
|
199
|
-
\`\`\`
|
|
200
|
-
`}if(X.dependencies&&X.dependencies.length>0)z+=`
|
|
201
|
-
## Dependencies
|
|
202
|
-
|
|
203
|
-
This package depends on:
|
|
204
|
-
|
|
205
|
-
`,X.dependencies.forEach((B)=>{z+=`- \`${B}\`
|
|
206
|
-
`});if(X.companions&&X.companions.length>0){let B=X.companions.filter((E)=>!TQ(E));if(B.length>0)z+=`
|
|
207
|
-
## Related Packages
|
|
208
|
-
|
|
209
|
-
These packages work well with ${X.name||H}:
|
|
210
|
-
|
|
211
|
-
`,B.forEach((E)=>{let C=v(E),M=R[C];if(M&&!l(M)){let S=dw(E,C,$),A=L.relative(L.dirname(W),S).replace(/\\/g,"/"),x=M.description?.trim();if(x)z+=`- [\`${E}\`](${A}) - ${x}
|
|
212
|
-
`;else z+=`- [\`${E}\`](${A})
|
|
213
|
-
`}else{let S=dw(E,C,$),A=L.relative(L.dirname(W),S).replace(/\\/g,"/"),x=M?.description?.trim()||"Package not available";if(x&&x!=="Package not available")z+=`- [\`${E}\`](${A}) - ${x}
|
|
214
|
-
`;else z+=`- [\`${E}\`](${A})
|
|
215
|
-
`}})}let K=L.dirname($),G=`${L.relative(L.dirname(W),K)}/package-catalog.md`.replace(/\\/g,"/"),F=X.aliases&&X.aliases.length>0?X.aliases[0]:X.name||v(H),I=/[^\w$]/.test(F)||/^\d/.test(F)?`pantry['${F}']`:`pantry.${F}`;z+=`
|
|
216
|
-
## Usage Examples
|
|
217
|
-
|
|
218
|
-
\`\`\`typescript
|
|
219
|
-
import { pantry } from 'ts-pkgx'
|
|
220
|
-
|
|
221
|
-
// Access this package
|
|
222
|
-
const pkg = ${I}
|
|
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](${X.packageYmlUrl||`https://github.com/pkgxdev/pantry/tree/main/projects/${H}/package.yml`})
|
|
232
|
-
- [Homepage](${X.homepageUrl||"#"})
|
|
233
|
-
- [Back to Package Catalog](${G})
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
> Auto-generated from package data.
|
|
238
|
-
`,await b.promises.writeFile(W,_w(z)),q.push(W)}catch(H){console.error(`Error generating page for ${Z}:`,H)}return q}async function MQ(w,Q){let R=await Gw(Q),$=await $w(Q),q=mw(),Y=L.join(w,"categories");if(!b.existsSync(Y))b.mkdirSync(Y,{recursive:!0});let Z=[],X=(H)=>{if(R[H])return{domainVarName:H,pkg:R[H]};if($[H]){let W=$[H],J=v(W);if(R[J])return{domainVarName:J,pkg:R[J]}}return null};for(let[H,W]of Object.entries(q)){let J=new Map;W.forEach((K)=>{let U=X(K);if(U&&!l(U.pkg)){let G=U.pkg.domain||U.pkg.fullPath||"unknown";if(!J.has(G))J.set(G,U);else{let F=J.get(G);if(U.domainVarName.length<F.domainVarName.length||U.domainVarName.length===F.domainVarName.length&&U.domainVarName<F.domainVarName)J.set(G,U)}}});let j=Array.from(J.values()).sort((K,U)=>(K.pkg.domain||K.domainVarName).localeCompare(U.pkg.domain||U.domainVarName));if(j.length===0)continue;let O=`${H.toLowerCase().replace(/[^a-z0-9]+/g,"-")}.md`,_=L.join(Y,O),z=`# ${H}
|
|
239
|
-
|
|
240
|
-
${j.length} packages in this category
|
|
241
|
-
|
|
242
|
-
${H==="Programming Languages"?"Popular programming languages and their runtimes available through pkgx.":H==="Databases"?"Database systems and data storage solutions.":H==="Development Tools"?"Development environments, editors, and programming tools.":H==="Build Tools"?"Build systems, compilers, and development infrastructure.":H==="DevOps"?"Tools for deployment, orchestration, and infrastructure management.":H==="Multimedia"?"Audio, video, and image processing tools.":H==="Security"?"Security tools, encryption, and authentication systems.":H==="Networking"?"Network tools, protocols, and communication software.":H==="CLI Tools & Utilities"?"Command-line utilities and system tools.":`Packages related to ${H.toLowerCase()}.`}
|
|
243
|
-
|
|
244
|
-
## Packages
|
|
245
|
-
|
|
246
|
-
`;j.forEach(({domainVarName:K,pkg:U})=>{let G=U.domain||U.fullPath||"unknown",F=(M)=>{if(!U.versions||U.versions.length===0)return M.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");let S=U.versions[0],A=S.split("."),x=A[0]||"",P=A[1]||"",N=A[2]||"",u=P?`${x}.${P}`:x;return M.replace(/\{\{\s*version\.marketing\s*\}\}/g,u).replace(/\{\{\s*version\.major\s*\}\}/g,x).replace(/\{\{\s*version\.minor\s*\}\}/g,P).replace(/\{\{\s*version\.patch\s*\}\}/g,N).replace(/\{\{\s*version\.raw\s*\}\}/g,S).replace(/\{\{\s*version\s*\}\}/g,S).replace(/\{\{(?![^}]*\}\})/g,"{{")},T=[];if(U.name&&U.name!==G)T.push(U.name);if(U.aliases&&U.aliases.length>0)T.push(...U.aliases);let I=T.length>0?` (${T.join(", ")})`:"",B=U.description||"",E=F(B).replace(/\s+/g," "),C;if(G.includes("."))if(G.startsWith("github.com/")&&G.includes("/")){let S=G.replace("github.com/","").split("/");if(S.length>=2){let A=S[0],x=S.slice(1).join("-");C=`../packages/github.com/${A}/${x}.md`}else{let A=K.toLowerCase();if(/^\d/.test(A))A=`pkg-${A}`;A=A.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),C=`../packages/${A}.md`}}else C=`../packages/${G}/index.md`;else{let M=K.toLowerCase();if(/^\d/.test(M))M=`pkg-${M}`;M=M.replace(/[^\w-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),C=`../packages/${M}.md`}z+=`### [${G}](${C})${I}
|
|
247
|
-
|
|
248
|
-
${E?`${E}`:""}
|
|
249
|
-
|
|
250
|
-
**Programs**: ${U.programs&&U.programs.length>0?U.programs.map((M)=>F(M)).join(", "):"None specified"}
|
|
251
|
-
|
|
252
|
-
**Install**: \`${pw(U)}\`
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
`}),z+=`[← Back to Package Catalog](../package-catalog.md)
|
|
257
|
-
`,await b.promises.writeFile(_,_w(z)),Z.push(_)}return Z}async function Kw(w=Ww,Q){console.log("\uD83D\uDE80 Generating comprehensive package documentation...");try{if(!b.existsSync(w))b.mkdirSync(w,{recursive:!0});console.log("\uD83D\uDCDA Generating package catalog...");let R=await LQ(w,Q);console.log(`✅ Generated: ${R}`),console.log("\uD83D\uDCC4 Generating individual package pages...");let $=await EQ(w,Q);console.log(`✅ Generated ${$.length} package pages`),console.log("\uD83D\uDCC2 Generating category pages...");let q=await MQ(w,Q);console.log(`✅ Generated ${q.length} category pages`),console.log(`
|
|
258
|
-
\uD83C\uDF89 Documentation generation complete!`),console.log(`\uD83D\uDCCD Output directory: ${w}`),console.log(`\uD83D\uDCCA Total files generated: ${1+$.length+q.length}`),console.log(`
|
|
259
|
-
Files generated:`),console.log(`- Package catalog: ${R}`),console.log(`- Package pages: ${$.length} files in docs/packages/`),console.log(`- Category pages: ${q.length} files in docs/categories/`)}catch(R){throw console.error("❌ Error generating documentation:",R),R}}async function Uw(){try{console.log("\uD83C\uDFAF Updating Dependencies type timestamp...");let w=L.join(V.cwd(),"src","dependencies.ts");if(!b.existsSync(w)){console.log("dependencies.ts not found, skipping update");return}let Q=b.readFileSync(w,"utf-8"),R=new Date().toISOString(),$=Q.replace(/\/\/ Auto-generated precise dependency types/,`// Auto-generated precise dependency types
|
|
260
|
-
// Last updated: ${R}`);b.writeFileSync(w,$),console.log("✅ Updated dependencies.ts timestamp")}catch(w){console.error("Error updating dependencies.ts:",w)}}async function CQ(){try{let w=V.argv.slice(2);switch(w[0]||"index"){case"index":{if(console.log("\uD83D\uDD27 Generating package index..."),!await zw())console.error("❌ Failed to generate index"),V.exit(1);if(console.log("\uD83C\uDFF7️ Generating aliases..."),!await Bw())console.error("❌ Failed to generate aliases"),V.exit(1);console.log("\uD83C\uDFAF Updating PackageVersionMap..."),await Uw(),console.log("✨ Index and aliases generation completed successfully!");break}case"docs":{let R=w[1]||Ww;console.log(`\uD83D\uDCDA Generating documentation to ${R}...`),await Kw(R),console.log("✨ Documentation generation completed successfully!");break}case"all":{if(console.log("\uD83D\uDE80 Generating everything..."),console.log("\uD83D\uDD27 Generating package index..."),!await zw())console.error("❌ Failed to generate index"),V.exit(1);if(console.log("\uD83C\uDFF7️ Generating aliases..."),!await Bw())console.error("❌ Failed to generate aliases"),V.exit(1);console.log("\uD83C\uDFAF Updating PackageVersionMap..."),await Uw();let q=w[1]||Ww;console.log(`\uD83D\uDCDA Generating documentation to ${q}...`),await Kw(q),console.log("✨ All generation completed successfully!");break}default:console.log(`
|
|
261
|
-
Usage: bun run src/generate.ts [command] [options]
|
|
262
|
-
|
|
263
|
-
Commands:
|
|
264
|
-
index Generate package index and aliases (default)
|
|
265
|
-
docs [output-dir] Generate documentation (default: ./docs)
|
|
266
|
-
all [output-dir] Generate everything (index, aliases, and docs)
|
|
267
|
-
|
|
268
|
-
Examples:
|
|
269
|
-
bun run src/generate.ts
|
|
270
|
-
bun run src/generate.ts index
|
|
271
|
-
bun run src/generate.ts docs
|
|
272
|
-
bun run src/generate.ts docs ./custom-docs
|
|
273
|
-
bun run src/generate.ts all
|
|
274
|
-
bun run src/generate.ts all ./custom-docs
|
|
275
|
-
`);break}}catch(w){console.error("\uD83D\uDCA5 Error during generation:",w),V.exit(1)}}var IQ=import.meta.url===`file://${V.argv[1]}`||import.meta.url===`file:///${V.argv[1]}`;if(IQ)CQ();import p from"node:fs";import s from"node:path";import r from"node:process";async function SQ(w,Q={}){let{targetOs:R=r.platform==="darwin"?"darwin":r.platform==="win32"?"windows":"linux",includeOsSpecific:$=!0,maxDepth:q=10,verbose:Y=!1}=Q,Z=await kw(w,{targetOs:R,includeOsSpecific:$,maxDepth:q,verbose:Y}),X=a(w),H=Z.allDependencies.map((_)=>({name:_.name,version:_.version,constraint:_.constraint,isOsSpecific:_.isOsSpecific,os:_.os})),W=X.map((_)=>_.name),J=`pkgx install ${W.join(" ")}`,j=`pantry install ${W.join(" ")}`,O=Z.conflicts.map((_)=>{let z=H.find((K)=>K.name===_.package);return{package:_.package,versions:_.versions,resolved:z?.version||"latest"}});return{packages:H,directCount:X.length,totalCount:H.length,conflicts:O,pkgxCommand:J,pantryCommand:j}}async function fR(w,Q={}){let R=s.join(r.cwd(),`.temp-deps-${Date.now()}.yaml`);try{return p.writeFileSync(R,w,"utf-8"),await SQ(R,Q)}finally{if(p.existsSync(R))p.unlinkSync(R)}}async function kR(w,Q={}){let{targetOs:R=r.platform==="darwin"?"darwin":r.platform==="win32"?"windows":"linux",includeOsSpecific:$=!0,maxDepth:q=10}=Q,Y=await ww(w,{targetOs:R,includeOsSpecific:$,maxDepth:q});return Y.unshift({name:w,version:"latest",constraint:"*",isOsSpecific:!1}),(await Yw(Y,{targetOs:R,includeOsSpecific:$,maxDepth:q})).allDependencies.map((X)=>({name:X.name,version:X.version,constraint:X.constraint,isOsSpecific:X.isOsSpecific,os:X.os}))}function dR(w,Q="pantry"){if(Q==="pkgx")return`pkgx install ${w.join(" ")}`;return`pantry install ${w.join(" ")}`}function gR(w){let Q=[],R=s.join(w,"pantry");try{let Y=p.readdirSync(R,{withFileTypes:!0});for(let Z of Y){if(!Z.isDirectory())continue;if(Z.name.startsWith("@")){let X=s.join(R,Z.name);try{let H=p.readdirSync(X,{withFileTypes:!0});for(let W of H){if(!W.isDirectory())continue;let J=`${Z.name}/${W.name}`,j=s.join(X,W.name,"package.json"),O=ow(j);Q.push({name:J,version:O,isWorkspace:J.startsWith("@stacksjs/"),isScoped:!0})}}catch{}}else{let X=s.join(R,Z.name,"package.json"),H=ow(X);Q.push({name:Z.name,version:H,isWorkspace:!1,isScoped:!1})}}}catch{}Q.sort((Y,Z)=>Y.name.localeCompare(Z.name));let $=Q.filter((Y)=>Y.isWorkspace).length,q=Q.length-$;return{packages:Q,thirdPartyCount:q,workspaceCount:$,totalCount:Q.length}}function ow(w){try{let Q=p.readFileSync(w,"utf-8");return JSON.parse(Q).version||"0.0.0"}catch{return"0.0.0"}}mQ();function lR(w){return w}function cR(w){return w}var pR={baseUrl:"https://dist.pkgx.dev"};function oR(w){return w}import{execSync as jw}from"node:child_process";var t=new Set,sw=!1;function bQ(){if(sw)return;sw=!0;let w=()=>{for(let Q of t)try{jw(`pantry stop ${Q}`,{stdio:"ignore",timeout:1e4})}catch{}t.clear()};process.on("exit",w),process.on("SIGINT",()=>{w(),process.exit(130)}),process.on("SIGTERM",()=>{w(),process.exit(143)})}function Xw(w,Q=!1){let R={encoding:"utf-8",timeout:30000,stdio:Q?"pipe":["pipe","pipe","pipe"]};return jw(`pantry ${w}`,R)}function FQ(w){let Q=w.match(/Name:\s+(\S+)/)?.[1]??"",R=/Status:\s+running/i.test(w),$=w.match(/Port:\s+(\d+)/),q=w.match(/PID:\s+(\d+)/),Y=w.match(/Data Dir:\s+(.+)/);return{name:Q,running:R,port:$?Number.parseInt($[1],10):null,pid:q?Number.parseInt(q[1],10):null,dataDir:Y?Y[1].trim():null}}class f{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 jw("pantry --version",{stdio:"ignore",timeout:5000}),!0}catch{return!1}}status(){try{let w=Xw(`inspect ${this.config.name}`,!0);return FQ(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(bQ(),this.isRunning())return this.status();return Xw(`start ${this.config.name}`,this.config.quiet),this._startedByUs=!0,t.add(this.config.name),await this.waitReady(),this.status()}async stop(){if(!this._startedByUs)return;try{Xw(`stop ${this.config.name}`,this.config.quiet)}catch{}t.delete(this.config.name),this._startedByUs=!1}async forceStop(){try{Xw(`stop ${this.config.name}`,this.config.quiet)}catch{}t.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 rw=new f({name:"postgres"});async function Ow(w){let Q=await rw.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 Tw(){await rw.stop()}function AQ(w){let Q=null;return{get connection(){if(!Q)throw Error("Postgres not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Ow(w)},afterAll:async()=>{await Tw(),Q=null}}}async function xQ(w,Q){let R=await Ow(Q);try{return await w(R)}finally{if(Q?.stopAfter!==!1)await Tw()}}var tw=new f({name:"redis"});async function Lw(w){let Q=await tw.ensureRunning(),R=w?.port??Q.port??6379,$=w?.host??"localhost";return{port:R,host:$,url:`redis://${$}:${R}`}}async function Ew(){await tw.stop()}function VQ(w){let Q=null;return{get connection(){if(!Q)throw Error("Redis not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Lw(w)},afterAll:async()=>{await Ew(),Q=null}}}async function yQ(w,Q){let R=await Lw(Q);try{return await w(R)}finally{if(Q?.stopAfter!==!1)await Ew()}}var nw=new f({name:"mysql"});async function Mw(w){let Q=await nw.ensureRunning();return{port:w?.port??Q.port??3306,host:w?.host??"localhost",database:w?.database??"test",username:w?.username??"root"}}async function Cw(){await nw.stop()}function NQ(w){let Q=null;return{get connection(){if(!Q)throw Error("MySQL not started. Ensure beforeAll has run.");return Q},beforeAll:async()=>{Q=await Mw(w)},afterAll:async()=>{await Cw(),Q=null}}}async function uQ(w,Q){let R=await Mw(Q);try{return await w(R)}finally{if(Q?.stopAfter!==!1)await Cw()}}import{existsSync as Iw,mkdirSync as ew,mkdtempSync as DQ,rmSync as aw,writeFileSync as PQ}from"node:fs";import{tmpdir as hQ}from"node:os";import{join as Sw}from"node:path";var Zw=new Set,iw=!1;function vQ(){if(iw)return;iw=!0;let w=()=>{for(let Q of Zw)try{if(Iw(Q))aw(Q,{recursive:!0,force:!0})}catch{}Zw.clear()};process.on("exit",w),process.on("SIGINT",()=>{w(),process.exit(130)}),process.on("SIGTERM",()=>{w(),process.exit(143)})}function bw(w="pantry-test-"){vQ();let Q=DQ(Sw(hQ(),w));return Zw.add(Q),Q}function Fw(w){Zw.delete(w);try{if(Iw(w))aw(w,{recursive:!0,force:!0})}catch{}}async function fQ(w,Q){let R=bw(w);try{return await Q(R)}finally{Fw(R)}}function kQ(w,Q){let R=bw(w);try{return Q(R)}finally{Fw(R)}}function dQ(w,Q,R){let $=Sw(w,Q),q=$.substring(0,$.lastIndexOf("/"));if(q&&!Iw(q))ew(q,{recursive:!0});return PQ($,R),$}function gQ(w,Q){let R=Sw(w,Q);return ew(R,{recursive:!0}),R}export{xw as a,RQ as b,pQ as c,oQ as d,sQ as e,Vw as f,rQ as g,tQ as h,nQ as i,iQ as j,n as k,eQ as l,aQ as m,yw as n,wR as o,QR as p,RR as q,$R as r,XR as s,JR as t,WR as u,zR as v,BR as w,KR as x,UR as y,GR as z,_R as A,jR as B,OR as C,TR as D,LR as E,a as F,XQ as G,IR as H,fw as I,k as J,ww as K,Yw as L,kw as M,SR as N,lw as O,UQ as P,GQ as Q,zw as R,Bw as S,Kw as T,Uw as U,SQ as V,fR as W,kR as X,dR as Y,gR as Z,lR as _,cR as $,pR as aa,oR as ba,f as ca,Ow as da,Tw as ea,AQ as fa,xQ as ga,Lw as ha,Ew as ia,VQ as ja,yQ as ka,Mw as la,Cw as ma,NQ as na,uQ as oa,bw as pa,Fw as qa,fQ as ra,kQ as sa,dQ as ta,gQ as ua};
|
package/dist/chunk-v54492f4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{fb as a,gb as b,hb as c,ib as d,jb as e}from"./chunk-xxpems7r.js";import"./chunk-sd8qadhd.js";export{d as PACKAGE_ALIASES,c as DEFAULT_TIMEOUT_MS,b as DEFAULT_CACHE_EXPIRATION_MINUTES,a as DEFAULT_CACHE_DIR,e as ALL_KNOWN_PACKAGES};
|