runlify 0.0.1 → 0.0.2
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/bin/runlify +0 -3
- package/build/commands/env.js +103 -0
- package/build/commands/readEnv.js +66 -0
- package/build/signal-termination.js +118 -0
- package/build/types/commands/env.d.ts +1 -0
- package/build/types/commands/readEnv.d.ts +1 -0
- package/build/types/signal-termination.d.ts +27 -0
- package/package.json +13 -7
package/bin/runlify
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
/* tslint:disable */
|
|
5
4
|
// check if we're running in dev mode
|
|
6
5
|
var devMode = require('fs').existsSync(`${__dirname}/../src`)
|
|
@@ -17,5 +16,3 @@ if (wantsCompiled || !devMode) {
|
|
|
17
16
|
// run the CLI with the current process arguments
|
|
18
17
|
require(`${__dirname}/../src/cli`).run(process.argv)
|
|
19
18
|
}
|
|
20
|
-
|
|
21
|
-
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var cross_spawn_1 = require("cross-spawn");
|
|
40
|
+
var signal_termination_1 = require("../signal-termination");
|
|
41
|
+
var change_case_1 = require("change-case");
|
|
42
|
+
var nconf = require("nconf");
|
|
43
|
+
var R = require("ramda");
|
|
44
|
+
nconf.env();
|
|
45
|
+
module.exports = {
|
|
46
|
+
name: 'env',
|
|
47
|
+
alias: ['e'],
|
|
48
|
+
run: function (toolbox) { return __awaiter(void 0, void 0, void 0, function () {
|
|
49
|
+
var parameters, info, envName, command, commandArgs, proc, signals;
|
|
50
|
+
return __generator(this, function (_a) {
|
|
51
|
+
parameters = toolbox.parameters, info = toolbox.print.info;
|
|
52
|
+
// const name = parameters.first
|
|
53
|
+
// await generate({
|
|
54
|
+
// template: 'model.ts.ejs',
|
|
55
|
+
// target: `models/${name}-model.ts`,
|
|
56
|
+
// props: { name },
|
|
57
|
+
// })
|
|
58
|
+
// // echo $SOME
|
|
59
|
+
// const env: Record<string, string> = {
|
|
60
|
+
// ...process.env,
|
|
61
|
+
// SOME: '000',
|
|
62
|
+
// }
|
|
63
|
+
// info(`env`)
|
|
64
|
+
// info(env)
|
|
65
|
+
// // info(JSON.stringify())
|
|
66
|
+
info(parameters);
|
|
67
|
+
envName = parameters.first;
|
|
68
|
+
info("envName: ".concat(envName));
|
|
69
|
+
nconf.file({
|
|
70
|
+
file: "./config/".concat(envName, ".json"),
|
|
71
|
+
format: {
|
|
72
|
+
stringify: JSON.stringify,
|
|
73
|
+
parse: function (str) {
|
|
74
|
+
return R.fromPairs(R.toPairs(JSON.parse(str)).map(function (_a) {
|
|
75
|
+
var key = _a[0], value = _a[1];
|
|
76
|
+
return [
|
|
77
|
+
(0, change_case_1.constantCase)(key),
|
|
78
|
+
value,
|
|
79
|
+
];
|
|
80
|
+
}));
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
info("get");
|
|
85
|
+
info(nconf.get());
|
|
86
|
+
command = parameters.second;
|
|
87
|
+
info("command: ".concat(command));
|
|
88
|
+
commandArgs = parameters.array.splice(2);
|
|
89
|
+
info("commandArgs");
|
|
90
|
+
info(commandArgs);
|
|
91
|
+
proc = (0, cross_spawn_1.spawn)(command, commandArgs, {
|
|
92
|
+
stdio: 'inherit',
|
|
93
|
+
shell: true,
|
|
94
|
+
env: nconf.get(),
|
|
95
|
+
});
|
|
96
|
+
signals = new signal_termination_1.TermSignals();
|
|
97
|
+
signals.handleUncaughtExceptions();
|
|
98
|
+
signals.handleTermSignals(proc);
|
|
99
|
+
return [2 /*return*/];
|
|
100
|
+
});
|
|
101
|
+
}); },
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFtQztBQUVuQyw0REFBbUQ7QUFDbkQsMkNBQTBDO0FBQzFDLDZCQUE4QjtBQUM5Qix5QkFBMEI7QUFFMUIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBRVgsTUFBTSxDQUFDLE9BQU8sR0FBRztJQUNmLElBQUksRUFBRSxLQUFLO0lBQ1gsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ1osR0FBRyxFQUFFLFVBQU8sT0FBdUI7OztZQUUvQixVQUFVLEdBRVIsT0FBTyxXQUZDLEVBQ0QsSUFBSSxHQUNYLE9BQU8sV0FESSxDQUNKO1lBRVgsZ0NBQWdDO1lBRWhDLG1CQUFtQjtZQUNuQiw4QkFBOEI7WUFDOUIsdUNBQXVDO1lBQ3ZDLHFCQUFxQjtZQUNyQixLQUFLO1lBRUwsZ0JBQWdCO1lBQ2hCLHdDQUF3QztZQUN4QyxvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLElBQUk7WUFDSixjQUFjO1lBQ2QsWUFBWTtZQUVaLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7WUFHVixPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQTtZQUNoQyxJQUFJLENBQUMsbUJBQVksT0FBTyxDQUFFLENBQUMsQ0FBQTtZQUUzQixLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULElBQUksRUFBRSxtQkFBWSxPQUFPLFVBQU87Z0JBQ2hDLE1BQU0sRUFBRTtvQkFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLEtBQUssRUFBRSxVQUFDLEdBQVc7d0JBQ2pCLE9BQUEsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQyxFQUFZO2dDQUFYLEdBQUcsUUFBQSxFQUFFLEtBQUssUUFBQTs0QkFBTSxPQUFBO2dDQUMvQyxJQUFBLDBCQUFZLEVBQUMsR0FBRyxDQUFDO2dDQUNqQixLQUFLOzZCQUNOO3dCQUhnRCxDQUdoRCxDQUFDLENBQ0g7b0JBTEQsQ0FLQztpQkFDSjthQUNGLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtZQUtYLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO1lBQ2pDLElBQUksQ0FBQyxtQkFBWSxPQUFPLENBQUUsQ0FBQyxDQUFBO1lBRXJCLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBR1gsSUFBSSxHQUFHLElBQUEsbUJBQUssRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFFO2dCQUN2QyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUU7YUFDakIsQ0FBQyxDQUFBO1lBR0ksT0FBTyxHQUFHLElBQUksZ0NBQVcsRUFBRSxDQUFBO1lBQ2pDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQ2xDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTs7O1NBQ2hDO0NBQ0YsQ0FBQSJ9
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
module.exports = {
|
|
40
|
+
name: 'readEnv',
|
|
41
|
+
alias: ['r'],
|
|
42
|
+
run: function (toolbox) { return __awaiter(void 0, void 0, void 0, function () {
|
|
43
|
+
var info;
|
|
44
|
+
return __generator(this, function (_a) {
|
|
45
|
+
info = toolbox.print.info;
|
|
46
|
+
// const name = parameters.first
|
|
47
|
+
// await generate({
|
|
48
|
+
// template: 'model.ts.ejs',
|
|
49
|
+
// target: `models/${name}-model.ts`,
|
|
50
|
+
// props: { name },
|
|
51
|
+
// })
|
|
52
|
+
// echo $SOME
|
|
53
|
+
// info(JSON.stringify())
|
|
54
|
+
// info(process.env)
|
|
55
|
+
info('readEnv');
|
|
56
|
+
info('SOME');
|
|
57
|
+
info(process.env.SOME);
|
|
58
|
+
info('DATABASE_URI');
|
|
59
|
+
info(process.env.DATABASE_URI);
|
|
60
|
+
info('database.uri');
|
|
61
|
+
info(process.env['database.uri']);
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
});
|
|
64
|
+
}); },
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZEVudi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9yZWFkRW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTSxDQUFDLE9BQU8sR0FBRztJQUNmLElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ1osR0FBRyxFQUFFLFVBQU8sT0FBdUI7OztZQUd0QixJQUFJLEdBQ1gsT0FBTyxXQURJLENBQ0o7WUFFWCxnQ0FBZ0M7WUFFaEMsbUJBQW1CO1lBQ25CLDhCQUE4QjtZQUM5Qix1Q0FBdUM7WUFDdkMscUJBQXFCO1lBQ3JCLEtBQUs7WUFFTCxhQUFhO1lBRWIseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7OztTQUNsQztDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TermSignals = void 0;
|
|
4
|
+
// file from env-cmd package
|
|
5
|
+
var SIGNALS_TO_HANDLE = ['SIGINT', 'SIGTERM', 'SIGHUP'];
|
|
6
|
+
var TermSignals = /** @class */ (function () {
|
|
7
|
+
function TermSignals(options) {
|
|
8
|
+
if (options === void 0) { options = {}; }
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
this.terminateSpawnedProcessFuncHandlers = {};
|
|
11
|
+
this.verbose = false;
|
|
12
|
+
this._exitCalled = false;
|
|
13
|
+
this.verbose = options.verbose === true;
|
|
14
|
+
}
|
|
15
|
+
TermSignals.prototype.handleTermSignals = function (proc) {
|
|
16
|
+
var _this = this;
|
|
17
|
+
// Terminate child process if parent process receives termination events
|
|
18
|
+
SIGNALS_TO_HANDLE.forEach(function (signal) {
|
|
19
|
+
_this.terminateSpawnedProcessFuncHandlers[signal] = function (signal, code) {
|
|
20
|
+
_this._removeProcessListeners();
|
|
21
|
+
if (!_this._exitCalled) {
|
|
22
|
+
if (_this.verbose) {
|
|
23
|
+
console.info('Parent process exited with signal: ' +
|
|
24
|
+
signal.toString() +
|
|
25
|
+
'. Terminating child process...');
|
|
26
|
+
}
|
|
27
|
+
// Mark shared state so we do not run into a signal/exit loop
|
|
28
|
+
_this._exitCalled = true;
|
|
29
|
+
// Use the signal code if it is an error code
|
|
30
|
+
var correctSignal = void 0;
|
|
31
|
+
if (typeof signal === 'number') {
|
|
32
|
+
if (signal > (code !== null && code !== void 0 ? code : 0)) {
|
|
33
|
+
code = signal;
|
|
34
|
+
correctSignal = 'SIGINT';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
correctSignal = signal;
|
|
39
|
+
}
|
|
40
|
+
// Kill the child process
|
|
41
|
+
proc.kill(correctSignal !== null && correctSignal !== void 0 ? correctSignal : code);
|
|
42
|
+
// Terminate the parent process
|
|
43
|
+
_this._terminateProcess(code, correctSignal);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
process.once(signal, _this.terminateSpawnedProcessFuncHandlers[signal]);
|
|
47
|
+
});
|
|
48
|
+
process.once('exit', this.terminateSpawnedProcessFuncHandlers.SIGTERM);
|
|
49
|
+
// Terminate parent process if child process receives termination events
|
|
50
|
+
proc.on('exit', function (code, signal) {
|
|
51
|
+
_this._removeProcessListeners();
|
|
52
|
+
if (!_this._exitCalled) {
|
|
53
|
+
if (_this.verbose) {
|
|
54
|
+
console.info("Child process exited with code: ".concat((code !== null && code !== void 0 ? code : '').toString(), " and signal:") +
|
|
55
|
+
(signal !== null && signal !== void 0 ? signal : '').toString() +
|
|
56
|
+
'. Terminating parent process...');
|
|
57
|
+
}
|
|
58
|
+
// Mark shared state so we do not run into a signal/exit loop
|
|
59
|
+
_this._exitCalled = true;
|
|
60
|
+
// Use the signal code if it is an error code
|
|
61
|
+
var correctSignal = void 0;
|
|
62
|
+
if (typeof signal === 'number') {
|
|
63
|
+
if (signal > (code !== null && code !== void 0 ? code : 0)) {
|
|
64
|
+
code = signal;
|
|
65
|
+
correctSignal = 'SIGINT';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
correctSignal = signal !== null && signal !== void 0 ? signal : undefined;
|
|
70
|
+
}
|
|
71
|
+
// Terminate the parent process
|
|
72
|
+
_this._terminateProcess(code, correctSignal);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Enables catching of unhandled exceptions
|
|
78
|
+
*/
|
|
79
|
+
TermSignals.prototype.handleUncaughtExceptions = function () {
|
|
80
|
+
var _this = this;
|
|
81
|
+
process.on('uncaughtException', function (e) {
|
|
82
|
+
return _this._uncaughtExceptionHandler(e);
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Terminate parent process helper
|
|
87
|
+
*/
|
|
88
|
+
TermSignals.prototype._terminateProcess = function (code, signal) {
|
|
89
|
+
if (signal !== undefined) {
|
|
90
|
+
process.kill(process.pid, signal);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (code !== undefined) {
|
|
94
|
+
return process.exit(code);
|
|
95
|
+
}
|
|
96
|
+
throw new Error('Unable to terminate parent process successfully');
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Exit event listener clean up helper
|
|
100
|
+
*/
|
|
101
|
+
TermSignals.prototype._removeProcessListeners = function () {
|
|
102
|
+
var _this = this;
|
|
103
|
+
SIGNALS_TO_HANDLE.forEach(function (signal) {
|
|
104
|
+
process.removeListener(signal, _this.terminateSpawnedProcessFuncHandlers[signal]);
|
|
105
|
+
});
|
|
106
|
+
process.removeListener('exit', this.terminateSpawnedProcessFuncHandlers.SIGTERM);
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* General exception handler
|
|
110
|
+
*/
|
|
111
|
+
TermSignals.prototype._uncaughtExceptionHandler = function (e) {
|
|
112
|
+
console.error(e.message);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
};
|
|
115
|
+
return TermSignals;
|
|
116
|
+
}());
|
|
117
|
+
exports.TermSignals = TermSignals;
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLXRlcm1pbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NpZ25hbC10ZXJtaW5hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0QkFBNEI7QUFFNUIsSUFBTSxpQkFBaUIsR0FBcUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBRTNFO0lBTUUscUJBQVksT0FBbUM7UUFBbkMsd0JBQUEsRUFBQSxZQUFtQztRQUwvQyw4REFBOEQ7UUFDN0Msd0NBQW1DLEdBQXdCLEVBQUUsQ0FBQTtRQUM3RCxZQUFPLEdBQVksS0FBSyxDQUFBO1FBQ2xDLGdCQUFXLEdBQUcsS0FBSyxDQUFBO1FBR3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUE7SUFDekMsQ0FBQztJQUVNLHVDQUFpQixHQUF4QixVQUF5QixJQUFrQjtRQUEzQyxpQkF5RUM7UUF4RUMsd0VBQXdFO1FBQ3hFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFDLE1BQU07WUFDL0IsS0FBSSxDQUFDLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQ2pELE1BQStCLEVBQy9CLElBQVk7Z0JBRVosS0FBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7Z0JBQzlCLElBQUksQ0FBQyxLQUFJLENBQUMsV0FBVyxFQUFFO29CQUNyQixJQUFJLEtBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQ1YscUNBQXFDOzRCQUNuQyxNQUFNLENBQUMsUUFBUSxFQUFFOzRCQUNqQixnQ0FBZ0MsQ0FDbkMsQ0FBQTtxQkFDRjtvQkFDRCw2REFBNkQ7b0JBQzdELEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO29CQUN2Qiw2Q0FBNkM7b0JBQzdDLElBQUksYUFBYSxTQUE0QixDQUFBO29CQUM3QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTt3QkFD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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ChildProcess } from 'child_process';
|
|
3
|
+
export declare class TermSignals {
|
|
4
|
+
private readonly terminateSpawnedProcessFuncHandlers;
|
|
5
|
+
private readonly verbose;
|
|
6
|
+
_exitCalled: boolean;
|
|
7
|
+
constructor(options?: {
|
|
8
|
+
verbose?: boolean;
|
|
9
|
+
});
|
|
10
|
+
handleTermSignals(proc: ChildProcess): void;
|
|
11
|
+
/**
|
|
12
|
+
* Enables catching of unhandled exceptions
|
|
13
|
+
*/
|
|
14
|
+
handleUncaughtExceptions(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Terminate parent process helper
|
|
17
|
+
*/
|
|
18
|
+
_terminateProcess(code?: number, signal?: NodeJS.Signals): void;
|
|
19
|
+
/**
|
|
20
|
+
* Exit event listener clean up helper
|
|
21
|
+
*/
|
|
22
|
+
_removeProcessListeners(): void;
|
|
23
|
+
/**
|
|
24
|
+
* General exception handler
|
|
25
|
+
*/
|
|
26
|
+
_uncaughtExceptionHandler(e: Error): void;
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "runlify",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "runlify CLI",
|
|
5
5
|
"private": false,
|
|
6
6
|
"types": "build/types/types.d.ts",
|
|
@@ -28,16 +28,19 @@
|
|
|
28
28
|
],
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"
|
|
31
|
+
"change-case": "^4.1.2",
|
|
32
|
+
"cross-spawn": "^7.0.3",
|
|
33
|
+
"gluegun": "latest",
|
|
34
|
+
"nconf": "^0.12.0",
|
|
35
|
+
"ramda": "^0.28.0"
|
|
32
36
|
},
|
|
33
37
|
"devDependencies": {
|
|
34
|
-
"@types/node": "^12.7.11",
|
|
35
38
|
"@types/jest": "^26.0.20",
|
|
39
|
+
"@types/nconf": "^0.10.2",
|
|
40
|
+
"@types/node": "^12.7.11",
|
|
41
|
+
"@types/ramda": "^0.28.13",
|
|
36
42
|
"@typescript-eslint/eslint-plugin": "^4.17.0",
|
|
37
43
|
"@typescript-eslint/parser": "^4.17.0",
|
|
38
|
-
"ts-jest": "^26.5.3",
|
|
39
|
-
"ts-node": "^9.1.1",
|
|
40
|
-
"typescript": "^4.2.3",
|
|
41
44
|
"copyfiles": "^2.4.1",
|
|
42
45
|
"eslint": "^7.22.0",
|
|
43
46
|
"eslint-config-prettier": "^8.1.0",
|
|
@@ -45,7 +48,10 @@
|
|
|
45
48
|
"husky": "^5.1.3",
|
|
46
49
|
"jest": "^26.6.3",
|
|
47
50
|
"prettier": "^2.2.1",
|
|
48
|
-
"pretty-quick": "^3.1.0"
|
|
51
|
+
"pretty-quick": "^3.1.0",
|
|
52
|
+
"ts-jest": "^26.5.3",
|
|
53
|
+
"ts-node": "^9.1.1",
|
|
54
|
+
"typescript": "^4.2.3"
|
|
49
55
|
},
|
|
50
56
|
"jest": {
|
|
51
57
|
"preset": "ts-jest",
|