@convex-dev/aggregate
Version:
[](https://badge.fury.io/js/@convex-dev%2Faggregate)
84 lines • 2.53 kB
JavaScript
import { v } from "convex/values";
import { query } from "./_generated/server.js";
import { getTree, p } from "./btree.js";
export const display = query({
args: {},
handler: async (ctx) => {
const tree = await getTree(ctx.db);
if (!tree) {
return "empty";
}
return await displayNode(ctx.db, tree.root);
},
});
async function displayNode(db, node, depth = 0) {
const n = (await db.get(node));
for (let i = 0; i < n.items.length; i++) {
if (n.subtrees.length > 0) {
await displayNode(db, n.subtrees[i], depth + 1);
}
console.log(" ".repeat(depth) + p(n.items[i].k));
}
if (n.subtrees.length > 0) {
await displayNode(db, n.subtrees[n.subtrees.length - 1], depth + 1);
}
}
export const dump = query({
args: {},
returns: v.string(),
handler: async (ctx) => {
return await dumpTree(ctx.db);
},
});
export async function dumpTree(db) {
const t = (await getTree(db));
return dumpNode(db, t.root);
}
/// Prints keys in-order, with brackets for each node.
async function dumpNode(db, node) {
const n = (await db.get(node));
let s = "[";
if (n.subtrees.length === 0) {
s += n.items.map((i) => i.k).map(p).join(", ");
}
else {
const subtrees = await Promise.all(n.subtrees.map((subtree) => dumpNode(db, subtree)));
for (let i = 0; i < n.items.length; i++) {
s += `${subtrees[i]}, ${p(n.items[i].k)}, `;
}
s += subtrees[n.items.length];
}
s += "]";
return s;
}
export const inspectNode = query({
args: { node: v.optional(v.string()) },
returns: v.null(),
handler: async (ctx, args) => {
const tree = await getTree(ctx.db);
if (!tree) {
console.log("no tree");
return;
}
let n = await ctx.db.get(tree.root);
if (args.node) {
n = await ctx.db.get(args.node);
}
if (!n) {
console.log("no node");
return;
}
console.log('btreeNode', n._id);
console.log('aggregate', n.aggregate);
for (let i = 0; i < n.items.length; i++) {
if (n.subtrees.length > 0) {
console.log('subtree', n.subtrees[i]);
}
console.log('item', n.items[i]);
}
if (n.subtrees.length > 0) {
console.log('subtree', n.subtrees[n.subtrees.length - 1]);
}
},
});
//# sourceMappingURL=inspect.js.map