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,267 @@
1
+ import { compareValues, getPath, hasPath, valuesEqual } from "./path.js";
2
+ import { ObjectId } from "../core/object-id.js";
3
+ const operators = new Map();
4
+ /** Extension point: `registerQueryOperator("$near", fn)`. */
5
+ export function registerQueryOperator(name, fn) {
6
+ operators.set(name, fn);
7
+ }
8
+ export function listQueryOperators() {
9
+ return [...operators.keys()].sort();
10
+ }
11
+ /**
12
+ * Mongo matches a scalar operand against an array field when *any element* matches, and also
13
+ * compares the array as a whole. `{ tags: "red" }` matches `{ tags: ["red","blue"] }`.
14
+ */
15
+ function anyElement(value, operand, predicate) {
16
+ if (Array.isArray(value) && !Array.isArray(operand)) {
17
+ return value.some((el) => predicate(el, operand)) || predicate(value, operand);
18
+ }
19
+ return predicate(value, operand);
20
+ }
21
+ registerQueryOperator("$eq", ({ value, operand }) => anyElement(value, operand, valuesEqual));
22
+ registerQueryOperator("$ne", ({ value, operand }) => !anyElement(value, operand, valuesEqual));
23
+ registerQueryOperator("$gt", ({ value, operand }) => anyElement(value, operand, (a, b) => sameTypeFamily(a, b) && compareValues(a, b) > 0));
24
+ registerQueryOperator("$gte", ({ value, operand }) => anyElement(value, operand, (a, b) => sameTypeFamily(a, b) && compareValues(a, b) >= 0));
25
+ registerQueryOperator("$lt", ({ value, operand }) => anyElement(value, operand, (a, b) => sameTypeFamily(a, b) && compareValues(a, b) < 0));
26
+ registerQueryOperator("$lte", ({ value, operand }) => anyElement(value, operand, (a, b) => sameTypeFamily(a, b) && compareValues(a, b) <= 0));
27
+ registerQueryOperator("$in", ({ value, operand }) => {
28
+ const list = operand;
29
+ return list.some((o) => (o instanceof RegExp ? testRegex(value, o) : anyElement(value, o, valuesEqual)));
30
+ });
31
+ registerQueryOperator("$nin", ({ value, operand }) => {
32
+ const list = operand;
33
+ return !list.some((o) => (o instanceof RegExp ? testRegex(value, o) : anyElement(value, o, valuesEqual)));
34
+ });
35
+ registerQueryOperator("$exists", ({ present, operand }) => present === Boolean(operand));
36
+ registerQueryOperator("$regex", ({ value, operand, doc }) => {
37
+ const options = doc?.$options;
38
+ const regex = operand instanceof RegExp
39
+ ? operand
40
+ : new RegExp(String(operand), typeof options === "string" ? options : undefined);
41
+ return testRegex(value, regex);
42
+ });
43
+ registerQueryOperator("$all", ({ value, operand }) => {
44
+ if (!Array.isArray(value))
45
+ return false;
46
+ return operand.every((needle) => value.some((el) => valuesEqual(el, needle)));
47
+ });
48
+ registerQueryOperator("$size", ({ value, operand }) => Array.isArray(value) && value.length === Number(operand));
49
+ registerQueryOperator("$elemMatch", ({ value, operand }) => {
50
+ if (!Array.isArray(value))
51
+ return false;
52
+ const condition = operand;
53
+ const isOperatorForm = Object.keys(condition).every((k) => k.startsWith("$"));
54
+ return value.some((el) => isOperatorForm
55
+ ? evaluateFieldCondition(el, condition, "", true)
56
+ : matchesFilter(el, condition));
57
+ });
58
+ registerQueryOperator("$not", ({ value, operand, doc, path, present }) => {
59
+ if (operand instanceof RegExp)
60
+ return !testRegex(value, operand);
61
+ return !evaluateFieldCondition(value, operand, path, present, doc);
62
+ });
63
+ registerQueryOperator("$type", ({ value, operand }) => {
64
+ const names = {
65
+ string: (v) => typeof v === "string",
66
+ number: (v) => typeof v === "number",
67
+ bool: (v) => typeof v === "boolean",
68
+ date: (v) => v instanceof Date,
69
+ array: (v) => Array.isArray(v),
70
+ object: (v) => v !== null && typeof v === "object" && !Array.isArray(v) && !(v instanceof Date),
71
+ null: (v) => v === null,
72
+ objectId: (v) => typeof v === "object" && v !== null && v._bsontype === "ObjectId",
73
+ };
74
+ const check = names[String(operand)];
75
+ return check ? check(value) : false;
76
+ });
77
+ registerQueryOperator("$mod", ({ value, operand }) => {
78
+ const [divisor, remainder] = operand;
79
+ return typeof value === "number" && value % divisor === remainder;
80
+ });
81
+ function testRegex(value, regex) {
82
+ if (Array.isArray(value))
83
+ return value.some((el) => typeof el === "string" && regex.test(el));
84
+ return typeof value === "string" && regex.test(value);
85
+ }
86
+ /**
87
+ * Range comparisons only apply within a BSON type family, matching MongoDB: `{ age: { $gt: 5 } }`
88
+ * must not match `age: "hello"` just because String sorts above Number.
89
+ */
90
+ function sameTypeFamily(a, b) {
91
+ if (a === null || a === undefined)
92
+ return false;
93
+ const ta = typeof a;
94
+ const tb = typeof b;
95
+ if (a instanceof Date && b instanceof Date)
96
+ return true;
97
+ if (ta === "number" && tb === "number")
98
+ return true;
99
+ if (ta === "string" && tb === "string")
100
+ return true;
101
+ if (ta === "boolean" && tb === "boolean")
102
+ return true;
103
+ if (typeof a === "object" && typeof b === "object")
104
+ return true;
105
+ return false;
106
+ }
107
+ const LOGICAL = new Set(["$and", "$or", "$nor", "$not", "$expr", "$where"]);
108
+ /** Evaluate one field's condition — either a literal to equal, or an operator object. */
109
+ function evaluateFieldCondition(value, condition, path, present, doc) {
110
+ if (condition instanceof RegExp)
111
+ return testRegex(value, condition);
112
+ // An ObjectId is an object, but it is a VALUE. Without this it would be walked as an operator
113
+ // object, no operators would be found, and the condition would silently match everything.
114
+ const isOperatorObject = condition !== null &&
115
+ typeof condition === "object" &&
116
+ !Array.isArray(condition) &&
117
+ !(condition instanceof Date) &&
118
+ !(condition instanceof ObjectId) &&
119
+ Object.keys(condition).some((k) => k.startsWith("$"));
120
+ if (!isOperatorObject)
121
+ return anyElement(value, condition, valuesEqual);
122
+ for (const [op, operand] of Object.entries(condition)) {
123
+ if (op === "$options")
124
+ continue; // consumed by $regex
125
+ const fn = operators.get(op);
126
+ if (!fn) {
127
+ throw new Error(`Unknown query operator "${op}". Supported: ${listQueryOperators().join(", ")}. ` +
128
+ `Register your own with registerQueryOperator().`);
129
+ }
130
+ if (!fn({ value, operand, doc: condition, path, present }))
131
+ return false;
132
+ }
133
+ return true;
134
+ }
135
+ /** Does a document satisfy a filter? */
136
+ export function matchesFilter(doc, filter) {
137
+ for (const [key, condition] of Object.entries(filter)) {
138
+ if (key === "$and") {
139
+ if (!condition.every((f) => matchesFilter(doc, f)))
140
+ return false;
141
+ continue;
142
+ }
143
+ if (key === "$or") {
144
+ if (!condition.some((f) => matchesFilter(doc, f)))
145
+ return false;
146
+ continue;
147
+ }
148
+ if (key === "$nor") {
149
+ if (condition.some((f) => matchesFilter(doc, f)))
150
+ return false;
151
+ continue;
152
+ }
153
+ if (key === "$expr" || key === "$where") {
154
+ throw new Error(`Query operator "${key}" is not supported in AnchorDB v1. See MONGOOSE_PARITY.md.`);
155
+ }
156
+ if (key.startsWith("$")) {
157
+ throw new Error(`Unknown top-level query operator "${key}".`);
158
+ }
159
+ const value = getPath(doc, key);
160
+ const present = hasPath(doc, key);
161
+ if (!evaluateFieldCondition(value, condition, key, present, doc))
162
+ return false;
163
+ }
164
+ return true;
165
+ }
166
+ /**
167
+ * Extract the constraints a storage adapter might push into an index.
168
+ *
169
+ * Only the unambiguous, non-array-sensitive leaves are extracted. Anything inside `$or`/`$nor`, or
170
+ * needing array semantics, is left out — the adapter reports it did not apply them and the JS
171
+ * matcher runs anyway, so a missed pushdown costs speed, never correctness.
172
+ */
173
+ export function extractConstraints(filter) {
174
+ const out = [];
175
+ const simple = {
176
+ $eq: "eq",
177
+ $gt: "gt",
178
+ $gte: "gte",
179
+ $lt: "lt",
180
+ $lte: "lte",
181
+ $in: "in",
182
+ $ne: "ne",
183
+ $nin: "nin",
184
+ };
185
+ for (const [key, condition] of Object.entries(filter)) {
186
+ if (key === "$and") {
187
+ for (const sub of condition)
188
+ out.push(...extractConstraints(sub));
189
+ continue;
190
+ }
191
+ if (LOGICAL.has(key) || key.startsWith("$"))
192
+ continue;
193
+ if (condition === null ||
194
+ typeof condition !== "object" ||
195
+ condition instanceof Date ||
196
+ condition instanceof ObjectId) {
197
+ // Storage holds ids as hex text, so an ObjectId operand is serialised for the constraint.
198
+ out.push({ path: key, op: "eq", value: toStorageValue(condition) });
199
+ continue;
200
+ }
201
+ if (Array.isArray(condition))
202
+ continue;
203
+ if (condition instanceof RegExp)
204
+ continue;
205
+ for (const [op, operand] of Object.entries(condition)) {
206
+ const mapped = simple[op];
207
+ if (mapped) {
208
+ out.push({
209
+ path: key,
210
+ op: mapped,
211
+ value: Array.isArray(operand) ? operand.map(toStorageValue) : toStorageValue(operand),
212
+ });
213
+ }
214
+ else if (op === "$exists")
215
+ out.push({ path: key, op: "exists", value: operand });
216
+ }
217
+ }
218
+ return out;
219
+ }
220
+ /** Paths a filter constrains — used for index selection. */
221
+ export function filterPaths(filter) {
222
+ return [...new Set(extractConstraints(filter).map((c) => c.path))];
223
+ }
224
+ /**
225
+ * Can `extractConstraints` represent this filter *completely*?
226
+ *
227
+ * This matters for correctness, not speed. `extractConstraints` silently drops anything it cannot
228
+ * express (a `$regex`, an `$or`, an `$elemMatch`), so an adapter that reports "I applied all the
229
+ * constraints you gave me" has told the truth about the constraints — but not about the filter.
230
+ * Acting on that would skip the dropped conditions entirely and return rows that do not match.
231
+ *
232
+ * So: the JS matcher always runs, and this predicate decides only whether it is safe to let the
233
+ * storage engine apply `skip`/`limit`. Pushing pagination down while conditions remain unapplied
234
+ * would page over the wrong row set.
235
+ */
236
+ export function isFullyExtractable(filter) {
237
+ const extractableOps = new Set(["$eq", "$gt", "$gte", "$lt", "$lte", "$in", "$ne", "$nin", "$exists"]);
238
+ for (const [key, condition] of Object.entries(filter)) {
239
+ if (key === "$and") {
240
+ if (!condition.every(isFullyExtractable))
241
+ return false;
242
+ continue;
243
+ }
244
+ if (key.startsWith("$"))
245
+ return false; // $or, $nor, $expr, ...
246
+ if (condition instanceof RegExp)
247
+ return false;
248
+ if (condition === null ||
249
+ typeof condition !== "object" ||
250
+ condition instanceof Date ||
251
+ condition instanceof ObjectId) {
252
+ continue; // equality
253
+ }
254
+ if (Array.isArray(condition))
255
+ continue; // equality against an array literal
256
+ for (const op of Object.keys(condition)) {
257
+ if (!extractableOps.has(op))
258
+ return false;
259
+ }
260
+ }
261
+ return true;
262
+ }
263
+ /** Storage keeps ObjectIds as hex text; constraints must speak that form. */
264
+ function toStorageValue(value) {
265
+ return value instanceof ObjectId ? value.toHexString() : value;
266
+ }
267
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/query/filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /** Dot-path access with MongoDB's array-traversal semantics. */
2
+ export declare function getPath(doc: unknown, path: string): unknown;
3
+ /** True when the path exists, even if its value is null or undefined. */
4
+ export declare function hasPath(doc: unknown, path: string): boolean;
5
+ export declare function setPath(doc: Record<string, unknown>, path: string, value: unknown): void;
6
+ export declare function unsetPath(doc: Record<string, unknown>, path: string): void;
7
+ /**
8
+ * BSON canonical type ordering, which is what MongoDB sorts by when a path holds mixed types.
9
+ * Getting this wrong makes sort() silently disagree with the backend on real-world data.
10
+ */
11
+ /**
12
+ * A const object rather than a TypeScript `enum`.
13
+ *
14
+ * `enum` emits runtime code, so it is not erasable — it breaks Node's --experimental-strip-types
15
+ * and any toolchain running with erasableSyntaxOnly, which would stop consumers from importing this
16
+ * package directly as TypeScript. The const-object form is identical to use and fully erasable.
17
+ */
18
+ export declare const BsonTypeOrder: {
19
+ readonly MinKey: 1;
20
+ readonly Null: 2;
21
+ readonly Number: 3;
22
+ readonly String: 4;
23
+ readonly Object: 5;
24
+ readonly Array: 6;
25
+ readonly Binary: 7;
26
+ readonly ObjectId: 8;
27
+ readonly Boolean: 9;
28
+ readonly Date: 10;
29
+ readonly Regex: 11;
30
+ readonly MaxKey: 12;
31
+ };
32
+ export type BsonTypeOrder = (typeof BsonTypeOrder)[keyof typeof BsonTypeOrder];
33
+ export declare function bsonTypeOrder(value: unknown): BsonTypeOrder;
34
+ /** Total ordering over arbitrary values, matching MongoDB's comparison rules. */
35
+ export declare function compareValues(a: unknown, b: unknown): number;
36
+ /** Deep structural equality using the same value semantics as comparison. */
37
+ export declare function valuesEqual(a: unknown, b: unknown): boolean;
38
+ export declare function deepClone<T>(value: T): T;
39
+ /** All leaf paths in a document — the basis of the field-level 3-way merge. */
40
+ export declare function flattenPaths(doc: unknown, prefix?: string, out?: Map<string, unknown>): Map<string, unknown>;
41
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/query/path.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAEhE,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAkC3D;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAmB3D;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CA4BxF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgB1E;AAED;;;GAGG;AACH;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAahB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAgB3D;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CA8D5D;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAUxC;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,MAAM,SAAK,EACX,GAAG,uBAA6B,GAC/B,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBtB"}
@@ -0,0 +1,282 @@
1
+ import { ObjectId } from "../core/object-id.js";
2
+ /** Dot-path access with MongoDB's array-traversal semantics. */
3
+ export function getPath(doc, path) {
4
+ if (doc == null)
5
+ return undefined;
6
+ if (path === "")
7
+ return doc;
8
+ const parts = path.split(".");
9
+ let current = doc;
10
+ for (let i = 0; i < parts.length; i++) {
11
+ const part = parts[i];
12
+ if (current == null)
13
+ return undefined;
14
+ if (Array.isArray(current)) {
15
+ // A numeric segment indexes the array; anything else maps over its elements, which is how
16
+ // Mongo lets `items.price` match inside an array of objects.
17
+ const asIndex = Number(part);
18
+ if (Number.isInteger(asIndex) && String(asIndex) === part) {
19
+ current = current[asIndex];
20
+ continue;
21
+ }
22
+ const rest = parts.slice(i).join(".");
23
+ const mapped = [];
24
+ for (const el of current) {
25
+ const v = getPath(el, rest);
26
+ if (v !== undefined) {
27
+ if (Array.isArray(v))
28
+ mapped.push(...v);
29
+ else
30
+ mapped.push(v);
31
+ }
32
+ }
33
+ return mapped.length > 0 ? mapped : undefined;
34
+ }
35
+ if (typeof current !== "object")
36
+ return undefined;
37
+ current = current[part];
38
+ }
39
+ return current;
40
+ }
41
+ /** True when the path exists, even if its value is null or undefined. */
42
+ export function hasPath(doc, path) {
43
+ const parts = path.split(".");
44
+ let current = doc;
45
+ for (let i = 0; i < parts.length; i++) {
46
+ const part = parts[i];
47
+ if (current == null || typeof current !== "object")
48
+ return false;
49
+ if (Array.isArray(current)) {
50
+ const asIndex = Number(part);
51
+ if (Number.isInteger(asIndex) && String(asIndex) === part) {
52
+ if (asIndex >= current.length)
53
+ return false;
54
+ current = current[asIndex];
55
+ continue;
56
+ }
57
+ return current.some((el) => hasPath(el, parts.slice(i).join(".")));
58
+ }
59
+ if (!Object.prototype.hasOwnProperty.call(current, part))
60
+ return false;
61
+ current = current[part];
62
+ }
63
+ return true;
64
+ }
65
+ export function setPath(doc, path, value) {
66
+ const parts = path.split(".");
67
+ let current = doc;
68
+ for (let i = 0; i < parts.length - 1; i++) {
69
+ const part = parts[i];
70
+ const next = parts[i + 1];
71
+ const nextIsIndex = Number.isInteger(Number(next)) && String(Number(next)) === next;
72
+ if (Array.isArray(current)) {
73
+ const idx = Number(part);
74
+ const existing = current[idx];
75
+ if (existing == null || typeof existing !== "object") {
76
+ current[idx] = nextIsIndex ? [] : {};
77
+ }
78
+ current = current[idx];
79
+ }
80
+ else {
81
+ const existing = current[part];
82
+ if (existing == null || typeof existing !== "object") {
83
+ current[part] = nextIsIndex ? [] : {};
84
+ }
85
+ current = current[part];
86
+ }
87
+ }
88
+ const last = parts[parts.length - 1];
89
+ if (Array.isArray(current))
90
+ current[Number(last)] = value;
91
+ else
92
+ current[last] = value;
93
+ }
94
+ export function unsetPath(doc, path) {
95
+ const parts = path.split(".");
96
+ let current = doc;
97
+ for (let i = 0; i < parts.length - 1; i++) {
98
+ if (current == null || typeof current !== "object")
99
+ return;
100
+ current = current[parts[i]];
101
+ }
102
+ if (current == null || typeof current !== "object")
103
+ return;
104
+ const last = parts[parts.length - 1];
105
+ if (Array.isArray(current)) {
106
+ // $unset on an array element leaves a null hole rather than reindexing, matching Mongo.
107
+ const idx = Number(last);
108
+ if (Number.isInteger(idx))
109
+ current[idx] = null;
110
+ }
111
+ else {
112
+ delete current[last];
113
+ }
114
+ }
115
+ /**
116
+ * BSON canonical type ordering, which is what MongoDB sorts by when a path holds mixed types.
117
+ * Getting this wrong makes sort() silently disagree with the backend on real-world data.
118
+ */
119
+ /**
120
+ * A const object rather than a TypeScript `enum`.
121
+ *
122
+ * `enum` emits runtime code, so it is not erasable — it breaks Node's --experimental-strip-types
123
+ * and any toolchain running with erasableSyntaxOnly, which would stop consumers from importing this
124
+ * package directly as TypeScript. The const-object form is identical to use and fully erasable.
125
+ */
126
+ export const BsonTypeOrder = {
127
+ MinKey: 1,
128
+ Null: 2,
129
+ Number: 3,
130
+ String: 4,
131
+ Object: 5,
132
+ Array: 6,
133
+ Binary: 7,
134
+ ObjectId: 8,
135
+ Boolean: 9,
136
+ Date: 10,
137
+ Regex: 11,
138
+ MaxKey: 12,
139
+ };
140
+ export function bsonTypeOrder(value) {
141
+ if (value === null || value === undefined)
142
+ return BsonTypeOrder.Null;
143
+ if (typeof value === "number" || typeof value === "bigint")
144
+ return BsonTypeOrder.Number;
145
+ if (typeof value === "string")
146
+ return BsonTypeOrder.String;
147
+ if (typeof value === "boolean")
148
+ return BsonTypeOrder.Boolean;
149
+ if (value instanceof Date)
150
+ return BsonTypeOrder.Date;
151
+ if (value instanceof RegExp)
152
+ return BsonTypeOrder.Regex;
153
+ if (value instanceof ObjectId)
154
+ return BsonTypeOrder.ObjectId;
155
+ if (value instanceof Uint8Array)
156
+ return BsonTypeOrder.Binary;
157
+ if (Array.isArray(value))
158
+ return BsonTypeOrder.Array;
159
+ if (typeof value === "object") {
160
+ const branded = value._bsontype;
161
+ if (branded === "ObjectId")
162
+ return BsonTypeOrder.ObjectId;
163
+ return BsonTypeOrder.Object;
164
+ }
165
+ return BsonTypeOrder.Object;
166
+ }
167
+ /** Total ordering over arbitrary values, matching MongoDB's comparison rules. */
168
+ export function compareValues(a, b) {
169
+ const ta = bsonTypeOrder(a);
170
+ const tb = bsonTypeOrder(b);
171
+ if (ta !== tb)
172
+ return ta < tb ? -1 : 1;
173
+ switch (ta) {
174
+ case BsonTypeOrder.Null:
175
+ return 0;
176
+ case BsonTypeOrder.Number: {
177
+ const na = Number(a);
178
+ const nb = Number(b);
179
+ if (Number.isNaN(na) && Number.isNaN(nb))
180
+ return 0;
181
+ if (Number.isNaN(na))
182
+ return -1;
183
+ if (Number.isNaN(nb))
184
+ return 1;
185
+ return na < nb ? -1 : na > nb ? 1 : 0;
186
+ }
187
+ case BsonTypeOrder.String: {
188
+ const sa = a;
189
+ const sb = b;
190
+ return sa < sb ? -1 : sa > sb ? 1 : 0;
191
+ }
192
+ case BsonTypeOrder.Boolean: {
193
+ const ba = a;
194
+ const bb = b;
195
+ return ba === bb ? 0 : ba ? 1 : -1;
196
+ }
197
+ case BsonTypeOrder.Date:
198
+ return a.getTime() - b.getTime();
199
+ case BsonTypeOrder.ObjectId: {
200
+ const sa = String(a);
201
+ const sb = String(b);
202
+ return sa < sb ? -1 : sa > sb ? 1 : 0;
203
+ }
204
+ case BsonTypeOrder.Array: {
205
+ const aa = a;
206
+ const ab = b;
207
+ const len = Math.min(aa.length, ab.length);
208
+ for (let i = 0; i < len; i++) {
209
+ const c = compareValues(aa[i], ab[i]);
210
+ if (c !== 0)
211
+ return c;
212
+ }
213
+ return aa.length - ab.length;
214
+ }
215
+ case BsonTypeOrder.Object: {
216
+ const ea = Object.entries(a);
217
+ const eb = Object.entries(b);
218
+ const len = Math.min(ea.length, eb.length);
219
+ for (let i = 0; i < len; i++) {
220
+ const [ka, va] = ea[i];
221
+ const [kb, vb] = eb[i];
222
+ if (ka !== kb)
223
+ return ka < kb ? -1 : 1;
224
+ const c = compareValues(va, vb);
225
+ if (c !== 0)
226
+ return c;
227
+ }
228
+ return ea.length - eb.length;
229
+ }
230
+ default: {
231
+ const sa = String(a);
232
+ const sb = String(b);
233
+ return sa < sb ? -1 : sa > sb ? 1 : 0;
234
+ }
235
+ }
236
+ }
237
+ /** Deep structural equality using the same value semantics as comparison. */
238
+ export function valuesEqual(a, b) {
239
+ return bsonTypeOrder(a) === bsonTypeOrder(b) && compareValues(a, b) === 0;
240
+ }
241
+ export function deepClone(value) {
242
+ if (value === null || typeof value !== "object")
243
+ return value;
244
+ if (value instanceof Date)
245
+ return new Date(value.getTime());
246
+ if (value instanceof ObjectId)
247
+ return new ObjectId(value);
248
+ if (value instanceof RegExp)
249
+ return new RegExp(value.source, value.flags);
250
+ if (value instanceof Uint8Array)
251
+ return value.slice();
252
+ if (Array.isArray(value))
253
+ return value.map((v) => deepClone(v));
254
+ const out = {};
255
+ for (const [k, v] of Object.entries(value))
256
+ out[k] = deepClone(v);
257
+ return out;
258
+ }
259
+ /** All leaf paths in a document — the basis of the field-level 3-way merge. */
260
+ export function flattenPaths(doc, prefix = "", out = new Map()) {
261
+ const isLeaf = doc === null ||
262
+ typeof doc !== "object" ||
263
+ doc instanceof Date ||
264
+ doc instanceof ObjectId ||
265
+ doc instanceof Uint8Array ||
266
+ Array.isArray(doc);
267
+ if (isLeaf) {
268
+ if (prefix)
269
+ out.set(prefix, doc);
270
+ return out;
271
+ }
272
+ const entries = Object.entries(doc);
273
+ if (entries.length === 0 && prefix) {
274
+ out.set(prefix, doc);
275
+ return out;
276
+ }
277
+ for (const [k, v] of entries) {
278
+ flattenPaths(v, prefix ? `${prefix}.${k}` : k, out);
279
+ }
280
+ return out;
281
+ }
282
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/query/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,gEAAgE;AAEhE,MAAM,UAAU,OAAO,CAAC,GAAY,EAAE,IAAY;IAChD,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,SAAS,CAAC;QAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,0FAA0F;YAC1F,6DAA6D;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;wBACnC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAChD,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,OAAO,CAAC,GAAY,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACjE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC;gBAC5C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACvE,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAA4B,EAAE,IAAY,EAAE,KAAc;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAwC,GAAG,CAAC;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;QAEpF,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAA4B,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;;QACrD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAA4B,EAAE,IAAY;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO;QAC3D,OAAO,GAAI,OAAmC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,wFAAwF;QACxF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;YAAG,OAAqB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,OAAQ,OAAmC,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;CACF,CAAC;AAIX,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,MAAM,CAAC;IACxF,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,MAAM,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC;IAC7D,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC;IACrD,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IACxD,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC7D,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,aAAa,CAAC,MAAM,CAAC;IAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAI,KAAgC,CAAC,SAAS,CAAC;QAC5D,IAAI,OAAO,KAAK,UAAU;YAAE,OAAO,aAAa,CAAC,QAAQ,CAAC;QAC1D,OAAO,aAAa,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,CAAU,EAAE,CAAU;IAClD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvC,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,aAAa,CAAC,IAAI;YACrB,OAAO,CAAC,CAAC;QACX,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAW,CAAC;YACvB,MAAM,EAAE,GAAG,CAAW,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAY,CAAC;YACxB,MAAM,EAAE,GAAG,CAAY,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,aAAa,CAAC,IAAI;YACrB,OAAQ,CAAU,CAAC,OAAO,EAAE,GAAI,CAAU,CAAC,OAAO,EAAE,CAAC;QACvD,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,CAAc,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAc,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC/B,CAAC;QACD,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;gBACxB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;gBACxB,IAAI,EAAE,KAAK,EAAE;oBAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,CAAU,EAAE,CAAU;IAChD,OAAO,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,KAAQ;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAiB,CAAC;IAC5E,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAiB,CAAC;IAC1E,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAiB,CAAC;IAC1F,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,EAAkB,CAAC;IACtE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAiB,CAAC;IAChF,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7F,OAAO,GAAQ,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAC1B,GAAY,EACZ,MAAM,GAAG,EAAE,EACX,MAAM,IAAI,GAAG,EAAmB;IAEhC,MAAM,MAAM,GACV,GAAG,KAAK,IAAI;QACZ,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,QAAQ;QACvB,GAAG,YAAY,UAAU;QACzB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAErB,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC7B,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MongoDB update operators.
3
+ *
4
+ * Like the filter operators these live in a registry, so the set can grow without editing a switch.
5
+ * Each operator mutates a *clone*, so a failed update never leaves a half-applied document behind.
6
+ */
7
+ export type UpdateSpec = Record<string, unknown>;
8
+ export interface UpdateOperatorContext {
9
+ doc: Record<string, unknown>;
10
+ path: string;
11
+ operand: unknown;
12
+ }
13
+ export type UpdateOperatorFn = (ctx: UpdateOperatorContext) => void;
14
+ export declare function registerUpdateOperator(name: string, fn: UpdateOperatorFn): void;
15
+ export declare function listUpdateOperators(): string[];
16
+ export interface ApplyUpdateOptions {
17
+ /** True when this update is creating the document via upsert. */
18
+ isInsert?: boolean;
19
+ }
20
+ /**
21
+ * Apply an update document, returning a new document. The input is never mutated, so a throwing
22
+ * operator leaves the caller's copy intact.
23
+ *
24
+ * A replacement document (no `$` keys) is also accepted, matching Mongoose.
25
+ */
26
+ export declare function applyUpdate(original: Record<string, unknown>, update: UpdateSpec, opts?: ApplyUpdateOptions): Record<string, unknown>;
27
+ /** Paths an update touches — used to decide which validators to run and what changed. */
28
+ export declare function updatedPaths(update: UpdateSpec): string[];
29
+ export declare function isReplacement(update: UpdateSpec): boolean;
30
+ //# sourceMappingURL=update.d.ts.map