@joystick.js/cli-canary 0.0.0-canary.74 → 0.0.0-canary.76

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,30 +1,44 @@
1
- const actionMethod = () => {
1
+ import ps from "ps-node";
2
+ const killProcess = (pid = 0) => {
2
3
  try {
4
+ return new Promise((resolve) => {
5
+ ps.kill(pid, () => {
6
+ resolve();
7
+ });
8
+ });
3
9
  } catch (exception) {
4
- throw new Error(`[cleanup.actionMethod] ${exception.message}`);
10
+ throw new Error(`[cleanup.killProcess] ${exception.message}`);
5
11
  }
6
12
  };
7
- const validateOptions = (options) => {
13
+ const handleCLIProcessMessages = () => {
8
14
  try {
9
- if (!options)
10
- throw new Error("options object is required.");
11
- if (!options.someOption)
12
- throw new Error("options.someOption is required.");
15
+ process.on("message", async (message = "{}") => {
16
+ const parsedMessage = JSON.parse(message);
17
+ const processIds = parsedMessage?.processIds;
18
+ for (let i = 0; i < processIds?.length; i += 1) {
19
+ const processId = processIds[i];
20
+ await killProcess(processId);
21
+ }
22
+ process.exit();
23
+ });
13
24
  } catch (exception) {
14
- throw new Error(`[cleanup.validateOptions] ${exception.message}`);
25
+ throw new Error(`[cleanup.handleCLIProcessMessages] ${exception.message}`);
15
26
  }
16
27
  };
17
28
  const cleanup = (options, { resolve, reject }) => {
18
29
  try {
19
- validateOptions(options);
30
+ process.title = "joystick_cleanup";
31
+ handleCLIProcessMessages();
20
32
  resolve();
21
33
  } catch (exception) {
22
34
  reject(`[cleanup] ${exception.message}`);
23
35
  }
24
36
  };
25
- var cleanup_default = (options) => new Promise((resolve, reject) => {
26
- cleanup(options, { resolve, reject });
27
- });
37
+ var cleanup_default = (async (options) => {
38
+ await new Promise((resolve, reject) => {
39
+ cleanup(options, { resolve, reject });
40
+ });
41
+ })();
28
42
  export {
29
43
  cleanup_default as default
30
44
  };
@@ -438,6 +438,7 @@ const dev = async (options, { resolve, reject }) => {
438
438
  nodeMajorVersion,
439
439
  __dirname
440
440
  );
441
+ await cleanup();
441
442
  resolve();
442
443
  } catch (exception) {
443
444
  console.warn(exception);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joystick.js/cli-canary",
3
- "version": "0.0.0-canary.74",
3
+ "version": "0.0.0-canary.76",
4
4
  "type": "module",
5
5
  "description": "CLI for the Joystick JavaScript framework.",
6
6
  "main": "development.js",
@@ -1,34 +1,53 @@
1
- /* eslint-disable consistent-return */
1
+ import ps from "ps-node";
2
2
 
3
- const actionMethod = () => {
3
+ const killProcess = (pid = 0) => {
4
4
  try {
5
- // Perform a single step in your action here.
5
+ return new Promise((resolve) => {
6
+ ps.kill(pid, () => {
7
+ resolve();
8
+ });
9
+ });
6
10
  } catch (exception) {
7
- throw new Error(`[cleanup.actionMethod] ${exception.message}`);
11
+ throw new Error(`[cleanup.killProcess] ${exception.message}`);
8
12
  }
9
13
  };
10
14
 
11
- const validateOptions = (options) => {
15
+ const handleCLIProcessMessages = () => {
12
16
  try {
13
- if (!options) throw new Error('options object is required.');
14
- if (!options.someOption) throw new Error('options.someOption is required.');
17
+ process.on('message', async (message = '{}') => {
18
+ const parsedMessage = JSON.parse(message);
19
+ const processIds = parsedMessage?.processIds;
20
+
21
+ for (let i = 0; i < processIds?.length; i += 1) {
22
+ const processId = processIds[i];
23
+ await killProcess(processId);
24
+ }
25
+
26
+ process.exit();
27
+ });
15
28
  } catch (exception) {
16
- throw new Error(`[cleanup.validateOptions] ${exception.message}`);
29
+ throw new Error(`[cleanup.handleCLIProcessMessages] ${exception.message}`);
17
30
  }
18
31
  };
19
32
 
20
33
  const cleanup = (options, { resolve, reject }) => {
21
34
  try {
22
- validateOptions(options);
23
- // Call action methods in sequence here.
35
+ process.title = "joystick_cleanup";
36
+
37
+ handleCLIProcessMessages();
38
+
24
39
  resolve();
25
40
  } catch (exception) {
26
41
  reject(`[cleanup] ${exception.message}`);
27
42
  }
28
43
  };
29
44
 
30
- export default (options) =>
31
- new Promise((resolve, reject) => {
32
- cleanup(options, { resolve, reject });
33
- });
45
+ // NOTE: Use an async iife because this module is called via child_process.fork();
46
+ export default (
47
+ async (options) => {
48
+ await new Promise((resolve, reject) => {
49
+ cleanup(options, { resolve, reject });
50
+ });
51
+ }
52
+ )();
34
53
 
@@ -525,6 +525,8 @@ const dev = async (options, { resolve, reject }) => {
525
525
  nodeMajorVersion,
526
526
  __dirname
527
527
  );
528
+
529
+ await cleanup();
528
530
  //
529
531
  // if (options?.environment === 'test') {
530
532
  // await runTests(options);