@stacksjs/launchpad
Version:
Like Homebrew, but faster.
6 lines (5 loc) • 13.1 kB
JavaScript
// @bun
import{Ya as R}from"./chunk-f8dcmgkp.js";import{Za as C,_a as j}from"./chunk-fhet42vs.js";import{ab as D}from"./chunk-b9hx8gsj.js";import"./chunk-8pxdwzvm.js";import K from"fs";import{arch as u,platform as h}from"os";import q from"path";import F from"process";function A(z){let G={};if(G[z])return G[z];let T=C[z];if(T)return T;let W={mysql:"mysql.com",mariadb:"mariadb.com/server",postgresql:"postgresql.org",postgres:"postgresql.org",redis:"redis.io",mongodb:"mongodb.com",sqlite:"sqlite.org",cassandra:"cassandra.apache.org",influxdb:"influxdata.com",couchdb:"couchdb.apache.org",neo4j:"neo4j.com",clickhouse:"clickhouse.com",duckdb:"duckdb.org",valkey:"valkey.io",node:"nodejs.org",nodejs:"nodejs.org",python:"python.org",python3:"python.org",php:"php.net",ruby:"ruby-lang.org",rust:"rust-lang.org",go:"go.dev",golang:"go.dev",java:"openjdk.org",openjdk:"openjdk.org",deno:"deno.land",bun:"bun.sh",npm:"npmjs.com",yarn:"yarnpkg.com",pnpm:"pnpm.io",pip:"pip.pypa.io",composer:"getcomposer.org",poetry:"python-poetry.org",pipenv:"pipenv.pypa.io",gem:"rubygems.org",cargo:"crates.io",maven:"maven.apache.org",gradle:"gradle.org",docker:"docker.com",kubectl:"kubernetes.io/kubectl",helm:"helm.sh",terraform:"terraform.io",ansible:"ansible.com",curl:"curl.se",wget:"gnu.org/wget",nginx:"nginx.org",apache:"apache.org",vim:"vim.org",neovim:"neovim.io",nvim:"neovim.io",code:"code.visualstudio.com",vscode:"code.visualstudio.com",aws:"aws.amazon.com",gcloud:"cloud.google.com",azure:"azure.microsoft.com",heroku:"heroku.com",vercel:"vercel.com",netlify:"netlify.com",cmake:"cmake.org",make:"gnu.org/make",gcc:"gnu.org/gcc",clang:"llvm.org",llvm:"llvm.org",meilisearch:"meilisearch.com",traefik:"traefik.io",caddy:"caddy.dev",haproxy:"haproxy.org",jq:"jqlang.github.io",yq:"mikefarah.gitbook.io/yq",htop:"htop.dev",tree:"tree.dev",ripgrep:"github.com/BurntSushi/ripgrep",rg:"github.com/BurntSushi/ripgrep",fd:"github.com/sharkdp/fd",bat:"github.com/sharkdp/bat",exa:"the.exa.website",fzf:"github.com/junegunn/fzf"}[z.toLowerCase()];if(W)return W;return z}function x(z){let G=A(z);for(let[W,X]of Object.entries(j))if("domain"in X&&X.domain===G){if("versions"in X&&Array.isArray(X.versions)&&X.versions.length>0){let O=X.versions[0];return typeof O==="string"?O:String(O)}break}let T=G.replace(/[^a-z0-9]/gi,"").toLowerCase(),Q=j[T];if(Q&&"versions"in Q&&Array.isArray(Q.versions)&&Q.versions.length>0){let W=Q.versions[0];return typeof W==="string"?W:String(W)}return null}function V(z){let G=A(z);for(let[W,X]of Object.entries(j))if("domain"in X&&X.domain===G){if("versions"in X&&Array.isArray(X.versions))return X.versions.map((O)=>typeof O==="string"?O:String(O));break}let T=G.replace(/[^a-z0-9]/gi,"").toLowerCase(),Q=j[T];if(Q&&"versions"in Q&&Array.isArray(Q.versions))return Q.versions.map((W)=>typeof W==="string"?W:String(W));return[]}function o(z,G){return V(z).includes(G)}function t(z,G){let T=V(z);if(!T.length)return null;if(!G||G==="latest"||G==="*")return T[0];if(T.includes(G))return G;let Q=null;if(typeof Bun!=="undefined"&&Bun.semver)try{let O=[...T].sort((w,B)=>{try{return Bun.semver.order(B,w)}catch{return B.localeCompare(w,void 0,{numeric:!0})}});for(let w of O)try{if(Bun.semver.satisfies(w,G)){Q=w;break}}catch{continue}}catch(O){if(D.verbose)console.warn(`Bun.semver failed for ${G}, falling back to manual parsing: ${O}`)}let W=null;if(G.startsWith("^")){let O=G.slice(1),[w,B,Y]=O.split(".");W=[...T].sort((_,H)=>{let E=_.split(".").map(($)=>{let U=Number.parseInt($,10);return Number.isNaN(U)?0:U}),J=H.split(".").map(($)=>{let U=Number.parseInt($,10);return Number.isNaN(U)?0:U});for(let $=0;$<Math.max(E.length,J.length);$++){let U=E[$]||0,L=J[$]||0;if(U!==L)return L-U}return 0}).find((_)=>{let H=_.split(".");if(H.length<1)return!1;let E=H[0],J=H[1]||"0",$=H[2]||"0";if(E!==w)return!1;if(!B||B==="0")return!0;let U=Number.parseInt(J||"0",10),L=Number.parseInt(B,10);if(Number.isNaN(U)||Number.isNaN(L))return!1;if(U<L)return!1;if(Y&&U===L){let I=Number.parseInt($||"0",10),y=Number.parseInt(Y,10);if(Number.isNaN(I)||Number.isNaN(y))return!1;return I>=y}return!0})||null}if(G.startsWith("~")){let O=G.slice(1),[w,B,Y]=O.split(".");W=[...T].sort((_,H)=>{let E=_.split(".").map(($)=>{let U=Number.parseInt($,10);return Number.isNaN(U)?0:U}),J=H.split(".").map(($)=>{let U=Number.parseInt($,10);return Number.isNaN(U)?0:U});for(let $=0;$<Math.max(E.length,J.length);$++){let U=E[$]||0,L=J[$]||0;if(U!==L)return L-U}return 0}).find((_)=>{let H=_.split(".");if(H.length<2)return!1;let E=H[0],J=H[1],$=H[2]||"0";if(E!==w)return!1;if(J!==B)return!1;if(Y){let U=Number.parseInt($||"0",10),L=Number.parseInt(Y,10);if(Number.isNaN(U)||Number.isNaN(L))return!1;return U>=L}return!0})||null}if(Q)return Q;if(W)return W;if(G.includes(" - ")){if(typeof Bun!=="undefined"&&Bun.semver)try{let Y=[...T].sort((Z,_)=>{try{return Bun.semver.order(_,Z)}catch{return _.localeCompare(Z,void 0,{numeric:!0})}});for(let Z of Y)try{if(Bun.semver.satisfies(Z,G))return Z}catch{continue}}catch{}let[O,w]=G.split(" - ");return T.find((Y)=>{return Y>=O&&Y<=w})||null}if(G.startsWith(">=")){let O=G.slice(2);return[...T].sort((Y,Z)=>{let _=Y.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J}),H=Z.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J});for(let E=0;E<Math.max(_.length,H.length);E++){let J=_[E]||0,$=H[E]||0;if(J!==$)return $-J}return 0}).find((Y)=>{let Z=Y.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E}),_=O.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E});for(let H=0;H<Math.max(Z.length,_.length);H++){let E=Z[H]||0,J=_[H]||0;if(E!==J)return E>=J}return!0})||null}if(G.startsWith("<=")){let O=G.slice(2);return[...T].sort((Y,Z)=>{let _=Y.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J}),H=Z.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J});for(let E=0;E<Math.max(_.length,H.length);E++){let J=_[E]||0,$=H[E]||0;if(J!==$)return $-J}return 0}).find((Y)=>{let Z=Y.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E}),_=O.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E});for(let H=0;H<Math.max(Z.length,_.length);H++){let E=Z[H]||0,J=_[H]||0;if(E!==J)return E<=J}return!0})||null}if(G.startsWith(">")&&!G.startsWith(">=")){let O=G.slice(1);return[...T].sort((Y,Z)=>{let _=Y.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J}),H=Z.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J});for(let E=0;E<Math.max(_.length,H.length);E++){let J=_[E]||0,$=H[E]||0;if(J!==$)return $-J}return 0}).find((Y)=>{let Z=Y.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E}),_=O.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E});for(let H=0;H<Math.max(Z.length,_.length);H++){let E=Z[H]||0,J=_[H]||0;if(E!==J)return E>J}return!1})||null}if(G.startsWith("<")&&!G.startsWith("<=")){let O=G.slice(1);return[...T].sort((Y,Z)=>{let _=Y.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J}),H=Z.split(".").map((E)=>{let J=Number.parseInt(E,10);return Number.isNaN(J)?0:J});for(let E=0;E<Math.max(_.length,H.length);E++){let J=_[E]||0,$=H[E]||0;if(J!==$)return $-J}return 0}).find((Y)=>{let Z=Y.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E}),_=O.split(".").map((H)=>{let E=Number.parseInt(H,10);return Number.isNaN(E)?0:E});for(let H=0;H<Math.max(Z.length,_.length);H++){let E=Z[H]||0,J=_[H]||0;if(E!==J)return E<J}return!1})||null}if(G.includes("x")||G.includes("X")){let O=G.toLowerCase().replace(/x/g,"\\d+"),w=new RegExp(`^${O}$`);return T.find((Y)=>w.test(Y))||null}return T.find((O)=>O.startsWith(G))||null}function p(){return Object.entries(C).map(([G,T])=>({name:G,domain:T}))}function N(z){return z in C}function S(z){return z.replace(/[^a-z0-9]/gi,"").toLowerCase()in j}function i(z){return N(z)||S(z)}function b(){return Object.keys(C)}function d(){return Object.keys(j)}function n(){return[...b(),...d()]}function f(z){let G=z.lastIndexOf("@");if(G!==-1&&G!==0){let Y=z.slice(0,G),Z=z.slice(G+1);return{name:Y,version:Z||void 0}}let T=z.indexOf(">=");if(T!==-1&&T!==0){let Y=z.slice(0,T),Z=z.slice(T);return{name:Y,version:Z||void 0}}let Q=z.indexOf("<=");if(Q!==-1&&Q!==0){let Y=z.slice(0,Q),Z=z.slice(Q);return{name:Y,version:Z||void 0}}let W=z.indexOf(">");if(W!==-1&&W!==0){let Y=z.slice(0,W),Z=z.slice(W);return{name:Y,version:Z||void 0}}let X=z.indexOf("<");if(X!==-1&&X!==0){let Y=z.slice(0,X),Z=z.slice(X);return{name:Y,version:Z||void 0}}let O=z.indexOf("^");if(O!==-1&&O!==0){let Y=z.slice(0,O),Z=z.slice(O);return{name:Y,version:Z||void 0}}let w=z.indexOf("~");if(w!==-1&&w!==0){let Y=z.slice(0,w),Z=z.slice(w);return{name:Y,version:Z||void 0}}let B=z.indexOf("=");if(B!==-1&&B!==0){let Y=z.slice(0,B),Z=z.slice(B+1);return{name:Y,version:Z||void 0}}return{name:z}}function r(z){let G=A(z);for(let[W,X]of Object.entries(j))if("domain"in X&&X.domain===G){let O="versions"in X&&Array.isArray(X.versions)?X.versions:[];return{name:"name"in X?X.name:z,domain:X.domain,description:"description"in X?X.description:void 0,latestVersion:O.length>0?typeof O[0]==="string"?O[0]:String(O[0]):void 0,totalVersions:O.length,programs:"programs"in X?X.programs:void 0,dependencies:"dependencies"in X?X.dependencies:void 0,companions:"companions"in X?X.companions:void 0}}let T=G.replace(/[^a-z0-9]/gi,"").toLowerCase(),Q=j[T];if(Q){let W="versions"in Q&&Array.isArray(Q.versions)?Q.versions:[];return{name:"name"in Q?Q.name:z,domain:"domain"in Q?Q.domain:G,description:"description"in Q?Q.description:void 0,latestVersion:W.length>0?typeof W[0]==="string"?W[0]:String(W[0]):void 0,totalVersions:W.length,programs:"programs"in Q?Q.programs:void 0,dependencies:"dependencies"in Q?Q.dependencies:void 0,companions:"companions"in Q?Q.companions:void 0}}return null}var M=new Map;function Oz(){if(F.env.LAUNCHPAD_PREFIX)return new R(F.env.LAUNCHPAD_PREFIX);if(D.installPath)return new R(D.installPath);if(P("/usr/local"))return new R("/usr/local");return R.home().join(".local")}function P(z){try{return K.accessSync(z,K.constants.W_OK),!0}catch{return!1}}function Qz(){let z=h();switch(z){case"darwin":return"darwin";case"linux":return"linux";case"win32":return"windows";default:throw new Error(`Unsupported platform: ${z}`)}}function Tz(){let z=u();switch(z){case"x64":return"x86-64";case"arm64":return"aarch64";case"arm":return"armv7l";default:throw new Error(`Unsupported architecture: ${z}`)}}function k(){return F.env.SHELL||F.env.COMSPEC||"/bin/bash"}function Wz(z){return(F.env.PATH||"").split(q.delimiter).includes(z)}function Xz(z){try{let G=F.env.PATH||"";if(!G.includes(z))if(!G)F.env.PATH=z;else F.env.PATH=`${z}:${G}`;let T=k(),Q=l(T);if(!Q)return!0;let W=`export PATH="${z}:$PATH"`;if(!K.readFileSync(Q,"utf-8").includes(W))return K.appendFileSync(Q,`
${W}
`),!0;return!0}catch{return!1}}function l(z){let G=F.env.HOME||F.env.USERPROFILE;if(!G)return null;if(z.includes("zsh"))return q.join(G,".zshrc");if(z.includes("bash"))return q.join(G,".bashrc");if(z.includes("fish"))return q.join(G,".config/fish/config.fish");return null}function Yz(z){return["/tmp","/var/tmp",F.env.TMPDIR,F.env.TEMP,F.env.TMP].filter(Boolean).some((T)=>z.startsWith(T||""))}function g(z){if(M.has(z))return M.get(z)||null;let T=(F.env.PATH||"").split(q.delimiter);for(let Q of T){if(!Q)continue;let W=q.join(Q,z);try{let X=K.statSync(W);if(X.isFile()&&X.mode&K.constants.X_OK)return M.set(z,W),W}catch{continue}}return M.set(z,null),null}function Zz(){M.clear()}function _z(z,G){if(!G)return g(z);let T=q.join(G,"bin",z);try{let Q=K.statSync(T);if(Q.isFile()&&Q.mode&K.constants.X_OK)return T}catch{}return null}async function m(z,G){await K.promises.mkdir(G,{recursive:!0});let T=await K.promises.readdir(z,{withFileTypes:!0});for(let Q of T){let W=q.join(z,Q.name),X=q.join(G,Q.name);if(Q.isDirectory())await m(W,X);else if(Q.isFile())try{await K.promises.copyFile(W,X);let O=await K.promises.stat(W);await K.promises.chmod(X,O.mode)}catch(O){if(O instanceof Error&&"code"in O&&O.code==="EACCES")continue;throw O}}}function $z(z){let G=new Map;for(let T of z){let{name:Q}=f(T),W=A(Q),{version:X}=f(T),O=X;if(!O){let B=x(W);O=typeof B==="string"?B:String(B)}let w=G.get(W);if(!w)G.set(W,{spec:T,version:O});else try{if(typeof Bun!=="undefined"&&Bun.semver){if(Bun.semver.order(O,w.version)>0)G.set(W,{spec:T,version:O})}else G.set(W,{spec:T,version:O})}catch{G.set(W,{spec:T,version:O})}}return Array.from(G.values()).map((T)=>T.spec)}export{P as writable,Yz as isTemporaryDirectory,Wz as isInPath,Oz as install_prefix,k as getUserShell,Qz as getPlatform,Tz as getArchitecture,g as findBinaryInPath,_z as findBinaryInEnvironment,$z as deduplicatePackagesByVersion,m as copyDirectoryStructure,Zz as clearBinaryPathCache,Xz as addToPath};
export{A as xa,x as ya,V as za,o as Aa,t as Ba,p as Ca,N as Da,S as Ea,i as Fa,b as Ga,d as Ha,n as Ia,f as Ja,r as Ka,Oz as La,P as Ma,Qz as Na,Tz as Oa,k as Pa,Wz as Qa,Xz as Ra,Yz as Sa,g as Ta,Zz as Ua,_z as Va,m as Wa,$z as Xa};