trellis 3.1.35 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/CHANGELOG.md +23 -5
  2. package/README.md +63 -156
  3. package/bin/trellis.mjs +2 -75
  4. package/dist/{better-sqlite-backend-ahx5p0br.js → better-sqlite-backend-2P4F6AOJ.js} +91 -29
  5. package/dist/boot-middleware-MHLHFCUC.js +9 -0
  6. package/dist/browser/index.d.ts +18 -0
  7. package/dist/browser/index.d.ts.map +1 -0
  8. package/dist/browser/index.js +95 -0
  9. package/dist/{index-53f3b8p8.js → chunk-2W3MHTMG.js} +552 -213
  10. package/dist/chunk-44FFQKQX.js +142 -0
  11. package/dist/chunk-4HYPLFJD.js +150 -0
  12. package/dist/chunk-4XIVMVHC.js +361 -0
  13. package/dist/{index-yp88he8n.js → chunk-6CTA6MCE.js} +88 -64
  14. package/dist/chunk-6GEZ6DN5.js +394 -0
  15. package/dist/chunk-7ZFRVCUE.js +211 -0
  16. package/dist/chunk-CAG4FULI.js +121 -0
  17. package/dist/chunk-FF36CQHZ.js +61 -0
  18. package/dist/{index-h32txmxe.js → chunk-FKQO5A3H.js} +6 -13
  19. package/dist/{index-nq520y6k.js → chunk-FWRS4CSC.js} +46 -32
  20. package/dist/chunk-GFZCJ4EH.js +108 -0
  21. package/dist/chunk-GLM4HGN4.js +55 -0
  22. package/dist/{index-4cdr7x2x.js → chunk-GU374KWZ.js} +182 -111
  23. package/dist/chunk-H6JB3PZ3.js +45 -0
  24. package/dist/chunk-IZX2PLIB.js +1240 -0
  25. package/dist/chunk-J2TXUFCZ.js +289 -0
  26. package/dist/chunk-J3WYZO3Q.js +211 -0
  27. package/dist/{index-xzym9w0m.js → chunk-JA7AIHRK.js} +12 -7
  28. package/dist/chunk-JHHEXEDM.js +162 -0
  29. package/dist/chunk-JUEMDWLU.js +233 -0
  30. package/dist/chunk-KFQGP6VL.js +33 -0
  31. package/dist/chunk-KIJITUZB.js +419 -0
  32. package/dist/{index-4wxa8xz4.js → chunk-KQ4A2D2P.js} +162 -23
  33. package/dist/chunk-KSU2GW22.js +958 -0
  34. package/dist/{index-rv1p47gp.js → chunk-L5N5PR2S.js} +3015 -2480
  35. package/dist/{index-h9e2efx4.js → chunk-LNUIGRDZ.js} +71 -55
  36. package/dist/{index-skhn0agf.js → chunk-MLC5BUYO.js} +19 -20
  37. package/dist/chunk-MPXUVGT3.js +104 -0
  38. package/dist/chunk-N6MYZT4O.js +68 -0
  39. package/dist/chunk-O2AV5WMN.js +48 -0
  40. package/dist/chunk-PZ4XYZ4J.js +143 -0
  41. package/dist/chunk-QB5ISE47.js +419 -0
  42. package/dist/chunk-RSWUFTO2.js +857 -0
  43. package/dist/chunk-S3XLFZ27.js +1095 -0
  44. package/dist/{index-w5wccer3.js → chunk-S6GBJ2ZB.js} +28 -12
  45. package/dist/{index-7pjz3tsy.js → chunk-SGMDTWJJ.js} +57 -15
  46. package/dist/chunk-SPSPV5BC.js +390 -0
  47. package/dist/chunk-TCKXSOBP.js +123 -0
  48. package/dist/chunk-UBGUDMUV.js +59 -0
  49. package/dist/{index-wt8rz4gn.js → chunk-UQISRW6T.js} +97 -26
  50. package/dist/chunk-USEINYUL.js +12 -0
  51. package/dist/{index-bmyt7k8n.js → chunk-UZRUP7QW.js} +12 -4
  52. package/dist/{index-xhcp6xrn.js → chunk-VBYUTRXX.js} +695 -514
  53. package/dist/{index-vkpkfwhq.js → chunk-VDAKEOML.js} +234 -194
  54. package/dist/chunk-WXSWA3MV.js +0 -0
  55. package/dist/{index-n9f2qyh5.js → chunk-X5FLTRUB.js} +55 -33
  56. package/dist/{index-h7zxhhhh.js → chunk-XMQ7G77X.js} +46 -38
  57. package/dist/{index-w7ng765c.js → chunk-YCM7ZYEZ.js} +102 -49
  58. package/dist/cli/deploy-cli.d.ts +18 -0
  59. package/dist/cli/deploy-cli.d.ts.map +1 -0
  60. package/dist/cli/errors.d.ts +6 -0
  61. package/dist/cli/errors.d.ts.map +1 -0
  62. package/dist/cli/examples.d.ts +23 -0
  63. package/dist/cli/examples.d.ts.map +1 -0
  64. package/dist/cli/index.d.ts +1 -1
  65. package/dist/cli/index.d.ts.map +1 -1
  66. package/dist/cli/index.js +2426 -6225
  67. package/dist/client/index.browser.d.ts +29 -0
  68. package/dist/client/index.browser.d.ts.map +1 -0
  69. package/dist/client/index.browser.js +64 -0
  70. package/dist/client/index.d.ts +6 -1
  71. package/dist/client/index.d.ts.map +1 -1
  72. package/dist/client/index.js +41 -21
  73. package/dist/client/live.d.ts +67 -0
  74. package/dist/client/live.d.ts.map +1 -0
  75. package/dist/client/reactive.d.ts +31 -0
  76. package/dist/client/reactive.d.ts.map +1 -0
  77. package/dist/client/sdk.browser.d.ts +104 -0
  78. package/dist/client/sdk.browser.d.ts.map +1 -0
  79. package/dist/client/sdk.browser.js +9 -0
  80. package/dist/client/sdk.d.ts +26 -2
  81. package/dist/client/sdk.d.ts.map +1 -1
  82. package/dist/client/sdk.js +9 -0
  83. package/dist/client/vcs-client.d.ts +129 -0
  84. package/dist/client/vcs-client.d.ts.map +1 -0
  85. package/dist/cms/index.js +171 -163
  86. package/dist/{config-8hczw0rs.js → config-PFTP67TR.js} +8 -9
  87. package/dist/core/computation/index.d.ts +5 -0
  88. package/dist/core/computation/index.d.ts.map +1 -0
  89. package/dist/core/computation/rollup.d.ts +18 -0
  90. package/dist/core/computation/rollup.d.ts.map +1 -0
  91. package/dist/core/index.d.ts +5 -0
  92. package/dist/core/index.d.ts.map +1 -1
  93. package/dist/core/index.js +171 -104
  94. package/dist/core/kernel/boot-middleware.d.ts +10 -0
  95. package/dist/core/kernel/boot-middleware.d.ts.map +1 -0
  96. package/dist/core/kernel/logic-middleware.d.ts +7 -1
  97. package/dist/core/kernel/logic-middleware.d.ts.map +1 -1
  98. package/dist/core/kernel/trellis-kernel.d.ts.map +1 -1
  99. package/dist/core/ontology/types.d.ts +5 -0
  100. package/dist/core/ontology/types.d.ts.map +1 -1
  101. package/dist/core/persist/better-sqlite-backend.d.ts +9 -2
  102. package/dist/core/persist/better-sqlite-backend.d.ts.map +1 -1
  103. package/dist/core/persist/factory.d.ts +6 -7
  104. package/dist/core/persist/factory.d.ts.map +1 -1
  105. package/dist/core/persist/factory.js +2 -3
  106. package/dist/core/persist/sqljs-backend.js +2 -3
  107. package/dist/db/index.d.ts +4 -1
  108. package/dist/db/index.d.ts.map +1 -1
  109. package/dist/db/index.js +67 -54
  110. package/dist/db/inspector.js +11 -19
  111. package/dist/db/trellis.css +1 -1
  112. package/dist/decisions/index.js +9 -10
  113. package/dist/deploy-LQ7GUGJ5.js +9 -0
  114. package/dist/deploy-YNVG5E4E.js +9 -0
  115. package/dist/deploy-cli-24BCHAXY.js +67 -0
  116. package/dist/deploy-cli-C35HTITO.js +67 -0
  117. package/dist/embeddings/auto-embed.d.ts +2 -2
  118. package/dist/embeddings/auto-embed.d.ts.map +1 -1
  119. package/dist/embeddings/index.js +20 -22
  120. package/dist/embeddings/search.d.ts +2 -1
  121. package/dist/embeddings/search.d.ts.map +1 -1
  122. package/dist/embeddings/store.d.ts +25 -4
  123. package/dist/embeddings/store.d.ts.map +1 -1
  124. package/dist/engine.d.ts +59 -19
  125. package/dist/engine.d.ts.map +1 -1
  126. package/dist/import-UZEKXU3B.js +10 -0
  127. package/dist/index.js +102 -93
  128. package/dist/launch-explorer-HZ4ZJA4X.js +95 -0
  129. package/dist/links/index.js +24 -26
  130. package/dist/mcp/server.d.ts.map +1 -1
  131. package/dist/plugins/agent-memory/index.js +316 -0
  132. package/dist/plugins/idea-garden/index.js +165 -0
  133. package/dist/plugins/plan-approval/index.js +579 -0
  134. package/dist/plugins/proactive-watcher/index.js +194 -0
  135. package/dist/{index-2r4jxwnb.js → query-XYLTJYSA.js} +14 -15
  136. package/dist/react/index.js +39 -70
  137. package/dist/react/realtime.js +11 -0
  138. package/dist/react/schema-hooks.js +87 -0
  139. package/dist/realtime/broadcast-channel-transport.d.ts +43 -0
  140. package/dist/realtime/broadcast-channel-transport.d.ts.map +1 -0
  141. package/dist/realtime/durable-object-relay-transport.d.ts +96 -0
  142. package/dist/realtime/durable-object-relay-transport.d.ts.map +1 -0
  143. package/dist/realtime/index.d.ts +44 -0
  144. package/dist/realtime/index.d.ts.map +1 -0
  145. package/dist/realtime/index.js +40 -0
  146. package/dist/realtime/memory-hub.d.ts +32 -0
  147. package/dist/realtime/memory-hub.d.ts.map +1 -0
  148. package/dist/realtime/persistent-channel.d.ts +105 -0
  149. package/dist/realtime/persistent-channel.d.ts.map +1 -0
  150. package/dist/realtime/presence.d.ts +73 -0
  151. package/dist/realtime/presence.d.ts.map +1 -0
  152. package/dist/realtime/relay-persistence.d.ts +37 -0
  153. package/dist/realtime/relay-persistence.d.ts.map +1 -0
  154. package/dist/realtime/relay-persistence.js +107 -0
  155. package/dist/realtime/relay-server.d.ts +103 -0
  156. package/dist/realtime/relay-server.d.ts.map +1 -0
  157. package/dist/realtime/room.d.ts +98 -0
  158. package/dist/realtime/room.d.ts.map +1 -0
  159. package/dist/realtime/text.d.ts +73 -0
  160. package/dist/realtime/text.d.ts.map +1 -0
  161. package/dist/realtime/types.d.ts +89 -0
  162. package/dist/realtime/types.d.ts.map +1 -0
  163. package/dist/realtime/websocket-relay-transport.d.ts +28 -0
  164. package/dist/realtime/websocket-relay-transport.d.ts.map +1 -0
  165. package/dist/realtime.bundle.js +1100 -0
  166. package/dist/{remote-manager-xvbg4230.js → remote-manager-ODE3T2KR.js} +25 -15
  167. package/dist/scaffold/seed.d.ts.map +1 -1
  168. package/dist/scaffold/write.d.ts +1 -1
  169. package/dist/scaffold/write.d.ts.map +1 -1
  170. package/dist/schema/define.d.ts +137 -0
  171. package/dist/schema/define.d.ts.map +1 -0
  172. package/dist/schema/entity-projection.d.ts +34 -0
  173. package/dist/schema/entity-projection.d.ts.map +1 -0
  174. package/dist/schema/eql.d.ts +46 -0
  175. package/dist/schema/eql.d.ts.map +1 -0
  176. package/dist/schema/index.d.ts +21 -0
  177. package/dist/schema/index.d.ts.map +1 -0
  178. package/dist/schema/index.js +46 -0
  179. package/dist/schema/kernel-resolve.d.ts +21 -0
  180. package/dist/schema/kernel-resolve.d.ts.map +1 -0
  181. package/dist/schema/mutations.d.ts +20 -0
  182. package/dist/schema/mutations.d.ts.map +1 -0
  183. package/dist/schema/resolve.d.ts +21 -0
  184. package/dist/schema/resolve.d.ts.map +1 -0
  185. package/dist/server/deploy-meta.d.ts +25 -0
  186. package/dist/server/deploy-meta.d.ts.map +1 -0
  187. package/dist/server/deploy.d.ts +7 -2
  188. package/dist/server/deploy.d.ts.map +1 -1
  189. package/dist/server/index.d.ts +7 -2
  190. package/dist/server/index.d.ts.map +1 -1
  191. package/dist/server/index.js +100 -58
  192. package/dist/server/node-adapter.js +5 -104
  193. package/dist/server/realtime.d.ts +14 -3
  194. package/dist/server/realtime.d.ts.map +1 -1
  195. package/dist/server/server.d.ts +8 -16
  196. package/dist/server/server.d.ts.map +1 -1
  197. package/dist/server/sprites.d.ts +18 -1
  198. package/dist/server/sprites.d.ts.map +1 -1
  199. package/dist/server/tenancy.d.ts +4 -0
  200. package/dist/server/tenancy.d.ts.map +1 -1
  201. package/dist/server/usage-meter.d.ts +53 -0
  202. package/dist/server/usage-meter.d.ts.map +1 -0
  203. package/dist/server-MB3OPSPI.js +18 -0
  204. package/dist/server-ZVWGLLRF.js +18 -0
  205. package/dist/sprites-KQGTGM6W.js +27 -0
  206. package/dist/{sprites-vc4qbrp1.js → sprites-RU3E4XQN.js} +6 -7
  207. package/dist/svelte/index.d.ts +17 -0
  208. package/dist/svelte/index.d.ts.map +1 -0
  209. package/dist/svelte/index.js +51 -0
  210. package/dist/svelte/schema-hooks.d.ts +45 -0
  211. package/dist/svelte/schema-hooks.d.ts.map +1 -0
  212. package/dist/svelte/schema-hooks.js +71 -0
  213. package/dist/svelte/stores.d.ts +78 -0
  214. package/dist/svelte/stores.d.ts.map +1 -0
  215. package/dist/sync/http-transport.d.ts +3 -3
  216. package/dist/sync/http-transport.d.ts.map +1 -1
  217. package/dist/sync/index.d.ts +15 -1
  218. package/dist/sync/index.d.ts.map +1 -1
  219. package/dist/sync/index.js +617 -0
  220. package/dist/sync/memory-room.d.ts +37 -0
  221. package/dist/sync/memory-room.d.ts.map +1 -0
  222. package/dist/sync/memory-transport.d.ts +3 -3
  223. package/dist/sync/memory-transport.d.ts.map +1 -1
  224. package/dist/sync/partykit-room.d.ts +40 -0
  225. package/dist/sync/partykit-room.d.ts.map +1 -0
  226. package/dist/sync/partykit-transport.d.ts +84 -0
  227. package/dist/sync/partykit-transport.d.ts.map +1 -0
  228. package/dist/sync/room-core.d.ts +53 -0
  229. package/dist/sync/room-core.d.ts.map +1 -0
  230. package/dist/sync/sync-engine.d.ts +40 -2
  231. package/dist/sync/sync-engine.d.ts.map +1 -1
  232. package/dist/sync/sync-room-server.d.ts +39 -0
  233. package/dist/sync/sync-room-server.d.ts.map +1 -0
  234. package/dist/sync/types.d.ts +70 -3
  235. package/dist/sync/types.d.ts.map +1 -1
  236. package/dist/sync/vcs-sync-peer.d.ts +63 -0
  237. package/dist/sync/vcs-sync-peer.d.ts.map +1 -0
  238. package/dist/sync/ws-transport.d.ts +2 -2
  239. package/dist/sync/ws-transport.d.ts.map +1 -1
  240. package/dist/tenancy-NBLLGCNJ.js +14 -0
  241. package/dist/tenancy-POMWQP6M.js +16 -0
  242. package/dist/ui/client.html +355 -67
  243. package/dist/ui/launch-explorer.d.ts +22 -0
  244. package/dist/ui/launch-explorer.d.ts.map +1 -0
  245. package/dist/ui/server.d.ts +1 -1
  246. package/dist/ui/server.d.ts.map +1 -1
  247. package/dist/vcs/blob-store.d.ts.map +1 -1
  248. package/dist/vcs/idb-op-log.d.ts +67 -0
  249. package/dist/vcs/idb-op-log.d.ts.map +1 -0
  250. package/dist/vcs/index.d.ts +1 -0
  251. package/dist/vcs/index.d.ts.map +1 -1
  252. package/dist/vcs/index.js +81 -72
  253. package/dist/vcs/issue.d.ts +22 -5
  254. package/dist/vcs/issue.d.ts.map +1 -1
  255. package/dist/vcs/lane-materialize.d.ts +5 -0
  256. package/dist/vcs/lane-materialize.d.ts.map +1 -1
  257. package/dist/vcs/op-log.d.ts +28 -2
  258. package/dist/vcs/op-log.d.ts.map +1 -1
  259. package/dist/vcs/ops.d.ts +10 -0
  260. package/dist/vcs/ops.d.ts.map +1 -1
  261. package/dist/vcs/types.d.ts +2 -0
  262. package/dist/vcs/types.d.ts.map +1 -1
  263. package/dist/{vm-config-6xhsj6b3.js → vm-config-JI4OXKDQ.js} +9 -10
  264. package/dist/vue/hooks.d.ts +64 -0
  265. package/dist/vue/hooks.d.ts.map +1 -0
  266. package/dist/vue/index.d.ts +19 -0
  267. package/dist/vue/index.d.ts.map +1 -0
  268. package/dist/vue/index.js +59 -0
  269. package/dist/vue/schema-hooks.d.ts +41 -0
  270. package/dist/vue/schema-hooks.d.ts.map +1 -0
  271. package/dist/vue/schema-hooks.js +64 -0
  272. package/package.json +130 -17
  273. package/dist/deploy-999q207z.js +0 -10
  274. package/dist/engine-y0724kjq.js +0 -8
  275. package/dist/import-s2b8e0ft.js +0 -11
  276. package/dist/index-a76rekgs.js +0 -67
  277. package/dist/index-c9h37r6h.js +0 -1
  278. package/dist/index-hr9qvv77.js +0 -860
  279. package/dist/index-k5b0xskw.js +0 -1
  280. package/dist/index-nzb3am4f.js +0 -80
  281. package/dist/index-wncptktd.js +0 -292
  282. package/dist/index-y6a4kj0p.js +0 -43
  283. package/dist/index-yhwjgfvj.js +0 -342
  284. package/dist/sdk-bepky0xs.js +0 -16
  285. package/dist/server-szdjx0nt.js +0 -13
  286. package/dist/sqlite-backend-0vsmc6qj.js +0 -8
  287. package/dist/tenancy-pjm32b4v.js +0 -14
