anchordb 0.2.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 (438) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/LICENSE +21 -0
  3. package/README.md +160 -0
  4. package/dist/cjs/conflict/strategies.d.ts +110 -0
  5. package/dist/cjs/conflict/strategies.d.ts.map +1 -0
  6. package/dist/cjs/conflict/strategies.js +298 -0
  7. package/dist/cjs/conflict/strategies.js.map +1 -0
  8. package/dist/cjs/conflict/types.d.ts +38 -0
  9. package/dist/cjs/conflict/types.d.ts.map +1 -0
  10. package/dist/cjs/conflict/types.js +3 -0
  11. package/dist/cjs/conflict/types.js.map +1 -0
  12. package/dist/cjs/core/anchor-db.d.ts +154 -0
  13. package/dist/cjs/core/anchor-db.d.ts.map +1 -0
  14. package/dist/cjs/core/anchor-db.js +273 -0
  15. package/dist/cjs/core/anchor-db.js.map +1 -0
  16. package/dist/cjs/core/errors.d.ts +125 -0
  17. package/dist/cjs/core/errors.d.ts.map +1 -0
  18. package/dist/cjs/core/errors.js +174 -0
  19. package/dist/cjs/core/errors.js.map +1 -0
  20. package/dist/cjs/core/hex.d.ts +4 -0
  21. package/dist/cjs/core/hex.d.ts.map +1 -0
  22. package/dist/cjs/core/hex.js +41 -0
  23. package/dist/cjs/core/hex.js.map +1 -0
  24. package/dist/cjs/core/hlc.d.ts +96 -0
  25. package/dist/cjs/core/hlc.d.ts.map +1 -0
  26. package/dist/cjs/core/hlc.js +161 -0
  27. package/dist/cjs/core/hlc.js.map +1 -0
  28. package/dist/cjs/core/object-id.d.ts +38 -0
  29. package/dist/cjs/core/object-id.d.ts.map +1 -0
  30. package/dist/cjs/core/object-id.js +167 -0
  31. package/dist/cjs/core/object-id.js.map +1 -0
  32. package/dist/cjs/core/random.d.ts +6 -0
  33. package/dist/cjs/core/random.d.ts.map +1 -0
  34. package/dist/cjs/core/random.js +39 -0
  35. package/dist/cjs/core/random.js.map +1 -0
  36. package/dist/cjs/core/runtime.d.ts +96 -0
  37. package/dist/cjs/core/runtime.d.ts.map +1 -0
  38. package/dist/cjs/core/runtime.js +3 -0
  39. package/dist/cjs/core/runtime.js.map +1 -0
  40. package/dist/cjs/core/uuid.d.ts +16 -0
  41. package/dist/cjs/core/uuid.d.ts.map +1 -0
  42. package/dist/cjs/core/uuid.js +37 -0
  43. package/dist/cjs/core/uuid.js.map +1 -0
  44. package/dist/cjs/decorators/index.d.ts +48 -0
  45. package/dist/cjs/decorators/index.d.ts.map +1 -0
  46. package/dist/cjs/decorators/index.js +295 -0
  47. package/dist/cjs/decorators/index.js.map +1 -0
  48. package/dist/cjs/events/emitter.d.ts +16 -0
  49. package/dist/cjs/events/emitter.d.ts.map +1 -0
  50. package/dist/cjs/events/emitter.js +56 -0
  51. package/dist/cjs/events/emitter.js.map +1 -0
  52. package/dist/cjs/index/keys.d.ts +79 -0
  53. package/dist/cjs/index/keys.d.ts.map +1 -0
  54. package/dist/cjs/index/keys.js +208 -0
  55. package/dist/cjs/index/keys.js.map +1 -0
  56. package/dist/cjs/index.d.ts +81 -0
  57. package/dist/cjs/index.d.ts.map +1 -0
  58. package/dist/cjs/index.js +193 -0
  59. package/dist/cjs/index.js.map +1 -0
  60. package/dist/cjs/inspector/agent.d.ts +75 -0
  61. package/dist/cjs/inspector/agent.d.ts.map +1 -0
  62. package/dist/cjs/inspector/agent.js +520 -0
  63. package/dist/cjs/inspector/agent.js.map +1 -0
  64. package/dist/cjs/inspector/auth.d.ts +49 -0
  65. package/dist/cjs/inspector/auth.d.ts.map +1 -0
  66. package/dist/cjs/inspector/auth.js +234 -0
  67. package/dist/cjs/inspector/auth.js.map +1 -0
  68. package/dist/cjs/inspector/bridge.d.ts +141 -0
  69. package/dist/cjs/inspector/bridge.d.ts.map +1 -0
  70. package/dist/cjs/inspector/bridge.js +190 -0
  71. package/dist/cjs/inspector/bridge.js.map +1 -0
  72. package/dist/cjs/inspector/client.d.ts +111 -0
  73. package/dist/cjs/inspector/client.d.ts.map +1 -0
  74. package/dist/cjs/inspector/client.js +218 -0
  75. package/dist/cjs/inspector/client.js.map +1 -0
  76. package/dist/cjs/inspector/protocol.d.ts +160 -0
  77. package/dist/cjs/inspector/protocol.d.ts.map +1 -0
  78. package/dist/cjs/inspector/protocol.js +53 -0
  79. package/dist/cjs/inspector/protocol.js.map +1 -0
  80. package/dist/cjs/inspector/transports/in-process.d.ts +7 -0
  81. package/dist/cjs/inspector/transports/in-process.d.ts.map +1 -0
  82. package/dist/cjs/inspector/transports/in-process.js +58 -0
  83. package/dist/cjs/inspector/transports/in-process.js.map +1 -0
  84. package/dist/cjs/inspector/transports/websocket.d.ts +39 -0
  85. package/dist/cjs/inspector/transports/websocket.d.ts.map +1 -0
  86. package/dist/cjs/inspector/transports/websocket.js +60 -0
  87. package/dist/cjs/inspector/transports/websocket.js.map +1 -0
  88. package/dist/cjs/interop/csv.d.ts +53 -0
  89. package/dist/cjs/interop/csv.d.ts.map +1 -0
  90. package/dist/cjs/interop/csv.js +230 -0
  91. package/dist/cjs/interop/csv.js.map +1 -0
  92. package/dist/cjs/interop/ejson.d.ts +41 -0
  93. package/dist/cjs/interop/ejson.d.ts.map +1 -0
  94. package/dist/cjs/interop/ejson.js +182 -0
  95. package/dist/cjs/interop/ejson.js.map +1 -0
  96. package/dist/cjs/interop/export-import.d.ts +98 -0
  97. package/dist/cjs/interop/export-import.d.ts.map +1 -0
  98. package/dist/cjs/interop/export-import.js +222 -0
  99. package/dist/cjs/interop/export-import.js.map +1 -0
  100. package/dist/cjs/model/document.d.ts +66 -0
  101. package/dist/cjs/model/document.d.ts.map +1 -0
  102. package/dist/cjs/model/document.js +302 -0
  103. package/dist/cjs/model/document.js.map +1 -0
  104. package/dist/cjs/model/model.d.ts +178 -0
  105. package/dist/cjs/model/model.d.ts.map +1 -0
  106. package/dist/cjs/model/model.js +823 -0
  107. package/dist/cjs/model/model.js.map +1 -0
  108. package/dist/cjs/package.json +3 -0
  109. package/dist/cjs/query/aggregation/expressions.d.ts +34 -0
  110. package/dist/cjs/query/aggregation/expressions.d.ts.map +1 -0
  111. package/dist/cjs/query/aggregation/expressions.js +552 -0
  112. package/dist/cjs/query/aggregation/expressions.js.map +1 -0
  113. package/dist/cjs/query/aggregation/pipeline.d.ts +79 -0
  114. package/dist/cjs/query/aggregation/pipeline.d.ts.map +1 -0
  115. package/dist/cjs/query/aggregation/pipeline.js +597 -0
  116. package/dist/cjs/query/aggregation/pipeline.js.map +1 -0
  117. package/dist/cjs/query/aggregation/source.d.ts +35 -0
  118. package/dist/cjs/query/aggregation/source.d.ts.map +1 -0
  119. package/dist/cjs/query/aggregation/source.js +81 -0
  120. package/dist/cjs/query/aggregation/source.js.map +1 -0
  121. package/dist/cjs/query/builder/query.d.ts +113 -0
  122. package/dist/cjs/query/builder/query.d.ts.map +1 -0
  123. package/dist/cjs/query/builder/query.js +215 -0
  124. package/dist/cjs/query/builder/query.js.map +1 -0
  125. package/dist/cjs/query/filter.d.ts +50 -0
  126. package/dist/cjs/query/filter.d.ts.map +1 -0
  127. package/dist/cjs/query/filter.js +275 -0
  128. package/dist/cjs/query/filter.js.map +1 -0
  129. package/dist/cjs/query/path.d.ts +41 -0
  130. package/dist/cjs/query/path.d.ts.map +1 -0
  131. package/dist/cjs/query/path.js +294 -0
  132. package/dist/cjs/query/path.js.map +1 -0
  133. package/dist/cjs/query/update.d.ts +30 -0
  134. package/dist/cjs/query/update.d.ts.map +1 -0
  135. package/dist/cjs/query/update.js +205 -0
  136. package/dist/cjs/query/update.js.map +1 -0
  137. package/dist/cjs/reactive/live-query.d.ts +41 -0
  138. package/dist/cjs/reactive/live-query.d.ts.map +1 -0
  139. package/dist/cjs/reactive/live-query.js +88 -0
  140. package/dist/cjs/reactive/live-query.js.map +1 -0
  141. package/dist/cjs/schema/cast.d.ts +38 -0
  142. package/dist/cjs/schema/cast.d.ts.map +1 -0
  143. package/dist/cjs/schema/cast.js +280 -0
  144. package/dist/cjs/schema/cast.js.map +1 -0
  145. package/dist/cjs/schema/index.d.ts +5 -0
  146. package/dist/cjs/schema/index.d.ts.map +1 -0
  147. package/dist/cjs/schema/index.js +27 -0
  148. package/dist/cjs/schema/index.js.map +1 -0
  149. package/dist/cjs/schema/schema.d.ts +58 -0
  150. package/dist/cjs/schema/schema.d.ts.map +1 -0
  151. package/dist/cjs/schema/schema.js +363 -0
  152. package/dist/cjs/schema/schema.js.map +1 -0
  153. package/dist/cjs/schema/types.d.ts +144 -0
  154. package/dist/cjs/schema/types.d.ts.map +1 -0
  155. package/dist/cjs/schema/types.js +20 -0
  156. package/dist/cjs/schema/types.js.map +1 -0
  157. package/dist/cjs/schema/validate.d.ts +15 -0
  158. package/dist/cjs/schema/validate.d.ts.map +1 -0
  159. package/dist/cjs/schema/validate.js +101 -0
  160. package/dist/cjs/schema/validate.js.map +1 -0
  161. package/dist/cjs/storage/adapters/capacitor-sqlite.d.ts +67 -0
  162. package/dist/cjs/storage/adapters/capacitor-sqlite.d.ts.map +1 -0
  163. package/dist/cjs/storage/adapters/capacitor-sqlite.js +69 -0
  164. package/dist/cjs/storage/adapters/capacitor-sqlite.js.map +1 -0
  165. package/dist/cjs/storage/adapters/expo-sqlite.d.ts +55 -0
  166. package/dist/cjs/storage/adapters/expo-sqlite.d.ts.map +1 -0
  167. package/dist/cjs/storage/adapters/expo-sqlite.js +53 -0
  168. package/dist/cjs/storage/adapters/expo-sqlite.js.map +1 -0
  169. package/dist/cjs/storage/adapters/indexeddb.d.ts +55 -0
  170. package/dist/cjs/storage/adapters/indexeddb.d.ts.map +1 -0
  171. package/dist/cjs/storage/adapters/indexeddb.js +393 -0
  172. package/dist/cjs/storage/adapters/indexeddb.js.map +1 -0
  173. package/dist/cjs/storage/adapters/memory.d.ts +44 -0
  174. package/dist/cjs/storage/adapters/memory.d.ts.map +1 -0
  175. package/dist/cjs/storage/adapters/memory.js +286 -0
  176. package/dist/cjs/storage/adapters/memory.js.map +1 -0
  177. package/dist/cjs/storage/adapters/node-sqlite.d.ts +59 -0
  178. package/dist/cjs/storage/adapters/node-sqlite.d.ts.map +1 -0
  179. package/dist/cjs/storage/adapters/node-sqlite.js +457 -0
  180. package/dist/cjs/storage/adapters/node-sqlite.js.map +1 -0
  181. package/dist/cjs/storage/adapters/sql-base.d.ts +84 -0
  182. package/dist/cjs/storage/adapters/sql-base.d.ts.map +1 -0
  183. package/dist/cjs/storage/adapters/sql-base.js +393 -0
  184. package/dist/cjs/storage/adapters/sql-base.js.map +1 -0
  185. package/dist/cjs/storage/types.d.ts +131 -0
  186. package/dist/cjs/storage/types.d.ts.map +1 -0
  187. package/dist/cjs/storage/types.js +3 -0
  188. package/dist/cjs/storage/types.js.map +1 -0
  189. package/dist/cjs/sync/adapters/rest.d.ts +31 -0
  190. package/dist/cjs/sync/adapters/rest.d.ts.map +1 -0
  191. package/dist/cjs/sync/adapters/rest.js +75 -0
  192. package/dist/cjs/sync/adapters/rest.js.map +1 -0
  193. package/dist/cjs/sync/attach.d.ts +30 -0
  194. package/dist/cjs/sync/attach.d.ts.map +1 -0
  195. package/dist/cjs/sync/attach.js +104 -0
  196. package/dist/cjs/sync/attach.js.map +1 -0
  197. package/dist/cjs/sync/engine.d.ts +96 -0
  198. package/dist/cjs/sync/engine.d.ts.map +1 -0
  199. package/dist/cjs/sync/engine.js +491 -0
  200. package/dist/cjs/sync/engine.js.map +1 -0
  201. package/dist/cjs/sync/protocol.d.ts +128 -0
  202. package/dist/cjs/sync/protocol.d.ts.map +1 -0
  203. package/dist/cjs/sync/protocol.js +38 -0
  204. package/dist/cjs/sync/protocol.js.map +1 -0
  205. package/dist/cjs/sync/queue.d.ts +77 -0
  206. package/dist/cjs/sync/queue.d.ts.map +1 -0
  207. package/dist/cjs/sync/queue.js +245 -0
  208. package/dist/cjs/sync/queue.js.map +1 -0
  209. package/dist/cjs/sync/server/memory-server.d.ts +65 -0
  210. package/dist/cjs/sync/server/memory-server.d.ts.map +1 -0
  211. package/dist/cjs/sync/server/memory-server.js +193 -0
  212. package/dist/cjs/sync/server/memory-server.js.map +1 -0
  213. package/dist/cjs/timestamps/index.d.ts +47 -0
  214. package/dist/cjs/timestamps/index.d.ts.map +1 -0
  215. package/dist/cjs/timestamps/index.js +88 -0
  216. package/dist/cjs/timestamps/index.js.map +1 -0
  217. package/dist/cjs/timestamps/timezone.d.ts +65 -0
  218. package/dist/cjs/timestamps/timezone.d.ts.map +1 -0
  219. package/dist/cjs/timestamps/timezone.js +208 -0
  220. package/dist/cjs/timestamps/timezone.js.map +1 -0
  221. package/dist/esm/conflict/strategies.d.ts +110 -0
  222. package/dist/esm/conflict/strategies.d.ts.map +1 -0
  223. package/dist/esm/conflict/strategies.js +289 -0
  224. package/dist/esm/conflict/strategies.js.map +1 -0
  225. package/dist/esm/conflict/types.d.ts +38 -0
  226. package/dist/esm/conflict/types.d.ts.map +1 -0
  227. package/dist/esm/conflict/types.js +2 -0
  228. package/dist/esm/conflict/types.js.map +1 -0
  229. package/dist/esm/core/anchor-db.d.ts +154 -0
  230. package/dist/esm/core/anchor-db.d.ts.map +1 -0
  231. package/dist/esm/core/anchor-db.js +269 -0
  232. package/dist/esm/core/anchor-db.js.map +1 -0
  233. package/dist/esm/core/errors.d.ts +125 -0
  234. package/dist/esm/core/errors.d.ts.map +1 -0
  235. package/dist/esm/core/errors.js +161 -0
  236. package/dist/esm/core/errors.js.map +1 -0
  237. package/dist/esm/core/hex.d.ts +4 -0
  238. package/dist/esm/core/hex.d.ts.map +1 -0
  239. package/dist/esm/core/hex.js +37 -0
  240. package/dist/esm/core/hex.js.map +1 -0
  241. package/dist/esm/core/hlc.d.ts +96 -0
  242. package/dist/esm/core/hlc.d.ts.map +1 -0
  243. package/dist/esm/core/hlc.js +153 -0
  244. package/dist/esm/core/hlc.js.map +1 -0
  245. package/dist/esm/core/object-id.d.ts +38 -0
  246. package/dist/esm/core/object-id.d.ts.map +1 -0
  247. package/dist/esm/core/object-id.js +163 -0
  248. package/dist/esm/core/object-id.js.map +1 -0
  249. package/dist/esm/core/random.d.ts +6 -0
  250. package/dist/esm/core/random.d.ts.map +1 -0
  251. package/dist/esm/core/random.js +34 -0
  252. package/dist/esm/core/random.js.map +1 -0
  253. package/dist/esm/core/runtime.d.ts +96 -0
  254. package/dist/esm/core/runtime.d.ts.map +1 -0
  255. package/dist/esm/core/runtime.js +2 -0
  256. package/dist/esm/core/runtime.js.map +1 -0
  257. package/dist/esm/core/uuid.d.ts +16 -0
  258. package/dist/esm/core/uuid.d.ts.map +1 -0
  259. package/dist/esm/core/uuid.js +33 -0
  260. package/dist/esm/core/uuid.js.map +1 -0
  261. package/dist/esm/decorators/index.d.ts +48 -0
  262. package/dist/esm/decorators/index.d.ts.map +1 -0
  263. package/dist/esm/decorators/index.js +286 -0
  264. package/dist/esm/decorators/index.js.map +1 -0
  265. package/dist/esm/events/emitter.d.ts +16 -0
  266. package/dist/esm/events/emitter.d.ts.map +1 -0
  267. package/dist/esm/events/emitter.js +52 -0
  268. package/dist/esm/events/emitter.js.map +1 -0
  269. package/dist/esm/index/keys.d.ts +79 -0
  270. package/dist/esm/index/keys.d.ts.map +1 -0
  271. package/dist/esm/index/keys.js +198 -0
  272. package/dist/esm/index/keys.js.map +1 -0
  273. package/dist/esm/index.d.ts +81 -0
  274. package/dist/esm/index.d.ts.map +1 -0
  275. package/dist/esm/index.js +59 -0
  276. package/dist/esm/index.js.map +1 -0
  277. package/dist/esm/inspector/agent.d.ts +75 -0
  278. package/dist/esm/inspector/agent.d.ts.map +1 -0
  279. package/dist/esm/inspector/agent.js +482 -0
  280. package/dist/esm/inspector/agent.js.map +1 -0
  281. package/dist/esm/inspector/auth.d.ts +49 -0
  282. package/dist/esm/inspector/auth.d.ts.map +1 -0
  283. package/dist/esm/inspector/auth.js +228 -0
  284. package/dist/esm/inspector/auth.js.map +1 -0
  285. package/dist/esm/inspector/bridge.d.ts +141 -0
  286. package/dist/esm/inspector/bridge.d.ts.map +1 -0
  287. package/dist/esm/inspector/bridge.js +182 -0
  288. package/dist/esm/inspector/bridge.js.map +1 -0
  289. package/dist/esm/inspector/client.d.ts +111 -0
  290. package/dist/esm/inspector/client.d.ts.map +1 -0
  291. package/dist/esm/inspector/client.js +213 -0
  292. package/dist/esm/inspector/client.js.map +1 -0
  293. package/dist/esm/inspector/protocol.d.ts +160 -0
  294. package/dist/esm/inspector/protocol.d.ts.map +1 -0
  295. package/dist/esm/inspector/protocol.js +43 -0
  296. package/dist/esm/inspector/protocol.js.map +1 -0
  297. package/dist/esm/inspector/transports/in-process.d.ts +7 -0
  298. package/dist/esm/inspector/transports/in-process.d.ts.map +1 -0
  299. package/dist/esm/inspector/transports/in-process.js +55 -0
  300. package/dist/esm/inspector/transports/in-process.js.map +1 -0
  301. package/dist/esm/inspector/transports/websocket.d.ts +39 -0
  302. package/dist/esm/inspector/transports/websocket.d.ts.map +1 -0
  303. package/dist/esm/inspector/transports/websocket.js +56 -0
  304. package/dist/esm/inspector/transports/websocket.js.map +1 -0
  305. package/dist/esm/interop/csv.d.ts +53 -0
  306. package/dist/esm/interop/csv.d.ts.map +1 -0
  307. package/dist/esm/interop/csv.js +222 -0
  308. package/dist/esm/interop/csv.js.map +1 -0
  309. package/dist/esm/interop/ejson.d.ts +41 -0
  310. package/dist/esm/interop/ejson.d.ts.map +1 -0
  311. package/dist/esm/interop/ejson.js +176 -0
  312. package/dist/esm/interop/ejson.js.map +1 -0
  313. package/dist/esm/interop/export-import.d.ts +98 -0
  314. package/dist/esm/interop/export-import.d.ts.map +1 -0
  315. package/dist/esm/interop/export-import.js +210 -0
  316. package/dist/esm/interop/export-import.js.map +1 -0
  317. package/dist/esm/model/document.d.ts +66 -0
  318. package/dist/esm/model/document.d.ts.map +1 -0
  319. package/dist/esm/model/document.js +297 -0
  320. package/dist/esm/model/document.js.map +1 -0
  321. package/dist/esm/model/model.d.ts +178 -0
  322. package/dist/esm/model/model.d.ts.map +1 -0
  323. package/dist/esm/model/model.js +815 -0
  324. package/dist/esm/model/model.js.map +1 -0
  325. package/dist/esm/package.json +3 -0
  326. package/dist/esm/query/aggregation/expressions.d.ts +34 -0
  327. package/dist/esm/query/aggregation/expressions.d.ts.map +1 -0
  328. package/dist/esm/query/aggregation/expressions.js +545 -0
  329. package/dist/esm/query/aggregation/expressions.js.map +1 -0
  330. package/dist/esm/query/aggregation/pipeline.d.ts +79 -0
  331. package/dist/esm/query/aggregation/pipeline.d.ts.map +1 -0
  332. package/dist/esm/query/aggregation/pipeline.js +591 -0
  333. package/dist/esm/query/aggregation/pipeline.js.map +1 -0
  334. package/dist/esm/query/aggregation/source.d.ts +35 -0
  335. package/dist/esm/query/aggregation/source.d.ts.map +1 -0
  336. package/dist/esm/query/aggregation/source.js +77 -0
  337. package/dist/esm/query/aggregation/source.js.map +1 -0
  338. package/dist/esm/query/builder/query.d.ts +113 -0
  339. package/dist/esm/query/builder/query.d.ts.map +1 -0
  340. package/dist/esm/query/builder/query.js +209 -0
  341. package/dist/esm/query/builder/query.js.map +1 -0
  342. package/dist/esm/query/filter.d.ts +50 -0
  343. package/dist/esm/query/filter.d.ts.map +1 -0
  344. package/dist/esm/query/filter.js +267 -0
  345. package/dist/esm/query/filter.js.map +1 -0
  346. package/dist/esm/query/path.d.ts +41 -0
  347. package/dist/esm/query/path.d.ts.map +1 -0
  348. package/dist/esm/query/path.js +282 -0
  349. package/dist/esm/query/path.js.map +1 -0
  350. package/dist/esm/query/update.d.ts +30 -0
  351. package/dist/esm/query/update.d.ts.map +1 -0
  352. package/dist/esm/query/update.js +198 -0
  353. package/dist/esm/query/update.js.map +1 -0
  354. package/dist/esm/reactive/live-query.d.ts +41 -0
  355. package/dist/esm/reactive/live-query.d.ts.map +1 -0
  356. package/dist/esm/reactive/live-query.js +83 -0
  357. package/dist/esm/reactive/live-query.js.map +1 -0
  358. package/dist/esm/schema/cast.d.ts +38 -0
  359. package/dist/esm/schema/cast.d.ts.map +1 -0
  360. package/dist/esm/schema/cast.js +275 -0
  361. package/dist/esm/schema/cast.js.map +1 -0
  362. package/dist/esm/schema/index.d.ts +5 -0
  363. package/dist/esm/schema/index.d.ts.map +1 -0
  364. package/dist/esm/schema/index.js +5 -0
  365. package/dist/esm/schema/index.js.map +1 -0
  366. package/dist/esm/schema/schema.d.ts +58 -0
  367. package/dist/esm/schema/schema.d.ts.map +1 -0
  368. package/dist/esm/schema/schema.js +358 -0
  369. package/dist/esm/schema/schema.js.map +1 -0
  370. package/dist/esm/schema/types.d.ts +144 -0
  371. package/dist/esm/schema/types.d.ts.map +1 -0
  372. package/dist/esm/schema/types.js +17 -0
  373. package/dist/esm/schema/types.js.map +1 -0
  374. package/dist/esm/schema/validate.d.ts +15 -0
  375. package/dist/esm/schema/validate.d.ts.map +1 -0
  376. package/dist/esm/schema/validate.js +98 -0
  377. package/dist/esm/schema/validate.js.map +1 -0
  378. package/dist/esm/storage/adapters/capacitor-sqlite.d.ts +67 -0
  379. package/dist/esm/storage/adapters/capacitor-sqlite.d.ts.map +1 -0
  380. package/dist/esm/storage/adapters/capacitor-sqlite.js +65 -0
  381. package/dist/esm/storage/adapters/capacitor-sqlite.js.map +1 -0
  382. package/dist/esm/storage/adapters/expo-sqlite.d.ts +55 -0
  383. package/dist/esm/storage/adapters/expo-sqlite.d.ts.map +1 -0
  384. package/dist/esm/storage/adapters/expo-sqlite.js +49 -0
  385. package/dist/esm/storage/adapters/expo-sqlite.js.map +1 -0
  386. package/dist/esm/storage/adapters/indexeddb.d.ts +55 -0
  387. package/dist/esm/storage/adapters/indexeddb.d.ts.map +1 -0
  388. package/dist/esm/storage/adapters/indexeddb.js +389 -0
  389. package/dist/esm/storage/adapters/indexeddb.js.map +1 -0
  390. package/dist/esm/storage/adapters/memory.d.ts +44 -0
  391. package/dist/esm/storage/adapters/memory.d.ts.map +1 -0
  392. package/dist/esm/storage/adapters/memory.js +282 -0
  393. package/dist/esm/storage/adapters/memory.js.map +1 -0
  394. package/dist/esm/storage/adapters/node-sqlite.d.ts +59 -0
  395. package/dist/esm/storage/adapters/node-sqlite.d.ts.map +1 -0
  396. package/dist/esm/storage/adapters/node-sqlite.js +450 -0
  397. package/dist/esm/storage/adapters/node-sqlite.js.map +1 -0
  398. package/dist/esm/storage/adapters/sql-base.d.ts +84 -0
  399. package/dist/esm/storage/adapters/sql-base.d.ts.map +1 -0
  400. package/dist/esm/storage/adapters/sql-base.js +383 -0
  401. package/dist/esm/storage/adapters/sql-base.js.map +1 -0
  402. package/dist/esm/storage/types.d.ts +131 -0
  403. package/dist/esm/storage/types.d.ts.map +1 -0
  404. package/dist/esm/storage/types.js +2 -0
  405. package/dist/esm/storage/types.js.map +1 -0
  406. package/dist/esm/sync/adapters/rest.d.ts +31 -0
  407. package/dist/esm/sync/adapters/rest.d.ts.map +1 -0
  408. package/dist/esm/sync/adapters/rest.js +71 -0
  409. package/dist/esm/sync/adapters/rest.js.map +1 -0
  410. package/dist/esm/sync/attach.d.ts +30 -0
  411. package/dist/esm/sync/attach.d.ts.map +1 -0
  412. package/dist/esm/sync/attach.js +98 -0
  413. package/dist/esm/sync/attach.js.map +1 -0
  414. package/dist/esm/sync/engine.d.ts +96 -0
  415. package/dist/esm/sync/engine.d.ts.map +1 -0
  416. package/dist/esm/sync/engine.js +487 -0
  417. package/dist/esm/sync/engine.js.map +1 -0
  418. package/dist/esm/sync/protocol.d.ts +128 -0
  419. package/dist/esm/sync/protocol.d.ts.map +1 -0
  420. package/dist/esm/sync/protocol.js +33 -0
  421. package/dist/esm/sync/protocol.js.map +1 -0
  422. package/dist/esm/sync/queue.d.ts +77 -0
  423. package/dist/esm/sync/queue.d.ts.map +1 -0
  424. package/dist/esm/sync/queue.js +241 -0
  425. package/dist/esm/sync/queue.js.map +1 -0
  426. package/dist/esm/sync/server/memory-server.d.ts +65 -0
  427. package/dist/esm/sync/server/memory-server.d.ts.map +1 -0
  428. package/dist/esm/sync/server/memory-server.js +189 -0
  429. package/dist/esm/sync/server/memory-server.js.map +1 -0
  430. package/dist/esm/timestamps/index.d.ts +47 -0
  431. package/dist/esm/timestamps/index.d.ts.map +1 -0
  432. package/dist/esm/timestamps/index.js +70 -0
  433. package/dist/esm/timestamps/index.js.map +1 -0
  434. package/dist/esm/timestamps/timezone.d.ts +65 -0
  435. package/dist/esm/timestamps/timezone.d.ts.map +1 -0
  436. package/dist/esm/timestamps/timezone.js +196 -0
  437. package/dist/esm/timestamps/timezone.js.map +1 -0
  438. package/package.json +163 -0
