|
@@ -53,16 +53,8 @@ class DevWatcherService extends BaseService {
|
|
|
spawn: require('child_process').spawn,
|
|
|
};
|
|
|
|
|
|
- _construct () {
|
|
|
- this.instances = [];
|
|
|
- }
|
|
|
-
|
|
|
async _init (args) {
|
|
|
this.args = args;
|
|
|
-
|
|
|
- process.on('exit', () => {
|
|
|
- this.exit_all_();
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
// Oh geez we need to wait for the web server to initialize
|
|
@@ -71,13 +63,16 @@ class DevWatcherService extends BaseService {
|
|
|
// this was to debug the first time, like Ahhhhhh!!
|
|
|
// but hey at least we have this convenient event listener.
|
|
|
async ['__on_ready.webserver'] () {
|
|
|
+ const svc_process = this.services.get('process');
|
|
|
+
|
|
|
const { root, commands } = this.args;
|
|
|
let promises = [];
|
|
|
for ( const entry of commands ) {
|
|
|
const { directory } = entry;
|
|
|
const fullpath = this.modules.path.join(
|
|
|
root, directory);
|
|
|
- promises.push(this.start_({ ...entry, fullpath }));
|
|
|
+ // promises.push(this.start_({ ...entry, fullpath }));
|
|
|
+ promises.push(svc_process.start({ ...entry, fullpath }));
|
|
|
}
|
|
|
await Promise.all(promises);
|
|
|
|
|
@@ -85,56 +80,6 @@ class DevWatcherService extends BaseService {
|
|
|
// run so we just wait a bit before we say we're ready.
|
|
|
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
|
}
|
|
|
-
|
|
|
- log_ (name, isErr, line) {
|
|
|
- let txt = `[${name}:`;
|
|
|
- txt += isErr
|
|
|
- ? `\x1B[34;1m2\x1B[0m`
|
|
|
- : `\x1B[32;1m1\x1B[0m`;
|
|
|
- txt += '] ' + line;
|
|
|
- this.log.info(txt);
|
|
|
- }
|
|
|
-
|
|
|
- async start_ ({ name, fullpath, command, args, env }) {
|
|
|
- this.log.info(`Starting ${name} in ${fullpath}`);
|
|
|
- const env_processed = { ...(env ?? {}) };
|
|
|
- for ( const k in env_processed ) {
|
|
|
- if ( typeof env_processed[k] !== 'function' ) continue;
|
|
|
- env_processed[k] = env_processed[k]({
|
|
|
- global_config: this.global_config
|
|
|
- });
|
|
|
- }
|
|
|
- console.log(
|
|
|
- 'command',
|
|
|
- command,
|
|
|
- ...args
|
|
|
- )
|
|
|
- const proc = this.modules.spawn(command, args, {
|
|
|
- shell: true,
|
|
|
- env: {
|
|
|
- ...process.env,
|
|
|
- ...env_processed,
|
|
|
- },
|
|
|
- cwd: fullpath,
|
|
|
- });
|
|
|
- this.instances.push({
|
|
|
- name, proc,
|
|
|
- });
|
|
|
- const out = new ProxyLogger((line) => this.log_(name, false, line));
|
|
|
- out.attach(proc.stdout);
|
|
|
- const err = new ProxyLogger((line) => this.log_(name, true, line));
|
|
|
- err.attach(proc.stderr);
|
|
|
- proc.on('exit', () => {
|
|
|
- this.log.info(`[${name}:exit] Process exited (${proc.exitCode})`);
|
|
|
- this.instances = this.instances.filter((inst) => inst.proc !== proc);
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- async exit_all_ () {
|
|
|
- for ( const { proc } of this.instances ) {
|
|
|
- proc.kill();
|
|
|
- }
|
|
|
- }
|
|
|
};
|
|
|
|
|
|
module.exports = DevWatcherService;
|