@trademe/ensure
Version:
38 lines (37 loc) • 3.49 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { EnsureError } from '../ensure-error';
import { ensure } from '../guard/guard';
/**
* @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 ensure((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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0cmFkZW1lL2Vuc3VyZS8iLCJzb3VyY2VzIjpbImd1YXJkcy9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBRXZELE1BQU0saUJBQXNCLFVBQWE7OztJQUdyQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBVSxFQUFFLEdBQVcsRUFBZ0IsRUFBRTtRQUNwRCx1QkFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxXQUFXLENBQUM7bUJBQ2YsS0FBSywrQkFBK0IsR0FBRztzQkFDcEMsU0FBUyxDQUFJLFVBQVUsQ0FBQzthQUNqQyxDQUFDLENBQUM7U0FDTjtRQUNELE1BQU0sQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0tBQzVELENBQUMsQ0FBQztDQUNOOzs7Ozs7QUFFRCxtQkFBdUIsS0FBUTtJQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUN0QixJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztDQUNwQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIERlcGVuZGVuY2llczpcbmltcG9ydCB7IEVuc3VyZUVycm9yIH0gZnJvbSAnLi4vZW5zdXJlLWVycm9yJztcbmltcG9ydCB7IGVuc3VyZSwgR3VhcmRGdW5jdGlvbiB9IGZyb20gJy4uL2d1YXJkL2d1YXJkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bSA8VD4gKGVudW1WYWx1ZXM6IFQpOiBHdWFyZEZ1bmN0aW9uPFQ+IHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9ucyBpcyBleHBsaWNpdGx5ICpub3QqIHVzaW5nIHRoZSBgPT5gIHN5bnRheCBzbyB0aGF0XG4gICAgLy8gdGhlIGB0aGlzYCB2YWx1ZXMgaXMgYm91bmQgdG8gdGhlIGluc3RhbmNlIGJlaW5nIGNoZWNrZWQuXG4gICAgcmV0dXJuIGVuc3VyZSgodmFsdWU6IGFueSwga2V5OiBzdHJpbmcpOiBudW1iZXIgfCBhbnkgPT4ge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSBlbnVtVmFsdWVzW3ZhbHVlXTtcbiAgICAgICAgaWYgKGVudW1WYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRW5zdXJlRXJyb3IoYFxuICAgICAgICAgICAgICAgIFwiJHt2YWx1ZX1cIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgJyR7a2V5fScuIFlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAgICAgICAgICAgICAgICAke2dldFZhbHVlczxUPihlbnVtVmFsdWVzKX1cbiAgICAgICAgICAgIGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgZW51bVZhbHVlID09PSAnbnVtYmVyJyA/IGVudW1WYWx1ZSA6IHZhbHVlO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZXM8VD4gKGVudW1UOiBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bVQpXG4gICAgLmZpbHRlcihrZXkgPT4gaXNOYU4oK2tleSkpXG4gICAgLm1hcChrZXkgPT4gYFwiJHtrZXl9XCJgKVxuICAgIC5qb2luKCcsXFxuICAgICAgICAgICAgICAgICAgICAnKTtcbn1cbiJdfQ==