confinode
Version:
Node application configuration reader
40 lines • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ConfinodeError_1 = require("../../ConfinodeError");
const ConfigDescription_1 = require("../ConfigDescription");
/**
* Description of a conditional configuration.
*/
class ConditionalDescription {
/**
* Create a conditional configuration description.
*
* @param predicate - The predicate to test the value against.
* @param ifDescription - The description to use if predicate is true.
* @param elseDescription - The description to use if predicate is false.
*/
constructor(predicate, ifDescription, elseDescription) {
this.predicate = predicate;
this.ifDescription = ifDescription;
this.elseDescription = elseDescription;
}
parse(data, context) {
const { parent, ...inheritableContext } = context;
if (data !== undefined && data !== null) {
return this.predicate(data)
? ConfigDescription_1.asDescription(this.ifDescription).parse(data, inheritableContext)
: ConfigDescription_1.asDescription(this.elseDescription).parse(data, inheritableContext);
}
else if (data === undefined && parent) {
return parent;
}
else if (!context.final) {
return undefined;
}
else {
throw new ConfinodeError_1.default('missingMandatory', context.keyName);
}
}
}
exports.default = ConditionalDescription;
//# sourceMappingURL=ConditionalDescription.js.map