UNPKG

@trademe/ensure

Version:

38 lines (37 loc) 3.49 kB
/** * @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==