UNPKG

confinode

Version:

Node application configuration reader

56 lines 2.31 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 ConfigDescription_1 = require("../ConfigDescription"); /** * Description of a dictionary. */ class DictionaryDescription { /** * Create the dictionary configuration description. * * @param description - The description of a dictionary element. */ constructor(description) { this.description = description; } parse(data, context) { var _a, _b; const { fileName, keyName, final } = context; if ((data !== null && typeof data === 'object') || (data === undefined && context.parent)) { const keyPrefix = keyName + (keyName.length > 0 ? '.' : ''); const safeData = data !== null && data !== void 0 ? data : {}; 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, ...Object.entries(safeData).reduce((result, [key, value]) => { const parsed = ConfigDescription_1.asDescription(this.description).parse(value, { keyName: keyPrefix + key, fileName, parent: parent[key], final, }); /* istanbul ignore else */ if (parsed) { result[key] = parsed; } return result; }, {}), }); } else if (data !== undefined && data !== null) { throw new ConfinodeError_1.default('expected', keyName, fileName, new messages_1.Message(messages_1.Level.Error, 'expectedObject')); } else if (!final) { return undefined; } else { throw new ConfinodeError_1.default('missingMandatory', keyName); } } } exports.default = DictionaryDescription; //# sourceMappingURL=DictionaryDescription.js.map