UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

79 lines 12.6 kB
/** * @packageDocumentation * @module utils */ // reduceTree :: String -> (a -> Tree -> [Tree] -> [Number] -> a) -> a -> [Tree] -> a export const reduceTrees = (subtreeKey) => (fn) => (seed) => (trees) => { const reducer = (nodes, parents, path, acc) => nodes.reduce((prev, curr, index) => { const result = fn(prev, curr, parents, [...path, index]); return curr[subtreeKey] ? reducer(curr[subtreeKey], [...parents, curr], [...path, index], result) : result; }, acc); return reducer(trees, [], [], seed); }; // mapTree :: String -> (Tree -> [Tree] -> [Number] -> Tree) -> [Tree] -> [Tree] export const mapTrees = (subtreeKey) => (fn) => (trees) => { const mapper = (acc, curr, parents, path) => { const mapped = fn(curr, parents, path); return setNode(subtreeKey, path, acc, mapped); }; return reduceTrees(subtreeKey)(mapper)([])(trees); }; export const filterTrees = (subtreeKey) => (fn) => (trees) => { const filter = (nodes, parents, path) => nodes ?.filter(node => fn(node, parents, path)) .map((node, index) => node[subtreeKey] ? { ...node, [subtreeKey]: filter(node[subtreeKey], [...parents, node], [...path, index]), } : node); return filter(trees, [], []); }; export const findPath = (subtreeKey) => (fn) => (trees) => { const endPoint = []; const finder = (nodes, parents, path) => { const result = nodes.find((node, index) => { if (fn(node, parents, path)) { return true; } if (node[subtreeKey]) { return finder(node[subtreeKey], [...parents, node], [...path, index]); } return false; }); if (result) { endPoint.unshift(result); } return !!result; }; finder(trees, [], []); return endPoint; }; export const firstPath = (subtreeKey) => (trees) => { const head = trees[0]; if (head) { return head.children ? [head, ...firstPath(subtreeKey)(head[subtreeKey])] : [head]; } return []; }; export function setNode(subtreeKey, path, source, target) { const iterator = ([head, ...tail], trees) => { if (tail.length > 0) { const point = trees[head] || {}; const tree = { ...point, [subtreeKey]: iterator(tail, (point[subtreeKey] || [])), }; trees[head] = tree; return trees; } trees[head] = target; return trees; }; return iterator(path, source); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL3V0aWxzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FDdEIsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FDdkIsQ0FBb0IsRUFBcUIsRUFBRSxFQUFFLENBQzdDLENBQUMsSUFBTyxFQUFFLEVBQUUsQ0FDWixDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQ2IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFVLEVBQUUsT0FBWSxFQUFFLElBQWMsRUFBRSxHQUFNLEVBQUssRUFBRSxDQUN0RSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNyQixDQUFDLENBQUMsT0FBTyxDQUNMLElBQUksQ0FBQyxVQUFVLENBQVEsRUFDdkIsQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFDbEIsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsRUFDaEIsTUFBTSxDQUNQO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNiLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVKLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQ25CLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQ3ZC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WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSB1dGlsc1xuICovXG5cbi8vIHJlZHVjZVRyZWUgOjogU3RyaW5nIC0+IChhIC0+IFRyZWUgLT4gW1RyZWVdIC0+IFtOdW1iZXJdIC0+IGEpIC0+IGEgLT4gW1RyZWVdIC0+IGFcbmV4cG9ydCBjb25zdCByZWR1Y2VUcmVlcyA9XG4gIChzdWJ0cmVlS2V5OiBzdHJpbmcpID0+XG4gIDxUIGV4dGVuZHMgVHJlZSwgUj4oZm46IFRyZWVSZWR1Y2VyPFQsIFI+KSA9PlxuICAoc2VlZDogUikgPT5cbiAgKHRyZWVzOiBUW10pID0+IHtcbiAgICBjb25zdCByZWR1Y2VyID0gKG5vZGVzOiBUW10sIHBhcmVudHM6IFRbXSwgcGF0aDogbnVtYmVyW10sIGFjYzogUik6IFIgPT5cbiAgICAgIG5vZGVzLnJlZHVjZSgocHJldiwgY3VyciwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4ocHJldiwgY3VyciwgcGFyZW50cywgWy4uLnBhdGgsIGluZGV4XSk7XG4gICAgICAgIHJldHVybiBjdXJyW3N1YnRyZWVLZXldXG4gICAgICAgICAgPyByZWR1Y2VyKFxuICAgICAgICAgICAgICBjdXJyW3N1YnRyZWVLZXldIGFzIFRbXSxcbiAgICAgICAgICAgICAgWy4uLnBhcmVudHMsIGN1cnJdLFxuICAgICAgICAgICAgICBbLi4ucGF0aCwgaW5kZXhdLFxuICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiByZXN1bHQ7XG4gICAgICB9LCBhY2MpO1xuICAgIHJldHVybiByZWR1Y2VyKHRyZWVzLCBbXSwgW10sIHNlZWQpO1xuICB9O1xuXG4vLyBtYXBUcmVlIDo6IFN0cmluZyAtPiAoVHJlZSAtPiBbVHJlZV0gLT4gW051bWJlcl0gLT4gVHJlZSkgLT4gW1RyZWVdIC0+IFtUcmVlXVxuZXhwb3J0IGNvbnN0IG1hcFRyZWVzID1cbiAgKHN1YnRyZWVLZXk6IHN0cmluZykgPT5cbiAgPFQgZXh0ZW5kcyBUcmVlLCBSIGV4dGVuZHMgVHJlZT4oZm46IFRyZWVNYXBwZXI8VCwgUj4pID0+XG4gICh0cmVlczogVFtdKSA9PiB7XG4gICAgY29uc3QgbWFwcGVyID0gKGFjYzogUltdLCBjdXJyOiBULCBwYXJlbnRzOiBUW10sIHBhdGg6IG51bWJlcltdKSA9PiB7XG4gICAgICBjb25zdCBtYXBwZWQgPSBmbihjdXJyLCBwYXJlbnRzLCBwYXRoKTtcbiAgICAgIHJldHVybiBzZXROb2RlPFI+KHN1YnRyZWVLZXksIHBhdGgsIGFjYywgbWFwcGVkKTtcbiAgICB9O1xuICAgIHJldHVybiByZWR1Y2VUcmVlcyhzdWJ0cmVlS2V5KTxULCBSW10+KG1hcHBlcikoW10pKHRyZWVzKTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlclRyZWVzID1cbiAgKHN1YnRyZWVLZXk6IHN0cmluZykgPT5cbiAgPFQgZXh0ZW5kcyBUcmVlPihmbjogVHJlZUZpbHRlcjxUPikgPT5cbiAgKHRyZWVzOiBUW10pID0+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSAobm9kZXM6IFRbXSwgcGFyZW50czogVFtdLCBwYXRoOiBudW1iZXJbXSk6IFRbXSA9PlxuICAgICAgbm9kZXNcbiAgICAgICAgPy5maWx0ZXIobm9kZSA9PiBmbihub2RlLCBwYXJlbnRzLCBwYXRoKSlcbiAgICAgICAgLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgICAgICAgbm9kZVtzdWJ0cmVlS2V5XVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgICAgICBbc3VidHJlZUtleV06IGZpbHRlcihcbiAgICAgICAgICAgICAgICAgIG5vZGVbc3VidHJlZUtleV0gYXMgVFtdLFxuICAgICAgICAgICAgICAgICAgWy4uLnBhcmVudHMsIG5vZGVdLFxuICAgICAgICAgICAgICAgICAgWy4uLnBhdGgsIGluZGV4XSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG5vZGUsXG4gICAgICAgICk7XG4gICAgcmV0dXJuIGZpbHRlcih0cmVlcywgW10sIFtdKTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbmRQYXRoID1cbiAgKHN1YnRyZWVLZXk6IHN0cmluZykgPT5cbiAgPFQgZXh0ZW5kcyBUcmVlPihmbjogVHJlZUZpbHRlcjxUPikgPT5cbiAgKHRyZWVzOiBUW10pID0+IHtcbiAgICBjb25zdCBlbmRQb2ludDogVFtdID0gW107XG4gICAgY29uc3QgZmluZGVyID0gKG5vZGVzOiBUW10sIHBhcmVudHM6IFRbXSwgcGF0aDogbnVtYmVyW10pOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5vZGVzLmZpbmQoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChmbihub2RlLCBwYXJlbnRzLCBwYXRoKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlW3N1YnRyZWVLZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGZpbmRlcihcbiAgICAgICAgICAgIG5vZGVbc3VidHJlZUtleV0gYXMgVFtdLFxuICAgICAgICAgICAgWy4uLnBhcmVudHMsIG5vZGVdLFxuICAgICAgICAgICAgWy4uLnBhdGgsIGluZGV4XSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBlbmRQb2ludC51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfTtcblxuICAgIGZpbmRlcih0cmVlcywgW10sIFtdKTtcbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBmaXJzdFBhdGggPVxuICAoc3VidHJlZUtleTogc3RyaW5nKSA9PlxuICA8VCBleHRlbmRzIFRyZWU+KHRyZWVzOiBUW10pOiBUW10gPT4ge1xuICAgIGNvbnN0IGhlYWQgPSB0cmVlc1swXTtcbiAgICBpZiAoaGVhZCkge1xuICAgICAgcmV0dXJuIGhlYWQuY2hpbGRyZW5cbiAgICAgICAgPyBbaGVhZCwgLi4uZmlyc3RQYXRoKHN1YnRyZWVLZXkpPFQ+KGhlYWRbc3VidHJlZUtleV0gYXMgVFtdKV1cbiAgICAgICAgOiBbaGVhZF07XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldE5vZGU8VCBleHRlbmRzIFRyZWU+KFxuICBzdWJ0cmVlS2V5OiBzdHJpbmcsXG4gIHBhdGg6IG51bWJlcltdLFxuICBzb3VyY2U6IFRbXSxcbiAgdGFyZ2V0OiBULFxuKSB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gKFtoZWFkLCAuLi50YWlsXTogbnVtYmVyW10sIHRyZWVzOiBUW10pID0+IHtcbiAgICBpZiAodGFpbC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwb2ludCA9IHRyZWVzW2hlYWRdIHx8ICh7fSBhcyBUKTtcbiAgICAgIGNvbnN0IHRyZWUgPSB7XG4gICAgICAgIC4uLnBvaW50LFxuICAgICAgICBbc3VidHJlZUtleV06IGl0ZXJhdG9yKHRhaWwsIChwb2ludFtzdWJ0cmVlS2V5XSB8fCBbXSkgYXMgVFtdKSxcbiAgICAgIH07XG4gICAgICB0cmVlc1toZWFkXSA9IHRyZWU7XG4gICAgICByZXR1cm4gdHJlZXM7XG4gICAgfVxuICAgIHRyZWVzW2hlYWRdID0gdGFyZ2V0O1xuICAgIHJldHVybiB0cmVlcztcbiAgfTtcbiAgcmV0dXJuIGl0ZXJhdG9yKHBhdGgsIHNvdXJjZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZSB7XG4gIFtrZXk6IHN0cmluZ106IFRyZWVbXTtcbn1cblxuZXhwb3J0IHR5cGUgVHJlZVJlZHVjZXI8VCBleHRlbmRzIFRyZWUsIFI+ID0gKFxuICBhY2M6IFIsXG4gIGN1cnJlbnROb2RlOiBULFxuICBwYXJlbnRzOiBUW10sXG4gIHBhdGg6IG51bWJlcltdLFxuKSA9PiBSO1xuXG5leHBvcnQgdHlwZSBUcmVlTWFwcGVyPFQgZXh0ZW5kcyBUcmVlLCBSIGV4dGVuZHMgVHJlZT4gPSAoXG4gIHRyZWU6IFQsXG4gIHBhcmVudHM6IFRbXSxcbiAgcGF0aDogbnVtYmVyW10sXG4pID0+IFI7XG5cbmV4cG9ydCB0eXBlIFRyZWVGaWx0ZXI8VCBleHRlbmRzIFRyZWU+ID0gKFxuICB0cmVlOiBULFxuICBwYXJlbnRzOiBUW10sXG4gIHBhdGg6IG51bWJlcltdLFxuKSA9PiBib29sZWFuO1xuIl19