UNPKG

fcr-core

Version:

Core APIs for building online scenes

74 lines (72 loc) 1.83 kB
"use strict"; 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;