simplecloud 0.0.1-beta.16 → 0.0.1-beta.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.
Files changed (3) hide show
  1. package/dist/cli.js +168 -166
  2. package/dist/index.js +2 -2
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ var SOA=Object.create;var{getPrototypeOf:kOA,defineProperty:WR,getOwnPropertyNam
16
16
  `)}catch{return""}}async attach(A,q){let F=UV(A);if((await this.status(A,q)).status!=="running")throw new Error(`Component ${A} is not running`);return new Promise((E,Z)=>{let U=K$A("screen",["-r",F],{stdio:"inherit"});U.on("error",Z),U.on("close",()=>E())})}}var yhA;var U$A=M8(()=>{B1();pB();yhA=bhA(vhA)});var Y$A={};IO(Y$A,{DockerRunner:()=>G$A});import{exec as hhA,spawn as mhA}from"child_process";import*as g$A from"path";import{promisify as chA}from"util";class G$A{type="docker";async isAvailable(){if(!await KG("docker"))return!1;try{return await VO("docker info"),!0}catch{return!1}}async start(A){let{componentId:q,installationDir:F,jarPath:K,javaArgs:E=[],env:Z={}}=A,U=Y8(q),g=await this.status(q,F);if(g.status==="running")return{success:!1,message:`Component ${q} is already running in container "${U}"`,containerId:g.containerId};try{await VO(`docker rm -f ${U} 2>/dev/null || true`)}catch{}let G=g$A.basename(K),Y="/app",Q=["run","-d","--name",U,"--restart","unless-stopped","-v",`${F}:${Y}`,"-w",Y];for(let[J,$]of Object.entries(Z))Q.push("-e",`${J}=${$}`);Q.push(dhA),Q.push("java"),Q.push(...E),Q.push("-jar"),Q.push(G);try{let{stdout:J}=await VO(`docker ${Q.join(" ")}`),$=J.trim().slice(0,12);if(await new Promise((V)=>setTimeout(V,1000)),(await this.status(q,F)).status==="running")return{success:!0,message:`Started ${q} in container "${U}"`,containerId:$};return{success:!1,message:`Container started but exited immediately. Logs:
17
17
  ${await this.logs(q,F,20)}`}}catch(J){let $=J instanceof Error?J.message:String(J);return{success:!1,message:`Failed to start ${q}: ${$}`}}}async stop(A,q){let F=Y8(A);try{return await VO(`docker stop ${F}`),await VO(`docker rm ${F}`),{success:!0,message:`Stopped and removed container "${F}"`}}catch(K){let E=K instanceof Error?K.message:String(K);if(E.includes("No such container"))return{success:!0,message:`Container "${F}" was not running`};return{success:!1,message:`Failed to stop ${A}: ${E}`}}}async status(A,q){let F=Y8(A);try{let{stdout:K}=await VO(`docker inspect --format '{{.State.Running}} {{.Id}} {{.State.StartedAt}}' ${F}`),[E,Z,U]=K.trim().split(" ");if(E==="true"){let g=new Date(U??Date.now()),G=Math.floor((Date.now()-g.getTime())/1000);return{status:"running",containerId:Z?.slice(0,12),uptime:G}}return{status:"stopped"}}catch{return{status:"stopped"}}}async logs(A,q,F=100){let K=Y8(A);try{let{stdout:E}=await VO(`docker logs --tail ${F} ${K}`);return E}catch{return""}}async attach(A,q){let F=Y8(A);if((await this.status(A,q)).status!=="running")throw new Error(`Component ${A} is not running`);return new Promise((E,Z)=>{let U=mhA("docker",["attach",F],{stdio:"inherit"});U.on("error",Z),U.on("close",()=>E())})}}var VO,dhA="eclipse-temurin:21-jre";var Q$A=M8(()=>{B1();pB();VO=chA(hhA)});var X$A={};IO(X$A,{NativeRunner:()=>$$A});import{spawn as fhA}from"child_process";import*as _g from"fs/promises";import*as z4 from"path";class $$A{type="native";async isAvailable(){return!0}async start(A){let{componentId:q,installationDir:F,jarPath:K,javaArgs:E=[],env:Z={}}=A,U=await this.status(q,F);if(U.status==="running")return{success:!1,message:`Component ${q} is already running (PID: ${U.pid})`,pid:U.pid};let g=z4.join(F,"logs");await _g.mkdir(g,{recursive:!0});let G=z4.join(g,`${q}.log`),Y=z4.join(g,`${q}.error.log`),J=oE()==="windows"?"java.exe":"java",$=[...E,"-jar",K],O={...process.env,...Z};try{let _=await _g.open(G,"a"),V=await _g.open(Y,"a"),M=fhA(J,$,{cwd:F,env:O,detached:!0,stdio:["ignore",_.fd,V.fd]}),P=M.pid;if(!P)return await _.close(),await V.close(),{success:!1,message:`Failed to start ${q}: No PID returned`};if(M.unref(),await _.close(),await V.close(),await uhA(F,q,{pid:P,startedAt:new Date().toISOString()}),await new Promise((I)=>setTimeout(I,500)),(await this.status(q,F)).status==="running")return{success:!0,message:`Started ${q} (PID: ${P})`,pid:P};return await Q8(F,q),{success:!1,message:`Process started but exited immediately. Check logs at ${G}`}}catch(_){let V=_ instanceof Error?_.message:String(_);return{success:!1,message:`Failed to start ${q}: ${V}`}}}async stop(A,q){let F=await J$A(q,A);if(!F)return{success:!0,message:`Component ${A} is not running (no PID file)`};if(!await Ed(F.pid))return await Q8(q,A),{success:!0,message:`Component ${A} was not running (stale PID file removed)`};try{process.kill(F.pid,"SIGTERM");for(let E=0;E<10;E++)if(await new Promise((U)=>setTimeout(U,500)),!await Ed(F.pid))return await Q8(q,A),{success:!0,message:`Stopped ${A} (PID: ${F.pid})`};return process.kill(F.pid,"SIGKILL"),await new Promise((E)=>setTimeout(E,500)),await Q8(q,A),{success:!0,message:`Force stopped ${A} (PID: ${F.pid})`}}catch(E){let Z=E instanceof Error?E.message:String(E);return await Q8(q,A),{success:!1,message:`Failed to stop ${A}: ${Z}`}}}async status(A,q){let F=await J$A(q,A);if(!F)return{status:"stopped"};if(!await Ed(F.pid))return await Q8(q,A),{status:"stopped"};let E=new Date(F.startedAt),Z=Math.floor((Date.now()-E.getTime())/1000);return{status:"running",pid:F.pid,uptime:Z}}async logs(A,q,F=100){let K=z4.join(q,"logs",`${A}.log`);try{return(await _g.readFile(K,"utf-8")).split(`
18
18
  `).slice(-F).join(`
19
- `)}catch{return""}}async attach(A,q){throw new Error("Attach is not supported for native runner. Use 'logs' command instead.")}}var Zd=(A,q)=>{return z4.join(A,".pids",`${q}.json`)},J$A=async(A,q)=>{let F=Zd(A,q);try{let K=await _g.readFile(F,"utf-8");return JSON.parse(K)}catch{return null}},uhA=async(A,q,F)=>{let K=Zd(A,q),E=z4.dirname(K);await _g.mkdir(E,{recursive:!0}),await _g.writeFile(K,JSON.stringify(F,null,2),"utf-8")},Q8=async(A,q)=>{let F=Zd(A,q);try{await _g.unlink(F)}catch{}},Ed=async(A)=>{try{return process.kill(A,0),!0}catch{return!1}};var O$A=M8(()=>{B1()});var Ud=(A)=>{switch(A){case"linux":case"darwin":return"screen";case"windows":return"native"}},NO=async(A)=>{switch(A){case"screen":return KG("screen");case"docker":return KG("docker");case"native":return!0}},J8=async(A)=>{let q=oE();if(A){if(await NO(A))return A}let F=Ud(q);if(await NO(F))return F;if(q!=="windows"){if(await NO("docker"))return"docker"}if(q==="windows")return"native";throw new Error(`No runner available. Please install screen or docker for ${q}.`)},_$A,$8=async(A)=>{let q=_$A.get(A);if(q)return q;let F;switch(A){case"screen":{let{ScreenRunner:K}=await Promise.resolve().then(() => (U$A(),Z$A));F=new K;break}case"docker":{let{DockerRunner:K}=await Promise.resolve().then(() => (Q$A(),Y$A));F=new K;break}case"native":{let{NativeRunner:K}=await Promise.resolve().then(() => (O$A(),X$A));F=new K;break}}return _$A.set(A,F),F},UV=(A)=>{return`simplecloud-${A}`},Y8=(A)=>{return`simplecloud-${A}`};var pB=M8(()=>{B1();_$A=new Map});var hOA="0.0.1-beta.16";var Af=(A=0)=>(q)=>`\x1B[${q+A}m`,qf=(A=0)=>(q)=>`\x1B[${38+A};5;${q}m`,Ff=(A=0)=>(q,F,K)=>`\x1B[${38+A};2;${q};${F};${K}m`,vF={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},fcA=Object.keys(vF.modifier),mOA=Object.keys(vF.color),cOA=Object.keys(vF.bgColor),ucA=[...mOA,...cOA];function dOA(){let A=new Map;for(let[q,F]of Object.entries(vF)){for(let[K,E]of Object.entries(F))vF[K]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},F[K]=vF[K],A.set(E[0],E[1]);Object.defineProperty(vF,q,{value:F,enumerable:!1})}return Object.defineProperty(vF,"codes",{value:A,enumerable:!1}),vF.color.close="\x1B[39m",vF.bgColor.close="\x1B[49m",vF.color.ansi=Af(),vF.color.ansi256=qf(),vF.color.ansi16m=Ff(),vF.bgColor.ansi=Af(10),vF.bgColor.ansi256=qf(10),vF.bgColor.ansi16m=Ff(10),Object.defineProperties(vF,{rgbToAnsi256:{value(q,F,K){if(q===F&&F===K){if(q<8)return 16;if(q>248)return 231;return Math.round((q-8)/247*24)+232}return 16+36*Math.round(q/255*5)+6*Math.round(F/255*5)+Math.round(K/255*5)},enumerable:!1},hexToRgb:{value(q){let F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(q.toString(16));if(!F)return[0,0,0];let[K]=F;if(K.length===3)K=[...K].map((Z)=>Z+Z).join("");let E=Number.parseInt(K,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(q)=>vF.rgbToAnsi256(...vF.hexToRgb(q)),enumerable:!1},ansi256ToAnsi:{value(q){if(q<8)return 30+q;if(q<16)return 90+(q-8);let F,K,E;if(q>=232)F=((q-232)*10+8)/255,K=F,E=F;else{q-=16;let g=q%36;F=Math.floor(q/36)/5,K=Math.floor(g/6)/5,E=g%6/5}let Z=Math.max(F,K,E)*2;if(Z===0)return 30;let U=30+(Math.round(E)<<2|Math.round(K)<<1|Math.round(F));if(Z===2)U+=60;return U},enumerable:!1},rgbToAnsi:{value:(q,F,K)=>vF.ansi256ToAnsi(vF.rgbToAnsi256(q,F,K)),enumerable:!1},hexToAnsi:{value:(q)=>vF.ansi256ToAnsi(vF.hexToAnsi256(q)),enumerable:!1}}),vF}var fOA=dOA(),YG=fOA;import LR from"process";import uOA from"os";import Kf from"tty";function Ng(A,q=globalThis.Deno?globalThis.Deno.args:LR.argv){let F=A.startsWith("-")?"":A.length===1?"-":"--",K=q.indexOf(F+A),E=q.indexOf("--");return K!==-1&&(E===-1||K<E)}var{env:bF}=LR,PV;if(Ng("no-color")||Ng("no-colors")||Ng("color=false")||Ng("color=never"))PV=0;else if(Ng("color")||Ng("colors")||Ng("color=true")||Ng("color=always"))PV=1;function pOA(){if("FORCE_COLOR"in bF){if(bF.FORCE_COLOR==="true")return 1;if(bF.FORCE_COLOR==="false")return 0;return bF.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(bF.FORCE_COLOR,10),3)}}function lOA(A){if(A===0)return!1;return{level:A,hasBasic:!0,has256:A>=2,has16m:A>=3}}function aOA(A,{streamIsTTY:q,sniffFlags:F=!0}={}){let K=pOA();if(K!==void 0)PV=K;let E=F?PV:K;if(E===0)return 0;if(F){if(Ng("color=16m")||Ng("color=full")||Ng("color=truecolor"))return 3;if(Ng("color=256"))return 2}if("TF_BUILD"in bF&&"AGENT_NAME"in bF)return 1;if(A&&!q&&E===void 0)return 0;let Z=E||0;if(bF.TERM==="dumb")return Z;if(LR.platform==="win32"){let U=uOA.release().split(".");if(Number(U[0])>=10&&Number(U[2])>=10586)return Number(U[2])>=14931?3:2;return 1}if("CI"in bF){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((U)=>(U in bF)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((U)=>(U in bF))||bF.CI_NAME==="codeship")return 1;return Z}if("TEAMCITY_VERSION"in bF)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(bF.TEAMCITY_VERSION)?1:0;if(bF.COLORTERM==="truecolor")return 3;if(bF.TERM==="xterm-kitty")return 3;if(bF.TERM==="xterm-ghostty")return 3;if(bF.TERM==="wezterm")return 3;if("TERM_PROGRAM"in bF){let U=Number.parseInt((bF.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(bF.TERM_PROGRAM){case"iTerm.app":return U>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(bF.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(bF.TERM))return 1;if("COLORTERM"in bF)return 1;return Z}function Ef(A,q={}){let F=aOA(A,{streamIsTTY:A&&A.isTTY,...q});return lOA(F)}var nOA={stdout:Ef({isTTY:Kf.isatty(1)}),stderr:Ef({isTTY:Kf.isatty(2)})},Zf=nOA;function Uf(A,q,F){let K=A.indexOf(q);if(K===-1)return A;let E=q.length,Z=0,U="";do U+=A.slice(Z,K)+q+F,Z=K+E,K=A.indexOf(q,Z);while(K!==-1);return U+=A.slice(Z),U}function gf(A,q,F,K){let E=0,Z="";do{let U=A[K-1]==="\r";Z+=A.slice(E,U?K-1:K)+q+(U?`\r
19
+ `)}catch{return""}}async attach(A,q){throw new Error("Attach is not supported for native runner. Use 'logs' command instead.")}}var Zd=(A,q)=>{return z4.join(A,".pids",`${q}.json`)},J$A=async(A,q)=>{let F=Zd(A,q);try{let K=await _g.readFile(F,"utf-8");return JSON.parse(K)}catch{return null}},uhA=async(A,q,F)=>{let K=Zd(A,q),E=z4.dirname(K);await _g.mkdir(E,{recursive:!0}),await _g.writeFile(K,JSON.stringify(F,null,2),"utf-8")},Q8=async(A,q)=>{let F=Zd(A,q);try{await _g.unlink(F)}catch{}},Ed=async(A)=>{try{return process.kill(A,0),!0}catch{return!1}};var O$A=M8(()=>{B1()});var Ud=(A)=>{switch(A){case"linux":case"darwin":return"screen";case"windows":return"native"}},NO=async(A)=>{switch(A){case"screen":return KG("screen");case"docker":return KG("docker");case"native":return!0}},J8=async(A)=>{let q=oE();if(A){if(await NO(A))return A}let F=Ud(q);if(await NO(F))return F;if(q!=="windows"){if(await NO("docker"))return"docker"}if(q==="windows")return"native";throw new Error(`No runner available. Please install screen or docker for ${q}.`)},_$A,$8=async(A)=>{let q=_$A.get(A);if(q)return q;let F;switch(A){case"screen":{let{ScreenRunner:K}=await Promise.resolve().then(() => (U$A(),Z$A));F=new K;break}case"docker":{let{DockerRunner:K}=await Promise.resolve().then(() => (Q$A(),Y$A));F=new K;break}case"native":{let{NativeRunner:K}=await Promise.resolve().then(() => (O$A(),X$A));F=new K;break}}return _$A.set(A,F),F},UV=(A)=>{return`simplecloud-${A}`},Y8=(A)=>{return`simplecloud-${A}`};var pB=M8(()=>{B1();_$A=new Map});var hOA="0.0.1-beta.18";var Af=(A=0)=>(q)=>`\x1B[${q+A}m`,qf=(A=0)=>(q)=>`\x1B[${38+A};5;${q}m`,Ff=(A=0)=>(q,F,K)=>`\x1B[${38+A};2;${q};${F};${K}m`,vF={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},fcA=Object.keys(vF.modifier),mOA=Object.keys(vF.color),cOA=Object.keys(vF.bgColor),ucA=[...mOA,...cOA];function dOA(){let A=new Map;for(let[q,F]of Object.entries(vF)){for(let[K,E]of Object.entries(F))vF[K]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},F[K]=vF[K],A.set(E[0],E[1]);Object.defineProperty(vF,q,{value:F,enumerable:!1})}return Object.defineProperty(vF,"codes",{value:A,enumerable:!1}),vF.color.close="\x1B[39m",vF.bgColor.close="\x1B[49m",vF.color.ansi=Af(),vF.color.ansi256=qf(),vF.color.ansi16m=Ff(),vF.bgColor.ansi=Af(10),vF.bgColor.ansi256=qf(10),vF.bgColor.ansi16m=Ff(10),Object.defineProperties(vF,{rgbToAnsi256:{value(q,F,K){if(q===F&&F===K){if(q<8)return 16;if(q>248)return 231;return Math.round((q-8)/247*24)+232}return 16+36*Math.round(q/255*5)+6*Math.round(F/255*5)+Math.round(K/255*5)},enumerable:!1},hexToRgb:{value(q){let F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(q.toString(16));if(!F)return[0,0,0];let[K]=F;if(K.length===3)K=[...K].map((Z)=>Z+Z).join("");let E=Number.parseInt(K,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(q)=>vF.rgbToAnsi256(...vF.hexToRgb(q)),enumerable:!1},ansi256ToAnsi:{value(q){if(q<8)return 30+q;if(q<16)return 90+(q-8);let F,K,E;if(q>=232)F=((q-232)*10+8)/255,K=F,E=F;else{q-=16;let g=q%36;F=Math.floor(q/36)/5,K=Math.floor(g/6)/5,E=g%6/5}let Z=Math.max(F,K,E)*2;if(Z===0)return 30;let U=30+(Math.round(E)<<2|Math.round(K)<<1|Math.round(F));if(Z===2)U+=60;return U},enumerable:!1},rgbToAnsi:{value:(q,F,K)=>vF.ansi256ToAnsi(vF.rgbToAnsi256(q,F,K)),enumerable:!1},hexToAnsi:{value:(q)=>vF.ansi256ToAnsi(vF.hexToAnsi256(q)),enumerable:!1}}),vF}var fOA=dOA(),YG=fOA;import LR from"process";import uOA from"os";import Kf from"tty";function Ng(A,q=globalThis.Deno?globalThis.Deno.args:LR.argv){let F=A.startsWith("-")?"":A.length===1?"-":"--",K=q.indexOf(F+A),E=q.indexOf("--");return K!==-1&&(E===-1||K<E)}var{env:bF}=LR,PV;if(Ng("no-color")||Ng("no-colors")||Ng("color=false")||Ng("color=never"))PV=0;else if(Ng("color")||Ng("colors")||Ng("color=true")||Ng("color=always"))PV=1;function pOA(){if("FORCE_COLOR"in bF){if(bF.FORCE_COLOR==="true")return 1;if(bF.FORCE_COLOR==="false")return 0;return bF.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(bF.FORCE_COLOR,10),3)}}function lOA(A){if(A===0)return!1;return{level:A,hasBasic:!0,has256:A>=2,has16m:A>=3}}function aOA(A,{streamIsTTY:q,sniffFlags:F=!0}={}){let K=pOA();if(K!==void 0)PV=K;let E=F?PV:K;if(E===0)return 0;if(F){if(Ng("color=16m")||Ng("color=full")||Ng("color=truecolor"))return 3;if(Ng("color=256"))return 2}if("TF_BUILD"in bF&&"AGENT_NAME"in bF)return 1;if(A&&!q&&E===void 0)return 0;let Z=E||0;if(bF.TERM==="dumb")return Z;if(LR.platform==="win32"){let U=uOA.release().split(".");if(Number(U[0])>=10&&Number(U[2])>=10586)return Number(U[2])>=14931?3:2;return 1}if("CI"in bF){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((U)=>(U in bF)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((U)=>(U in bF))||bF.CI_NAME==="codeship")return 1;return Z}if("TEAMCITY_VERSION"in bF)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(bF.TEAMCITY_VERSION)?1:0;if(bF.COLORTERM==="truecolor")return 3;if(bF.TERM==="xterm-kitty")return 3;if(bF.TERM==="xterm-ghostty")return 3;if(bF.TERM==="wezterm")return 3;if("TERM_PROGRAM"in bF){let U=Number.parseInt((bF.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(bF.TERM_PROGRAM){case"iTerm.app":return U>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(bF.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(bF.TERM))return 1;if("COLORTERM"in bF)return 1;return Z}function Ef(A,q={}){let F=aOA(A,{streamIsTTY:A&&A.isTTY,...q});return lOA(F)}var nOA={stdout:Ef({isTTY:Kf.isatty(1)}),stderr:Ef({isTTY:Kf.isatty(2)})},Zf=nOA;function Uf(A,q,F){let K=A.indexOf(q);if(K===-1)return A;let E=q.length,Z=0,U="";do U+=A.slice(Z,K)+q+F,Z=K+E,K=A.indexOf(q,Z);while(K!==-1);return U+=A.slice(Z),U}function gf(A,q,F,K){let E=0,Z="";do{let U=A[K-1]==="\r";Z+=A.slice(E,U?K-1:K)+q+(U?`\r
20
20
  `:`
21
21
  `)+F,E=K+1,K=A.indexOf(`
22
22
  `,E)}while(K!==-1);return Z+=A.slice(E),Z}var{stdout:Gf,stderr:Yf}=Zf,MR=Symbol("GENERATOR"),wO=Symbol("STYLER"),D8=Symbol("IS_EMPTY"),Qf=["ansi","ansi","ansi256","ansi16m"],CO=Object.create(null),iOA=(A,q={})=>{if(q.level&&!(Number.isInteger(q.level)&&q.level>=0&&q.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let F=Gf?Gf.level:0;A.level=q.level===void 0?F:q.level};var oOA=(A)=>{let q=(...F)=>F.join(" ");return iOA(q,A),Object.setPrototypeOf(q,P8.prototype),q};function P8(A){return oOA(A)}Object.setPrototypeOf(P8.prototype,Function.prototype);for(let[A,q]of Object.entries(YG))CO[A]={get(){let F=TV(this,PR(q.open,q.close,this[wO]),this[D8]);return Object.defineProperty(this,A,{value:F}),F}};CO.visible={get(){let A=TV(this,this[wO],!0);return Object.defineProperty(this,"visible",{value:A}),A}};var DR=(A,q,F,...K)=>{if(A==="rgb"){if(q==="ansi16m")return YG[F].ansi16m(...K);if(q==="ansi256")return YG[F].ansi256(YG.rgbToAnsi256(...K));return YG[F].ansi(YG.rgbToAnsi(...K))}if(A==="hex")return DR("rgb",q,F,...YG.hexToRgb(...K));return YG[F][A](...K)},rOA=["rgb","hex","ansi256"];for(let A of rOA){CO[A]={get(){let{level:F}=this;return function(...K){let E=PR(DR(A,Qf[F],"color",...K),YG.color.close,this[wO]);return TV(this,E,this[D8])}}};let q="bg"+A[0].toUpperCase()+A.slice(1);CO[q]={get(){let{level:F}=this;return function(...K){let E=PR(DR(A,Qf[F],"bgColor",...K),YG.bgColor.close,this[wO]);return TV(this,E,this[D8])}}}}var sOA=Object.defineProperties(()=>{},{...CO,level:{enumerable:!0,get(){return this[MR].level},set(A){this[MR].level=A}}}),PR=(A,q,F)=>{let K,E;if(F===void 0)K=A,E=q;else K=F.openAll+A,E=q+F.closeAll;return{open:A,close:q,openAll:K,closeAll:E,parent:F}},TV=(A,q,F)=>{let K=(...E)=>tOA(K,E.length===1?""+E[0]:E.join(" "));return Object.setPrototypeOf(K,sOA),K[MR]=A,K[wO]=q,K[D8]=F,K},tOA=(A,q)=>{if(A.level<=0||!q)return A[D8]?"":q;let F=A[wO];if(F===void 0)return q;let{openAll:K,closeAll:E}=F;if(q.includes("\x1B"))while(F!==void 0)q=Uf(q,F.close,F.open),F=F.parent;let Z=q.indexOf(`
@@ -164,7 +164,7 @@ Cleaning up created blueprint...`));try{if((await wQ(gq)).error)console.log(W.ye
164
164
  \u2717 ${zq}`)),console.log(W.yellow(`The group was created but is inactive. Activate it manually with: simplecloud group update ${E} --active`)),await q.complete();return}sE.stop(`Group "${E}" is now active`),await q.complete(),console.log(),AU(W.green(`\u2713 Group "${E}" created successfully!`)),console.log(W.dim(`
165
165
  Your servers will start automatically based on your scaling configuration.
166
166
  Run ${W.cyan("simplecloud server list")} to see them.`))};function AyA(A,q){let F=A.trim().toLowerCase();return q.find((K)=>K.server_group_id?.toLowerCase()===F||K.name?.toLowerCase()===F)||q.find((K)=>K.server_group_id?.toLowerCase().includes(F)||K.name?.toLowerCase().includes(F))}async function SJA(A){try{await kq();let q=Oq("Looking up server group...",{color:"magenta"}),F=await nK();q();let K=F.data?.server_groups||[],E=AyA(A,K);if(!E||!E.server_group_id)console.log(W.yellow(`No server group matched "${A}". Try a group name or ID from "group list".`)),process.exit(1);let Z=Oq("Deleting server group...",{color:"red"}),U=await RJA(E.server_group_id);if(Z(),U.error)Kq(U.error,"Failed to delete server group"),process.exit(1);console.log(W.green.bold(`
167
- Server group deleted successfully`)),console.log(` Name: ${U.data?.name||E.name}`),console.log(` ID: ${U.data?.server_group_id||E.server_group_id}`)}catch(q){Kq(q,"Failed to delete server group"),process.exit(1)}}var uc=Vg(P1(),1);function vJA(A){switch(A){case"SERVER":return"green";case"PROXY":return"blue";default:return"gray"}}function qyA(A){if(!A)return"N/A";try{return new Date(A).toLocaleDateString("de-DE")}catch{return"Invalid"}}function kJA(A){if(!A)return"N/A";let q=new Date(A);if(Number.isNaN(q.getTime()))return"Invalid";return`${q.toLocaleDateString("de-DE")} ${q.toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})}`}function fc(A){return uc.table(A.map(([q,F])=>[W.gray(q),F||"\u2014"]),{border:{topBody:"\u2500",topJoin:"\u252C",topLeft:"\u250C",topRight:"\u2510",bottomBody:"\u2500",bottomJoin:"\u2534",bottomLeft:"\u2514",bottomRight:"\u2518",bodyLeft:"\u2502",bodyRight:"\u2502",bodyJoin:"\u2502",joinBody:"\u2500",joinLeft:"\u251C",joinRight:"\u2524",joinJoin:"\u253C"},columnDefault:{paddingLeft:1,paddingRight:1,alignment:"left"},columns:[{width:18},{width:60}]})}function FyA(A,q){let F=A.trim().toLowerCase();return q.find((K)=>K.server_group_id?.toLowerCase()===F||K.name?.toLowerCase()===F)||q.find((K)=>K.server_group_id?.toLowerCase().includes(F)||K.name?.toLowerCase().includes(F))}async function bJA(A={}){try{await kq();let q=Oq("Fetching server groups...",{color:"magenta"}),F=await nK();q();let K=F.data?.server_groups||[];if(A.filter)K=K.filter((J)=>J.name?.toLowerCase().includes(A.filter.toLowerCase())||J.server_group_id?.toLowerCase().includes(A.filter.toLowerCase()));if(A.type)K=K.filter((J)=>J.type===A.type);if(A.sort)K.sort((J,$)=>{let O=0;switch(A.sort){case"name":O=(J.name||"").localeCompare($.name||"");break;case"type":O=(J.type||"").localeCompare($.type||"");break;case"memory":O=(J.max_memory||0)-($.max_memory||0);break;case"players":O=(J.max_players||0)-($.max_players||0);break;case"created":O=new Date(J.created_at||0).getTime()-new Date($.created_at||0).getTime();break}return A.reverse?-O:O});if(K.length===0){console.log(W.yellow("No groups found matching your criteria"));return}if(A.filter||A.type||A.sort){if(console.log(W.cyan("Applied filters:")),A.filter)console.log(` Search: "${A.filter}"`);if(A.type)console.log(` Type: ${A.type}`);if(A.sort)console.log(` Sort: ${A.sort}${A.reverse?" (desc)":" (asc)"}`);console.log()}let E=[[W.bold.white("Name"),W.bold.white("ID"),W.bold.white("Type"),W.bold.white("Memory (MB)"),W.bold.white("Max Players"),W.bold.white("Tags"),W.bold.white("Created")]];K.forEach((J)=>{let $=vJA(J.type);E.push([J.name||"Unnamed",J.server_group_id?.substring(0,12)||"N/A",W[$](J.type||"unknown"),`${J.min_memory||0} - ${J.max_memory||0}`,(J.max_players||0).toString(),J.tags?.slice(0,2).join(", ")||"None",qyA(J.created_at)])}),console.log(uc.table(E,{border:{topBody:"\u2500",topJoin:"\u252C",topLeft:"\u250C",topRight:"\u2510",bottomBody:"\u2500",bottomJoin:"\u2534",bottomLeft:"\u2514",bottomRight:"\u2518",bodyLeft:"\u2502",bodyRight:"\u2502",bodyJoin:"\u2502",joinBody:"\u2500",joinLeft:"\u251C",joinRight:"\u2524",joinJoin:"\u253C"},columnDefault:{paddingLeft:1,paddingRight:1,alignment:"left"},columns:[{width:18},{width:15},{width:10},{width:15},{width:12},{width:15},{width:12}]}));let U=K.filter((J)=>J.type==="SERVER").length,g=K.filter((J)=>J.type==="PROXY").length,G=K.filter((J)=>J.type==="LOBBY").length,Y=K.reduce((J,$)=>J+($.max_memory||0),0),Q=K.reduce((J,$)=>J+($.max_players||0),0);console.log(W.blue.bold("Summary:")),console.log(` Server Groups: ${W.bold(U.toString())}`),console.log(` Proxy Groups: ${W.bold(g.toString())}`),console.log(` Lobby Groups: ${W.bold(G.toString())}`),console.log(` Total Memory: ${W.bold(Y.toString())} MB`),console.log(` Max Players: ${W.bold(Q.toString())}`),console.log(` Showing: ${W.bold(K.length.toString())} groups
167
+ Server group deleted successfully`)),console.log(` Name: ${U.data?.name||E.name}`),console.log(` ID: ${U.data?.server_group_id||E.server_group_id}`)}catch(q){Kq(q,"Failed to delete server group"),process.exit(1)}}var uc=Vg(P1(),1);function vJA(A){switch(A){case"SERVER":return"green";case"PROXY":return"blue";default:return"gray"}}function qyA(A){if(!A)return"N/A";try{return new Date(A).toLocaleDateString("de-DE")}catch{return"Invalid"}}function kJA(A){if(!A)return"N/A";let q=new Date(A);if(Number.isNaN(q.getTime()))return"Invalid";return`${q.toLocaleDateString("de-DE")} ${q.toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})}`}function fc(A){return uc.table(A.map(([q,F])=>[W.gray(q),F||"\u2014"]),{border:{topBody:"\u2500",topJoin:"\u252C",topLeft:"\u250C",topRight:"\u2510",bottomBody:"\u2500",bottomJoin:"\u2534",bottomLeft:"\u2514",bottomRight:"\u2518",bodyLeft:"\u2502",bodyRight:"\u2502",bodyJoin:"\u2502",joinBody:"\u2500",joinLeft:"\u251C",joinRight:"\u2524",joinJoin:"\u253C"},columnDefault:{paddingLeft:1,paddingRight:1,alignment:"left"},columns:[{width:18},{width:60}]})}function FyA(A,q){let F=A.trim().toLowerCase();return q.find((K)=>K.server_group_id?.toLowerCase()===F||K.name?.toLowerCase()===F)||q.find((K)=>K.server_group_id?.toLowerCase().includes(F)||K.name?.toLowerCase().includes(F))}async function bJA(A={}){try{await kq();let q=Oq("Fetching server groups...",{color:"magenta"}),F=await nK();q();let K=F.data?.server_groups||[];if(A.filter)K=K.filter((Q)=>Q.name?.toLowerCase().includes(A.filter.toLowerCase())||Q.server_group_id?.toLowerCase().includes(A.filter.toLowerCase()));if(A.type)K=K.filter((Q)=>Q.type===A.type);if(A.sort)K.sort((Q,J)=>{let $=0;switch(A.sort){case"name":$=(Q.name||"").localeCompare(J.name||"");break;case"type":$=(Q.type||"").localeCompare(J.type||"");break;case"memory":$=(Q.max_memory||0)-(J.max_memory||0);break;case"players":$=(Q.max_players||0)-(J.max_players||0);break;case"created":$=new Date(Q.created_at||0).getTime()-new Date(J.created_at||0).getTime();break}return A.reverse?-$:$});if(K.length===0){console.log(W.yellow("No groups found matching your criteria"));return}if(A.filter||A.type||A.sort){if(console.log(W.cyan("Applied filters:")),A.filter)console.log(` Search: "${A.filter}"`);if(A.type)console.log(` Type: ${A.type}`);if(A.sort)console.log(` Sort: ${A.sort}${A.reverse?" (desc)":" (asc)"}`);console.log()}let E=[[W.bold.white("Name"),W.bold.white("ID"),W.bold.white("Type"),W.bold.white("Memory (MB)"),W.bold.white("Max Players"),W.bold.white("Tags"),W.bold.white("Created")]];K.forEach((Q)=>{let J=vJA(Q.type);E.push([Q.name||"Unnamed",Q.server_group_id?.substring(0,12)||"N/A",W[J](Q.type||"unknown"),`${Q.min_memory||0} - ${Q.max_memory||0}`,(Q.max_players||0).toString(),Q.tags?.slice(0,2).join(", ")||"None",qyA(Q.created_at)])}),console.log(uc.table(E,{border:{topBody:"\u2500",topJoin:"\u252C",topLeft:"\u250C",topRight:"\u2510",bottomBody:"\u2500",bottomJoin:"\u2534",bottomLeft:"\u2514",bottomRight:"\u2518",bodyLeft:"\u2502",bodyRight:"\u2502",bodyJoin:"\u2502",joinBody:"\u2500",joinLeft:"\u251C",joinRight:"\u2524",joinJoin:"\u253C"},columnDefault:{paddingLeft:1,paddingRight:1,alignment:"left"},columns:[{width:18},{width:15},{width:10},{width:15},{width:12},{width:15},{width:12}]}));let U=K.filter((Q)=>Q.type==="SERVER").length,g=K.filter((Q)=>Q.type==="PROXY").length,G=K.reduce((Q,J)=>Q+(J.max_memory||0),0),Y=K.reduce((Q,J)=>Q+(J.max_players||0),0);console.log(W.blue.bold("Summary:")),console.log(` Server Groups: ${W.bold(U.toString())}`),console.log(` Proxy Groups: ${W.bold(g.toString())}`),console.log(` Total Memory: ${W.bold(G.toString())} MB`),console.log(` Max Players: ${W.bold(Y.toString())}`),console.log(` Showing: ${W.bold(K.length.toString())} groups
168
168
  `)}catch(q){Kq(q,"Failed to load groups"),process.exit(1)}}async function yJA(A){try{await kq();let q=Oq("Looking up server group...",{color:"magenta"}),F=await nK();q();let K=F.data?.server_groups||[],E=FyA(A,K);if(!E)console.log(W.yellow(`No group matched "${A}". Try a group name or ID from "group list".`)),process.exit(1);let Z=vJA(E.type||""),U=E.name||E.server_group_id||"Unnamed group";console.log(`
169
169
  ${W.bold(U)} ${W.gray(`#${E.server_group_id?.slice(0,12)??"N/A"}`)}`),console.log(`${W[Z](E.type||"unknown")} group
170
170
  `);let g=[["Group ID",E.server_group_id||"N/A"],["Memory",`${E.min_memory||0} - ${E.max_memory||0} MB`],["Max Players",`${E.max_players||0}`],["Tags",E.tags?.join(", ")||"None"],["Created",kJA(E.created_at)],["Updated",kJA(E.updated_at)]];if(console.log(W.blueBright("Overview")),console.log(fc(g)),E.scaling||E.deployment||E.source||E.workflows){console.log(W.blueBright("Configuration"));let{scaling:G,deployment:Y,source:Q,workflows:J}=E,$=[];if(G)$.push(["Scaling",[G.scaling_mode&&`Mode: ${G.scaling_mode}`,`Min Servers: ${G.min_servers??0}`,`Max Servers: ${G.max_servers??0}`,G.available_slots!==void 0&&`Available Slots: ${G.available_slots}`,G.player_threshold!==void 0&&`Player Threshold: ${Math.round((G.player_threshold||0)*100)}%`,G.scale_down?.idle_time&&`Scale down after ${G.scale_down.idle_time}`].filter(Boolean).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "simplecloud",
3
- "version": "0.0.1-beta.16",
3
+ "version": "0.0.1-beta.18",
4
4
  "description": "simplecloud.app cli",
5
5
  "type": "module",
6
6
  "keywords": [