@@ -0,0 +1,597 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MISSING = void 0;
4
+ exports.validatePipeline = validatePipeline;
5
+ exports.planPushdown = planPushdown;
6
+ exports.runPipeline = runPipeline;
7
+ const errors_ts_1 = require("../../core/errors.js");
8
+ const path_ts_1 = require("../path.js");
9
+ const filter_ts_1 = require("../filter.js");
10
+ const query_ts_1 = require("../builder/query.js");
11
+ const expressions_ts_1 = require("./expressions.js");
12
+ Object.defineProperty(exports, "MISSING", { enumerable: true, get: function () { return expressions_ts_1.MISSING; } });
13
+ /** Stages MongoDB has. Anything else is rejected under `mongoCompatible`. */
14
+ const PORTABLE_STAGES = new Set([
15
+ "$match", "$project", "$addFields", "$set", "$unset", "$group", "$sort", "$limit", "$skip",
16
+ "$count", "$unwind", "$lookup", "$replaceRoot", "$replaceWith", "$sortByCount", "$facet", "$sample",
17
+ ]);
18
+ /**
19
+ * Accumulators are MongoDB operators too, but they live in $group rather than the expression
20
+ * registry, so strict mode has to know about them separately — otherwise a perfectly portable
21
+ * { $sum: 1 } would be reported as an AnchorDB extension.
22
+ */
23
+ const PORTABLE_ACCUMULATORS = new Set([
24
+ "$sum", "$avg", "$min", "$max", "$count", "$first", "$last", "$push", "$addToSet",
25
+ ]);
26
+ /** Explicitly out of scope in v1 — named so the error is actionable rather than mysterious. */
27
+ const UNSUPPORTED_STAGES = {
28
+ $graphLookup: "recursive graph traversal is not supported",
29
+ $geoNear: "geospatial indexes are not supported",
30
+ $search: "Atlas Search is a hosted service",
31
+ $merge: "writing to another collection is not supported",
32
+ $out: "writing to another collection is not supported",
33
+ $unionWith: "cross-collection unions are not supported",
34
+ $bucket: "not supported in v1",
35
+ $bucketAuto: "not supported in v1",
36
+ $densify: "not supported in v1",
37
+ $fill: "not supported in v1",
38
+ };
39
+ function validatePipeline(pipeline, options = {}) {
40
+ for (const [i, stage] of pipeline.entries()) {
41
+ const keys = Object.keys(stage);
42
+ if (keys.length !== 1) {
43
+ throw new errors_ts_1.AnchorError(`Pipeline stage ${i} must contain exactly one key, found: ${keys.join(", ") || "none"}`);
44
+ }
45
+ const name = keys[0];
46
+ if (name in UNSUPPORTED_STAGES) {
47
+ throw new errors_ts_1.AnchorError(`Aggregation stage "${name}" is not supported by AnchorDB: ${UNSUPPORTED_STAGES[name]}. ` +
48
+ `See AGGREGATION.md for the full compatibility matrix.`);
49
+ }
50
+ if (!PORTABLE_STAGES.has(name)) {
51
+ throw new errors_ts_1.AnchorError(`Unknown aggregation stage "${name}" at position ${i}`);
52
+ }
53
+ if (options.mongoCompatible)
54
+ assertPortableExpressions(stage[name], `${name} (stage ${i})`);
55
+ }
56
+ }
57
+ /**
58
+ * Walk an expression tree rejecting anything MongoDB does not have.
59
+ *
60
+ * This exists so "the pipeline pastes into Model.aggregate()" can be *checked* at development time
61
+ * rather than discovered in production when the backend rejects it.
62
+ */
63
+ function assertPortableExpressions(node, where) {
64
+ if (node === null || typeof node !== "object")
65
+ return;
66
+ if (Array.isArray(node)) {
67
+ for (const item of node)
68
+ assertPortableExpressions(item, where);
69
+ return;
70
+ }
71
+ for (const [key, value] of Object.entries(node)) {
72
+ if (key.startsWith("$") &&
73
+ !(0, expressions_ts_1.isPortableOperator)(key) &&
74
+ !PORTABLE_STAGES.has(key) &&
75
+ !PORTABLE_ACCUMULATORS.has(key)) {
76
+ throw new errors_ts_1.AnchorError(`Operator "${key}" in ${where} is an AnchorDB extension and does not exist in MongoDB. ` +
77
+ `Remove it, or drop { mongoCompatible: true } if this pipeline is not meant to be portable.`);
78
+ }
79
+ assertPortableExpressions(value, where);
80
+ }
81
+ }
82
+ /**
83
+ * Split the leading run of pushable stages from the rest.
84
+ *
85
+ * Stops at the first stage the storage engine cannot express exactly. `$sort` may only push down
86
+ * before any `$limit`/`$skip` has been consumed, because sorting after limiting is a different
87
+ * query.
88
+ */
89
+ function planPushdown(pipeline) {
90
+ const pushdown = {};
91
+ let i = 0;
92
+ let sawPaging = false;
93
+ for (; i < pipeline.length; i++) {
94
+ const stage = pipeline[i];
95
+ const name = Object.keys(stage)[0];
96
+ if (name === "$match" && !pushdown.filter && !sawPaging) {
97
+ pushdown.filter = stage.$match;
98
+ continue;
99
+ }
100
+ if (name === "$sort" && !pushdown.sort && !sawPaging) {
101
+ pushdown.sort = (0, query_ts_1.normaliseSort)(stage.$sort);
102
+ continue;
103
+ }
104
+ if (name === "$skip") {
105
+ pushdown.skip = (pushdown.skip ?? 0) + Number(stage.$skip);
106
+ sawPaging = true;
107
+ continue;
108
+ }
109
+ if (name === "$limit") {
110
+ const value = Number(stage.$limit);
111
+ pushdown.limit = pushdown.limit === undefined ? value : Math.min(pushdown.limit, value);
112
+ sawPaging = true;
113
+ continue;
114
+ }
115
+ break;
116
+ }
117
+ return { pushdown, rest: pipeline.slice(i), consumed: i };
118
+ }
119
+ async function runPipeline(pipeline, source, options = {}) {
120
+ validatePipeline(pipeline, options);
121
+ const { pushdown, rest, consumed } = planPushdown(pipeline);
122
+ let examined = 0;
123
+ const counted = async function* () {
124
+ for await (const doc of source.stream(pushdown)) {
125
+ examined++;
126
+ yield doc;
127
+ }
128
+ };
129
+ let stream = counted();
130
+ for (const stage of rest) {
131
+ stream = applyStage(stage, stream, source, options);
132
+ }
133
+ const documents = [];
134
+ for await (const doc of stream)
135
+ documents.push(doc);
136
+ if (!options.explain)
137
+ return { documents };
138
+ const scan = source.explainLast();
139
+ return {
140
+ documents,
141
+ explain: {
142
+ stages: pipeline.map((s) => Object.keys(s)[0]),
143
+ pushedDown: { ...pushdown, stageCount: consumed },
144
+ executedInJs: rest.map((s) => Object.keys(s)[0]),
145
+ indexUsed: scan.indexUsed,
146
+ scanStage: scan.stage,
147
+ documentsExamined: examined,
148
+ documentsReturned: documents.length,
149
+ },
150
+ };
151
+ }
152
+ function contextFor(doc, options) {
153
+ return {
154
+ root: doc,
155
+ current: doc,
156
+ vars: {},
157
+ ...(options.timezone ? { timezone: options.timezone } : {}),
158
+ };
159
+ }
160
+ function applyStage(stage, input, source, options) {
161
+ const name = Object.keys(stage)[0];
162
+ const spec = stage[name];
163
+ switch (name) {
164
+ case "$match":
165
+ return filterStage(input, spec);
166
+ case "$project":
167
+ return projectStage(input, spec, options);
168
+ case "$addFields":
169
+ case "$set":
170
+ return addFieldsStage(input, spec, options);
171
+ case "$unset":
172
+ return unsetStage(input, spec);
173
+ case "$limit":
174
+ return limitStage(input, Number(spec));
175
+ case "$skip":
176
+ return skipStage(input, Number(spec));
177
+ case "$unwind":
178
+ return unwindStage(input, spec);
179
+ case "$sort":
180
+ return sortStage(input, (0, query_ts_1.normaliseSort)(spec), options);
181
+ case "$group":
182
+ return groupStage(input, spec, options);
183
+ case "$count":
184
+ return countStage(input, String(spec));
185
+ case "$sortByCount":
186
+ return sortByCountStage(input, spec, options);
187
+ case "$replaceRoot":
188
+ return replaceRootStage(input, spec.newRoot, options);
189
+ case "$replaceWith":
190
+ return replaceRootStage(input, spec, options);
191
+ case "$lookup":
192
+ return lookupStage(input, spec, source);
193
+ case "$sample":
194
+ return sampleStage(input, Number(spec.size), options);
195
+ case "$facet":
196
+ return facetStage(input, spec, source, options);
197
+ default:
198
+ throw new errors_ts_1.AnchorError(`Unhandled aggregation stage "${name}"`);
199
+ }
200
+ }
201
+ // ---- streaming stages ------------------------------------------------------
202
+ async function* filterStage(input, filter) {
203
+ for await (const doc of input) {
204
+ if ((0, filter_ts_1.matchesFilter)(doc, filter))
205
+ yield doc;
206
+ }
207
+ }
208
+ async function* limitStage(input, limit) {
209
+ if (limit <= 0)
210
+ return;
211
+ let seen = 0;
212
+ for await (const doc of input) {
213
+ yield doc;
214
+ // Early termination: return() closes the upstream generator so nothing further is produced.
215
+ if (++seen >= limit) {
216
+ await input.return(undefined);
217
+ return;
218
+ }
219
+ }
220
+ }
221
+ async function* skipStage(input, skip) {
222
+ let seen = 0;
223
+ for await (const doc of input) {
224
+ if (seen++ < skip)
225
+ continue;
226
+ yield doc;
227
+ }
228
+ }
229
+ async function* addFieldsStage(input, spec, options) {
230
+ for await (const doc of input) {
231
+ const out = (0, path_ts_1.deepClone)(doc);
232
+ for (const [path, expr] of Object.entries(spec)) {
233
+ const value = (0, expressions_ts_1.evaluate)(expr, contextFor(doc, options));
234
+ if (value === expressions_ts_1.MISSING)
235
+ (0, path_ts_1.unsetPath)(out, path);
236
+ else
237
+ (0, path_ts_1.setPath)(out, path, value);
238
+ }
239
+ yield out;
240
+ }
241
+ }
242
+ async function* unsetStage(input, spec) {
243
+ const paths = Array.isArray(spec) ? spec : [spec];
244
+ for await (const doc of input) {
245
+ const out = (0, path_ts_1.deepClone)(doc);
246
+ for (const path of paths)
247
+ (0, path_ts_1.unsetPath)(out, path);
248
+ yield out;
249
+ }
250
+ }
251
+ /**
252
+ * `$project` is either inclusive or exclusive, never both — except that `_id` may always be
253
+ * excluded. Mongo rejects mixing them, and so do we: silently guessing produces a shape the author
254
+ * did not ask for.
255
+ */
256
+ async function* projectStage(input, spec, options) {
257
+ const entries = Object.entries(spec);
258
+ const nonId = entries.filter(([k]) => k !== "_id");
259
+ const including = nonId.some(([, v]) => v !== 0 && v !== false);
260
+ const excluding = nonId.some(([, v]) => v === 0 || v === false);
261
+ if (including && excluding) {
262
+ throw new errors_ts_1.AnchorError("$project cannot mix inclusion and exclusion (except for _id)");
263
+ }
264
+ for await (const doc of input) {
265
+ const ctx = contextFor(doc, options);
266
+ if (!including) {
267
+ const out = (0, path_ts_1.deepClone)(doc);
268
+ for (const [path, value] of entries) {
269
+ if (value === 0 || value === false)
270
+ (0, path_ts_1.unsetPath)(out, path);
271
+ }
272
+ yield out;
273
+ continue;
274
+ }
275
+ const out = {};
276
+ if (spec._id !== 0 && spec._id !== false && doc._id !== undefined)
277
+ out._id = doc._id;
278
+ for (const [path, value] of entries) {
279
+ if (path === "_id") {
280
+ if (value !== 0 && value !== false && value !== 1 && value !== true) {
281
+ const computed = (0, expressions_ts_1.evaluate)(value, ctx);
282
+ if (computed !== expressions_ts_1.MISSING)
283
+ out._id = computed;
284
+ }
285
+ continue;
286
+ }
287
+ if (value === 1 || value === true) {
288
+ const existing = (0, path_ts_1.getPath)(doc, path);
289
+ if (existing !== undefined)
290
+ (0, path_ts_1.setPath)(out, path, existing);
291
+ }
292
+ else {
293
+ const computed = (0, expressions_ts_1.evaluate)(value, ctx);
294
+ if (computed !== expressions_ts_1.MISSING)
295
+ (0, path_ts_1.setPath)(out, path, computed);
296
+ }
297
+ }
298
+ yield out;
299
+ }
300
+ }
301
+ /**
302
+ * `$unwind` drops documents whose array is empty, null or missing — unless
303
+ * `preserveNullAndEmptyArrays` is set. That default surprises people, so it is reproduced exactly
304
+ * rather than "improved".
305
+ */
306
+ async function* unwindStage(input, spec) {
307
+ const config = typeof spec === "string" ? { path: spec } : spec;
308
+ const path = config.path.startsWith("$") ? config.path.slice(1) : config.path;
309
+ for await (const doc of input) {
310
+ const value = (0, path_ts_1.getPath)(doc, path);
311
+ if (value === undefined || value === null || (Array.isArray(value) && value.length === 0)) {
312
+ if (config.preserveNullAndEmptyArrays) {
313
+ const out = (0, path_ts_1.deepClone)(doc);
314
+ (0, path_ts_1.unsetPath)(out, path);
315
+ if (config.includeArrayIndex)
316
+ (0, path_ts_1.setPath)(out, config.includeArrayIndex, null);
317
+ yield out;
318
+ }
319
+ continue;
320
+ }
321
+ if (!Array.isArray(value)) {
322
+ yield doc; // a non-array value passes through unchanged, as in Mongo
323
+ continue;
324
+ }
325
+ for (const [index, item] of value.entries()) {
326
+ const out = (0, path_ts_1.deepClone)(doc);
327
+ (0, path_ts_1.setPath)(out, path, item);
328
+ if (config.includeArrayIndex)
329
+ (0, path_ts_1.setPath)(out, config.includeArrayIndex, index);
330
+ yield out;
331
+ }
332
+ }
333
+ }
334
+ async function* replaceRootStage(input, expr, options) {
335
+ for await (const doc of input) {
336
+ const value = (0, expressions_ts_1.evaluate)(expr, contextFor(doc, options));
337
+ if (value === expressions_ts_1.MISSING || value === null || typeof value !== "object" || Array.isArray(value)) {
338
+ throw new errors_ts_1.AnchorError("$replaceRoot requires the new root to evaluate to an object");
339
+ }
340
+ yield value;
341
+ }
342
+ }
343
+ // ---- blocking stages -------------------------------------------------------
344
+ async function collect(input, options, stage) {
345
+ const max = options.maxBlockingDocs ?? 500_000;
346
+ const out = [];
347
+ for await (const doc of input) {
348
+ out.push(doc);
349
+ if (out.length > max) {
350
+ // Fail loudly rather than exhausting memory on a device.
351
+ throw new errors_ts_1.AnchorError(`${stage} exceeded maxBlockingDocs (${max}). It must buffer its whole input; ` +
352
+ `add an earlier $match or $limit, or raise maxBlockingDocs if this is expected.`);
353
+ }
354
+ }
355
+ return out;
356
+ }
357
+ async function* sortStage(input, sort, options) {
358
+ const docs = await collect(input, options, "$sort");
359
+ docs.sort((a, b) => {
360
+ for (const [path, dir] of sort) {
361
+ const c = (0, path_ts_1.compareValues)((0, path_ts_1.getPath)(a, path), (0, path_ts_1.getPath)(b, path));
362
+ if (c !== 0)
363
+ return dir === 1 ? c : -c;
364
+ }
365
+ return 0;
366
+ });
367
+ for (const doc of docs)
368
+ yield doc;
369
+ }
370
+ async function* countStage(input, field) {
371
+ let n = 0;
372
+ for await (const _ of input)
373
+ n++;
374
+ yield { [field]: n };
375
+ }
376
+ async function* sampleStage(input, size, options) {
377
+ const docs = await collect(input, options, "$sample");
378
+ for (let i = docs.length - 1; i > 0; i--) {
379
+ const j = Math.floor(Math.random() * (i + 1));
380
+ [docs[i], docs[j]] = [docs[j], docs[i]];
381
+ }
382
+ for (const doc of docs.slice(0, size))
383
+ yield doc;
384
+ }
385
+ /**
386
+ * `$group` accumulates incrementally — only one accumulator state per group is held, not the
387
+ * documents themselves. Grouping a million documents into ten buckets therefore costs ten states,
388
+ * which is what makes it usable on a phone.
389
+ */
390
+ async function* groupStage(input, spec, options) {
391
+ const accumulators = Object.entries(spec).filter(([k]) => k !== "_id");
392
+ const groups = new Map();
393
+ const max = options.maxBlockingDocs ?? 500_000;
394
+ for await (const doc of input) {
395
+ const ctx = contextFor(doc, options);
396
+ const rawId = (0, expressions_ts_1.evaluate)(spec._id, ctx);
397
+ const id = rawId === expressions_ts_1.MISSING ? null : rawId;
398
+ const key = JSON.stringify(id ?? null);
399
+ let group = groups.get(key);
400
+ if (!group) {
401
+ if (groups.size >= max) {
402
+ throw new errors_ts_1.AnchorError(`$group exceeded maxBlockingDocs (${max}) distinct groups. Narrow the grouping key ` +
403
+ `or raise maxBlockingDocs.`);
404
+ }
405
+ group = { id, states: new Map() };
406
+ for (const [field, accSpec] of accumulators) {
407
+ group.states.set(field, createAccumulator(accSpec, field));
408
+ }
409
+ groups.set(key, group);
410
+ }
411
+ for (const [field] of accumulators) {
412
+ group.states.get(field).push(ctx);
413
+ }
414
+ }
415
+ for (const group of groups.values()) {
416
+ const out = { _id: group.id };
417
+ for (const [field, state] of group.states)
418
+ out[field] = state.value();
419
+ yield out;
420
+ }
421
+ }
422
+ async function* sortByCountStage(input, expr, options) {
423
+ const grouped = groupStage(input, { _id: expr, count: { $sum: 1 } }, options);
424
+ const docs = await collect(grouped, options, "$sortByCount");
425
+ docs.sort((a, b) => Number(b.count) - Number(a.count));
426
+ for (const doc of docs)
427
+ yield doc;
428
+ }
429
+ /**
430
+ * `$lookup` batches: it buffers the incoming documents, collects every local value at once, issues
431
+ * ONE query against the foreign collection, then joins in memory. The naive alternative — a query
432
+ * per document — turns a 1000-row pipeline into 1000 round trips.
433
+ */
434
+ async function* lookupStage(input, spec, source) {
435
+ if (!spec.from || !spec.localField || !spec.foreignField || !spec.as) {
436
+ throw new errors_ts_1.AnchorError("$lookup requires from, localField, foreignField and as");
437
+ }
438
+ const docs = [];
439
+ const localValues = new Set();
440
+ for await (const doc of input) {
441
+ docs.push(doc);
442
+ const value = (0, path_ts_1.getPath)(doc, spec.localField);
443
+ for (const v of Array.isArray(value) ? value : [value]) {
444
+ if (v !== undefined)
445
+ localValues.add(v);
446
+ }
447
+ }
448
+ const foreign = await source.lookup(spec.from, [...localValues], spec.foreignField);
449
+ const index = new Map();
450
+ for (const f of foreign) {
451
+ const key = JSON.stringify((0, path_ts_1.getPath)(f, spec.foreignField) ?? null);
452
+ const list = index.get(key);
453
+ if (list)
454
+ list.push(f);
455
+ else
456
+ index.set(key, [f]);
457
+ }
458
+ for (const doc of docs) {
459
+ const value = (0, path_ts_1.getPath)(doc, spec.localField);
460
+ const keys = (Array.isArray(value) ? value : [value]).map((v) => JSON.stringify(v ?? null));
461
+ const matched = [];
462
+ for (const key of keys) {
463
+ for (const f of index.get(key) ?? []) {
464
+ if (!matched.some((m) => (0, path_ts_1.valuesEqual)(m, f)))
465
+ matched.push(f);
466
+ }
467
+ }
468
+ const out = (0, path_ts_1.deepClone)(doc);
469
+ (0, path_ts_1.setPath)(out, spec.as, matched);
470
+ yield out;
471
+ }
472
+ }
473
+ /** `$facet` runs several sub-pipelines over the same buffered input. */
474
+ async function* facetStage(input, spec, source, options) {
475
+ const docs = await collect(input, options, "$facet");
476
+ const out = {};
477
+ for (const [name, sub] of Object.entries(spec)) {
478
+ validatePipeline(sub, options);
479
+ let stream = (async function* () {
480
+ for (const doc of docs)
481
+ yield doc;
482
+ })();
483
+ for (const stage of sub)
484
+ stream = applyStage(stage, stream, source, options);
485
+ const collected = [];
486
+ for await (const doc of stream)
487
+ collected.push(doc);
488
+ out[name] = collected;
489
+ }
490
+ yield out;
491
+ }
492
+ function createAccumulator(spec, field) {
493
+ const keys = Object.keys(spec);
494
+ if (keys.length !== 1) {
495
+ throw new errors_ts_1.AnchorError(`Accumulator for "${field}" must have exactly one operator`);
496
+ }
497
+ const op = keys[0];
498
+ const expr = spec[op];
499
+ const numeric = (ctx) => {
500
+ const v = (0, expressions_ts_1.evaluate)(expr, ctx);
501
+ return typeof v === "number" ? v : v instanceof Date ? v.getTime() : null;
502
+ };
503
+ switch (op) {
504
+ case "$sum": {
505
+ let total = 0;
506
+ return {
507
+ // Non-numeric values are IGNORED, not coerced — matching Mongo. Coercing would turn a
508
+ // stray string into NaN and poison the whole group.
509
+ push: (ctx) => {
510
+ const n = numeric(ctx);
511
+ if (n !== null)
512
+ total += n;
513
+ },
514
+ value: () => total,
515
+ };
516
+ }
517
+ case "$avg": {
518
+ let total = 0;
519
+ let count = 0;
520
+ return {
521
+ push: (ctx) => {
522
+ const n = numeric(ctx);
523
+ if (n !== null) {
524
+ total += n;
525
+ count++;
526
+ }
527
+ },
528
+ // No numeric values at all yields null, not 0 — an average of nothing is not zero.
529
+ value: () => (count === 0 ? null : total / count),
530
+ };
531
+ }
532
+ case "$min":
533
+ case "$max": {
534
+ let best = expressions_ts_1.MISSING;
535
+ const want = op === "$min" ? -1 : 1;
536
+ return {
537
+ push: (ctx) => {
538
+ const v = (0, expressions_ts_1.evaluate)(expr, ctx);
539
+ if (v === expressions_ts_1.MISSING || v === null)
540
+ return;
541
+ if (best === expressions_ts_1.MISSING || Math.sign((0, path_ts_1.compareValues)(v, best)) === want)
542
+ best = v;
543
+ },
544
+ value: () => (best === expressions_ts_1.MISSING ? null : best),
545
+ };
546
+ }
547
+ case "$count": {
548
+ let n = 0;
549
+ return { push: () => void n++, value: () => n };
550
+ }
551
+ case "$first": {
552
+ let value = expressions_ts_1.MISSING;
553
+ return {
554
+ push: (ctx) => {
555
+ if (value === expressions_ts_1.MISSING)
556
+ value = (0, expressions_ts_1.evaluate)(expr, ctx);
557
+ },
558
+ value: () => (value === expressions_ts_1.MISSING ? null : value),
559
+ };
560
+ }
561
+ case "$last": {
562
+ let value = expressions_ts_1.MISSING;
563
+ return {
564
+ push: (ctx) => {
565
+ value = (0, expressions_ts_1.evaluate)(expr, ctx);
566
+ },
567
+ value: () => (value === expressions_ts_1.MISSING ? null : value),
568
+ };
569
+ }
570
+ case "$push": {
571
+ const items = [];
572
+ return {
573
+ push: (ctx) => {
574
+ const v = (0, expressions_ts_1.evaluate)(expr, ctx);
575
+ items.push(v === expressions_ts_1.MISSING ? null : v);
576
+ },
577
+ value: () => items,
578
+ };
579
+ }
580
+ case "$addToSet": {
581
+ const items = [];
582
+ return {
583
+ push: (ctx) => {
584
+ const v = (0, expressions_ts_1.evaluate)(expr, ctx);
585
+ if (v === expressions_ts_1.MISSING)
586
+ return;
587
+ if (!items.some((i) => (0, path_ts_1.valuesEqual)(i, v)))
588
+ items.push(v);
589
+ },
590
+ value: () => items,
591
+ };
592
+ }
593
+ default:
594
+ throw new errors_ts_1.AnchorError(`Unsupported accumulator "${op}". Supported: $sum $avg $min $max $count $first $last $push $addToSet`);
595
+ }
596
+ }
597
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../../src/query/aggregation/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { DatabaseAdapter } from "../../storage/types.js";
2
+ import type { Schema } from "../../schema/schema.js";
3
+ import type { AggregationSource, Pushdown } from "./pipeline.js";
4
+ /**
5
+ * Connects the pipeline to real storage.
6
+ *
7
+ * The pushdown contract is the same one the query builder uses, and for the same reason:
8
+ * `extractConstraints` silently drops what it cannot express, so the JS matcher always runs, and
9
+ * skip/limit only reach the storage engine when the filter is provably lossless. Pushing pagination
10
+ * over a not-yet-filtered row set would page the wrong rows.
11
+ */
12
+ export declare class StorageAggregationSource implements AggregationSource {
13
+ private readonly adapter;
14
+ private readonly collection;
15
+ private readonly schema;
16
+ private readonly resolveCollection;
17
+ private lastScan;
18
+ constructor(opts: {
19
+ adapter: DatabaseAdapter;
20
+ collection: string;
21
+ schema: Schema;
22
+ resolveCollection: (name: string) => {
23
+ collection: string;
24
+ schema: Schema;
25
+ } | null;
26
+ });
27
+ stream(pushdown: Pushdown): AsyncIterable<Record<string, unknown>>;
28
+ /** One query per foreign collection, never one per document. */
29
+ lookup(collection: string, localValues: unknown[], foreignField: string): Promise<Array<Record<string, unknown>>>;
30
+ explainLast(): {
31
+ stage: "IXSCAN" | "COLLSCAN";
32
+ indexUsed: string | null;
33
+ };
34
+ }
35
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/query/aggregation/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEjE;;;;;;;GAOG;AACH,qBAAa,wBAAyB,YAAW,iBAAiB;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkE;IACpG,OAAO,CAAC,QAAQ,CAGd;gBAEU,IAAI,EAAE;QAChB,OAAO,EAAE,eAAe,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KACpF;IAOM,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAsCzE,gEAAgE;IAC1D,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,EAAE,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAiB1C,WAAW,IAAI;QAAE,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAG1E"}