fcr-core
Version:
Core APIs for building online scenes
74 lines (72 loc) • 1.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.iterateSet = exports.iterateMap = exports.convertToStructure = void 0;
require("core-js/modules/es.array.push.js");
require("core-js/modules/web.dom-collections.iterator.js");
const iterateMap = (map, processors) => {
const onFilter = (processors === null || processors === void 0 ? void 0 : processors.onFilter) || (() => true);
const {
onMap,
onReduce
} = processors || {};
const list = [];
let prev = undefined;
for (const [k, v] of map.entries()) {
if (onFilter(k, v)) {
if (onMap) list.push(onMap(k, v));
if (onReduce) prev = onReduce(prev, k, v);
}
}
return {
list,
prev
};
};
exports.iterateMap = iterateMap;
const iterateSet = (map, processors) => {
const onFilter = (processors === null || processors === void 0 ? void 0 : processors.onFilter) || (() => true);
const {
onMap,
onReduce
} = processors || {};
const list = [];
let prev = undefined;
for (const item of map.values()) {
if (onFilter(item)) {
if (onMap) list.push(onMap(item));
if (onReduce) prev = onReduce(prev, item);
}
}
return {
list,
prev
};
};
/**
* expand a key-value map to a structure
* .e.g. { 'a.b.c': 1 } => { a: { b: { c: 1 } } }
* @param kvMap
*/
exports.iterateSet = iterateSet;
const convertToStructure = kvMap => {
const result = {};
for (const key in kvMap) {
const keys = key.split('.');
let temp = result;
for (let i = 0; i < keys.length; i++) {
const k = keys[i];
if (i === keys.length - 1) {
temp[k] = kvMap[key];
} else {
if (!temp[k]) {
temp[k] = {};
}
temp = temp[k];
}
}
}
return result;
};
exports.convertToStructure = convertToStructure;