@zuzjs/pm 0.0.21 → 0.0.22

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.
@@ -1,4 +1,4 @@
1
- 'use strict';var chunkWPWZGJN5_cjs=require('./chunk-WPWZGJN5.cjs'),child_process=require('child_process'),p=require('fs'),h=require('net'),w=require('os'),P=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var p__default=/*#__PURE__*/_interopDefault(p);var h__default=/*#__PURE__*/_interopDefault(h);var w__default=/*#__PURE__*/_interopDefault(w);var P__default=/*#__PURE__*/_interopDefault(P);/* ZuzJS Process Manager */
2
- function s(d,e="zuz-pm"){return new Promise((r,t)=>{let n=h__default.default.createConnection(chunkWPWZGJN5_cjs.f(e)),o="";n.on("connect",()=>{n.write(JSON.stringify(d)+`
3
- `);}),n.on("data",i=>{o+=i.toString();let m=o.split(`
4
- `);o=m.pop()??"";for(let g of m)if(g.trim())try{let a=JSON.parse(g);n.destroy(),a.ok?r(a.data):t(new Error(a.error));}catch(a){n.destroy(),t(a);}}),n.on("error",i=>t(i)),n.setTimeout(1e4,()=>{n.destroy(),t(new Error("IPC timeout"));});})}var u=class{daemonScript;namespace;constructor(e){this.namespace=e?.namespace??"zuz-pm",this.daemonScript=e?.daemonScript??P__default.default.join(__dirname,"daemon.js");}async isDaemonRunning(){try{return chunkWPWZGJN5_cjs.d.info("[ZPM]","Daemon is Running :?"),await s({cmd:"ping"},this.namespace),!0}catch{return chunkWPWZGJN5_cjs.d.info("[ZPM]","Daemon is not running."),false}}async ensureDaemon(){if(await this.isDaemonRunning())return;chunkWPWZGJN5_cjs.d.info("Starting ZPM daemon...");let r=process.env.NODE_ENV!=="production";child_process.spawn(process.execPath,[this.daemonScript],{detached:true,stdio:r?"inherit":"ignore"}).unref(),await this.waitForDaemon(8e3);}async killDaemon(){let e=P__default.default.join(w__default.default.tmpdir(),"zuz-pm.pid");if(!p__default.default.existsSync(e))throw new Error("Daemon PID file not found \u2013 is the daemon running?");let r=Number(p__default.default.readFileSync(e,"utf8").trim());try{process.kill(r,"SIGTERM"),console.log(`[ZPM] Sent SIGTERM to daemon (PID ${r})`);}catch(t){throw new Error(`Failed to kill daemon: ${t.message}`)}finally{p__default.default.unlinkSync(e);}}async getStore(){let e=await s({cmd:"get-store"},this.namespace);return e.ok==true?e.data:null}async getProcessByName(e){let r=await s({cmd:"get-store"},this.namespace);return (r.ok==true?r.data:[]).find(n=>n.name==e)}async start(e){return s({cmd:"start",name:e.name,config:e},this.namespace)}async stop(e){return s({cmd:"stop",name:e},this.namespace)}async restart(e){return s({cmd:"restart",name:e},this.namespace)}async delete(e){return s({cmd:"delete",name:e},this.namespace)}async replaceWorker(e,r,t){let n=await this.getWorkerByName(e);if(n)return await this.stop(e),await this.delete(e),await s({cmd:"add-worker",config:{...n.getConfig(),name:r},autoStart:t})}async getWorkerByName(e){return await s({cmd:"find-worker",name:e},this.namespace)}async stats(e){return s({cmd:"stats",name:e},this.namespace)}async list(){return s({cmd:"list"},this.namespace)}waitForDaemon(e){let r=Date.now(),t=200;return new Promise((n,o)=>{let i=()=>{this.isDaemonRunning().then(m=>{if(m)return n();if(Date.now()-r>e)return o(new Error("Daemon did not start in time"));setTimeout(i,t);});};setTimeout(i,t);})}},W=new u;exports.a=u;exports.b=W;
1
+ 'use strict';var chunkWPWZGJN5_cjs=require('./chunk-WPWZGJN5.cjs'),child_process=require('child_process'),p=require('fs'),h=require('net'),w=require('os'),f=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var p__default=/*#__PURE__*/_interopDefault(p);var h__default=/*#__PURE__*/_interopDefault(h);var w__default=/*#__PURE__*/_interopDefault(w);var f__default=/*#__PURE__*/_interopDefault(f);/* ZuzJS Process Manager */
2
+ function s(d,e="zuz-pm"){return new Promise((r,t)=>{let n=h__default.default.createConnection(chunkWPWZGJN5_cjs.f(e)),i="";n.on("connect",()=>{n.write(JSON.stringify(d)+`
3
+ `);}),n.on("data",o=>{i+=o.toString();let c=i.split(`
4
+ `);i=c.pop()??"";for(let g of c)if(g.trim())try{let a=JSON.parse(g);n.destroy(),a.ok?r(a.data):t(new Error(a.error));}catch(a){n.destroy(),t(a);}}),n.on("error",o=>t(o)),n.setTimeout(1e4,()=>{n.destroy(),t(new Error("IPC timeout"));});})}var u=class{daemonScript;namespace;constructor(e){this.namespace=e?.namespace??"zuz-pm",this.daemonScript=e?.daemonScript??f__default.default.join(__dirname,"daemon.js");}async isDaemonRunning(){try{return chunkWPWZGJN5_cjs.d.info("[ZPM]","Daemon is Running :?"),await s({cmd:"ping"},this.namespace),!0}catch{return chunkWPWZGJN5_cjs.d.info("[ZPM]","Daemon is not running."),false}}async ensureDaemon(){if(await this.isDaemonRunning())return;chunkWPWZGJN5_cjs.d.info("Starting ZPM daemon...");let r=process.env.NODE_ENV!=="production";child_process.spawn(process.execPath,[this.daemonScript],{detached:true,stdio:r?"inherit":"ignore"}).unref(),await this.waitForDaemon(8e3);}async killDaemon(){let e=f__default.default.join(w__default.default.tmpdir(),"zuz-pm.pid");if(!p__default.default.existsSync(e))throw new Error("Daemon PID file not found \u2013 is the daemon running?");let r=Number(p__default.default.readFileSync(e,"utf8").trim());try{process.kill(r,"SIGTERM"),console.log(`[ZPM] Sent SIGTERM to daemon (PID ${r})`);}catch(t){throw new Error(`Failed to kill daemon: ${t.message}`)}finally{p__default.default.unlinkSync(e);}}async getStore(){let e=await s({cmd:"get-store"},this.namespace);return e.ok==true?e.data:null}async getProcessByName(e){let r=await s({cmd:"get-store"},this.namespace);return (r.ok==true?r.data:[]).find(n=>n.name==e)}async startWorker(e){let r=await this.getWorkerByName(e);return r?this.start(r.getConfig()):(chunkWPWZGJN5_cjs.d.info(e,`Worker ${e} not found`),`Worker ${e} not found`)}async start(e){return s({cmd:"start",name:e.name,config:e},this.namespace)}async stop(e){return s({cmd:"stop",name:e},this.namespace)}async restart(e){return s({cmd:"restart",name:e},this.namespace)}async delete(e){return s({cmd:"delete",name:e},this.namespace)}async replaceWorker(e,r,t){let n=await this.getWorkerByName(e);if(n)return await this.stop(e),await this.delete(e),await s({cmd:"add-worker",config:{...n.getConfig(),name:r},autoStart:t})}async getWorkerByName(e){return await s({cmd:"find-worker",name:e},this.namespace)}async stats(e){return s({cmd:"stats",name:e},this.namespace)}async list(){return s({cmd:"list"},this.namespace)}waitForDaemon(e){let r=Date.now(),t=200;return new Promise((n,i)=>{let o=()=>{this.isDaemonRunning().then(c=>{if(c)return n();if(Date.now()-r>e)return i(new Error("Daemon did not start in time"));setTimeout(o,t);});};setTimeout(o,t);})}},R=new u;exports.a=u;exports.b=R;
@@ -0,0 +1,3 @@
1
+ import {a,d,f}from'./chunk-FXEDN7ZZ.js';import {spawn}from'child_process';import p from'fs';import w from'net';import k from'os';import P from'path';function s(d,e="zuz-pm"){return new Promise((r,t)=>{let n=w.createConnection(f(e)),i="";n.on("connect",()=>{n.write(JSON.stringify(d)+`
2
+ `);}),n.on("data",o=>{i+=o.toString();let c=i.split(`
3
+ `);i=c.pop()??"";for(let g of c)if(g.trim())try{let a=JSON.parse(g);n.destroy(),a.ok?r(a.data):t(new Error(a.error));}catch(a){n.destroy(),t(a);}}),n.on("error",o=>t(o)),n.setTimeout(1e4,()=>{n.destroy(),t(new Error("IPC timeout"));});})}var u=class{daemonScript;namespace;constructor(e){this.namespace=e?.namespace??"zuz-pm",this.daemonScript=e?.daemonScript??P.join(a,"daemon.js");}async isDaemonRunning(){try{return d.info("[ZPM]","Daemon is Running :?"),await s({cmd:"ping"},this.namespace),!0}catch{return d.info("[ZPM]","Daemon is not running."),false}}async ensureDaemon(){if(await this.isDaemonRunning())return;d.info("Starting ZPM daemon...");let r=process.env.NODE_ENV!=="production";spawn(process.execPath,[this.daemonScript],{detached:true,stdio:r?"inherit":"ignore"}).unref(),await this.waitForDaemon(8e3);}async killDaemon(){let e=P.join(k.tmpdir(),"zuz-pm.pid");if(!p.existsSync(e))throw new Error("Daemon PID file not found \u2013 is the daemon running?");let r=Number(p.readFileSync(e,"utf8").trim());try{process.kill(r,"SIGTERM"),console.log(`[ZPM] Sent SIGTERM to daemon (PID ${r})`);}catch(t){throw new Error(`Failed to kill daemon: ${t.message}`)}finally{p.unlinkSync(e);}}async getStore(){let e=await s({cmd:"get-store"},this.namespace);return e.ok==true?e.data:null}async getProcessByName(e){let r=await s({cmd:"get-store"},this.namespace);return (r.ok==true?r.data:[]).find(n=>n.name==e)}async startWorker(e){let r=await this.getWorkerByName(e);return r?this.start(r.getConfig()):(d.info(e,`Worker ${e} not found`),`Worker ${e} not found`)}async start(e){return s({cmd:"start",name:e.name,config:e},this.namespace)}async stop(e){return s({cmd:"stop",name:e},this.namespace)}async restart(e){return s({cmd:"restart",name:e},this.namespace)}async delete(e){return s({cmd:"delete",name:e},this.namespace)}async replaceWorker(e,r,t){let n=await this.getWorkerByName(e);if(n)return await this.stop(e),await this.delete(e),await s({cmd:"add-worker",config:{...n.getConfig(),name:r},autoStart:t})}async getWorkerByName(e){return await s({cmd:"find-worker",name:e},this.namespace)}async stats(e){return s({cmd:"stats",name:e},this.namespace)}async list(){return s({cmd:"list"},this.namespace)}waitForDaemon(e){let r=Date.now(),t=200;return new Promise((n,i)=>{let o=()=>{this.isDaemonRunning().then(c=>{if(c)return n();if(Date.now()-r>e)return i(new Error("Daemon did not start in time"));setTimeout(o,t);});};setTimeout(o,t);})}},E=new u;export{u as a,E as b};
package/dist/cli.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var chunkCLGIBT3W_cjs=require('./chunk-CLGIBT3W.cjs'),chunkWPWZGJN5_cjs=require('./chunk-WPWZGJN5.cjs'),commander=require('commander'),w=require('fs'),h=require('net'),m=require('path'),url=require('url'),s=require('picocolors');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var w__default=/*#__PURE__*/_interopDefault(w);var h__default=/*#__PURE__*/_interopDefault(h);var m__default=/*#__PURE__*/_interopDefault(m);var s__default=/*#__PURE__*/_interopDefault(s);/* ZuzJS Process Manager */
3
- var n=new commander.Command;n.option("-s, --namespace <name>","Internal daemon namespace","zuz-pm");n.parseOptions(process.argv);var x=n.opts(),f=x.namespace,c=new chunkCLGIBT3W_cjs.a(f),v=m__default.default.dirname(url.fileURLToPath(chunkWPWZGJN5_cjs.a)),$=m__default.default.resolve(v,"../package.json"),P=JSON.parse(w__default.default.readFileSync($,"utf8"));async function k(o,e){if(!await c.isDaemonRunning())return;let a=e?`"${e}"`:"all workers";console.log(s__default.default.cyan("[ZPM]"),s__default.default.gray(`Attaching stream for ${a}...`));let t=h__default.default.createConnection(chunkWPWZGJN5_cjs.f(o));t.write(JSON.stringify({cmd:"logs",name:e})+`
2
+ 'use strict';var chunk3BHYRI7Z_cjs=require('./chunk-3BHYRI7Z.cjs'),chunkWPWZGJN5_cjs=require('./chunk-WPWZGJN5.cjs'),commander=require('commander'),w=require('fs'),h=require('net'),m=require('path'),url=require('url'),s=require('picocolors');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var w__default=/*#__PURE__*/_interopDefault(w);var h__default=/*#__PURE__*/_interopDefault(h);var m__default=/*#__PURE__*/_interopDefault(m);var s__default=/*#__PURE__*/_interopDefault(s);/* ZuzJS Process Manager */
3
+ var n=new commander.Command;n.option("-s, --namespace <name>","Internal daemon namespace","zuz-pm");n.parseOptions(process.argv);var x=n.opts(),f=x.namespace,c=new chunk3BHYRI7Z_cjs.a(f),v=m__default.default.dirname(url.fileURLToPath(chunkWPWZGJN5_cjs.a)),$=m__default.default.resolve(v,"../package.json"),P=JSON.parse(w__default.default.readFileSync($,"utf8"));async function k(o,e){if(!await c.isDaemonRunning())return;let a=e?`"${e}"`:"all workers";console.log(s__default.default.cyan("[ZPM]"),s__default.default.gray(`Attaching stream for ${a}...`));let t=h__default.default.createConnection(chunkWPWZGJN5_cjs.f(o));t.write(JSON.stringify({cmd:"logs",name:e})+`
4
4
  `),t.on("data",l=>{let p=l.toString().split(`
5
5
  `);for(let i of p)if(i.trim())try{let g=JSON.parse(i);g.ok&&process.stdout.write(g.data);}catch{}}),t.on("error",l=>{console.error(s__default.default.red(`[IPC Error] ${l.message}`));}),process.on("SIGINT",()=>{t.destroy(),console.log(s__default.default.gray(`
6
6
  Disconnected from logs.`)),process.exit();});}n.name("zpm").description("Production grade process manager for the @zuzjs ecosystem").version(P.version,"-v, --version","output the current version");n.command("start <script>").description("Start a new process").option("-n, --name <name>","Unique name for the process").option("-p, --port <port>","Port the app listens on",parseInt).option("-i, --instances <number>","Number of instances (cluster mode)",parseInt,1).option("-d, --dev","Enable development mode (auto-restart)",false).option("--reload-cmd <command>","Command to run before restarting in dev mode").option("-c, --cluster","Use cluster mode instead of fork",false).option("--ws <url>","WebSocket URL to stream logs (e.g. for ZPanel)","http://127.0.0.1:2082/_/wss/zpm").option("--save-logs","Save logs to a local file",false).option("--args <string>",'Arguments to pass to the script (e.g. "dev -p 3000")').option("--probe-type <type>","Type of probe: http, tcp, or exec").option("--probe-target <target>","URL, host:port, or command").option("--probe-interval <sec>","Seconds between probes",parseInt,30).option("--probe-threshold <count>","Failures before restart",parseInt,3).action(async(o,e)=>{try{await c.ensureDaemon();let r=m__default.default.resolve(process.cwd(),o),a=e.name??m__default.default.basename(o),t=await c.start({name:e.name??m__default.default.basename(o),scriptPath:r,port:e.port,instances:e.instances,devMode:e.dev,mode:e.cluster?"cluster":"fork",args:e.args?e.args.split(" "):[],reloadCommand:e.reloadCmd,probe:e.probeTarget?{type:e.probeType,target:e.probeTarget||(e.probeType==="http"?"http://localhost:3000":"localhost:3000"),intervalSeconds:e.probeInterval,failureThreshold:e.probeThreshold,timeoutSeconds:5}:void 0,logs:{wsUrl:e.ws,saveToFile:e.saveLogs}});console.log(s__default.default.cyan("[ZPM]"),t),e.dev?await k(f,a):process.exit(0);}catch(r){console.log(s__default.default.cyan("[ZPM]"),s__default.default.red("[ERROR]"),r.message);}});n.command("logs [name]").description("Stream real-time logs (omit name for all logs)").action(async o=>{try{if(!await c.isDaemonRunning())throw new Error("Daemon is not running.");let r=o?`"${o}"`:"all workers";console.log(s__default.default.cyan("[ZPM]"),`Streaming logs for "${s__default.default.green(r)}" (Ctrl+C to stop)`);let a=h__default.default.createConnection(chunkWPWZGJN5_cjs.f(f));a.write(JSON.stringify({cmd:"logs",name:o})+`
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {a}from'./chunk-IYTWXZHG.js';import {f as f$1}from'./chunk-FXEDN7ZZ.js';import {Command}from'commander';import y from'fs';import b from'net';import m from'path';import {fileURLToPath}from'url';import s from'picocolors';var n=new Command;n.option("-s, --namespace <name>","Internal daemon namespace","zuz-pm");n.parseOptions(process.argv);var S=n.opts(),f=S.namespace,c=new a(f),x=m.dirname(fileURLToPath(import.meta.url)),v=m.resolve(x,"../package.json"),$=JSON.parse(y.readFileSync(v,"utf8"));async function P(o,e){if(!await c.isDaemonRunning())return;let a=e?`"${e}"`:"all workers";console.log(s.cyan("[ZPM]"),s.gray(`Attaching stream for ${a}...`));let t=b.createConnection(f$1(o));t.write(JSON.stringify({cmd:"logs",name:e})+`
2
+ import {a}from'./chunk-GQ7YGUB7.js';import {f as f$1}from'./chunk-FXEDN7ZZ.js';import {Command}from'commander';import y from'fs';import b from'net';import m from'path';import {fileURLToPath}from'url';import s from'picocolors';var n=new Command;n.option("-s, --namespace <name>","Internal daemon namespace","zuz-pm");n.parseOptions(process.argv);var S=n.opts(),f=S.namespace,c=new a(f),x=m.dirname(fileURLToPath(import.meta.url)),v=m.resolve(x,"../package.json"),$=JSON.parse(y.readFileSync(v,"utf8"));async function P(o,e){if(!await c.isDaemonRunning())return;let a=e?`"${e}"`:"all workers";console.log(s.cyan("[ZPM]"),s.gray(`Attaching stream for ${a}...`));let t=b.createConnection(f$1(o));t.write(JSON.stringify({cmd:"logs",name:e})+`
3
3
  `),t.on("data",l=>{let p=l.toString().split(`
4
4
  `);for(let i of p)if(i.trim())try{let g=JSON.parse(i);g.ok&&process.stdout.write(g.data);}catch{}}),t.on("error",l=>{console.error(s.red(`[IPC Error] ${l.message}`));}),process.on("SIGINT",()=>{t.destroy(),console.log(s.gray(`
5
5
  Disconnected from logs.`)),process.exit();});}n.name("zpm").description("Production grade process manager for the @zuzjs ecosystem").version($.version,"-v, --version","output the current version");n.command("start <script>").description("Start a new process").option("-n, --name <name>","Unique name for the process").option("-p, --port <port>","Port the app listens on",parseInt).option("-i, --instances <number>","Number of instances (cluster mode)",parseInt,1).option("-d, --dev","Enable development mode (auto-restart)",false).option("--reload-cmd <command>","Command to run before restarting in dev mode").option("-c, --cluster","Use cluster mode instead of fork",false).option("--ws <url>","WebSocket URL to stream logs (e.g. for ZPanel)","http://127.0.0.1:2082/_/wss/zpm").option("--save-logs","Save logs to a local file",false).option("--args <string>",'Arguments to pass to the script (e.g. "dev -p 3000")').option("--probe-type <type>","Type of probe: http, tcp, or exec").option("--probe-target <target>","URL, host:port, or command").option("--probe-interval <sec>","Seconds between probes",parseInt,30).option("--probe-threshold <count>","Failures before restart",parseInt,3).action(async(o,e)=>{try{await c.ensureDaemon();let r=m.resolve(process.cwd(),o),a=e.name??m.basename(o),t=await c.start({name:e.name??m.basename(o),scriptPath:r,port:e.port,instances:e.instances,devMode:e.dev,mode:e.cluster?"cluster":"fork",args:e.args?e.args.split(" "):[],reloadCommand:e.reloadCmd,probe:e.probeTarget?{type:e.probeType,target:e.probeTarget||(e.probeType==="http"?"http://localhost:3000":"localhost:3000"),intervalSeconds:e.probeInterval,failureThreshold:e.probeThreshold,timeoutSeconds:5}:void 0,logs:{wsUrl:e.ws,saveToFile:e.saveLogs}});console.log(s.cyan("[ZPM]"),t),e.dev?await P(f,a):process.exit(0);}catch(r){console.log(s.cyan("[ZPM]"),s.red("[ERROR]"),r.message);}});n.command("logs [name]").description("Stream real-time logs (omit name for all logs)").action(async o=>{try{if(!await c.isDaemonRunning())throw new Error("Daemon is not running.");let r=o?`"${o}"`:"all workers";console.log(s.cyan("[ZPM]"),`Streaming logs for "${s.green(r)}" (Ctrl+C to stop)`);let a=b.createConnection(f$1(f));a.write(JSON.stringify({cmd:"logs",name:o})+`
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunkCLGIBT3W_cjs=require('./chunk-CLGIBT3W.cjs'),chunkYGHAA45S_cjs=require('./chunk-YGHAA45S.cjs'),chunkWPWZGJN5_cjs=require('./chunk-WPWZGJN5.cjs');Object.defineProperty(exports,"ZPMClient",{enumerable:true,get:function(){return chunkCLGIBT3W_cjs.a}});Object.defineProperty(exports,"zpm",{enumerable:true,get:function(){return chunkCLGIBT3W_cjs.b}});Object.defineProperty(exports,"ProcessManager",{enumerable:true,get:function(){return chunkYGHAA45S_cjs.c}});Object.defineProperty(exports,"Worker",{enumerable:true,get:function(){return chunkYGHAA45S_cjs.b}});Object.defineProperty(exports,"runProbe",{enumerable:true,get:function(){return chunkYGHAA45S_cjs.a}});Object.defineProperty(exports,"WorkerMode",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.b}});Object.defineProperty(exports,"WorkerStatus",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.c}});Object.defineProperty(exports,"getSocketPath",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.f}});Object.defineProperty(exports,"logger",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.d}});Object.defineProperty(exports,"processStore",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.e}});
1
+ 'use strict';var chunk3BHYRI7Z_cjs=require('./chunk-3BHYRI7Z.cjs'),chunkYGHAA45S_cjs=require('./chunk-YGHAA45S.cjs'),chunkWPWZGJN5_cjs=require('./chunk-WPWZGJN5.cjs');Object.defineProperty(exports,"ZPMClient",{enumerable:true,get:function(){return chunk3BHYRI7Z_cjs.a}});Object.defineProperty(exports,"zpm",{enumerable:true,get:function(){return chunk3BHYRI7Z_cjs.b}});Object.defineProperty(exports,"ProcessManager",{enumerable:true,get:function(){return chunkYGHAA45S_cjs.c}});Object.defineProperty(exports,"Worker",{enumerable:true,get:function(){return chunkYGHAA45S_cjs.b}});Object.defineProperty(exports,"runProbe",{enumerable:true,get:function(){return chunkYGHAA45S_cjs.a}});Object.defineProperty(exports,"WorkerMode",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.b}});Object.defineProperty(exports,"WorkerStatus",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.c}});Object.defineProperty(exports,"getSocketPath",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.f}});Object.defineProperty(exports,"logger",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.d}});Object.defineProperty(exports,"processStore",{enumerable:true,get:function(){return chunkWPWZGJN5_cjs.e}});
package/dist/index.d.cts CHANGED
@@ -214,6 +214,7 @@ declare class ZPMClient {
214
214
  killDaemon(): Promise<void>;
215
215
  getStore(): Promise<StoreInfo>;
216
216
  getProcessByName(processName: string): Promise<ManagedProcess | undefined>;
217
+ startWorker(name: string): Promise<string>;
217
218
  start(config: WorkerConfig): Promise<string>;
218
219
  stop(name: string): Promise<string>;
219
220
  restart(name: string): Promise<string>;
package/dist/index.d.ts CHANGED
@@ -214,6 +214,7 @@ declare class ZPMClient {
214
214
  killDaemon(): Promise<void>;
215
215
  getStore(): Promise<StoreInfo>;
216
216
  getProcessByName(processName: string): Promise<ManagedProcess | undefined>;
217
+ startWorker(name: string): Promise<string>;
217
218
  start(config: WorkerConfig): Promise<string>;
218
219
  stop(name: string): Promise<string>;
219
220
  restart(name: string): Promise<string>;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{a as ZPMClient,b as zpm}from'./chunk-IYTWXZHG.js';export{c as ProcessManager,b as Worker,a as runProbe}from'./chunk-AZIXEAKE.js';export{b as WorkerMode,c as WorkerStatus,f as getSocketPath,d as logger,e as processStore}from'./chunk-FXEDN7ZZ.js';
1
+ export{a as ZPMClient,b as zpm}from'./chunk-GQ7YGUB7.js';export{c as ProcessManager,b as Worker,a as runProbe}from'./chunk-AZIXEAKE.js';export{b as WorkerMode,c as WorkerStatus,f as getSocketPath,d as logger,e as processStore}from'./chunk-FXEDN7ZZ.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zuzjs/pm",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "keywords": [
5
5
  "core",
6
6
  "zuz",
@@ -1,3 +0,0 @@
1
- import {a,d,f as f$1}from'./chunk-FXEDN7ZZ.js';import {spawn}from'child_process';import p from'fs';import w from'net';import y from'os';import f from'path';function s(d,e="zuz-pm"){return new Promise((r,t)=>{let n=w.createConnection(f$1(e)),i="";n.on("connect",()=>{n.write(JSON.stringify(d)+`
2
- `);}),n.on("data",o=>{i+=o.toString();let m=i.split(`
3
- `);i=m.pop()??"";for(let g of m)if(g.trim())try{let a=JSON.parse(g);n.destroy(),a.ok?r(a.data):t(new Error(a.error));}catch(a){n.destroy(),t(a);}}),n.on("error",o=>t(o)),n.setTimeout(1e4,()=>{n.destroy(),t(new Error("IPC timeout"));});})}var u=class{daemonScript;namespace;constructor(e){this.namespace=e?.namespace??"zuz-pm",this.daemonScript=e?.daemonScript??f.join(a,"daemon.js");}async isDaemonRunning(){try{return d.info("[ZPM]","Daemon is Running :?"),await s({cmd:"ping"},this.namespace),!0}catch{return d.info("[ZPM]","Daemon is not running."),false}}async ensureDaemon(){if(await this.isDaemonRunning())return;d.info("Starting ZPM daemon...");let r=process.env.NODE_ENV!=="production";spawn(process.execPath,[this.daemonScript],{detached:true,stdio:r?"inherit":"ignore"}).unref(),await this.waitForDaemon(8e3);}async killDaemon(){let e=f.join(y.tmpdir(),"zuz-pm.pid");if(!p.existsSync(e))throw new Error("Daemon PID file not found \u2013 is the daemon running?");let r=Number(p.readFileSync(e,"utf8").trim());try{process.kill(r,"SIGTERM"),console.log(`[ZPM] Sent SIGTERM to daemon (PID ${r})`);}catch(t){throw new Error(`Failed to kill daemon: ${t.message}`)}finally{p.unlinkSync(e);}}async getStore(){let e=await s({cmd:"get-store"},this.namespace);return e.ok==true?e.data:null}async getProcessByName(e){let r=await s({cmd:"get-store"},this.namespace);return (r.ok==true?r.data:[]).find(n=>n.name==e)}async start(e){return s({cmd:"start",name:e.name,config:e},this.namespace)}async stop(e){return s({cmd:"stop",name:e},this.namespace)}async restart(e){return s({cmd:"restart",name:e},this.namespace)}async delete(e){return s({cmd:"delete",name:e},this.namespace)}async replaceWorker(e,r,t){let n=await this.getWorkerByName(e);if(n)return await this.stop(e),await this.delete(e),await s({cmd:"add-worker",config:{...n.getConfig(),name:r},autoStart:t})}async getWorkerByName(e){return await s({cmd:"find-worker",name:e},this.namespace)}async stats(e){return s({cmd:"stats",name:e},this.namespace)}async list(){return s({cmd:"list"},this.namespace)}waitForDaemon(e){let r=Date.now(),t=200;return new Promise((n,i)=>{let o=()=>{this.isDaemonRunning().then(m=>{if(m)return n();if(Date.now()-r>e)return i(new Error("Daemon did not start in time"));setTimeout(o,t);});};setTimeout(o,t);})}},E=new u;export{u as a,E as b};