simplecloud 0.0.1-beta.16 → 0.0.1-beta.17
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/cli.js +166 -164
- package/dist/index.js +1 -1
- 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.
|
|
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.17";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(`
|