onwards
Version:
<p align="center"> <img alt='magoon-face' src='https://user-images.githubusercontent.com/14088342/230068165-5e013e79-2ff8-4fb5-a1f0-fd5b13e028a9.png' width='250'/> <h1 align="center">ONWARDS</h1> <p align="center">👏 Super simple shareable portforwa
122 lines (121 loc) • 5.14 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
exports.__esModule = true;
exports.writeConfigAtom = exports.setProcessAtom = exports.useLogs = exports.retryProcessAtom = exports.titleConfigAtom = exports.configAtom = void 0;
var jotai_1 = require("jotai");
var read_config_1 = require("../utils/read-config");
var child_process_1 = require("child_process");
var getServices = function (file) {
return file.services.map(function (_a) {
var command = _a.command, name = _a.name;
return ({
label: name,
value: command
});
});
};
exports.configAtom = (0, jotai_1.atom)({});
exports.titleConfigAtom = (0, jotai_1.atom)(function (get) { return Object.keys(get(exports.configAtom)); });
var RETRY_TIME = 5000;
var MAX_RETRIES = 10;
var RESET_RETRIES_TIME = 60;
var setConfigAtom = function (_a) {
var get = _a.get, set = _a.set, atom = _a.atom;
var config = get(atom);
if (config.process !== null && config.status === "done") {
return void config.process.kill();
}
if (config.process !== null && config.status !== "error") {
return null;
}
if (config.process !== null && config.status === "error") {
set(atom, __assign(__assign({}, config), { process: null }));
}
var _b = config.task.split(" "), _c = _b[0], task = _c === void 0 ? "" : _c, args = _b.slice(1);
var execute = (0, child_process_1.spawn)(task, args);
set(atom, __assign(__assign({}, config), { process: execute, status: "loading" }));
execute.stdout.on("data", function (log) {
var result = log.toString().trim();
var config = get(atom);
set(atom, __assign(__assign({}, config), { log: __spreadArray(__spreadArray([], config.log, true), [result], false), status: "done" }));
});
execute.stderr.on("data", function (log) {
var error = log.toString().trim();
var config = get(atom);
set(atom, __assign(__assign({}, config), { log: __spreadArray(__spreadArray([], config.log, true), [error], false), status: "error" }));
});
execute.on("error", function () {
var config = get(atom);
set(atom, __assign(__assign({}, config), { status: "error" }));
});
execute.on("close", function () {
var config = get(atom);
if (config.status === "done") {
set(atom, __assign(__assign({}, config), { process: null, status: "pending" }));
return;
}
var lastRetry = Date.now() / 1000 - config.timestamp;
var resetTimer = lastRetry > RESET_RETRIES_TIME;
set(atom, __assign(__assign({}, config), { status: "error", timestamp: Date.now() / 1000, retries: resetTimer ? 1 : config.retries + 1 }));
setTimeout(function () {
if (config.retries + 1 < MAX_RETRIES) {
setConfigAtom({ get: get, set: set, atom: atom });
}
}, RETRY_TIME);
});
};
exports.retryProcessAtom = (0, jotai_1.atom)(null, function (get, set, title) {
var config = get(exports.configAtom);
var atom = config[title];
if (atom)
setConfigAtom({ get: get, set: set, atom: atom });
});
var useLogs = function (_a) {
var title = _a.title;
var config = (0, jotai_1.useAtom)(exports.configAtom)[0];
var atom = config[title];
var taskAtom = (0, jotai_1.useAtom)(atom)[0];
return taskAtom ? taskAtom.log : [];
};
exports.useLogs = useLogs;
exports.setProcessAtom = (0, jotai_1.atom)(null, function (get, set) {
var config = get(exports.configAtom);
Object.values(config).forEach(function (atom) { return setConfigAtom({ get: get, set: set, atom: atom }); });
});
exports.writeConfigAtom = (0, jotai_1.atom)(null, function (_, set) {
var file = (0, read_config_1.readFile)();
if (file) {
var services = getServices(file);
var commands = services.reduce(function (prev, curr) {
var _a;
return __assign(__assign({}, prev), (_a = {}, _a[curr.label] = (0, jotai_1.atom)({
log: [],
task: curr.value,
process: null,
status: "pending",
retries: 0,
timestamp: Date.now() / 1000
}), _a));
}, {});
set(exports.configAtom, commands);
}
});