@trademe/ensure
Version:
35 lines (34 loc) • 3.53 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(function (value, key) {
var /** @type {?} */ enumValue = enumValues[value];
if (enumValue == null) {
throw new EnsureError("\n \"" + value + "\" is not a valid value for '" + key + "'. You can use one of the following:\n " + getValues(enumValues) + "\n ");
}
return typeof enumValue === 'number' ? enumValue : value;
});
}
/**
* @template T
* @param {?} enumT
* @return {?}
*/
function getValues(enumT) {
return Object.keys(enumT)
.filter(function (key) { return isNaN(+key); })
.map(function (key) { return "\"" + key + "\""; })
.join(',\n ');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0cmFkZW1lL2Vuc3VyZS8iLCJzb3VyY2VzIjpbImd1YXJkcy9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFFeEMsTUFBTSxpQkFBc0IsVUFBYTs7O0lBR3JDLE1BQU0sQ0FBQyxNQUFNLENBQUksVUFBQyxLQUFVLEVBQUUsR0FBVztRQUNyQyxxQkFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxXQUFXLENBQUMseUJBQ2YsS0FBSyxxQ0FBK0IsR0FBRyxrRUFDcEMsU0FBUyxDQUFJLFVBQVUsQ0FBQyxtQkFDakMsQ0FBQyxDQUFDO1NBQ047UUFDRCxNQUFNLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUM1RCxDQUFDLENBQUM7Q0FDTjs7Ozs7O0FBRUQsbUJBQXVCLEtBQVE7SUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3hCLE1BQU0sQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFYLENBQVcsQ0FBQztTQUMxQixHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxPQUFJLEdBQUcsT0FBRyxFQUFWLENBQVUsQ0FBQztTQUN0QixJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztDQUNwQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIERlcGVuZGVuY2llczpcbmltcG9ydCB7IEVuc3VyZUVycm9yIH0gZnJvbSAnLi4vZW5zdXJlLWVycm9yJztcbmltcG9ydCB7IGVuc3VyZSB9IGZyb20gJy4uL2d1YXJkL2d1YXJkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bSA8VD4gKGVudW1WYWx1ZXM6IFQpOiBGdW5jdGlvbiB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbnMgaXMgZXhwbGljaXRseSAqbm90KiB1c2luZyB0aGUgYD0+YCBzeW50YXggc28gdGhhdFxuICAgIC8vIHRoZSBgdGhpc2AgdmFsdWVzIGlzIGJvdW5kIHRvIHRoZSBpbnN0YW5jZSBiZWluZyBjaGVja2VkLlxuICAgIHJldHVybiBlbnN1cmU8VD4oKHZhbHVlOiBhbnksIGtleTogc3RyaW5nKTogVCA9PiB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IGVudW1WYWx1ZXNbdmFsdWVdO1xuICAgICAgICBpZiAoZW51bVZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFbnN1cmVFcnJvcihgXG4gICAgICAgICAgICAgICAgXCIke3ZhbHVlfVwiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciAnJHtrZXl9Jy4gWW91IGNhbiB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICAgICAgICAgICAgICAgICR7Z2V0VmFsdWVzPFQ+KGVudW1WYWx1ZXMpfVxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlbnVtVmFsdWUgPT09ICdudW1iZXInID8gZW51bVZhbHVlIDogdmFsdWU7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlczxUPiAoZW51bVQ6IFQpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVClcbiAgICAuZmlsdGVyKGtleSA9PiBpc05hTigra2V5KSlcbiAgICAubWFwKGtleSA9PiBgXCIke2tleX1cImApXG4gICAgLmpvaW4oJyxcXG4gICAgICAgICAgICAgICAgICAgICcpO1xufVxuIl19