@@ -1,4 +1,3 @@
1
- // @bun
2
1
  // src/core/query/types.ts
3
2
  function isVariable(t) {
4
3
  return t.kind === "variable";
@@ -14,13 +13,13 @@ function literal(value) {
14
13
  }
15
14
 
16
15
  // src/core/query/engine.ts
17
- class QueryEngine {
18
- store;
19
- rules = new Map;
20
- maxRuleDepth = 32;
16
+ var QueryEngine = class {
21
17
  constructor(store) {
22
18
  this.store = store;
23
19
  }
20
+ rules = /* @__PURE__ */ new Map();
21
+ maxRuleDepth = 32;
22
+ /** Register a Datalog rule. Multiple rules with the same name = union. */
24
23
  addRule(rule) {
25
24
  const existing = this.rules.get(rule.name) ?? [];
26
25
  existing.push(rule);
@@ -29,9 +28,10 @@ class QueryEngine {
29
28
  removeRule(name) {
30
29
  this.rules.delete(name);
31
30
  }
31
+ /** Execute a query against the store. */
32
32
  execute(query) {
33
33
  const start = performance.now();
34
- let results = this._evaluatePatterns(query.where, [new Map]);
34
+ let results = this._evaluatePatterns(query.where, [/* @__PURE__ */ new Map()]);
35
35
  for (const filter of query.filters) {
36
36
  results = results.filter((b) => this._evalFilter(filter, b));
37
37
  }
@@ -41,10 +41,8 @@ class QueryEngine {
41
41
  if (query.orderBy.length > 0) {
42
42
  results = this._order(results, query.orderBy);
43
43
  }
44
- if (query.offset > 0)
45
- results = results.slice(query.offset);
46
- if (query.limit > 0)
47
- results = results.slice(0, query.limit);
44
+ if (query.offset > 0) results = results.slice(query.offset);
45
+ if (query.limit > 0) results = results.slice(0, query.limit);
48
46
  const projected = this._project(results, query.select);
49
47
  return {
50
48
  bindings: projected,
@@ -52,11 +50,13 @@ class QueryEngine {
52
50
  count: projected.length
53
51
  };
54
52
  }
53
+ // -------------------------------------------------------------------------
54
+ // Pattern evaluation
55
+ // -------------------------------------------------------------------------
55
56
  _evaluatePatterns(patterns, bindings) {
56
57
  let current = bindings;
57
58
  for (const pattern of patterns) {
58
- if (current.length === 0)
59
- break;
59
+ if (current.length === 0) break;
60
60
  current = this._evaluatePattern(pattern, current);
61
61
  }
62
62
  return current;
@@ -82,18 +82,18 @@ class QueryEngine {
82
82
  const aResolved = this._resolve(p.attribute, b);
83
83
  const vResolved = this._resolve(p.value, b);
84
84
  let facts;
85
- if (eResolved !== undefined && aResolved !== undefined) {
85
+ if (eResolved !== void 0 && aResolved !== void 0) {
86
86
  facts = this.store.getFactsByEntity(String(eResolved)).filter((f) => f.a === aResolved);
87
- } else if (eResolved !== undefined) {
87
+ } else if (eResolved !== void 0) {
88
88
  facts = this.store.getFactsByEntity(String(eResolved));
89
- } else if (aResolved !== undefined && vResolved !== undefined) {
89
+ } else if (aResolved !== void 0 && vResolved !== void 0) {
90
90
  facts = this.store.getFactsByValue(String(aResolved), vResolved);
91
- } else if (aResolved !== undefined) {
91
+ } else if (aResolved !== void 0) {
92
92
  facts = this.store.getFactsByAttribute(String(aResolved));
93
93
  } else {
94
94
  facts = this.store.getAllFacts();
95
95
  }
96
- if (vResolved !== undefined) {
96
+ if (vResolved !== void 0) {
97
97
  facts = facts.filter((f) => f.v === vResolved);
98
98
  }
99
99
  for (const fact of facts) {
@@ -112,16 +112,19 @@ class QueryEngine {
112
112
  const attrResolved = this._resolve(p.attribute, b);
113
113
  const tgtResolved = this._resolve(p.target, b);
114
114
  let links;
115
- if (srcResolved !== undefined && attrResolved !== undefined) {
116
- links = this.store.getLinksByEntityAndAttribute(String(srcResolved), String(attrResolved));
117
- } else if (srcResolved !== undefined) {
115
+ if (srcResolved !== void 0 && attrResolved !== void 0) {
116
+ links = this.store.getLinksByEntityAndAttribute(
117
+ String(srcResolved),
118
+ String(attrResolved)
119
+ );
120
+ } else if (srcResolved !== void 0) {
118
121
  links = this.store.getLinksByEntity(String(srcResolved));
119
- } else if (attrResolved !== undefined) {
122
+ } else if (attrResolved !== void 0) {
120
123
  links = this.store.getLinksByAttribute(String(attrResolved));
121
124
  } else {
122
125
  links = this.store.getAllLinks();
123
126
  }
124
- if (tgtResolved !== undefined) {
127
+ if (tgtResolved !== void 0) {
125
128
  links = links.filter((l) => l.e2 === tgtResolved);
126
129
  }
127
130
  for (const link of links) {
@@ -148,34 +151,32 @@ class QueryEngine {
148
151
  return this._dedup(results);
149
152
  }
150
153
  _evalRuleApplication(p, bindings, depth = 0) {
151
- if (depth > this.maxRuleDepth)
152
- return [];
154
+ if (depth > this.maxRuleDepth) return [];
153
155
  const ruleDefs = this.rules.get(p.name);
154
- if (!ruleDefs)
155
- return [];
156
+ if (!ruleDefs) return [];
156
157
  const results = [];
157
158
  for (const b of bindings) {
158
159
  for (const rule of ruleDefs) {
159
160
  const ruleBindings = new Map(b);
160
161
  let ok = true;
161
- for (let i = 0;i < rule.params.length && i < p.args.length; i++) {
162
+ for (let i = 0; i < rule.params.length && i < p.args.length; i++) {
162
163
  const resolved = this._resolve(p.args[i], b);
163
- if (resolved !== undefined) {
164
+ if (resolved !== void 0) {
164
165
  ruleBindings.set(rule.params[i], resolved);
165
- } else if (isVariable(p.args[i])) {}
166
+ } else if (isVariable(p.args[i])) {
167
+ }
166
168
  }
167
- if (!ok)
168
- continue;
169
+ if (!ok) continue;
169
170
  let bodyResults = this._evaluatePatterns(rule.body, [ruleBindings]);
170
171
  for (const f of rule.filters) {
171
172
  bodyResults = bodyResults.filter((rb) => this._evalFilter(f, rb));
172
173
  }
173
174
  for (const rb of bodyResults) {
174
175
  const nb = new Map(b);
175
- for (let i = 0;i < rule.params.length && i < p.args.length; i++) {
176
+ for (let i = 0; i < rule.params.length && i < p.args.length; i++) {
176
177
  if (isVariable(p.args[i])) {
177
178
  const val = rb.get(rule.params[i]);
178
- if (val !== undefined)
179
+ if (val !== void 0)
179
180
  nb.set(p.args[i].name, val);
180
181
  }
181
182
  }
@@ -185,11 +186,13 @@ class QueryEngine {
185
186
  }
186
187
  return this._dedup(results);
187
188
  }
189
+ // -------------------------------------------------------------------------
190
+ // Filtering
191
+ // -------------------------------------------------------------------------
188
192
  _evalFilter(filter, b) {
189
193
  const left = this._resolve(filter.left, b);
190
194
  const right = this._resolve(filter.right, b);
191
- if (left === undefined || right === undefined)
192
- return false;
195
+ if (left === void 0 || right === void 0) return false;
193
196
  switch (filter.op) {
194
197
  case "=":
195
198
  return left === right;
@@ -215,12 +218,15 @@ class QueryEngine {
215
218
  return false;
216
219
  }
217
220
  }
221
+ // -------------------------------------------------------------------------
222
+ // Aggregation
223
+ // -------------------------------------------------------------------------
218
224
  _aggregate(bindings, aggregates, groupBy) {
219
225
  const aggVarNames = new Set(aggregates.map((a) => a.as));
220
226
  const groupVars = groupBy.filter((v) => !aggVarNames.has(v));
221
- const groups = new Map;
227
+ const groups = /* @__PURE__ */ new Map();
222
228
  for (const b of bindings) {
223
- const key = groupVars.map((v) => String(b.get(v) ?? "")).join("\x00");
229
+ const key = groupVars.map((v) => String(b.get(v) ?? "")).join("\0");
224
230
  const group = groups.get(key) ?? [];
225
231
  group.push(b);
226
232
  groups.set(key, group);
@@ -229,7 +235,7 @@ class QueryEngine {
229
235
  for (const [, group] of groups) {
230
236
  const nb = new Map(group[0]);
231
237
  for (const agg of aggregates) {
232
- const vals = group.map((b) => b.get(agg.variable)).filter((v) => v !== undefined);
238
+ const vals = group.map((b) => b.get(agg.variable)).filter((v) => v !== void 0);
233
239
  nb.set(agg.as, this._computeAggregate(agg.op, vals));
234
240
  }
235
241
  results.push(nb);
@@ -241,76 +247,94 @@ class QueryEngine {
241
247
  case "count":
242
248
  return vals.length;
243
249
  case "sum":
244
- return vals.reduce((s, v) => s + (Number(v) || 0), 0);
250
+ return vals.reduce(
251
+ (s, v) => s + (Number(v) || 0),
252
+ 0
253
+ );
245
254
  case "avg":
246
- return vals.length ? vals.reduce((s, v) => s + (Number(v) || 0), 0) / vals.length : 0;
255
+ return vals.length ? vals.reduce(
256
+ (s, v) => s + (Number(v) || 0),
257
+ 0
258
+ ) / vals.length : 0;
247
259
  case "min":
248
- return vals.reduce((m, v) => v < m ? v : m, vals[0]);
260
+ return vals.reduce(
261
+ (m, v) => v < m ? v : m,
262
+ vals[0]
263
+ );
249
264
  case "max":
250
- return vals.reduce((m, v) => v > m ? v : m, vals[0]);
265
+ return vals.reduce(
266
+ (m, v) => v > m ? v : m,
267
+ vals[0]
268
+ );
251
269
  case "collect":
252
270
  return JSON.stringify(vals);
253
271
  default:
254
272
  return vals.length;
255
273
  }
256
274
  }
275
+ // -------------------------------------------------------------------------
276
+ // Ordering
277
+ // -------------------------------------------------------------------------
257
278
  _order(bindings, orderBy) {
258
279
  return [...bindings].sort((a, b) => {
259
280
  for (const o of orderBy) {
260
281
  const va = a.get(o.variable);
261
282
  const vb = b.get(o.variable);
262
- if (va === vb)
263
- continue;
264
- if (va === undefined)
265
- return 1;
266
- if (vb === undefined)
267
- return -1;
283
+ if (va === vb) continue;
284
+ if (va === void 0) return 1;
285
+ if (vb === void 0) return -1;
268
286
  const cmp = va < vb ? -1 : 1;
269
287
  return o.direction === "asc" ? cmp : -cmp;
270
288
  }
271
289
  return 0;
272
290
  });
273
291
  }
292
+ // -------------------------------------------------------------------------
293
+ // Projection
294
+ // -------------------------------------------------------------------------
274
295
  _project(bindings, select) {
275
296
  return bindings.map((b) => {
276
297
  const row = {};
277
298
  if (select.length === 0) {
278
- for (const [k, v] of b)
279
- row[k] = v;
299
+ for (const [k, v] of b) row[k] = v;
280
300
  } else {
281
301
  for (const s of select) {
282
302
  const v = b.get(s);
283
- if (v !== undefined)
284
- row[s] = v;
303
+ if (v !== void 0) row[s] = v;
285
304
  }
286
305
  }
287
306
  return row;
288
307
  });
289
308
  }
309
+ // -------------------------------------------------------------------------
310
+ // Helpers
311
+ // -------------------------------------------------------------------------
290
312
  _resolve(term, bindings) {
291
- if (isLiteral(term))
292
- return term.value;
313
+ if (isLiteral(term)) return term.value;
293
314
  return bindings.get(term.name);
294
315
  }
295
316
  _bind(term, value, bindings) {
296
- if (isLiteral(term))
297
- return term.value === value;
317
+ if (isLiteral(term)) return term.value === value;
298
318
  const existing = bindings.get(term.name);
299
- if (existing !== undefined)
300
- return existing === value;
319
+ if (existing !== void 0) return existing === value;
301
320
  bindings.set(term.name, value);
302
321
  return true;
303
322
  }
304
323
  _dedup(bindings) {
305
- const seen = new Set;
324
+ const seen = /* @__PURE__ */ new Set();
306
325
  return bindings.filter((b) => {
307
- const key = [...b.entries()].sort(([a], [b2]) => a.localeCompare(b2)).map(([k, v]) => `${k}=${v}`).join("\x00");
308
- if (seen.has(key))
309
- return false;
326
+ const key = [...b.entries()].sort(([a], [b2]) => a.localeCompare(b2)).map(([k, v]) => `${k}=${v}`).join("\0");
327
+ if (seen.has(key)) return false;
310
328
  seen.add(key);
311
329
  return true;
312
330
  });
313
331
  }
314
- }
332
+ };
315
333
 
316
- export { isVariable, isLiteral, variable, literal, QueryEngine };
334
+ export {
335
+ isVariable,
336
+ isLiteral,
337
+ variable,
338
+ literal,
339
+ QueryEngine
340
+ };