@beenotung/tslib
Version:
utils library in Typescript
74 lines (73 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.map_any = exports.map_nodeList = exports.map_map = exports.map_set = exports.map_object = exports.map_array = exports.maps = void 0;
const type_1 = require("../type");
var maps;
(function (maps) {
function array(xs, f) {
return xs.map(f);
}
maps.array = array;
function object(x, f) {
const y = new x.constructor();
// eslint-disable-next-line guard-for-in
for (const k in x) {
y[k] = f(x[k], k, x);
}
return y;
}
maps.object = object;
function set(xs, f) {
const ys = new Set();
xs.forEach(x => ys.add(f(x, xs)));
return ys;
}
maps.set = set;
function map(xs, valueMapper, keyMapper) {
const ys = new Map();
xs.forEach((av, ak) => {
const bv = valueMapper(av, ak, xs);
const bk = keyMapper ? keyMapper(av, ak, xs) : ak;
ys.set(bk, bv);
});
return ys;
}
maps.map = map;
function nodeList(xs, f) {
const ys = new Array(xs.length);
for (let i = 0; i < xs.length; i++) {
ys[i] = f(xs.item(i), i, xs);
}
return ys;
}
maps.nodeList = nodeList;
function any(o, f) {
if (Array.isArray(o)) {
return array(o, f);
}
// skip this data type if in node.js
if ((typeof NodeList !== 'undefined' && o instanceof NodeList) ||
(typeof HTMLCollection !== 'undefined' && o instanceof HTMLCollection)) {
return nodeList(o, f);
}
switch ((0, type_1.getObjectType)(o)) {
case 'Array':
return array(o, f);
case 'Set':
return set(o, f);
case 'Map':
return map(o, f);
case 'Object':
return object(o, f);
default:
return f(o);
}
}
maps.any = any;
})(maps || (exports.maps = maps = {}));
exports.map_array = maps.array;
exports.map_object = maps.object;
exports.map_set = maps.set;
exports.map_map = maps.map;
exports.map_nodeList = maps.nodeList;
exports.map_any = maps.any;