@k8ts/instruments
Version:
A collection of utilities and core components for k8ts.
97 lines • 3.47 kB
JavaScript
;
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