@earendil-works/chord 1.3.0 → 1.5.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 (841) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +129 -10
  3. package/dist/cell.d.ts +7 -7
  4. package/dist/cell.d.ts.map +1 -1
  5. package/dist/cell.js.map +1 -1
  6. package/dist/context/index.d.ts +8 -0
  7. package/dist/context/index.d.ts.map +1 -1
  8. package/dist/context/index.js +15 -0
  9. package/dist/context/index.js.map +1 -1
  10. package/dist/contract.d.ts +51 -52
  11. package/dist/contract.d.ts.map +1 -1
  12. package/dist/contract.js +19 -24
  13. package/dist/contract.js.map +1 -1
  14. package/dist/delta/apply-immutable-trusted.js +3 -4
  15. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  16. package/dist/delta/diff.d.ts.map +1 -1
  17. package/dist/delta/diff.js +5 -3
  18. package/dist/delta/diff.js.map +1 -1
  19. package/dist/delta/index.d.ts +9 -1
  20. package/dist/delta/index.d.ts.map +1 -1
  21. package/dist/delta/index.js +15 -11
  22. package/dist/delta/index.js.map +1 -1
  23. package/dist/delta/pending.d.ts +36 -0
  24. package/dist/delta/pending.d.ts.map +1 -0
  25. package/dist/delta/pending.js +143 -0
  26. package/dist/delta/pending.js.map +1 -0
  27. package/dist/delta/tracker.d.ts +12 -0
  28. package/dist/delta/tracker.d.ts.map +1 -1
  29. package/dist/delta/tracker.js +109 -39
  30. package/dist/delta/tracker.js.map +1 -1
  31. package/dist/host.d.ts.map +1 -1
  32. package/dist/host.js +9 -7
  33. package/dist/host.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/next/contracts/accepts.d.ts +81 -0
  39. package/dist/next/contracts/accepts.d.ts.map +1 -0
  40. package/dist/next/contracts/accepts.js +123 -0
  41. package/dist/next/contracts/accepts.js.map +1 -0
  42. package/dist/next/contracts/contract.d.ts +121 -0
  43. package/dist/next/contracts/contract.d.ts.map +1 -0
  44. package/dist/next/contracts/contract.js +50 -0
  45. package/dist/next/contracts/contract.js.map +1 -0
  46. package/dist/next/contracts/declare.d.ts +107 -0
  47. package/dist/next/contracts/declare.d.ts.map +1 -0
  48. package/dist/next/contracts/declare.js +136 -0
  49. package/dist/next/contracts/declare.js.map +1 -0
  50. package/dist/next/contracts/evolve.d.ts +92 -0
  51. package/dist/next/contracts/evolve.d.ts.map +1 -0
  52. package/dist/next/contracts/evolve.js +179 -0
  53. package/dist/next/contracts/evolve.js.map +1 -0
  54. package/dist/next/contracts/fingerprint.d.ts +16 -0
  55. package/dist/next/contracts/fingerprint.d.ts.map +1 -0
  56. package/dist/next/contracts/fingerprint.js +50 -0
  57. package/dist/next/contracts/fingerprint.js.map +1 -0
  58. package/dist/next/contracts/history.d.ts +71 -0
  59. package/dist/next/contracts/history.d.ts.map +1 -0
  60. package/dist/next/contracts/history.js +3 -0
  61. package/dist/next/contracts/history.js.map +1 -0
  62. package/dist/next/contracts/host-kind.d.ts +40 -0
  63. package/dist/next/contracts/host-kind.d.ts.map +1 -0
  64. package/dist/next/contracts/host-kind.js +37 -0
  65. package/dist/next/contracts/host-kind.js.map +1 -0
  66. package/dist/next/contracts/index.d.ts +7 -0
  67. package/dist/next/contracts/index.d.ts.map +1 -0
  68. package/dist/next/contracts/index.js +6 -0
  69. package/dist/next/contracts/index.js.map +1 -0
  70. package/dist/next/contracts/internal.d.ts +10 -0
  71. package/dist/next/contracts/internal.d.ts.map +1 -0
  72. package/dist/next/contracts/internal.js +9 -0
  73. package/dist/next/contracts/internal.js.map +1 -0
  74. package/dist/next/contracts/names.d.ts +3 -0
  75. package/dist/next/contracts/names.d.ts.map +1 -0
  76. package/dist/next/contracts/names.js +13 -0
  77. package/dist/next/contracts/names.js.map +1 -0
  78. package/dist/next/contracts/params.d.ts +28 -0
  79. package/dist/next/contracts/params.d.ts.map +1 -0
  80. package/dist/next/contracts/params.js +50 -0
  81. package/dist/next/contracts/params.js.map +1 -0
  82. package/dist/next/contracts/schema.d.ts +102 -0
  83. package/dist/next/contracts/schema.d.ts.map +1 -0
  84. package/dist/next/contracts/schema.js +103 -0
  85. package/dist/next/contracts/schema.js.map +1 -0
  86. package/dist/next/contracts/snapshot.d.ts +16 -0
  87. package/dist/next/contracts/snapshot.d.ts.map +1 -0
  88. package/dist/next/contracts/snapshot.js +167 -0
  89. package/dist/next/contracts/snapshot.js.map +1 -0
  90. package/dist/next/data/args.d.ts +50 -0
  91. package/dist/next/data/args.d.ts.map +1 -0
  92. package/dist/next/data/args.js +83 -0
  93. package/dist/next/data/args.js.map +1 -0
  94. package/dist/next/data/errors.d.ts +73 -0
  95. package/dist/next/data/errors.d.ts.map +1 -0
  96. package/dist/next/data/errors.js +107 -0
  97. package/dist/next/data/errors.js.map +1 -0
  98. package/dist/next/data/failure.d.ts +26 -0
  99. package/dist/next/data/failure.d.ts.map +1 -0
  100. package/dist/next/data/failure.js +72 -0
  101. package/dist/next/data/failure.js.map +1 -0
  102. package/dist/next/data/index.d.ts +4 -0
  103. package/dist/next/data/index.d.ts.map +1 -0
  104. package/dist/next/data/index.js +4 -0
  105. package/dist/next/data/index.js.map +1 -0
  106. package/dist/next/data/internal.d.ts +7 -0
  107. package/dist/next/data/internal.d.ts.map +1 -0
  108. package/dist/next/data/internal.js +8 -0
  109. package/dist/next/data/internal.js.map +1 -0
  110. package/dist/next/data/params.d.ts +20 -0
  111. package/dist/next/data/params.d.ts.map +1 -0
  112. package/dist/next/data/params.js +31 -0
  113. package/dist/next/data/params.js.map +1 -0
  114. package/dist/next/data/principal.d.ts +17 -0
  115. package/dist/next/data/principal.d.ts.map +1 -0
  116. package/dist/next/data/principal.js +41 -0
  117. package/dist/next/data/principal.js.map +1 -0
  118. package/dist/next/data/validator.d.ts +12 -0
  119. package/dist/next/data/validator.d.ts.map +1 -0
  120. package/dist/next/data/validator.js +34 -0
  121. package/dist/next/data/validator.js.map +1 -0
  122. package/dist/next/documents/address-source.d.ts +20 -0
  123. package/dist/next/documents/address-source.d.ts.map +1 -0
  124. package/dist/next/documents/address-source.js +44 -0
  125. package/dist/next/documents/address-source.js.map +1 -0
  126. package/dist/next/documents/definition.d.ts +84 -0
  127. package/dist/next/documents/definition.d.ts.map +1 -0
  128. package/dist/next/documents/definition.js +73 -0
  129. package/dist/next/documents/definition.js.map +1 -0
  130. package/dist/next/documents/documents.d.ts +106 -0
  131. package/dist/next/documents/documents.d.ts.map +1 -0
  132. package/dist/next/documents/documents.js +224 -0
  133. package/dist/next/documents/documents.js.map +1 -0
  134. package/dist/next/documents/fence.d.ts +9 -0
  135. package/dist/next/documents/fence.d.ts.map +1 -0
  136. package/dist/next/documents/fence.js +15 -0
  137. package/dist/next/documents/fence.js.map +1 -0
  138. package/dist/next/documents/handles.d.ts +76 -0
  139. package/dist/next/documents/handles.d.ts.map +1 -0
  140. package/dist/next/documents/handles.js +66 -0
  141. package/dist/next/documents/handles.js.map +1 -0
  142. package/dist/next/documents/index.d.ts +4 -0
  143. package/dist/next/documents/index.d.ts.map +1 -0
  144. package/dist/next/documents/index.js +3 -0
  145. package/dist/next/documents/index.js.map +1 -0
  146. package/dist/next/documents/internal.d.ts +9 -0
  147. package/dist/next/documents/internal.d.ts.map +1 -0
  148. package/dist/next/documents/internal.js +9 -0
  149. package/dist/next/documents/internal.js.map +1 -0
  150. package/dist/next/documents/keyed-slot.d.ts +103 -0
  151. package/dist/next/documents/keyed-slot.d.ts.map +1 -0
  152. package/dist/next/documents/keyed-slot.js +395 -0
  153. package/dist/next/documents/keyed-slot.js.map +1 -0
  154. package/dist/next/documents/line.d.ts +7 -0
  155. package/dist/next/documents/line.d.ts.map +1 -0
  156. package/dist/next/documents/line.js +14 -0
  157. package/dist/next/documents/line.js.map +1 -0
  158. package/dist/next/documents/persistence.d.ts +104 -0
  159. package/dist/next/documents/persistence.d.ts.map +1 -0
  160. package/dist/next/documents/persistence.js +128 -0
  161. package/dist/next/documents/persistence.js.map +1 -0
  162. package/dist/next/documents/residency.d.ts +31 -0
  163. package/dist/next/documents/residency.d.ts.map +1 -0
  164. package/dist/next/documents/residency.js +93 -0
  165. package/dist/next/documents/residency.js.map +1 -0
  166. package/dist/next/documents/slot.d.ts +109 -0
  167. package/dist/next/documents/slot.d.ts.map +1 -0
  168. package/dist/next/documents/slot.js +181 -0
  169. package/dist/next/documents/slot.js.map +1 -0
  170. package/dist/next/documents/transaction.d.ts +133 -0
  171. package/dist/next/documents/transaction.d.ts.map +1 -0
  172. package/dist/next/documents/transaction.js +409 -0
  173. package/dist/next/documents/transaction.js.map +1 -0
  174. package/dist/next/host/activity.d.ts +31 -0
  175. package/dist/next/host/activity.d.ts.map +1 -0
  176. package/dist/next/host/activity.js +40 -0
  177. package/dist/next/host/activity.js.map +1 -0
  178. package/dist/next/host/adapted.d.ts +49 -0
  179. package/dist/next/host/adapted.d.ts.map +1 -0
  180. package/dist/next/host/adapted.js +214 -0
  181. package/dist/next/host/adapted.js.map +1 -0
  182. package/dist/next/host/attempt.d.ts +278 -0
  183. package/dist/next/host/attempt.d.ts.map +1 -0
  184. package/dist/next/host/attempt.js +1072 -0
  185. package/dist/next/host/attempt.js.map +1 -0
  186. package/dist/next/host/backoff.d.ts +29 -0
  187. package/dist/next/host/backoff.d.ts.map +1 -0
  188. package/dist/next/host/backoff.js +69 -0
  189. package/dist/next/host/backoff.js.map +1 -0
  190. package/dist/next/host/ctx.d.ts +47 -0
  191. package/dist/next/host/ctx.d.ts.map +1 -0
  192. package/dist/next/host/ctx.js +108 -0
  193. package/dist/next/host/ctx.js.map +1 -0
  194. package/dist/next/host/deadline.d.ts +12 -0
  195. package/dist/next/host/deadline.d.ts.map +1 -0
  196. package/dist/next/host/deadline.js +40 -0
  197. package/dist/next/host/deadline.js.map +1 -0
  198. package/dist/next/host/dependencies.d.ts +65 -0
  199. package/dist/next/host/dependencies.d.ts.map +1 -0
  200. package/dist/next/host/dependencies.js +115 -0
  201. package/dist/next/host/dependencies.js.map +1 -0
  202. package/dist/next/host/destination.d.ts +48 -0
  203. package/dist/next/host/destination.d.ts.map +1 -0
  204. package/dist/next/host/destination.js +101 -0
  205. package/dist/next/host/destination.js.map +1 -0
  206. package/dist/next/host/facet.d.ts +79 -0
  207. package/dist/next/host/facet.d.ts.map +1 -0
  208. package/dist/next/host/facet.js +55 -0
  209. package/dist/next/host/facet.js.map +1 -0
  210. package/dist/next/host/follow.d.ts +52 -0
  211. package/dist/next/host/follow.d.ts.map +1 -0
  212. package/dist/next/host/follow.js +207 -0
  213. package/dist/next/host/follow.js.map +1 -0
  214. package/dist/next/host/host.d.ts +495 -0
  215. package/dist/next/host/host.d.ts.map +1 -0
  216. package/dist/next/host/host.js +1075 -0
  217. package/dist/next/host/host.js.map +1 -0
  218. package/dist/next/host/index.d.ts +17 -0
  219. package/dist/next/host/index.d.ts.map +1 -0
  220. package/dist/next/host/index.js +6 -0
  221. package/dist/next/host/index.js.map +1 -0
  222. package/dist/next/host/internal.d.ts +10 -0
  223. package/dist/next/host/internal.d.ts.map +1 -0
  224. package/dist/next/host/internal.js +8 -0
  225. package/dist/next/host/internal.js.map +1 -0
  226. package/dist/next/host/members.d.ts +50 -0
  227. package/dist/next/host/members.d.ts.map +1 -0
  228. package/dist/next/host/members.js +107 -0
  229. package/dist/next/host/members.js.map +1 -0
  230. package/dist/next/host/native.d.ts +55 -0
  231. package/dist/next/host/native.d.ts.map +1 -0
  232. package/dist/next/host/native.js +92 -0
  233. package/dist/next/host/native.js.map +1 -0
  234. package/dist/next/host/object.d.ts +290 -0
  235. package/dist/next/host/object.d.ts.map +1 -0
  236. package/dist/next/host/object.js +1127 -0
  237. package/dist/next/host/object.js.map +1 -0
  238. package/dist/next/host/parked.d.ts +23 -0
  239. package/dist/next/host/parked.d.ts.map +1 -0
  240. package/dist/next/host/parked.js +79 -0
  241. package/dist/next/host/parked.js.map +1 -0
  242. package/dist/next/host/presence.d.ts +34 -0
  243. package/dist/next/host/presence.d.ts.map +1 -0
  244. package/dist/next/host/presence.js +117 -0
  245. package/dist/next/host/presence.js.map +1 -0
  246. package/dist/next/host/ref-state.d.ts +53 -0
  247. package/dist/next/host/ref-state.d.ts.map +1 -0
  248. package/dist/next/host/ref-state.js +83 -0
  249. package/dist/next/host/ref-state.js.map +1 -0
  250. package/dist/next/host/reference-keys.d.ts +36 -0
  251. package/dist/next/host/reference-keys.d.ts.map +1 -0
  252. package/dist/next/host/reference-keys.js +168 -0
  253. package/dist/next/host/reference-keys.js.map +1 -0
  254. package/dist/next/host/reference-source.d.ts +65 -0
  255. package/dist/next/host/reference-source.d.ts.map +1 -0
  256. package/dist/next/host/reference-source.js +285 -0
  257. package/dist/next/host/reference-source.js.map +1 -0
  258. package/dist/next/host/reference.d.ts +308 -0
  259. package/dist/next/host/reference.d.ts.map +1 -0
  260. package/dist/next/host/reference.js +775 -0
  261. package/dist/next/host/reference.js.map +1 -0
  262. package/dist/next/host/retry-on.d.ts +28 -0
  263. package/dist/next/host/retry-on.d.ts.map +1 -0
  264. package/dist/next/host/retry-on.js +52 -0
  265. package/dist/next/host/retry-on.js.map +1 -0
  266. package/dist/next/host/revocation.d.ts +16 -0
  267. package/dist/next/host/revocation.d.ts.map +1 -0
  268. package/dist/next/host/revocation.js +27 -0
  269. package/dist/next/host/revocation.js.map +1 -0
  270. package/dist/next/host/root.d.ts +27 -0
  271. package/dist/next/host/root.d.ts.map +1 -0
  272. package/dist/next/host/root.js +68 -0
  273. package/dist/next/host/root.js.map +1 -0
  274. package/dist/next/host/route.d.ts +64 -0
  275. package/dist/next/host/route.d.ts.map +1 -0
  276. package/dist/next/host/route.js +190 -0
  277. package/dist/next/host/route.js.map +1 -0
  278. package/dist/next/host/routines.d.ts +76 -0
  279. package/dist/next/host/routines.d.ts.map +1 -0
  280. package/dist/next/host/routines.js +350 -0
  281. package/dist/next/host/routines.js.map +1 -0
  282. package/dist/next/host/sleep.d.ts +9 -0
  283. package/dist/next/host/sleep.d.ts.map +1 -0
  284. package/dist/next/host/sleep.js +40 -0
  285. package/dist/next/host/sleep.js.map +1 -0
  286. package/dist/next/host/staging.d.ts +94 -0
  287. package/dist/next/host/staging.d.ts.map +1 -0
  288. package/dist/next/host/staging.js +302 -0
  289. package/dist/next/host/staging.js.map +1 -0
  290. package/dist/next/host/unbound.d.ts +30 -0
  291. package/dist/next/host/unbound.d.ts.map +1 -0
  292. package/dist/next/host/unbound.js +67 -0
  293. package/dist/next/host/unbound.js.map +1 -0
  294. package/dist/next/host/uuid.d.ts +3 -0
  295. package/dist/next/host/uuid.d.ts.map +1 -0
  296. package/dist/next/host/uuid.js +38 -0
  297. package/dist/next/host/uuid.js.map +1 -0
  298. package/dist/next/index.d.ts +28 -0
  299. package/dist/next/index.d.ts.map +1 -0
  300. package/dist/next/index.js +18 -0
  301. package/dist/next/index.js.map +1 -0
  302. package/dist/next/jobs/definition.d.ts +96 -0
  303. package/dist/next/jobs/definition.d.ts.map +1 -0
  304. package/dist/next/jobs/definition.js +83 -0
  305. package/dist/next/jobs/definition.js.map +1 -0
  306. package/dist/next/jobs/index.d.ts +5 -0
  307. package/dist/next/jobs/index.d.ts.map +1 -0
  308. package/dist/next/jobs/index.js +3 -0
  309. package/dist/next/jobs/index.js.map +1 -0
  310. package/dist/next/jobs/internal.d.ts +3 -0
  311. package/dist/next/jobs/internal.d.ts.map +1 -0
  312. package/dist/next/jobs/internal.js +4 -0
  313. package/dist/next/jobs/internal.js.map +1 -0
  314. package/dist/next/jobs/job.d.ts +152 -0
  315. package/dist/next/jobs/job.d.ts.map +1 -0
  316. package/dist/next/jobs/job.js +320 -0
  317. package/dist/next/jobs/job.js.map +1 -0
  318. package/dist/next/jobs/persisted.d.ts +38 -0
  319. package/dist/next/jobs/persisted.d.ts.map +1 -0
  320. package/dist/next/jobs/persisted.js +95 -0
  321. package/dist/next/jobs/persisted.js.map +1 -0
  322. package/dist/next/jobs/records.d.ts +231 -0
  323. package/dist/next/jobs/records.d.ts.map +1 -0
  324. package/dist/next/jobs/records.js +869 -0
  325. package/dist/next/jobs/records.js.map +1 -0
  326. package/dist/next/jobs/run-states.d.ts +69 -0
  327. package/dist/next/jobs/run-states.d.ts.map +1 -0
  328. package/dist/next/jobs/run-states.js +228 -0
  329. package/dist/next/jobs/run-states.js.map +1 -0
  330. package/dist/next/jobs/run.d.ts +113 -0
  331. package/dist/next/jobs/run.d.ts.map +1 -0
  332. package/dist/next/jobs/run.js +200 -0
  333. package/dist/next/jobs/run.js.map +1 -0
  334. package/dist/next/jobs/running.d.ts +44 -0
  335. package/dist/next/jobs/running.d.ts.map +1 -0
  336. package/dist/next/jobs/running.js +117 -0
  337. package/dist/next/jobs/running.js.map +1 -0
  338. package/dist/next/jobs/stored.d.ts +63 -0
  339. package/dist/next/jobs/stored.d.ts.map +1 -0
  340. package/dist/next/jobs/stored.js +55 -0
  341. package/dist/next/jobs/stored.js.map +1 -0
  342. package/dist/next/link/binary.d.ts +4 -0
  343. package/dist/next/link/binary.d.ts.map +1 -0
  344. package/dist/next/link/binary.js +534 -0
  345. package/dist/next/link/binary.js.map +1 -0
  346. package/dist/next/link/channel.d.ts +63 -0
  347. package/dist/next/link/channel.d.ts.map +1 -0
  348. package/dist/next/link/channel.js +202 -0
  349. package/dist/next/link/channel.js.map +1 -0
  350. package/dist/next/link/errors.d.ts +7 -0
  351. package/dist/next/link/errors.d.ts.map +1 -0
  352. package/dist/next/link/errors.js +21 -0
  353. package/dist/next/link/errors.js.map +1 -0
  354. package/dist/next/link/index.d.ts +8 -0
  355. package/dist/next/link/index.d.ts.map +1 -0
  356. package/dist/next/link/index.js +8 -0
  357. package/dist/next/link/index.js.map +1 -0
  358. package/dist/next/link/internal.d.ts +9 -0
  359. package/dist/next/link/internal.d.ts.map +1 -0
  360. package/dist/next/link/internal.js +10 -0
  361. package/dist/next/link/internal.js.map +1 -0
  362. package/dist/next/link/ipc.d.ts +22 -0
  363. package/dist/next/link/ipc.d.ts.map +1 -0
  364. package/dist/next/link/ipc.js +64 -0
  365. package/dist/next/link/ipc.js.map +1 -0
  366. package/dist/next/link/link.d.ts +34 -0
  367. package/dist/next/link/link.d.ts.map +1 -0
  368. package/dist/next/link/link.js +87 -0
  369. package/dist/next/link/link.js.map +1 -0
  370. package/dist/next/link/message.d.ts +249 -0
  371. package/dist/next/link/message.d.ts.map +1 -0
  372. package/dist/next/link/message.js +123 -0
  373. package/dist/next/link/message.js.map +1 -0
  374. package/dist/next/link/part.d.ts +80 -0
  375. package/dist/next/link/part.d.ts.map +1 -0
  376. package/dist/next/link/part.js +164 -0
  377. package/dist/next/link/part.js.map +1 -0
  378. package/dist/next/link/text.d.ts +6 -0
  379. package/dist/next/link/text.d.ts.map +1 -0
  380. package/dist/next/link/text.js +335 -0
  381. package/dist/next/link/text.js.map +1 -0
  382. package/dist/next/link/values.d.ts +40 -0
  383. package/dist/next/link/values.d.ts.map +1 -0
  384. package/dist/next/link/values.js +117 -0
  385. package/dist/next/link/values.js.map +1 -0
  386. package/dist/next/link/websocket.d.ts +26 -0
  387. package/dist/next/link/websocket.d.ts.map +1 -0
  388. package/dist/next/link/websocket.js +91 -0
  389. package/dist/next/link/websocket.js.map +1 -0
  390. package/dist/next/registries/contribution.d.ts +50 -0
  391. package/dist/next/registries/contribution.d.ts.map +1 -0
  392. package/dist/next/registries/contribution.js +129 -0
  393. package/dist/next/registries/contribution.js.map +1 -0
  394. package/dist/next/registries/entries.d.ts +18 -0
  395. package/dist/next/registries/entries.d.ts.map +1 -0
  396. package/dist/next/registries/entries.js +42 -0
  397. package/dist/next/registries/entries.js.map +1 -0
  398. package/dist/next/registries/index.d.ts +3 -0
  399. package/dist/next/registries/index.d.ts.map +1 -0
  400. package/dist/next/registries/index.js +5 -0
  401. package/dist/next/registries/index.js.map +1 -0
  402. package/dist/next/registries/internal.d.ts +4 -0
  403. package/dist/next/registries/internal.d.ts.map +1 -0
  404. package/dist/next/registries/internal.js +5 -0
  405. package/dist/next/registries/internal.js.map +1 -0
  406. package/dist/next/registries/record.d.ts +94 -0
  407. package/dist/next/registries/record.d.ts.map +1 -0
  408. package/dist/next/registries/record.js +253 -0
  409. package/dist/next/registries/record.js.map +1 -0
  410. package/dist/next/registries/registry.d.ts +74 -0
  411. package/dist/next/registries/registry.d.ts.map +1 -0
  412. package/dist/next/registries/registry.js +14 -0
  413. package/dist/next/registries/registry.js.map +1 -0
  414. package/dist/next/registries/value.d.ts +48 -0
  415. package/dist/next/registries/value.d.ts.map +1 -0
  416. package/dist/next/registries/value.js +199 -0
  417. package/dist/next/registries/value.js.map +1 -0
  418. package/dist/next/remote/calls.d.ts +25 -0
  419. package/dist/next/remote/calls.d.ts.map +1 -0
  420. package/dist/next/remote/calls.js +62 -0
  421. package/dist/next/remote/calls.js.map +1 -0
  422. package/dist/next/remote/consumer.d.ts +42 -0
  423. package/dist/next/remote/consumer.d.ts.map +1 -0
  424. package/dist/next/remote/consumer.js +343 -0
  425. package/dist/next/remote/consumer.js.map +1 -0
  426. package/dist/next/remote/hold.d.ts +130 -0
  427. package/dist/next/remote/hold.d.ts.map +1 -0
  428. package/dist/next/remote/hold.js +537 -0
  429. package/dist/next/remote/hold.js.map +1 -0
  430. package/dist/next/remote/host-link.d.ts +77 -0
  431. package/dist/next/remote/host-link.d.ts.map +1 -0
  432. package/dist/next/remote/host-link.js +182 -0
  433. package/dist/next/remote/host-link.js.map +1 -0
  434. package/dist/next/remote/internal.d.ts +6 -0
  435. package/dist/next/remote/internal.d.ts.map +1 -0
  436. package/dist/next/remote/internal.js +6 -0
  437. package/dist/next/remote/internal.js.map +1 -0
  438. package/dist/next/remote/path.d.ts +46 -0
  439. package/dist/next/remote/path.d.ts.map +1 -0
  440. package/dist/next/remote/path.js +73 -0
  441. package/dist/next/remote/path.js.map +1 -0
  442. package/dist/next/remote/provider.d.ts +76 -0
  443. package/dist/next/remote/provider.d.ts.map +1 -0
  444. package/dist/next/remote/provider.js +506 -0
  445. package/dist/next/remote/provider.js.map +1 -0
  446. package/dist/next/remote/relay.d.ts +58 -0
  447. package/dist/next/remote/relay.d.ts.map +1 -0
  448. package/dist/next/remote/relay.js +117 -0
  449. package/dist/next/remote/relay.js.map +1 -0
  450. package/dist/next/remote/remote-object.d.ts +133 -0
  451. package/dist/next/remote/remote-object.d.ts.map +1 -0
  452. package/dist/next/remote/remote-object.js +411 -0
  453. package/dist/next/remote/remote-object.js.map +1 -0
  454. package/dist/next/remote/replica.d.ts +59 -0
  455. package/dist/next/remote/replica.d.ts.map +1 -0
  456. package/dist/next/remote/replica.js +125 -0
  457. package/dist/next/remote/replica.js.map +1 -0
  458. package/dist/next/state/batch.d.ts +64 -0
  459. package/dist/next/state/batch.d.ts.map +1 -0
  460. package/dist/next/state/batch.js +163 -0
  461. package/dist/next/state/batch.js.map +1 -0
  462. package/dist/next/state/derive.d.ts +52 -0
  463. package/dist/next/state/derive.d.ts.map +1 -0
  464. package/dist/next/state/derive.js +182 -0
  465. package/dist/next/state/derive.js.map +1 -0
  466. package/dist/next/state/index.d.ts +6 -0
  467. package/dist/next/state/index.d.ts.map +1 -0
  468. package/dist/next/state/index.js +4 -0
  469. package/dist/next/state/index.js.map +1 -0
  470. package/dist/next/state/internal.d.ts +6 -0
  471. package/dist/next/state/internal.d.ts.map +1 -0
  472. package/dist/next/state/internal.js +8 -0
  473. package/dist/next/state/internal.js.map +1 -0
  474. package/dist/next/state/native-source.d.ts +106 -0
  475. package/dist/next/state/native-source.d.ts.map +1 -0
  476. package/dist/next/state/native-source.js +240 -0
  477. package/dist/next/state/native-source.js.map +1 -0
  478. package/dist/next/state/watchable.d.ts +114 -0
  479. package/dist/next/state/watchable.d.ts.map +1 -0
  480. package/dist/next/state/watchable.js +156 -0
  481. package/dist/next/state/watchable.js.map +1 -0
  482. package/dist/next/state/writable.d.ts +32 -0
  483. package/dist/next/state/writable.d.ts.map +1 -0
  484. package/dist/next/state/writable.js +49 -0
  485. package/dist/next/state/writable.js.map +1 -0
  486. package/dist/next/store/adapter.d.ts +67 -0
  487. package/dist/next/store/adapter.d.ts.map +1 -0
  488. package/dist/next/store/adapter.js +118 -0
  489. package/dist/next/store/adapter.js.map +1 -0
  490. package/dist/next/store/allocator.d.ts +17 -0
  491. package/dist/next/store/allocator.d.ts.map +1 -0
  492. package/dist/next/store/allocator.js +30 -0
  493. package/dist/next/store/allocator.js.map +1 -0
  494. package/dist/next/store/applier.d.ts +8 -0
  495. package/dist/next/store/applier.d.ts.map +1 -0
  496. package/dist/next/store/applier.js +375 -0
  497. package/dist/next/store/applier.js.map +1 -0
  498. package/dist/next/store/apply-batch.d.ts +12 -0
  499. package/dist/next/store/apply-batch.d.ts.map +1 -0
  500. package/dist/next/store/apply-batch.js +83 -0
  501. package/dist/next/store/apply-batch.js.map +1 -0
  502. package/dist/next/store/archive.d.ts +32 -0
  503. package/dist/next/store/archive.d.ts.map +1 -0
  504. package/dist/next/store/archive.js +129 -0
  505. package/dist/next/store/archive.js.map +1 -0
  506. package/dist/next/store/backend.d.ts +10 -0
  507. package/dist/next/store/backend.d.ts.map +1 -0
  508. package/dist/next/store/backend.js +15 -0
  509. package/dist/next/store/backend.js.map +1 -0
  510. package/dist/next/store/catalog.d.ts +24 -0
  511. package/dist/next/store/catalog.d.ts.map +1 -0
  512. package/dist/next/store/catalog.js +17 -0
  513. package/dist/next/store/catalog.js.map +1 -0
  514. package/dist/next/store/claims.d.ts +23 -0
  515. package/dist/next/store/claims.d.ts.map +1 -0
  516. package/dist/next/store/claims.js +65 -0
  517. package/dist/next/store/claims.js.map +1 -0
  518. package/dist/next/store/columns.d.ts +77 -0
  519. package/dist/next/store/columns.d.ts.map +1 -0
  520. package/dist/next/store/columns.js +77 -0
  521. package/dist/next/store/columns.js.map +1 -0
  522. package/dist/next/store/engine.d.ts +176 -0
  523. package/dist/next/store/engine.d.ts.map +1 -0
  524. package/dist/next/store/engine.js +283 -0
  525. package/dist/next/store/engine.js.map +1 -0
  526. package/dist/next/store/evaluate.d.ts +17 -0
  527. package/dist/next/store/evaluate.d.ts.map +1 -0
  528. package/dist/next/store/evaluate.js +128 -0
  529. package/dist/next/store/evaluate.js.map +1 -0
  530. package/dist/next/store/export.d.ts +17 -0
  531. package/dist/next/store/export.d.ts.map +1 -0
  532. package/dist/next/store/export.js +200 -0
  533. package/dist/next/store/export.js.map +1 -0
  534. package/dist/next/store/expression.d.ts +150 -0
  535. package/dist/next/store/expression.d.ts.map +1 -0
  536. package/dist/next/store/expression.js +268 -0
  537. package/dist/next/store/expression.js.map +1 -0
  538. package/dist/next/store/import.d.ts +10 -0
  539. package/dist/next/store/import.d.ts.map +1 -0
  540. package/dist/next/store/import.js +276 -0
  541. package/dist/next/store/import.js.map +1 -0
  542. package/dist/next/store/index.d.ts +16 -0
  543. package/dist/next/store/index.d.ts.map +1 -0
  544. package/dist/next/store/index.js +13 -0
  545. package/dist/next/store/index.js.map +1 -0
  546. package/dist/next/store/json-column.d.ts +33 -0
  547. package/dist/next/store/json-column.d.ts.map +1 -0
  548. package/dist/next/store/json-column.js +61 -0
  549. package/dist/next/store/json-column.js.map +1 -0
  550. package/dist/next/store/jsonl.d.ts +9 -0
  551. package/dist/next/store/jsonl.d.ts.map +1 -0
  552. package/dist/next/store/jsonl.js +61 -0
  553. package/dist/next/store/jsonl.js.map +1 -0
  554. package/dist/next/store/outbox.d.ts +26 -0
  555. package/dist/next/store/outbox.d.ts.map +1 -0
  556. package/dist/next/store/outbox.js +80 -0
  557. package/dist/next/store/outbox.js.map +1 -0
  558. package/dist/next/store/query.d.ts +39 -0
  559. package/dist/next/store/query.d.ts.map +1 -0
  560. package/dist/next/store/query.js +97 -0
  561. package/dist/next/store/query.js.map +1 -0
  562. package/dist/next/store/refusal.d.ts +15 -0
  563. package/dist/next/store/refusal.d.ts.map +1 -0
  564. package/dist/next/store/refusal.js +36 -0
  565. package/dist/next/store/refusal.js.map +1 -0
  566. package/dist/next/store/rows.d.ts +80 -0
  567. package/dist/next/store/rows.d.ts.map +1 -0
  568. package/dist/next/store/rows.js +183 -0
  569. package/dist/next/store/rows.js.map +1 -0
  570. package/dist/next/store/schema.d.ts +25 -0
  571. package/dist/next/store/schema.d.ts.map +1 -0
  572. package/dist/next/store/schema.js +115 -0
  573. package/dist/next/store/schema.js.map +1 -0
  574. package/dist/next/store/sql.d.ts +73 -0
  575. package/dist/next/store/sql.d.ts.map +1 -0
  576. package/dist/next/store/sql.js +234 -0
  577. package/dist/next/store/sql.js.map +1 -0
  578. package/dist/next/store/step.d.ts +48 -0
  579. package/dist/next/store/step.d.ts.map +1 -0
  580. package/dist/next/store/step.js +50 -0
  581. package/dist/next/store/step.js.map +1 -0
  582. package/dist/next/store/store.d.ts +161 -0
  583. package/dist/next/store/store.d.ts.map +1 -0
  584. package/dist/next/store/store.js +627 -0
  585. package/dist/next/store/store.js.map +1 -0
  586. package/dist/next/store/table-changes.d.ts +29 -0
  587. package/dist/next/store/table-changes.d.ts.map +1 -0
  588. package/dist/next/store/table-changes.js +102 -0
  589. package/dist/next/store/table-changes.js.map +1 -0
  590. package/dist/next/store/table-evolve.d.ts +74 -0
  591. package/dist/next/store/table-evolve.d.ts.map +1 -0
  592. package/dist/next/store/table-evolve.js +201 -0
  593. package/dist/next/store/table-evolve.js.map +1 -0
  594. package/dist/next/store/table-handle.d.ts +67 -0
  595. package/dist/next/store/table-handle.d.ts.map +1 -0
  596. package/dist/next/store/table-handle.js +101 -0
  597. package/dist/next/store/table-handle.js.map +1 -0
  598. package/dist/next/store/table-history.d.ts +75 -0
  599. package/dist/next/store/table-history.d.ts.map +1 -0
  600. package/dist/next/store/table-history.js +42 -0
  601. package/dist/next/store/table-history.js.map +1 -0
  602. package/dist/next/store/table-migration.d.ts +16 -0
  603. package/dist/next/store/table-migration.d.ts.map +1 -0
  604. package/dist/next/store/table-migration.js +202 -0
  605. package/dist/next/store/table-migration.js.map +1 -0
  606. package/dist/next/store/table-writes.d.ts +125 -0
  607. package/dist/next/store/table-writes.d.ts.map +1 -0
  608. package/dist/next/store/table-writes.js +165 -0
  609. package/dist/next/store/table-writes.js.map +1 -0
  610. package/dist/next/store/table.d.ts +80 -0
  611. package/dist/next/store/table.d.ts.map +1 -0
  612. package/dist/next/store/table.js +103 -0
  613. package/dist/next/store/table.js.map +1 -0
  614. package/dist/next/store/text.d.ts +14 -0
  615. package/dist/next/store/text.d.ts.map +1 -0
  616. package/dist/next/store/text.js +51 -0
  617. package/dist/next/store/text.js.map +1 -0
  618. package/dist/next/store/writes.d.ts +5 -0
  619. package/dist/next/store/writes.d.ts.map +1 -0
  620. package/dist/next/store/writes.js +4 -0
  621. package/dist/next/store/writes.js.map +1 -0
  622. package/dist/next-node/compression.d.ts +7 -0
  623. package/dist/next-node/compression.d.ts.map +1 -0
  624. package/dist/next-node/compression.js +24 -0
  625. package/dist/next-node/compression.js.map +1 -0
  626. package/dist/next-node/http/admission.d.ts +63 -0
  627. package/dist/next-node/http/admission.d.ts.map +1 -0
  628. package/dist/next-node/http/admission.js +134 -0
  629. package/dist/next-node/http/admission.js.map +1 -0
  630. package/dist/next-node/http/authenticate.d.ts +21 -0
  631. package/dist/next-node/http/authenticate.d.ts.map +1 -0
  632. package/dist/next-node/http/authenticate.js +34 -0
  633. package/dist/next-node/http/authenticate.js.map +1 -0
  634. package/dist/next-node/http/cookies.d.ts +24 -0
  635. package/dist/next-node/http/cookies.d.ts.map +1 -0
  636. package/dist/next-node/http/cookies.js +62 -0
  637. package/dist/next-node/http/cookies.js.map +1 -0
  638. package/dist/next-node/http/file.d.ts +23 -0
  639. package/dist/next-node/http/file.d.ts.map +1 -0
  640. package/dist/next-node/http/file.js +94 -0
  641. package/dist/next-node/http/file.js.map +1 -0
  642. package/dist/next-node/http/headers.d.ts +37 -0
  643. package/dist/next-node/http/headers.d.ts.map +1 -0
  644. package/dist/next-node/http/headers.js +129 -0
  645. package/dist/next-node/http/headers.js.map +1 -0
  646. package/dist/next-node/http/http.d.ts +100 -0
  647. package/dist/next-node/http/http.d.ts.map +1 -0
  648. package/dist/next-node/http/http.js +462 -0
  649. package/dist/next-node/http/http.js.map +1 -0
  650. package/dist/next-node/http/incoming.d.ts +19 -0
  651. package/dist/next-node/http/incoming.d.ts.map +1 -0
  652. package/dist/next-node/http/incoming.js +31 -0
  653. package/dist/next-node/http/incoming.js.map +1 -0
  654. package/dist/next-node/http/index.d.ts +11 -0
  655. package/dist/next-node/http/index.d.ts.map +1 -0
  656. package/dist/next-node/http/index.js +12 -0
  657. package/dist/next-node/http/index.js.map +1 -0
  658. package/dist/next-node/http/node.d.ts +78 -0
  659. package/dist/next-node/http/node.d.ts.map +1 -0
  660. package/dist/next-node/http/node.js +291 -0
  661. package/dist/next-node/http/node.js.map +1 -0
  662. package/dist/next-node/http/request.d.ts +54 -0
  663. package/dist/next-node/http/request.d.ts.map +1 -0
  664. package/dist/next-node/http/request.js +116 -0
  665. package/dist/next-node/http/request.js.map +1 -0
  666. package/dist/next-node/http/response.d.ts +63 -0
  667. package/dist/next-node/http/response.d.ts.map +1 -0
  668. package/dist/next-node/http/response.js +202 -0
  669. package/dist/next-node/http/response.js.map +1 -0
  670. package/dist/next-node/http/router.d.ts +114 -0
  671. package/dist/next-node/http/router.d.ts.map +1 -0
  672. package/dist/next-node/http/router.js +261 -0
  673. package/dist/next-node/http/router.js.map +1 -0
  674. package/dist/next-node/http/upgrades.d.ts +58 -0
  675. package/dist/next-node/http/upgrades.d.ts.map +1 -0
  676. package/dist/next-node/http/upgrades.js +184 -0
  677. package/dist/next-node/http/upgrades.js.map +1 -0
  678. package/dist/next-node/plugins/build.d.ts +57 -0
  679. package/dist/next-node/plugins/build.d.ts.map +1 -0
  680. package/dist/next-node/plugins/build.js +334 -0
  681. package/dist/next-node/plugins/build.js.map +1 -0
  682. package/dist/next-node/plugins/discover.d.ts +36 -0
  683. package/dist/next-node/plugins/discover.d.ts.map +1 -0
  684. package/dist/next-node/plugins/discover.js +91 -0
  685. package/dist/next-node/plugins/discover.js.map +1 -0
  686. package/dist/next-node/plugins/evaluate.d.ts +33 -0
  687. package/dist/next-node/plugins/evaluate.d.ts.map +1 -0
  688. package/dist/next-node/plugins/evaluate.js +98 -0
  689. package/dist/next-node/plugins/evaluate.js.map +1 -0
  690. package/dist/next-node/plugins/index.d.ts +9 -0
  691. package/dist/next-node/plugins/index.d.ts.map +1 -0
  692. package/dist/next-node/plugins/index.js +11 -0
  693. package/dist/next-node/plugins/index.js.map +1 -0
  694. package/dist/next-node/plugins/install.d.ts +13 -0
  695. package/dist/next-node/plugins/install.d.ts.map +1 -0
  696. package/dist/next-node/plugins/install.js +37 -0
  697. package/dist/next-node/plugins/install.js.map +1 -0
  698. package/dist/next-node/plugins/plugins.d.ts +135 -0
  699. package/dist/next-node/plugins/plugins.d.ts.map +1 -0
  700. package/dist/next-node/plugins/plugins.js +206 -0
  701. package/dist/next-node/plugins/plugins.js.map +1 -0
  702. package/dist/next-node/plugins/runtime.d.ts +41 -0
  703. package/dist/next-node/plugins/runtime.d.ts.map +1 -0
  704. package/dist/next-node/plugins/runtime.js +136 -0
  705. package/dist/next-node/plugins/runtime.js.map +1 -0
  706. package/dist/next-node/plugins/stack.d.ts +16 -0
  707. package/dist/next-node/plugins/stack.d.ts.map +1 -0
  708. package/dist/next-node/plugins/stack.js +61 -0
  709. package/dist/next-node/plugins/stack.js.map +1 -0
  710. package/dist/next-node/plugins/watcher.d.ts +58 -0
  711. package/dist/next-node/plugins/watcher.d.ts.map +1 -0
  712. package/dist/next-node/plugins/watcher.js +281 -0
  713. package/dist/next-node/plugins/watcher.js.map +1 -0
  714. package/dist/next-node/workers/control.d.ts +83 -0
  715. package/dist/next-node/workers/control.d.ts.map +1 -0
  716. package/dist/next-node/workers/control.js +77 -0
  717. package/dist/next-node/workers/control.js.map +1 -0
  718. package/dist/next-node/workers/index.d.ts +5 -0
  719. package/dist/next-node/workers/index.d.ts.map +1 -0
  720. package/dist/next-node/workers/index.js +7 -0
  721. package/dist/next-node/workers/index.js.map +1 -0
  722. package/dist/next-node/workers/lock.d.ts +21 -0
  723. package/dist/next-node/workers/lock.d.ts.map +1 -0
  724. package/dist/next-node/workers/lock.js +137 -0
  725. package/dist/next-node/workers/lock.js.map +1 -0
  726. package/dist/next-node/workers/main.d.ts +46 -0
  727. package/dist/next-node/workers/main.d.ts.map +1 -0
  728. package/dist/next-node/workers/main.js +230 -0
  729. package/dist/next-node/workers/main.js.map +1 -0
  730. package/dist/next-node/workers/process.d.ts +42 -0
  731. package/dist/next-node/workers/process.d.ts.map +1 -0
  732. package/dist/next-node/workers/process.js +125 -0
  733. package/dist/next-node/workers/process.js.map +1 -0
  734. package/dist/next-node/workers/workers.d.ts +80 -0
  735. package/dist/next-node/workers/workers.d.ts.map +1 -0
  736. package/dist/next-node/workers/workers.js +572 -0
  737. package/dist/next-node/workers/workers.js.map +1 -0
  738. package/dist/object.d.ts +4 -4
  739. package/dist/object.d.ts.map +1 -1
  740. package/dist/object.js +3 -4
  741. package/dist/object.js.map +1 -1
  742. package/dist/output.d.ts +9 -3
  743. package/dist/output.d.ts.map +1 -1
  744. package/dist/output.js +21 -9
  745. package/dist/output.js.map +1 -1
  746. package/dist/remote.d.ts.map +1 -1
  747. package/dist/remote.js +2 -2
  748. package/dist/remote.js.map +1 -1
  749. package/dist/schema.d.ts +8 -4
  750. package/dist/schema.d.ts.map +1 -1
  751. package/dist/schema.js +180 -5
  752. package/dist/schema.js.map +1 -1
  753. package/dist/sqlite/cloudflare.d.ts +54 -0
  754. package/dist/sqlite/cloudflare.d.ts.map +1 -0
  755. package/dist/sqlite/cloudflare.js +144 -0
  756. package/dist/sqlite/cloudflare.js.map +1 -0
  757. package/dist/sqlite/database.d.ts +40 -0
  758. package/dist/sqlite/database.d.ts.map +1 -0
  759. package/dist/sqlite/database.js +2 -0
  760. package/dist/sqlite/database.js.map +1 -0
  761. package/dist/sqlite/index.d.ts +4 -0
  762. package/dist/sqlite/index.d.ts.map +1 -0
  763. package/dist/sqlite/index.js +3 -0
  764. package/dist/sqlite/index.js.map +1 -0
  765. package/dist/sqlite/migrations.d.ts +10 -0
  766. package/dist/sqlite/migrations.d.ts.map +1 -0
  767. package/dist/sqlite/migrations.js +33 -0
  768. package/dist/sqlite/migrations.js.map +1 -0
  769. package/dist/sqlite/node.d.ts +41 -0
  770. package/dist/sqlite/node.d.ts.map +1 -0
  771. package/dist/sqlite/node.js +191 -0
  772. package/dist/sqlite/node.js.map +1 -0
  773. package/dist/sqlite/schema.d.ts +3 -0
  774. package/dist/sqlite/schema.d.ts.map +1 -0
  775. package/dist/sqlite/schema.js +10 -0
  776. package/dist/sqlite/schema.js.map +1 -0
  777. package/dist/telemetry-sqlite/index.d.ts +24 -0
  778. package/dist/telemetry-sqlite/index.d.ts.map +1 -0
  779. package/dist/telemetry-sqlite/index.js +273 -0
  780. package/dist/telemetry-sqlite/index.js.map +1 -0
  781. package/dist/telemetry-sqlite/store.d.ts +9 -0
  782. package/dist/telemetry-sqlite/store.d.ts.map +1 -0
  783. package/dist/telemetry-sqlite/store.js +110 -0
  784. package/dist/telemetry-sqlite/store.js.map +1 -0
  785. package/dist/watch.d.ts +194 -0
  786. package/dist/watch.d.ts.map +1 -0
  787. package/dist/watch.js +383 -0
  788. package/dist/watch.js.map +1 -0
  789. package/dist/wire.d.ts +174 -193
  790. package/dist/wire.d.ts.map +1 -1
  791. package/dist/wire.js +81 -80
  792. package/dist/wire.js.map +1 -1
  793. package/docs/guide.md +15 -15
  794. package/docs/next/benchmarks.md +959 -0
  795. package/docs/next/decisions.md +2957 -0
  796. package/docs/next/dependencies/book.md +1671 -0
  797. package/docs/next/dependencies/index.html +2641 -0
  798. package/docs/next/dependencies/model.md +330 -0
  799. package/docs/next/design.md +2554 -0
  800. package/docs/next/durable-observers/book.md +432 -0
  801. package/docs/next/durable-observers/index.html +517 -0
  802. package/docs/next/flow-control/book.md +333 -0
  803. package/docs/next/flow-control/fold/index.html +265 -0
  804. package/docs/next/flow-control/index.html +548 -0
  805. package/docs/next/flow-control/window/index.html +228 -0
  806. package/docs/next/guide-plugins-hosts/book.md +607 -0
  807. package/docs/next/guide-plugins-hosts/index.html +652 -0
  808. package/docs/next/http-workers/book.md +378 -0
  809. package/docs/next/http-workers/index.html +515 -0
  810. package/docs/next/layer-1.md +311 -0
  811. package/docs/next/layer-2.md +216 -0
  812. package/docs/next/plugin-model/book.md +186 -0
  813. package/docs/next/plugin-model/index.html +310 -0
  814. package/docs/next/plugin-primer/book.md +273 -0
  815. package/docs/next/plugin-primer/index.html +430 -0
  816. package/docs/next/slice-1.md +236 -0
  817. package/docs/next/slice-10.md +285 -0
  818. package/docs/next/slice-11.md +93 -0
  819. package/docs/next/slice-2.md +174 -0
  820. package/docs/next/slice-3a.md +296 -0
  821. package/docs/next/slice-3b.md +197 -0
  822. package/docs/next/slice-4.md +146 -0
  823. package/docs/next/slice-4a.md +418 -0
  824. package/docs/next/slice-4b.md +208 -0
  825. package/docs/next/slice-5.md +281 -0
  826. package/docs/next/slice-6a.md +676 -0
  827. package/docs/next/slice-6b.md +332 -0
  828. package/docs/next/slice-7a.md +130 -0
  829. package/docs/next/slice-7b/book.md +608 -0
  830. package/docs/next/slice-7b/index.html +842 -0
  831. package/docs/next/slice-7b.md +255 -0
  832. package/docs/next/slice-7c.md +165 -0
  833. package/docs/next/slice-8.md +194 -0
  834. package/docs/next/slices.md +230 -0
  835. package/docs/next/store/book.md +665 -0
  836. package/docs/next/store/index.html +861 -0
  837. package/docs/next/store/walkthrough.md +193 -0
  838. package/docs/spec.md +9 -9
  839. package/docs/tutorial.md +26 -25
  840. package/package.json +42 -5
  841. package/src/delta/README.md +69 -0
