UNPKG

@k8ts/instruments

Version:

A collection of utilities and core components for k8ts.

97 lines 3.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResourcesSpec = exports.ResourcesMap = void 0; const immutable_1 = require("immutable"); const lodash_1 = require("lodash"); const parjs_1 = require("parjs"); const combinators_1 = require("parjs/combinators"); const error_1 = require("../error"); const parser_1 = require("./parser"); class ResourcesMap { _map; constructor(_map) { this._map = _map; } toObject() { const kubernetesForm = this._map.map((value, key) => { const result = {}; if (value.request) { result.requests = { [key]: value.request.str }; } if (value.limit) { result.limits = { [key]: value.limit.str }; } if (!(0, lodash_1.isEmpty)(result)) { return result; } return undefined; }); return (0, lodash_1.merge)({}, ...kubernetesForm.values()); } } exports.ResourcesMap = ResourcesMap; class ResourcesSpec { _unitParsers; _reqLimitParsers; constructor(_unitMap) { const questionMarkParser = (0, parjs_1.string)("?").pipe((0, combinators_1.mapConst)(undefined)); this._unitParsers = _unitMap.map(parser => parser.parser.pipe((0, combinators_1.or)(questionMarkParser))); this._reqLimitParsers = _unitMap.map(parser => (0, parser_1.createResourceParser)(parser)); } _parseUnitValue(resource, input) { const pUnitValue = this._unitParsers.get(input); if (!pUnitValue) { throw new error_1.InstrumentsError(`No parser found for ${input}`); } return pUnitValue.parse(input).value; } _parseReqLimit(resource, input) { const pReqLimit = this._reqLimitParsers.get(resource); if (!pReqLimit) { throw new error_1.InstrumentsError(`No parser found for ${resource}`); } return pReqLimit.parse(input).value; } __INPUT__; parse(input) { const allKeys = (0, immutable_1.Set)([...Object.keys(input), ...this._unitParsers.keys()]).toMap(); const map = allKeys.map((_, key) => { const value = input[key]; const pUnitValue = this._unitParsers.get(key); if (!pUnitValue) { throw new error_1.InstrumentsError(`No parser found for ${String(key)}`); } if (!value) { throw new error_1.InstrumentsError(`No value found for ${String(key)}`); } if (Array.isArray(value)) { const [req, limit] = value.map(v => { return pUnitValue.parse(v).value; }); return { request: req, limit: limit }; } else if (typeof value === "string") { return this._parseReqLimit(key, value); } else { return { request: this._parseUnitValue(key, value.request), limit: this._parseUnitValue(key, value.limit) }; } }); return new ResourcesMap(map); } static make(unitMap) { return new ResourcesSpec((0, immutable_1.Map)(unitMap)); } } exports.ResourcesSpec = ResourcesSpec; //# sourceMappingURL=objects.js.map