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,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaTypes = exports.SchemaFactory = void 0;
4
+ exports.Schema_ = Schema_;
5
+ exports.Schema = Schema_;
6
+ exports.Prop = Prop;
7
+ exports.Virtual = Virtual;
8
+ exports.Index = Index;
9
+ exports.raw = raw;
10
+ const errors_ts_1 = require("../core/errors.js");
11
+ const object_id_ts_1 = require("../core/object-id.js");
12
+ const schema_ts_1 = require("../schema/schema.js");
13
+ const types_ts_1 = require("../schema/types.js");
14
+ Object.defineProperty(exports, "SchemaTypes", { enumerable: true, get: function () { return types_ts_1.SchemaTypes; } });
15
+ /**
16
+ * Decorator-based schema authoring, identical in shape to `@nestjs/mongoose`.
17
+ *
18
+ * The point is a *shared class file*: the same decorated class is imported by the Ionic/Angular app
19
+ * and by the NestJS backend, so validation rules and index declarations exist once.
20
+ *
21
+ * Shipped from a separate entry point (`anchordb/decorators`) so the base SDK never requires
22
+ * `reflect-metadata` and stays usable from plain JS and React Native.
23
+ */
24
+ const PROPS = Symbol.for("anchor:schema:props");
25
+ const OPTIONS = Symbol.for("anchor:schema:options");
26
+ const VIRTUALS = Symbol.for("anchor:schema:virtuals");
27
+ const INDEXES = Symbol.for("anchor:schema:indexes");
28
+ /** Reads design:type only when reflect-metadata is actually loaded. */
29
+ function reflectType(target, propertyKey) {
30
+ const r = Reflect;
31
+ if (typeof r.getMetadata !== "function")
32
+ return undefined;
33
+ try {
34
+ return r.getMetadata("design:type", target, propertyKey);
35
+ }
36
+ catch {
37
+ return undefined;
38
+ }
39
+ }
40
+ function ownProps(ctor) {
41
+ if (!Object.prototype.hasOwnProperty.call(ctor, PROPS)) {
42
+ // Seed from the parent so a subclass inherits its parent's paths, as Mongoose expects.
43
+ const inherited = ctor[PROPS];
44
+ Object.defineProperty(ctor, PROPS, {
45
+ value: new Map(inherited ? [...inherited] : []),
46
+ enumerable: false,
47
+ configurable: true,
48
+ writable: true,
49
+ });
50
+ }
51
+ return ctor[PROPS];
52
+ }
53
+ /** `@Schema({ timestamps: true })` on the class. */
54
+ function Schema_(options = {}) {
55
+ return (target) => {
56
+ Object.defineProperty(target, OPTIONS, {
57
+ value: options,
58
+ enumerable: false,
59
+ configurable: true,
60
+ writable: true,
61
+ });
62
+ };
63
+ }
64
+ /**
65
+ * `@Prop()`, accepting every form `@nestjs/mongoose` accepts:
66
+ *
67
+ * @Prop() infer from design:type
68
+ * @Prop(String) explicit type
69
+ * @Prop({ type: String, ... }) explicit type plus options
70
+ * @Prop([String]) array of type
71
+ * @Prop(raw({ ... })) inline nested definition
72
+ */
73
+ function Prop(arg) {
74
+ return (target, propertyKey) => {
75
+ if (typeof propertyKey === "symbol") {
76
+ throw new errors_ts_1.AnchorConfigError("@Prop() cannot be applied to a symbol-keyed property.");
77
+ }
78
+ const ctor = target.constructor;
79
+ const props = ownProps(ctor);
80
+ const record = { key: propertyKey };
81
+ if (arg !== undefined)
82
+ record.explicit = arg;
83
+ const reflected = reflectType(target, propertyKey);
84
+ if (reflected !== undefined)
85
+ record.reflected = reflected;
86
+ props.set(propertyKey, record);
87
+ };
88
+ }
89
+ /** `@Virtual()` — a computed path, matching @nestjs/mongoose v10. */
90
+ function Virtual(options) {
91
+ return (target, propertyKey) => {
92
+ const ctor = target.constructor;
93
+ if (!Object.prototype.hasOwnProperty.call(ctor, VIRTUALS)) {
94
+ Object.defineProperty(ctor, VIRTUALS, {
95
+ value: [...(ctor[VIRTUALS] ?? [])],
96
+ enumerable: false,
97
+ configurable: true,
98
+ writable: true,
99
+ });
100
+ }
101
+ const descriptor = Object.getOwnPropertyDescriptor(target, propertyKey);
102
+ const def = { name: String(propertyKey) };
103
+ if (descriptor?.get)
104
+ def.getter = function () {
105
+ return descriptor.get.call(this);
106
+ };
107
+ if (descriptor?.set)
108
+ def.setter = function (value) {
109
+ descriptor.set.call(this, value);
110
+ };
111
+ if (options)
112
+ def.options = options;
113
+ ctor[VIRTUALS].push(def);
114
+ };
115
+ }
116
+ /** Class-level index declaration, mirroring `schema.index()`. */
117
+ function Index(fields, options = {}) {
118
+ return (target) => {
119
+ const ctor = target;
120
+ if (!Object.prototype.hasOwnProperty.call(ctor, INDEXES)) {
121
+ Object.defineProperty(ctor, INDEXES, {
122
+ value: [...(ctor[INDEXES] ?? [])],
123
+ enumerable: false,
124
+ configurable: true,
125
+ writable: true,
126
+ });
127
+ }
128
+ ctor[INDEXES].push({ fields, options });
129
+ };
130
+ }
131
+ /** Inline nested definition, matching @nestjs/mongoose's `raw()`. */
132
+ function raw(definition) {
133
+ return { __raw: definition };
134
+ }
135
+ /**
136
+ * Map a reflected `design:type` onto a schema type.
137
+ *
138
+ * Returns null where inference is genuinely impossible, so the caller can throw with the property
139
+ * name attached. The ambiguous cases are exactly the ones @nestjs/mongoose also refuses:
140
+ * `Array` (no element type), `Object` (interfaces, unions, optionals) and arbitrary classes.
141
+ */
142
+ function inferFromReflected(reflected) {
143
+ if (reflected === String)
144
+ return String;
145
+ if (reflected === Number)
146
+ return Number;
147
+ if (reflected === Boolean)
148
+ return Boolean;
149
+ if (reflected === Date)
150
+ return Date;
151
+ if (reflected === object_id_ts_1.ObjectId)
152
+ return types_ts_1.SchemaTypes.ObjectId;
153
+ if (reflected === Uint8Array)
154
+ return types_ts_1.SchemaTypes.Buffer;
155
+ if (reflected === Map)
156
+ return types_ts_1.SchemaTypes.Map;
157
+ return null;
158
+ }
159
+ function buildDefinition(record, className) {
160
+ const explicit = record.explicit;
161
+ if (explicit !== undefined) {
162
+ // Arrays, constructors and raw() pass straight through; the Schema compiler understands them.
163
+ if (Array.isArray(explicit))
164
+ return explicit;
165
+ if (typeof explicit === "function")
166
+ return explicit;
167
+ const opts = explicit;
168
+ if (opts && typeof opts === "object") {
169
+ if ("type" in opts || "__raw" in opts)
170
+ return opts;
171
+ // Options given without a type: fall back to inference for the type only.
172
+ const inferred = record.reflected !== undefined ? inferFromReflected(record.reflected) : null;
173
+ if (inferred === null)
174
+ throw inferenceError(record, className);
175
+ return { ...opts, type: inferred };
176
+ }
177
+ }
178
+ const inferred = record.reflected !== undefined ? inferFromReflected(record.reflected) : null;
179
+ if (inferred === null)
180
+ throw inferenceError(record, className);
181
+ return { type: inferred };
182
+ }
183
+ function inferenceError(record, className) {
184
+ const reflectedName = typeof record.reflected === "function" ? record.reflected.name : String(record.reflected);
185
+ const reason = record.reflected === undefined
186
+ ? "no decorator metadata is available (emitDecoratorMetadata is off, or reflect-metadata was not imported)"
187
+ : reflectedName === "Array"
188
+ ? "an array's element type cannot be reflected"
189
+ : reflectedName === "Object"
190
+ ? "the reflected type is Object, which happens for interfaces, type aliases, unions and optional-with-null properties"
191
+ : `the reflected type "${reflectedName}" has no schema equivalent`;
192
+ return new errors_ts_1.AnchorConfigError(`Cannot determine the schema type for ${className}.${record.key}: ${reason}. ` +
193
+ `Pass the type explicitly, e.g. @Prop(String), @Prop({ type: String }), @Prop([String]), ` +
194
+ `or @Prop({ type: SchemaTypes.ObjectId, ref: "Other" }). ` +
195
+ `AnchorDB will not silently fall back to Mixed, because that would discard casting and ` +
196
+ `validation for this field and surface as corrupt data much later.`);
197
+ }
198
+ class SchemaFactory {
199
+ /** Build an AnchorDB `Schema` from a decorated class. */
200
+ static createForClass(target) {
201
+ const { definition, options, indexes } = SchemaFactory.toDefinition(target);
202
+ const schema = new schema_ts_1.Schema(definition, options);
203
+ const ctor = target;
204
+ for (const virtual of ctor[VIRTUALS] ?? []) {
205
+ const handle = schema.virtual(virtual.name, virtual.options);
206
+ if (virtual.getter)
207
+ handle.get(virtual.getter);
208
+ if (virtual.setter)
209
+ handle.set(virtual.setter);
210
+ }
211
+ for (const idx of indexes) {
212
+ schema.index(idx.fields, idx.options);
213
+ }
214
+ // Instance methods declared on the class become schema methods, as in @nestjs/mongoose.
215
+ for (const name of Object.getOwnPropertyNames(target.prototype)) {
216
+ if (name === "constructor")
217
+ continue;
218
+ const descriptor = Object.getOwnPropertyDescriptor(target.prototype, name);
219
+ if (descriptor && typeof descriptor.value === "function") {
220
+ schema.methods[name] = descriptor.value;
221
+ }
222
+ }
223
+ return schema;
224
+ }
225
+ /** The raw definition, shared by `createForClass` and the Mongoose emitter. */
226
+ static toDefinition(target) {
227
+ const ctor = target;
228
+ const props = ctor[PROPS];
229
+ if (!props || props.size === 0) {
230
+ throw new errors_ts_1.AnchorConfigError(`Class "${target.name}" has no @Prop() properties. ` +
231
+ `Did you forget the decorators, or is "emitDecoratorMetadata" disabled without explicit types?`);
232
+ }
233
+ const definition = {};
234
+ for (const record of props.values()) {
235
+ definition[record.key] = buildDefinition(record, target.name);
236
+ }
237
+ return {
238
+ definition,
239
+ options: ctor[OPTIONS] ?? {},
240
+ indexes: ctor[INDEXES] ?? [],
241
+ };
242
+ }
243
+ /**
244
+ * Emit the twin Mongoose schema for the backend.
245
+ *
246
+ * Called without arguments it returns the plain definition/options objects, so it works without
247
+ * mongoose installed. Pass the mongoose module to get a real `mongoose.Schema` back.
248
+ */
249
+ static toMongooseSchema(target, mongooseModule) {
250
+ const { definition, options, indexes } = SchemaFactory.toDefinition(target);
251
+ const mongooseDefinition = toMongooseDefinition(definition);
252
+ if (!mongooseModule)
253
+ return { definition: mongooseDefinition, options, indexes };
254
+ const schema = new mongooseModule.Schema(mongooseDefinition, options);
255
+ for (const idx of indexes)
256
+ schema.index(idx.fields, idx.options);
257
+ return schema;
258
+ }
259
+ }
260
+ exports.SchemaFactory = SchemaFactory;
261
+ /**
262
+ * Translate the definition into the form mongoose expects.
263
+ *
264
+ * Only two things actually differ: AnchorDB's `ObjectId` class must become
265
+ * `mongoose.Schema.Types.ObjectId` (handled by callers passing the module, or by leaving the token
266
+ * for mongoose to resolve), and `__raw` is unwrapped back into a plain nested object.
267
+ */
268
+ function toMongooseDefinition(definition) {
269
+ const out = {};
270
+ for (const [key, value] of Object.entries(definition)) {
271
+ out[key] = translate(value);
272
+ }
273
+ return out;
274
+ }
275
+ function translate(value) {
276
+ if (Array.isArray(value))
277
+ return value.map(translate);
278
+ if (value === types_ts_1.SchemaTypes.ObjectId || value === object_id_ts_1.ObjectId)
279
+ return "ObjectId";
280
+ if (value === types_ts_1.SchemaTypes.Mixed)
281
+ return "Mixed";
282
+ if (value === types_ts_1.SchemaTypes.Buffer)
283
+ return "Buffer";
284
+ if (value && typeof value === "object") {
285
+ const obj = value;
286
+ if (obj.__raw)
287
+ return toMongooseDefinition(obj.__raw);
288
+ const out = {};
289
+ for (const [k, v] of Object.entries(obj))
290
+ out[k] = k === "type" ? translate(v) : v;
291
+ return out;
292
+ }
293
+ return value;
294
+ }
295
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decorators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** Minimal typed event emitter — no Node `events` dependency, so it runs unchanged in RN and browsers. */
2
+ export type Listener<T> = (payload: T) => void;
3
+ export declare class TypedEmitter<Events extends Record<string, unknown>> {
4
+ private listeners;
5
+ on<K extends keyof Events>(event: K, listener: Listener<Events[K]>): () => void;
6
+ once<K extends keyof Events>(event: K, listener: Listener<Events[K]>): () => void;
7
+ off<K extends keyof Events>(event: K, listener: Listener<Events[K]>): void;
8
+ /**
9
+ * A throwing listener must never break the emitter — a UI callback crashing would otherwise abort
10
+ * a sync pass midway and leave the queue in an odd state. Errors are reported and swallowed.
11
+ */
12
+ emit<K extends keyof Events>(event: K, payload: Events[K]): void;
13
+ removeAllListeners(event?: keyof Events): void;
14
+ listenerCount(event: keyof Events): number;
15
+ }
16
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/events/emitter.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAE/C,qBAAa,YAAY,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,OAAO,CAAC,SAAS,CAAiD;IAElE,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAU/E,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAQjF,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI1E;;;OAGG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAahE,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI;IAK9C,aAAa,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,MAAM;CAG3C"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedEmitter = void 0;
4
+ class TypedEmitter {
5
+ constructor() {
6
+ this.listeners = new Map();
7
+ }
8
+ on(event, listener) {
9
+ let set = this.listeners.get(event);
10
+ if (!set) {
11
+ set = new Set();
12
+ this.listeners.set(event, set);
13
+ }
14
+ set.add(listener);
15
+ return () => this.off(event, listener);
16
+ }
17
+ once(event, listener) {
18
+ const off = this.on(event, ((payload) => {
19
+ off();
20
+ listener(payload);
21
+ }));
22
+ return off;
23
+ }
24
+ off(event, listener) {
25
+ this.listeners.get(event)?.delete(listener);
26
+ }
27
+ /**
28
+ * A throwing listener must never break the emitter — a UI callback crashing would otherwise abort
29
+ * a sync pass midway and leave the queue in an odd state. Errors are reported and swallowed.
30
+ */
31
+ emit(event, payload) {
32
+ const set = this.listeners.get(event);
33
+ if (!set || set.size === 0)
34
+ return;
35
+ for (const listener of [...set]) {
36
+ try {
37
+ listener(payload);
38
+ }
39
+ catch (err) {
40
+ // eslint-disable-next-line no-console
41
+ console.error(`[anchor] listener for "${String(event)}" threw:`, err);
42
+ }
43
+ }
44
+ }
45
+ removeAllListeners(event) {
46
+ if (event === undefined)
47
+ this.listeners.clear();
48
+ else
49
+ this.listeners.delete(event);
50
+ }
51
+ listenerCount(event) {
52
+ return this.listeners.get(event)?.size ?? 0;
53
+ }
54
+ }
55
+ exports.TypedEmitter = TypedEmitter;
56
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/events/emitter.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IAAzB;QACU,cAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;IAiDpE,CAAC;IA/CC,EAAE,CAAyB,KAAQ,EAAE,QAA6B;QAChE,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAA2B,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAyB,KAAQ,EAAE,QAA6B;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAkB,EAAE,EAAE;YACjD,GAAG,EAAE,CAAC;YACN,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAwB,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAyB,KAAQ,EAAE,QAA6B;QACjE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAA2B,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,IAAI,CAAyB,KAAQ,EAAE,OAAkB;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACnC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACF,QAAgC,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,KAAoB;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;;YAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,KAAmB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF;AAlDD,oCAkDC"}
@@ -0,0 +1,79 @@
1
+ import type { IndexSpec, StoredDoc } from "../storage/types.js";
2
+ /**
3
+ * Index key extraction — shared by every storage adapter so unique semantics cannot drift between
4
+ * SQLite, IndexedDB and memory.
5
+ *
6
+ * ## The MongoDB / SQL divergence this module exists to close
7
+ *
8
+ * SQL treats NULL as *not equal to itself*, so a `UNIQUE` index happily accepts any number of rows
9
+ * whose indexed column is NULL. I verified this on node:sqlite: inserting two documents that both
10
+ * omitted the indexed field succeeded.
11
+ *
12
+ * MongoDB does the opposite. A missing field is indexed **as null**, and null equals null, so the
13
+ * second such document is rejected with E11000.
14
+ *
15
+ * Left alone this diverges silently: the app accepts data on device, sync pushes it, and the real
16
+ * database rejects it much later with no obvious cause. So missing values are mapped to an explicit
17
+ * sentinel that collides with itself, reproducing Mongo's behaviour. `sparse` and partial indexes
18
+ * are then the documented way to opt back out — exactly as in Mongo.
19
+ */
20
+ /**
21
+ * Sentinel for "no value", covering BOTH a missing field and an explicit null.
22
+ *
23
+ * They share one encoding on purpose: MongoDB indexes a missing field *as null*, so `{}` and
24
+ * `{ email: null }` produce the same index entry and collide under a unique index. Separate
25
+ * sentinels would let one of each coexist on device and then be rejected by the real database on
26
+ * first sync — a divergence that only surfaces long after the data was written.
27
+ *
28
+ * `sparse` still distinguishes them: it skips documents *missing* the field while still indexing
29
+ * an explicit null. That check lives in extractIndexKeys, not here.
30
+ */
31
+ export declare const NULL_SENTINEL = " __anchor_null__";
32
+ /**
33
+ * Separator between components of a compound index key.
34
+ *
35
+ * Named rather than written inline as a raw control character: an invisible literal is impossible
36
+ * to review and trivially diverges between the writer and the reader of a key. Without a separator
37
+ * at all, ["ab","c"] and ["a","bc"] would encode identically and collide under a unique index.
38
+ */
39
+ export declare const KEY_SEPARATOR: string;
40
+ /** One extracted key: the encoded string plus the raw values, for error reporting. */
41
+ export interface IndexKey {
42
+ encoded: string;
43
+ values: Record<string, unknown>;
44
+ }
45
+ /**
46
+ * Encode a single value into a component of an index key.
47
+ *
48
+ * Type is included in the encoding so that `1` (number) and `"1"` (string) do not collide — Mongo
49
+ * treats them as different index entries because they are different BSON types.
50
+ */
51
+ export declare function encodeComponent(value: unknown): string;
52
+ /** Does the document qualify for a partial index? */
53
+ export declare function matchesPartialFilter(doc: StoredDoc, filter: Record<string, unknown> | undefined): boolean;
54
+ /**
55
+ * Extract every index key a document contributes.
56
+ *
57
+ * Returns more than one key only for multikey indexes, where an array field contributes one entry
58
+ * per element — which is what makes a unique multikey index mean "no two documents share any
59
+ * element".
60
+ *
61
+ * Returns an empty array when the document should not be indexed at all (sparse with the field
62
+ * absent, or a partial filter that does not match), which is precisely how those options let
63
+ * multiple documents escape a unique constraint.
64
+ */
65
+ export declare function extractIndexKeys(doc: StoredDoc, spec: IndexSpec): IndexKey[];
66
+ /** True when any indexed path currently holds an array, so the adapter can pick its strategy. */
67
+ export declare function isMultikeyFor(doc: StoredDoc, spec: IndexSpec): boolean;
68
+ export declare function indexKeyPattern(spec: IndexSpec): Record<string, 1 | -1>;
69
+ /** Mongo's default index name: field_direction joined by underscores, e.g. `email_1`. */
70
+ export declare function defaultIndexName(key: Array<[string, 1 | -1]>): string;
71
+ /**
72
+ * Encode a lookup key for an index whose every field has an equality constraint.
73
+ *
74
+ * Returns null when the constraints do not cover the full key. A partial key cannot be turned into
75
+ * an exact lookup against the entries table, and guessing with a prefix match could silently drop
76
+ * rows — so we decline and let the caller fall back to a scan.
77
+ */
78
+ export declare function encodeLookupKey(spec: IndexSpec, equalities: Map<string, unknown>): string | null;
79
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/index/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhE;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,QAAyB,CAAC;AAEpD,sFAAsF;AACtF,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUtD;AAMD,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,CAwCzG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,EAAE,CAqC5E;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAEtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAIvE;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAErE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAOhG"}