UNPKG

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
"use strict"; 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); } });