@beenotung/tslib
Version:
utils library in Typescript
133 lines • 3.56 kB
JavaScript
;
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