mongo.do 0.1.0

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 (707) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +454 -0
  3. package/dist/agentfs/adapters/anthropic.d.ts +176 -0
  4. package/dist/agentfs/adapters/anthropic.d.ts.map +1 -0
  5. package/dist/agentfs/adapters/anthropic.js +629 -0
  6. package/dist/agentfs/adapters/anthropic.js.map +1 -0
  7. package/dist/agentfs/adapters/index.d.ts +21 -0
  8. package/dist/agentfs/adapters/index.d.ts.map +1 -0
  9. package/dist/agentfs/adapters/index.js +23 -0
  10. package/dist/agentfs/adapters/index.js.map +1 -0
  11. package/dist/agentfs/adapters/vercel.d.ts +260 -0
  12. package/dist/agentfs/adapters/vercel.d.ts.map +1 -0
  13. package/dist/agentfs/adapters/vercel.js +288 -0
  14. package/dist/agentfs/adapters/vercel.js.map +1 -0
  15. package/dist/agentfs/glob.d.ts +116 -0
  16. package/dist/agentfs/glob.d.ts.map +1 -0
  17. package/dist/agentfs/glob.js +270 -0
  18. package/dist/agentfs/glob.js.map +1 -0
  19. package/dist/agentfs/grep.d.ts +83 -0
  20. package/dist/agentfs/grep.d.ts.map +1 -0
  21. package/dist/agentfs/grep.js +193 -0
  22. package/dist/agentfs/grep.js.map +1 -0
  23. package/dist/agentfs/index.d.ts +22 -0
  24. package/dist/agentfs/index.d.ts.map +1 -0
  25. package/dist/agentfs/index.js +18 -0
  26. package/dist/agentfs/index.js.map +1 -0
  27. package/dist/agentfs/kv-store.d.ts +128 -0
  28. package/dist/agentfs/kv-store.d.ts.map +1 -0
  29. package/dist/agentfs/kv-store.js +227 -0
  30. package/dist/agentfs/kv-store.js.map +1 -0
  31. package/dist/agentfs/mondo-agent.d.ts +255 -0
  32. package/dist/agentfs/mondo-agent.d.ts.map +1 -0
  33. package/dist/agentfs/mondo-agent.js +879 -0
  34. package/dist/agentfs/mondo-agent.js.map +1 -0
  35. package/dist/agentfs/toolcalls.d.ts +130 -0
  36. package/dist/agentfs/toolcalls.d.ts.map +1 -0
  37. package/dist/agentfs/toolcalls.js +178 -0
  38. package/dist/agentfs/toolcalls.js.map +1 -0
  39. package/dist/agentfs/types.d.ts +171 -0
  40. package/dist/agentfs/types.d.ts.map +1 -0
  41. package/dist/agentfs/types.js +7 -0
  42. package/dist/agentfs/types.js.map +1 -0
  43. package/dist/agentfs/vfs.d.ts +249 -0
  44. package/dist/agentfs/vfs.d.ts.map +1 -0
  45. package/dist/agentfs/vfs.js +469 -0
  46. package/dist/agentfs/vfs.js.map +1 -0
  47. package/dist/cli/index.d.ts +15 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +219 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/mcp.d.ts +119 -0
  52. package/dist/cli/mcp.d.ts.map +1 -0
  53. package/dist/cli/mcp.js +418 -0
  54. package/dist/cli/mcp.js.map +1 -0
  55. package/dist/cli/server.d.ts +179 -0
  56. package/dist/cli/server.d.ts.map +1 -0
  57. package/dist/cli/server.js +441 -0
  58. package/dist/cli/server.js.map +1 -0
  59. package/dist/client/Collection.d.ts +199 -0
  60. package/dist/client/Collection.d.ts.map +1 -0
  61. package/dist/client/Collection.js +256 -0
  62. package/dist/client/Collection.js.map +1 -0
  63. package/dist/client/Database.d.ts +68 -0
  64. package/dist/client/Database.d.ts.map +1 -0
  65. package/dist/client/Database.js +105 -0
  66. package/dist/client/Database.js.map +1 -0
  67. package/dist/client/MongoClient.d.ts +165 -0
  68. package/dist/client/MongoClient.d.ts.map +1 -0
  69. package/dist/client/MongoClient.js +307 -0
  70. package/dist/client/MongoClient.js.map +1 -0
  71. package/dist/client/aggregation-cursor.d.ts +210 -0
  72. package/dist/client/aggregation-cursor.d.ts.map +1 -0
  73. package/dist/client/aggregation-cursor.js +509 -0
  74. package/dist/client/aggregation-cursor.js.map +1 -0
  75. package/dist/client/bulk-write.d.ts +216 -0
  76. package/dist/client/bulk-write.d.ts.map +1 -0
  77. package/dist/client/bulk-write.js +63 -0
  78. package/dist/client/bulk-write.js.map +1 -0
  79. package/dist/client/change-stream.d.ts +245 -0
  80. package/dist/client/change-stream.d.ts.map +1 -0
  81. package/dist/client/change-stream.js +429 -0
  82. package/dist/client/change-stream.js.map +1 -0
  83. package/dist/client/cursor.d.ts +85 -0
  84. package/dist/client/cursor.d.ts.map +1 -0
  85. package/dist/client/cursor.js +156 -0
  86. package/dist/client/cursor.js.map +1 -0
  87. package/dist/client/http-cursor.d.ts +233 -0
  88. package/dist/client/http-cursor.d.ts.map +1 -0
  89. package/dist/client/http-cursor.js +496 -0
  90. package/dist/client/http-cursor.js.map +1 -0
  91. package/dist/client/index.d.ts +18 -0
  92. package/dist/client/index.d.ts.map +1 -0
  93. package/dist/client/index.js +24 -0
  94. package/dist/client/index.js.map +1 -0
  95. package/dist/client/mongo-client.d.ts +60 -0
  96. package/dist/client/mongo-client.d.ts.map +1 -0
  97. package/dist/client/mongo-client.js +190 -0
  98. package/dist/client/mongo-client.js.map +1 -0
  99. package/dist/client/mongo-collection.d.ts +359 -0
  100. package/dist/client/mongo-collection.d.ts.map +1 -0
  101. package/dist/client/mongo-collection.js +1641 -0
  102. package/dist/client/mongo-collection.js.map +1 -0
  103. package/dist/client/mongo-cursor.d.ts +257 -0
  104. package/dist/client/mongo-cursor.d.ts.map +1 -0
  105. package/dist/client/mongo-cursor.js +621 -0
  106. package/dist/client/mongo-cursor.js.map +1 -0
  107. package/dist/client/mongo-database.d.ts +88 -0
  108. package/dist/client/mongo-database.d.ts.map +1 -0
  109. package/dist/client/mongo-database.js +139 -0
  110. package/dist/client/mongo-database.js.map +1 -0
  111. package/dist/client/session.d.ts +210 -0
  112. package/dist/client/session.d.ts.map +1 -0
  113. package/dist/client/session.js +326 -0
  114. package/dist/client/session.js.map +1 -0
  115. package/dist/durable-object/index-manager.d.ts +173 -0
  116. package/dist/durable-object/index-manager.d.ts.map +1 -0
  117. package/dist/durable-object/index-manager.js +764 -0
  118. package/dist/durable-object/index-manager.js.map +1 -0
  119. package/dist/durable-object/index.d.ts +12 -0
  120. package/dist/durable-object/index.d.ts.map +1 -0
  121. package/dist/durable-object/index.js +8 -0
  122. package/dist/durable-object/index.js.map +1 -0
  123. package/dist/durable-object/mcp-handler.d.ts +52 -0
  124. package/dist/durable-object/mcp-handler.d.ts.map +1 -0
  125. package/dist/durable-object/mcp-handler.js +186 -0
  126. package/dist/durable-object/mcp-handler.js.map +1 -0
  127. package/dist/durable-object/migrations.d.ts +40 -0
  128. package/dist/durable-object/migrations.d.ts.map +1 -0
  129. package/dist/durable-object/migrations.js +121 -0
  130. package/dist/durable-object/migrations.js.map +1 -0
  131. package/dist/durable-object/mondo-database.d.ts +148 -0
  132. package/dist/durable-object/mondo-database.d.ts.map +1 -0
  133. package/dist/durable-object/mondo-database.js +621 -0
  134. package/dist/durable-object/mondo-database.js.map +1 -0
  135. package/dist/durable-object/schema.d.ts +192 -0
  136. package/dist/durable-object/schema.d.ts.map +1 -0
  137. package/dist/durable-object/schema.js +186 -0
  138. package/dist/durable-object/schema.js.map +1 -0
  139. package/dist/embedding/document-serializer.d.ts +118 -0
  140. package/dist/embedding/document-serializer.d.ts.map +1 -0
  141. package/dist/embedding/document-serializer.js +339 -0
  142. package/dist/embedding/document-serializer.js.map +1 -0
  143. package/dist/embedding/embedding-manager.d.ts +136 -0
  144. package/dist/embedding/embedding-manager.d.ts.map +1 -0
  145. package/dist/embedding/embedding-manager.js +176 -0
  146. package/dist/embedding/embedding-manager.js.map +1 -0
  147. package/dist/embedding/index.d.ts +9 -0
  148. package/dist/embedding/index.d.ts.map +1 -0
  149. package/dist/embedding/index.js +9 -0
  150. package/dist/embedding/index.js.map +1 -0
  151. package/dist/executor/aggregation-executor.d.ts +93 -0
  152. package/dist/executor/aggregation-executor.d.ts.map +1 -0
  153. package/dist/executor/aggregation-executor.js +275 -0
  154. package/dist/executor/aggregation-executor.js.map +1 -0
  155. package/dist/executor/function-executor.d.ts +39 -0
  156. package/dist/executor/function-executor.d.ts.map +1 -0
  157. package/dist/executor/function-executor.js +168 -0
  158. package/dist/executor/function-executor.js.map +1 -0
  159. package/dist/executor/index.d.ts +4 -0
  160. package/dist/executor/index.d.ts.map +1 -0
  161. package/dist/executor/index.js +4 -0
  162. package/dist/executor/index.js.map +1 -0
  163. package/dist/executor/vector-search-executor.d.ts +71 -0
  164. package/dist/executor/vector-search-executor.d.ts.map +1 -0
  165. package/dist/executor/vector-search-executor.js +113 -0
  166. package/dist/executor/vector-search-executor.js.map +1 -0
  167. package/dist/index.d.ts +21 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +28 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/mcp/adapters/anthropic-adapter.d.ts +256 -0
  172. package/dist/mcp/adapters/anthropic-adapter.d.ts.map +1 -0
  173. package/dist/mcp/adapters/anthropic-adapter.js +409 -0
  174. package/dist/mcp/adapters/anthropic-adapter.js.map +1 -0
  175. package/dist/mcp/adapters/base-adapter.d.ts +164 -0
  176. package/dist/mcp/adapters/base-adapter.d.ts.map +1 -0
  177. package/dist/mcp/adapters/base-adapter.js +277 -0
  178. package/dist/mcp/adapters/base-adapter.js.map +1 -0
  179. package/dist/mcp/adapters/errors.d.ts +173 -0
  180. package/dist/mcp/adapters/errors.d.ts.map +1 -0
  181. package/dist/mcp/adapters/errors.js +305 -0
  182. package/dist/mcp/adapters/errors.js.map +1 -0
  183. package/dist/mcp/adapters/index.d.ts +65 -0
  184. package/dist/mcp/adapters/index.d.ts.map +1 -0
  185. package/dist/mcp/adapters/index.js +92 -0
  186. package/dist/mcp/adapters/index.js.map +1 -0
  187. package/dist/mcp/adapters/streaming.d.ts +200 -0
  188. package/dist/mcp/adapters/streaming.d.ts.map +1 -0
  189. package/dist/mcp/adapters/streaming.js +381 -0
  190. package/dist/mcp/adapters/streaming.js.map +1 -0
  191. package/dist/mcp/adapters/vercel-adapter.d.ts +321 -0
  192. package/dist/mcp/adapters/vercel-adapter.d.ts.map +1 -0
  193. package/dist/mcp/adapters/vercel-adapter.js +487 -0
  194. package/dist/mcp/adapters/vercel-adapter.js.map +1 -0
  195. package/dist/mcp/agent.d.ts +192 -0
  196. package/dist/mcp/agent.d.ts.map +1 -0
  197. package/dist/mcp/agent.js +338 -0
  198. package/dist/mcp/agent.js.map +1 -0
  199. package/dist/mcp/cli.d.ts +71 -0
  200. package/dist/mcp/cli.d.ts.map +1 -0
  201. package/dist/mcp/cli.js +218 -0
  202. package/dist/mcp/cli.js.map +1 -0
  203. package/dist/mcp/index.d.ts +15 -0
  204. package/dist/mcp/index.d.ts.map +1 -0
  205. package/dist/mcp/index.js +20 -0
  206. package/dist/mcp/index.js.map +1 -0
  207. package/dist/mcp/sandbox/database-proxy.d.ts +118 -0
  208. package/dist/mcp/sandbox/database-proxy.d.ts.map +1 -0
  209. package/dist/mcp/sandbox/database-proxy.js +154 -0
  210. package/dist/mcp/sandbox/database-proxy.js.map +1 -0
  211. package/dist/mcp/sandbox/index.d.ts +8 -0
  212. package/dist/mcp/sandbox/index.d.ts.map +1 -0
  213. package/dist/mcp/sandbox/index.js +7 -0
  214. package/dist/mcp/sandbox/index.js.map +1 -0
  215. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +72 -0
  216. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +1 -0
  217. package/dist/mcp/sandbox/miniflare-evaluator.js +379 -0
  218. package/dist/mcp/sandbox/miniflare-evaluator.js.map +1 -0
  219. package/dist/mcp/sandbox/template.d.ts +48 -0
  220. package/dist/mcp/sandbox/template.d.ts.map +1 -0
  221. package/dist/mcp/sandbox/template.js +147 -0
  222. package/dist/mcp/sandbox/template.js.map +1 -0
  223. package/dist/mcp/sandbox/worker-evaluator.d.ts +160 -0
  224. package/dist/mcp/sandbox/worker-evaluator.d.ts.map +1 -0
  225. package/dist/mcp/sandbox/worker-evaluator.js +217 -0
  226. package/dist/mcp/sandbox/worker-evaluator.js.map +1 -0
  227. package/dist/mcp/server.d.ts +75 -0
  228. package/dist/mcp/server.d.ts.map +1 -0
  229. package/dist/mcp/server.js +278 -0
  230. package/dist/mcp/server.js.map +1 -0
  231. package/dist/mcp/tool-call-auditor.d.ts +188 -0
  232. package/dist/mcp/tool-call-auditor.d.ts.map +1 -0
  233. package/dist/mcp/tool-call-auditor.js +198 -0
  234. package/dist/mcp/tool-call-auditor.js.map +1 -0
  235. package/dist/mcp/tools/do.d.ts +51 -0
  236. package/dist/mcp/tools/do.d.ts.map +1 -0
  237. package/dist/mcp/tools/do.js +113 -0
  238. package/dist/mcp/tools/do.js.map +1 -0
  239. package/dist/mcp/tools/fetch.d.ts +43 -0
  240. package/dist/mcp/tools/fetch.d.ts.map +1 -0
  241. package/dist/mcp/tools/fetch.js +127 -0
  242. package/dist/mcp/tools/fetch.js.map +1 -0
  243. package/dist/mcp/tools/index.d.ts +9 -0
  244. package/dist/mcp/tools/index.d.ts.map +1 -0
  245. package/dist/mcp/tools/index.js +9 -0
  246. package/dist/mcp/tools/index.js.map +1 -0
  247. package/dist/mcp/tools/search.d.ts +60 -0
  248. package/dist/mcp/tools/search.d.ts.map +1 -0
  249. package/dist/mcp/tools/search.js +278 -0
  250. package/dist/mcp/tools/search.js.map +1 -0
  251. package/dist/mcp/transport/http.d.ts +144 -0
  252. package/dist/mcp/transport/http.d.ts.map +1 -0
  253. package/dist/mcp/transport/http.js +545 -0
  254. package/dist/mcp/transport/http.js.map +1 -0
  255. package/dist/mcp/transport/index.d.ts +10 -0
  256. package/dist/mcp/transport/index.d.ts.map +1 -0
  257. package/dist/mcp/transport/index.js +12 -0
  258. package/dist/mcp/transport/index.js.map +1 -0
  259. package/dist/mcp/transport/stdio.d.ts +132 -0
  260. package/dist/mcp/transport/stdio.d.ts.map +1 -0
  261. package/dist/mcp/transport/stdio.js +466 -0
  262. package/dist/mcp/transport/stdio.js.map +1 -0
  263. package/dist/mcp/types.d.ts +476 -0
  264. package/dist/mcp/types.d.ts.map +1 -0
  265. package/dist/mcp/types.js +178 -0
  266. package/dist/mcp/types.js.map +1 -0
  267. package/dist/olap/cdc/cdc-buffer.d.ts +92 -0
  268. package/dist/olap/cdc/cdc-buffer.d.ts.map +1 -0
  269. package/dist/olap/cdc/cdc-buffer.js +146 -0
  270. package/dist/olap/cdc/cdc-buffer.js.map +1 -0
  271. package/dist/olap/cdc/cdc-emitter.d.ts +118 -0
  272. package/dist/olap/cdc/cdc-emitter.d.ts.map +1 -0
  273. package/dist/olap/cdc/cdc-emitter.js +217 -0
  274. package/dist/olap/cdc/cdc-emitter.js.map +1 -0
  275. package/dist/olap/cdc/cdc-schema.d.ts +119 -0
  276. package/dist/olap/cdc/cdc-schema.d.ts.map +1 -0
  277. package/dist/olap/cdc/cdc-schema.js +253 -0
  278. package/dist/olap/cdc/cdc-schema.js.map +1 -0
  279. package/dist/olap/cdc/index.d.ts +10 -0
  280. package/dist/olap/cdc/index.d.ts.map +1 -0
  281. package/dist/olap/cdc/index.js +10 -0
  282. package/dist/olap/cdc/index.js.map +1 -0
  283. package/dist/olap/clickhouse/iceberg.d.ts +164 -0
  284. package/dist/olap/clickhouse/iceberg.d.ts.map +1 -0
  285. package/dist/olap/clickhouse/iceberg.js +138 -0
  286. package/dist/olap/clickhouse/iceberg.js.map +1 -0
  287. package/dist/olap/clickhouse/index.d.ts +14 -0
  288. package/dist/olap/clickhouse/index.d.ts.map +1 -0
  289. package/dist/olap/clickhouse/index.js +14 -0
  290. package/dist/olap/clickhouse/index.js.map +1 -0
  291. package/dist/olap/clickhouse/mapper.d.ts +170 -0
  292. package/dist/olap/clickhouse/mapper.d.ts.map +1 -0
  293. package/dist/olap/clickhouse/mapper.js +654 -0
  294. package/dist/olap/clickhouse/mapper.js.map +1 -0
  295. package/dist/olap/clickhouse/olap-backend.d.ts +181 -0
  296. package/dist/olap/clickhouse/olap-backend.d.ts.map +1 -0
  297. package/dist/olap/clickhouse/olap-backend.js +1083 -0
  298. package/dist/olap/clickhouse/olap-backend.js.map +1 -0
  299. package/dist/olap/clickhouse/query-executor.d.ts +163 -0
  300. package/dist/olap/clickhouse/query-executor.d.ts.map +1 -0
  301. package/dist/olap/clickhouse/query-executor.js +560 -0
  302. package/dist/olap/clickhouse/query-executor.js.map +1 -0
  303. package/dist/olap/clickhouse/query.d.ts +134 -0
  304. package/dist/olap/clickhouse/query.d.ts.map +1 -0
  305. package/dist/olap/clickhouse/query.js +512 -0
  306. package/dist/olap/clickhouse/query.js.map +1 -0
  307. package/dist/olap/stage/index.d.ts +6 -0
  308. package/dist/olap/stage/index.d.ts.map +1 -0
  309. package/dist/olap/stage/index.js +6 -0
  310. package/dist/olap/stage/index.js.map +1 -0
  311. package/dist/olap/stage/parser.d.ts +68 -0
  312. package/dist/olap/stage/parser.d.ts.map +1 -0
  313. package/dist/olap/stage/parser.js +293 -0
  314. package/dist/olap/stage/parser.js.map +1 -0
  315. package/dist/olap/stage/router.d.ts +94 -0
  316. package/dist/olap/stage/router.d.ts.map +1 -0
  317. package/dist/olap/stage/router.js +390 -0
  318. package/dist/olap/stage/router.js.map +1 -0
  319. package/dist/rpc/endpoint.d.ts +52 -0
  320. package/dist/rpc/endpoint.d.ts.map +1 -0
  321. package/dist/rpc/endpoint.js +734 -0
  322. package/dist/rpc/endpoint.js.map +1 -0
  323. package/dist/rpc/index.d.ts +34 -0
  324. package/dist/rpc/index.d.ts.map +1 -0
  325. package/dist/rpc/index.js +45 -0
  326. package/dist/rpc/index.js.map +1 -0
  327. package/dist/rpc/rpc-client.d.ts +275 -0
  328. package/dist/rpc/rpc-client.d.ts.map +1 -0
  329. package/dist/rpc/rpc-client.js +735 -0
  330. package/dist/rpc/rpc-client.js.map +1 -0
  331. package/dist/rpc/rpc-target.d.ts +220 -0
  332. package/dist/rpc/rpc-target.d.ts.map +1 -0
  333. package/dist/rpc/rpc-target.js +500 -0
  334. package/dist/rpc/rpc-target.js.map +1 -0
  335. package/dist/rpc/worker-entrypoint.d.ts +159 -0
  336. package/dist/rpc/worker-entrypoint.d.ts.map +1 -0
  337. package/dist/rpc/worker-entrypoint.js +212 -0
  338. package/dist/rpc/worker-entrypoint.js.map +1 -0
  339. package/dist/server.d.ts +18 -0
  340. package/dist/server.d.ts.map +1 -0
  341. package/dist/server.js +129 -0
  342. package/dist/server.js.map +1 -0
  343. package/dist/studio/components/browser/CollectionItem.d.ts +26 -0
  344. package/dist/studio/components/browser/CollectionItem.d.ts.map +1 -0
  345. package/dist/studio/components/browser/CollectionItem.js +143 -0
  346. package/dist/studio/components/browser/CollectionItem.js.map +1 -0
  347. package/dist/studio/components/browser/CollectionTree.d.ts +45 -0
  348. package/dist/studio/components/browser/CollectionTree.d.ts.map +1 -0
  349. package/dist/studio/components/browser/CollectionTree.js +207 -0
  350. package/dist/studio/components/browser/CollectionTree.js.map +1 -0
  351. package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts +51 -0
  352. package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts.map +1 -0
  353. package/dist/studio/components/browser/ConnectedDatabaseBrowser.js +185 -0
  354. package/dist/studio/components/browser/ConnectedDatabaseBrowser.js.map +1 -0
  355. package/dist/studio/components/browser/DatabaseBrowser.d.ts +46 -0
  356. package/dist/studio/components/browser/DatabaseBrowser.d.ts.map +1 -0
  357. package/dist/studio/components/browser/DatabaseBrowser.js +304 -0
  358. package/dist/studio/components/browser/DatabaseBrowser.js.map +1 -0
  359. package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts +5 -0
  360. package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts.map +1 -0
  361. package/dist/studio/components/browser/__tests__/CollectionItem.test.js +169 -0
  362. package/dist/studio/components/browser/__tests__/CollectionItem.test.js.map +1 -0
  363. package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts +5 -0
  364. package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts.map +1 -0
  365. package/dist/studio/components/browser/__tests__/CollectionTree.test.js +203 -0
  366. package/dist/studio/components/browser/__tests__/CollectionTree.test.js.map +1 -0
  367. package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts +8 -0
  368. package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts.map +1 -0
  369. package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js +522 -0
  370. package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js.map +1 -0
  371. package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts +5 -0
  372. package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts.map +1 -0
  373. package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js +518 -0
  374. package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js.map +1 -0
  375. package/dist/studio/components/browser/__tests__/setup.d.ts +5 -0
  376. package/dist/studio/components/browser/__tests__/setup.d.ts.map +1 -0
  377. package/dist/studio/components/browser/__tests__/setup.js +22 -0
  378. package/dist/studio/components/browser/__tests__/setup.js.map +1 -0
  379. package/dist/studio/components/browser/index.d.ts +15 -0
  380. package/dist/studio/components/browser/index.d.ts.map +1 -0
  381. package/dist/studio/components/browser/index.js +10 -0
  382. package/dist/studio/components/browser/index.js.map +1 -0
  383. package/dist/studio/components/browser/types.d.ts +33 -0
  384. package/dist/studio/components/browser/types.d.ts.map +1 -0
  385. package/dist/studio/components/browser/types.js +5 -0
  386. package/dist/studio/components/browser/types.js.map +1 -0
  387. package/dist/studio/components/connection/ConnectionForm.d.ts +59 -0
  388. package/dist/studio/components/connection/ConnectionForm.d.ts.map +1 -0
  389. package/dist/studio/components/connection/ConnectionForm.js +274 -0
  390. package/dist/studio/components/connection/ConnectionForm.js.map +1 -0
  391. package/dist/studio/components/connection/ConnectionList.d.ts +59 -0
  392. package/dist/studio/components/connection/ConnectionList.d.ts.map +1 -0
  393. package/dist/studio/components/connection/ConnectionList.js +286 -0
  394. package/dist/studio/components/connection/ConnectionList.js.map +1 -0
  395. package/dist/studio/components/connection/ConnectionPanel.d.ts +132 -0
  396. package/dist/studio/components/connection/ConnectionPanel.d.ts.map +1 -0
  397. package/dist/studio/components/connection/ConnectionPanel.js +293 -0
  398. package/dist/studio/components/connection/ConnectionPanel.js.map +1 -0
  399. package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts +8 -0
  400. package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts.map +1 -0
  401. package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js +632 -0
  402. package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js.map +1 -0
  403. package/dist/studio/components/connection/__tests__/setup.d.ts +5 -0
  404. package/dist/studio/components/connection/__tests__/setup.d.ts.map +1 -0
  405. package/dist/studio/components/connection/__tests__/setup.js +11 -0
  406. package/dist/studio/components/connection/__tests__/setup.js.map +1 -0
  407. package/dist/studio/components/connection/index.d.ts +10 -0
  408. package/dist/studio/components/connection/index.d.ts.map +1 -0
  409. package/dist/studio/components/connection/index.js +7 -0
  410. package/dist/studio/components/connection/index.js.map +1 -0
  411. package/dist/studio/components/crud/DeleteDocumentDialog.d.ts +91 -0
  412. package/dist/studio/components/crud/DeleteDocumentDialog.d.ts.map +1 -0
  413. package/dist/studio/components/crud/DeleteDocumentDialog.js +273 -0
  414. package/dist/studio/components/crud/DeleteDocumentDialog.js.map +1 -0
  415. package/dist/studio/components/crud/DocumentEditor.d.ts +32 -0
  416. package/dist/studio/components/crud/DocumentEditor.d.ts.map +1 -0
  417. package/dist/studio/components/crud/DocumentEditor.js +546 -0
  418. package/dist/studio/components/crud/DocumentEditor.js.map +1 -0
  419. package/dist/studio/components/crud/InsertDocumentDialog.d.ts +78 -0
  420. package/dist/studio/components/crud/InsertDocumentDialog.d.ts.map +1 -0
  421. package/dist/studio/components/crud/InsertDocumentDialog.js +323 -0
  422. package/dist/studio/components/crud/InsertDocumentDialog.js.map +1 -0
  423. package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts +5 -0
  424. package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts.map +1 -0
  425. package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js +298 -0
  426. package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js.map +1 -0
  427. package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts +8 -0
  428. package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts.map +1 -0
  429. package/dist/studio/components/crud/__tests__/DocumentEditor.test.js +368 -0
  430. package/dist/studio/components/crud/__tests__/DocumentEditor.test.js.map +1 -0
  431. package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts +2 -0
  432. package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts.map +1 -0
  433. package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js +352 -0
  434. package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js.map +1 -0
  435. package/dist/studio/components/crud/__tests__/setup.d.ts +5 -0
  436. package/dist/studio/components/crud/__tests__/setup.d.ts.map +1 -0
  437. package/dist/studio/components/crud/__tests__/setup.js +22 -0
  438. package/dist/studio/components/crud/__tests__/setup.js.map +1 -0
  439. package/dist/studio/components/crud/index.d.ts +12 -0
  440. package/dist/studio/components/crud/index.d.ts.map +1 -0
  441. package/dist/studio/components/crud/index.js +11 -0
  442. package/dist/studio/components/crud/index.js.map +1 -0
  443. package/dist/studio/hooks/useConnection.d.ts +127 -0
  444. package/dist/studio/hooks/useConnection.d.ts.map +1 -0
  445. package/dist/studio/hooks/useConnection.js +414 -0
  446. package/dist/studio/hooks/useConnection.js.map +1 -0
  447. package/dist/studio/hooks/useDatabaseBrowser.d.ts +107 -0
  448. package/dist/studio/hooks/useDatabaseBrowser.d.ts.map +1 -0
  449. package/dist/studio/hooks/useDatabaseBrowser.js +294 -0
  450. package/dist/studio/hooks/useDatabaseBrowser.js.map +1 -0
  451. package/dist/studio/index.d.ts +16 -0
  452. package/dist/studio/index.d.ts.map +1 -0
  453. package/dist/studio/index.js +14 -0
  454. package/dist/studio/index.js.map +1 -0
  455. package/dist/studio/types/connection.d.ts +266 -0
  456. package/dist/studio/types/connection.d.ts.map +1 -0
  457. package/dist/studio/types/connection.js +159 -0
  458. package/dist/studio/types/connection.js.map +1 -0
  459. package/dist/studio/vitest.config.d.ts +3 -0
  460. package/dist/studio/vitest.config.d.ts.map +1 -0
  461. package/dist/studio/vitest.config.js +33 -0
  462. package/dist/studio/vitest.config.js.map +1 -0
  463. package/dist/translator/aggregation-translator.d.ts +51 -0
  464. package/dist/translator/aggregation-translator.d.ts.map +1 -0
  465. package/dist/translator/aggregation-translator.js +324 -0
  466. package/dist/translator/aggregation-translator.js.map +1 -0
  467. package/dist/translator/dialect.d.ts +131 -0
  468. package/dist/translator/dialect.d.ts.map +1 -0
  469. package/dist/translator/dialect.js +276 -0
  470. package/dist/translator/dialect.js.map +1 -0
  471. package/dist/translator/geo-translator.d.ts +91 -0
  472. package/dist/translator/geo-translator.d.ts.map +1 -0
  473. package/dist/translator/geo-translator.js +587 -0
  474. package/dist/translator/geo-translator.js.map +1 -0
  475. package/dist/translator/hybrid-translator.d.ts +70 -0
  476. package/dist/translator/hybrid-translator.d.ts.map +1 -0
  477. package/dist/translator/hybrid-translator.js +193 -0
  478. package/dist/translator/hybrid-translator.js.map +1 -0
  479. package/dist/translator/index.d.ts +13 -0
  480. package/dist/translator/index.d.ts.map +1 -0
  481. package/dist/translator/index.js +11 -0
  482. package/dist/translator/index.js.map +1 -0
  483. package/dist/translator/query-translator.d.ts +211 -0
  484. package/dist/translator/query-translator.d.ts.map +1 -0
  485. package/dist/translator/query-translator.js +1276 -0
  486. package/dist/translator/query-translator.js.map +1 -0
  487. package/dist/translator/search-highlight.d.ts +83 -0
  488. package/dist/translator/search-highlight.d.ts.map +1 -0
  489. package/dist/translator/search-highlight.js +83 -0
  490. package/dist/translator/search-highlight.js.map +1 -0
  491. package/dist/translator/search-translator.d.ts +155 -0
  492. package/dist/translator/search-translator.d.ts.map +1 -0
  493. package/dist/translator/search-translator.js +241 -0
  494. package/dist/translator/search-translator.js.map +1 -0
  495. package/dist/translator/stages/add-fields-stage.d.ts +7 -0
  496. package/dist/translator/stages/add-fields-stage.d.ts.map +1 -0
  497. package/dist/translator/stages/add-fields-stage.js +72 -0
  498. package/dist/translator/stages/add-fields-stage.js.map +1 -0
  499. package/dist/translator/stages/bucket-stage.d.ts +7 -0
  500. package/dist/translator/stages/bucket-stage.d.ts.map +1 -0
  501. package/dist/translator/stages/bucket-stage.js +87 -0
  502. package/dist/translator/stages/bucket-stage.js.map +1 -0
  503. package/dist/translator/stages/count-stage.d.ts +7 -0
  504. package/dist/translator/stages/count-stage.d.ts.map +1 -0
  505. package/dist/translator/stages/count-stage.js +12 -0
  506. package/dist/translator/stages/count-stage.js.map +1 -0
  507. package/dist/translator/stages/expression-translator.d.ts +68 -0
  508. package/dist/translator/stages/expression-translator.d.ts.map +1 -0
  509. package/dist/translator/stages/expression-translator.js +467 -0
  510. package/dist/translator/stages/expression-translator.js.map +1 -0
  511. package/dist/translator/stages/facet-stage.d.ts +13 -0
  512. package/dist/translator/stages/facet-stage.d.ts.map +1 -0
  513. package/dist/translator/stages/facet-stage.js +26 -0
  514. package/dist/translator/stages/facet-stage.js.map +1 -0
  515. package/dist/translator/stages/fusion-stages.d.ts +118 -0
  516. package/dist/translator/stages/fusion-stages.d.ts.map +1 -0
  517. package/dist/translator/stages/fusion-stages.js +201 -0
  518. package/dist/translator/stages/fusion-stages.js.map +1 -0
  519. package/dist/translator/stages/group-stage.d.ts +8 -0
  520. package/dist/translator/stages/group-stage.d.ts.map +1 -0
  521. package/dist/translator/stages/group-stage.js +123 -0
  522. package/dist/translator/stages/group-stage.js.map +1 -0
  523. package/dist/translator/stages/index.d.ts +24 -0
  524. package/dist/translator/stages/index.d.ts.map +1 -0
  525. package/dist/translator/stages/index.js +24 -0
  526. package/dist/translator/stages/index.js.map +1 -0
  527. package/dist/translator/stages/join-optimizer.d.ts +37 -0
  528. package/dist/translator/stages/join-optimizer.d.ts.map +1 -0
  529. package/dist/translator/stages/join-optimizer.js +93 -0
  530. package/dist/translator/stages/join-optimizer.js.map +1 -0
  531. package/dist/translator/stages/limit-stage.d.ts +7 -0
  532. package/dist/translator/stages/limit-stage.d.ts.map +1 -0
  533. package/dist/translator/stages/limit-stage.js +11 -0
  534. package/dist/translator/stages/limit-stage.js.map +1 -0
  535. package/dist/translator/stages/lookup-stage.d.ts +7 -0
  536. package/dist/translator/stages/lookup-stage.d.ts.map +1 -0
  537. package/dist/translator/stages/lookup-stage.js +73 -0
  538. package/dist/translator/stages/lookup-stage.js.map +1 -0
  539. package/dist/translator/stages/match-stage.d.ts +7 -0
  540. package/dist/translator/stages/match-stage.d.ts.map +1 -0
  541. package/dist/translator/stages/match-stage.js +14 -0
  542. package/dist/translator/stages/match-stage.js.map +1 -0
  543. package/dist/translator/stages/optimizer.d.ts +15 -0
  544. package/dist/translator/stages/optimizer.d.ts.map +1 -0
  545. package/dist/translator/stages/optimizer.js +249 -0
  546. package/dist/translator/stages/optimizer.js.map +1 -0
  547. package/dist/translator/stages/parallel-facet.d.ts +47 -0
  548. package/dist/translator/stages/parallel-facet.d.ts.map +1 -0
  549. package/dist/translator/stages/parallel-facet.js +57 -0
  550. package/dist/translator/stages/parallel-facet.js.map +1 -0
  551. package/dist/translator/stages/project-stage.d.ts +8 -0
  552. package/dist/translator/stages/project-stage.d.ts.map +1 -0
  553. package/dist/translator/stages/project-stage.js +145 -0
  554. package/dist/translator/stages/project-stage.js.map +1 -0
  555. package/dist/translator/stages/search-stage.d.ts +60 -0
  556. package/dist/translator/stages/search-stage.d.ts.map +1 -0
  557. package/dist/translator/stages/search-stage.js +89 -0
  558. package/dist/translator/stages/search-stage.js.map +1 -0
  559. package/dist/translator/stages/skip-stage.d.ts +7 -0
  560. package/dist/translator/stages/skip-stage.d.ts.map +1 -0
  561. package/dist/translator/stages/skip-stage.js +11 -0
  562. package/dist/translator/stages/skip-stage.js.map +1 -0
  563. package/dist/translator/stages/sort-stage.d.ts +7 -0
  564. package/dist/translator/stages/sort-stage.d.ts.map +1 -0
  565. package/dist/translator/stages/sort-stage.js +21 -0
  566. package/dist/translator/stages/sort-stage.js.map +1 -0
  567. package/dist/translator/stages/types.d.ts +136 -0
  568. package/dist/translator/stages/types.d.ts.map +1 -0
  569. package/dist/translator/stages/types.js +5 -0
  570. package/dist/translator/stages/types.js.map +1 -0
  571. package/dist/translator/stages/unwind-stage.d.ts +7 -0
  572. package/dist/translator/stages/unwind-stage.d.ts.map +1 -0
  573. package/dist/translator/stages/unwind-stage.js +61 -0
  574. package/dist/translator/stages/unwind-stage.js.map +1 -0
  575. package/dist/translator/stages/vector-search-stage.d.ts +53 -0
  576. package/dist/translator/stages/vector-search-stage.d.ts.map +1 -0
  577. package/dist/translator/stages/vector-search-stage.js +62 -0
  578. package/dist/translator/stages/vector-search-stage.js.map +1 -0
  579. package/dist/translator/update-translator.d.ts +148 -0
  580. package/dist/translator/update-translator.d.ts.map +1 -0
  581. package/dist/translator/update-translator.js +819 -0
  582. package/dist/translator/update-translator.js.map +1 -0
  583. package/dist/translator/vector-translator.d.ts +89 -0
  584. package/dist/translator/vector-translator.d.ts.map +1 -0
  585. package/dist/translator/vector-translator.js +106 -0
  586. package/dist/translator/vector-translator.js.map +1 -0
  587. package/dist/types/env.d.ts +31 -0
  588. package/dist/types/env.d.ts.map +1 -0
  589. package/dist/types/env.js +5 -0
  590. package/dist/types/env.js.map +1 -0
  591. package/dist/types/function.d.ts +65 -0
  592. package/dist/types/function.d.ts.map +1 -0
  593. package/dist/types/function.js +5 -0
  594. package/dist/types/function.js.map +1 -0
  595. package/dist/types/index.d.ts +137 -0
  596. package/dist/types/index.d.ts.map +1 -0
  597. package/dist/types/index.js +13 -0
  598. package/dist/types/index.js.map +1 -0
  599. package/dist/types/mongodb.d.ts +258 -0
  600. package/dist/types/mongodb.d.ts.map +1 -0
  601. package/dist/types/mongodb.js +5 -0
  602. package/dist/types/mongodb.js.map +1 -0
  603. package/dist/types/objectid.d.ts +130 -0
  604. package/dist/types/objectid.d.ts.map +1 -0
  605. package/dist/types/objectid.js +314 -0
  606. package/dist/types/objectid.js.map +1 -0
  607. package/dist/types/rpc.d.ts +313 -0
  608. package/dist/types/rpc.d.ts.map +1 -0
  609. package/dist/types/rpc.js +136 -0
  610. package/dist/types/rpc.js.map +1 -0
  611. package/dist/types/vectorize.d.ts +136 -0
  612. package/dist/types/vectorize.d.ts.map +1 -0
  613. package/dist/types/vectorize.js +8 -0
  614. package/dist/types/vectorize.js.map +1 -0
  615. package/dist/utils/sql-safety.d.ts +64 -0
  616. package/dist/utils/sql-safety.d.ts.map +1 -0
  617. package/dist/utils/sql-safety.js +112 -0
  618. package/dist/utils/sql-safety.js.map +1 -0
  619. package/dist/validation/document-validator.d.ts +195 -0
  620. package/dist/validation/document-validator.d.ts.map +1 -0
  621. package/dist/validation/document-validator.js +529 -0
  622. package/dist/validation/document-validator.js.map +1 -0
  623. package/dist/vectorize/document-serializer.d.ts +119 -0
  624. package/dist/vectorize/document-serializer.d.ts.map +1 -0
  625. package/dist/vectorize/document-serializer.js +320 -0
  626. package/dist/vectorize/document-serializer.js.map +1 -0
  627. package/dist/wire/auth/index.d.ts +5 -0
  628. package/dist/wire/auth/index.d.ts.map +1 -0
  629. package/dist/wire/auth/index.js +5 -0
  630. package/dist/wire/auth/index.js.map +1 -0
  631. package/dist/wire/auth/scram.d.ts +160 -0
  632. package/dist/wire/auth/scram.d.ts.map +1 -0
  633. package/dist/wire/auth/scram.js +425 -0
  634. package/dist/wire/auth/scram.js.map +1 -0
  635. package/dist/wire/backend/interface.d.ts +168 -0
  636. package/dist/wire/backend/interface.d.ts.map +1 -0
  637. package/dist/wire/backend/interface.js +10 -0
  638. package/dist/wire/backend/interface.js.map +1 -0
  639. package/dist/wire/backend/local-sqlite.d.ts +89 -0
  640. package/dist/wire/backend/local-sqlite.d.ts.map +1 -0
  641. package/dist/wire/backend/local-sqlite.js +1002 -0
  642. package/dist/wire/backend/local-sqlite.js.map +1 -0
  643. package/dist/wire/backend/query-router.d.ts +197 -0
  644. package/dist/wire/backend/query-router.d.ts.map +1 -0
  645. package/dist/wire/backend/query-router.js +590 -0
  646. package/dist/wire/backend/query-router.js.map +1 -0
  647. package/dist/wire/backend/validation.d.ts +26 -0
  648. package/dist/wire/backend/validation.d.ts.map +1 -0
  649. package/dist/wire/backend/validation.js +79 -0
  650. package/dist/wire/backend/validation.js.map +1 -0
  651. package/dist/wire/backend/workers-proxy.d.ts +95 -0
  652. package/dist/wire/backend/workers-proxy.d.ts.map +1 -0
  653. package/dist/wire/backend/workers-proxy.js +429 -0
  654. package/dist/wire/backend/workers-proxy.js.map +1 -0
  655. package/dist/wire/commands/admin.d.ts +49 -0
  656. package/dist/wire/commands/admin.d.ts.map +1 -0
  657. package/dist/wire/commands/admin.js +272 -0
  658. package/dist/wire/commands/admin.js.map +1 -0
  659. package/dist/wire/commands/aggregate.d.ts +15 -0
  660. package/dist/wire/commands/aggregate.d.ts.map +1 -0
  661. package/dist/wire/commands/aggregate.js +98 -0
  662. package/dist/wire/commands/aggregate.js.map +1 -0
  663. package/dist/wire/commands/auth.d.ts +58 -0
  664. package/dist/wire/commands/auth.d.ts.map +1 -0
  665. package/dist/wire/commands/auth.js +158 -0
  666. package/dist/wire/commands/auth.js.map +1 -0
  667. package/dist/wire/commands/crud.d.ts +49 -0
  668. package/dist/wire/commands/crud.d.ts.map +1 -0
  669. package/dist/wire/commands/crud.js +336 -0
  670. package/dist/wire/commands/crud.js.map +1 -0
  671. package/dist/wire/commands/hello.d.ts +35 -0
  672. package/dist/wire/commands/hello.d.ts.map +1 -0
  673. package/dist/wire/commands/hello.js +204 -0
  674. package/dist/wire/commands/hello.js.map +1 -0
  675. package/dist/wire/commands/index.d.ts +24 -0
  676. package/dist/wire/commands/index.d.ts.map +1 -0
  677. package/dist/wire/commands/index.js +145 -0
  678. package/dist/wire/commands/index.js.map +1 -0
  679. package/dist/wire/commands/router.d.ts +46 -0
  680. package/dist/wire/commands/router.d.ts.map +1 -0
  681. package/dist/wire/commands/router.js +151 -0
  682. package/dist/wire/commands/router.js.map +1 -0
  683. package/dist/wire/commands/types.d.ts +51 -0
  684. package/dist/wire/commands/types.d.ts.map +1 -0
  685. package/dist/wire/commands/types.js +15 -0
  686. package/dist/wire/commands/types.js.map +1 -0
  687. package/dist/wire/index.d.ts +15 -0
  688. package/dist/wire/index.d.ts.map +1 -0
  689. package/dist/wire/index.js +19 -0
  690. package/dist/wire/index.js.map +1 -0
  691. package/dist/wire/message.d.ts +49 -0
  692. package/dist/wire/message.d.ts.map +1 -0
  693. package/dist/wire/message.js +299 -0
  694. package/dist/wire/message.js.map +1 -0
  695. package/dist/wire/server.d.ts +145 -0
  696. package/dist/wire/server.d.ts.map +1 -0
  697. package/dist/wire/server.js +284 -0
  698. package/dist/wire/server.js.map +1 -0
  699. package/dist/wire/types.d.ts +140 -0
  700. package/dist/wire/types.d.ts.map +1 -0
  701. package/dist/wire/types.js +64 -0
  702. package/dist/wire/types.js.map +1 -0
  703. package/dist/worker.d.ts +17 -0
  704. package/dist/worker.d.ts.map +1 -0
  705. package/dist/worker.js +22 -0
  706. package/dist/worker.js.map +1 -0
  707. package/package.json +82 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * $lookup stage - Performs a left outer join with another collection