@@ -0,0 +1,128 @@
1
+ // The JavaScript evaluator of the compiled table vocabulary (slice 6a §6; rule 10): the `tx.get` overlay matches
2
+ // `where` nodes and applies `set` nodes with SQL's three-valued `NULL` rules and code point text order, as the SQL
3
+ // that `sql.ts` renders from the same nodes does in SQLite.
4
+ import { invalid } from "../data/internal.js";
5
+ import { compareText } from "./text.js";
6
+ /** Whether `row` matches `node` under SQL's rules: unknown (`NULL`) does not match. */
7
+ export function matches(node, row) {
8
+ return truth(node, row) === true;
9
+ }
10
+ function truth(node, row) {
11
+ if ("and" in node)
12
+ return node.and.reduce((all, each) => (all === false ? false : both(all, truth(each, row))), true);
13
+ if ("or" in node)
14
+ return node.or.reduce((any, each) => (any === true ? true : either(any, truth(each, row))), false);
15
+ if ("not" in node) {
16
+ const inner = truth(node.not, row);
17
+ return inner === null ? null : !inner;
18
+ }
19
+ if ("isNull" in node)
20
+ return row[node.isNull] === undefined;
21
+ // The row is checked against the table the condition was compiled for: its columns hold scalars.
22
+ if ("inArray" in node) {
23
+ const [column, values] = node.inArray;
24
+ // SQL: `x IN ()` is false, for a `NULL` x too.
25
+ if (values.length === 0)
26
+ return false;
27
+ const value = row[column];
28
+ return value === undefined ? null : values.some((each) => compareScalar(value, each) === 0);
29
+ }
30
+ if ("prefix" in node) {
31
+ const value = row[node.prefix[0]];
32
+ return value === undefined ? null : value.startsWith(node.prefix[1]);
33
+ }
34
+ // The remaining nodes are the comparisons, one entry each; `Object.entries` loses that.
35
+ const [op, [column, operand]] = Object.entries(node)[0];
36
+ const value = row[column];
37
+ if (value === undefined)
38
+ return null;
39
+ const order = compareScalar(value, operand);
40
+ switch (op) {
41
+ case "eq":
42
+ return order === 0;
43
+ case "ne":
44
+ return order !== 0;
45
+ case "lt":
46
+ return order < 0;
47
+ case "lte":
48
+ return order <= 0;
49
+ case "gt":
50
+ return order > 0;
51
+ case "gte":
52
+ return order >= 0;
53
+ }
54
+ }
55
+ function both(a, b) {
56
+ if (a === false || b === false)
57
+ return false;
58
+ return a === null || b === null ? null : true;
59
+ }
60
+ function either(a, b) {
61
+ if (a === true || b === true)
62
+ return true;
63
+ return a === null || b === null ? null : false;
64
+ }
65
+ /** Orders two cells of one column as SQLite does: text by code point, booleans as 0 and 1, numbers numerically. */
66
+ export function compareScalar(a, b) {
67
+ if (typeof a === "string")
68
+ return compareText(a, b);
69
+ return Number(a) - Number(b);
70
+ }
71
+ const SAFE = Number.MAX_SAFE_INTEGER;
72
+ /**
73
+ * `row` after `set`, every right side evaluated against `row` (simultaneous: `{ a: b, b: a }` swaps); an integer
74
+ * result outside ±(2^53 - 1) throws `invalid/args` (rule 10), as the column's `CHECK` fails the step.
75
+ */
76
+ export function applySet(set, row, table) {
77
+ const next = { ...row };
78
+ for (const [column, node] of Object.entries(set)) {
79
+ const value = evaluate(node, row, table);
80
+ if (value === undefined)
81
+ delete next[column];
82
+ else
83
+ next[column] = value;
84
+ }
85
+ return next;
86
+ }
87
+ function evaluate(node, row, table) {
88
+ if (node === null)
89
+ return undefined;
90
+ if (typeof node !== "object")
91
+ return node;
92
+ if ("col" in node)
93
+ return row[node.col];
94
+ if ("json" in node)
95
+ return node.json;
96
+ if ("when" in node) {
97
+ const [condition, a, b] = node.when;
98
+ return evaluate(matches(condition, row) ? a : b, row, table);
99
+ }
100
+ if ("coalesce" in node)
101
+ return evaluate(node.coalesce[0], row, table) ?? evaluate(node.coalesce[1], row, table);
102
+ if ("replacePrefix" in node) {
103
+ const [subject, from, to] = node.replacePrefix;
104
+ const value = evaluate(subject, row, table);
105
+ return value === undefined || !value.startsWith(from) ? value : to + value.slice(from.length);
106
+ }
107
+ // The remaining nodes are the arithmetic and text operations, one entry each, over scalar operands (compiled so).
108
+ const [op, [x, y]] = Object.entries(node)[0];
109
+ const a = evaluate(x, row, table);
110
+ const b = evaluate(y, row, table);
111
+ if (a === undefined || b === undefined)
112
+ return undefined;
113
+ switch (op) {
114
+ case "concat":
115
+ return a + b;
116
+ case "max":
117
+ return compareScalar(a, b) >= 0 ? a : b;
118
+ case "min":
119
+ return compareScalar(a, b) <= 0 ? a : b;
120
+ default: {
121
+ const result = op === "add" ? a + b : a - b;
122
+ if (result > SAFE || result < -SAFE)
123
+ throw invalid("args", `${table}: ${op} gives ${result}, outside ±(2^53 - 1)`);
124
+ return result;
125
+ }
126
+ }
127
+ }
128
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/next/store/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["// The JavaScript evaluator of the compiled table vocabulary (slice 6a §6; rule 10): the `tx.get` overlay matches\n// `where` nodes and applies `set` nodes with SQL's three-valued `NULL` rules and code point text order, as the SQL\n// that `sql.ts` renders from the same nodes does in SQLite.\n\nimport type { JsonValue } from \"../../json.ts\";\nimport { invalid } from \"../data/internal.ts\";\nimport type { Comparison, ExprNode, Operation, SetNode, WhereNode } from \"./expression.ts\";\nimport type { Scalar } from \"./rows.ts\";\nimport { compareText } from \"./text.ts\";\n\n/** A row as the evaluator reads it: stored cells, an absent column being `NULL`. */\nexport type EvaluatedRow = { readonly [column: string]: Scalar | JsonValue | undefined };\n\n/** SQL's three-valued truth: `null` is unknown (a comparison with `NULL`). */\ntype Truth = boolean | null;\n\n/** Whether `row` matches `node` under SQL's rules: unknown (`NULL`) does not match. */\nexport function matches(node: WhereNode, row: EvaluatedRow): boolean {\n\treturn truth(node, row) === true;\n}\n\nfunction truth(node: WhereNode, row: EvaluatedRow): Truth {\n\tif (\"and\" in node)\n\t\treturn node.and.reduce<Truth>((all, each) => (all === false ? false : both(all, truth(each, row))), true);\n\tif (\"or\" in node)\n\t\treturn node.or.reduce<Truth>((any, each) => (any === true ? true : either(any, truth(each, row))), false);\n\tif (\"not\" in node) {\n\t\tconst inner = truth(node.not, row);\n\t\treturn inner === null ? null : !inner;\n\t}\n\tif (\"isNull\" in node) return row[node.isNull] === undefined;\n\t// The row is checked against the table the condition was compiled for: its columns hold scalars.\n\tif (\"inArray\" in node) {\n\t\tconst [column, values] = node.inArray;\n\t\t// SQL: `x IN ()` is false, for a `NULL` x too.\n\t\tif (values.length === 0) return false;\n\t\tconst value = row[column] as Scalar | undefined;\n\t\treturn value === undefined ? null : values.some((each) => compareScalar(value, each) === 0);\n\t}\n\tif (\"prefix\" in node) {\n\t\tconst value = row[node.prefix[0]] as string | undefined;\n\t\treturn value === undefined ? null : value.startsWith(node.prefix[1]);\n\t}\n\t// The remaining nodes are the comparisons, one entry each; `Object.entries` loses that.\n\tconst [op, [column, operand]] = Object.entries(node)[0] as [Comparison, readonly [string, Scalar]];\n\tconst value = row[column] as Scalar | undefined;\n\tif (value === undefined) return null;\n\tconst order = compareScalar(value, operand);\n\tswitch (op) {\n\t\tcase \"eq\":\n\t\t\treturn order === 0;\n\t\tcase \"ne\":\n\t\t\treturn order !== 0;\n\t\tcase \"lt\":\n\t\t\treturn order < 0;\n\t\tcase \"lte\":\n\t\t\treturn order <= 0;\n\t\tcase \"gt\":\n\t\t\treturn order > 0;\n\t\tcase \"gte\":\n\t\t\treturn order >= 0;\n\t}\n}\n\nfunction both(a: Truth, b: Truth): Truth {\n\tif (a === false || b === false) return false;\n\treturn a === null || b === null ? null : true;\n}\n\nfunction either(a: Truth, b: Truth): Truth {\n\tif (a === true || b === true) return true;\n\treturn a === null || b === null ? null : false;\n}\n\n/** Orders two cells of one column as SQLite does: text by code point, booleans as 0 and 1, numbers numerically. */\nexport function compareScalar(a: Scalar, b: Scalar): number {\n\tif (typeof a === \"string\") return compareText(a, b as string);\n\treturn Number(a) - Number(b);\n}\n\nconst SAFE = Number.MAX_SAFE_INTEGER;\n\n/**\n * `row` after `set`, every right side evaluated against `row` (simultaneous: `{ a: b, b: a }` swaps); an integer\n * result outside ±(2^53 - 1) throws `invalid/args` (rule 10), as the column's `CHECK` fails the step.\n */\nexport function applySet(set: SetNode, row: EvaluatedRow, table: string): EvaluatedRow {\n\tconst next: { [column: string]: Scalar | JsonValue | undefined } = { ...row };\n\tfor (const [column, node] of Object.entries(set)) {\n\t\tconst value = evaluate(node, row, table);\n\t\tif (value === undefined) delete next[column];\n\t\telse next[column] = value;\n\t}\n\treturn next;\n}\n\nfunction evaluate(node: ExprNode, row: EvaluatedRow, table: string): Scalar | JsonValue | undefined {\n\tif (node === null) return undefined;\n\tif (typeof node !== \"object\") return node;\n\tif (\"col\" in node) return row[node.col];\n\tif (\"json\" in node) return node.json;\n\tif (\"when\" in node) {\n\t\tconst [condition, a, b] = node.when;\n\t\treturn evaluate(matches(condition, row) ? a : b, row, table);\n\t}\n\tif (\"coalesce\" in node) return evaluate(node.coalesce[0], row, table) ?? evaluate(node.coalesce[1], row, table);\n\tif (\"replacePrefix\" in node) {\n\t\tconst [subject, from, to] = node.replacePrefix;\n\t\tconst value = evaluate(subject, row, table) as string | undefined;\n\t\treturn value === undefined || !value.startsWith(from) ? value : to + value.slice(from.length);\n\t}\n\t// The remaining nodes are the arithmetic and text operations, one entry each, over scalar operands (compiled so).\n\tconst [op, [x, y]] = Object.entries(node)[0] as [Operation, readonly [ExprNode, ExprNode]];\n\tconst a = evaluate(x, row, table) as Scalar | undefined;\n\tconst b = evaluate(y, row, table) as Scalar | undefined;\n\tif (a === undefined || b === undefined) return undefined;\n\tswitch (op) {\n\t\tcase \"concat\":\n\t\t\treturn (a as string) + (b as string);\n\t\tcase \"max\":\n\t\t\treturn compareScalar(a, b) >= 0 ? a : b;\n\t\tcase \"min\":\n\t\t\treturn compareScalar(a, b) <= 0 ? a : b;\n\t\tdefault: {\n\t\t\tconst result = op === \"add\" ? (a as number) + (b as number) : (a as number) - (b as number);\n\t\t\tif (result > SAFE || result < -SAFE)\n\t\t\t\tthrow invalid(\"args\", `${table}: ${op} gives ${result}, outside ±(2^53 - 1)`);\n\t\t\treturn result;\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { type Context } from "../../context/index.ts";
2
+ import { type ArchivePart } from "./archive.ts";
3
+ import type { ChordStore } from "./store.ts";
4
+ /** The rows and documents an export reads per page. */
5
+ export declare const EXPORT_PAGE = 100;
6
+ /**
7
+ * An export of `store` under `context`: an async iterator of its parts. One pass; after an abort `next()` rejects
8
+ * `aborted`, after the store closed `released`.
9
+ */
10
+ export declare class StoreExport implements AsyncIterableIterator<ArchivePart> {
11
+ #private;
12
+ constructor(store: ChordStore, context: Context);
13
+ [Symbol.asyncIterator](): this;
14
+ next(): Promise<IteratorResult<ArchivePart>>;
15
+ return(): Promise<IteratorResult<ArchivePart>>;
16
+ }
17
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/next/store/export.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAIxE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,uDAAuD;AACvD,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B;;;GAGG;AACH,qBAAa,WAAY,YAAW,qBAAqB,CAAC,WAAW,CAAC;;IASrE,YAAY,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAI9C;IAED,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAE7B;IAEK,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAmBjD;IAEK,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAGnD;CA6BD"}
@@ -0,0 +1,200 @@
1
+ // `store.export(ctx)` (slice 6a §13, rule 26): the store's state after its `lastSeq` as archive parts, read page by
2
+ // page with plain reads while the export holds the commit queue (no commit can interleave, no long read transaction).
3
+ // The queue is taken at the first `next()` and given back when the iteration ends, throws, is closed or `ctx` aborts;
4
+ // an abort while the consumer is suspended gives it back at once and drops the pages and records the export held, and
5
+ // an abort while it waits for the queue ends the wait. Closing the store ends it too (`released`).
6
+ import { awaitWithContext } from "../../context/index.js";
7
+ import { ChordError } from "../data/index.js";
8
+ import { ARCHIVE_FORMAT } from "./archive.js";
9
+ import { listRecords, listRevisions } from "./engine.js";
10
+ import { ROW_VERSION, versionColumn } from "./rows.js";
11
+ import { STORE_SCHEMA } from "./schema.js";
12
+ import { quote, recordedPut } from "./sql.js";
13
+ /** The rows and documents an export reads per page. */
14
+ export const EXPORT_PAGE = 100;
15
+ /**
16
+ * An export of `store` under `context`: an async iterator of its parts. One pass; after an abort `next()` rejects
17
+ * `aborted`, after the store closed `released`.
18
+ */
19
+ export class StoreExport {
20
+ #context;
21
+ /** The parts, until the export ends; dropped then, with the pages they hold. */
22
+ #parts;
23
+ #state = "open";
24
+ /** Gives the commit queue back while the export holds it. */
25
+ #release;
26
+ #abort = () => this.#end("aborted");
27
+ constructor(store, context) {
28
+ this.#context = context;
29
+ const hold = (release) => this.#hold(release);
30
+ this.#parts = parts(store, context, hold, () => this.#end("closed"));
31
+ }
32
+ [Symbol.asyncIterator]() {
33
+ return this;
34
+ }
35
+ async next() {
36
+ if (this.#context.abortSignal?.aborted)
37
+ this.#end("aborted");
38
+ this.#assertOpen();
39
+ if (this.#parts === undefined)
40
+ return { done: true, value: undefined };
41
+ const pending = this.#parts.next();
42
+ let result;
43
+ try {
44
+ // Until the export holds the queue only `context` ends the wait; from then on its abort listener does.
45
+ result = await (this.#release === undefined ? awaitWithContext(pending, this.#context) : pending);
46
+ }
47
+ catch (error) {
48
+ if (this.#context.abortSignal?.aborted)
49
+ this.#end("aborted");
50
+ this.#assertOpen();
51
+ this.#end("ended");
52
+ throw error;
53
+ }
54
+ // Ended meanwhile (an abort, the store's close): no part after that, even one that needed no read.
55
+ this.#assertOpen();
56
+ if (result.done)
57
+ this.#end("ended");
58
+ return result;
59
+ }
60
+ async return() {
61
+ this.#end("ended");
62
+ return { done: true, value: undefined };
63
+ }
64
+ /** The parts took the queue: the export holds it until it ends, and an abort ends it; ended already, it gives it back. */
65
+ #hold(release) {
66
+ if (this.#state !== "open") {
67
+ release();
68
+ return;
69
+ }
70
+ this.#release = release;
71
+ this.#context.abortSignal?.addEventListener("abort", this.#abort, { once: true });
72
+ }
73
+ /** Ends the export once: the queue given back, the parts closed (once they reach a `yield`) and dropped. */
74
+ #end(state) {
75
+ if (this.#state !== "open")
76
+ return;
77
+ this.#state = state;
78
+ this.#release?.();
79
+ this.#release = undefined;
80
+ this.#context.abortSignal?.removeEventListener("abort", this.#abort);
81
+ void this.#parts?.return(undefined).catch(() => { });
82
+ this.#parts = undefined;
83
+ }
84
+ /** Throws `aborted` after an abort, `released` after the store closed. */
85
+ #assertOpen() {
86
+ if (this.#state === "aborted")
87
+ throw aborted(this.#context);
88
+ if (this.#state === "closed")
89
+ throw new ChordError({ code: "released", reason: "closed", message: "store: closed" });
90
+ }
91
+ }
92
+ /** The error of a use of an aborted export: `aborted`, the signal's reason as the cause. */
93
+ function aborted(context) {
94
+ return new ChordError({ code: "aborted", message: "store: export aborted" }, { cause: context.abortSignal?.reason });
95
+ }
96
+ /**
97
+ * The parts in archive order, after taking the queue (handed to `hold`; the store's close calls `end`); the queue is
98
+ * given back when they end.
99
+ */
100
+ async function* parts(store, context, hold, end) {
101
+ const release = await store.take(end);
102
+ hold(release);
103
+ try {
104
+ if (context.abortSignal?.aborted)
105
+ throw aborted(context);
106
+ const { lastSeq, nextId } = store;
107
+ yield { kind: "manifest", format: ARCHIVE_FORMAT, schema: STORE_SCHEMA, lastSeq, nextId };
108
+ let writes = 0;
109
+ const tables = [...store.tables.values()].sort((a, b) => (a.table < b.table ? -1 : 1));
110
+ for (const record of tables) {
111
+ const { table, version, state, columns, key, fingerprint } = record;
112
+ yield { kind: "table", table, version, state, columns, key, fingerprint };
113
+ writes++;
114
+ for await (const put of puts(store, record, context)) {
115
+ yield put;
116
+ writes++;
117
+ }
118
+ for (const [name, on] of Object.entries(record.indexes)) {
119
+ yield { kind: "index", table, name, columns: on };
120
+ writes++;
121
+ }
122
+ }
123
+ for await (const part of documents(store, context)) {
124
+ yield part;
125
+ writes++;
126
+ }
127
+ yield { kind: "end", writes };
128
+ }
129
+ finally {
130
+ release();
131
+ }
132
+ }
133
+ /** The `put`s of a recorded table in key order, a page per read: the stored values and their versions. */
134
+ async function* puts(store, record, context) {
135
+ const { table, columns, key } = record;
136
+ const select = recordedPut(table, columns)
137
+ .physical.map((name) => quote(name))
138
+ .join(", ");
139
+ const order = key.map(quote).join(", ");
140
+ let after;
141
+ do {
142
+ const page = after;
143
+ const from = page === undefined ? "" : ` WHERE (${order}) > (${page.map(() => "?").join(", ")})`;
144
+ const sql = `SELECT ${select} FROM ${quote(table)}${from} ORDER BY ${order} LIMIT ?`;
145
+ const rows = await store.read((executor) => executor.all(sql, ...(page ?? []), EXPORT_PAGE), context);
146
+ for (const stored of rows)
147
+ yield putOf(record, stored);
148
+ after = rows.length < EXPORT_PAGE ? undefined : key.map((name) => rows.at(-1)[name]);
149
+ } while (after !== undefined);
150
+ }
151
+ /** A stored row as its `put`: `NULL` cells absent, booleans from 0 and 1, `json(...)` cells parsed with versions. */
152
+ function putOf(record, stored) {
153
+ const row = {};
154
+ const versions = {};
155
+ for (const [name, column] of Object.entries(record.columns)) {
156
+ const value = stored[name];
157
+ if (value === null || value === undefined)
158
+ continue;
159
+ // The recorded columns' types say what SQLite stored (STRICT tables): text for `json(...)` with its version.
160
+ if (column.type === "bool")
161
+ row[name] = value === 1;
162
+ else if (column.type === "json") {
163
+ row[name] = JSON.parse(value);
164
+ versions[name] = stored[versionColumn(name)];
165
+ }
166
+ else
167
+ row[name] = value;
168
+ }
169
+ return { kind: "put", table: record.table, row, version: stored[ROW_VERSION], columns: versions };
170
+ }
171
+ /**
172
+ * Every stored record by id, live and retired, as its creation without a base, then its kept revisions in seq order:
173
+ * a `none` or `latest` record's current base and its deltas, a retired `latest` one none, a `rewindable` one all.
174
+ */
175
+ async function* documents(store, context) {
176
+ let after = 0;
177
+ for (;;) {
178
+ const records = await store.read((executor) => listRecords(executor, after, EXPORT_PAGE), context);
179
+ for (const record of records) {
180
+ yield { kind: "document.create", record };
181
+ yield* revisions(store, record.id, context);
182
+ }
183
+ if (records.length < EXPORT_PAGE)
184
+ return;
185
+ after = records.at(-1).id;
186
+ }
187
+ }
188
+ /** Document `id`'s kept revisions in seq order, read page by page (a long history is never one array). */
189
+ async function* revisions(store, id, context) {
190
+ let after = 0;
191
+ for (;;) {
192
+ const page = await store.read((executor) => listRevisions(executor, id, after, EXPORT_PAGE), context);
193
+ for (const revision of page)
194
+ yield { kind: "document.revision", ...revision };
195
+ if (page.length < EXPORT_PAGE)
196
+ return;
197
+ after = page.at(-1).seq;
198
+ }
199
+ }
200
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/next/store/export.ts"],"names":[],"mappings":"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","sourcesContent":["// `store.export(ctx)` (slice 6a §13, rule 26): the store's state after its `lastSeq` as archive parts, read page by\n// page with plain reads while the export holds the commit queue (no commit can interleave, no long read transaction).\n// The queue is taken at the first `next()` and given back when the iteration ends, throws, is closed or `ctx` aborts;\n// an abort while the consumer is suspended gives it back at once and drops the pages and records the export held, and\n// an abort while it waits for the queue ends the wait. Closing the store ends it too (`released`).\n\nimport { awaitWithContext, type Context } from \"../../context/index.ts\";\nimport type { JsonValue } from \"../../json.ts\";\nimport type { SqliteValue } from \"../../sqlite/index.ts\";\nimport { ChordError } from \"../data/index.ts\";\nimport { ARCHIVE_FORMAT, type ArchivePart } from \"./archive.ts\";\nimport type { TableRecord } from \"./catalog.ts\";\nimport { listRecords, listRevisions } from \"./engine.ts\";\nimport { ROW_VERSION, type Scalar, versionColumn } from \"./rows.ts\";\nimport { STORE_SCHEMA } from \"./schema.ts\";\nimport { quote, recordedPut } from \"./sql.ts\";\nimport type { ChordStore } from \"./store.ts\";\n\n/** The rows and documents an export reads per page. */\nexport const EXPORT_PAGE = 100;\n\n/**\n * An export of `store` under `context`: an async iterator of its parts. One pass; after an abort `next()` rejects\n * `aborted`, after the store closed `released`.\n */\nexport class StoreExport implements AsyncIterableIterator<ArchivePart> {\n\treadonly #context: Context;\n\t/** The parts, until the export ends; dropped then, with the pages they hold. */\n\t#parts: AsyncGenerator<ArchivePart> | undefined;\n\t#state: \"open\" | \"aborted\" | \"closed\" | \"ended\" = \"open\";\n\t/** Gives the commit queue back while the export holds it. */\n\t#release: (() => void) | undefined;\n\treadonly #abort = (): void => this.#end(\"aborted\");\n\n\tconstructor(store: ChordStore, context: Context) {\n\t\tthis.#context = context;\n\t\tconst hold = (release: () => void): void => this.#hold(release);\n\t\tthis.#parts = parts(store, context, hold, () => this.#end(\"closed\"));\n\t}\n\n\t[Symbol.asyncIterator](): this {\n\t\treturn this;\n\t}\n\n\tasync next(): Promise<IteratorResult<ArchivePart>> {\n\t\tif (this.#context.abortSignal?.aborted) this.#end(\"aborted\");\n\t\tthis.#assertOpen();\n\t\tif (this.#parts === undefined) return { done: true, value: undefined };\n\t\tconst pending = this.#parts.next();\n\t\tlet result: IteratorResult<ArchivePart>;\n\t\ttry {\n\t\t\t// Until the export holds the queue only `context` ends the wait; from then on its abort listener does.\n\t\t\tresult = await (this.#release === undefined ? awaitWithContext(pending, this.#context) : pending);\n\t\t} catch (error) {\n\t\t\tif (this.#context.abortSignal?.aborted) this.#end(\"aborted\");\n\t\t\tthis.#assertOpen();\n\t\t\tthis.#end(\"ended\");\n\t\t\tthrow error;\n\t\t}\n\t\t// Ended meanwhile (an abort, the store's close): no part after that, even one that needed no read.\n\t\tthis.#assertOpen();\n\t\tif (result.done) this.#end(\"ended\");\n\t\treturn result;\n\t}\n\n\tasync return(): Promise<IteratorResult<ArchivePart>> {\n\t\tthis.#end(\"ended\");\n\t\treturn { done: true, value: undefined };\n\t}\n\n\t/** The parts took the queue: the export holds it until it ends, and an abort ends it; ended already, it gives it back. */\n\t#hold(release: () => void): void {\n\t\tif (this.#state !== \"open\") {\n\t\t\trelease();\n\t\t\treturn;\n\t\t}\n\t\tthis.#release = release;\n\t\tthis.#context.abortSignal?.addEventListener(\"abort\", this.#abort, { once: true });\n\t}\n\n\t/** Ends the export once: the queue given back, the parts closed (once they reach a `yield`) and dropped. */\n\t#end(state: \"aborted\" | \"closed\" | \"ended\"): void {\n\t\tif (this.#state !== \"open\") return;\n\t\tthis.#state = state;\n\t\tthis.#release?.();\n\t\tthis.#release = undefined;\n\t\tthis.#context.abortSignal?.removeEventListener(\"abort\", this.#abort);\n\t\tvoid this.#parts?.return(undefined).catch(() => {});\n\t\tthis.#parts = undefined;\n\t}\n\n\t/** Throws `aborted` after an abort, `released` after the store closed. */\n\t#assertOpen(): void {\n\t\tif (this.#state === \"aborted\") throw aborted(this.#context);\n\t\tif (this.#state === \"closed\")\n\t\t\tthrow new ChordError({ code: \"released\", reason: \"closed\", message: \"store: closed\" });\n\t}\n}\n\n/** The error of a use of an aborted export: `aborted`, the signal's reason as the cause. */\nfunction aborted(context: Context): ChordError {\n\treturn new ChordError({ code: \"aborted\", message: \"store: export aborted\" }, { cause: context.abortSignal?.reason });\n}\n\n/**\n * The parts in archive order, after taking the queue (handed to `hold`; the store's close calls `end`); the queue is\n * given back when they end.\n */\nasync function* parts(\n\tstore: ChordStore,\n\tcontext: Context,\n\thold: (release: () => void) => void,\n\tend: () => void,\n): AsyncGenerator<ArchivePart> {\n\tconst release = await store.take(end);\n\thold(release);\n\ttry {\n\t\tif (context.abortSignal?.aborted) throw aborted(context);\n\t\tconst { lastSeq, nextId } = store;\n\t\tyield { kind: \"manifest\", format: ARCHIVE_FORMAT, schema: STORE_SCHEMA, lastSeq, nextId };\n\t\tlet writes = 0;\n\t\tconst tables = [...store.tables.values()].sort((a, b) => (a.table < b.table ? -1 : 1));\n\t\tfor (const record of tables) {\n\t\t\tconst { table, version, state, columns, key, fingerprint } = record;\n\t\t\tyield { kind: \"table\", table, version, state, columns, key, fingerprint };\n\t\t\twrites++;\n\t\t\tfor await (const put of puts(store, record, context)) {\n\t\t\t\tyield put;\n\t\t\t\twrites++;\n\t\t\t}\n\t\t\tfor (const [name, on] of Object.entries(record.indexes)) {\n\t\t\t\tyield { kind: \"index\", table, name, columns: on };\n\t\t\t\twrites++;\n\t\t\t}\n\t\t}\n\t\tfor await (const part of documents(store, context)) {\n\t\t\tyield part;\n\t\t\twrites++;\n\t\t}\n\t\tyield { kind: \"end\", writes };\n\t} finally {\n\t\trelease();\n\t}\n}\n\n/** The `put`s of a recorded table in key order, a page per read: the stored values and their versions. */\nasync function* puts(\n\tstore: ChordStore,\n\trecord: TableRecord,\n\tcontext: Context,\n): AsyncGenerator<Extract<ArchivePart, { readonly kind: \"put\" }>> {\n\tconst { table, columns, key } = record;\n\tconst select = recordedPut(table, columns)\n\t\t.physical.map((name) => quote(name))\n\t\t.join(\", \");\n\tconst order = key.map(quote).join(\", \");\n\tlet after: SqliteValue[] | undefined;\n\tdo {\n\t\tconst page = after;\n\t\tconst from = page === undefined ? \"\" : ` WHERE (${order}) > (${page.map(() => \"?\").join(\", \")})`;\n\t\tconst sql = `SELECT ${select} FROM ${quote(table)}${from} ORDER BY ${order} LIMIT ?`;\n\t\tconst rows = await store.read(\n\t\t\t(executor) => executor.all<{ readonly [column: string]: SqliteValue }>(sql, ...(page ?? []), EXPORT_PAGE),\n\t\t\tcontext,\n\t\t);\n\t\tfor (const stored of rows) yield putOf(record, stored);\n\t\tafter = rows.length < EXPORT_PAGE ? undefined : key.map((name) => rows.at(-1)![name]!);\n\t} while (after !== undefined);\n}\n\n/** A stored row as its `put`: `NULL` cells absent, booleans from 0 and 1, `json(...)` cells parsed with versions. */\nfunction putOf(\n\trecord: TableRecord,\n\tstored: { readonly [column: string]: SqliteValue },\n): Extract<ArchivePart, { readonly kind: \"put\" }> {\n\tconst row: { [column: string]: Scalar | JsonValue } = {};\n\tconst versions: { [column: string]: number } = {};\n\tfor (const [name, column] of Object.entries(record.columns)) {\n\t\tconst value = stored[name];\n\t\tif (value === null || value === undefined) continue;\n\t\t// The recorded columns' types say what SQLite stored (STRICT tables): text for `json(...)` with its version.\n\t\tif (column.type === \"bool\") row[name] = value === 1;\n\t\telse if (column.type === \"json\") {\n\t\t\trow[name] = JSON.parse(value as string) as JsonValue;\n\t\t\tversions[name] = stored[versionColumn(name)] as number;\n\t\t} else row[name] = value as Scalar;\n\t}\n\treturn { kind: \"put\", table: record.table, row, version: stored[ROW_VERSION] as number, columns: versions };\n}\n\n/**\n * Every stored record by id, live and retired, as its creation without a base, then its kept revisions in seq order:\n * a `none` or `latest` record's current base and its deltas, a retired `latest` one none, a `rewindable` one all.\n */\nasync function* documents(\n\tstore: ChordStore,\n\tcontext: Context,\n): AsyncGenerator<Extract<ArchivePart, { readonly kind: \"document.create\" | \"document.revision\" }>> {\n\tlet after = 0;\n\tfor (;;) {\n\t\tconst records = await store.read((executor) => listRecords(executor, after, EXPORT_PAGE), context);\n\t\tfor (const record of records) {\n\t\t\tyield { kind: \"document.create\", record };\n\t\t\tyield* revisions(store, record.id, context);\n\t\t}\n\t\tif (records.length < EXPORT_PAGE) return;\n\t\tafter = records.at(-1)!.id;\n\t}\n}\n\n/** Document `id`'s kept revisions in seq order, read page by page (a long history is never one array). */\nasync function* revisions(\n\tstore: ChordStore,\n\tid: number,\n\tcontext: Context,\n): AsyncGenerator<Extract<ArchivePart, { readonly kind: \"document.revision\" }>> {\n\tlet after = 0;\n\tfor (;;) {\n\t\tconst page = await store.read((executor) => listRevisions(executor, id, after, EXPORT_PAGE), context);\n\t\tfor (const revision of page) yield { kind: \"document.revision\", ...revision };\n\t\tif (page.length < EXPORT_PAGE) return;\n\t\tafter = page.at(-1)!.seq;\n\t}\n}\n"]}
@@ -0,0 +1,150 @@
1
+ import type { JsonValue } from "../../json.ts";
2
+ import type { Optional } from "../contracts/index.ts";
3
+ import type { Column, Columns, ColumnType, ColumnTypeOf, ValueOf } from "./columns.ts";
4
+ import { type Scalar } from "./rows.ts";
5
+ import type { TableDefinition } from "./table.ts";
6
+ /** A compiled condition: column comparisons with checked operands, combined by `and`, `or`, `not`. */
7
+ export type WhereNode = {
8
+ readonly eq: readonly [string, Scalar];
9
+ } | {
10
+ readonly ne: readonly [string, Scalar];
11
+ } | {
12
+ readonly lt: readonly [string, Scalar];
13
+ } | {
14
+ readonly lte: readonly [string, Scalar];
15
+ } | {
16
+ readonly gt: readonly [string, Scalar];
17
+ } | {
18
+ readonly gte: readonly [string, Scalar];
19
+ } | {
20
+ readonly inArray: readonly [string, readonly Scalar[]];
21
+ } | {
22
+ readonly isNull: string;
23
+ } | {
24
+ readonly prefix: readonly [string, string];
25
+ } | {
26
+ readonly and: readonly WhereNode[];
27
+ } | {
28
+ readonly or: readonly WhereNode[];
29
+ } | {
30
+ readonly not: WhereNode;
31
+ };
32
+ /** A compiled value expression: a literal (`null` clears), a column, a `json(...)` cell, or an operation. */
33
+ export type ExprNode = Scalar | null | {
34
+ readonly col: string;
35
+ } | {
36
+ readonly json: JsonValue;
37
+ } | {
38
+ readonly add: readonly [ExprNode, ExprNode];
39
+ } | {
40
+ readonly sub: readonly [ExprNode, ExprNode];
41
+ } | {
42
+ readonly max: readonly [ExprNode, ExprNode];
43
+ } | {
44
+ readonly min: readonly [ExprNode, ExprNode];
45
+ } | {
46
+ readonly concat: readonly [ExprNode, ExprNode];
47
+ } | {
48
+ readonly coalesce: readonly [ExprNode, ExprNode];
49
+ } | {
50
+ readonly replacePrefix: readonly [ExprNode, string, string];
51
+ } | {
52
+ readonly when: readonly [WhereNode, ExprNode, ExprNode];
53
+ };
54
+ /** A compiled `set`: the new value of each changed column, every right side evaluated against the row before. */
55
+ export type SetNode = {
56
+ readonly [column: string]: ExprNode;
57
+ };
58
+ /** The comparison operators of a `WhereNode`. */
59
+ export type Comparison = "eq" | "ne" | "lt" | "lte" | "gt" | "gte";
60
+ /** The operations of an `ExprNode`. */
61
+ export type Operation = "add" | "sub" | "max" | "min" | "concat" | "coalesce" | "replacePrefix" | "when";
62
+ /** A value expression as a plugin builds it: `T` is its value, `K` its column type. Compiled when staged. */
63
+ export declare class Expression<T = unknown, K extends ColumnType = ColumnType> {
64
+ readonly op: Operation | "col";
65
+ readonly args: readonly unknown[];
66
+ /** Type only. */
67
+ readonly "~value"?: T;
68
+ readonly "~type"?: K;
69
+ constructor(op: Operation | "col", args: readonly unknown[]);
70
+ }
71
+ /** A reference to a column of the row, as `(t) => …` callbacks get them. */
72
+ export declare class ColumnRef<T = unknown, K extends ColumnType = ColumnType> extends Expression<T, K> {
73
+ readonly column: string;
74
+ constructor(column: string);
75
+ }
76
+ /** A condition as a plugin builds it; compiled when staged or run. */
77
+ export declare class Condition {
78
+ readonly op: Comparison | "inArray" | "isNull" | "prefix" | "and" | "or" | "not";
79
+ readonly args: readonly unknown[];
80
+ constructor(op: Condition["op"], args: readonly unknown[]);
81
+ }
82
+ /**
83
+ * A `set` of a table with columns `C` and key `K`: new values of non-key columns, each a value or an expression of
84
+ * the column's type; `undefined` clears an `opt(...)` column.
85
+ */
86
+ export type SetOf<C extends Columns, K extends readonly string[]> = {
87
+ readonly [P in Exclude<keyof C & string, K[number]>]?: C[P] extends Optional ? ValueOf<C[P]> | Expression<ValueOf<C[P]>, ColumnTypeOf<C[P]>> | undefined : ValueOf<C[P]> | Expression<ValueOf<C[P]>, ColumnTypeOf<C[P]>>;
88
+ };
89
+ /** A scalar column type. */
90
+ type ScalarType = Exclude<ColumnType, "json">;
91
+ /** An operand of type `T` and column type `K`: an expression or a plain value. */
92
+ type Operand<T, K extends ColumnType> = Expression<T, K> | T;
93
+ /** The column equals `value` (`NULL` never matches). */
94
+ export declare function eq<T extends Scalar>(column: ColumnRef<T, ScalarType>, value: T): Condition;
95
+ /** The column differs from `value` (`NULL` never matches). */
96
+ export declare function ne<T extends Scalar>(column: ColumnRef<T, ScalarType>, value: T): Condition;
97
+ /** The column is below `value`. */
98
+ export declare function lt<T extends Scalar>(column: ColumnRef<T, ScalarType>, value: T): Condition;
99
+ /** The column is at most `value`. */
100
+ export declare function lte<T extends Scalar>(column: ColumnRef<T, ScalarType>, value: T): Condition;
101
+ /** The column is above `value`. */
102
+ export declare function gt<T extends Scalar>(column: ColumnRef<T, ScalarType>, value: T): Condition;
103
+ /** The column is at least `value`. */
104
+ export declare function gte<T extends Scalar>(column: ColumnRef<T, ScalarType>, value: T): Condition;
105
+ /** The column equals one of `values` (`[]` matches nothing). */
106
+ export declare function inArray<T extends Scalar>(column: ColumnRef<T, ScalarType>, values: readonly T[]): Condition;
107
+ /** The column is `NULL` (an `opt(...)` column without a value). */
108
+ export declare function isNull(column: ColumnRef<unknown, ScalarType>): Condition;
109
+ /** The text column starts with `prefix`, compared by code point (`""` matches every value). */
110
+ export declare function prefix(column: ColumnRef<string, "str">, prefix: string): Condition;
111
+ /** Every condition holds (`and()` always does). */
112
+ export declare function and(...conditions: Condition[]): Condition;
113
+ /** Some condition holds (`or()` never does). */
114
+ export declare function or(...conditions: Condition[]): Condition;
115
+ /** The condition does not hold (`NULL` stays `NULL`: it never matches). */
116
+ export declare function not(condition: Condition): Condition;
117
+ /** `a + b` over integers; a result outside ±(2^53 - 1) fails (rule 10). */
118
+ export declare function add(a: Operand<number, "int">, b: Operand<number, "int">): Expression<number, "int">;
119
+ /** `a - b` over integers; a result outside ±(2^53 - 1) fails (rule 10). */
120
+ export declare function sub(a: Operand<number, "int">, b: Operand<number, "int">): Expression<number, "int">;
121
+ /** The larger of `a` and b` (`int` or `num`). */
122
+ export declare function max<K extends "int" | "num">(a: Operand<number, K>, b: Operand<number, K>): Expression<number, K>;
123
+ /** The smaller of `a` and `b` (`int` or `num`). */
124
+ export declare function min<K extends "int" | "num">(a: Operand<number, K>, b: Operand<number, K>): Expression<number, K>;
125
+ /** `a` followed by `b`. */
126
+ export declare function concat(a: Operand<string, "str">, b: Operand<string, "str">): Expression<string, "str">;
127
+ /** `value` with its prefix `from` replaced by `to`; a value without the prefix stays as it is. */
128
+ export declare function replacePrefix(value: Operand<string, "str">, from: string, to: string): Expression<string, "str">;
129
+ /** `a` unless it is `NULL`, else `b`. */
130
+ export declare function coalesce<T, K extends ScalarType>(a: Expression<T, K>, b: Operand<T, K>): Expression<T, K>;
131
+ /** `a` where `condition` holds for the row, else `b`. */
132
+ export declare function when<T, K extends ScalarType>(condition: Condition, a: Operand<T, K>, b: Operand<T, K>): Expression<T, K>;
133
+ /** One `ColumnRef` per column of `definition`, for its `(t) => …` callbacks. */
134
+ export declare function columnRefs(columns: readonly Column[]): {
135
+ readonly [column: string]: ColumnRef;
136
+ };
137
+ /**
138
+ * Compiles a plugin's condition over `table`'s columns (a trust boundary: plugin values): known scalar columns,
139
+ * operands of their type made storable (`invalid/args` otherwise, `undefined` included: ask with `isNull`, rule 16).
140
+ */
141
+ export declare function compileWhere(table: TableDefinition, condition: unknown, what: string): WhereNode;
142
+ /**
143
+ * Compiles a plugin's `set` (plain values or a callback's result) for `table` (a trust boundary): known non-key
144
+ * columns (rule 13), at least one (rule 14), `undefined` clearing an `opt(...)` column as the explicit `null` (a
145
+ * `null` value is a `json(...)` cell's JSON `null`, refused for other columns), an
146
+ * expression whose result may be `NULL` only for an `opt(...)` column; integer arithmetic only on `int` columns.
147
+ */
148
+ export declare function compileSet(table: TableDefinition, set: unknown, what: string): SetNode;
149
+ export {};
150
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/next/store/expression.ts"],"names":[],"mappings":"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"}