UNPKG

confinode

Version:

Node application configuration reader

60 lines 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ConfinodeError_1 = require("../../ConfinodeError"); const ConfinodeResult_1 = require("../../ConfinodeResult"); const messages_1 = require("../../messages"); const utils_1 = require("../../utils"); const ConfigDescription_1 = require("../ConfigDescription"); /** * Description of an array. */ class ArrayDescription { /** * Create the array description. * * @param description - The description to replicate for each array item. */ constructor(description) { this.description = description; } parse(data, context) { const { fileName, keyName, parent, final } = context; if (Array.isArray(data)) { return this.mergeArray(data, context); } else if (data !== undefined && data !== null) { throw new ConfinodeError_1.default('expected', keyName, fileName, new messages_1.Message(messages_1.Level.Error, 'expectedArray')); } else if (data === undefined && parent) { return parent; } else if (!final) { return undefined; } else { throw new ConfinodeError_1.default('missingMandatory', keyName); } } /** * Parse and merge the array content. The default behavior is to concatenate the child nodes to the parsed * parent ones. * * @param data - The array to parse and merge. * @param context - The parsing context. * @returns The parsed and merged array. */ mergeArray(data, context) { var _a, _b; ConfigDescription_1.assertHasParentResult(context); const parent = (_b = (_a = context.parent) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : []; return new ConfinodeResult_1.ParentResult(parent.concat(data .map((item, index) => ConfigDescription_1.asDescription(this.description).parse(item, { ...context, keyName: `${context.keyName}[${index}]`, parent: undefined, })) .filter(utils_1.isExisting))); } } exports.default = ArrayDescription; //# sourceMappingURL=ArrayDescription.js.map