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,16 @@
1
+ /**
2
+ * UUIDv7 — time-ordered, used for mutation ids.
3
+ *
4
+ * Time-ordering matters here: the mutation queue is replayed in creation order, and a sortable id
5
+ * means the queue's natural primary-key order is already the correct apply order.
6
+ *
7
+ * 48 bits big-endian milliseconds
8
+ * 4 bits version (7)
9
+ * 12 bits random
10
+ * 2 bits variant (0b10)
11
+ * 62 bits random
12
+ */
13
+ export declare function uuidv7(): string;
14
+ /** Short, human-readable client identity, e.g. `cli_a3f9c2d1`. */
15
+ export declare function generateClientId(): string;
16
+ //# sourceMappingURL=uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../../src/core/uuid.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAgB/B;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
@@ -0,0 +1,33 @@
1
+ import { bytesToHex } from "./hex.js";
2
+ import { randomBytes } from "./random.js";
3
+ /**
4
+ * UUIDv7 — time-ordered, used for mutation ids.
5
+ *
6
+ * Time-ordering matters here: the mutation queue is replayed in creation order, and a sortable id
7
+ * means the queue's natural primary-key order is already the correct apply order.
8
+ *
9
+ * 48 bits big-endian milliseconds
10
+ * 4 bits version (7)
11
+ * 12 bits random
12
+ * 2 bits variant (0b10)
13
+ * 62 bits random
14
+ */
15
+ export function uuidv7() {
16
+ const now = Date.now();
17
+ const bytes = randomBytes(16);
18
+ bytes[0] = (now / 2 ** 40) & 0xff;
19
+ bytes[1] = (now / 2 ** 32) & 0xff;
20
+ bytes[2] = (now / 2 ** 24) & 0xff;
21
+ bytes[3] = (now / 2 ** 16) & 0xff;
22
+ bytes[4] = (now / 2 ** 8) & 0xff;
23
+ bytes[5] = now & 0xff;
24
+ bytes[6] = (bytes[6] & 0x0f) | 0x70; // version 7
25
+ bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10
26
+ const hex = bytesToHex(bytes);
27
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
28
+ }
29
+ /** Short, human-readable client identity, e.g. `cli_a3f9c2d1`. */
30
+ export function generateClientId() {
31
+ return `cli_${bytesToHex(randomBytes(8))}`;
32
+ }
33
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../src/core/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IAEtB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;IAClD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa;IAEnD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Schema } from "../schema/schema.js";
2
+ import { SchemaTypes, type SchemaOptions, type SchemaTypeOptions, type VirtualDefinition } from "../schema/types.js";
3
+ /** `@Schema({ timestamps: true })` on the class. */
4
+ export declare function Schema_(options?: SchemaOptions): ClassDecorator;
5
+ export { Schema_ as Schema };
6
+ export type PropArg = SchemaTypeOptions | unknown[] | (new (...args: never[]) => unknown) | undefined;
7
+ /**
8
+ * `@Prop()`, accepting every form `@nestjs/mongoose` accepts:
9
+ *
10
+ * @Prop() infer from design:type
11
+ * @Prop(String) explicit type
12
+ * @Prop({ type: String, ... }) explicit type plus options
13
+ * @Prop([String]) array of type
14
+ * @Prop(raw({ ... })) inline nested definition
15
+ */
16
+ export declare function Prop(arg?: PropArg): PropertyDecorator;
17
+ /** `@Virtual()` — a computed path, matching @nestjs/mongoose v10. */
18
+ export declare function Virtual(options?: VirtualDefinition["options"]): PropertyDecorator;
19
+ /** Class-level index declaration, mirroring `schema.index()`. */
20
+ export declare function Index(fields: Record<string, 1 | -1>, options?: Record<string, unknown>): ClassDecorator;
21
+ /** Inline nested definition, matching @nestjs/mongoose's `raw()`. */
22
+ export declare function raw(definition: Record<string, unknown>): SchemaTypeOptions;
23
+ export interface MongooseDefinition {
24
+ definition: Record<string, unknown>;
25
+ options: SchemaOptions;
26
+ indexes: Array<{
27
+ fields: Record<string, 1 | -1>;
28
+ options: Record<string, unknown>;
29
+ }>;
30
+ }
31
+ export declare class SchemaFactory {
32
+ /** Build an AnchorDB `Schema` from a decorated class. */
33
+ static createForClass<T>(target: new (...args: never[]) => T): Schema<T>;
34
+ /** The raw definition, shared by `createForClass` and the Mongoose emitter. */
35
+ static toDefinition(target: new (...args: never[]) => unknown): MongooseDefinition;
36
+ /**
37
+ * Emit the twin Mongoose schema for the backend.
38
+ *
39
+ * Called without arguments it returns the plain definition/options objects, so it works without
40
+ * mongoose installed. Pass the mongoose module to get a real `mongoose.Schema` back.
41
+ */
42
+ static toMongooseSchema(target: new (...args: never[]) => unknown, mongooseModule?: {
43
+ Schema: new (def: unknown, opts?: unknown) => unknown;
44
+ }): unknown;
45
+ }
46
+ export { SchemaTypes };
47
+ export type { SchemaOptions, SchemaTypeOptions };
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decorators/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA+DrH,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,OAAO,GAAE,aAAkB,GAAG,cAAc,CASnE;AACD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;AAE7B,MAAM,MAAM,OAAO,GAAG,iBAAiB,GAAG,OAAO,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;AAEtG;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAarD;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAsBjF;AAED,iEAAiE;AACjE,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,cAAc,CAahB;AAED,qEAAqE;AACrE,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAE1E;AAiED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACtF;AAED,qBAAa,aAAa;IACxB,yDAAyD;IACzD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IA0BxE,+EAA+E;IAC/E,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GAAG,kBAAkB;IAsBlF;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CACrB,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EACzC,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;KAAE,GACzE,OAAO;CAYX;AAgCD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,286 @@
1
+ import { AnchorConfigError } from "../core/errors.js";
2
+ import { ObjectId } from "../core/object-id.js";
3
+ import { Schema } from "../schema/schema.js";
4
+ import { SchemaTypes } from "../schema/types.js";
5
+ /**
6
+ * Decorator-based schema authoring, identical in shape to `@nestjs/mongoose`.
7
+ *
8
+ * The point is a *shared class file*: the same decorated class is imported by the Ionic/Angular app
9
+ * and by the NestJS backend, so validation rules and index declarations exist once.
10
+ *
11
+ * Shipped from a separate entry point (`anchordb/decorators`) so the base SDK never requires
12
+ * `reflect-metadata` and stays usable from plain JS and React Native.
13
+ */
14
+ const PROPS = Symbol.for("anchor:schema:props");
15
+ const OPTIONS = Symbol.for("anchor:schema:options");
16
+ const VIRTUALS = Symbol.for("anchor:schema:virtuals");
17
+ const INDEXES = Symbol.for("anchor:schema:indexes");
18
+ /** Reads design:type only when reflect-metadata is actually loaded. */
19
+ function reflectType(target, propertyKey) {
20
+ const r = Reflect;
21
+ if (typeof r.getMetadata !== "function")
22
+ return undefined;
23
+ try {
24
+ return r.getMetadata("design:type", target, propertyKey);
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ function ownProps(ctor) {
31
+ if (!Object.prototype.hasOwnProperty.call(ctor, PROPS)) {
32
+ // Seed from the parent so a subclass inherits its parent's paths, as Mongoose expects.
33
+ const inherited = ctor[PROPS];
34
+ Object.defineProperty(ctor, PROPS, {
35
+ value: new Map(inherited ? [...inherited] : []),
36
+ enumerable: false,
37
+ configurable: true,
38
+ writable: true,
39
+ });
40
+ }
41
+ return ctor[PROPS];
42
+ }
43
+ /** `@Schema({ timestamps: true })` on the class. */
44
+ export function Schema_(options = {}) {
45
+ return (target) => {
46
+ Object.defineProperty(target, OPTIONS, {
47
+ value: options,
48
+ enumerable: false,
49
+ configurable: true,
50
+ writable: true,
51
+ });
52
+ };
53
+ }
54
+ export { Schema_ as Schema };
55
+ /**
56
+ * `@Prop()`, accepting every form `@nestjs/mongoose` accepts:
57
+ *
58
+ * @Prop() infer from design:type
59
+ * @Prop(String) explicit type
60
+ * @Prop({ type: String, ... }) explicit type plus options
61
+ * @Prop([String]) array of type
62
+ * @Prop(raw({ ... })) inline nested definition
63
+ */
64
+ export function Prop(arg) {
65
+ return (target, propertyKey) => {
66
+ if (typeof propertyKey === "symbol") {
67
+ throw new AnchorConfigError("@Prop() cannot be applied to a symbol-keyed property.");
68
+ }
69
+ const ctor = target.constructor;
70
+ const props = ownProps(ctor);
71
+ const record = { key: propertyKey };
72
+ if (arg !== undefined)
73
+ record.explicit = arg;
74
+ const reflected = reflectType(target, propertyKey);
75
+ if (reflected !== undefined)
76
+ record.reflected = reflected;
77
+ props.set(propertyKey, record);
78
+ };
79
+ }
80
+ /** `@Virtual()` — a computed path, matching @nestjs/mongoose v10. */
81
+ export function Virtual(options) {
82
+ return (target, propertyKey) => {
83
+ const ctor = target.constructor;
84
+ if (!Object.prototype.hasOwnProperty.call(ctor, VIRTUALS)) {
85
+ Object.defineProperty(ctor, VIRTUALS, {
86
+ value: [...(ctor[VIRTUALS] ?? [])],
87
+ enumerable: false,
88
+ configurable: true,
89
+ writable: true,
90
+ });
91
+ }
92
+ const descriptor = Object.getOwnPropertyDescriptor(target, propertyKey);
93
+ const def = { name: String(propertyKey) };
94
+ if (descriptor?.get)
95
+ def.getter = function () {
96
+ return descriptor.get.call(this);
97
+ };
98
+ if (descriptor?.set)
99
+ def.setter = function (value) {
100
+ descriptor.set.call(this, value);
101
+ };
102
+ if (options)
103
+ def.options = options;
104
+ ctor[VIRTUALS].push(def);
105
+ };
106
+ }
107
+ /** Class-level index declaration, mirroring `schema.index()`. */
108
+ export function Index(fields, options = {}) {
109
+ return (target) => {
110
+ const ctor = target;
111
+ if (!Object.prototype.hasOwnProperty.call(ctor, INDEXES)) {
112
+ Object.defineProperty(ctor, INDEXES, {
113
+ value: [...(ctor[INDEXES] ?? [])],
114
+ enumerable: false,
115
+ configurable: true,
116
+ writable: true,
117
+ });
118
+ }
119
+ ctor[INDEXES].push({ fields, options });
120
+ };
121
+ }
122
+ /** Inline nested definition, matching @nestjs/mongoose's `raw()`. */
123
+ export function raw(definition) {
124
+ return { __raw: definition };
125
+ }
126
+ /**
127
+ * Map a reflected `design:type` onto a schema type.
128
+ *
129
+ * Returns null where inference is genuinely impossible, so the caller can throw with the property
130
+ * name attached. The ambiguous cases are exactly the ones @nestjs/mongoose also refuses:
131
+ * `Array` (no element type), `Object` (interfaces, unions, optionals) and arbitrary classes.
132
+ */
133
+ function inferFromReflected(reflected) {
134
+ if (reflected === String)
135
+ return String;
136
+ if (reflected === Number)
137
+ return Number;
138
+ if (reflected === Boolean)
139
+ return Boolean;
140
+ if (reflected === Date)
141
+ return Date;
142
+ if (reflected === ObjectId)
143
+ return SchemaTypes.ObjectId;
144
+ if (reflected === Uint8Array)
145
+ return SchemaTypes.Buffer;
146
+ if (reflected === Map)
147
+ return SchemaTypes.Map;
148
+ return null;
149
+ }
150
+ function buildDefinition(record, className) {
151
+ const explicit = record.explicit;
152
+ if (explicit !== undefined) {
153
+ // Arrays, constructors and raw() pass straight through; the Schema compiler understands them.
154
+ if (Array.isArray(explicit))
155
+ return explicit;
156
+ if (typeof explicit === "function")
157
+ return explicit;
158
+ const opts = explicit;
159
+ if (opts && typeof opts === "object") {
160
+ if ("type" in opts || "__raw" in opts)
161
+ return opts;
162
+ // Options given without a type: fall back to inference for the type only.
163
+ const inferred = record.reflected !== undefined ? inferFromReflected(record.reflected) : null;
164
+ if (inferred === null)
165
+ throw inferenceError(record, className);
166
+ return { ...opts, type: inferred };
167
+ }
168
+ }
169
+ const inferred = record.reflected !== undefined ? inferFromReflected(record.reflected) : null;
170
+ if (inferred === null)
171
+ throw inferenceError(record, className);
172
+ return { type: inferred };
173
+ }
174
+ function inferenceError(record, className) {
175
+ const reflectedName = typeof record.reflected === "function" ? record.reflected.name : String(record.reflected);
176
+ const reason = record.reflected === undefined
177
+ ? "no decorator metadata is available (emitDecoratorMetadata is off, or reflect-metadata was not imported)"
178
+ : reflectedName === "Array"
179
+ ? "an array's element type cannot be reflected"
180
+ : reflectedName === "Object"
181
+ ? "the reflected type is Object, which happens for interfaces, type aliases, unions and optional-with-null properties"
182
+ : `the reflected type "${reflectedName}" has no schema equivalent`;
183
+ return new AnchorConfigError(`Cannot determine the schema type for ${className}.${record.key}: ${reason}. ` +
184
+ `Pass the type explicitly, e.g. @Prop(String), @Prop({ type: String }), @Prop([String]), ` +
185
+ `or @Prop({ type: SchemaTypes.ObjectId, ref: "Other" }). ` +
186
+ `AnchorDB will not silently fall back to Mixed, because that would discard casting and ` +
187
+ `validation for this field and surface as corrupt data much later.`);
188
+ }
189
+ export class SchemaFactory {
190
+ /** Build an AnchorDB `Schema` from a decorated class. */
191
+ static createForClass(target) {
192
+ const { definition, options, indexes } = SchemaFactory.toDefinition(target);
193
+ const schema = new Schema(definition, options);
194
+ const ctor = target;
195
+ for (const virtual of ctor[VIRTUALS] ?? []) {
196
+ const handle = schema.virtual(virtual.name, virtual.options);
197
+ if (virtual.getter)
198
+ handle.get(virtual.getter);
199
+ if (virtual.setter)
200
+ handle.set(virtual.setter);
201
+ }
202
+ for (const idx of indexes) {
203
+ schema.index(idx.fields, idx.options);
204
+ }
205
+ // Instance methods declared on the class become schema methods, as in @nestjs/mongoose.
206
+ for (const name of Object.getOwnPropertyNames(target.prototype)) {
207
+ if (name === "constructor")
208
+ continue;
209
+ const descriptor = Object.getOwnPropertyDescriptor(target.prototype, name);
210
+ if (descriptor && typeof descriptor.value === "function") {
211
+ schema.methods[name] = descriptor.value;
212
+ }
213
+ }
214
+ return schema;
215
+ }
216
+ /** The raw definition, shared by `createForClass` and the Mongoose emitter. */
217
+ static toDefinition(target) {
218
+ const ctor = target;
219
+ const props = ctor[PROPS];
220
+ if (!props || props.size === 0) {
221
+ throw new AnchorConfigError(`Class "${target.name}" has no @Prop() properties. ` +
222
+ `Did you forget the decorators, or is "emitDecoratorMetadata" disabled without explicit types?`);
223
+ }
224
+ const definition = {};
225
+ for (const record of props.values()) {
226
+ definition[record.key] = buildDefinition(record, target.name);
227
+ }
228
+ return {
229
+ definition,
230
+ options: ctor[OPTIONS] ?? {},
231
+ indexes: ctor[INDEXES] ?? [],
232
+ };
233
+ }
234
+ /**
235
+ * Emit the twin Mongoose schema for the backend.
236
+ *
237
+ * Called without arguments it returns the plain definition/options objects, so it works without
238
+ * mongoose installed. Pass the mongoose module to get a real `mongoose.Schema` back.
239
+ */
240
+ static toMongooseSchema(target, mongooseModule) {
241
+ const { definition, options, indexes } = SchemaFactory.toDefinition(target);
242
+ const mongooseDefinition = toMongooseDefinition(definition);
243
+ if (!mongooseModule)
244
+ return { definition: mongooseDefinition, options, indexes };
245
+ const schema = new mongooseModule.Schema(mongooseDefinition, options);
246
+ for (const idx of indexes)
247
+ schema.index(idx.fields, idx.options);
248
+ return schema;
249
+ }
250
+ }
251
+ /**
252
+ * Translate the definition into the form mongoose expects.
253
+ *
254
+ * Only two things actually differ: AnchorDB's `ObjectId` class must become
255
+ * `mongoose.Schema.Types.ObjectId` (handled by callers passing the module, or by leaving the token
256
+ * for mongoose to resolve), and `__raw` is unwrapped back into a plain nested object.
257
+ */
258
+ function toMongooseDefinition(definition) {
259
+ const out = {};
260
+ for (const [key, value] of Object.entries(definition)) {
261
+ out[key] = translate(value);
262
+ }
263
+ return out;
264
+ }
265
+ function translate(value) {
266
+ if (Array.isArray(value))
267
+ return value.map(translate);
268
+ if (value === SchemaTypes.ObjectId || value === ObjectId)
269
+ return "ObjectId";
270
+ if (value === SchemaTypes.Mixed)
271
+ return "Mixed";
272
+ if (value === SchemaTypes.Buffer)
273
+ return "Buffer";
274
+ if (value && typeof value === "object") {
275
+ const obj = value;
276
+ if (obj.__raw)
277
+ return toMongooseDefinition(obj.__raw);
278
+ const out = {};
279
+ for (const [k, v] of Object.entries(obj))
280
+ out[k] = k === "type" ? translate(v) : v;
281
+ return out;
282
+ }
283
+ return value;
284
+ }
285
+ export { SchemaTypes };
286
+ //# 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,52 @@
1
+ export class TypedEmitter {
2
+ constructor() {
3
+ this.listeners = new Map();
4
+ }
5
+ on(event, listener) {
6
+ let set = this.listeners.get(event);
7
+ if (!set) {
8
+ set = new Set();
9
+ this.listeners.set(event, set);
10
+ }
11
+ set.add(listener);
12
+ return () => this.off(event, listener);
13
+ }
14
+ once(event, listener) {
15
+ const off = this.on(event, ((payload) => {
16
+ off();
17
+ listener(payload);
18
+ }));
19
+ return off;
20
+ }
21
+ off(event, listener) {
22
+ this.listeners.get(event)?.delete(listener);
23
+ }
24
+ /**
25
+ * A throwing listener must never break the emitter — a UI callback crashing would otherwise abort
26
+ * a sync pass midway and leave the queue in an odd state. Errors are reported and swallowed.
27
+ */
28
+ emit(event, payload) {
29
+ const set = this.listeners.get(event);
30
+ if (!set || set.size === 0)
31
+ return;
32
+ for (const listener of [...set]) {
33
+ try {
34
+ listener(payload);
35
+ }
36
+ catch (err) {
37
+ // eslint-disable-next-line no-console
38
+ console.error(`[anchor] listener for "${String(event)}" threw:`, err);
39
+ }
40
+ }
41
+ }
42
+ removeAllListeners(event) {
43
+ if (event === undefined)
44
+ this.listeners.clear();
45
+ else
46
+ this.listeners.delete(event);
47
+ }
48
+ listenerCount(event) {
49
+ return this.listeners.get(event)?.size ?? 0;
50
+ }
51
+ }
52
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/events/emitter.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,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"}
@@ -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"}