UNPKG

@beenotung/tslib

Version:
133 lines 3.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.enum_only_string = exports.enum_set_string = exports.enum_not_equals = exports.enum_is_in_range = exports.enum_is_last = exports.enum_is_last_s = exports.enum_is_last_i = exports.enum_last_s = exports.enum_last_i = exports.enum_values = exports.enum_indices = exports.enum_keys = exports.enum_next_s = exports.enum_next_i = exports.enum_s2i = exports.enum_i2s = void 0; const strict_type_1 = require("./strict-type"); /* tslint:enable:ban-types */ function is_enum_key(x) { /* tslint:disable */ return x != +x; /* tslint:enable */ } /** * for the sake of implicit any in object index * */ function enum_i2s(e, i) { const res = e[i]; if (res === void 0) { throw new TypeError(`Invalid index '${i}' in enum`); } return strict_type_1.ensureString(res); } exports.enum_i2s = enum_i2s; function enum_s2i(e, s) { const res = e[s]; if (res === void 0) { throw new TypeError(`Invalid key '${s}' in enum`); } return strict_type_1.ensureNumber(res); } exports.enum_s2i = enum_s2i; function enum_next_i(e, i) { const res = e[e[i + 1]]; if (res === void 0) { throw new TypeError(`Enum of index '${i}' don't have next value`); } return res; } exports.enum_next_i = enum_next_i; function enum_next_s(e, s) { const res = e[e[s] + 1]; if (res === void 0) { throw new TypeError(`Enum of key '${s}' don't have next value`); } return res; } exports.enum_next_s = enum_next_s; function enum_keys(e) { return Object.keys(e).filter(is_enum_key); } exports.enum_keys = enum_keys; /** * numeric values * */ function enum_indices(e) { const n = enum_last_i(e) + 1; const res = new Array(n); for (let i = 0; i < n; i++) { res[i] = i; } return res; } exports.enum_indices = enum_indices; /** * numeric or string values * if original enum -> numeric values; * stringified enum -> string values * */ function enum_values(e) { return enum_keys(e).map(s => e[s]); } exports.enum_values = enum_values; function enum_last_i(e) { return e[enum_last_s(e)]; } exports.enum_last_i = enum_last_i; function enum_last_s(e) { const ks = Object.keys(e); return ks[ks.length - 1]; } exports.enum_last_s = enum_last_s; function enum_is_last_i(e, i) { return i === enum_last_i(e); } exports.enum_is_last_i = enum_is_last_i; function enum_is_last_s(e, s) { return s === enum_last_s(e); } exports.enum_is_last_s = enum_is_last_s; function enum_is_last(e, v) { if (typeof v === 'number') { return enum_is_last_i(e, v); } else { return enum_is_last_s(e, v); } } exports.enum_is_last = enum_is_last; function enum_is_in_range(e, v) { return v in e; } exports.enum_is_in_range = enum_is_in_range; function enum_not_equals(e1, e2) { return e1 !== e2; } exports.enum_not_equals = enum_not_equals; /** * inplace update * * @return original (modified) enum * */ function enum_set_string(e) { Object.keys(e) .filter(is_enum_key) .forEach(s => (e[s] = e[e[s]])); return e; } exports.enum_set_string = enum_set_string; /** * inplace update * */ function enum_only_string(e) { Object.keys(e).forEach(i => { /* tslint:disable */ if (i == +i) { /* tslint:enable */ const s = e[i]; e[s] = s; delete e[i]; } }); return e; } exports.enum_only_string = enum_only_string; //# sourceMappingURL=enum.js.map