@trademe/ensure
Version:
37 lines (36 loc) • 3.25 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { EnsureError } from '../../ensure-error';
/**
* @template T
* @param {?} enumValues
* @return {?}
*/
export function isEnum(enumValues) {
// This functions is explicitly *not* using the `=>` syntax so that
// the `this` values is bound to the instance being checked.
return function (value, key) {
const /** @type {?} */ enumValue = enumValues[value];
if (enumValue == null) {
throw new EnsureError(`
"${value}" is not a valid value for '${key}'. You can use one of the following:
${getValues(enumValues)}
`);
}
return typeof enumValue === 'number' ? enumValue : value;
};
}
/**
* @template T
* @param {?} enumT
* @return {?}
*/
function getValues(enumT) {
return Object.keys(enumT)
.filter(key => isNaN(+key))
.map(key => `"${key}"`)
.join(',\n ');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0cmFkZW1lL2Vuc3VyZS8iLCJzb3VyY2VzIjpbInZhbHVlL3NldHRlci9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQUVqRCxNQUFNLGlCQUFxQixVQUFhOzs7SUFHcEMsTUFBTSxDQUFDLFVBQVUsS0FBVSxFQUFFLEdBQVc7UUFDcEMsdUJBQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLElBQUksV0FBVyxDQUFDO21CQUNmLEtBQUssK0JBQStCLEdBQUc7c0JBQ3BDLFNBQVMsQ0FBSSxVQUFVLENBQUM7YUFDakMsQ0FBQyxDQUFDO1NBQ047UUFDRCxNQUFNLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUM1RCxDQUFDO0NBQ0w7Ozs7OztBQUVELG1CQUF1QixLQUFRO0lBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1NBQ3RCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0NBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRGVwZW5kZW5jaWVzOlxuaW1wb3J0IHsgRW5zdXJlRXJyb3IgfSBmcm9tICcuLi8uLi9lbnN1cmUtZXJyb3InO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtPFQ+IChlbnVtVmFsdWVzOiBUKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbnMgaXMgZXhwbGljaXRseSAqbm90KiB1c2luZyB0aGUgYD0+YCBzeW50YXggc28gdGhhdFxuICAgIC8vIHRoZSBgdGhpc2AgdmFsdWVzIGlzIGJvdW5kIHRvIHRoZSBpbnN0YW5jZSBiZWluZyBjaGVja2VkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWU6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSBlbnVtVmFsdWVzW3ZhbHVlXTtcbiAgICAgICAgaWYgKGVudW1WYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRW5zdXJlRXJyb3IoYFxuICAgICAgICAgICAgICAgIFwiJHt2YWx1ZX1cIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgJyR7a2V5fScuIFlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAgICAgICAgICAgICAgICAke2dldFZhbHVlczxUPihlbnVtVmFsdWVzKX1cbiAgICAgICAgICAgIGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgZW51bVZhbHVlID09PSAnbnVtYmVyJyA/IGVudW1WYWx1ZSA6IHZhbHVlO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlczxUPiAoZW51bVQ6IFQpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVClcbiAgICAuZmlsdGVyKGtleSA9PiBpc05hTigra2V5KSlcbiAgICAubWFwKGtleSA9PiBgXCIke2tleX1cImApXG4gICAgLmpvaW4oJyxcXG4gICAgICAgICAgICAgICAgICAgICcpO1xufVxuIl19