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,457 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasPath = exports.getPath = exports.deepClone = exports.compareValues = exports.NodeSqliteAdapter = void 0;
4
+ const errors_ts_1 = require("../../core/errors.js");
5
+ const path_ts_1 = require("../../query/path.js");
6
+ Object.defineProperty(exports, "compareValues", { enumerable: true, get: function () { return path_ts_1.compareValues; } });
7
+ Object.defineProperty(exports, "deepClone", { enumerable: true, get: function () { return path_ts_1.deepClone; } });
8
+ Object.defineProperty(exports, "getPath", { enumerable: true, get: function () { return path_ts_1.getPath; } });
9
+ Object.defineProperty(exports, "hasPath", { enumerable: true, get: function () { return path_ts_1.hasPath; } });
10
+ const keys_ts_1 = require("../../index/keys.js");
11
+ let cachedCtor = null;
12
+ function loadDatabaseSync() {
13
+ if (cachedCtor)
14
+ return cachedCtor;
15
+ const getBuiltin = process.getBuiltinModule;
16
+ if (typeof getBuiltin !== "function") {
17
+ throw new errors_ts_1.AnchorConfigError("process.getBuiltinModule is unavailable, so node:sqlite cannot be loaded. " +
18
+ "NodeSqliteAdapter requires Node 22.5+. On React Native use the Expo SQLite adapter instead.");
19
+ }
20
+ try {
21
+ const mod = getBuiltin("node:sqlite");
22
+ if (!mod?.DatabaseSync)
23
+ throw new Error("node:sqlite did not expose DatabaseSync");
24
+ cachedCtor = mod.DatabaseSync;
25
+ return cachedCtor;
26
+ }
27
+ catch (err) {
28
+ throw new errors_ts_1.AnchorConfigError("node:sqlite is unavailable. NodeSqliteAdapter requires Node 22.5+ (it is built in, no install needed). " +
29
+ "On React Native use the Expo SQLite adapter instead. Original error: " +
30
+ String(err));
31
+ }
32
+ }
33
+ class NodeSqliteAdapter {
34
+ constructor(opts = {}) {
35
+ this.name = "node-sqlite";
36
+ this.indexCache = new Map();
37
+ this.stmtCache = new Map();
38
+ this.location = opts.location ?? ":memory:";
39
+ this.dbName = opts.dbName ?? "anchor";
40
+ }
41
+ prepare(sql) {
42
+ let s = this.stmtCache.get(sql);
43
+ if (!s) {
44
+ s = this.db.prepare(sql);
45
+ this.stmtCache.set(sql, s);
46
+ }
47
+ return s;
48
+ }
49
+ async open() {
50
+ const DatabaseSync = loadDatabaseSync();
51
+ this.db = new DatabaseSync(this.location);
52
+ this.db.exec("PRAGMA journal_mode = WAL");
53
+ this.db.exec("PRAGMA foreign_keys = ON");
54
+ this.db.exec(`
55
+ CREATE TABLE IF NOT EXISTS anchor_collections (
56
+ name TEXT PRIMARY KEY
57
+ );
58
+ CREATE TABLE IF NOT EXISTS anchor_state (
59
+ key TEXT PRIMARY KEY,
60
+ value TEXT NOT NULL
61
+ );
62
+ CREATE TABLE IF NOT EXISTS anchor_indexes (
63
+ collection TEXT NOT NULL,
64
+ name TEXT NOT NULL,
65
+ spec TEXT NOT NULL,
66
+ PRIMARY KEY (collection, name)
67
+ );
68
+ -- One row per (index, extracted key). The UNIQUE constraint here is what actually rejects
69
+ -- duplicates, atomically, inside the write transaction.
70
+ CREATE TABLE IF NOT EXISTS anchor_index_entries (
71
+ collection TEXT NOT NULL,
72
+ index_name TEXT NOT NULL,
73
+ key TEXT NOT NULL,
74
+ document_id TEXT NOT NULL
75
+ );
76
+ CREATE INDEX IF NOT EXISTS anchor_index_entries_lookup
77
+ ON anchor_index_entries (collection, index_name, key);
78
+ CREATE INDEX IF NOT EXISTS anchor_index_entries_doc
79
+ ON anchor_index_entries (collection, index_name, document_id);
80
+ `);
81
+ this.loadIndexes();
82
+ }
83
+ async close() {
84
+ this.stmtCache.clear();
85
+ this.db.close();
86
+ }
87
+ async destroy() {
88
+ const names = await this.listCollections();
89
+ for (const name of names)
90
+ this.db.exec(`DROP TABLE IF EXISTS "${tableName(name)}"`);
91
+ this.db.exec("DELETE FROM anchor_collections");
92
+ this.db.exec("DELETE FROM anchor_state");
93
+ this.db.exec("DELETE FROM anchor_indexes");
94
+ this.db.exec("DELETE FROM anchor_index_entries");
95
+ this.stmtCache.clear();
96
+ this.indexCache.clear();
97
+ }
98
+ loadIndexes() {
99
+ this.indexCache.clear();
100
+ const rows = this.db.prepare("SELECT collection, name, spec FROM anchor_indexes").all();
101
+ for (const r of rows) {
102
+ let map = this.indexCache.get(r.collection);
103
+ if (!map) {
104
+ map = new Map();
105
+ this.indexCache.set(r.collection, map);
106
+ }
107
+ map.set(r.name, JSON.parse(r.spec));
108
+ }
109
+ }
110
+ async ensureCollection(collection) {
111
+ const table = tableName(collection);
112
+ this.db.exec(`
113
+ CREATE TABLE IF NOT EXISTS "${table}" (
114
+ id TEXT PRIMARY KEY,
115
+ doc TEXT NOT NULL,
116
+ version INTEGER NOT NULL DEFAULT 0,
117
+ hlc TEXT NOT NULL DEFAULT '',
118
+ dirty INTEGER NOT NULL DEFAULT 0,
119
+ deleted INTEGER NOT NULL DEFAULT 0,
120
+ created_at TEXT NOT NULL,
121
+ updated_at TEXT NOT NULL,
122
+ deleted_at TEXT
123
+ );
124
+ CREATE INDEX IF NOT EXISTS "${table}_deleted" ON "${table}" (deleted);
125
+ CREATE INDEX IF NOT EXISTS "${table}_dirty" ON "${table}" (dirty);
126
+ CREATE INDEX IF NOT EXISTS "${table}_updated" ON "${table}" (updated_at);
127
+ `);
128
+ this.prepare("INSERT OR IGNORE INTO anchor_collections (name) VALUES (?)").run(collection);
129
+ }
130
+ async listCollections() {
131
+ const rows = this.prepare("SELECT name FROM anchor_collections ORDER BY name").all();
132
+ return rows.map((r) => r.name);
133
+ }
134
+ async get(collection, id, includeDeleted = false) {
135
+ if (!this.tableExists(collection))
136
+ return null;
137
+ const row = this.prepare(`SELECT * FROM "${tableName(collection)}" WHERE id = ?`).get(id);
138
+ if (!row)
139
+ return null;
140
+ if (row.deleted === 1 && !includeDeleted)
141
+ return null;
142
+ return hydrate(row);
143
+ }
144
+ tableExists(collection) {
145
+ const r = this.prepare("SELECT 1 AS ok FROM sqlite_master WHERE type='table' AND name = ?").get(tableName(collection));
146
+ return Boolean(r);
147
+ }
148
+ /**
149
+ * Choose an index for this query.
150
+ *
151
+ * Only an index whose *every* key field carries an equality constraint is eligible. A partially
152
+ * covered compound index cannot become an exact lookup against the entries table, and
153
+ * approximating it with a prefix match risks dropping rows — so we decline and scan instead.
154
+ * Longer keys win, being more selective.
155
+ */
156
+ chooseIndex(collection, constraints) {
157
+ const equalities = new Map();
158
+ for (const c of constraints) {
159
+ if (c.op === "eq" && c.path !== "_id")
160
+ equalities.set(c.path, c.value);
161
+ }
162
+ if (equalities.size === 0)
163
+ return null;
164
+ let best = null;
165
+ for (const spec of this.indexCache.get(collection)?.values() ?? []) {
166
+ // A sparse or partial index does not contain every document, so using it for a general query
167
+ // would silently omit rows that legitimately match the filter.
168
+ if (spec.sparse || spec.partialFilterExpression)
169
+ continue;
170
+ const encoded = (0, keys_ts_1.encodeLookupKey)(spec, equalities);
171
+ if (encoded === null)
172
+ continue;
173
+ if (!best || spec.key.length > best.paths.size) {
174
+ best = { name: spec.name, key: encoded, paths: new Set(spec.key.map(([p]) => p)) };
175
+ }
176
+ }
177
+ return best;
178
+ }
179
+ /**
180
+ * Pushes what SQL can do into SQL and reports honestly about the rest.
181
+ *
182
+ * Equality constraints covered by an index become a join against the index-entries table; `_id`
183
+ * lookups hit the primary key directly. Anything needing Mongo array semantics or BSON type
184
+ * ordering is left to the JS layer, because SQLite's comparison rules are not Mongo's and
185
+ * pretending otherwise would return wrong rows.
186
+ */
187
+ async find(plan) {
188
+ if (!this.tableExists(plan.collection)) {
189
+ return { rows: [], applied: { constraints: true, sort: true, skip: true, limit: true } };
190
+ }
191
+ const table = tableName(plan.collection);
192
+ const q = `"${table}"`;
193
+ const where = [];
194
+ const params = [];
195
+ if (!plan.includeDeleted)
196
+ where.push(`${q}.deleted = 0`);
197
+ let pushedConstraints = true;
198
+ let indexUsed;
199
+ let joinSql = "";
200
+ const chosen = this.chooseIndex(plan.collection, plan.constraints);
201
+ const coveredByIndex = chosen ? chosen.paths : new Set();
202
+ if (chosen) {
203
+ joinSql = ` JOIN anchor_index_entries e ON e.document_id = ${q}.id`;
204
+ where.push("e.collection = ?", "e.index_name = ?", "e.key = ?");
205
+ params.push(plan.collection, chosen.name, chosen.key);
206
+ indexUsed = chosen.name;
207
+ }
208
+ for (const c of plan.constraints) {
209
+ if (chosen && c.op === "eq" && coveredByIndex.has(c.path))
210
+ continue; // satisfied by the index
211
+ if (c.path === "_id" && (c.op === "eq" || c.op === "in")) {
212
+ if (c.op === "eq") {
213
+ where.push(`${q}.id = ?`);
214
+ params.push(String(c.value));
215
+ }
216
+ else {
217
+ const list = c.value;
218
+ if (list.length === 0) {
219
+ return { rows: [], applied: { constraints: true, sort: true, skip: true, limit: true } };
220
+ }
221
+ where.push(`${q}.id IN (${list.map(() => "?").join(",")})`);
222
+ params.push(...list.map((v) => String(v)));
223
+ }
224
+ indexUsed ??= "_id_";
225
+ }
226
+ else {
227
+ pushedConstraints = false;
228
+ }
229
+ }
230
+ // Sorting only pushes down for `_id`, where the hex ObjectId's text order equals creation
231
+ // order. Every other path may hold mixed BSON types, which SQLite would order differently.
232
+ let pushedSort = false;
233
+ let orderBy = "";
234
+ if (plan.sort && plan.sort.length === 1 && plan.sort[0][0] === "_id") {
235
+ orderBy = ` ORDER BY ${q}.id ${plan.sort[0][1] === 1 ? "ASC" : "DESC"}`;
236
+ pushedSort = true;
237
+ }
238
+ const canPage = pushedConstraints && (pushedSort || !plan.sort || plan.sort.length === 0);
239
+ let tail = "";
240
+ if (canPage && plan.limit !== undefined) {
241
+ tail += ` LIMIT ${Number(plan.limit)}`;
242
+ if (plan.skip)
243
+ tail += ` OFFSET ${Number(plan.skip)}`;
244
+ }
245
+ else if (canPage && plan.skip) {
246
+ tail += ` LIMIT -1 OFFSET ${Number(plan.skip)}`;
247
+ }
248
+ // DISTINCT because a multikey index can match one document through several entries.
249
+ const sql = `SELECT DISTINCT ${q}.* FROM ${q}` +
250
+ joinSql +
251
+ (where.length ? ` WHERE ${where.join(" AND ")}` : "") +
252
+ orderBy +
253
+ tail;
254
+ const raw = this.prepare(sql).all(...params);
255
+ return {
256
+ rows: raw.map(hydrate),
257
+ applied: {
258
+ constraints: pushedConstraints,
259
+ sort: pushedSort || !plan.sort || plan.sort.length === 0,
260
+ skip: canPage && Boolean(plan.skip !== undefined),
261
+ limit: canPage && plan.limit !== undefined,
262
+ },
263
+ indexUsed,
264
+ };
265
+ }
266
+ async count(plan) {
267
+ if (!this.tableExists(plan.collection))
268
+ return 0;
269
+ // Only a constraint-free count can be answered in SQL; otherwise defer to the JS layer.
270
+ if (plan.constraints.length > 0)
271
+ return null;
272
+ const sql = `SELECT COUNT(*) AS n FROM "${tableName(plan.collection)}"${plan.includeDeleted ? "" : " WHERE deleted = 0"}`;
273
+ const r = this.prepare(sql).get();
274
+ return r.n;
275
+ }
276
+ async write(ops) {
277
+ this.db.exec("BEGIN IMMEDIATE");
278
+ try {
279
+ for (const op of ops)
280
+ this.applyOp(op);
281
+ this.db.exec("COMMIT");
282
+ }
283
+ catch (err) {
284
+ this.db.exec("ROLLBACK");
285
+ throw err;
286
+ }
287
+ }
288
+ applyOp(op) {
289
+ const table = tableName(op.collection);
290
+ const specs = [...(this.indexCache.get(op.collection)?.values() ?? [])];
291
+ // Index entries are rebuilt for the document on every write, so an update that changes an
292
+ // indexed field releases its old key and claims the new one in the same transaction.
293
+ this.prepare("DELETE FROM anchor_index_entries WHERE collection = ? AND document_id = ?").run(op.collection, op._id);
294
+ if (op.type === "hardDelete") {
295
+ this.prepare(`DELETE FROM "${table}" WHERE id = ?`).run(op._id);
296
+ return;
297
+ }
298
+ if (!op.row)
299
+ throw new Error(`write op "${op.type}" requires a row`);
300
+ const { doc, meta } = op.row;
301
+ if (!meta.deleted) {
302
+ for (const spec of specs) {
303
+ for (const key of (0, keys_ts_1.extractIndexKeys)(doc, spec)) {
304
+ try {
305
+ this.prepare("INSERT INTO anchor_index_entries (collection, index_name, key, document_id) VALUES (?, ?, ?, ?)").run(op.collection, spec.name, key.encoded, op._id);
306
+ }
307
+ catch (err) {
308
+ throw this.toDuplicateError(err, op.collection, spec, key.values);
309
+ }
310
+ }
311
+ }
312
+ }
313
+ this.prepare(`INSERT INTO "${table}" (id, doc, version, hlc, dirty, deleted, created_at, updated_at, deleted_at)
314
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
315
+ ON CONFLICT(id) DO UPDATE SET
316
+ doc = excluded.doc, version = excluded.version, hlc = excluded.hlc,
317
+ dirty = excluded.dirty, deleted = excluded.deleted,
318
+ created_at = excluded.created_at, updated_at = excluded.updated_at,
319
+ deleted_at = excluded.deleted_at`).run(op._id, JSON.stringify(doc), meta.version, meta.hlc, meta.dirty ? 1 : 0, meta.deleted ? 1 : 0, meta.createdAt, meta.updatedAt, meta.deletedAt ?? null);
320
+ }
321
+ toDuplicateError(err, collection, spec, keyValue) {
322
+ const e = err;
323
+ // 2067 == SQLITE_CONSTRAINT_UNIQUE; 1555 == SQLITE_CONSTRAINT_PRIMARYKEY
324
+ if (e?.errcode === 2067 || e?.errcode === 1555 || /UNIQUE constraint failed/.test(e?.message ?? "")) {
325
+ return (0, errors_ts_1.duplicateKeyError)({
326
+ dbName: this.dbName,
327
+ collection,
328
+ index: spec.name,
329
+ keyPattern: (0, keys_ts_1.indexKeyPattern)(spec),
330
+ keyValue,
331
+ });
332
+ }
333
+ return err;
334
+ }
335
+ async createIndex(collection, spec) {
336
+ await this.ensureCollection(collection);
337
+ const name = spec.name || (0, keys_ts_1.defaultIndexName)(spec.key);
338
+ const full = { ...spec, name };
339
+ this.db.exec("BEGIN IMMEDIATE");
340
+ try {
341
+ this.prepare("DELETE FROM anchor_index_entries WHERE collection = ? AND index_name = ?").run(collection, name);
342
+ if (full.unique) {
343
+ // The partial unique SQL index is created *before* backfilling, so building over data that
344
+ // already violates the constraint fails loudly — matching Mongo — instead of producing an
345
+ // index that silently does not enforce.
346
+ this.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS "uxe_${sanitize(collection)}_${sanitize(name)}"
347
+ ON anchor_index_entries (collection, index_name, key)
348
+ WHERE collection = '${collection.replace(/'/g, "''")}' AND index_name = '${name.replace(/'/g, "''")}'`);
349
+ }
350
+ const rows = this.tableExists(collection)
351
+ ? this.prepare(`SELECT * FROM "${tableName(collection)}" WHERE deleted = 0`).all()
352
+ : [];
353
+ for (const raw of rows) {
354
+ const row = hydrate(raw);
355
+ for (const key of (0, keys_ts_1.extractIndexKeys)(row.doc, full)) {
356
+ try {
357
+ this.prepare("INSERT INTO anchor_index_entries (collection, index_name, key, document_id) VALUES (?, ?, ?, ?)").run(collection, name, key.encoded, row.doc._id);
358
+ }
359
+ catch (err) {
360
+ throw this.toDuplicateError(err, collection, full, key.values);
361
+ }
362
+ }
363
+ }
364
+ this.prepare("INSERT OR REPLACE INTO anchor_indexes (collection, name, spec) VALUES (?, ?, ?)").run(collection, name, JSON.stringify(full));
365
+ this.db.exec("COMMIT");
366
+ }
367
+ catch (err) {
368
+ this.db.exec("ROLLBACK");
369
+ try {
370
+ this.db.exec(`DROP INDEX IF EXISTS "uxe_${sanitize(collection)}_${sanitize(name)}"`);
371
+ }
372
+ catch {
373
+ /* best effort */
374
+ }
375
+ throw err;
376
+ }
377
+ let map = this.indexCache.get(collection);
378
+ if (!map) {
379
+ map = new Map();
380
+ this.indexCache.set(collection, map);
381
+ }
382
+ map.set(name, full);
383
+ }
384
+ async dropIndex(collection, name) {
385
+ this.db.exec(`DROP INDEX IF EXISTS "uxe_${sanitize(collection)}_${sanitize(name)}"`);
386
+ this.prepare("DELETE FROM anchor_index_entries WHERE collection = ? AND index_name = ?").run(collection, name);
387
+ this.prepare("DELETE FROM anchor_indexes WHERE collection = ? AND name = ?").run(collection, name);
388
+ this.indexCache.get(collection)?.delete(name);
389
+ }
390
+ async listIndexes(collection) {
391
+ return [...(this.indexCache.get(collection)?.values() ?? [])].map((s) => ({ ...s }));
392
+ }
393
+ async getState(key) {
394
+ const r = this.prepare("SELECT value FROM anchor_state WHERE key = ?").get(key);
395
+ return r?.value ?? null;
396
+ }
397
+ async setState(key, value) {
398
+ this.prepare("INSERT OR REPLACE INTO anchor_state (key, value) VALUES (?, ?)").run(key, value);
399
+ }
400
+ async stats() {
401
+ const collections = await this.listCollections();
402
+ let documents = 0;
403
+ let tombstones = 0;
404
+ for (const name of collections) {
405
+ if (!this.tableExists(name))
406
+ continue;
407
+ const r = this.prepare(`SELECT SUM(CASE WHEN deleted = 0 THEN 1 ELSE 0 END) AS live,
408
+ SUM(CASE WHEN deleted = 1 THEN 1 ELSE 0 END) AS dead FROM "${tableName(name)}"`).get();
409
+ documents += r.live ?? 0;
410
+ tombstones += r.dead ?? 0;
411
+ }
412
+ const idx = this.prepare("SELECT COUNT(*) AS n FROM anchor_indexes").get();
413
+ const page = this.prepare("PRAGMA page_count").get();
414
+ const size = this.prepare("PRAGMA page_size").get();
415
+ const sizeBytes = (Object.values(page)[0] ?? 0) * (Object.values(size)[0] ?? 0);
416
+ return { collections: collections.length, documents, indexes: idx.n, tombstones, sizeBytes };
417
+ }
418
+ async *scan(collection, opts = {}) {
419
+ if (!this.tableExists(collection))
420
+ return;
421
+ const batchSize = opts.batchSize ?? 500;
422
+ const table = tableName(collection);
423
+ let after = "";
424
+ for (;;) {
425
+ const sql = `SELECT * FROM "${table}" WHERE id > ?` +
426
+ (opts.includeDeleted ? "" : " AND deleted = 0") +
427
+ ` ORDER BY id ASC LIMIT ${batchSize}`;
428
+ const rows = this.prepare(sql).all(after);
429
+ if (rows.length === 0)
430
+ return;
431
+ for (const r of rows)
432
+ yield hydrate(r);
433
+ after = rows[rows.length - 1].id;
434
+ }
435
+ }
436
+ }
437
+ exports.NodeSqliteAdapter = NodeSqliteAdapter;
438
+ function tableName(collection) {
439
+ return `c_${sanitize(collection)}`;
440
+ }
441
+ function sanitize(name) {
442
+ return name.replace(/[^A-Za-z0-9_]/g, "_");
443
+ }
444
+ function hydrate(row) {
445
+ const doc = JSON.parse(row.doc);
446
+ const meta = {
447
+ version: row.version,
448
+ hlc: row.hlc,
449
+ dirty: row.dirty === 1,
450
+ deleted: row.deleted === 1,
451
+ createdAt: row.created_at,
452
+ updatedAt: row.updated_at,
453
+ deletedAt: row.deleted_at,
454
+ };
455
+ return { doc, meta };
456
+ }
457
+ //# sourceMappingURL=node-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-sqlite.js","sourceRoot":"","sources":["../../../../src/storage/adapters/node-sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { compareValues, deepClone, getPath, hasPath } from "../../query/path.js";
2
+ import type { AdapterStats, DatabaseAdapter, IndexSpec, StoragePlan, StorageResult, StoredRow, WriteOp } from "../types.js";
3
+ /**
4
+ * Shared SQL implementation for every SQLite-backed adapter.
5
+ *
6
+ * Expo SQLite, Capacitor SQLite and `node:sqlite` differ only in how you execute a statement and
7
+ * open a transaction — the schema, the index-entry mechanics and the unique-violation mapping are
8
+ * identical. Writing those three times would guarantee they drift, and the drift would show up as
9
+ * "unique indexes behave differently on iOS", which is exactly the class of bug nobody can
10
+ * reproduce.
11
+ *
12
+ * So each platform adapter supplies a tiny `SqlDriver` and inherits everything else. The shared
13
+ * storage conformance suite then runs against all of them.
14
+ */
15
+ export interface SqlDriver {
16
+ readonly name: string;
17
+ /** Statement with no result rows. */
18
+ run(sql: string, params?: unknown[]): Promise<void>;
19
+ /** Statement returning rows. */
20
+ all<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
21
+ /** Multiple statements, typically DDL. */
22
+ exec(sql: string): Promise<void>;
23
+ /** Run `fn` inside a transaction, rolling back if it throws. */
24
+ transaction<T>(fn: () => Promise<T>): Promise<T>;
25
+ close(): Promise<void>;
26
+ }
27
+ interface Row {
28
+ id: string;
29
+ doc: string;
30
+ version: number;
31
+ hlc: string;
32
+ dirty: number;
33
+ deleted: number;
34
+ created_at: string;
35
+ updated_at: string;
36
+ deleted_at: string | null;
37
+ }
38
+ export declare abstract class SqlAdapterBase implements DatabaseAdapter {
39
+ abstract readonly name: string;
40
+ protected driver: SqlDriver;
41
+ protected readonly dbName: string;
42
+ private indexCache;
43
+ private knownTables;
44
+ constructor(dbName: string);
45
+ /** Platform adapters build their driver here. */
46
+ protected abstract createDriver(): Promise<SqlDriver>;
47
+ open(): Promise<void>;
48
+ close(): Promise<void>;
49
+ destroy(): Promise<void>;
50
+ private loadIndexes;
51
+ ensureCollection(collection: string): Promise<void>;
52
+ listCollections(): Promise<string[]>;
53
+ protected tableExists(collection: string): boolean;
54
+ get(collection: string, id: string, includeDeleted?: boolean): Promise<StoredRow | null>;
55
+ /** Identical index-selection rule to the node:sqlite adapter — see its documentation. */
56
+ private chooseIndex;
57
+ find(plan: StoragePlan): Promise<StorageResult>;
58
+ count(plan: StoragePlan): Promise<number | null>;
59
+ write(ops: WriteOp[]): Promise<void>;
60
+ private applyOp;
61
+ /**
62
+ * Map a driver-specific constraint failure onto Mongo's E11000.
63
+ *
64
+ * Each SQLite binding reports the violation differently — an `errcode`, a `code` string, or only
65
+ * a message — so all three shapes are checked. Missing one would surface a raw SQL error to
66
+ * application code that is written to catch `err.code === 11000`.
67
+ */
68
+ protected toDuplicateError(err: unknown, collection: string, spec: IndexSpec, keyValue: Record<string, unknown>): Error;
69
+ createIndex(collection: string, spec: IndexSpec): Promise<void>;
70
+ dropIndex(collection: string, name: string): Promise<void>;
71
+ listIndexes(collection: string): Promise<IndexSpec[]>;
72
+ getState(key: string): Promise<string | null>;
73
+ setState(key: string, value: string): Promise<void>;
74
+ stats(): Promise<AdapterStats>;
75
+ scan(collection: string, opts?: {
76
+ includeDeleted?: boolean;
77
+ batchSize?: number;
78
+ }): AsyncIterable<StoredRow>;
79
+ }
80
+ export declare function tableName(collection: string): string;
81
+ export declare function sanitize(name: string): string;
82
+ export declare function hydrate(row: Row): StoredRow;
83
+ export { compareValues, deepClone, getPath, hasPath };
84
+ //# sourceMappingURL=sql-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-base.d.ts","sourceRoot":"","sources":["../../../../src/storage/adapters/sql-base.ts"],"names":[],"mappings":"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"}