3
+ * Translates to SQL LEFT JOIN or subquery
4
+ */
5
+ import { getFieldPath } from './expression-translator';
6
+ export function translateLookupStage(lookup, context) {
7
+ const params = [];
8
+ const { localField, foreignField } = lookup;
9
+ if (localField && foreignField) {
10
+ // Simple lookup with localField/foreignField
11
+ return translateSimpleLookup(lookup, context, params);
12
+ }
13
+ else if (lookup.let && lookup.pipeline) {
14
+ // Pipeline lookup
15
+ return translatePipelineLookup(lookup, context, params);
16
+ }
17
+ throw new Error('$lookup requires either localField/foreignField or let/pipeline');
18
+ }
19
+ function translateSimpleLookup(lookup, context, params) {
20
+ const { from, localField, foreignField, as } = lookup;
21
+ const source = context.previousCte || context.collection;
22
+ const localPath = getFieldPath('$' + localField);
23
+ const foreignPath = getFieldPath('$' + foreignField);
24
+ // Use a subquery to collect matching documents as a JSON array
25
+ const cteName = `stage_${context.cteIndex}`;
26
+ const cteExpression = `
27
+ SELECT
28
+ ${source}.data,
29
+ COALESCE(
30
+ (SELECT json_group_array(${from}.data)
31
+ FROM ${from}
32
+ WHERE json_extract(${from}.data, '${foreignPath}') = json_extract(${source}.data, '${localPath}')),
33
+ '[]'
34
+ ) AS lookup_result
35
+ FROM ${source}
36
+ `;
37
+ // The result should merge lookup_result into data as the 'as' field
38
+ const selectClause = `json_set(data, '$.${as}', json(lookup_result)) AS data`;
39
+ return {
40
+ cteExpression: cteExpression.trim(),
41
+ cteName,
42
+ selectClause,
43
+ params,
44
+ transformsShape: true
45
+ };
46
+ }
47
+ function translatePipelineLookup(lookup, context, params) {
48
+ const { from, as } = lookup;
49
+ // For pipeline lookups, we need to handle variable substitution
50
+ // This is a simplified implementation
51
+ const source = context.previousCte || context.collection;
52
+ const cteName = `stage_${context.cteIndex}`;
53
+ // Build the inner query for the lookup
54
+ // In a full implementation, we'd translate the pipeline with variable substitution
55
+ const cteExpression = `
56
+ SELECT
57
+ ${source}.data,
58
+ COALESCE(
59
+ (SELECT json_group_array(${from}.data) FROM ${from}),
60
+ '[]'
61
+ ) AS lookup_result
62
+ FROM ${source}
63
+ `;
64
+ const selectClause = `json_set(data, '$.${as}', json(lookup_result)) AS data`;
65
+ return {
66
+ cteExpression: cteExpression.trim(),
67
+ cteName,
68
+ selectClause,
69
+ params,
70
+ transformsShape: true
71
+ };
72
+ }
73
+ //# sourceMappingURL=lookup-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup-stage.js","sourceRoot":"","sources":["../../../src/translator/stages/lookup-stage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,MAAM,UAAU,oBAAoB,CAClC,MAAmB,EACnB,OAAqB;IAErB,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAE3C,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/B,6CAA6C;QAC7C,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACvD,CAAC;SAAM,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACzC,kBAAkB;QAClB,OAAO,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;AACpF,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAmB,EACnB,OAAqB,EACrB,MAAiB;IAEjB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAA;IACxD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,GAAG,UAAW,CAAC,CAAA;IACjD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,GAAG,YAAa,CAAC,CAAA;IAErD,+DAA+D;IAC/D,MAAM,OAAO,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC3C,MAAM,aAAa,GAAG;;QAEhB,MAAM;;mCAEqB,IAAI;gBACvB,IAAI;8BACU,IAAI,WAAW,WAAW,qBAAqB,MAAM,WAAW,SAAS;;;WAG5F,MAAM;GACd,CAAA;IAED,oEAAoE;IACpE,MAAM,YAAY,GAAG,qBAAqB,EAAE,iCAAiC,CAAA;IAE7E,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE;QACnC,OAAO;QACP,YAAY;QACZ,MAAM;QACN,eAAe,EAAE,IAAI;KACtB,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAmB,EACnB,OAAqB,EACrB,MAAiB;IAEjB,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;IAE3B,gEAAgE;IAChE,sCAAsC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAA;IACxD,MAAM,OAAO,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAA;IAE3C,uCAAuC;IACvC,mFAAmF;IACnF,MAAM,aAAa,GAAG;;QAEhB,MAAM;;mCAEqB,IAAI,eAAe,IAAI;;;WAG/C,MAAM;GACd,CAAA;IAED,MAAM,YAAY,GAAG,qBAAqB,EAAE,iCAAiC,CAAA;IAE7E,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE;QACnC,OAAO;QACP,YAAY;QACZ,MAAM;QACN,eAAe,EAAE,IAAI;KACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * $match stage - Filters documents based on a query condition
3
+ * Translates to SQL WHERE clause using QueryTranslator
4
+ */
5
+ import type { StageResult, StageContext } from './types';
6
+ export declare function translateMatchStage(matchQuery: Record<string, unknown>, _context: StageContext): StageResult;
7
+ //# sourceMappingURL=match-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-stage.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/match-stage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAExD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,EAAE,YAAY,GACrB,WAAW,CAQb"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * $match stage - Filters documents based on a query condition
3
+ * Translates to SQL WHERE clause using QueryTranslator
4
+ */
5
+ import { QueryTranslator } from '../query-translator';
6
+ export function translateMatchStage(matchQuery, _context) {
7
+ const queryTranslator = new QueryTranslator();
8
+ const { sql, params } = queryTranslator.translate(matchQuery);
9
+ return {
10
+ whereClause: sql,
11
+ params
12
+ };
13
+ }
14
+ //# sourceMappingURL=match-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-stage.js","sourceRoot":"","sources":["../../../src/translator/stages/match-stage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGrD,MAAM,UAAU,mBAAmB,CACjC,UAAmC,EACnC,QAAsB;IAEtB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAE7D,OAAO;QACL,WAAW,EAAE,GAAG;QAChB,MAAM;KACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Pipeline Optimizer - Optimizes aggregation pipelines before translation
3
+ *
4
+ * Optimizations:
5
+ * 1. Predicate pushdown: Move $match stages as early as possible
6
+ * 2. Projection pushdown: Reduce fields carried through pipeline
7
+ * 3. Stage merging: Combine adjacent compatible stages
8
+ * 4. Redundant stage elimination
9
+ */
10
+ import type { PipelineStage } from './types';
11
+ /**
12
+ * Optimize an aggregation pipeline
13
+ */
14
+ export declare function optimizePipeline(pipeline: PipelineStage[]): PipelineStage[];
15
+ //# sourceMappingURL=optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAS3E"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Pipeline Optimizer - Optimizes aggregation pipelines before translation
3
+ *
4
+ * Optimizations:
5
+ * 1. Predicate pushdown: Move $match stages as early as possible
6
+ * 2. Projection pushdown: Reduce fields carried through pipeline
7
+ * 3. Stage merging: Combine adjacent compatible stages
8
+ * 4. Redundant stage elimination
9
+ */
10
+ /**
11
+ * Optimize an aggregation pipeline
12
+ */
13
+ export function optimizePipeline(pipeline) {
14
+ let optimized = [...pipeline];
15
+ // Apply optimizations in order
16
+ optimized = pushdownPredicates(optimized);
17
+ optimized = mergeAdjacentStages(optimized);
18
+ optimized = eliminateRedundantStages(optimized);
19
+ return optimized;
20
+ }
21
+ /**
22
+ * Push $match stages as early as possible in the pipeline
23
+ * This reduces the number of documents processed by subsequent stages
24
+ */
25
+ function pushdownPredicates(pipeline) {
26
+ const result = [];
27
+ for (let i = 0; i < pipeline.length; i++) {
28
+ const stage = pipeline[i];
29
+ const stageType = getStageType(stage);
30
+ if (stageType !== '$match') {
31
+ result.push(stage);
32
+ continue;
33
+ }
34
+ // Try to push this $match earlier
35
+ const matchCondition = stage.$match;
36
+ const pushPosition = findEarliestPushPosition(result, matchCondition);
37
+ if (pushPosition < result.length) {
38
+ // Insert at the earlier position
39
+ result.splice(pushPosition, 0, stage);
40
+ }
41
+ else {
42
+ result.push(stage);
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * Find the earliest position where a $match can be pushed
49
+ */
50
+ function findEarliestPushPosition(stages, matchCondition) {
51
+ const matchFields = extractFieldsFromCondition(matchCondition);
52
+ // Walk backwards through stages
53
+ for (let i = stages.length - 1; i >= 0; i--) {
54
+ const stage = stages[i];
55
+ const stageType = getStageType(stage);
56
+ // Can't push past stages that modify the fields we're matching on
57
+ if (stageType === '$group') {
58
+ // $group completely changes document shape
59
+ return i + 1;
60
+ }
61
+ if (stageType === '$project' || stageType === '$addFields') {
62
+ const projectFields = getAffectedFields(stage);
63
+ if (matchFields.some(f => projectFields.has(f))) {
64
+ return i + 1;
65
+ }
66
+ }
67
+ if (stageType === '$unwind') {
68
+ const unwindField = getUnwindField(stage);
69
+ if (matchFields.some(f => f === unwindField || f.startsWith(unwindField + '.'))) {
70
+ return i + 1;
71
+ }
72
+ }
73
+ if (stageType === '$lookup') {
74
+ const lookupAs = getLookupAsField(stage);
75
+ if (matchFields.some(f => f === lookupAs || f.startsWith(lookupAs + '.'))) {
76
+ return i + 1;
77
+ }
78
+ }
79
+ // $sort, $limit, $skip don't affect fields
80
+ // We can generally push $match past them (though order matters for correctness)
81
+ if (stageType === '$limit' || stageType === '$skip') {
82
+ // Can't push past limit/skip as it changes result set
83
+ return i + 1;
84
+ }
85
+ }
86
+ return 0;
87
+ }
88
+ /**
89
+ * Merge adjacent compatible stages
90
+ */
91
+ function mergeAdjacentStages(pipeline) {
92
+ const result = [];
93
+ for (const stage of pipeline) {
94
+ if (result.length === 0) {
95
+ result.push(stage);
96
+ continue;
97
+ }
98
+ const prevStage = result[result.length - 1];
99
+ const merged = tryMergeStages(prevStage, stage);
100
+ if (merged) {
101
+ result[result.length - 1] = merged;
102
+ }
103
+ else {
104
+ result.push(stage);
105
+ }
106
+ }
107
+ return result;
108
+ }
109
+ /**
110
+ * Try to merge two stages into one
111
+ */
112
+ function tryMergeStages(first, second) {
113
+ const firstType = getStageType(first);
114
+ const secondType = getStageType(second);
115
+ // Merge adjacent $match stages
116
+ if (firstType === '$match' && secondType === '$match') {
117
+ const firstMatch = first.$match;
118
+ const secondMatch = second.$match;
119
+ return {
120
+ $match: {
121
+ $and: [firstMatch, secondMatch]
122
+ }
123
+ };
124
+ }
125
+ // Merge adjacent $addFields stages
126
+ if (firstType === '$addFields' && secondType === '$addFields') {
127
+ const firstFields = first.$addFields;
128
+ const secondFields = second.$addFields;
129
+ return {
130
+ $addFields: {
131
+ ...firstFields,
132
+ ...secondFields
133
+ }
134
+ };
135
+ }
136
+ // Merge adjacent $project stages (if compatible)
137
+ if (firstType === '$project' && secondType === '$project') {
138
+ const firstProject = first.$project;
139
+ const secondProject = second.$project;
140
+ // Only merge if both are inclusion or both are exclusion
141
+ const firstIsExclusion = isExclusionProject(firstProject);
142
+ const secondIsExclusion = isExclusionProject(secondProject);
143
+ if (firstIsExclusion === secondIsExclusion) {
144
+ return {
145
+ $project: {
146
+ ...firstProject,
147
+ ...secondProject
148
+ }
149
+ };
150
+ }
151
+ }
152
+ return null;
153
+ }
154
+ /**
155
+ * Eliminate redundant stages
156
+ */
157
+ function eliminateRedundantStages(pipeline) {
158
+ return pipeline.filter((stage, index) => {
159
+ const stageType = getStageType(stage);
160
+ // Remove empty $match
161
+ if (stageType === '$match') {
162
+ const matchCondition = stage.$match;
163
+ if (Object.keys(matchCondition).length === 0) {
164
+ return false;
165
+ }
166
+ }
167
+ // Remove $limit 0 followed by anything (no results anyway)
168
+ if (stageType === '$limit') {
169
+ const limit = stage.$limit;
170
+ if (limit === 0) {
171
+ // Keep only this stage, remove rest
172
+ return true;
173
+ }
174
+ }
175
+ // Remove duplicate $sort stages (only last one matters)
176
+ if (stageType === '$sort' && index < pipeline.length - 1) {
177
+ for (let i = index + 1; i < pipeline.length; i++) {
178
+ const laterStageType = getStageType(pipeline[i]);
179
+ if (laterStageType === '$sort') {
180
+ return false;
181
+ }
182
+ // If we hit a stage that depends on order, keep this sort
183
+ if (['$limit', '$skip', '$first', '$last'].includes(laterStageType)) {
184
+ return true;
185
+ }
186
+ }
187
+ }
188
+ return true;
189
+ });
190
+ }
191
+ /**
192
+ * Helper functions
193
+ */
194
+ function getStageType(stage) {
195
+ return Object.keys(stage)[0];
196
+ }
197
+ function extractFieldsFromCondition(condition) {
198
+ const fields = [];
199
+ for (const [key, value] of Object.entries(condition)) {
200
+ if (key.startsWith('$')) {
201
+ // Logical operator
202
+ if (Array.isArray(value)) {
203
+ for (const subCondition of value) {
204
+ fields.push(...extractFieldsFromCondition(subCondition));
205
+ }
206
+ }
207
+ }
208
+ else {
209
+ fields.push(key);
210
+ }
211
+ }
212
+ return fields;
213
+ }
214
+ function getAffectedFields(stage) {
215
+ const stageType = getStageType(stage);
216
+ const fields = new Set();
217
+ if (stageType === '$project') {
218
+ const project = stage.$project;
219
+ for (const key of Object.keys(project)) {
220
+ fields.add(key);
221
+ }
222
+ }
223
+ else if (stageType === '$addFields') {
224
+ const addFields = stage.$addFields;
225
+ for (const key of Object.keys(addFields)) {
226
+ fields.add(key);
227
+ }
228
+ }
229
+ return fields;
230
+ }
231
+ function getUnwindField(stage) {
232
+ const unwind = stage.$unwind;
233
+ if (typeof unwind === 'string') {
234
+ return unwind.replace(/^\$/, '');
235
+ }
236
+ return unwind.path.replace(/^\$/, '');
237
+ }
238
+ function getLookupAsField(stage) {
239
+ const lookup = stage.$lookup;
240
+ return lookup.as;
241
+ }
242
+ function isExclusionProject(project) {
243
+ return Object.entries(project).every(([key, value]) => {
244
+ if (key === '_id')
245
+ return true;
246
+ return value === 0;
247
+ });
248
+ }
249
+ //# sourceMappingURL=optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/translator/stages/optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Parallel Facet Executor - Executes multiple facet pipelines concurrently
3
+ *
4
+ * This module provides utilities for executing facet queries in parallel,
5
+ * taking advantage of the independent nature of each facet.
6
+ */
7
+ export interface FacetQuery {
8
+ name: string;
9
+ sql: string;
10
+ params: unknown[];
11
+ }
12
+ export interface FacetResult {
13
+ name: string;
14
+ rows: unknown[];
15
+ }
16
+ export interface FacetExecutionPlan {
17
+ /** Queries that can be executed in parallel */
18
+ parallelQueries: FacetQuery[];
19
+ /** Combined result structure */
20
+ combineResults: (results: FacetResult[]) => Record<string, unknown[]>;
21
+ }
22
+ /**
23
+ * Create an execution plan for parallel facet queries
24
+ */
25
+ export declare function createFacetExecutionPlan(facets: Record<string, {
26
+ sql: string;
27
+ params: unknown[];
28
+ }>): FacetExecutionPlan;
29
+ /**
30
+ * Example executor interface for parallel facet execution
31
+ * This would be implemented by the database layer
32
+ */
33
+ export interface ParallelExecutor {
34
+ executeParallel(queries: FacetQuery[]): Promise<FacetResult[]>;
35
+ }
36
+ /**
37
+ * Create a mock parallel executor for testing
38
+ */
39
+ export declare function createMockParallelExecutor(queryHandler: (sql: string, params: unknown[]) => unknown[]): ParallelExecutor;
40
+ /**
41
+ * Batch facet execution - groups queries for efficient execution
42
+ */
43
+ export declare function batchFacetQueries(facets: Record<string, {
44
+ sql: string;
45
+ params: unknown[];
46
+ }>, batchSize?: number): FacetQuery[][];
47
+ //# sourceMappingURL=parallel-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-facet.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/parallel-facet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,eAAe,EAAE,UAAU,EAAE,CAAA;IAC7B,gCAAgC;IAChC,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;CACtE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,GACzD,kBAAkB,CAiBpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;CAC/D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,GAC1D,gBAAgB,CAalB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,EAC1D,SAAS,GAAE,MAAU,GACpB,UAAU,EAAE,EAAE,CAahB"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Parallel Facet Executor - Executes multiple facet pipelines concurrently
3
+ *
4
+ * This module provides utilities for executing facet queries in parallel,
5
+ * taking advantage of the independent nature of each facet.
6
+ */
7
+ /**
8
+ * Create an execution plan for parallel facet queries
9
+ */
10
+ export function createFacetExecutionPlan(facets) {
11
+ const parallelQueries = Object.entries(facets).map(([name, query]) => ({
12
+ name,
13
+ sql: query.sql,
14
+ params: query.params
15
+ }));
16
+ return {
17
+ parallelQueries,
18
+ combineResults: (results) => {
19
+ const combined = {};
20
+ for (const result of results) {
21
+ combined[result.name] = result.rows;
22
+ }
23
+ return combined;
24
+ }
25
+ };
26
+ }
27
+ /**
28
+ * Create a mock parallel executor for testing
29
+ */
30
+ export function createMockParallelExecutor(queryHandler) {
31
+ return {
32
+ async executeParallel(queries) {
33
+ // Execute all queries in parallel using Promise.all
34
+ const results = await Promise.all(queries.map(async (query) => ({
35
+ name: query.name,
36
+ rows: queryHandler(query.sql, query.params)
37
+ })));
38
+ return results;
39
+ }
40
+ };
41
+ }
42
+ /**
43
+ * Batch facet execution - groups queries for efficient execution
44
+ */
45
+ export function batchFacetQueries(facets, batchSize = 3) {
46
+ const queries = Object.entries(facets).map(([name, query]) => ({
47
+ name,
48
+ sql: query.sql,
49
+ params: query.params
50
+ }));
51
+ const batches = [];
52
+ for (let i = 0; i < queries.length; i += batchSize) {
53
+ batches.push(queries.slice(i, i + batchSize));
54
+ }
55
+ return batches;
56
+ }
57
+ //# sourceMappingURL=parallel-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-facet.js","sourceRoot":"","sources":["../../../src/translator/stages/parallel-facet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA0D;IAE1D,MAAM,eAAe,GAAiB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CAAA;IAEH,OAAO;QACL,eAAe;QACf,cAAc,EAAE,CAAC,OAAsB,EAAE,EAAE;YACzC,MAAM,QAAQ,GAA8B,EAAE,CAAA;YAC9C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAA;YACrC,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC;KACF,CAAA;AACH,CAAC;AAUD;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAA2D;IAE3D,OAAO;QACL,KAAK,CAAC,eAAe,CAAC,OAAqB;YACzC,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;aAC5C,CAAC,CAAC,CACJ,CAAA;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA0D,EAC1D,YAAoB,CAAC;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CAAA;IAEH,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * $project stage - Reshapes documents by including, excluding, or computing fields
3
+ * Translates to SQL SELECT with json_object, json_remove, or computed expressions
4
+ * Supports multiple SQL dialects (SQLite, ClickHouse)
5
+ */
6
+ import type { StageResult, StageContext } from './types';
7
+ export declare function translateProjectStage(projection: Record<string, unknown>, context: StageContext): StageResult;
8
+ //# sourceMappingURL=project-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-stage.d.ts","sourceRoot":"","sources":["../../../src/translator/stages/project-stage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAwCxD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,YAAY,GACpB,WAAW,CAiBb"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * $project stage - Reshapes documents by including, excluding, or computing fields
3
+ * Translates to SQL SELECT with json_object, json_remove, or computed expressions
4
+ * Supports multiple SQL dialects (SQLite, ClickHouse)
5
+ */
6
+ import { translateExpression, isFieldReference, getFieldPath } from './expression-translator';
7
+ import { validateFieldPath } from '../../utils/sql-safety.js';
8
+ import { jsonExtract as dialectJsonExtract } from '../dialect';
9
+ /**
10
+ * Recursively collect all field references from a $function expression's args
11
+ */
12
+ function collectFunctionFieldRefs(expr) {
13
+ if (!expr || typeof expr !== 'object')
14
+ return [];
15
+ const fields = [];
16
+ const exprObj = expr;
17
+ // Check if this is a $function expression
18
+ if ('$function' in exprObj) {
19
+ const fnSpec = exprObj.$function;
20
+ if (fnSpec.args && Array.isArray(fnSpec.args)) {
21
+ for (const arg of fnSpec.args) {
22
+ if (isFieldReference(arg)) {
23
+ // Extract field name from $fieldName reference
24
+ const fieldName = arg.substring(1).split('.')[0];
25
+ if (fieldName) {
26
+ fields.push(fieldName);
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ // Recursively check nested objects
33
+ for (const value of Object.values(exprObj)) {
34
+ if (value && typeof value === 'object') {
35
+ fields.push(...collectFunctionFieldRefs(value));
36
+ }
37
+ }
38
+ return fields;
39
+ }
40
+ export function translateProjectStage(projection, context) {
41
+ const params = [];
42
+ const dialect = context.dialect || 'sqlite';
43
+ const fields = Object.entries(projection);
44
+ // Check if it's an exclusion projection (all values are 0 except _id)
45
+ const isExclusion = fields.every(([key, value]) => {
46
+ if (key === '_id')
47
+ return true;
48
+ return value === 0;
49
+ });
50
+ if (isExclusion) {
51
+ return translateExclusionProject(projection, context, params, dialect);
52
+ }
53
+ // Inclusion or computed projection
54
+ return translateInclusionProject(projection, context, params, dialect);
55
+ }
56
+ function translateExclusionProject(projection, _context, params, dialect = 'sqlite') {
57
+ const fieldsToRemove = Object.entries(projection)
58
+ .filter(([key, value]) => value === 0 && key !== '_id')
59
+ .map(([key]) => {
60
+ // Validate field name to prevent SQL injection
61
+ validateFieldPath(key);
62
+ return `'$.${key}'`;
63
+ });
64
+ let selectClause;
65
+ if (fieldsToRemove.length > 0) {
66
+ if (dialect === 'clickhouse') {
67
+ // ClickHouse doesn't have json_remove, would need different approach
68
+ selectClause = 'data'; // Simplified for now
69
+ }
70
+ else {
71
+ selectClause = `json_remove(data, ${fieldsToRemove.join(', ')}) AS data`;
72
+ }
73
+ }
74
+ else {
75
+ selectClause = 'data';
76
+ }
77
+ return {
78
+ selectClause,
79
+ params
80
+ };
81
+ }
82
+ function translateInclusionProject(projection, _context, params, dialect = 'sqlite') {
83
+ const jsonParts = [];
84
+ // Collect all field references needed by $function expressions
85
+ // These need to be included in the output so the function executor can extract them
86
+ const functionFieldRefs = new Set();
87
+ for (const [, value] of Object.entries(projection)) {
88
+ if (typeof value === 'object' && value !== null) {
89
+ const refs = collectFunctionFieldRefs(value);
90
+ refs.forEach(ref => functionFieldRefs.add(ref));
91
+ }
92
+ }
93
+ // First, add the explicitly projected fields
94
+ const explicitFields = new Set();
95
+ for (const [key, value] of Object.entries(projection)) {
96
+ // Validate key (output field name) to prevent SQL injection
97
+ validateFieldPath(key);
98
+ explicitFields.add(key);
99
+ if (value === 1) {
100
+ // Include existing field
101
+ const fieldExpr = dialectJsonExtract(dialect, 'data', `$.${key}`);
102
+ jsonParts.push(`'${key}', ${fieldExpr}`);
103
+ }
104
+ else if (typeof value === 'string' && value.startsWith('$')) {
105
+ // Field reference (renaming) - getFieldPath validates the field
106
+ const fieldPath = getFieldPath(value);
107
+ const fieldExpr = dialectJsonExtract(dialect, 'data', fieldPath);
108
+ jsonParts.push(`'${key}', ${fieldExpr}`);
109
+ }
110
+ else if (typeof value === 'object' && value !== null) {
111
+ // Expression
112
+ const exprSql = translateExpression(value, params, dialect);
113
+ jsonParts.push(`'${key}', ${exprSql}`);
114
+ }
115
+ else if (value !== 0) {
116
+ // Literal value
117
+ if (typeof value === 'string') {
118
+ params.push(value);
119
+ jsonParts.push(`'${key}', ?`);
120
+ }
121
+ else if (typeof value === 'number' || typeof value === 'boolean') {
122
+ jsonParts.push(`'${key}', ${JSON.stringify(value)}`);
123
+ }
124
+ }
125
+ }
126
+ // Add source fields needed by $function that aren't already projected
127
+ // These will be used by the function executor to extract argument values
128
+ for (const fieldRef of functionFieldRefs) {
129
+ if (!explicitFields.has(fieldRef)) {
130
+ // Validate field reference to prevent SQL injection
131
+ validateFieldPath(fieldRef);
132
+ const fieldExpr = dialectJsonExtract(dialect, 'data', `$.${fieldRef}`);
133
+ jsonParts.push(`'${fieldRef}', ${fieldExpr}`);
134
+ }
135
+ }
136
+ const selectClause = dialect === 'clickhouse'
137
+ ? `tuple(${jsonParts.join(', ')}) AS data`
138
+ : `json_object(${jsonParts.join(', ')}) AS data`;
139
+ return {
140
+ selectClause,
141
+ params,
142
+ transformsShape: true
143
+ };
144
+ }
145
+ //# sourceMappingURL=project-stage.js.map