confinode
Version:
Node application configuration reader
52 lines • 2.12 kB
JavaScript
;
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 an object literal.
*/
class LiteralDescription {
/**
* Create a literal configuration description.
*
* @param description - The description of the object literal.
*/
constructor(description) {
this.description = description;
}
parse(data, context) {
var _a, _b;
const { fileName, keyName, final } = context;
if ((data !== null && typeof data === 'object') || data === undefined) {
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(Object.entries(this.description).reduce((result, [key, description]) => {
const parsed = ConfigDescription_1.asDescription(description).parse(safeData[key], {
keyName: keyPrefix + key,
fileName,
parent: parent[key],
final,
});
if (parsed) {
result[key] = parsed;
}
return result;
}, {}));
}
else if (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 = LiteralDescription;
//# sourceMappingURL=LiteralDescription.js.map