UNPKG

plumbio

Version:

Logic plumbing functions for your JavaScript data.

316 lines (315 loc) 15 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { 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; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; 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)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasResponse = exports.getStatus = exports.getSubResult = exports.filterSubResult = exports.getPipeBounds = exports.getFormattedPipe = exports.getOptionExp = exports.getOptionCases = exports.getMergedPipes = exports.getFormattedPipes = exports.getFormattedOptions = exports.getExpOrStatus = exports.getExpOrResponse = exports.getExp = exports.addSubStatus = exports.addSubResponse = exports.addSubResults = exports.addStreamResult = exports.addOptionResponse = void 0; var $$ = __importStar(require("richierich")); var addOptionResponse = function (options, result) { if (!$$.hasKey(options, "response") || $$.isEmpty(options.response)) return; result.response = $$.getFunc(options.response, result.status); }; exports.addOptionResponse = addOptionResponse; var addStreamResult = function (stream, result) { if ($$.hasKey(result, "status")) stream.status = result.status; if ($$.hasKey(result, "response")) stream.response = result.response; }; exports.addStreamResult = addStreamResult; var addSubResults = function (options, stream, result) { return __awaiter(void 0, void 0, void 0, function () { var subResults, _i, _a, pipe, subResult, _b, subResults_1, subResult; return __generator(this, function (_c) { switch (_c.label) { case 0: subResults = []; _i = 0, _a = $$.getKeyArr(options, "pipes"); _c.label = 1; case 1: if (!(_i < _a.length)) return [3 /*break*/, 4]; pipe = _a[_i]; return [4 /*yield*/, pipe(stream)]; case 2: subResult = _c.sent(); (0, exports.addSubStatus)(options, result, subResult); subResults.push(subResult); if (options.disableResultPropagation) return [3 /*break*/, 3]; (0, exports.addStreamResult)(stream, subResult); _c.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: for (_b = 0, subResults_1 = subResults; _b < subResults_1.length; _b++) { subResult = subResults_1[_b]; (0, exports.addSubResponse)(options, result, subResult); } return [2 /*return*/]; } }); }); }; exports.addSubResults = addSubResults; var addSubResponse = function (options, result, subResult) { var _a; var _b; if (!$$.hasKey(options, "response") && (0, exports.hasResponse)(subResult) && (0, exports.filterSubResult)(options === null || options === void 0 ? void 0 : options.responseFilter, result, subResult)) { (_a = ((_b = result.response) !== null && _b !== void 0 ? _b : (result.response = []))).push.apply(_a, $$.toArr(subResult.response)); } }; exports.addSubResponse = addSubResponse; var addSubStatus = function (options, result, subResult) { result.status = (options === null || options === void 0 ? void 0 : options.reducer) ? options.reducer((0, exports.getStatus)(result), (0, exports.getStatus)(subResult)) : (0, exports.getStatus)(subResult); }; exports.addSubStatus = addSubStatus; var getExp = function (options, stream) { return __awaiter(void 0, void 0, void 0, function () { var optionResult, nextPipe, pipeResult; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, exports.getOptionExp)(options, stream)]; case 1: optionResult = _a.sent(); nextPipe = 0; if (optionResult) return [2 /*return*/, [optionResult, nextPipe]]; return [4 /*yield*/, (0, exports.getSubResult)(options, stream)]; case 2: pipeResult = _a.sent(); nextPipe++; return [2 /*return*/, [pipeResult, nextPipe]]; } }); }); }; exports.getExp = getExp; var getExpOrResponse = function (options, stream) { return __awaiter(void 0, void 0, void 0, function () { var _a, exp, nextPipe, response; var _b; return __generator(this, function (_c) { switch (_c.label) { case 0: return [4 /*yield*/, (0, exports.getExp)(options, stream)]; case 1: _a = _c.sent(), exp = _a[0], nextPipe = _a[1]; response = (_b = exp === null || exp === void 0 ? void 0 : exp.response) !== null && _b !== void 0 ? _b : exp; return [2 /*return*/, [response, nextPipe]]; } }); }); }; exports.getExpOrResponse = getExpOrResponse; var getExpOrStatus = function (options, stream) { return __awaiter(void 0, void 0, void 0, function () { var _a, exp, nextPipe, status; var _b; return __generator(this, function (_c) { switch (_c.label) { case 0: return [4 /*yield*/, (0, exports.getExp)(options, stream)]; case 1: _a = _c.sent(), exp = _a[0], nextPipe = _a[1]; status = (_b = exp === null || exp === void 0 ? void 0 : exp.status) !== null && _b !== void 0 ? _b : !!exp; return [2 /*return*/, [status, nextPipe]]; } }); }); }; exports.getExpOrStatus = getExpOrStatus; var getFormattedOptions = function (options, stream, pipeStore) { if ($$.isFunc(options)) options = options(stream); if (!$$.isObj(options)) options = { pipes: options, }; options = (0, exports.getMergedPipes)(options); options = (0, exports.getFormattedPipes)(options, pipeStore); return options; }; exports.getFormattedOptions = getFormattedOptions; var getFormattedPipes = function (options, pipeStore) { if (options.pipes) { var pipes = $$.toArr(options.pipes); options = __assign(__assign({}, options), { pipes: pipes.map(function (pipe) { return (0, exports.getFormattedPipe)(pipe, pipeStore); }) }); } return options; }; exports.getFormattedPipes = getFormattedPipes; var getMergedPipes = function (options) { if (options.pipe) { var pipe = $$.toArr(options.pipe); var pipes = $$.toArr(options.pipes); options = __assign(__assign({}, $$.omit(options, "pipe")), { pipes: __spreadArray(__spreadArray([], pipe, true), pipes, true).filter(Boolean) }); } return options; }; exports.getMergedPipes = getMergedPipes; var getOptionCases = function (options) { var result = []; if (options === null || options === void 0 ? void 0 : options.cases) { result.push.apply(result, options.cases); return result; } if (!(options === null || options === void 0 ? void 0 : options.case1)) return result; $$.getSortedKeys(options).forEach(function (key) { if (/case\d+/.test(key)) result.push(options[key]); }); return result; }; exports.getOptionCases = getOptionCases; var getOptionExp = function (options, stream) { return __awaiter(void 0, void 0, void 0, function () { var exp, _a; var _b; return __generator(this, function (_c) { switch (_c.label) { case 0: exp = (_b = options.exp) !== null && _b !== void 0 ? _b : options.expression; if (!$$.isFunc(exp)) return [3 /*break*/, 2]; return [4 /*yield*/, (0, exports.getSubResult)(options, stream)]; case 1: _a = _c.sent(); return [3 /*break*/, 3]; case 2: _a = exp; _c.label = 3; case 3: return [2 /*return*/, _a]; } }); }); }; exports.getOptionExp = getOptionExp; var getFormattedPipe = function (pipe, pipeStore) { var _a; pipe = $$.toArr(pipe); if ($$.isStr(pipe[0])) pipe[0] = (_a = pipeStore === null || pipeStore === void 0 ? void 0 : pipeStore[pipe[0]]) !== null && _a !== void 0 ? _a : pipe[0]; if (pipe.length > 1) pipe = (0, exports.getPipeBounds)(pipe); else pipe = pipe[0]; return pipe; }; exports.getFormattedPipe = getFormattedPipe; var getPipeBounds = function (pipe) { var boundPipe = null; if ($$.isFunc(pipe === null || pipe === void 0 ? void 0 : pipe[0])) boundPipe = pipe[0].bind(null, pipe[1]); return boundPipe !== null && boundPipe !== void 0 ? boundPipe : pipe; }; exports.getPipeBounds = getPipeBounds; var filterSubResult = function (filter, result, subResult) { var _a; return (_a = filter === null || filter === void 0 ? void 0 : filter(result, subResult)) !== null && _a !== void 0 ? _a : true; }; exports.filterSubResult = filterSubResult; var getSubResult = function (options, stream, index, defaultVal) { if (index === void 0) { index = 0; } if (defaultVal === void 0) { defaultVal = { status: false }; } return __awaiter(void 0, void 0, void 0, function () { var result, subResult; return __generator(this, function (_a) { switch (_a.label) { case 0: result = defaultVal; if (!$$.hasKey(options, "pipes") || !$$.isFuncArr(options.pipes) || options.pipes.length < index + 1) return [2 /*return*/, result]; return [4 /*yield*/, options.pipes[index](stream)]; case 1: subResult = _a.sent(); (0, exports.addSubStatus)(options, result, subResult); (0, exports.addSubResponse)(options, result, subResult); (0, exports.addOptionResponse)(options, result); if (options.disableResultPropagation) return [2 /*return*/, result]; (0, exports.addStreamResult)(stream, result); return [2 /*return*/, result]; } }); }); }; exports.getSubResult = getSubResult; var getStatus = function (result) { return $$.hasKeyBool(result, "status") ? result.status : !!result.status; }; exports.getStatus = getStatus; var hasResponse = function (result) { var hasResponse = $$.hasKey(result, "response"); var isNotEmpty = !$$.isEmpty(result.response); return hasResponse && isNotEmpty; }; exports.hasResponse = hasResponse;