forked from sashin/sashinexists
38 lines
870 B
JavaScript
38 lines
870 B
JavaScript
import { Tree } from "../internal.js";
|
|
|
|
/**
|
|
* Reverse the order of keys at all levels of the tree.
|
|
*
|
|
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
* @typedef {import("../../index.ts").Treelike} Treelike
|
|
*
|
|
* @param {Treelike} treelike
|
|
* @returns {AsyncTree}
|
|
*/
|
|
export default function deepReverse(treelike) {
|
|
if (!treelike) {
|
|
const error = new TypeError(
|
|
`deepReverse: The tree to reverse isn't defined.`
|
|
);
|
|
/** @type {any} */ (error).position = 0;
|
|
throw error;
|
|
}
|
|
|
|
const tree = Tree.from(treelike, { deep: true });
|
|
return {
|
|
async get(key) {
|
|
let value = await tree.get(key);
|
|
if (Tree.isAsyncTree(value)) {
|
|
value = deepReverse(value);
|
|
}
|
|
return value;
|
|
},
|
|
|
|
async keys() {
|
|
const keys = Array.from(await tree.keys());
|
|
keys.reverse();
|
|
return keys;
|
|
},
|
|
};
|
|
}
|