confinode
Version:
Node application configuration reader
45 lines • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ConfinodeError_1 = require("../../ConfinodeError");
const messages_1 = require("../../messages");
const ConfigDescription_1 = require("../ConfigDescription");
/**
* Description of a choice item.
*/
class ChoiceDescription extends ConfigDescription_1.LeafItemDescription {
/**
* Create the description of a choice item.
*
* @param choices - The available choices.
* @param defaultValue - An optional default value.
*/
constructor(choices, defaultValue) {
super(defaultValue);
this.choices = choices;
}
parseValue(value, fileName, keyName) {
if (this.choices.includes(value)) {
return value;
}
else {
let parsedValue;
if (typeof value === 'boolean' || typeof value === 'number') {
// Try as string
parsedValue = String(value);
if (this.choices.includes(parsedValue)) {
return parsedValue;
}
}
if (typeof value === 'string' && value !== '') {
// Try as number
parsedValue = Number(value);
if (!isNaN(parsedValue) && this.choices.includes(parsedValue)) {
return parsedValue;
}
}
}
throw new ConfinodeError_1.default('expected', keyName, fileName, new messages_1.Message(messages_1.Level.Error, 'expectedChoice', this.choices));
}
}
exports.default = ChoiceDescription;
//# sourceMappingURL=ChoiceDescription.js.map