git » hoplite.git » commit d51a655

add paths

author Alan Dipert
2021-06-02 16:07:07 UTC
committer Alan Dipert
2021-06-02 16:07:07 UTC
parent fbbf782f2f2c36a85056b9ae35ea6366f3737136

add paths

datalog.mjs +13 -1

diff --git a/datalog.mjs b/datalog.mjs
index 9b53075..19fe08d 100644
--- a/datalog.mjs
+++ b/datalog.mjs
@@ -213,7 +213,19 @@ function partialQuery(q) {
   return (...vals) => query(q, ...vals);
 }
 
-export { ANY, _, query, TupleSet, partialQuery };
+function paths(x, parent = []) {
+  if (x instanceof Array) {
+    return x.flatMap((y, i) => paths(y, [...parent, i]));
+  } else if (x instanceof Object) {
+    return Object
+      .entries(x)
+      .flatMap(([k, v]) => paths(v, [...parent, k]));
+  } else {
+    return [[...parent, x]];
+  }
+}
+
+export { ANY, _, query, TupleSet, partialQuery, paths };
 // let db = new JSONSet([
 //   ["sally", "age", 21],
 //   ["fred", "age", 42],