@earendil-works/chord 1.4.0 → 1.5.1

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 (1299) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/README.md +115 -90
  3. package/dist/context/index.d.ts +1 -1
  4. package/dist/context/index.d.ts.map +1 -1
  5. package/dist/context/index.js +1 -1
  6. package/dist/context/index.js.map +1 -1
  7. package/dist/contracts/accepts.d.ts +81 -0
  8. package/dist/contracts/accepts.d.ts.map +1 -0
  9. package/dist/contracts/accepts.js +123 -0
  10. package/dist/contracts/accepts.js.map +1 -0
  11. package/dist/contracts/contract.d.ts +121 -0
  12. package/dist/contracts/contract.d.ts.map +1 -0
  13. package/dist/contracts/contract.js +50 -0
  14. package/dist/contracts/contract.js.map +1 -0
  15. package/dist/contracts/declare.d.ts +107 -0
  16. package/dist/contracts/declare.d.ts.map +1 -0
  17. package/dist/contracts/declare.js +136 -0
  18. package/dist/contracts/declare.js.map +1 -0
  19. package/dist/contracts/evolve.d.ts +92 -0
  20. package/dist/contracts/evolve.d.ts.map +1 -0
  21. package/dist/contracts/evolve.js +179 -0
  22. package/dist/contracts/evolve.js.map +1 -0
  23. package/dist/contracts/fingerprint.d.ts +16 -0
  24. package/dist/contracts/fingerprint.d.ts.map +1 -0
  25. package/dist/contracts/fingerprint.js +50 -0
  26. package/dist/contracts/fingerprint.js.map +1 -0
  27. package/dist/contracts/history.d.ts +71 -0
  28. package/dist/contracts/history.d.ts.map +1 -0
  29. package/dist/contracts/history.js +3 -0
  30. package/dist/contracts/history.js.map +1 -0
  31. package/dist/contracts/host-kind.d.ts +40 -0
  32. package/dist/contracts/host-kind.d.ts.map +1 -0
  33. package/dist/contracts/host-kind.js +37 -0
  34. package/dist/contracts/host-kind.js.map +1 -0
  35. package/dist/contracts/index.d.ts +7 -0
  36. package/dist/contracts/index.d.ts.map +1 -0
  37. package/dist/contracts/index.js +6 -0
  38. package/dist/contracts/index.js.map +1 -0
  39. package/dist/contracts/internal.d.ts +10 -0
  40. package/dist/contracts/internal.d.ts.map +1 -0
  41. package/dist/contracts/internal.js +9 -0
  42. package/dist/contracts/internal.js.map +1 -0
  43. package/dist/contracts/names.d.ts +3 -0
  44. package/dist/contracts/names.d.ts.map +1 -0
  45. package/dist/contracts/names.js +13 -0
  46. package/dist/contracts/names.js.map +1 -0
  47. package/dist/contracts/params.d.ts +28 -0
  48. package/dist/contracts/params.d.ts.map +1 -0
  49. package/dist/contracts/params.js +50 -0
  50. package/dist/contracts/params.js.map +1 -0
  51. package/dist/contracts/schema.d.ts +102 -0
  52. package/dist/contracts/schema.d.ts.map +1 -0
  53. package/dist/contracts/schema.js +103 -0
  54. package/dist/contracts/schema.js.map +1 -0
  55. package/dist/contracts/snapshot.d.ts +16 -0
  56. package/dist/contracts/snapshot.d.ts.map +1 -0
  57. package/dist/contracts/snapshot.js +167 -0
  58. package/dist/contracts/snapshot.js.map +1 -0
  59. package/dist/data/args.d.ts +50 -0
  60. package/dist/data/args.d.ts.map +1 -0
  61. package/dist/data/args.js +83 -0
  62. package/dist/data/args.js.map +1 -0
  63. package/dist/data/errors.d.ts +80 -0
  64. package/dist/data/errors.d.ts.map +1 -0
  65. package/dist/data/errors.js +116 -0
  66. package/dist/data/errors.js.map +1 -0
  67. package/dist/data/failure.d.ts +26 -0
  68. package/dist/data/failure.d.ts.map +1 -0
  69. package/dist/data/failure.js +77 -0
  70. package/dist/data/failure.js.map +1 -0
  71. package/dist/data/index.d.ts +4 -0
  72. package/dist/data/index.d.ts.map +1 -0
  73. package/dist/data/index.js +5 -0
  74. package/dist/data/index.js.map +1 -0
  75. package/dist/data/internal.d.ts +7 -0
  76. package/dist/data/internal.d.ts.map +1 -0
  77. package/dist/data/internal.js +8 -0
  78. package/dist/data/internal.js.map +1 -0
  79. package/dist/data/params.d.ts +20 -0
  80. package/dist/data/params.d.ts.map +1 -0
  81. package/dist/data/params.js +31 -0
  82. package/dist/data/params.js.map +1 -0
  83. package/dist/data/principal.d.ts +22 -0
  84. package/dist/data/principal.d.ts.map +1 -0
  85. package/dist/data/principal.js +49 -0
  86. package/dist/data/principal.js.map +1 -0
  87. package/dist/data/validator.d.ts +12 -0
  88. package/dist/data/validator.d.ts.map +1 -0
  89. package/dist/data/validator.js +35 -0
  90. package/dist/data/validator.js.map +1 -0
  91. package/dist/delta/apply-immutable-trusted.js +3 -4
  92. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  93. package/dist/delta/diff.d.ts.map +1 -1
  94. package/dist/delta/diff.js +5 -3
  95. package/dist/delta/diff.js.map +1 -1
  96. package/dist/delta/index.d.ts +9 -1
  97. package/dist/delta/index.d.ts.map +1 -1
  98. package/dist/delta/index.js +15 -11
  99. package/dist/delta/index.js.map +1 -1
  100. package/dist/delta/pending.d.ts +36 -0
  101. package/dist/delta/pending.d.ts.map +1 -0
  102. package/dist/delta/pending.js +143 -0
  103. package/dist/delta/pending.js.map +1 -0
  104. package/dist/delta/tracker.d.ts +12 -0
  105. package/dist/delta/tracker.d.ts.map +1 -1
  106. package/dist/delta/tracker.js +109 -39
  107. package/dist/delta/tracker.js.map +1 -1
  108. package/dist/documents/address-source.d.ts +20 -0
  109. package/dist/documents/address-source.d.ts.map +1 -0
  110. package/dist/documents/address-source.js +44 -0
  111. package/dist/documents/address-source.js.map +1 -0
  112. package/dist/documents/definition.d.ts +84 -0
  113. package/dist/documents/definition.d.ts.map +1 -0
  114. package/dist/documents/definition.js +74 -0
  115. package/dist/documents/definition.js.map +1 -0
  116. package/dist/documents/documents.d.ts +126 -0
  117. package/dist/documents/documents.d.ts.map +1 -0
  118. package/dist/documents/documents.js +248 -0
  119. package/dist/documents/documents.js.map +1 -0
  120. package/dist/documents/fence.d.ts +9 -0
  121. package/dist/documents/fence.d.ts.map +1 -0
  122. package/dist/documents/fence.js +15 -0
  123. package/dist/documents/fence.js.map +1 -0
  124. package/dist/documents/handles.d.ts +76 -0
  125. package/dist/documents/handles.d.ts.map +1 -0
  126. package/dist/documents/handles.js +66 -0
  127. package/dist/documents/handles.js.map +1 -0
  128. package/dist/documents/index.d.ts +4 -0
  129. package/dist/documents/index.d.ts.map +1 -0
  130. package/dist/documents/index.js +3 -0
  131. package/dist/documents/index.js.map +1 -0
  132. package/dist/documents/internal.d.ts +9 -0
  133. package/dist/documents/internal.d.ts.map +1 -0
  134. package/dist/documents/internal.js +9 -0
  135. package/dist/documents/internal.js.map +1 -0
  136. package/dist/documents/keyed-slot.d.ts +103 -0
  137. package/dist/documents/keyed-slot.d.ts.map +1 -0
  138. package/dist/documents/keyed-slot.js +395 -0
  139. package/dist/documents/keyed-slot.js.map +1 -0
  140. package/dist/documents/line.d.ts +7 -0
  141. package/dist/documents/line.d.ts.map +1 -0
  142. package/dist/documents/line.js +14 -0
  143. package/dist/documents/line.js.map +1 -0
  144. package/dist/documents/persistence.d.ts +104 -0
  145. package/dist/documents/persistence.d.ts.map +1 -0
  146. package/dist/documents/persistence.js +129 -0
  147. package/dist/documents/persistence.js.map +1 -0
  148. package/dist/documents/residency.d.ts +31 -0
  149. package/dist/documents/residency.d.ts.map +1 -0
  150. package/dist/documents/residency.js +93 -0
  151. package/dist/documents/residency.js.map +1 -0
  152. package/dist/documents/slot.d.ts +109 -0
  153. package/dist/documents/slot.d.ts.map +1 -0
  154. package/dist/documents/slot.js +181 -0
  155. package/dist/documents/slot.js.map +1 -0
  156. package/dist/documents/transaction.d.ts +143 -0
  157. package/dist/documents/transaction.d.ts.map +1 -0
  158. package/dist/documents/transaction.js +442 -0
  159. package/dist/documents/transaction.js.map +1 -0
  160. package/dist/host/activity.d.ts +31 -0
  161. package/dist/host/activity.d.ts.map +1 -0
  162. package/dist/host/activity.js +40 -0
  163. package/dist/host/activity.js.map +1 -0
  164. package/dist/host/adapted.d.ts +49 -0
  165. package/dist/host/adapted.d.ts.map +1 -0
  166. package/dist/host/adapted.js +214 -0
  167. package/dist/host/adapted.js.map +1 -0
  168. package/dist/host/attempt.d.ts +308 -0
  169. package/dist/host/attempt.d.ts.map +1 -0
  170. package/dist/host/attempt.js +1199 -0
  171. package/dist/host/attempt.js.map +1 -0
  172. package/dist/host/backoff.d.ts +29 -0
  173. package/dist/host/backoff.d.ts.map +1 -0
  174. package/dist/host/backoff.js +69 -0
  175. package/dist/host/backoff.js.map +1 -0
  176. package/dist/host/ctx.d.ts +94 -0
  177. package/dist/host/ctx.d.ts.map +1 -0
  178. package/dist/host/ctx.js +200 -0
  179. package/dist/host/ctx.js.map +1 -0
  180. package/dist/host/deadline.d.ts +12 -0
  181. package/dist/host/deadline.d.ts.map +1 -0
  182. package/dist/host/deadline.js +40 -0
  183. package/dist/host/deadline.js.map +1 -0
  184. package/dist/host/dependencies.d.ts +65 -0
  185. package/dist/host/dependencies.d.ts.map +1 -0
  186. package/dist/host/dependencies.js +115 -0
  187. package/dist/host/dependencies.js.map +1 -0
  188. package/dist/host/destination.d.ts +48 -0
  189. package/dist/host/destination.d.ts.map +1 -0
  190. package/dist/host/destination.js +101 -0
  191. package/dist/host/destination.js.map +1 -0
  192. package/dist/host/facet.d.ts +84 -0
  193. package/dist/host/facet.d.ts.map +1 -0
  194. package/dist/host/facet.js +55 -0
  195. package/dist/host/facet.js.map +1 -0
  196. package/dist/host/follow.d.ts +52 -0
  197. package/dist/host/follow.d.ts.map +1 -0
  198. package/dist/host/follow.js +207 -0
  199. package/dist/host/follow.js.map +1 -0
  200. package/dist/host/host.d.ts +571 -0
  201. package/dist/host/host.d.ts.map +1 -0
  202. package/dist/host/host.js +1318 -0
  203. package/dist/host/host.js.map +1 -0
  204. package/dist/host/index.d.ts +17 -0
  205. package/dist/host/index.d.ts.map +1 -0
  206. package/dist/host/index.js +6 -0
  207. package/dist/host/index.js.map +1 -0
  208. package/dist/host/internal.d.ts +11 -0
  209. package/dist/host/internal.d.ts.map +1 -0
  210. package/dist/host/internal.js +9 -0
  211. package/dist/host/internal.js.map +1 -0
  212. package/dist/host/members.d.ts +50 -0
  213. package/dist/host/members.d.ts.map +1 -0
  214. package/dist/host/members.js +107 -0
  215. package/dist/host/members.js.map +1 -0
  216. package/dist/host/native.d.ts +64 -0
  217. package/dist/host/native.d.ts.map +1 -0
  218. package/dist/host/native.js +126 -0
  219. package/dist/host/native.js.map +1 -0
  220. package/dist/host/object.d.ts +331 -0
  221. package/dist/host/object.d.ts.map +1 -0
  222. package/dist/host/object.js +1296 -0
  223. package/dist/host/object.js.map +1 -0
  224. package/dist/host/old-work.d.ts +34 -0
  225. package/dist/host/old-work.d.ts.map +1 -0
  226. package/dist/host/old-work.js +52 -0
  227. package/dist/host/old-work.js.map +1 -0
  228. package/dist/host/parked.d.ts +23 -0
  229. package/dist/host/parked.d.ts.map +1 -0
  230. package/dist/host/parked.js +79 -0
  231. package/dist/host/parked.js.map +1 -0
  232. package/dist/host/presence.d.ts +34 -0
  233. package/dist/host/presence.d.ts.map +1 -0
  234. package/dist/host/presence.js +117 -0
  235. package/dist/host/presence.js.map +1 -0
  236. package/dist/host/readiness.d.ts +27 -0
  237. package/dist/host/readiness.d.ts.map +1 -0
  238. package/dist/host/readiness.js +134 -0
  239. package/dist/host/readiness.js.map +1 -0
  240. package/dist/host/ref-state.d.ts +53 -0
  241. package/dist/host/ref-state.d.ts.map +1 -0
  242. package/dist/host/ref-state.js +83 -0
  243. package/dist/host/ref-state.js.map +1 -0
  244. package/dist/host/reference-keys.d.ts +36 -0
  245. package/dist/host/reference-keys.d.ts.map +1 -0
  246. package/dist/host/reference-keys.js +168 -0
  247. package/dist/host/reference-keys.js.map +1 -0
  248. package/dist/host/reference-source.d.ts +65 -0
  249. package/dist/host/reference-source.d.ts.map +1 -0
  250. package/dist/host/reference-source.js +285 -0
  251. package/dist/host/reference-source.js.map +1 -0
  252. package/dist/host/reference.d.ts +321 -0
  253. package/dist/host/reference.d.ts.map +1 -0
  254. package/dist/host/reference.js +797 -0
  255. package/dist/host/reference.js.map +1 -0
  256. package/dist/host/reload-cycle.d.ts +16 -0
  257. package/dist/host/reload-cycle.d.ts.map +1 -0
  258. package/dist/host/reload-cycle.js +81 -0
  259. package/dist/host/reload-cycle.js.map +1 -0
  260. package/dist/host/retry-on.d.ts +28 -0
  261. package/dist/host/retry-on.d.ts.map +1 -0
  262. package/dist/host/retry-on.js +52 -0
  263. package/dist/host/retry-on.js.map +1 -0
  264. package/dist/host/revocation.d.ts +16 -0
  265. package/dist/host/revocation.d.ts.map +1 -0
  266. package/dist/host/revocation.js +27 -0
  267. package/dist/host/revocation.js.map +1 -0
  268. package/dist/host/root.d.ts +37 -0
  269. package/dist/host/root.d.ts.map +1 -0
  270. package/dist/host/root.js +68 -0
  271. package/dist/host/root.js.map +1 -0
  272. package/dist/host/route.d.ts +64 -0
  273. package/dist/host/route.d.ts.map +1 -0
  274. package/dist/host/route.js +227 -0
  275. package/dist/host/route.js.map +1 -0
  276. package/dist/host/routines.d.ts +78 -0
  277. package/dist/host/routines.d.ts.map +1 -0
  278. package/dist/host/routines.js +398 -0
  279. package/dist/host/routines.js.map +1 -0
  280. package/dist/host/sleep.d.ts +9 -0
  281. package/dist/host/sleep.d.ts.map +1 -0
  282. package/dist/host/sleep.js +40 -0
  283. package/dist/host/sleep.js.map +1 -0
  284. package/dist/host/staging.d.ts +94 -0
  285. package/dist/host/staging.d.ts.map +1 -0
  286. package/dist/host/staging.js +304 -0
  287. package/dist/host/staging.js.map +1 -0
  288. package/dist/host/unbound-clock.d.ts +23 -0
  289. package/dist/host/unbound-clock.d.ts.map +1 -0
  290. package/dist/host/unbound-clock.js +58 -0
  291. package/dist/host/unbound-clock.js.map +1 -0
  292. package/dist/host/unbound.d.ts +37 -0
  293. package/dist/host/unbound.d.ts.map +1 -0
  294. package/dist/host/unbound.js +88 -0
  295. package/dist/host/unbound.js.map +1 -0
  296. package/dist/host/uuid.d.ts +3 -0
  297. package/dist/host/uuid.d.ts.map +1 -0
  298. package/dist/host/uuid.js +38 -0
  299. package/dist/host/uuid.js.map +1 -0
  300. package/dist/index.d.ts +29 -18
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +20 -9
  303. package/dist/index.js.map +1 -1
  304. package/dist/jobs/definition.d.ts +96 -0
  305. package/dist/jobs/definition.d.ts.map +1 -0
  306. package/dist/jobs/definition.js +83 -0
  307. package/dist/jobs/definition.js.map +1 -0
  308. package/dist/jobs/index.d.ts +5 -0
  309. package/dist/jobs/index.d.ts.map +1 -0
  310. package/dist/jobs/index.js +3 -0
  311. package/dist/jobs/index.js.map +1 -0
  312. package/dist/jobs/internal.d.ts +3 -0
  313. package/dist/jobs/internal.d.ts.map +1 -0
  314. package/dist/jobs/internal.js +4 -0
  315. package/dist/jobs/internal.js.map +1 -0
  316. package/dist/jobs/job.d.ts +149 -0
  317. package/dist/jobs/job.d.ts.map +1 -0
  318. package/dist/jobs/job.js +387 -0
  319. package/dist/jobs/job.js.map +1 -0
  320. package/dist/jobs/persisted.d.ts +38 -0
  321. package/dist/jobs/persisted.d.ts.map +1 -0
  322. package/dist/jobs/persisted.js +95 -0
  323. package/dist/jobs/persisted.js.map +1 -0
  324. package/dist/jobs/records.d.ts +231 -0
  325. package/dist/jobs/records.d.ts.map +1 -0
  326. package/dist/jobs/records.js +871 -0
  327. package/dist/jobs/records.js.map +1 -0
  328. package/dist/jobs/run-states.d.ts +69 -0
  329. package/dist/jobs/run-states.d.ts.map +1 -0
  330. package/dist/jobs/run-states.js +228 -0
  331. package/dist/jobs/run-states.js.map +1 -0
  332. package/dist/jobs/run.d.ts +117 -0
  333. package/dist/jobs/run.d.ts.map +1 -0
  334. package/dist/jobs/run.js +204 -0
  335. package/dist/jobs/run.js.map +1 -0
  336. package/dist/jobs/running.d.ts +44 -0
  337. package/dist/jobs/running.d.ts.map +1 -0
  338. package/dist/jobs/running.js +117 -0
  339. package/dist/jobs/running.js.map +1 -0
  340. package/dist/jobs/stored.d.ts +63 -0
  341. package/dist/jobs/stored.d.ts.map +1 -0
  342. package/dist/jobs/stored.js +55 -0
  343. package/dist/jobs/stored.js.map +1 -0
  344. package/dist/link/binary.d.ts +4 -0
  345. package/dist/link/binary.d.ts.map +1 -0
  346. package/dist/link/binary.js +544 -0
  347. package/dist/link/binary.js.map +1 -0
  348. package/dist/link/channel.d.ts +68 -0
  349. package/dist/link/channel.d.ts.map +1 -0
  350. package/dist/link/channel.js +215 -0
  351. package/dist/link/channel.js.map +1 -0
  352. package/dist/link/errors.d.ts +7 -0
  353. package/dist/link/errors.d.ts.map +1 -0
  354. package/dist/link/errors.js +21 -0
  355. package/dist/link/errors.js.map +1 -0
  356. package/dist/link/index.d.ts +8 -0
  357. package/dist/link/index.d.ts.map +1 -0
  358. package/dist/link/index.js +8 -0
  359. package/dist/link/index.js.map +1 -0
  360. package/dist/link/internal.d.ts +9 -0
  361. package/dist/link/internal.d.ts.map +1 -0
  362. package/dist/link/internal.js +10 -0
  363. package/dist/link/internal.js.map +1 -0
  364. package/dist/link/ipc.d.ts +22 -0
  365. package/dist/link/ipc.d.ts.map +1 -0
  366. package/dist/link/ipc.js +64 -0
  367. package/dist/link/ipc.js.map +1 -0
  368. package/dist/link/link.d.ts +34 -0
  369. package/dist/link/link.d.ts.map +1 -0
  370. package/dist/link/link.js +87 -0
  371. package/dist/link/link.js.map +1 -0
  372. package/dist/link/message.d.ts +262 -0
  373. package/dist/link/message.d.ts.map +1 -0
  374. package/dist/link/message.js +156 -0
  375. package/dist/link/message.js.map +1 -0
  376. package/dist/link/part.d.ts +80 -0
  377. package/dist/link/part.d.ts.map +1 -0
  378. package/dist/link/part.js +165 -0
  379. package/dist/link/part.js.map +1 -0
  380. package/dist/link/text.d.ts +6 -0
  381. package/dist/link/text.d.ts.map +1 -0
  382. package/dist/link/text.js +355 -0
  383. package/dist/link/text.js.map +1 -0
  384. package/dist/link/values.d.ts +40 -0
  385. package/dist/link/values.d.ts.map +1 -0
  386. package/dist/link/values.js +121 -0
  387. package/dist/link/values.js.map +1 -0
  388. package/dist/link/websocket.d.ts +26 -0
  389. package/dist/link/websocket.d.ts.map +1 -0
  390. package/dist/link/websocket.js +91 -0
  391. package/dist/link/websocket.js.map +1 -0
  392. package/dist/node/app/app.d.ts +269 -0
  393. package/dist/node/app/app.d.ts.map +1 -0
  394. package/dist/node/app/app.js +513 -0
  395. package/dist/node/app/app.js.map +1 -0
  396. package/dist/node/app/archive.d.ts +37 -0
  397. package/dist/node/app/archive.d.ts.map +1 -0
  398. package/dist/node/app/archive.js +204 -0
  399. package/dist/node/app/archive.js.map +1 -0
  400. package/dist/node/app/blobs.d.ts +23 -0
  401. package/dist/node/app/blobs.d.ts.map +1 -0
  402. package/dist/node/app/blobs.js +64 -0
  403. package/dist/node/app/blobs.js.map +1 -0
  404. package/dist/node/app/data.d.ts +35 -0
  405. package/dist/node/app/data.d.ts.map +1 -0
  406. package/dist/node/app/data.js +44 -0
  407. package/dist/node/app/data.js.map +1 -0
  408. package/dist/node/app/ephemeral-sessions.d.ts +20 -0
  409. package/dist/node/app/ephemeral-sessions.d.ts.map +1 -0
  410. package/dist/node/app/ephemeral-sessions.js +69 -0
  411. package/dist/node/app/ephemeral-sessions.js.map +1 -0
  412. package/dist/node/app/ephemeral.d.ts +11 -0
  413. package/dist/node/app/ephemeral.d.ts.map +1 -0
  414. package/dist/node/app/ephemeral.js +34 -0
  415. package/dist/node/app/ephemeral.js.map +1 -0
  416. package/dist/node/app/files-copy.d.ts +13 -0
  417. package/dist/node/app/files-copy.d.ts.map +1 -0
  418. package/dist/node/app/files-copy.js +86 -0
  419. package/dist/node/app/files-copy.js.map +1 -0
  420. package/dist/node/app/files-entry.d.ts +4 -0
  421. package/dist/node/app/files-entry.d.ts.map +1 -0
  422. package/dist/node/app/files-entry.js +7 -0
  423. package/dist/node/app/files-entry.js.map +1 -0
  424. package/dist/node/app/files-index.d.ts +180 -0
  425. package/dist/node/app/files-index.d.ts.map +1 -0
  426. package/dist/node/app/files-index.js +535 -0
  427. package/dist/node/app/files-index.js.map +1 -0
  428. package/dist/node/app/files.d.ts +363 -0
  429. package/dist/node/app/files.d.ts.map +1 -0
  430. package/dist/node/app/files.js +368 -0
  431. package/dist/node/app/files.js.map +1 -0
  432. package/dist/node/app/folder-views.d.ts +21 -0
  433. package/dist/node/app/folder-views.d.ts.map +1 -0
  434. package/dist/node/app/folder-views.js +55 -0
  435. package/dist/node/app/folder-views.js.map +1 -0
  436. package/dist/node/app/index.d.ts +12 -0
  437. package/dist/node/app/index.d.ts.map +1 -0
  438. package/dist/node/app/index.js +15 -0
  439. package/dist/node/app/index.js.map +1 -0
  440. package/dist/node/app/info.d.ts +66 -0
  441. package/dist/node/app/info.d.ts.map +1 -0
  442. package/dist/node/app/info.js +37 -0
  443. package/dist/node/app/info.js.map +1 -0
  444. package/dist/node/app/invite.d.ts +5 -0
  445. package/dist/node/app/invite.d.ts.map +1 -0
  446. package/dist/node/app/invite.js +64 -0
  447. package/dist/node/app/invite.js.map +1 -0
  448. package/dist/node/app/layout.d.ts +36 -0
  449. package/dist/node/app/layout.d.ts.map +1 -0
  450. package/dist/node/app/layout.js +87 -0
  451. package/dist/node/app/layout.js.map +1 -0
  452. package/dist/node/app/owner.d.ts +31 -0
  453. package/dist/node/app/owner.d.ts.map +1 -0
  454. package/dist/node/app/owner.js +104 -0
  455. package/dist/node/app/owner.js.map +1 -0
  456. package/dist/node/app/pairing.d.ts +55 -0
  457. package/dist/node/app/pairing.d.ts.map +1 -0
  458. package/dist/node/app/pairing.js +183 -0
  459. package/dist/node/app/pairing.js.map +1 -0
  460. package/dist/node/app/secrets.d.ts +16 -0
  461. package/dist/node/app/secrets.d.ts.map +1 -0
  462. package/dist/node/app/secrets.js +72 -0
  463. package/dist/node/app/secrets.js.map +1 -0
  464. package/dist/node/app/sessions.d.ts +72 -0
  465. package/dist/node/app/sessions.d.ts.map +1 -0
  466. package/dist/node/app/sessions.js +222 -0
  467. package/dist/node/app/sessions.js.map +1 -0
  468. package/dist/node/app/tar.d.ts +24 -0
  469. package/dist/node/app/tar.d.ts.map +1 -0
  470. package/dist/node/app/tar.js +167 -0
  471. package/dist/node/app/tar.js.map +1 -0
  472. package/dist/node/app/uploads.d.ts +37 -0
  473. package/dist/node/app/uploads.d.ts.map +1 -0
  474. package/dist/node/app/uploads.js +157 -0
  475. package/dist/node/app/uploads.js.map +1 -0
  476. package/dist/node/app/users.d.ts +37 -0
  477. package/dist/node/app/users.d.ts.map +1 -0
  478. package/dist/node/app/users.js +62 -0
  479. package/dist/node/app/users.js.map +1 -0
  480. package/dist/node/app/worker.d.ts +18 -0
  481. package/dist/node/app/worker.d.ts.map +1 -0
  482. package/dist/node/app/worker.js +84 -0
  483. package/dist/node/app/worker.js.map +1 -0
  484. package/dist/node/compression.d.ts +7 -0
  485. package/dist/node/compression.d.ts.map +1 -0
  486. package/dist/node/compression.js +25 -0
  487. package/dist/node/compression.js.map +1 -0
  488. package/dist/node/http/admission.d.ts +63 -0
  489. package/dist/node/http/admission.d.ts.map +1 -0
  490. package/dist/node/http/admission.js +134 -0
  491. package/dist/node/http/admission.js.map +1 -0
  492. package/dist/node/http/authenticate.d.ts +21 -0
  493. package/dist/node/http/authenticate.d.ts.map +1 -0
  494. package/dist/node/http/authenticate.js +34 -0
  495. package/dist/node/http/authenticate.js.map +1 -0
  496. package/dist/node/http/cookies.d.ts +32 -0
  497. package/dist/node/http/cookies.d.ts.map +1 -0
  498. package/dist/node/http/cookies.js +70 -0
  499. package/dist/node/http/cookies.js.map +1 -0
  500. package/dist/node/http/file.d.ts +23 -0
  501. package/dist/node/http/file.d.ts.map +1 -0
  502. package/dist/node/http/file.js +94 -0
  503. package/dist/node/http/file.js.map +1 -0
  504. package/dist/node/http/headers.d.ts +37 -0
  505. package/dist/node/http/headers.d.ts.map +1 -0
  506. package/dist/node/http/headers.js +136 -0
  507. package/dist/node/http/headers.js.map +1 -0
  508. package/dist/node/http/http.d.ts +111 -0
  509. package/dist/node/http/http.d.ts.map +1 -0
  510. package/dist/node/http/http.js +524 -0
  511. package/dist/node/http/http.js.map +1 -0
  512. package/dist/node/http/incoming.d.ts +19 -0
  513. package/dist/node/http/incoming.d.ts.map +1 -0
  514. package/dist/node/http/incoming.js +31 -0
  515. package/dist/node/http/incoming.js.map +1 -0
  516. package/dist/node/http/index.d.ts +11 -0
  517. package/dist/node/http/index.d.ts.map +1 -0
  518. package/dist/node/http/index.js +12 -0
  519. package/dist/node/http/index.js.map +1 -0
  520. package/dist/node/http/node.d.ts +78 -0
  521. package/dist/node/http/node.d.ts.map +1 -0
  522. package/dist/node/http/node.js +291 -0
  523. package/dist/node/http/node.js.map +1 -0
  524. package/dist/node/http/request.d.ts +60 -0
  525. package/dist/node/http/request.d.ts.map +1 -0
  526. package/dist/node/http/request.js +118 -0
  527. package/dist/node/http/request.js.map +1 -0
  528. package/dist/node/http/response.d.ts +63 -0
  529. package/dist/node/http/response.d.ts.map +1 -0
  530. package/dist/node/http/response.js +202 -0
  531. package/dist/node/http/response.js.map +1 -0
  532. package/dist/node/http/router.d.ts +132 -0
  533. package/dist/node/http/router.d.ts.map +1 -0
  534. package/dist/node/http/router.js +267 -0
  535. package/dist/node/http/router.js.map +1 -0
  536. package/dist/node/http/upgrades.d.ts +61 -0
  537. package/dist/node/http/upgrades.d.ts.map +1 -0
  538. package/dist/node/http/upgrades.js +192 -0
  539. package/dist/node/http/upgrades.js.map +1 -0
  540. package/dist/node/plugins/base-inputs.d.ts +14 -0
  541. package/dist/node/plugins/base-inputs.d.ts.map +1 -0
  542. package/dist/node/plugins/base-inputs.js +33 -0
  543. package/dist/node/plugins/base-inputs.js.map +1 -0
  544. package/dist/node/plugins/build.d.ts +77 -0
  545. package/dist/node/plugins/build.d.ts.map +1 -0
  546. package/dist/node/plugins/build.js +576 -0
  547. package/dist/node/plugins/build.js.map +1 -0
  548. package/dist/node/plugins/css-modules.d.ts +13 -0
  549. package/dist/node/plugins/css-modules.d.ts.map +1 -0
  550. package/dist/node/plugins/css-modules.js +58 -0
  551. package/dist/node/plugins/css-modules.js.map +1 -0
  552. package/dist/node/plugins/discover.d.ts +67 -0
  553. package/dist/node/plugins/discover.d.ts.map +1 -0
  554. package/dist/node/plugins/discover.js +369 -0
  555. package/dist/node/plugins/discover.js.map +1 -0
  556. package/dist/node/plugins/evaluate.d.ts +33 -0
  557. package/dist/node/plugins/evaluate.d.ts.map +1 -0
  558. package/dist/node/plugins/evaluate.js +121 -0
  559. package/dist/node/plugins/evaluate.js.map +1 -0
  560. package/dist/node/plugins/index.d.ts +11 -0
  561. package/dist/node/plugins/index.d.ts.map +1 -0
  562. package/dist/node/plugins/index.js +13 -0
  563. package/dist/node/plugins/index.js.map +1 -0
  564. package/dist/node/plugins/install.d.ts +38 -0
  565. package/dist/node/plugins/install.d.ts.map +1 -0
  566. package/dist/node/plugins/install.js +213 -0
  567. package/dist/node/plugins/install.js.map +1 -0
  568. package/dist/node/plugins/plugins.d.ts +162 -0
  569. package/dist/node/plugins/plugins.d.ts.map +1 -0
  570. package/dist/node/plugins/plugins.js +244 -0
  571. package/dist/node/plugins/plugins.js.map +1 -0
  572. package/dist/node/plugins/runtime.d.ts +57 -0
  573. package/dist/node/plugins/runtime.d.ts.map +1 -0
  574. package/dist/node/plugins/runtime.js +92 -0
  575. package/dist/node/plugins/runtime.js.map +1 -0
  576. package/dist/node/plugins/stack.d.ts +16 -0
  577. package/dist/node/plugins/stack.d.ts.map +1 -0
  578. package/dist/node/plugins/stack.js +61 -0
  579. package/dist/node/plugins/stack.js.map +1 -0
  580. package/dist/node/plugins/testing.d.ts +58 -0
  581. package/dist/node/plugins/testing.d.ts.map +1 -0
  582. package/dist/node/plugins/testing.js +210 -0
  583. package/dist/node/plugins/testing.js.map +1 -0
  584. package/dist/node/plugins/watcher.d.ts +69 -0
  585. package/dist/node/plugins/watcher.d.ts.map +1 -0
  586. package/dist/node/plugins/watcher.js +622 -0
  587. package/dist/node/plugins/watcher.js.map +1 -0
  588. package/dist/node/surfaces/bundle.d.ts +31 -0
  589. package/dist/node/surfaces/bundle.d.ts.map +1 -0
  590. package/dist/node/surfaces/bundle.js +118 -0
  591. package/dist/node/surfaces/bundle.js.map +1 -0
  592. package/dist/node/surfaces/current.d.ts +17 -0
  593. package/dist/node/surfaces/current.d.ts.map +1 -0
  594. package/dist/node/surfaces/current.js +54 -0
  595. package/dist/node/surfaces/current.js.map +1 -0
  596. package/dist/node/surfaces/index.d.ts +6 -0
  597. package/dist/node/surfaces/index.d.ts.map +1 -0
  598. package/dist/node/surfaces/index.js +6 -0
  599. package/dist/node/surfaces/index.js.map +1 -0
  600. package/dist/node/surfaces/published.d.ts +27 -0
  601. package/dist/node/surfaces/published.d.ts.map +1 -0
  602. package/dist/node/surfaces/published.js +142 -0
  603. package/dist/node/surfaces/published.js.map +1 -0
  604. package/dist/node/surfaces/served.d.ts +15 -0
  605. package/dist/node/surfaces/served.d.ts.map +1 -0
  606. package/dist/node/surfaces/served.js +42 -0
  607. package/dist/node/surfaces/served.js.map +1 -0
  608. package/dist/node/surfaces/surface-build.d.ts +53 -0
  609. package/dist/node/surfaces/surface-build.d.ts.map +1 -0
  610. package/dist/node/surfaces/surface-build.js +105 -0
  611. package/dist/node/surfaces/surface-build.js.map +1 -0
  612. package/dist/node/surfaces/tui.d.ts +40 -0
  613. package/dist/node/surfaces/tui.d.ts.map +1 -0
  614. package/dist/node/surfaces/tui.js +55 -0
  615. package/dist/node/surfaces/tui.js.map +1 -0
  616. package/dist/node/surfaces/web.d.ts +56 -0
  617. package/dist/node/surfaces/web.d.ts.map +1 -0
  618. package/dist/node/surfaces/web.js +108 -0
  619. package/dist/node/surfaces/web.js.map +1 -0
  620. package/dist/node/tui/actions.d.ts +49 -0
  621. package/dist/node/tui/actions.d.ts.map +1 -0
  622. package/dist/node/tui/actions.js +195 -0
  623. package/dist/node/tui/actions.js.map +1 -0
  624. package/dist/node/tui/credentials.d.ts +17 -0
  625. package/dist/node/tui/credentials.d.ts.map +1 -0
  626. package/dist/node/tui/credentials.js +54 -0
  627. package/dist/node/tui/credentials.js.map +1 -0
  628. package/dist/node/tui/filter.d.ts +5 -0
  629. package/dist/node/tui/filter.d.ts.map +1 -0
  630. package/dist/node/tui/filter.js +79 -0
  631. package/dist/node/tui/filter.js.map +1 -0
  632. package/dist/node/tui/index.d.ts +6 -0
  633. package/dist/node/tui/index.d.ts.map +1 -0
  634. package/dist/node/tui/index.js +6 -0
  635. package/dist/node/tui/index.js.map +1 -0
  636. package/dist/node/tui/launcher.d.ts +40 -0
  637. package/dist/node/tui/launcher.d.ts.map +1 -0
  638. package/dist/node/tui/launcher.js +439 -0
  639. package/dist/node/tui/launcher.js.map +1 -0
  640. package/dist/node/tui/pipe.d.ts +18 -0
  641. package/dist/node/tui/pipe.d.ts.map +1 -0
  642. package/dist/node/tui/pipe.js +134 -0
  643. package/dist/node/tui/pipe.js.map +1 -0
  644. package/dist/node/tui/sandbox.d.ts +54 -0
  645. package/dist/node/tui/sandbox.d.ts.map +1 -0
  646. package/dist/node/tui/sandbox.js +431 -0
  647. package/dist/node/tui/sandbox.js.map +1 -0
  648. package/dist/node/workers/base.d.ts +30 -0
  649. package/dist/node/workers/base.d.ts.map +1 -0
  650. package/dist/node/workers/base.js +255 -0
  651. package/dist/node/workers/base.js.map +1 -0
  652. package/dist/node/workers/child.d.ts +4 -0
  653. package/dist/node/workers/child.d.ts.map +1 -0
  654. package/dist/node/workers/child.js +6 -0
  655. package/dist/node/workers/child.js.map +1 -0
  656. package/dist/node/workers/control.d.ts +83 -0
  657. package/dist/node/workers/control.d.ts.map +1 -0
  658. package/dist/node/workers/control.js +77 -0
  659. package/dist/node/workers/control.js.map +1 -0
  660. package/dist/node/workers/index.d.ts +4 -0
  661. package/dist/node/workers/index.d.ts.map +1 -0
  662. package/dist/node/workers/index.js +7 -0
  663. package/dist/node/workers/index.js.map +1 -0
  664. package/dist/node/workers/lock.d.ts +30 -0
  665. package/dist/node/workers/lock.d.ts.map +1 -0
  666. package/dist/node/workers/lock.js +180 -0
  667. package/dist/node/workers/lock.js.map +1 -0
  668. package/dist/node/workers/main.d.ts +46 -0
  669. package/dist/node/workers/main.d.ts.map +1 -0
  670. package/dist/node/workers/main.js +230 -0
  671. package/dist/node/workers/main.js.map +1 -0
  672. package/dist/node/workers/process.d.ts +42 -0
  673. package/dist/node/workers/process.d.ts.map +1 -0
  674. package/dist/node/workers/process.js +125 -0
  675. package/dist/node/workers/process.js.map +1 -0
  676. package/dist/node/workers/workers.d.ts +122 -0
  677. package/dist/node/workers/workers.d.ts.map +1 -0
  678. package/dist/node/workers/workers.js +677 -0
  679. package/dist/node/workers/workers.js.map +1 -0
  680. package/dist/output.d.ts +1 -1
  681. package/dist/output.d.ts.map +1 -1
  682. package/dist/output.js +4 -2
  683. package/dist/output.js.map +1 -1
  684. package/dist/react/hooks.d.ts +43 -0
  685. package/dist/react/hooks.d.ts.map +1 -0
  686. package/dist/react/hooks.js +82 -0
  687. package/dist/react/hooks.js.map +1 -0
  688. package/dist/react/index.d.ts +3 -0
  689. package/dist/react/index.d.ts.map +1 -0
  690. package/dist/react/index.js +4 -0
  691. package/dist/react/index.js.map +1 -0
  692. package/dist/react/stores.d.ts +9 -0
  693. package/dist/react/stores.d.ts.map +1 -0
  694. package/dist/react/stores.js +37 -0
  695. package/dist/react/stores.js.map +1 -0
  696. package/dist/registries/contribution.d.ts +50 -0
  697. package/dist/registries/contribution.d.ts.map +1 -0
  698. package/dist/registries/contribution.js +129 -0
  699. package/dist/registries/contribution.js.map +1 -0
  700. package/dist/registries/entries.d.ts +18 -0
  701. package/dist/registries/entries.d.ts.map +1 -0
  702. package/dist/registries/entries.js +42 -0
  703. package/dist/registries/entries.js.map +1 -0
  704. package/dist/registries/index.d.ts +3 -0
  705. package/dist/registries/index.d.ts.map +1 -0
  706. package/dist/registries/index.js +5 -0
  707. package/dist/registries/index.js.map +1 -0
  708. package/dist/registries/internal.d.ts +4 -0
  709. package/dist/registries/internal.d.ts.map +1 -0
  710. package/dist/registries/internal.js +5 -0
  711. package/dist/registries/internal.js.map +1 -0
  712. package/dist/registries/record.d.ts +115 -0
  713. package/dist/registries/record.d.ts.map +1 -0
  714. package/dist/registries/record.js +283 -0
  715. package/dist/registries/record.js.map +1 -0
  716. package/dist/registries/registry.d.ts +74 -0
  717. package/dist/registries/registry.d.ts.map +1 -0
  718. package/dist/registries/registry.js +14 -0
  719. package/dist/registries/registry.js.map +1 -0
  720. package/dist/registries/value.d.ts +48 -0
  721. package/dist/registries/value.d.ts.map +1 -0
  722. package/dist/registries/value.js +224 -0
  723. package/dist/registries/value.js.map +1 -0
  724. package/dist/remote/calls.d.ts +25 -0
  725. package/dist/remote/calls.d.ts.map +1 -0
  726. package/dist/remote/calls.js +62 -0
  727. package/dist/remote/calls.js.map +1 -0
  728. package/dist/remote/consumer.d.ts +43 -0
  729. package/dist/remote/consumer.d.ts.map +1 -0
  730. package/dist/remote/consumer.js +350 -0
  731. package/dist/remote/consumer.js.map +1 -0
  732. package/dist/remote/hold.d.ts +141 -0
  733. package/dist/remote/hold.d.ts.map +1 -0
  734. package/dist/remote/hold.js +579 -0
  735. package/dist/remote/hold.js.map +1 -0
  736. package/dist/remote/host-link.d.ts +77 -0
  737. package/dist/remote/host-link.d.ts.map +1 -0
  738. package/dist/remote/host-link.js +184 -0
  739. package/dist/remote/host-link.js.map +1 -0
  740. package/dist/remote/internal.d.ts +6 -0
  741. package/dist/remote/internal.d.ts.map +1 -0
  742. package/dist/remote/internal.js +6 -0
  743. package/dist/remote/internal.js.map +1 -0
  744. package/dist/remote/path.d.ts +46 -0
  745. package/dist/remote/path.d.ts.map +1 -0
  746. package/dist/remote/path.js +73 -0
  747. package/dist/remote/path.js.map +1 -0
  748. package/dist/remote/provider.d.ts +89 -0
  749. package/dist/remote/provider.d.ts.map +1 -0
  750. package/dist/remote/provider.js +597 -0
  751. package/dist/remote/provider.js.map +1 -0
  752. package/dist/remote/relay.d.ts +69 -0
  753. package/dist/remote/relay.d.ts.map +1 -0
  754. package/dist/remote/relay.js +219 -0
  755. package/dist/remote/relay.js.map +1 -0
  756. package/dist/remote/remote-object.d.ts +138 -0
  757. package/dist/remote/remote-object.d.ts.map +1 -0
  758. package/dist/remote/remote-object.js +492 -0
  759. package/dist/remote/remote-object.js.map +1 -0
  760. package/dist/remote/replica.d.ts +59 -0
  761. package/dist/remote/replica.d.ts.map +1 -0
  762. package/dist/remote/replica.js +125 -0
  763. package/dist/remote/replica.js.map +1 -0
  764. package/dist/sqlite/cloudflare.d.ts +2 -0
  765. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  766. package/dist/sqlite/cloudflare.js +10 -0
  767. package/dist/sqlite/cloudflare.js.map +1 -1
  768. package/dist/sqlite/database.d.ts +5 -2
  769. package/dist/sqlite/database.d.ts.map +1 -1
  770. package/dist/sqlite/database.js.map +1 -1
  771. package/dist/sqlite/node.d.ts +13 -2
  772. package/dist/sqlite/node.d.ts.map +1 -1
  773. package/dist/sqlite/node.js +31 -8
  774. package/dist/sqlite/node.js.map +1 -1
  775. package/dist/state/batch.d.ts +64 -0
  776. package/dist/state/batch.d.ts.map +1 -0
  777. package/dist/state/batch.js +164 -0
  778. package/dist/state/batch.js.map +1 -0
  779. package/dist/state/derive.d.ts +52 -0
  780. package/dist/state/derive.d.ts.map +1 -0
  781. package/dist/state/derive.js +182 -0
  782. package/dist/state/derive.js.map +1 -0
  783. package/dist/state/index.d.ts +6 -0
  784. package/dist/state/index.d.ts.map +1 -0
  785. package/dist/state/index.js +4 -0
  786. package/dist/state/index.js.map +1 -0
  787. package/dist/state/internal.d.ts +6 -0
  788. package/dist/state/internal.d.ts.map +1 -0
  789. package/dist/state/internal.js +8 -0
  790. package/dist/state/internal.js.map +1 -0
  791. package/dist/state/native-source.d.ts +106 -0
  792. package/dist/state/native-source.d.ts.map +1 -0
  793. package/dist/state/native-source.js +240 -0
  794. package/dist/state/native-source.js.map +1 -0
  795. package/dist/state/watchable.d.ts +114 -0
  796. package/dist/state/watchable.d.ts.map +1 -0
  797. package/dist/state/watchable.js +156 -0
  798. package/dist/state/watchable.js.map +1 -0
  799. package/dist/state/writable.d.ts +32 -0
  800. package/dist/state/writable.d.ts.map +1 -0
  801. package/dist/state/writable.js +49 -0
  802. package/dist/state/writable.js.map +1 -0
  803. package/dist/store/adapter.d.ts +67 -0
  804. package/dist/store/adapter.d.ts.map +1 -0
  805. package/dist/store/adapter.js +118 -0
  806. package/dist/store/adapter.js.map +1 -0
  807. package/dist/store/allocator.d.ts +17 -0
  808. package/dist/store/allocator.d.ts.map +1 -0
  809. package/dist/store/allocator.js +30 -0
  810. package/dist/store/allocator.js.map +1 -0
  811. package/dist/store/applier.d.ts +8 -0
  812. package/dist/store/applier.d.ts.map +1 -0
  813. package/dist/store/applier.js +375 -0
  814. package/dist/store/applier.js.map +1 -0
  815. package/dist/store/apply-batch.d.ts +12 -0
  816. package/dist/store/apply-batch.d.ts.map +1 -0
  817. package/dist/store/apply-batch.js +83 -0
  818. package/dist/store/apply-batch.js.map +1 -0
  819. package/dist/store/archive.d.ts +32 -0
  820. package/dist/store/archive.d.ts.map +1 -0
  821. package/dist/store/archive.js +130 -0
  822. package/dist/store/archive.js.map +1 -0
  823. package/dist/store/backend.d.ts +10 -0
  824. package/dist/store/backend.d.ts.map +1 -0
  825. package/dist/store/backend.js +15 -0
  826. package/dist/store/backend.js.map +1 -0
  827. package/dist/store/catalog.d.ts +24 -0
  828. package/dist/store/catalog.d.ts.map +1 -0
  829. package/dist/store/catalog.js +17 -0
  830. package/dist/store/catalog.js.map +1 -0
  831. package/dist/store/claims.d.ts +23 -0
  832. package/dist/store/claims.d.ts.map +1 -0
  833. package/dist/store/claims.js +65 -0
  834. package/dist/store/claims.js.map +1 -0
  835. package/dist/store/columns.d.ts +77 -0
  836. package/dist/store/columns.d.ts.map +1 -0
  837. package/dist/store/columns.js +77 -0
  838. package/dist/store/columns.js.map +1 -0
  839. package/dist/store/engine.d.ts +176 -0
  840. package/dist/store/engine.d.ts.map +1 -0
  841. package/dist/store/engine.js +283 -0
  842. package/dist/store/engine.js.map +1 -0
  843. package/dist/store/evaluate.d.ts +17 -0
  844. package/dist/store/evaluate.d.ts.map +1 -0
  845. package/dist/store/evaluate.js +128 -0
  846. package/dist/store/evaluate.js.map +1 -0
  847. package/dist/store/export.d.ts +17 -0
  848. package/dist/store/export.d.ts.map +1 -0
  849. package/dist/store/export.js +200 -0
  850. package/dist/store/export.js.map +1 -0
  851. package/dist/store/expression.d.ts +150 -0
  852. package/dist/store/expression.d.ts.map +1 -0
  853. package/dist/store/expression.js +268 -0
  854. package/dist/store/expression.js.map +1 -0
  855. package/dist/store/import.d.ts +10 -0
  856. package/dist/store/import.d.ts.map +1 -0
  857. package/dist/store/import.js +276 -0
  858. package/dist/store/import.js.map +1 -0
  859. package/dist/store/index.d.ts +16 -0
  860. package/dist/store/index.d.ts.map +1 -0
  861. package/dist/store/index.js +13 -0
  862. package/dist/store/index.js.map +1 -0
  863. package/dist/store/json-column.d.ts +33 -0
  864. package/dist/store/json-column.d.ts.map +1 -0
  865. package/dist/store/json-column.js +62 -0
  866. package/dist/store/json-column.js.map +1 -0
  867. package/dist/store/jsonl.d.ts +9 -0
  868. package/dist/store/jsonl.d.ts.map +1 -0
  869. package/dist/store/jsonl.js +61 -0
  870. package/dist/store/jsonl.js.map +1 -0
  871. package/dist/store/live-query.d.ts +108 -0
  872. package/dist/store/live-query.d.ts.map +1 -0
  873. package/dist/store/live-query.js +254 -0
  874. package/dist/store/live-query.js.map +1 -0
  875. package/dist/store/outbox.d.ts +26 -0
  876. package/dist/store/outbox.d.ts.map +1 -0
  877. package/dist/store/outbox.js +80 -0
  878. package/dist/store/outbox.js.map +1 -0
  879. package/dist/store/query.d.ts +39 -0
  880. package/dist/store/query.d.ts.map +1 -0
  881. package/dist/store/query.js +97 -0
  882. package/dist/store/query.js.map +1 -0
  883. package/dist/store/refusal.d.ts +15 -0
  884. package/dist/store/refusal.d.ts.map +1 -0
  885. package/dist/store/refusal.js +36 -0
  886. package/dist/store/refusal.js.map +1 -0
  887. package/dist/store/rows.d.ts +80 -0
  888. package/dist/store/rows.d.ts.map +1 -0
  889. package/dist/store/rows.js +183 -0
  890. package/dist/store/rows.js.map +1 -0
  891. package/dist/store/schema.d.ts +25 -0
  892. package/dist/store/schema.d.ts.map +1 -0
  893. package/dist/store/schema.js +115 -0
  894. package/dist/store/schema.js.map +1 -0
  895. package/dist/store/sql.d.ts +73 -0
  896. package/dist/store/sql.d.ts.map +1 -0
  897. package/dist/store/sql.js +234 -0
  898. package/dist/store/sql.js.map +1 -0
  899. package/dist/store/step.d.ts +50 -0
  900. package/dist/store/step.d.ts.map +1 -0
  901. package/dist/store/step.js +52 -0
  902. package/dist/store/step.js.map +1 -0
  903. package/dist/store/store.d.ts +171 -0
  904. package/dist/store/store.d.ts.map +1 -0
  905. package/dist/store/store.js +818 -0
  906. package/dist/store/store.js.map +1 -0
  907. package/dist/store/table-changes.d.ts +29 -0
  908. package/dist/store/table-changes.d.ts.map +1 -0
  909. package/dist/store/table-changes.js +102 -0
  910. package/dist/store/table-changes.js.map +1 -0
  911. package/dist/store/table-evolve.d.ts +74 -0
  912. package/dist/store/table-evolve.d.ts.map +1 -0
  913. package/dist/store/table-evolve.js +201 -0
  914. package/dist/store/table-evolve.js.map +1 -0
  915. package/dist/store/table-handle.d.ts +73 -0
  916. package/dist/store/table-handle.d.ts.map +1 -0
  917. package/dist/store/table-handle.js +101 -0
  918. package/dist/store/table-handle.js.map +1 -0
  919. package/dist/store/table-history.d.ts +75 -0
  920. package/dist/store/table-history.d.ts.map +1 -0
  921. package/dist/store/table-history.js +42 -0
  922. package/dist/store/table-history.js.map +1 -0
  923. package/dist/store/table-migration.d.ts +16 -0
  924. package/dist/store/table-migration.d.ts.map +1 -0
  925. package/dist/store/table-migration.js +202 -0
  926. package/dist/store/table-migration.js.map +1 -0
  927. package/dist/store/table-writes.d.ts +125 -0
  928. package/dist/store/table-writes.d.ts.map +1 -0
  929. package/dist/store/table-writes.js +170 -0
  930. package/dist/store/table-writes.js.map +1 -0
  931. package/dist/store/table.d.ts +80 -0
  932. package/dist/store/table.d.ts.map +1 -0
  933. package/dist/store/table.js +103 -0
  934. package/dist/store/table.js.map +1 -0
  935. package/dist/store/text.d.ts +14 -0
  936. package/dist/store/text.d.ts.map +1 -0
  937. package/dist/store/text.js +51 -0
  938. package/dist/store/text.js.map +1 -0
  939. package/dist/store/writes.d.ts +5 -0
  940. package/dist/store/writes.d.ts.map +1 -0
  941. package/dist/store/writes.js +4 -0
  942. package/dist/store/writes.js.map +1 -0
  943. package/dist/surfaces/active-language.d.ts +20 -0
  944. package/dist/surfaces/active-language.d.ts.map +1 -0
  945. package/dist/surfaces/active-language.js +78 -0
  946. package/dist/surfaces/active-language.js.map +1 -0
  947. package/dist/surfaces/active-theme.d.ts +16 -0
  948. package/dist/surfaces/active-theme.d.ts.map +1 -0
  949. package/dist/surfaces/active-theme.js +47 -0
  950. package/dist/surfaces/active-theme.js.map +1 -0
  951. package/dist/surfaces/client.d.ts +96 -0
  952. package/dist/surfaces/client.d.ts.map +1 -0
  953. package/dist/surfaces/client.js +264 -0
  954. package/dist/surfaces/client.js.map +1 -0
  955. package/dist/surfaces/connection.d.ts +49 -0
  956. package/dist/surfaces/connection.d.ts.map +1 -0
  957. package/dist/surfaces/connection.js +142 -0
  958. package/dist/surfaces/connection.js.map +1 -0
  959. package/dist/surfaces/format.d.ts +5 -0
  960. package/dist/surfaces/format.d.ts.map +1 -0
  961. package/dist/surfaces/format.js +37 -0
  962. package/dist/surfaces/format.js.map +1 -0
  963. package/dist/surfaces/index.d.ts +15 -0
  964. package/dist/surfaces/index.d.ts.map +1 -0
  965. package/dist/surfaces/index.js +18 -0
  966. package/dist/surfaces/index.js.map +1 -0
  967. package/dist/surfaces/language.d.ts +53 -0
  968. package/dist/surfaces/language.d.ts.map +1 -0
  969. package/dist/surfaces/language.js +74 -0
  970. package/dist/surfaces/language.js.map +1 -0
  971. package/dist/surfaces/loaded.d.ts +42 -0
  972. package/dist/surfaces/loaded.d.ts.map +1 -0
  973. package/dist/surfaces/loaded.js +116 -0
  974. package/dist/surfaces/loaded.js.map +1 -0
  975. package/dist/surfaces/locale-choice.d.ts +25 -0
  976. package/dist/surfaces/locale-choice.d.ts.map +1 -0
  977. package/dist/surfaces/locale-choice.js +14 -0
  978. package/dist/surfaces/locale-choice.js.map +1 -0
  979. package/dist/surfaces/messages.d.ts +67 -0
  980. package/dist/surfaces/messages.d.ts.map +1 -0
  981. package/dist/surfaces/messages.js +112 -0
  982. package/dist/surfaces/messages.js.map +1 -0
  983. package/dist/surfaces/page-state.d.ts +14 -0
  984. package/dist/surfaces/page-state.d.ts.map +1 -0
  985. package/dist/surfaces/page-state.js +43 -0
  986. package/dist/surfaces/page-state.js.map +1 -0
  987. package/dist/surfaces/preference.d.ts +32 -0
  988. package/dist/surfaces/preference.d.ts.map +1 -0
  989. package/dist/surfaces/preference.js +72 -0
  990. package/dist/surfaces/preference.js.map +1 -0
  991. package/dist/surfaces/registered.d.ts +33 -0
  992. package/dist/surfaces/registered.d.ts.map +1 -0
  993. package/dist/surfaces/registered.js +51 -0
  994. package/dist/surfaces/registered.js.map +1 -0
  995. package/dist/surfaces/scripts.d.ts +84 -0
  996. package/dist/surfaces/scripts.d.ts.map +1 -0
  997. package/dist/surfaces/scripts.js +28 -0
  998. package/dist/surfaces/scripts.js.map +1 -0
  999. package/dist/surfaces/theme-choice.d.ts +31 -0
  1000. package/dist/surfaces/theme-choice.d.ts.map +1 -0
  1001. package/dist/surfaces/theme-choice.js +18 -0
  1002. package/dist/surfaces/theme-choice.js.map +1 -0
  1003. package/dist/surfaces/themes.d.ts +43 -0
  1004. package/dist/surfaces/themes.d.ts.map +1 -0
  1005. package/dist/surfaces/themes.js +110 -0
  1006. package/dist/surfaces/themes.js.map +1 -0
  1007. package/dist/surfaces/translations.d.ts +29 -0
  1008. package/dist/surfaces/translations.d.ts.map +1 -0
  1009. package/dist/surfaces/translations.js +57 -0
  1010. package/dist/surfaces/translations.js.map +1 -0
  1011. package/dist/sync/batch.d.ts +18 -0
  1012. package/dist/sync/batch.d.ts.map +1 -0
  1013. package/dist/sync/batch.js +125 -0
  1014. package/dist/sync/batch.js.map +1 -0
  1015. package/dist/sync/client.d.ts +166 -0
  1016. package/dist/sync/client.d.ts.map +1 -0
  1017. package/dist/sync/client.js +438 -0
  1018. package/dist/sync/client.js.map +1 -0
  1019. package/dist/sync/files.d.ts +46 -0
  1020. package/dist/sync/files.d.ts.map +1 -0
  1021. package/dist/sync/files.js +13 -0
  1022. package/dist/sync/files.js.map +1 -0
  1023. package/dist/sync/filesystem.d.ts +37 -0
  1024. package/dist/sync/filesystem.d.ts.map +1 -0
  1025. package/dist/sync/filesystem.js +185 -0
  1026. package/dist/sync/filesystem.js.map +1 -0
  1027. package/dist/sync/index.d.ts +8 -0
  1028. package/dist/sync/index.d.ts.map +1 -0
  1029. package/dist/sync/index.js +9 -0
  1030. package/dist/sync/index.js.map +1 -0
  1031. package/dist/sync/lines.d.ts +18 -0
  1032. package/dist/sync/lines.d.ts.map +1 -0
  1033. package/dist/sync/lines.js +46 -0
  1034. package/dist/sync/lines.js.map +1 -0
  1035. package/dist/sync/remote.d.ts +130 -0
  1036. package/dist/sync/remote.d.ts.map +1 -0
  1037. package/dist/sync/remote.js +46 -0
  1038. package/dist/sync/remote.js.map +1 -0
  1039. package/dist/sync/state.d.ts +17 -0
  1040. package/dist/sync/state.d.ts.map +1 -0
  1041. package/dist/sync/state.js +40 -0
  1042. package/dist/sync/state.js.map +1 -0
  1043. package/dist/telemetry-ingest/batch.d.ts +70 -0
  1044. package/dist/telemetry-ingest/batch.d.ts.map +1 -0
  1045. package/dist/telemetry-ingest/batch.js +110 -0
  1046. package/dist/telemetry-ingest/batch.js.map +1 -0
  1047. package/dist/telemetry-ingest/facet.d.ts +21 -0
  1048. package/dist/telemetry-ingest/facet.d.ts.map +1 -0
  1049. package/dist/telemetry-ingest/facet.js +96 -0
  1050. package/dist/telemetry-ingest/facet.js.map +1 -0
  1051. package/dist/telemetry-ingest/index.d.ts +5 -0
  1052. package/dist/telemetry-ingest/index.d.ts.map +1 -0
  1053. package/dist/telemetry-ingest/index.js +8 -0
  1054. package/dist/telemetry-ingest/index.js.map +1 -0
  1055. package/dist/telemetry-ingest/recorder.d.ts +50 -0
  1056. package/dist/telemetry-ingest/recorder.d.ts.map +1 -0
  1057. package/dist/telemetry-ingest/recorder.js +298 -0
  1058. package/dist/telemetry-ingest/recorder.js.map +1 -0
  1059. package/dist/telemetry-ingest/sender.d.ts +14 -0
  1060. package/dist/telemetry-ingest/sender.d.ts.map +1 -0
  1061. package/dist/telemetry-ingest/sender.js +64 -0
  1062. package/dist/telemetry-ingest/sender.js.map +1 -0
  1063. package/dist/telemetry-sqlite/index.d.ts +13 -4
  1064. package/dist/telemetry-sqlite/index.d.ts.map +1 -1
  1065. package/dist/telemetry-sqlite/index.js +81 -241
  1066. package/dist/telemetry-sqlite/index.js.map +1 -1
  1067. package/dist/telemetry-sqlite/node.d.ts +13 -0
  1068. package/dist/telemetry-sqlite/node.d.ts.map +1 -0
  1069. package/dist/telemetry-sqlite/node.js +27 -0
  1070. package/dist/telemetry-sqlite/node.js.map +1 -0
  1071. package/dist/telemetry-sqlite/schema.d.ts +9 -0
  1072. package/dist/telemetry-sqlite/schema.d.ts.map +1 -0
  1073. package/dist/telemetry-sqlite/schema.js +61 -0
  1074. package/dist/telemetry-sqlite/schema.js.map +1 -0
  1075. package/dist/telemetry-sqlite/store.d.ts +3 -0
  1076. package/dist/telemetry-sqlite/store.d.ts.map +1 -1
  1077. package/dist/telemetry-sqlite/store.js +24 -13
  1078. package/dist/telemetry-sqlite/store.js.map +1 -1
  1079. package/dist/telemetry.d.ts +937 -0
  1080. package/dist/telemetry.d.ts.map +1 -0
  1081. package/dist/telemetry.js +470 -0
  1082. package/dist/telemetry.js.map +1 -0
  1083. package/dist/tui/bridge.d.ts +112 -0
  1084. package/dist/tui/bridge.d.ts.map +1 -0
  1085. package/dist/tui/bridge.js +9 -0
  1086. package/dist/tui/bridge.js.map +1 -0
  1087. package/dist/tui/channel.d.ts +44 -0
  1088. package/dist/tui/channel.d.ts.map +1 -0
  1089. package/dist/tui/channel.js +150 -0
  1090. package/dist/tui/channel.js.map +1 -0
  1091. package/dist/tui/frames.d.ts +5 -0
  1092. package/dist/tui/frames.d.ts.map +1 -0
  1093. package/dist/tui/frames.js +52 -0
  1094. package/dist/tui/frames.js.map +1 -0
  1095. package/dist/tui/index.d.ts +7 -0
  1096. package/dist/tui/index.d.ts.map +1 -0
  1097. package/dist/tui/index.js +8 -0
  1098. package/dist/tui/index.js.map +1 -0
  1099. package/dist/tui/runtime.d.ts +46 -0
  1100. package/dist/tui/runtime.d.ts.map +1 -0
  1101. package/dist/tui/runtime.js +101 -0
  1102. package/dist/tui/runtime.js.map +1 -0
  1103. package/dist/tui/scope.d.ts +46 -0
  1104. package/dist/tui/scope.d.ts.map +1 -0
  1105. package/dist/tui/scope.js +141 -0
  1106. package/dist/tui/scope.js.map +1 -0
  1107. package/dist/tui/terminal.d.ts +15 -0
  1108. package/dist/tui/terminal.d.ts.map +1 -0
  1109. package/dist/tui/terminal.js +37 -0
  1110. package/dist/tui/terminal.js.map +1 -0
  1111. package/dist/tui/theme.d.ts +17 -0
  1112. package/dist/tui/theme.d.ts.map +1 -0
  1113. package/dist/tui/theme.js +38 -0
  1114. package/dist/tui/theme.js.map +1 -0
  1115. package/dist/watch.d.ts +194 -0
  1116. package/dist/watch.d.ts.map +1 -0
  1117. package/dist/watch.js +383 -0
  1118. package/dist/watch.js.map +1 -0
  1119. package/dist/web/environment.d.ts +4 -0
  1120. package/dist/web/environment.d.ts.map +1 -0
  1121. package/dist/web/environment.js +37 -0
  1122. package/dist/web/environment.js.map +1 -0
  1123. package/dist/web/index.d.ts +5 -0
  1124. package/dist/web/index.d.ts.map +1 -0
  1125. package/dist/web/index.js +7 -0
  1126. package/dist/web/index.js.map +1 -0
  1127. package/dist/web/language.d.ts +7 -0
  1128. package/dist/web/language.d.ts.map +1 -0
  1129. package/dist/web/language.js +21 -0
  1130. package/dist/web/language.js.map +1 -0
  1131. package/dist/web/page.d.ts +29 -0
  1132. package/dist/web/page.d.ts.map +1 -0
  1133. package/dist/web/page.js +92 -0
  1134. package/dist/web/page.js.map +1 -0
  1135. package/dist/web/scripts.d.ts +23 -0
  1136. package/dist/web/scripts.d.ts.map +1 -0
  1137. package/dist/web/scripts.js +50 -0
  1138. package/dist/web/scripts.js.map +1 -0
  1139. package/dist/web/styles.d.ts +17 -0
  1140. package/dist/web/styles.d.ts.map +1 -0
  1141. package/dist/web/styles.js +218 -0
  1142. package/dist/web/styles.js.map +1 -0
  1143. package/dist/web/themes.d.ts +6 -0
  1144. package/dist/web/themes.d.ts.map +1 -0
  1145. package/dist/web/themes.js +31 -0
  1146. package/dist/web/themes.js.map +1 -0
  1147. package/docs/benchmarks.md +1036 -0
  1148. package/docs/decisions.md +3436 -0
  1149. package/docs/dependencies/book.md +1671 -0
  1150. package/docs/dependencies/index.html +2641 -0
  1151. package/docs/dependencies/model.md +330 -0
  1152. package/docs/design.md +3065 -0
  1153. package/docs/durable-observers/book.md +432 -0
  1154. package/docs/durable-observers/index.html +517 -0
  1155. package/docs/flow-control/book.md +333 -0
  1156. package/docs/flow-control/fold/index.html +265 -0
  1157. package/docs/flow-control/index.html +548 -0
  1158. package/docs/flow-control/window/index.html +228 -0
  1159. package/docs/guide-plugins-hosts/book.md +957 -0
  1160. package/docs/guide-plugins-hosts/index.html +952 -0
  1161. package/docs/http-workers/book.md +378 -0
  1162. package/docs/http-workers/index.html +515 -0
  1163. package/docs/i18n/book.md +217 -0
  1164. package/docs/i18n/index.html +344 -0
  1165. package/docs/layer-1.md +311 -0
  1166. package/docs/layer-2.md +216 -0
  1167. package/docs/p3-features/README.md +6 -0
  1168. package/docs/p3-features/book.md +478 -0
  1169. package/docs/plugin-authoring.md +276 -0
  1170. package/docs/plugin-model/book.md +186 -0
  1171. package/docs/plugin-model/index.html +310 -0
  1172. package/docs/plugin-primer/book.md +273 -0
  1173. package/docs/plugin-primer/index.html +430 -0
  1174. package/docs/slice-1.md +236 -0
  1175. package/docs/slice-10.md +288 -0
  1176. package/docs/slice-11.md +114 -0
  1177. package/docs/slice-12.md +132 -0
  1178. package/docs/slice-13.md +121 -0
  1179. package/docs/slice-2.md +174 -0
  1180. package/docs/slice-3a.md +296 -0
  1181. package/docs/slice-3b.md +197 -0
  1182. package/docs/slice-4.md +146 -0
  1183. package/docs/slice-4a.md +418 -0
  1184. package/docs/slice-4b.md +208 -0
  1185. package/docs/slice-5.md +281 -0
  1186. package/docs/slice-6a.md +676 -0
  1187. package/docs/slice-6b.md +332 -0
  1188. package/docs/slice-7a.md +130 -0
  1189. package/docs/slice-7b/book.md +608 -0
  1190. package/docs/slice-7b/index.html +842 -0
  1191. package/docs/slice-7b.md +255 -0
  1192. package/docs/slice-7c.md +165 -0
  1193. package/docs/slice-8.md +194 -0
  1194. package/docs/slice-9.md +110 -0
  1195. package/docs/slices.md +241 -0
  1196. package/docs/store/book.md +670 -0
  1197. package/docs/store/index.html +861 -0
  1198. package/docs/store/walkthrough.md +193 -0
  1199. package/docs/theming/book.md +223 -0
  1200. package/docs/theming/index.html +371 -0
  1201. package/docs/tutorial/book.md +2169 -0
  1202. package/docs/tutorial/index.html +2112 -0
  1203. package/docs/tutorial/screens/click-after.png +0 -0
  1204. package/docs/tutorial/screens/click-before.png +0 -0
  1205. package/docs/tutorial/screens/edited.png +0 -0
  1206. package/docs/tutorial/screens/french.png +0 -0
  1207. package/docs/tutorial/screens/harbor.png +0 -0
  1208. package/docs/tutorial/screens/page.png +0 -0
  1209. package/docs/tutorial/screens/traces-ada.png +0 -0
  1210. package/docs/tutorial/screens/traces.png +0 -0
  1211. package/package.json +114 -20
  1212. package/src/delta/README.md +69 -0
  1213. package/dist/cell.d.ts +0 -122
  1214. package/dist/cell.d.ts.map +0 -1
  1215. package/dist/cell.js +0 -356
  1216. package/dist/cell.js.map +0 -1
  1217. package/dist/cluster.d.ts +0 -27
  1218. package/dist/cluster.d.ts.map +0 -1
  1219. package/dist/cluster.js +0 -230
  1220. package/dist/cluster.js.map +0 -1
  1221. package/dist/connection.d.ts +0 -270
  1222. package/dist/connection.d.ts.map +0 -1
  1223. package/dist/connection.js +0 -1216
  1224. package/dist/connection.js.map +0 -1
  1225. package/dist/contract.d.ts +0 -208
  1226. package/dist/contract.d.ts.map +0 -1
  1227. package/dist/contract.js +0 -246
  1228. package/dist/contract.js.map +0 -1
  1229. package/dist/declare.d.ts +0 -33
  1230. package/dist/declare.d.ts.map +0 -1
  1231. package/dist/declare.js +0 -2
  1232. package/dist/declare.js.map +0 -1
  1233. package/dist/errors.d.ts +0 -28
  1234. package/dist/errors.d.ts.map +0 -1
  1235. package/dist/errors.js +0 -59
  1236. package/dist/errors.js.map +0 -1
  1237. package/dist/host.d.ts +0 -348
  1238. package/dist/host.d.ts.map +0 -1
  1239. package/dist/host.js +0 -1000
  1240. package/dist/host.js.map +0 -1
  1241. package/dist/link.d.ts +0 -107
  1242. package/dist/link.d.ts.map +0 -1
  1243. package/dist/link.js +0 -355
  1244. package/dist/link.js.map +0 -1
  1245. package/dist/loader.d.ts +0 -4
  1246. package/dist/loader.d.ts.map +0 -1
  1247. package/dist/loader.js +0 -73
  1248. package/dist/loader.js.map +0 -1
  1249. package/dist/manager.d.ts +0 -115
  1250. package/dist/manager.d.ts.map +0 -1
  1251. package/dist/manager.js +0 -345
  1252. package/dist/manager.js.map +0 -1
  1253. package/dist/node.d.ts +0 -4
  1254. package/dist/node.d.ts.map +0 -1
  1255. package/dist/node.js +0 -4
  1256. package/dist/node.js.map +0 -1
  1257. package/dist/object.d.ts +0 -438
  1258. package/dist/object.d.ts.map +0 -1
  1259. package/dist/object.js +0 -1571
  1260. package/dist/object.js.map +0 -1
  1261. package/dist/publish.d.ts +0 -5
  1262. package/dist/publish.d.ts.map +0 -1
  1263. package/dist/publish.js +0 -40
  1264. package/dist/publish.js.map +0 -1
  1265. package/dist/registry.d.ts +0 -25
  1266. package/dist/registry.d.ts.map +0 -1
  1267. package/dist/registry.js +0 -6
  1268. package/dist/registry.js.map +0 -1
  1269. package/dist/reload.d.ts +0 -126
  1270. package/dist/reload.d.ts.map +0 -1
  1271. package/dist/reload.js +0 -653
  1272. package/dist/reload.js.map +0 -1
  1273. package/dist/remote.d.ts +0 -165
  1274. package/dist/remote.d.ts.map +0 -1
  1275. package/dist/remote.js +0 -612
  1276. package/dist/remote.js.map +0 -1
  1277. package/dist/schema.d.ts +0 -21
  1278. package/dist/schema.d.ts.map +0 -1
  1279. package/dist/schema.js +0 -228
  1280. package/dist/schema.js.map +0 -1
  1281. package/dist/state.d.ts +0 -92
  1282. package/dist/state.d.ts.map +0 -1
  1283. package/dist/state.js +0 -287
  1284. package/dist/state.js.map +0 -1
  1285. package/dist/types.d.ts +0 -88
  1286. package/dist/types.d.ts.map +0 -1
  1287. package/dist/types.js +0 -2
  1288. package/dist/types.js.map +0 -1
  1289. package/dist/websocket.d.ts +0 -15
  1290. package/dist/websocket.d.ts.map +0 -1
  1291. package/dist/websocket.js +0 -16
  1292. package/dist/websocket.js.map +0 -1
  1293. package/dist/wire.d.ts +0 -216
  1294. package/dist/wire.d.ts.map +0 -1
  1295. package/dist/wire.js +0 -165
  1296. package/dist/wire.js.map +0 -1
  1297. package/docs/guide.md +0 -814
  1298. package/docs/spec.md +0 -288
  1299. package/docs/tutorial.md +0 -931
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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","sourcesContent":["// The store (slice 6a §2, §3, slice 6b §1): opened over a backend, one commit queue that serializes only the commit\n// step (the seal fence's admission check, `BEGIN`, the writes in their order, the outbox commit, `lastSeq` and the\n// allocator's value, `COMMIT`, then the owner's adoption), group commit (S18: the commits queued behind a running step\n// share the next step's backend transaction), the id allocator, the claims of its tables and documents, reads guarded\n// as Durable's `GuardedStorage` guards them, Durable's Storage semantics for a refused step (D4), and the stop after an\n// unknown outcome.\n\nimport { awaitWithContext, type Context } from \"../context/index.ts\";\nimport { ChordError } from \"../data/index.ts\";\nimport { invalid } from \"../data/internal.ts\";\nimport type { SqliteDatabase, SqliteExecutor } from \"../sqlite/index.ts\";\nimport type { Batch } from \"../state/internal.ts\";\nimport { chordMetrics } from \"../telemetry.ts\";\nimport { IdAllocator } from \"./allocator.ts\";\nimport type { ArchivePart } from \"./archive.ts\";\nimport type { Backend } from \"./backend.ts\";\nimport { readCatalog, type TableRecord, writeCatalog } from \"./catalog.ts\";\nimport { Claims } from \"./claims.ts\";\nimport { StoreExport } from \"./export.ts\";\nimport { OUTBOX_FORMAT, Outbox } from \"./outbox.ts\";\nimport { applyStoreSchema, type MetaRow, TABLES } from \"./schema.ts\";\nimport { type StagedWrite, Step, type WriteOrder } from \"./step.ts\";\nimport type { StoreWrite } from \"./writes.ts\";\n\n/** A store as apps hold it: opened by `openStore`, owned and closed by the app. */\nexport interface Store {\n\t/** The seq of the store's last commit (0 for a new store). */\n\treadonly lastSeq: number;\n\t/** The outbox the sync layer reads; `undefined` without one. */\n\treadonly outbox: Outbox | undefined;\n\t/**\n\t * The store's state after its `lastSeq` as archive parts (slice 6a §13), holding the commit queue from the first\n\t * `next()` until the iteration ends, throws, is closed or `context` aborts.\n\t */\n\texport(context: Context): AsyncIterableIterator<ArchivePart>;\n\t/**\n\t * Closes the store: waits for a running commit step (a group's, its commits' solo runs included), rejects queued\n\t * commits and reads `released`, closes the backend. Idempotent, also after `storage_failed`; `context` ends only\n\t * this caller's wait (the close goes on).\n\t */\n\tclose(context: Context): Promise<void>;\n}\n\n/** What `openStore` takes besides the backend. */\nexport type StoreOptions = {\n\t/** Turns the outbox on (`true`) or off (`false`); omitted, the persisted setting stays (a new store: off). */\n\treadonly outbox?: boolean;\n};\n\n/**\n * Opens a store over `backend`: the store's schema migrations, the UTF-8 check, the metadata read once, the outbox\n * switched when asked. A failure closes the backend and rejects (rule 12).\n */\nexport async function openStore(backend: Backend, context: Context, options: StoreOptions = {}): Promise<Store> {\n\tconst { db } = backend;\n\ttry {\n\t\tcontext.abortSignal?.throwIfAborted();\n\t\tconst meta = await switchOutbox(db, await applyStoreSchema(db), options.outbox);\n\t\treturn new ChordStore(db, meta, await readCatalog(db));\n\t} catch (error) {\n\t\ttry {\n\t\t\tawait db.close();\n\t\t} catch {\n\t\t\t// The open's own failure is the one to report.\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n/** Turns the outbox on (from the current `lastSeq`) or off (its commits dropped) when `outbox` asks for the other. */\nasync function switchOutbox(db: SqliteDatabase, meta: MetaRow, outbox: boolean | undefined): Promise<MetaRow> {\n\tif (outbox === undefined || outbox === (meta.outbox === 1)) return meta;\n\tconst floor = outbox ? meta.last_seq : 0;\n\tawait db.transaction(async (executor) => {\n\t\tawait executor.run(\n\t\t\t`UPDATE ${TABLES.meta} SET outbox = ?, outbox_floor = ? WHERE singleton = 1`,\n\t\t\toutbox ? 1 : 0,\n\t\t\tfloor,\n\t\t);\n\t\tif (!outbox) await executor.run(`DELETE FROM ${TABLES.outbox}`);\n\t});\n\treturn { ...meta, outbox: outbox ? 1 : 0, outbox_floor: floor };\n}\n\n/** The seal fence's two checks of a commit (§1.3), as the commit step calls them. */\nexport type CommitFence = {\n\t/** At the step's entry: `false` rejects the commit `released` and writes nothing. */\n\tadmit(): boolean;\n\t/**\n\t * After `COMMIT`: adopts the commit, `ids` being its created documents' ids in the order of their writes, `rows` the\n\t * table rows its writes changed.\n\t */\n\tadopt(seq: number, ids: readonly number[], rows: number): void;\n};\n\n/**\n * One commit of a series (`ChordStore.commitSeries`): its own checks, which write nothing, and its writes. The checks\n * read through the commit's step, which sees what the series' earlier commits wrote.\n */\nexport type SeriesCommit = {\n\t/** Throws to refuse the commit: the series stops before it, the commits before it stand. */\n\tcheck(step: Step): Promise<void>;\n\treadonly writes: readonly StagedWrite[];\n};\n\n/** What a series stored: how many of its commits, and why the next one was refused, if one was. */\nexport type SeriesResult = { readonly stored: number; readonly refused?: unknown };\n\n/**\n * The commits of one backend transaction (a series or a group) as it leaves them: each stored commit's seq and created\n * documents; once a commit wrote, the last seq, the allocator's value after it and the table records they changed; the\n * commits that wrote and the statements run.\n */\ntype Written = {\n\treadonly stored: readonly { readonly seq: number; readonly created: readonly number[] }[];\n\treadonly last:\n\t\t| { readonly seq: number; readonly nextId: number; readonly tables: ReadonlyMap<string, TableRecord> }\n\t\t| undefined;\n\treadonly written: number;\n\treadonly statements: number;\n};\n\n/**\n * The commits of one backend transaction (a series or a group) while it runs: each stored commit's seq and created\n * documents, the last step that wrote, the allocator's value after it, the table records they changed (a copy of the\n * catalog, made once one changed) and the statements run.\n */\ntype Progress = {\n\treadonly stored: { readonly seq: number; readonly created: readonly number[] }[];\n\tlast: Step | undefined;\n\tnextId: number;\n\tchanged: Map<string, TableRecord> | undefined;\n\tstatements: number;\n};\n\n/** What the open host gives the store: its `storage_failed` listener and its batch, in which adapters publish (§1.3). */\nexport type Attachment = {\n\treadonly failed: (error: unknown) => void;\n\treadonly batch: Batch;\n};\n\n/** A group as its transaction leaves it: each commit's step and the allocator's value after it, in order; the whole. */\ntype GroupWritten = {\n\treadonly steps: readonly { readonly step: Step; readonly nextId: number }[];\n\treadonly written: Written;\n};\n\n/** A commit waiting in the commit queue for its group's turn: what `commit` was given, and its caller's promise. */\ntype QueuedCommit = {\n\treadonly writes: readonly StagedWrite[];\n\treadonly fence: CommitFence;\n\treadonly context: Context;\n\treadonly resolve: (seq: number) => void;\n\treadonly reject: (error: unknown) => void;\n};\n\n/** Where a replayed batch leaves the store: its last commit's seq and allocator value, the tables it changed. */\nexport type Replayed = {\n\treadonly lastSeq: number;\n\treadonly nextId: number;\n\treadonly tables: ReadonlyMap<string, TableRecord>;\n};\n\n/** Where a store stands: open, stopped by a backend error, or closed. */\ntype StoreState =\n\t| { readonly kind: \"open\" }\n\t| { readonly kind: \"failed\"; readonly error: unknown }\n\t| { readonly kind: \"closed\" };\n\nconst ORDER: readonly WriteOrder[] = [\"retire\", \"create\", \"write\"];\n\nconst NOTHING = (): void => {};\n\n/** The step's own error, until its callback throws one: a distinct value no thrown error can be. */\nconst NONE: unique symbol = Symbol(\"none\");\n\n/** The store behind `Store`, with what Chord's layers use: commits, guarded reads, the host's failure listener. */\nexport class ChordStore implements Store {\n\treadonly #db: SqliteDatabase;\n\t#lastSeq: number;\n\t/** The allocator's value as the last commit persisted it (an export's manifest). */\n\t#committedNextId: number;\n\treadonly #ids: IdAllocator;\n\t/** The claims of its tables and documents (slice 6b). */\n\treadonly claims = new Claims();\n\t#outbox: Outbox | undefined;\n\t#state: StoreState = { kind: \"open\" };\n\t/**\n\t * The backend error that stopped the store, also when it happened while the store was closing (the state stays\n\t * `closed` then): an admitted commit still running after it is refused.\n\t */\n\t#failure: { readonly error: unknown } | undefined;\n\t/** Set once a batch's recorded count did not reproduce (S17): no batch applies any more. */\n\t#diverged = false;\n\t/** The commit queue's tail: each step starts after the one before it settled. */\n\t#tail: Promise<void> = Promise.resolve();\n\t/** The group the next commit joins: queued last, its turn not yet come; `undefined` once anything queued after it. */\n\t#open: QueuedCommit[] | undefined;\n\t/** Reads and maintenance writes underway, which `close` waits for. */\n\t#underway = 0;\n\t/** Resolves `close`'s wait once no read is underway. */\n\t#drained: (() => void) | undefined;\n\t/** The open host's listener for `storage_failed` (told once) and batch; one host per store (rule 7). */\n\t#attachment: Attachment | undefined;\n\t#closing: Promise<void> | undefined;\n\t/** The versions migrations of tables announced (`announceTable`), by SQL name, until their last commit. */\n\treadonly #announced = new Map<string, number>();\n\t/** The recorded tables, by SQL name; changed only after a step's `COMMIT`. */\n\treadonly #catalog: Map<string, TableRecord>;\n\t/** The ends of the exports holding the queue or waiting for it, which closing the store calls. */\n\treadonly #held = new Set<() => void>();\n\n\tconstructor(db: SqliteDatabase, meta: MetaRow, catalog: Map<string, TableRecord>) {\n\t\tthis.#db = db;\n\t\tthis.#catalog = catalog;\n\t\tthis.#lastSeq = meta.last_seq;\n\t\tthis.#committedNextId = meta.next_id;\n\t\tthis.#ids = new IdAllocator(meta.next_id);\n\t\tthis.#outbox = meta.outbox === 1 ? new Outbox(this, meta.outbox_floor) : undefined;\n\t}\n\n\tget lastSeq(): number {\n\t\treturn this.#lastSeq;\n\t}\n\n\tget outbox(): Outbox | undefined {\n\t\treturn this.#outbox;\n\t}\n\n\t/** The allocator's value as the last commit persisted it. */\n\tget nextId(): number {\n\t\treturn this.#committedNextId;\n\t}\n\n\t/** The id allocator: `mint` takes the next id, `raise` makes room above an explicit one (D3). */\n\tget ids(): IdAllocator {\n\t\treturn this.#ids;\n\t}\n\n\t/** Takes the next id from the allocator (Durable's `mintId`); refused once the store stopped or closed. */\n\tmintId(): number {\n\t\tthis.assertUsable();\n\t\treturn this.#ids.mint();\n\t}\n\n\t/** The open host's batch, in which an adapter publishes its commits; `undefined` without a host. */\n\tget batch(): Batch | undefined {\n\t\treturn this.#attachment?.batch;\n\t}\n\n\t/** Every recorded table, by SQL name, as of the last commit. */\n\tget tables(): ReadonlyMap<string, TableRecord> {\n\t\treturn this.#catalog;\n\t}\n\n\texport(context: Context): AsyncIterableIterator<ArchivePart> {\n\t\tthis.assertUsable();\n\t\treturn new StoreExport(this, context);\n\t}\n\n\t/**\n\t * Takes the commit queue (an export): resolves once every earlier commit settled, with the release that lets the\n\t * later ones run (idempotent). Closing the store calls `end` (from the call on, also while waiting, and at once for a\n\t * store closed before the call took the queue), which must release.\n\t */\n\ttake(end: () => void): Promise<() => void> {\n\t\tconst held = Promise.withResolvers<void>();\n\t\tconst release = (): void => {\n\t\t\tthis.#held.delete(end);\n\t\t\theld.resolve();\n\t\t};\n\t\tthis.#held.add(end);\n\t\tthis.#open = undefined;\n\t\tconst taken = this.#tail.then(() => {\n\t\t\t// A store closed meanwhile (also before the export's first `next()`) holds nothing: the export ends.\n\t\t\tif (this.#state.kind === \"closed\") {\n\t\t\t\trelease();\n\t\t\t\tend();\n\t\t\t}\n\t\t\treturn release;\n\t\t});\n\t\tthis.#tail = taken.then(() => held.promise);\n\t\treturn taken;\n\t}\n\n\t/** The recorded table `name` (its SQL name), as of the last commit. */\n\ttable(name: string): TableRecord | undefined {\n\t\treturn this.#catalog.get(name);\n\t}\n\n\t/**\n\t * The version table `name` is at or is being migrated to: the recorded one, or a higher one a migration announced\n\t * before its first commit (`announceTable`), so an old handle is refused before its SQL could queue behind the\n\t * migration's DDL (fix round 1, Sol 8).\n\t */\n\ttableVersion(name: string): number | undefined {\n\t\tconst recorded = this.#catalog.get(name)?.version;\n\t\tconst announced = this.#announced.get(name);\n\t\treturn announced === undefined || (recorded !== undefined && recorded >= announced) ? recorded : announced;\n\t}\n\n\t/** Announces a migration of table `name` to `version` until the returned withdrawal (after its last commit). */\n\tannounceTable(name: string, version: number): () => void {\n\t\tthis.#announced.set(name, version);\n\t\treturn () => {\n\t\t\tif (this.#announced.get(name) === version) this.#announced.delete(name);\n\t\t};\n\t}\n\n\t/** Attaches the open host; a store attached to an open host is refused (rule 7). */\n\tattach(attachment: Attachment): void {\n\t\tif (this.#attachment !== undefined) {\n\t\t\tthrow new ChordError({ code: \"invalid\", reason: \"args\", message: \"store: already attached to an open host\" });\n\t\t}\n\t\tthis.#attachment = attachment;\n\t}\n\n\t/** The host closed: the store may serve another one. */\n\tdetach(): void {\n\t\tthis.#attachment = undefined;\n\t}\n\n\t/**\n\t * Commits `writes` as one seq when the commit queue reaches it: `fence.admit()` at the entry of its step (its\n\t * group's), the writes in their order (retirements, creations, the rest), the outbox commit, `lastSeq` and the\n\t * allocator's value, `COMMIT`, then `fence.adopt` before the next step starts. Resolves with the seq. A refused\n\t * admission rejects `released`. A step the backend rolled back after the step's own code threw (a refusal, D4)\n\t * rejects with that error unchanged and the store goes on; any other failure (`BEGIN`, `COMMIT`, `ROLLBACK`, a\n\t * throwing `adopt` or metrics adapter) is an unknown outcome that stops the store (`storage_failed`). `context`\n\t * counts the step (no abort once queued).\n\t *\n\t * Group commit: the commits queued while a step runs form one group, which the next turn admits and writes in one\n\t * backend transaction (each commit its own seq, outbox commit and adoption, in queue order; the metadata once), so a\n\t * busy store costs a transaction per group, not per commit. If one of them refuses, the group rolls back and its\n\t * commits run again one by one as above: the refusal stays its own commit's.\n\t */\n\tcommit(writes: readonly StagedWrite[], fence: CommitFence, context: Context): Promise<number> {\n\t\ttry {\n\t\t\tthis.assertUsable();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\tconst { promise, resolve, reject } = Promise.withResolvers<number>();\n\t\tconst queued: QueuedCommit = { writes, fence, context, resolve, reject };\n\t\t// An empty commit takes no transaction: it neither joins nor opens a group.\n\t\tif (writes.length > 0 && this.#open !== undefined) {\n\t\t\tthis.#open.push(queued);\n\t\t\treturn promise;\n\t\t}\n\t\tconst group = [queued];\n\t\t// What a turn throws past its own handling (a host's `failed` listener throwing in `#fail`) rejects its commits,\n\t\t// as it rejected a lone step; rejecting a settled one does nothing. The queue goes on either way.\n\t\tthis.#tail = this.#tail\n\t\t\t.then(() => this.#group(group))\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tfor (const each of group) each.reject(error);\n\t\t\t});\n\t\tthis.#open = writes.length > 0 ? group : undefined;\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Commits `commits` in one backend transaction when the commit queue reaches them, one seq each, in order: each\n\t * commit's `check`, which writes nothing, then its writes as `commit` writes them, with its own outbox commit and the\n\t * metadata (a commit without writes takes no seq: it stands at the one before). A `check` that throws refuses its\n\t * commit: the series stops there and the transaction commits the ones before it. A check whose backend statement\n\t * failed, and a throw of a commit's writes, roll the whole series back and reject with that error, the store going\n\t * on (D4); any other failure is an unknown outcome that stops the store, as for `commit`. After `COMMIT`,\n\t * `receive(index, seq, ids)` is called per stored commit, in order, before the next step starts (`ids`: its created\n\t * documents). Resolves with what it stored.\n\t */\n\tcommitSeries(\n\t\tcommits: readonly SeriesCommit[],\n\t\treceive: (index: number, seq: number, ids: readonly number[]) => void,\n\t\tcontext: Context,\n\t): Promise<SeriesResult> {\n\t\ttry {\n\t\t\tthis.assertUsable();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\tthis.#open = undefined;\n\t\tconst series = this.#tail.then(() => this.#series(commits, receive, context));\n\t\tthis.#tail = series.then(NOTHING, NOTHING);\n\t\treturn series;\n\t}\n\n\t/**\n\t * Runs `read` on the backend under the guard (rule 11, Durable's `GuardedStorage`): refused once the store stopped\n\t * or closed; a backend error fails the store unless `context` was aborted (then `aborted`); a read settling after\n\t * the store stopped rejects `unavailable/storage_failed`. `read` returns data and never throws for a request: an\n\t * adapter checks a request from what it returned, after the guard (slice 6b §1.4).\n\t */\n\tread<T>(read: (executor: SqliteExecutor) => Promise<T>, context: Context): Promise<T> {\n\t\treturn this.#guarded(() => read(this.#db), context);\n\t}\n\n\t/**\n\t * `read` for several queries that must see one state (S4, a document from its record and revisions): one backend\n\t * transaction, guarded as `read`.\n\t */\n\treadTransaction<T>(read: (executor: SqliteExecutor) => Promise<T>, context: Context): Promise<T> {\n\t\treturn this.#guarded(() => this.#db.transaction(read), context);\n\t}\n\n\tasync #guarded<T>(run: () => Promise<T>, context: Context): Promise<T> {\n\t\tthis.assertUsable();\n\t\tthis.#underway++;\n\t\tlet result: T;\n\t\ttry {\n\t\t\t// A read throwing before its first await is the backend's too: inside the `try`.\n\t\t\tresult = await run();\n\t\t} catch (error) {\n\t\t\tconst signal = context.abortSignal;\n\t\t\t// Latched before the closed check: a backend failure while closing still refuses later admitted commits.\n\t\t\tif (!signal?.aborted) this.#failure ??= { error };\n\t\t\tthis.assertUsable();\n\t\t\tif (signal?.aborted)\n\t\t\t\tthrow new ChordError({ code: \"aborted\", message: \"store: read aborted\" }, { cause: signal.reason });\n\t\t\tthrow this.#fail(error);\n\t\t} finally {\n\t\t\tthis.#settle();\n\t\t}\n\t\tthis.assertUsable();\n\t\treturn result;\n\t}\n\n\t/** One read or maintenance write settled: `close` goes on once none is underway. */\n\t#settle(): void {\n\t\tif (--this.#underway === 0) this.#drained?.();\n\t}\n\n\t/**\n\t * Runs `write` on the backend outside the commit queue (the outbox's `trim`), in a backend transaction, guarded as\n\t * a read without a context: any error stops the store.\n\t */\n\tasync maintain(write: (executor: SqliteExecutor) => Promise<void>): Promise<void> {\n\t\tthis.assertUsable();\n\t\tthis.#underway++;\n\t\ttry {\n\t\t\tawait this.#db.transaction(write);\n\t\t} catch (error) {\n\t\t\t// Latched before the closed check, as for a read.\n\t\t\tthis.#failure ??= { error };\n\t\t\tthis.assertUsable();\n\t\t\tthrow this.#fail(error);\n\t\t} finally {\n\t\t\tthis.#settle();\n\t\t}\n\t}\n\n\tclose(context: Context): Promise<void> {\n\t\tthis.#closing ??= this.#close();\n\t\treturn awaitWithContext(this.#closing, context);\n\t}\n\n\tasync #close(): Promise<void> {\n\t\tthis.#state = { kind: \"closed\" };\n\t\tfor (const end of [...this.#held]) end();\n\t\tawait this.#tail;\n\t\tif (this.#underway > 0) {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tthis.#drained = resolve;\n\t\t\t});\n\t\t}\n\t\tawait this.#db.close();\n\t}\n\n\t/**\n\t * A group's turn (it takes no more commits from here): its commits admitted together at its entry, one as its own\n\t * step, several written in one backend transaction (`#grouped`). Settles every commit's promise.\n\t */\n\tasync #group(group: readonly QueuedCommit[]): Promise<void> {\n\t\tif (this.#open === group) this.#open = undefined;\n\t\ttry {\n\t\t\tthis.assertUsable();\n\t\t} catch (error) {\n\t\t\tfor (const queued of group) queued.reject(error);\n\t\t\treturn;\n\t\t}\n\t\t// Admitted together at the group's entry, as one step admits its commit: each runs to its end from here.\n\t\tconst admitted = group.filter((queued) => {\n\t\t\ttry {\n\t\t\t\tif (queued.fence.admit()) return true;\n\t\t\t\tqueued.reject(discarded());\n\t\t\t} catch (error) {\n\t\t\t\t// As a lone step: a throwing admission rejects its commit with that error, the queue goes on.\n\t\t\t\tqueued.reject(error);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tif (admitted.length === 1) {\n\t\t\tconst [queued] = admitted;\n\t\t\treturn this.#alone(queued!, () => this.#admittedStep(queued!.writes, queued!.fence, queued!.context));\n\t\t}\n\t\tif (admitted.length > 1) await this.#grouped(admitted);\n\t}\n\n\t/** Settles `queued`'s promise with `step`, its own step. */\n\tasync #alone(queued: QueuedCommit, step: () => Promise<number>): Promise<void> {\n\t\ttry {\n\t\t\tqueued.resolve(await step());\n\t\t} catch (error) {\n\t\t\tqueued.reject(error);\n\t\t}\n\t}\n\n\t/**\n\t * Admitted commits in one backend transaction, each on its own step and seq, the metadata once; after `COMMIT`,\n\t * memory, the counts and each commit's adoption in order. When a commit's own writes throw (a refusal, D4), the\n\t * transaction rolls back whole and every commit runs again alone, admitted already: only the ones whose own writes\n\t * throw are refused, as without grouping. Any other failure is an unknown outcome that stops the store.\n\t */\n\tasync #grouped(admitted: readonly QueuedCommit[]): Promise<void> {\n\t\t// Near the end of the seq range, alone: the commits that still fit are stored, the first past it stops the store.\n\t\tif (this.#lastSeq + admitted.length > Number.MAX_SAFE_INTEGER) {\n\t\t\tawait this.#eachAlone(admitted);\n\t\t\treturn;\n\t\t}\n\t\tlet thrown: unknown = NONE;\n\t\tlet done: GroupWritten;\n\t\ttry {\n\t\t\tdone = await this.#db.transaction(async (executor) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn await this.#writeGroup(admitted, executor);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrown = error;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error !== thrown) {\n\t\t\t\tconst failed = this.#fail(error);\n\t\t\t\tfor (const queued of admitted) queued.reject(failed);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.#eachAlone(admitted);\n\t\t\treturn;\n\t\t}\n\t\tthis.#adoptGroup(admitted, done);\n\t}\n\n\t/** Runs admitted commits one by one, each its own step, in order. */\n\tasync #eachAlone(admitted: readonly QueuedCommit[]): Promise<void> {\n\t\tfor (const queued of admitted) {\n\t\t\tawait this.#alone(queued, () => this.#admittedStep(queued.writes, queued.fence, queued.context));\n\t\t}\n\t}\n\n\t/** The admitted commits' writes in their backend transaction, each on its own step, then the metadata once. */\n\tasync #writeGroup(admitted: readonly QueuedCommit[], executor: SqliteExecutor): Promise<GroupWritten> {\n\t\tconst progress: Progress = {\n\t\t\tstored: [],\n\t\t\tlast: undefined,\n\t\t\tnextId: this.#ids.value,\n\t\t\tchanged: undefined,\n\t\t\tstatements: 0,\n\t\t};\n\t\tconst steps: { step: Step; nextId: number }[] = [];\n\t\tfor (const queued of admitted) {\n\t\t\t// A grouped commit has writes: `commit` never groups an empty one.\n\t\t\tconst step = (await this.#writeCommit(queued.writes, executor, progress))!;\n\t\t\tsteps.push({ step, nextId: progress.nextId });\n\t\t}\n\t\treturn { steps, written: await this.#closeWrites(progress) };\n\t}\n\n\t/**\n\t * After a group's `COMMIT`, commit by commit as after a lone step: memory follows it, it counts through its own\n\t * context (the metadata statement ran on the last one's step), it is adopted. Anything that throws here (an adoption,\n\t * a metrics adapter) is an unknown outcome: memory takes the whole group (it is durable), the store stops, and that\n\t * commit and the ones after it reject `storage_failed`, unadopted.\n\t */\n\t#adoptGroup(admitted: readonly QueuedCommit[], { steps, written }: GroupWritten): void {\n\t\tlet index = 0;\n\t\ttry {\n\t\t\tfor (; index < admitted.length; index++) {\n\t\t\t\tconst queued = admitted[index]!;\n\t\t\t\tconst { step, nextId } = steps[index]!;\n\t\t\t\tthis.#lastSeq = step.seq;\n\t\t\t\tthis.#committedNextId = nextId;\n\t\t\t\tfor (const [name, record] of step.tables) this.#catalog.set(name, record);\n\t\t\t\tconst metrics = chordMetrics(queued.context.telemetry.metrics);\n\t\t\t\tmetrics.counter(\"chord.store.commits\").add(1);\n\t\t\t\tmetrics.counter(\"chord.store.statements\").add(step.statements);\n\t\t\t\tqueued.fence.adopt(step.seq, step.created, step.rows);\n\t\t\t\tqueued.resolve(step.seq);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst last = written.last!;\n\t\t\tthis.#lastSeq = last.seq;\n\t\t\tthis.#committedNextId = last.nextId;\n\t\t\tfor (const [name, record] of last.tables) this.#catalog.set(name, record);\n\t\t\tconst failed = this.#fail(error);\n\t\t\tfor (const rest of admitted.slice(index)) rest.reject(failed);\n\t\t}\n\t}\n\n\t/**\n\t * An admitted commit's step (`commit`'s semantics after admission; `fence` only adopts): it runs to its end, also\n\t * when the store closes meanwhile (close waits for it); only a backend failure before it, closing or not, refuses it.\n\t */\n\tasync #admittedStep(writes: readonly StagedWrite[], fence: CommitFence, context: Context): Promise<number> {\n\t\tif (this.#failure !== undefined) throw storageFailed(this.#failure.error);\n\t\tif (writes.length === 0) {\n\t\t\t// An empty commit takes no seq; a throwing `adopt` stops the store as for any commit.\n\t\t\ttry {\n\t\t\t\tfence.adopt(this.#lastSeq, [], 0);\n\t\t\t} catch (error) {\n\t\t\t\tthrow this.#fail(error);\n\t\t\t}\n\t\t\treturn this.#lastSeq;\n\t\t}\n\t\tconst seq = this.#lastSeq + 1;\n\t\t// Past the safe range seqs stop counting exactly (a later one would repeat): the store cannot number further.\n\t\tif (seq > Number.MAX_SAFE_INTEGER) throw this.#fail(new Error(\"store: no seq past Number.MAX_SAFE_INTEGER\"));\n\t\tlet thrown: unknown = NONE;\n\t\tlet done: { readonly step: Step; readonly nextId: number };\n\t\ttry {\n\t\t\tdone = await this.#db.transaction(async (executor) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst step = new Step(executor, seq, this.#ids, this.#catalog);\n\t\t\t\t\tconst nextId = await this.#write(step, writes);\n\t\t\t\t\tawait writeMeta(step, nextId);\n\t\t\t\t\treturn { step, nextId };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrown = error;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// The facade rolled back and rejects with the step's own error: a refusal, the store goes on (D4).\n\t\t\tif (error === thrown) throw error;\n\t\t\tthrow this.#fail(error);\n\t\t}\n\t\t// `COMMIT` returned: the commit is durable, and memory follows.\n\t\tconst { step, nextId } = done;\n\t\tthis.#lastSeq = seq;\n\t\tthis.#committedNextId = nextId;\n\t\tfor (const [name, record] of step.tables) this.#catalog.set(name, record);\n\t\t// Anything that throws from here (a metrics adapter, the adoption) leaves the commit durable and unadopted: an\n\t\t// unknown outcome that stops the store.\n\t\ttry {\n\t\t\tconst metrics = chordMetrics(context.telemetry.metrics);\n\t\t\tmetrics.counter(\"chord.store.commits\").add(1);\n\t\t\tmetrics.counter(\"chord.store.statements\").add(step.statements);\n\t\t\tfence.adopt(seq, step.created, step.rows);\n\t\t} catch (error) {\n\t\t\tthrow this.#fail(error);\n\t\t}\n\t\treturn seq;\n\t}\n\n\t/**\n\t * A series inside one backend transaction: per commit a step at the next seq, its check (a throw refuses it, unless\n\t * one of its statements failed), then its writes; then, after `COMMIT`, memory and the receipts as after a lone step.\n\t */\n\tasync #series(\n\t\tcommits: readonly SeriesCommit[],\n\t\treceive: (index: number, seq: number, ids: readonly number[]) => void,\n\t\tcontext: Context,\n\t): Promise<SeriesResult> {\n\t\tthis.assertUsable();\n\t\t// Past the safe range seqs stop counting exactly (a later one would repeat): the store cannot number further. Only\n\t\t// a commit with writes takes a seq, as for `commit`.\n\t\tlet seqs = 0;\n\t\tfor (const commit of commits) if (commit.writes.length > 0) seqs++;\n\t\tif (this.#lastSeq + seqs > Number.MAX_SAFE_INTEGER) {\n\t\t\tthrow this.#fail(new Error(\"store: no seq past Number.MAX_SAFE_INTEGER\"));\n\t\t}\n\t\tlet thrown: unknown = NONE;\n\t\tlet refused: { readonly error: unknown } | undefined;\n\t\tlet done: Written;\n\t\ttry {\n\t\t\tdone = await this.#db.transaction(async (executor) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn await this.#writeSeries(executor, commits, (error) => {\n\t\t\t\t\t\trefused = { error };\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrown = error;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// The facade rolled back and rejects with the series' own error: the store goes on (D4).\n\t\t\tif (error === thrown) throw error;\n\t\t\tthrow this.#fail(error);\n\t\t}\n\t\t// `COMMIT` returned: the stored commits are durable, and memory follows.\n\t\tconst { stored, last, written, statements } = done;\n\t\tif (last !== undefined) {\n\t\t\tthis.#lastSeq = last.seq;\n\t\t\tthis.#committedNextId = last.nextId;\n\t\t\tfor (const [name, record] of last.tables) this.#catalog.set(name, record);\n\t\t}\n\t\t// As after a lone step: a throw from here (a metrics adapter, a receipt) stops the store.\n\t\ttry {\n\t\t\tconst metrics = chordMetrics(context.telemetry.metrics);\n\t\t\tmetrics.counter(\"chord.store.commits\").add(written);\n\t\t\tmetrics.counter(\"chord.store.statements\").add(statements);\n\t\t\tfor (const [index, { seq, created }] of stored.entries()) receive(index, seq, created);\n\t\t} catch (error) {\n\t\t\tthrow this.#fail(error);\n\t\t}\n\t\treturn refused === undefined ? { stored: stored.length } : { stored: stored.length, refused: refused.error };\n\t}\n\n\t/**\n\t * The commits of a series in its backend transaction, until one is refused (`refuse`): each commit's check, then its\n\t * writes; the metadata once, at the end.\n\t */\n\tasync #writeSeries(\n\t\texecutor: SqliteExecutor,\n\t\tcommits: readonly SeriesCommit[],\n\t\trefuse: (error: unknown) => void,\n\t): Promise<Written> {\n\t\tconst calls = { failed: false };\n\t\tconst watched = watchCalls(executor, calls);\n\t\tconst progress: Progress = {\n\t\t\tstored: [],\n\t\t\tlast: undefined,\n\t\t\tnextId: this.#ids.value,\n\t\t\tchanged: undefined,\n\t\t\tstatements: 0,\n\t\t};\n\t\tfor (const commit of commits) {\n\t\t\tconst refusal = await this.#checkCommit(commit, watched, calls, progress);\n\t\t\tif (refusal !== undefined) {\n\t\t\t\trefuse(refusal.error);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tawait this.#writeCommit(commit.writes, executor, progress);\n\t\t}\n\t\treturn this.#closeWrites(progress);\n\t}\n\n\t/**\n\t * Runs `commit`'s check on a step at the series' next seq whose backend calls are watched; resolves with its refusal,\n\t * if it refused. A check one of whose backend calls failed throws instead: a failure, not a refusal.\n\t */\n\tasync #checkCommit(\n\t\tcommit: SeriesCommit,\n\t\twatched: SqliteExecutor,\n\t\tcalls: { failed: boolean },\n\t\tprogress: Progress,\n\t): Promise<{ readonly error: unknown } | undefined> {\n\t\tconst step = new Step(watched, this.#nextSeq(progress), this.#ids, progress.changed ?? this.#catalog);\n\t\tcalls.failed = false;\n\t\ttry {\n\t\t\tawait commit.check(step);\n\t\t\treturn undefined;\n\t\t} catch (error) {\n\t\t\tif (calls.failed) throw error;\n\t\t\treturn { error };\n\t\t} finally {\n\t\t\tprogress.statements += step.statements;\n\t\t}\n\t}\n\n\t/**\n\t * Writes a commit's `writes` on its own step at the series' next seq (`#write`), unwatched, and keeps the table\n\t * records it changed in a copy of the catalog, made only once one changed; resolves with the step. A commit without\n\t * writes takes no seq and no step.\n\t */\n\tasync #writeCommit(\n\t\twrites: readonly StagedWrite[],\n\t\texecutor: SqliteExecutor,\n\t\tprogress: Progress,\n\t): Promise<Step | undefined> {\n\t\tconst seq = this.#nextSeq(progress);\n\t\tif (writes.length === 0) {\n\t\t\tprogress.stored.push({ seq: seq - 1, created: [] });\n\t\t\treturn undefined;\n\t\t}\n\t\tconst step = new Step(executor, seq, this.#ids, progress.changed ?? this.#catalog);\n\t\tprogress.nextId = await this.#write(step, writes);\n\t\tprogress.statements += step.statements;\n\t\tif (step.tables.size > 0) {\n\t\t\tprogress.changed ??= new Map(this.#catalog);\n\t\t\tfor (const [name, record] of step.tables) progress.changed.set(name, record);\n\t\t}\n\t\tprogress.last = step;\n\t\tprogress.stored.push({ seq, created: step.created });\n\t\treturn step;\n\t}\n\n\t/** The seq the series' next commit takes. */\n\t#nextSeq(progress: Progress): number {\n\t\treturn (progress.last?.seq ?? this.#lastSeq) + 1;\n\t}\n\n\t/** Ends a transaction's writes with the metadata once, after its last commit that wrote; returns what memory takes. */\n\tasync #closeWrites(progress: Progress): Promise<Written> {\n\t\tconst { stored, last, nextId, changed, statements } = progress;\n\t\tif (last === undefined) return { stored, last: undefined, written: 0, statements };\n\t\tawait writeMeta(last, nextId);\n\t\treturn {\n\t\t\tstored,\n\t\t\tlast: { seq: last.seq, nextId, tables: changed ?? new Map() },\n\t\t\twritten: last.seq - this.#lastSeq,\n\t\t\tstatements: statements + 1,\n\t\t};\n\t}\n\n\t/**\n\t * The step's writes inside its backend transaction: each staged write in its phase, the catalog, the outbox commit.\n\t * Returns the allocator's value, taken once, after the writes applied (mints meanwhile only raise it); the metadata\n\t * (`writeMeta`) is the caller's.\n\t */\n\tasync #write(step: Step, writes: readonly StagedWrite[]): Promise<number> {\n\t\tconst seq = step.seq;\n\t\tconst recorded: StoreWrite[] | undefined = this.#outbox !== undefined ? [] : undefined;\n\t\tfor (const order of ORDER) {\n\t\t\tfor (const write of writes) {\n\t\t\t\tif (write.order !== order) continue;\n\t\t\t\tconst done = await write.apply(step);\n\t\t\t\trecorded?.push(...done);\n\t\t\t}\n\t\t}\n\t\tawait writeCatalog(step);\n\t\tconst nextId = this.#ids.value;\n\t\tif (recorded !== undefined) {\n\t\t\tawait step.run(\n\t\t\t\t`INSERT INTO ${TABLES.outbox} (seq, format, next_id, writes) VALUES (?, ?, ?, ?)`,\n\t\t\t\tseq,\n\t\t\t\tOUTBOX_FORMAT,\n\t\t\t\tnextId,\n\t\t\t\tJSON.stringify(recorded),\n\t\t\t);\n\t\t}\n\t\treturn nextId;\n\t}\n\n\t/**\n\t * Batch apply's turn (slice 6b §1.6, S5): refused (`invalid/args`) while an owner holds a claim (its memory would\n\t * go stale) and once the store diverged; otherwise `apply` runs in the commit queue, in one backend transaction, and\n\t * returns the position its last commit leaves (`lastSeq`, the allocator's value) and the tables it changed, which\n\t * memory takes after `COMMIT`. `apply`'s own error rolls back and rejects as a refusal (a `Diverged` one marks the\n\t * store diverged); any other failure stops the store.\n\t */\n\treplay(\n\t\tapply: (executor: SqliteExecutor, catalog: ReadonlyMap<string, TableRecord>) => Promise<Replayed>,\n\t\tisDivergence: (error: unknown) => boolean,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tthis.#assertReplayable();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\tthis.#open = undefined;\n\t\tconst turn = this.#tail.then(() => this.#replay(apply, isDivergence));\n\t\tthis.#tail = turn.then(NOTHING, NOTHING);\n\t\treturn turn;\n\t}\n\n\t/** At its call and again at its turn: a claim or a divergence may come between the two. */\n\t#assertReplayable(): void {\n\t\tthis.assertUsable();\n\t\tif (this.#diverged) throw invalid(\"args\", \"store: diverged; a batch can no longer apply\");\n\t\tif (this.claims.held) throw invalid(\"args\", \"store: an owner holds claims; a batch would stale its memory\");\n\t}\n\n\tasync #replay(\n\t\tapply: (executor: SqliteExecutor, catalog: ReadonlyMap<string, TableRecord>) => Promise<Replayed>,\n\t\tisDivergence: (error: unknown) => boolean,\n\t): Promise<void> {\n\t\tthis.#assertReplayable();\n\t\t// While it applies, no owner may claim (and read) what it is changing.\n\t\tconst unlock = this.claims.lock();\n\t\ttry {\n\t\t\tawait this.#applyReplay(apply, isDivergence);\n\t\t} finally {\n\t\t\tunlock();\n\t\t}\n\t}\n\n\tasync #applyReplay(\n\t\tapply: (executor: SqliteExecutor, catalog: ReadonlyMap<string, TableRecord>) => Promise<Replayed>,\n\t\tisDivergence: (error: unknown) => boolean,\n\t): Promise<void> {\n\t\tlet thrown: unknown = NONE;\n\t\tlet replayed: Replayed;\n\t\ttry {\n\t\t\treplayed = await this.#db.transaction(async (executor) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn await apply(executor, this.#catalog);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrown = error;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error !== thrown) throw this.#fail(error);\n\t\t\tif (isDivergence(error)) this.#diverged = true;\n\t\t\tthrow error;\n\t\t}\n\t\tthis.#lastSeq = replayed.lastSeq;\n\t\tthis.#committedNextId = replayed.nextId;\n\t\tthis.#ids.raise(replayed.nextId - 1);\n\t\tfor (const [name, record] of replayed.tables) this.#catalog.set(name, record);\n\t}\n\n\t/** Whether the store has an outbox, which a replayed batch writes too. */\n\tget recordsOutbox(): boolean {\n\t\treturn this.#outbox !== undefined;\n\t}\n\n\t/** Throws `unavailable/storage_failed` once the store stopped, `released` once it closed. */\n\tassertUsable(): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"failed\") throw storageFailed(state.error);\n\t\tif (state.kind === \"closed\")\n\t\t\tthrow new ChordError({ code: \"released\", reason: \"closed\", message: \"store: closed\" });\n\t}\n\n\t/**\n\t * Stops the store after `error` (once; its host is told once), latching it also when the store is closing; returns\n\t * the error the caller rejects with.\n\t */\n\t#fail(error: unknown): ChordError {\n\t\tthis.#failure ??= { error };\n\t\tif (this.#state.kind === \"open\") {\n\t\t\tthis.#state = { kind: \"failed\", error };\n\t\t\tthis.#attachment?.failed(error);\n\t\t}\n\t\treturn storageFailed(error);\n\t}\n}\n\n/** Records `seq`, the step's, as the store's last, and the allocator's value `nextId`. */\nfunction writeMeta(step: Step, nextId: number): Promise<void> {\n\treturn step.run(`UPDATE ${TABLES.meta} SET last_seq = ?, next_id = ? WHERE singleton = 1`, step.seq, nextId);\n}\n\n/**\n * `executor`, setting `calls.failed` when one of its calls throws, synchronously or by rejecting, with any value: a\n * check that throws then failed in the backend, not by its own decision.\n */\nfunction watchCalls(executor: SqliteExecutor, calls: { failed: boolean }): SqliteExecutor {\n\tconst watched = async <T>(call: () => Promise<T>): Promise<T> => {\n\t\ttry {\n\t\t\treturn await call();\n\t\t} catch (error) {\n\t\t\tcalls.failed = true;\n\t\t\tthrow error;\n\t\t}\n\t};\n\treturn {\n\t\texec: (sql) => watched(() => executor.exec(sql)),\n\t\trun: (sql, ...params) => watched(() => executor.run(sql, ...params)),\n\t\trunCounted: (sql, ...params) => watched(() => executor.runCounted(sql, ...params)),\n\t\tget: (sql, ...params) => watched(() => executor.get(sql, ...params)),\n\t\tall: (sql, ...params) => watched(() => executor.all(sql, ...params)),\n\t};\n}\n\n/** The `released` error of a commit its fence refused at the step's entry: its attempt ended. */\nfunction discarded(): ChordError {\n\treturn new ChordError({ code: \"released\", reason: \"discarded\", message: \"store: the commit's attempt ended\" });\n}\n\n/** The `unavailable/storage_failed` error of a stopped store, its backend error as the cause. */\nfunction storageFailed(error: unknown): ChordError {\n\treturn new ChordError(\n\t\t{ code: \"unavailable\", reason: \"storage_failed\", message: \"store: storage failed\" },\n\t\t{ cause: error },\n\t);\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import type { Context } from "../context/index.ts";
2
+ import { type EvaluatedRow } from "./evaluate.ts";
3
+ import type { StagedWrite } from "./step.ts";
4
+ import type { TableHandle } from "./table-handle.ts";
5
+ /**
6
+ * The writes of one transaction to one table: each appended to the transaction's staged list (`staged`, one order
7
+ * across tables) and, for the single-key ones, to its key's overlay.
8
+ */
9
+ export declare class TableChanges {
10
+ #private;
11
+ readonly handle: TableHandle;
12
+ constructor(handle: TableHandle, staged: StagedWrite[]);
13
+ /** Stages a `put` of `row` (an upsert). */
14
+ put(row: unknown): void;
15
+ /** Stages an `update` of the row with `key` (`set`: values, or a callback of column references). */
16
+ update(key: unknown, set: unknown): void;
17
+ /** Stages a `delete` of the row with `key`. */
18
+ delete(key: unknown): void;
19
+ /** Stages an `updateWhere`: every row matching `where` gets `set`. */
20
+ updateWhere(where: unknown, set: unknown): void;
21
+ /** Stages a `deleteWhere`: every row matching `where` goes. */
22
+ deleteWhere(where: unknown): void;
23
+ /**
24
+ * The row with `key` as this transaction leaves it: the committed row with this transaction's `put`, `update` and
25
+ * `delete` of the key replayed; refused after a bulk write (W10).
26
+ */
27
+ get(key: unknown, context: Context): Promise<EvaluatedRow | undefined>;
28
+ }
29
+ //# sourceMappingURL=table-changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-changes.d.ts","sourceRoot":"","sources":["../../src/store/table-changes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBrD;;;GAGG;AACH,qBAAa,YAAY;;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAM7B,YAAY,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,EAGrD;IAED,2CAA2C;IAC3C,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAKtB;IAED,oGAAoG;IACpG,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAevC;IAED,+CAA+C;IAC/C,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAKzB;IAED,sEAAsE;IACtE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAc9C;IAED,+DAA+D;IAC/D,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAShC;IAED;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAyB3E;CAYD"}
@@ -0,0 +1,102 @@
1
+ // A transaction's writes to one table (slice 6a §6, §7; W10): checked and staged synchronously like a draft's ops (no
2
+ // I/O, a bad row throws at its own call), kept in staging order for the commit step, and overlaid on committed rows
3
+ // for `tx.get` until a bulk write makes that impossible (`invalid/read_after_bulk`).
4
+ import { invalid } from "../data/internal.js";
5
+ import { applySet } from "./evaluate.js";
6
+ import { compileSet, compileWhere } from "./expression.js";
7
+ import { jsonVersions, recordedVersions, stageDelete, stageDeleteWhere, stagePut, stageUpdate, stageUpdateWhere, } from "./table-writes.js";
8
+ /**
9
+ * The writes of one transaction to one table: each appended to the transaction's staged list (`staged`, one order
10
+ * across tables) and, for the single-key ones, to its key's overlay.
11
+ */
12
+ export class TableChanges {
13
+ handle;
14
+ #staged;
15
+ #byKey = new Map();
16
+ /** An `updateWhere` or `deleteWhere` was staged: `get` is refused from then on (W10). */
17
+ #bulk = false;
18
+ constructor(handle, staged) {
19
+ this.handle = handle;
20
+ this.#staged = staged;
21
+ }
22
+ /** Stages a `put` of `row` (an upsert). */
23
+ put(row) {
24
+ const { definition, sql } = this.handle;
25
+ const encoded = definition.rows.put(row, definition.version);
26
+ this.#staged.push(stagePut(sql.put, sql.table, encoded, definition.version));
27
+ this.#write(encoded.id, { kind: "put", row: encoded.row });
28
+ }
29
+ /** Stages an `update` of the row with `key` (`set`: values, or a callback of column references). */
30
+ update(key, set) {
31
+ const { definition, sql } = this.handle;
32
+ const encoded = definition.rows.key(key, "update");
33
+ const compiled = this.#set(set, "update");
34
+ const versions = jsonVersions(this.handle.definition, compiled);
35
+ this.#staged.push(stageUpdate(sql.update(compiled, encoded.params, versions), sql.table, encoded.key, compiled, recordedVersions(compiled, versions)));
36
+ this.#write(encoded.id, { kind: "update", set: compiled });
37
+ }
38
+ /** Stages a `delete` of the row with `key`. */
39
+ delete(key) {
40
+ const { definition, sql } = this.handle;
41
+ const encoded = definition.rows.key(key, "delete");
42
+ this.#staged.push(stageDelete({ sql: sql.delete, params: [...encoded.params] }, sql.table, encoded.key));
43
+ this.#write(encoded.id, { kind: "delete" });
44
+ }
45
+ /** Stages an `updateWhere`: every row matching `where` gets `set`. */
46
+ updateWhere(where, set) {
47
+ const { definition, sql } = this.handle;
48
+ const condition = compileWhere(definition, typeof where === "function" ? where(definition.refs) : where, "updateWhere");
49
+ const compiled = this.#set(set, "updateWhere");
50
+ const versions = jsonVersions(this.handle.definition, compiled);
51
+ const statement = sql.updateWhere(condition, compiled, versions);
52
+ this.#staged.push(stageUpdateWhere(statement, sql.table, condition, compiled, recordedVersions(compiled, versions)));
53
+ this.#bulk = true;
54
+ }
55
+ /** Stages a `deleteWhere`: every row matching `where` goes. */
56
+ deleteWhere(where) {
57
+ const { definition, sql } = this.handle;
58
+ const condition = compileWhere(definition, typeof where === "function" ? where(definition.refs) : where, "deleteWhere");
59
+ this.#staged.push(stageDeleteWhere(sql.deleteWhere(condition), sql.table, condition));
60
+ this.#bulk = true;
61
+ }
62
+ /**
63
+ * The row with `key` as this transaction leaves it: the committed row with this transaction's `put`, `update` and
64
+ * `delete` of the key replayed; refused after a bulk write (W10).
65
+ */
66
+ async get(key, context) {
67
+ const { definition } = this.handle;
68
+ if (this.#bulk) {
69
+ throw invalid("read_after_bulk", `${definition.name}: tx.get after an updateWhere or deleteWhere on the table`);
70
+ }
71
+ const encoded = definition.rows.key(key, "get");
72
+ const writes = this.#byKey.get(encoded.id) ?? [];
73
+ let start = writes.length;
74
+ while (start > 0 && writes[start - 1].kind === "update")
75
+ start--;
76
+ const from = writes[start - 1];
77
+ // A committed row is decoded by the table's columns: scalars and JSON, what the evaluator takes.
78
+ let row = from === undefined
79
+ ? (await this.handle.get(encoded.key, context))
80
+ : from.kind === "put"
81
+ ? from.row
82
+ : undefined;
83
+ for (const write of writes.slice(start)) {
84
+ // An `update` of an absent row changes nothing.
85
+ if (row !== undefined && write.kind === "update")
86
+ row = applySet(write.set, row, definition.name);
87
+ }
88
+ return row;
89
+ }
90
+ #set(set, what) {
91
+ const { definition } = this.handle;
92
+ return compileSet(definition, typeof set === "function" ? set(definition.refs) : set, what);
93
+ }
94
+ #write(id, write) {
95
+ const writes = this.#byKey.get(id);
96
+ if (writes === undefined)
97
+ this.#byKey.set(id, [write]);
98
+ else
99
+ writes.push(write);
100
+ }
101
+ }
102
+ //# sourceMappingURL=table-changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-changes.js","sourceRoot":"","sources":["../../src/store/table-changes.ts"],"names":[],"mappings":"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","sourcesContent":["// A transaction's writes to one table (slice 6a §6, §7; W10): checked and staged synchronously like a draft's ops (no\n// I/O, a bad row throws at its own call), kept in staging order for the commit step, and overlaid on committed rows\n// for `tx.get` until a bulk write makes that impossible (`invalid/read_after_bulk`).\n\nimport type { Context } from \"../context/index.ts\";\nimport { invalid } from \"../data/internal.ts\";\nimport { applySet, type EvaluatedRow } from \"./evaluate.ts\";\nimport { compileSet, compileWhere, type SetNode } from \"./expression.ts\";\nimport type { StagedWrite } from \"./step.ts\";\nimport type { TableHandle } from \"./table-handle.ts\";\nimport {\n\tjsonVersions,\n\trecordedVersions,\n\tstageDelete,\n\tstageDeleteWhere,\n\tstagePut,\n\tstageUpdate,\n\tstageUpdateWhere,\n} from \"./table-writes.ts\";\n\n/** One staged write of one key, as the overlay replays it. */\ntype KeyWrite =\n\t| { readonly kind: \"put\"; readonly row: EvaluatedRow }\n\t| { readonly kind: \"update\"; readonly set: SetNode }\n\t| { readonly kind: \"delete\" };\n\n/**\n * The writes of one transaction to one table: each appended to the transaction's staged list (`staged`, one order\n * across tables) and, for the single-key ones, to its key's overlay.\n */\nexport class TableChanges {\n\treadonly handle: TableHandle;\n\treadonly #staged: StagedWrite[];\n\treadonly #byKey = new Map<string, KeyWrite[]>();\n\t/** An `updateWhere` or `deleteWhere` was staged: `get` is refused from then on (W10). */\n\t#bulk = false;\n\n\tconstructor(handle: TableHandle, staged: StagedWrite[]) {\n\t\tthis.handle = handle;\n\t\tthis.#staged = staged;\n\t}\n\n\t/** Stages a `put` of `row` (an upsert). */\n\tput(row: unknown): void {\n\t\tconst { definition, sql } = this.handle;\n\t\tconst encoded = definition.rows.put(row, definition.version);\n\t\tthis.#staged.push(stagePut(sql.put, sql.table, encoded, definition.version));\n\t\tthis.#write(encoded.id, { kind: \"put\", row: encoded.row });\n\t}\n\n\t/** Stages an `update` of the row with `key` (`set`: values, or a callback of column references). */\n\tupdate(key: unknown, set: unknown): void {\n\t\tconst { definition, sql } = this.handle;\n\t\tconst encoded = definition.rows.key(key, \"update\");\n\t\tconst compiled = this.#set(set, \"update\");\n\t\tconst versions = jsonVersions(this.handle.definition, compiled);\n\t\tthis.#staged.push(\n\t\t\tstageUpdate(\n\t\t\t\tsql.update(compiled, encoded.params, versions),\n\t\t\t\tsql.table,\n\t\t\t\tencoded.key,\n\t\t\t\tcompiled,\n\t\t\t\trecordedVersions(compiled, versions),\n\t\t\t),\n\t\t);\n\t\tthis.#write(encoded.id, { kind: \"update\", set: compiled });\n\t}\n\n\t/** Stages a `delete` of the row with `key`. */\n\tdelete(key: unknown): void {\n\t\tconst { definition, sql } = this.handle;\n\t\tconst encoded = definition.rows.key(key, \"delete\");\n\t\tthis.#staged.push(stageDelete({ sql: sql.delete, params: [...encoded.params] }, sql.table, encoded.key));\n\t\tthis.#write(encoded.id, { kind: \"delete\" });\n\t}\n\n\t/** Stages an `updateWhere`: every row matching `where` gets `set`. */\n\tupdateWhere(where: unknown, set: unknown): void {\n\t\tconst { definition, sql } = this.handle;\n\t\tconst condition = compileWhere(\n\t\t\tdefinition,\n\t\t\ttypeof where === \"function\" ? where(definition.refs) : where,\n\t\t\t\"updateWhere\",\n\t\t);\n\t\tconst compiled = this.#set(set, \"updateWhere\");\n\t\tconst versions = jsonVersions(this.handle.definition, compiled);\n\t\tconst statement = sql.updateWhere(condition, compiled, versions);\n\t\tthis.#staged.push(\n\t\t\tstageUpdateWhere(statement, sql.table, condition, compiled, recordedVersions(compiled, versions)),\n\t\t);\n\t\tthis.#bulk = true;\n\t}\n\n\t/** Stages a `deleteWhere`: every row matching `where` goes. */\n\tdeleteWhere(where: unknown): void {\n\t\tconst { definition, sql } = this.handle;\n\t\tconst condition = compileWhere(\n\t\t\tdefinition,\n\t\t\ttypeof where === \"function\" ? where(definition.refs) : where,\n\t\t\t\"deleteWhere\",\n\t\t);\n\t\tthis.#staged.push(stageDeleteWhere(sql.deleteWhere(condition), sql.table, condition));\n\t\tthis.#bulk = true;\n\t}\n\n\t/**\n\t * The row with `key` as this transaction leaves it: the committed row with this transaction's `put`, `update` and\n\t * `delete` of the key replayed; refused after a bulk write (W10).\n\t */\n\tasync get(key: unknown, context: Context): Promise<EvaluatedRow | undefined> {\n\t\tconst { definition } = this.handle;\n\t\tif (this.#bulk) {\n\t\t\tthrow invalid(\n\t\t\t\t\"read_after_bulk\",\n\t\t\t\t`${definition.name}: tx.get after an updateWhere or deleteWhere on the table`,\n\t\t\t);\n\t\t}\n\t\tconst encoded = definition.rows.key(key, \"get\");\n\t\tconst writes = this.#byKey.get(encoded.id) ?? [];\n\t\tlet start = writes.length;\n\t\twhile (start > 0 && writes[start - 1]!.kind === \"update\") start--;\n\t\tconst from = writes[start - 1];\n\t\t// A committed row is decoded by the table's columns: scalars and JSON, what the evaluator takes.\n\t\tlet row: EvaluatedRow | undefined =\n\t\t\tfrom === undefined\n\t\t\t\t? ((await this.handle.get(encoded.key, context)) as EvaluatedRow | undefined)\n\t\t\t\t: from.kind === \"put\"\n\t\t\t\t\t? from.row\n\t\t\t\t\t: undefined;\n\t\tfor (const write of writes.slice(start)) {\n\t\t\t// An `update` of an absent row changes nothing.\n\t\t\tif (row !== undefined && write.kind === \"update\") row = applySet(write.set, row, definition.name);\n\t\t}\n\t\treturn row;\n\t}\n\n\t#set(set: unknown, what: string): SetNode {\n\t\tconst { definition } = this.handle;\n\t\treturn compileSet(definition, typeof set === \"function\" ? set(definition.refs) : set, what);\n\t}\n\n\t#write(id: string, write: KeyWrite): void {\n\t\tconst writes = this.#byKey.get(id);\n\t\tif (writes === undefined) this.#byKey.set(id, [write]);\n\t\telse writes.push(write);\n\t}\n}\n"]}
@@ -0,0 +1,74 @@
1
+ import { type Increment } from "../contracts/internal.ts";
2
+ import { type Optional } from "../contracts/schema.ts";
3
+ import { type ColumnSchema, type Columns, type ColumnTypeOf, type OrderColumn, type RowOf, type ValueOf } from "./columns.ts";
4
+ import { type Condition, type SetOf } from "./expression.ts";
5
+ import type { ColumnRefs } from "./query.ts";
6
+ import { TableDefinition } from "./table.ts";
7
+ /** The edits after the data step: `drop`, `index` and `dropIndex`; `C` and `K` are the columns and key so far. */
8
+ export interface TableTailEditor<C extends Columns, K extends readonly string[]> {
9
+ /** Drops a non-key column; its indexes are dropped first, in the same commit. */
10
+ drop<N extends Exclude<keyof C & string, K[number]>>(name: N): TableTailEditor<Without<C, N>, K>;
11
+ /** Adds an index (`[a-z0-9_]+`) over non-`opt` `str` or `int` columns; it ends with the key. */
12
+ index(name: string, columns: readonly OrderColumn<C>[]): TableTailEditor<C, K>;
13
+ /** Drops an index. */
14
+ dropIndex(name: string): TableTailEditor<C, K>;
15
+ /** Type only: the columns and key so far. */
16
+ readonly "~columns"?: C;
17
+ readonly "~key"?: K;
18
+ }
19
+ /** The editor `evolveTable`'s edit gets: every edit; the column edits only before the data step. */
20
+ export interface TableEditor<C extends Columns, K extends readonly string[]> extends TableTailEditor<C, K> {
21
+ /** Renames a column; the key, the indexes and a `json(...)` column's version column follow. */
22
+ rename<F extends keyof C & string, T extends string>(from: F, to: T): TableEditor<Renamed<C, F, T>, RenamedKey<K, F, T>>;
23
+ /** Adds a column: `opt(...)`, or a scalar one with a `default` (existing rows get it). */
24
+ add<N extends string, S extends AddedColumn>(name: N, column: S): TableEditor<With<C, N, S>, K>;
25
+ /** A `json(...)` column's new version (its nullability kept): no DDL, no data step, cells migrate on access. */
26
+ json<N extends JsonNames<C>, S extends ColumnSchema>(name: N, column: S): TableEditor<WithJson<C, N, S>, K>;
27
+ /**
28
+ * The data step: `patch` gets each row as the columns stand here and returns new values of non-key columns (`{}`
29
+ * stamps the row only); synchronous and pure, run in chunks of 100 in key order.
30
+ */
31
+ rows(patch: (row: RowOf<C>) => PatchOf<C, K>): TableTailEditor<C, K>;
32
+ /** The data step as one `updateWhere` over the rows not migrated yet. */
33
+ update(step: {
34
+ readonly where?: (row: ColumnRefs<C>) => Condition;
35
+ readonly set: SetOf<C, K> | ((row: ColumnRefs<C>) => SetOf<C, K>);
36
+ }): TableTailEditor<C, K>;
37
+ }
38
+ /** A column `add` takes: `opt(...)` or one with a `default`. */
39
+ export type AddedColumn = ColumnSchema & (Optional | {
40
+ readonly default: unknown;
41
+ });
42
+ /** A `rows` patch: new values of non-key columns; `undefined` clears an `opt(...)` one. */
43
+ export type PatchOf<C extends Columns, K extends readonly string[]> = {
44
+ readonly [P in Exclude<keyof C & string, K[number]>]?: ValueOf<C[P]>;
45
+ };
46
+ type Renamed<C extends Columns, F extends keyof C, T extends string> = {
47
+ readonly [P in keyof C as P extends F ? T : P]: C[P];
48
+ };
49
+ type RenamedKey<K extends readonly string[], F, T extends string> = {
50
+ readonly [I in keyof K]: K[I] extends F ? T : K[I];
51
+ };
52
+ type With<C extends Columns, N extends string, S extends ColumnSchema> = {
53
+ readonly [P in keyof C | N]: P extends N ? S : C[P & keyof C];
54
+ };
55
+ type Without<C extends Columns, N extends keyof C> = {
56
+ readonly [P in Exclude<keyof C, N>]: C[P];
57
+ };
58
+ type JsonNames<C extends Columns> = {
59
+ [P in keyof C]: ColumnTypeOf<C[P]> extends "json" ? P : never;
60
+ }[keyof C] & string;
61
+ type WithJson<C extends Columns, N extends keyof C & string, S extends ColumnSchema> = With<C, N, C[N] extends Optional ? Optional<Exclude<S, Optional>> : S>;
62
+ /** `V + 1` for a literal version (contracts' `Increment<N>`); `number` stays `number`. */
63
+ type Next<V extends number> = number extends V ? number : `${Increment<`${V}`>}` extends `${infer N extends number}` ? N : number;
64
+ /**
65
+ * Appends the next version (`previous.version + 1`) with the edits `edit` makes; `edit` must return the editor it was
66
+ * given. Every version is materialized and fingerprinted here; the object serves the newest, and its activation
67
+ * migrates a store at an older version through each one.
68
+ */
69
+ export declare function evolveTable<C extends Columns, K extends readonly string[], V extends number, E extends {
70
+ readonly "~columns"?: Columns;
71
+ readonly "~key"?: readonly string[];
72
+ }>(previous: TableDefinition<C, K, V>, edit: (t: TableEditor<C, K>) => E): TableDefinition<NonNullable<E["~columns"]>, NonNullable<E["~key"]>, Next<V>>;
73
+ export {};
74
+ //# sourceMappingURL=table-evolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-evolve.d.ts","sourceRoot":"","sources":["../../src/store/table-evolve.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,YAAY,EAIjB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,SAAS,EAA4B,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAA4B,eAAe,EAAqB,MAAM,YAAY,CAAC;AAG1F,kHAAkH;AAClH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,MAAM,EAAE;IAC9E,iFAAiF;IACjF,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,gGAAgG;IAChG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,sBAAsB;IACtB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;CACpB;AAED,oGAAoG;AACpG,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,MAAM,EAAE,CAAE,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IACzG,+FAA+F;IAC/F,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,EAClD,IAAI,EAAE,CAAC,EACP,EAAE,EAAE,CAAC,GACH,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,0FAA0F;IAC1F,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,gHAAgH;IAChH,IAAI,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5G;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,yEAAyE;IACzE,MAAM,CAAC,IAAI,EAAE;QACZ,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;QACnD,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAClE,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1B;AAED,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,QAAQ,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEpF,2FAA2F;AAC3F,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI;IACrE,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACpE,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI;IACtE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI;IACnE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClD,CAAC;AAEF,KAAK,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,YAAY,IAAI;IACxE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;CAC7D,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;IAAE,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAEnG,KAAK,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;AAExH,KAAK,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,YAAY,IAAI,IAAI,CAC1F,CAAC,EACD,CAAC,EACD,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAC1D,CAAC;AAEF,0FAA0F;AAC1F,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAC3C,MAAM,GACN,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,EAAE,GACzD,CAAC,GACD,MAAM,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,WAAW,CAC1B,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,SAAS,MAAM,EAAE,EAC3B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAEhF,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAC/B,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAM9E"}
@@ -0,0 +1,201 @@
1
+ // `evolveTable(previous, (t) => t…)` (slice 6a §9; decision "Second spec review: the majority"): the next version of a
2
+ // table from the edits of one migration. The editor's types order the edits (`rename`, `add` and `json` before the
3
+ // data step, `drop`, `index` and `dropIndex` after it) and track the columns and key through the chain; at runtime one
4
+ // editor records the edits, checks each as it is made, and materializes the new version at the end.
5
+ import { opt } from "../contracts/index.js";
6
+ import { editWith } from "../contracts/internal.js";
7
+ import { isOptional } from "../contracts/schema.js";
8
+ import { checkColumnName, columnRecord, describeColumns, } from "./columns.js";
9
+ import { compileSet, compileWhere } from "./expression.js";
10
+ import { INDEX_NAME, orderColumns, TableDefinition } from "./table.js";
11
+ /**
12
+ * Appends the next version (`previous.version + 1`) with the edits `edit` makes; `edit` must return the editor it was
13
+ * given. Every version is materialized and fingerprinted here; the object serves the newest, and its activation
14
+ * migrates a store at an older version through each one.
15
+ */
16
+ export function evolveTable(previous, edit) {
17
+ // The runtime editor works on untyped definitions; the types live in the editor interfaces.
18
+ const editor = new Editor(previous);
19
+ // The editor interfaces track the edits in the types; at runtime every edit returns the same editor.
20
+ editWith(editor, edit, `${previous.name}: evolveTable`);
21
+ return editor.finish();
22
+ }
23
+ /**
24
+ * The editor at runtime: the columns, key and indexes as the edits leave them, the edits before and after the data
25
+ * step, and the step. Each edit is checked as it is made (declaration policy: JavaScript callers reach the checks).
26
+ */
27
+ class Editor {
28
+ #previous;
29
+ #what;
30
+ #schemas;
31
+ #key;
32
+ #indexes;
33
+ /** `before` until the data step or the first `drop`, `index` or `dropIndex`. */
34
+ #phase = "before";
35
+ #before = [];
36
+ #step;
37
+ #after = [];
38
+ constructor(previous) {
39
+ this.#previous = previous;
40
+ this.#what = `${previous.name} version ${previous.version + 1}`;
41
+ this.#schemas = { ...previous.schemas };
42
+ this.#key = [...previous.key];
43
+ this.#indexes = new Map(previous.indexes);
44
+ }
45
+ rename(from, to) {
46
+ this.#assertBefore("rename");
47
+ this.#assertColumn(from, "rename");
48
+ // Checked here, not by the final definition: a later edit may rename it again, but this one runs as DDL.
49
+ checkColumnName(to, `${this.#what}: rename`);
50
+ this.#assertNewName(to, "rename", from);
51
+ const rename = (column) => (column === from ? to : column);
52
+ this.#schemas = Object.fromEntries(Object.entries(this.#schemas).map(([name, schema]) => [rename(name), schema]));
53
+ this.#key = this.#key.map(rename);
54
+ for (const [name, columns] of this.#indexes)
55
+ this.#indexes.set(name, columns.map(rename));
56
+ this.#before.push({ kind: "rename", from, to });
57
+ return this;
58
+ }
59
+ add(name, column) {
60
+ this.#assertBefore("add");
61
+ this.#assertNewName(name, "add");
62
+ const [described] = describeColumns({ [name]: column }, `${this.#what}: add`);
63
+ if (!described.optional && (described.type === "json" || described.default === undefined)) {
64
+ throw new Error(`${this.#what}: add: column "${name}" needs opt(...) or a default (existing rows get it)`);
65
+ }
66
+ this.#schemas[name] = column;
67
+ this.#before.push({ kind: "add", name, column: columnRecord(described) });
68
+ return this;
69
+ }
70
+ json(name, column) {
71
+ this.#assertBefore("json");
72
+ const existing = describeColumns({ [name]: this.#assertColumn(name, "json") }, this.#what)[0];
73
+ if (existing.type !== "json")
74
+ throw new Error(`${this.#what}: json: column "${name}" is not a json(...) column`);
75
+ if (isOptional(column)) {
76
+ throw new Error(`${this.#what}: json: pass json(...) itself; the column keeps its nullability`);
77
+ }
78
+ const schema = existing.optional ? opt(column) : column;
79
+ const described = describeColumns({ [name]: schema }, `${this.#what}: json`)[0];
80
+ if (described.type !== "json")
81
+ throw new Error(`${this.#what}: json: expected a json(...) column`);
82
+ const [before, after] = [existing.json, described.json];
83
+ // D9 across table versions: a cell's version says which schema it was written with.
84
+ if (after.version < before.version) {
85
+ throw new Error(`${this.#what}: json: column "${name}" goes back from version ${before.version}`);
86
+ }
87
+ if (after.version === before.version && after.fingerprint !== before.fingerprint) {
88
+ throw new Error(`${this.#what}: json: column "${name}" changes its schema at version ${before.version} (raise its version)`);
89
+ }
90
+ this.#schemas[name] = schema;
91
+ this.#before.push({ kind: "json", name, column: columnRecord(described) });
92
+ return this;
93
+ }
94
+ rows(patch) {
95
+ this.#assertBefore("rows");
96
+ if (typeof patch !== "function")
97
+ throw new Error(`${this.#what}: rows: expected a function`);
98
+ this.#step = { kind: "rows", table: this.#current(), patch };
99
+ this.#phase = "after";
100
+ return this;
101
+ }
102
+ update(step) {
103
+ this.#assertBefore("update");
104
+ const table = this.#current();
105
+ const what = `version ${table.version} update`;
106
+ const where = typeof step.where === "function" ? step.where(table.refs) : step.where;
107
+ const set = typeof step.set === "function" ? step.set(table.refs) : step.set;
108
+ this.#step = {
109
+ kind: "update",
110
+ table,
111
+ where: where === undefined ? undefined : compileWhere(table, where, what),
112
+ set: compileSet(table, set, what),
113
+ };
114
+ this.#phase = "after";
115
+ return this;
116
+ }
117
+ drop(name) {
118
+ this.#phase = "after";
119
+ this.#assertColumn(name, "drop");
120
+ if (this.#key.includes(name))
121
+ throw new Error(`${this.#what}: drop: "${name}" is a key column`);
122
+ for (const [index, columns] of this.#indexes) {
123
+ if (!columns.includes(name))
124
+ continue;
125
+ this.#indexes.delete(index);
126
+ this.#after.push({ kind: "dropIndex", name: index });
127
+ }
128
+ const { [name]: _dropped, ...schemas } = this.#schemas;
129
+ this.#schemas = schemas;
130
+ this.#after.push({ kind: "drop", name });
131
+ return this;
132
+ }
133
+ index(name, columns) {
134
+ this.#phase = "after";
135
+ const what = `${this.#what}: index "${name}"`;
136
+ if (!INDEX_NAME.test(name))
137
+ throw new Error(`${what}: expected [a-z0-9_]+`);
138
+ if (this.#indexes.has(name))
139
+ throw new Error(`${what} exists`);
140
+ // Checked against the columns at this edit: the migration creates the index here, whatever later edits do.
141
+ const byName = new Map(describeColumns(this.#schemas, this.#what).map((column) => [column.name, column]));
142
+ const checked = orderColumns(byName, columns, what);
143
+ this.#indexes.set(name, checked);
144
+ this.#after.push({ kind: "index", name, columns: checked });
145
+ return this;
146
+ }
147
+ dropIndex(name) {
148
+ this.#phase = "after";
149
+ if (!this.#indexes.delete(name))
150
+ throw new Error(`${this.#what}: dropIndex: no index "${name}"`);
151
+ this.#after.push({ kind: "dropIndex", name });
152
+ return this;
153
+ }
154
+ /** The new version, materialized and fingerprinted, linked to the previous one and the migration from it. */
155
+ finish() {
156
+ const migration = { before: this.#before, step: this.#step, after: this.#after };
157
+ return new TableDefinition(this.#previous.name, this.#options(), { previous: this.#previous, migration });
158
+ }
159
+ /** The table as the edits so far leave it, at the new version: what a data step reads and writes. */
160
+ #current() {
161
+ return new TableDefinition(this.#previous.name, this.#options());
162
+ }
163
+ #options() {
164
+ const version = this.#previous.version + 1;
165
+ const options = {
166
+ version,
167
+ columns: { ...this.#schemas },
168
+ key: [...this.#key],
169
+ indexes: Object.fromEntries(this.#indexes),
170
+ };
171
+ // The key and indexes are names the edits kept; the constructor checks them as it checks a base's.
172
+ return options;
173
+ }
174
+ #assertBefore(edit) {
175
+ if (this.#phase === "after") {
176
+ throw new Error(`${this.#what}: ${edit} comes before the data step and before drop, index and dropIndex`);
177
+ }
178
+ }
179
+ /**
180
+ * `name` names no column yet, also ignoring ASCII case (SQLite's column names do): checked per edit, since a later
181
+ * `drop` cannot take back an `add` the migration runs first. A rename may change only the case of `from`.
182
+ */
183
+ #assertNewName(name, edit, from) {
184
+ const folded = foldAscii(name);
185
+ for (const existing of Object.keys(this.#schemas)) {
186
+ if (existing !== from && foldAscii(existing) === folded) {
187
+ throw new Error(`${this.#what}: ${edit}: column "${existing}" exists (names differing only in case collide)`);
188
+ }
189
+ }
190
+ }
191
+ #assertColumn(name, edit) {
192
+ if (!Object.hasOwn(this.#schemas, name))
193
+ throw new Error(`${this.#what}: ${edit}: no column "${name}"`);
194
+ return this.#schemas[name];
195
+ }
196
+ }
197
+ /** `name` with ASCII letters lowercased and nothing else changed, as SQLite folds identifiers. */
198
+ function foldAscii(name) {
199
+ return name.replace(/[A-Z]+/g, (letters) => letters.toLowerCase());
200
+ }
201
+ //# sourceMappingURL=table-evolve.js.map