@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,36 @@
1
+ // A refused commit as Chord's owners take it (slice 6b D4, §1.4): the store rejects a step it rolled back with the
2
+ // step's own error, unchanged (Durable's Storage semantics); Chord classifies it: an `int` column's `CHECK` (a
3
+ // plugin's value out of range) fails only its transaction, any other refusal means memory and disk disagree.
4
+ import { ChordError, isChordError } from "../data/index.js";
5
+ /** SQLite's extended result code `SQLITE_CONSTRAINT_CHECK`, which Node's binding reports as `errcode`. */
6
+ const SQLITE_CONSTRAINT_CHECK = 275;
7
+ /**
8
+ * The refusal behind `error`, a store commit's rejection; `undefined` when it is the store's own (`released` at
9
+ * admission or after close, `unavailable/storage_failed` once stopped), which the owner rethrows as it is.
10
+ */
11
+ export function refusalOf(error, label) {
12
+ if (isChordError(error, "released") || (isChordError(error, "unavailable") && error.reason === "storage_failed")) {
13
+ return undefined;
14
+ }
15
+ const message = error instanceof Error ? error.message : String(error);
16
+ if (isCheck(error, message)) {
17
+ const refused = `${label}: a value is out of its column's range (${message})`;
18
+ return {
19
+ kind: "check",
20
+ error: new ChordError({ code: "invalid", reason: "args", message: refused }, { cause: error }),
21
+ };
22
+ }
23
+ const refused = `${label}: the store refused the commit (${message})`;
24
+ return { kind: "broken", error: new ChordError({ code: "unavailable", message: refused }, { cause: error }) };
25
+ }
26
+ /**
27
+ * Whether a refusal is a `CHECK` failure: SQLite's extended code where the binding has one (Node), the message
28
+ * otherwise (the Durable Object facade has no extended codes).
29
+ */
30
+ function isCheck(error, message) {
31
+ const code = error?.errcode;
32
+ if (typeof code === "number")
33
+ return code === SQLITE_CONSTRAINT_CHECK;
34
+ return message.includes("CHECK constraint failed");
35
+ }
36
+ //# sourceMappingURL=refusal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refusal.js","sourceRoot":"","sources":["../../src/store/refusal.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,+GAA+G;AAC/G,6GAA6G;AAE7G,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAO5D,0GAA0G;AAC1G,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACtD,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,EAAE,CAAC;QAClH,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,KAAK,2CAA2C,OAAO,GAAG,CAAC;QAC9E,OAAO;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SAC9F,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,KAAK,mCAAmC,OAAO,GAAG,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC/G,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,KAAc,EAAE,OAAe;IAC/C,MAAM,IAAI,GAAI,KAAoD,EAAE,OAAO,CAAC;IAC5E,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,uBAAuB,CAAC;IACtE,OAAO,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACpD,CAAC","sourcesContent":["// A refused commit as Chord's owners take it (slice 6b D4, §1.4): the store rejects a step it rolled back with the\n// step's own error, unchanged (Durable's Storage semantics); Chord classifies it: an `int` column's `CHECK` (a\n// plugin's value out of range) fails only its transaction, any other refusal means memory and disk disagree.\n\nimport { ChordError, isChordError } from \"../data/index.ts\";\n\n/** How a Chord commit ended that the store rejected: `check` fails the transaction only, `broken` its object too. */\nexport type Refusal =\n\t| { readonly kind: \"check\"; readonly error: ChordError }\n\t| { readonly kind: \"broken\"; readonly error: ChordError };\n\n/** SQLite's extended result code `SQLITE_CONSTRAINT_CHECK`, which Node's binding reports as `errcode`. */\nconst SQLITE_CONSTRAINT_CHECK = 275;\n\n/**\n * The refusal behind `error`, a store commit's rejection; `undefined` when it is the store's own (`released` at\n * admission or after close, `unavailable/storage_failed` once stopped), which the owner rethrows as it is.\n */\nexport function refusalOf(error: unknown, label: string): Refusal | undefined {\n\tif (isChordError(error, \"released\") || (isChordError(error, \"unavailable\") && error.reason === \"storage_failed\")) {\n\t\treturn undefined;\n\t}\n\tconst message = error instanceof Error ? error.message : String(error);\n\tif (isCheck(error, message)) {\n\t\tconst refused = `${label}: a value is out of its column's range (${message})`;\n\t\treturn {\n\t\t\tkind: \"check\",\n\t\t\terror: new ChordError({ code: \"invalid\", reason: \"args\", message: refused }, { cause: error }),\n\t\t};\n\t}\n\tconst refused = `${label}: the store refused the commit (${message})`;\n\treturn { kind: \"broken\", error: new ChordError({ code: \"unavailable\", message: refused }, { cause: error }) };\n}\n\n/**\n * Whether a refusal is a `CHECK` failure: SQLite's extended code where the binding has one (Node), the message\n * otherwise (the Durable Object facade has no extended codes).\n */\nfunction isCheck(error: unknown, message: string): boolean {\n\tconst code = (error as { readonly errcode?: unknown } | undefined)?.errcode;\n\tif (typeof code === \"number\") return code === SQLITE_CONSTRAINT_CHECK;\n\treturn message.includes(\"CHECK constraint failed\");\n}\n"]}
@@ -0,0 +1,80 @@
1
+ import type { Context } from "../context/index.ts";
2
+ import type { JsonValue } from "../json.ts";
3
+ import type { SqliteValue } from "../sqlite/index.ts";
4
+ import type { Column, ColumnType } from "./columns.ts";
5
+ /** A scalar cell as the store keeps it in rows, writes and operands: a well-formed string, a number or a boolean. */
6
+ export type Scalar = string | number | boolean;
7
+ /** A row as the outbox records it: the stored values, `opt(...)` columns absent when `NULL`. */
8
+ export type StoredRow = {
9
+ readonly [column: string]: Scalar | JsonValue;
10
+ };
11
+ /** A `put` ready for the step: its parameters in `physical` order and its record. */
12
+ export type EncodedRow = {
13
+ readonly params: readonly SqliteValue[];
14
+ readonly row: StoredRow;
15
+ /** Each written `json(...)` column's version. */
16
+ readonly columns: {
17
+ readonly [column: string]: number;
18
+ };
19
+ /** The row's key identity, as `EncodedKey.id`. */
20
+ readonly id: string;
21
+ };
22
+ /** A key ready for the store: its parameters in key order, its record and its identity within one table. */
23
+ export type EncodedKey = {
24
+ readonly params: readonly SqliteValue[];
25
+ readonly key: {
26
+ readonly [column: string]: Scalar;
27
+ };
28
+ /** `JSON.stringify` of the parameters: equal keys, equal ids. */
29
+ readonly id: string;
30
+ };
31
+ /** The physical name of a `json(...)` column's version column, and of the row's eager-step version. */
32
+ export declare function versionColumn(column: string): string;
33
+ /** The row's eager-step version column (W11): set by `put` and eager migration steps only. */
34
+ export declare const ROW_VERSION = "$v";
35
+ /** The physical column order of a stored row: the declared columns, each `json(...)` column's version, then `$v`. */
36
+ export declare function physicalColumns(columns: readonly {
37
+ readonly name: string;
38
+ readonly type: ColumnType;
39
+ }[]): string[];
40
+ /** A scalar as SQLite binds it: booleans as 0 and 1. */
41
+ export declare function toSqlite(scalar: Scalar): string | number;
42
+ /**
43
+ * A table version's codec: `put` rows and keys checked and encoded, stored rows decoded. `physical` is the column
44
+ * order of an encoded row (`physicalColumns`).
45
+ */
46
+ export declare class RowCodec {
47
+ #private;
48
+ readonly physical: readonly string[];
49
+ constructor(columns: readonly Column[], key: readonly string[], table: string);
50
+ /**
51
+ * Checks and encodes a `put` row of table version `version` (a trust boundary): a plain object with every
52
+ * non-`opt` column (a defaulted one filled in) and no other field; `invalid/args` otherwise.
53
+ */
54
+ put(row: unknown, version: number): EncodedRow;
55
+ /** Checks and encodes a key (a trust boundary): an object with exactly the key columns; `invalid/args` otherwise. */
56
+ key(key: unknown, what: string): EncodedKey;
57
+ /**
58
+ * A stored row as reads return it: booleans from 0 and 1, `opt(...)` columns absent when `NULL`, `json(...)` cells
59
+ * parsed and migrated on access (a cell the code cannot read throws, see `JsonColumn.read`).
60
+ */
61
+ decode(stored: {
62
+ readonly [column: string]: SqliteValue;
63
+ }, context: Context): {
64
+ [column: string]: unknown;
65
+ };
66
+ }
67
+ /** A checked cell: what is bound and what is recorded. */
68
+ type Cell = {
69
+ readonly param: SqliteValue;
70
+ readonly stored: Scalar | JsonValue;
71
+ };
72
+ /** Checks and encodes a value of `column`; a `json(...)` value is serialized, not walked (R9). */
73
+ export declare function encodeCell(column: Column, value: unknown, what: string): Cell;
74
+ /**
75
+ * A value of a scalar column type as the store keeps it (a trust boundary): `str` well-formed without NUL, `int` a
76
+ * safe integer, `num` finite, `bool` a boolean; `invalid/args` otherwise.
77
+ */
78
+ export declare function checkScalar(type: "str" | "int" | "num" | "bool", value: unknown, what: string): Scalar;
79
+ export {};
80
+ //# sourceMappingURL=rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/store/rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ // Rows (slice 6a §5 "Values at write", §9): one compiled codec per table version between a plugin's rows and keys
2
+ // (a trust boundary, checked closed) and what the store binds and reads; `json(...)` cells serialized at staging
3
+ // (rule 8), never walked (R9), and migrated on access when read.
4
+ import { invalid } from "../data/internal.js";
5
+ import { storedText } from "./text.js";
6
+ /** The physical name of a `json(...)` column's version column, and of the row's eager-step version. */
7
+ export function versionColumn(column) {
8
+ return `${column}$v`;
9
+ }
10
+ /** The row's eager-step version column (W11): set by `put` and eager migration steps only. */
11
+ export const ROW_VERSION = "$v";
12
+ /** The physical column order of a stored row: the declared columns, each `json(...)` column's version, then `$v`. */
13
+ export function physicalColumns(columns) {
14
+ return [
15
+ ...columns.map(({ name }) => name),
16
+ ...columns.filter(({ type }) => type === "json").map(({ name }) => versionColumn(name)),
17
+ ROW_VERSION,
18
+ ];
19
+ }
20
+ /** A scalar as SQLite binds it: booleans as 0 and 1. */
21
+ export function toSqlite(scalar) {
22
+ return scalar === true ? 1 : scalar === false ? 0 : scalar;
23
+ }
24
+ /**
25
+ * A table version's codec: `put` rows and keys checked and encoded, stored rows decoded. `physical` is the column
26
+ * order of an encoded row (`physicalColumns`).
27
+ */
28
+ export class RowCodec {
29
+ physical;
30
+ #columns;
31
+ #key;
32
+ #json;
33
+ #names;
34
+ #keyNames;
35
+ /** The positions of the key columns in `physical`. */
36
+ #keyPositions;
37
+ #table;
38
+ constructor(columns, key, table) {
39
+ this.#columns = columns;
40
+ this.#key = key.map((name) => columns.find((column) => column.name === name));
41
+ this.#json = columns.filter((column) => column.type === "json");
42
+ this.#names = new Set(columns.map(({ name }) => name));
43
+ this.#keyNames = new Set(key);
44
+ this.#keyPositions = key.map((name) => columns.findIndex((column) => column.name === name));
45
+ this.#table = table;
46
+ this.physical = physicalColumns(columns);
47
+ }
48
+ /**
49
+ * Checks and encodes a `put` row of table version `version` (a trust boundary): a plain object with every
50
+ * non-`opt` column (a defaulted one filled in) and no other field; `invalid/args` otherwise.
51
+ */
52
+ put(row, version) {
53
+ const what = `${this.#table}: put`;
54
+ const fields = this.#closed(row, this.#names, what);
55
+ const params = [];
56
+ const stored = {};
57
+ const versions = {};
58
+ for (const column of this.#columns) {
59
+ let value = fields[column.name];
60
+ if (value === undefined && column.type !== "json")
61
+ value = column.default;
62
+ if (value === undefined) {
63
+ if (!column.optional)
64
+ throw invalid("args", `${what}: column "${column.name}" is missing`);
65
+ params.push(null);
66
+ continue;
67
+ }
68
+ const cell = encodeCell(column, value, `${what}: column "${column.name}"`);
69
+ params.push(cell.param);
70
+ stored[column.name] = cell.stored;
71
+ }
72
+ for (const column of this.#json) {
73
+ const present = Object.hasOwn(stored, column.name);
74
+ if (present)
75
+ versions[column.name] = column.json.version;
76
+ params.push(present ? column.json.version : null);
77
+ }
78
+ params.push(version);
79
+ const id = JSON.stringify(this.#keyPositions.map((position) => params[position]));
80
+ return { params, row: stored, columns: versions, id };
81
+ }
82
+ /** Checks and encodes a key (a trust boundary): an object with exactly the key columns; `invalid/args` otherwise. */
83
+ key(key, what) {
84
+ const fields = this.#closed(key, this.#keyNames, `${this.#table}: ${what}: the key`);
85
+ const params = [];
86
+ const stored = {};
87
+ for (const column of this.#key) {
88
+ const value = fields[column.name];
89
+ const where = `${this.#table}: ${what}: key column "${column.name}"`;
90
+ if (value === undefined)
91
+ throw invalid("args", `${where} is missing`);
92
+ const cell = encodeScalar(column, value, where);
93
+ params.push(cell);
94
+ stored[column.name] = cell;
95
+ }
96
+ return { params, key: stored, id: JSON.stringify(params) };
97
+ }
98
+ /**
99
+ * A stored row as reads return it: booleans from 0 and 1, `opt(...)` columns absent when `NULL`, `json(...)` cells
100
+ * parsed and migrated on access (a cell the code cannot read throws, see `JsonColumn.read`).
101
+ */
102
+ decode(stored, context) {
103
+ const row = {};
104
+ for (const column of this.#columns) {
105
+ const value = stored[column.name];
106
+ if (value === null || value === undefined)
107
+ continue;
108
+ if (column.type === "bool")
109
+ row[column.name] = value === 1;
110
+ else if (column.type === "json") {
111
+ const version = stored[versionColumn(column.name)];
112
+ row[column.name] = column.json.read(value, version, `${this.#table}.${column.name}`, context);
113
+ }
114
+ else
115
+ row[column.name] = value;
116
+ }
117
+ return row;
118
+ }
119
+ /** `value`'s own fields when it is a plain object with only fields of `names`; `invalid/args` otherwise. */
120
+ #closed(value, names, what) {
121
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
122
+ throw invalid("args", `${what}: expected an object`);
123
+ }
124
+ for (const field of Object.keys(value)) {
125
+ if (!names.has(field))
126
+ throw invalid("args", `${what}: unknown column "${field}"`);
127
+ }
128
+ // Checked above: a plain object with known fields.
129
+ return value;
130
+ }
131
+ }
132
+ /** Checks and encodes a value of `column`; a `json(...)` value is serialized, not walked (R9). */
133
+ export function encodeCell(column, value, what) {
134
+ if (column.type !== "json") {
135
+ const stored = checkScalar(column.type, value, what);
136
+ return { param: toSqlite(stored), stored };
137
+ }
138
+ let text;
139
+ try {
140
+ text = JSON.stringify(value);
141
+ }
142
+ catch (error) {
143
+ throw invalid("args", `${what}: not JSON (${error instanceof Error ? error.message : String(error)})`);
144
+ }
145
+ if (text === undefined)
146
+ throw invalid("args", `${what}: not JSON`);
147
+ // `JSON.stringify` accepted it; the recorded value is the one serialized. It is kept, not copied or parsed back:
148
+ // same-host values are immutable by convention, so the outbox serializing it again in the step records this text
149
+ // (a plugin mutating a value after `tx.put` breaks that convention, as for any other value it hands over).
150
+ return { param: text, stored: value };
151
+ }
152
+ /** Checks a scalar value of `column` and returns what is bound (booleans as 0 and 1). */
153
+ function encodeScalar(column, value, what) {
154
+ if (column.type === "json")
155
+ throw invalid("args", `${what}: a json(...) column has no scalar value`);
156
+ return toSqlite(checkScalar(column.type, value, what));
157
+ }
158
+ /**
159
+ * A value of a scalar column type as the store keeps it (a trust boundary): `str` well-formed without NUL, `int` a
160
+ * safe integer, `num` finite, `bool` a boolean; `invalid/args` otherwise.
161
+ */
162
+ export function checkScalar(type, value, what) {
163
+ switch (type) {
164
+ case "str":
165
+ if (typeof value === "string")
166
+ return storedText(value, what);
167
+ break;
168
+ case "int":
169
+ if (Number.isSafeInteger(value))
170
+ return value;
171
+ break;
172
+ case "num":
173
+ if (typeof value === "number" && Number.isFinite(value))
174
+ return value;
175
+ break;
176
+ case "bool":
177
+ if (typeof value === "boolean")
178
+ return value;
179
+ break;
180
+ }
181
+ throw invalid("args", `${what}: ${JSON.stringify(value) ?? String(value)} is not a ${type} value`);
182
+ }
183
+ //# sourceMappingURL=rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/store/rows.ts"],"names":[],"mappings":"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","sourcesContent":["// Rows (slice 6a §5 \"Values at write\", §9): one compiled codec per table version between a plugin's rows and keys\n// (a trust boundary, checked closed) and what the store binds and reads; `json(...)` cells serialized at staging\n// (rule 8), never walked (R9), and migrated on access when read.\n\nimport type { Context } from \"../context/index.ts\";\nimport { invalid } from \"../data/internal.ts\";\nimport type { JsonValue } from \"../json.ts\";\nimport type { SqliteValue } from \"../sqlite/index.ts\";\nimport type { Column, ColumnType } from \"./columns.ts\";\nimport { storedText } from \"./text.ts\";\n\n/** A scalar cell as the store keeps it in rows, writes and operands: a well-formed string, a number or a boolean. */\nexport type Scalar = string | number | boolean;\n\n/** A row as the outbox records it: the stored values, `opt(...)` columns absent when `NULL`. */\nexport type StoredRow = { readonly [column: string]: Scalar | JsonValue };\n\n/** A `put` ready for the step: its parameters in `physical` order and its record. */\nexport type EncodedRow = {\n\treadonly params: readonly SqliteValue[];\n\treadonly row: StoredRow;\n\t/** Each written `json(...)` column's version. */\n\treadonly columns: { readonly [column: string]: number };\n\t/** The row's key identity, as `EncodedKey.id`. */\n\treadonly id: string;\n};\n\n/** A key ready for the store: its parameters in key order, its record and its identity within one table. */\nexport type EncodedKey = {\n\treadonly params: readonly SqliteValue[];\n\treadonly key: { readonly [column: string]: Scalar };\n\t/** `JSON.stringify` of the parameters: equal keys, equal ids. */\n\treadonly id: string;\n};\n\n/** The physical name of a `json(...)` column's version column, and of the row's eager-step version. */\nexport function versionColumn(column: string): string {\n\treturn `${column}$v`;\n}\n\n/** The row's eager-step version column (W11): set by `put` and eager migration steps only. */\nexport const ROW_VERSION = \"$v\";\n\n/** The physical column order of a stored row: the declared columns, each `json(...)` column's version, then `$v`. */\nexport function physicalColumns(columns: readonly { readonly name: string; readonly type: ColumnType }[]): string[] {\n\treturn [\n\t\t...columns.map(({ name }) => name),\n\t\t...columns.filter(({ type }) => type === \"json\").map(({ name }) => versionColumn(name)),\n\t\tROW_VERSION,\n\t];\n}\n\n/** A scalar as SQLite binds it: booleans as 0 and 1. */\nexport function toSqlite(scalar: Scalar): string | number {\n\treturn scalar === true ? 1 : scalar === false ? 0 : scalar;\n}\n\n/**\n * A table version's codec: `put` rows and keys checked and encoded, stored rows decoded. `physical` is the column\n * order of an encoded row (`physicalColumns`).\n */\nexport class RowCodec {\n\treadonly physical: readonly string[];\n\treadonly #columns: readonly Column[];\n\treadonly #key: readonly Column[];\n\treadonly #json: readonly Extract<Column, { readonly type: \"json\" }>[];\n\treadonly #names: ReadonlySet<string>;\n\treadonly #keyNames: ReadonlySet<string>;\n\t/** The positions of the key columns in `physical`. */\n\treadonly #keyPositions: readonly number[];\n\treadonly #table: string;\n\n\tconstructor(columns: readonly Column[], key: readonly string[], table: string) {\n\t\tthis.#columns = columns;\n\t\tthis.#key = key.map((name) => columns.find((column) => column.name === name)!);\n\t\tthis.#json = columns.filter(\n\t\t\t(column): column is Extract<Column, { readonly type: \"json\" }> => column.type === \"json\",\n\t\t);\n\t\tthis.#names = new Set(columns.map(({ name }) => name));\n\t\tthis.#keyNames = new Set(key);\n\t\tthis.#keyPositions = key.map((name) => columns.findIndex((column) => column.name === name));\n\t\tthis.#table = table;\n\t\tthis.physical = physicalColumns(columns);\n\t}\n\n\t/**\n\t * Checks and encodes a `put` row of table version `version` (a trust boundary): a plain object with every\n\t * non-`opt` column (a defaulted one filled in) and no other field; `invalid/args` otherwise.\n\t */\n\tput(row: unknown, version: number): EncodedRow {\n\t\tconst what = `${this.#table}: put`;\n\t\tconst fields = this.#closed(row, this.#names, what);\n\t\tconst params: SqliteValue[] = [];\n\t\tconst stored: { [column: string]: Scalar | JsonValue } = {};\n\t\tconst versions: { [column: string]: number } = {};\n\t\tfor (const column of this.#columns) {\n\t\t\tlet value = fields[column.name];\n\t\t\tif (value === undefined && column.type !== \"json\") value = column.default;\n\t\t\tif (value === undefined) {\n\t\t\t\tif (!column.optional) throw invalid(\"args\", `${what}: column \"${column.name}\" is missing`);\n\t\t\t\tparams.push(null);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst cell = encodeCell(column, value, `${what}: column \"${column.name}\"`);\n\t\t\tparams.push(cell.param);\n\t\t\tstored[column.name] = cell.stored;\n\t\t}\n\t\tfor (const column of this.#json) {\n\t\t\tconst present = Object.hasOwn(stored, column.name);\n\t\t\tif (present) versions[column.name] = column.json.version;\n\t\t\tparams.push(present ? column.json.version : null);\n\t\t}\n\t\tparams.push(version);\n\t\tconst id = JSON.stringify(this.#keyPositions.map((position) => params[position]));\n\t\treturn { params, row: stored, columns: versions, id };\n\t}\n\n\t/** Checks and encodes a key (a trust boundary): an object with exactly the key columns; `invalid/args` otherwise. */\n\tkey(key: unknown, what: string): EncodedKey {\n\t\tconst fields = this.#closed(key, this.#keyNames, `${this.#table}: ${what}: the key`);\n\t\tconst params: SqliteValue[] = [];\n\t\tconst stored: { [column: string]: Scalar } = {};\n\t\tfor (const column of this.#key) {\n\t\t\tconst value = fields[column.name];\n\t\t\tconst where = `${this.#table}: ${what}: key column \"${column.name}\"`;\n\t\t\tif (value === undefined) throw invalid(\"args\", `${where} is missing`);\n\t\t\tconst cell = encodeScalar(column, value, where);\n\t\t\tparams.push(cell);\n\t\t\tstored[column.name] = cell;\n\t\t}\n\t\treturn { params, key: stored, id: JSON.stringify(params) };\n\t}\n\n\t/**\n\t * A stored row as reads return it: booleans from 0 and 1, `opt(...)` columns absent when `NULL`, `json(...)` cells\n\t * parsed and migrated on access (a cell the code cannot read throws, see `JsonColumn.read`).\n\t */\n\tdecode(stored: { readonly [column: string]: SqliteValue }, context: Context): { [column: string]: unknown } {\n\t\tconst row: { [column: string]: unknown } = {};\n\t\tfor (const column of this.#columns) {\n\t\t\tconst value = stored[column.name];\n\t\t\tif (value === null || value === undefined) continue;\n\t\t\tif (column.type === \"bool\") row[column.name] = value === 1;\n\t\t\telse if (column.type === \"json\") {\n\t\t\t\tconst version = stored[versionColumn(column.name)] as number;\n\t\t\t\trow[column.name] = column.json.read(value as string, version, `${this.#table}.${column.name}`, context);\n\t\t\t} else row[column.name] = value;\n\t\t}\n\t\treturn row;\n\t}\n\n\t/** `value`'s own fields when it is a plain object with only fields of `names`; `invalid/args` otherwise. */\n\t#closed(value: unknown, names: ReadonlySet<string>, what: string): { readonly [field: string]: unknown } {\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tthrow invalid(\"args\", `${what}: expected an object`);\n\t\t}\n\t\tfor (const field of Object.keys(value)) {\n\t\t\tif (!names.has(field)) throw invalid(\"args\", `${what}: unknown column \"${field}\"`);\n\t\t}\n\t\t// Checked above: a plain object with known fields.\n\t\treturn value as { readonly [field: string]: unknown };\n\t}\n}\n\n/** A checked cell: what is bound and what is recorded. */\ntype Cell = { readonly param: SqliteValue; readonly stored: Scalar | JsonValue };\n\n/** Checks and encodes a value of `column`; a `json(...)` value is serialized, not walked (R9). */\nexport function encodeCell(column: Column, value: unknown, what: string): Cell {\n\tif (column.type !== \"json\") {\n\t\tconst stored = checkScalar(column.type, value, what);\n\t\treturn { param: toSqlite(stored), stored };\n\t}\n\tlet text: string | undefined;\n\ttry {\n\t\ttext = JSON.stringify(value);\n\t} catch (error) {\n\t\tthrow invalid(\"args\", `${what}: not JSON (${error instanceof Error ? error.message : String(error)})`);\n\t}\n\tif (text === undefined) throw invalid(\"args\", `${what}: not JSON`);\n\t// `JSON.stringify` accepted it; the recorded value is the one serialized. It is kept, not copied or parsed back:\n\t// same-host values are immutable by convention, so the outbox serializing it again in the step records this text\n\t// (a plugin mutating a value after `tx.put` breaks that convention, as for any other value it hands over).\n\treturn { param: text, stored: value as JsonValue };\n}\n\n/** Checks a scalar value of `column` and returns what is bound (booleans as 0 and 1). */\nfunction encodeScalar(column: Column, value: unknown, what: string): string | number {\n\tif (column.type === \"json\") throw invalid(\"args\", `${what}: a json(...) column has no scalar value`);\n\treturn toSqlite(checkScalar(column.type, value, what));\n}\n\n/**\n * A value of a scalar column type as the store keeps it (a trust boundary): `str` well-formed without NUL, `int` a\n * safe integer, `num` finite, `bool` a boolean; `invalid/args` otherwise.\n */\nexport function checkScalar(type: \"str\" | \"int\" | \"num\" | \"bool\", value: unknown, what: string): Scalar {\n\tswitch (type) {\n\t\tcase \"str\":\n\t\t\tif (typeof value === \"string\") return storedText(value, what);\n\t\t\tbreak;\n\t\tcase \"int\":\n\t\t\tif (Number.isSafeInteger(value)) return value as number;\n\t\t\tbreak;\n\t\tcase \"num\":\n\t\t\tif (typeof value === \"number\" && Number.isFinite(value)) return value;\n\t\t\tbreak;\n\t\tcase \"bool\":\n\t\t\tif (typeof value === \"boolean\") return value;\n\t\t\tbreak;\n\t}\n\tthrow invalid(\"args\", `${what}: ${JSON.stringify(value) ?? String(value)} is not a ${type} value`);\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import { type SqliteDatabase } from "../sqlite/index.ts";
2
+ /** The store's tables. */
3
+ export declare const TABLES: {
4
+ readonly meta: "chord_meta";
5
+ readonly tables: "chord_tables";
6
+ readonly documents: "chord_documents";
7
+ readonly revisions: "chord_revisions";
8
+ readonly outbox: "chord_outbox";
9
+ };
10
+ /** The store's schema version: the newest entry of its history (archives carry it). */
11
+ export declare const STORE_SCHEMA: number;
12
+ /** The store's metadata row, as `openStore` reads it once. */
13
+ export type MetaRow = {
14
+ readonly last_seq: number;
15
+ readonly next_id: number;
16
+ readonly outbox: number;
17
+ readonly outbox_floor: number;
18
+ };
19
+ /**
20
+ * Brings `db` to the store's newest schema (one transaction) and checks that it stores text as UTF-8 (the store
21
+ * compares text by its bytes); returns the metadata row. A store already there is read in one statement, without the
22
+ * migrations' write transaction (most opens: the cost of a reopen).
23
+ */
24
+ export declare function applyStoreSchema(db: SqliteDatabase): Promise<MetaRow>;
25
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,KAAK,cAAc,EAAwB,MAAM,oBAAoB,CAAC;AAEtG,0BAA0B;AAC1B,eAAO,MAAM,MAAM;aAClB,IAAI,EAAE,YAAY;aAClB,MAAM,EAAE,cAAc;aACtB,SAAS,EAAE,iBAAiB;aAC5B,SAAS,EAAE,iBAAiB;aAC5B,MAAM,EAAE,cAAc;CACb,CAAC;AAmEX,uFAAuF;AACvF,eAAO,MAAM,YAAY,QAA6B,CAAC;AAEvD,8DAA8D;AAC9D,MAAM,MAAM,OAAO,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAY3E"}
@@ -0,0 +1,115 @@
1
+ // The store's own SQL schema (slice 6a §2): its metadata, the recorded table definitions, the documents engine's
2
+ // records and revisions, and the outbox; versioned by `applySqliteMigrations`. Declared tables are named
3
+ // `"<owner>:<table>"`, so no name here can meet one of them.
4
+ import { applySqliteMigrations } from "../sqlite/index.js";
5
+ /** The store's tables. */
6
+ export const TABLES = {
7
+ meta: "chord_meta",
8
+ tables: "chord_tables",
9
+ documents: "chord_documents",
10
+ revisions: "chord_revisions",
11
+ outbox: "chord_outbox",
12
+ };
13
+ /**
14
+ * The schema history; never change an entry, append one (nothing is deployed yet: slice 6b changed entry 1 in place).
15
+ * `chord_meta` is one row: `last_seq`, the allocator's next id (D3; from 2, id 1 is Durable's root conversation), and
16
+ * the outbox setting with its floor (the seq it starts after, advanced by `trim`). A document record keeps its
17
+ * history rule (R1), its current base's version and fingerprint and a `revision` counter for the conditional
18
+ * `UPDATE`; the partial unique index refuses two live records at one address. Entry 2 adds the indexes of reads at a
19
+ * point (slice 6b §1.5): an address's incarnations by creation, an owner's namespace by id, a document's bases (a
20
+ * partial index: deltas write no entry).
21
+ */
22
+ const MIGRATIONS = [
23
+ {
24
+ version: 1,
25
+ statements: [
26
+ `CREATE TABLE ${TABLES.meta} (
27
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
28
+ last_seq INTEGER NOT NULL,
29
+ next_id INTEGER NOT NULL,
30
+ outbox INTEGER NOT NULL CHECK (outbox IN (0, 1)),
31
+ outbox_floor INTEGER NOT NULL
32
+ ) STRICT`,
33
+ `INSERT INTO ${TABLES.meta} (singleton, last_seq, next_id, outbox, outbox_floor) VALUES (1, 0, 2, 0, 0)`,
34
+ `CREATE TABLE ${TABLES.tables} (name TEXT PRIMARY KEY, definition TEXT NOT NULL) STRICT, WITHOUT ROWID`,
35
+ `CREATE TABLE ${TABLES.documents} (
36
+ id INTEGER PRIMARY KEY,
37
+ owner TEXT NOT NULL,
38
+ namespace TEXT NOT NULL,
39
+ kind TEXT NOT NULL,
40
+ key TEXT NOT NULL,
41
+ history TEXT NOT NULL CHECK (history IN ('none', 'latest', 'rewindable')),
42
+ created_at INTEGER NOT NULL,
43
+ retired_at INTEGER,
44
+ meta TEXT,
45
+ revision INTEGER NOT NULL,
46
+ version INTEGER NOT NULL,
47
+ fingerprint TEXT NOT NULL
48
+ ) STRICT`,
49
+ `CREATE UNIQUE INDEX chord_documents_live ON ${TABLES.documents} (owner, namespace, kind, key)
50
+ WHERE retired_at IS NULL`,
51
+ `CREATE TABLE ${TABLES.revisions} (
52
+ document_id INTEGER NOT NULL,
53
+ seq INTEGER NOT NULL,
54
+ kind TEXT NOT NULL CHECK (kind IN ('base', 'delta')),
55
+ version INTEGER NOT NULL,
56
+ content TEXT NOT NULL,
57
+ PRIMARY KEY (document_id, seq)
58
+ ) STRICT, WITHOUT ROWID`,
59
+ `CREATE TABLE ${TABLES.outbox} (
60
+ seq INTEGER PRIMARY KEY,
61
+ format INTEGER NOT NULL,
62
+ next_id INTEGER NOT NULL,
63
+ writes TEXT NOT NULL
64
+ ) STRICT`,
65
+ ],
66
+ },
67
+ {
68
+ version: 2,
69
+ statements: [
70
+ `CREATE INDEX chord_documents_address ON ${TABLES.documents} (owner, namespace, kind, key, created_at)`,
71
+ `CREATE INDEX chord_documents_scope ON ${TABLES.documents} (owner, namespace, id)`,
72
+ // Only bases are looked up by it (a load's newest base at or below a point): deltas write no entry.
73
+ `CREATE INDEX chord_revisions_bases ON ${TABLES.revisions} (document_id, seq) WHERE kind = 'base'`,
74
+ ],
75
+ },
76
+ ];
77
+ /** The store's schema version: the newest entry of its history (archives carry it). */
78
+ export const STORE_SCHEMA = MIGRATIONS.at(-1).version;
79
+ /**
80
+ * Brings `db` to the store's newest schema (one transaction) and checks that it stores text as UTF-8 (the store
81
+ * compares text by its bytes); returns the metadata row. A store already there is read in one statement, without the
82
+ * migrations' write transaction (most opens: the cost of a reopen).
83
+ */
84
+ export async function applyStoreSchema(db) {
85
+ const current = await currentMeta(db);
86
+ if (current !== undefined)
87
+ return current;
88
+ const encoding = await db.get("PRAGMA encoding");
89
+ if (encoding?.encoding !== "UTF-8")
90
+ throw new Error(`store: the database encoding is ${encoding?.encoding}, not UTF-8`);
91
+ await applySqliteMigrations(db, MIGRATIONS, { table: "chord_store_schema" });
92
+ const meta = await db.get(`SELECT last_seq, next_id, outbox, outbox_floor FROM ${TABLES.meta} WHERE singleton = 1`);
93
+ if (meta === undefined)
94
+ throw new Error("store: the metadata row is missing");
95
+ return meta;
96
+ }
97
+ /** The schema version, the encoding and the metadata row of a store, in one read. */
98
+ const CURRENT_META = `SELECT s.version, e.encoding, m.last_seq, m.next_id, m.outbox, m.outbox_floor
99
+ FROM chord_store_schema s, pragma_encoding e, ${TABLES.meta} m WHERE s.singleton = 1 AND m.singleton = 1`;
100
+ /** The metadata row of a store at the newest schema in UTF-8; `undefined` for any other database. */
101
+ async function currentMeta(db) {
102
+ let row;
103
+ try {
104
+ row = await db.get(CURRENT_META);
105
+ }
106
+ catch {
107
+ // A database without the store's tables (new, or not a store) or a backend without `pragma_encoding`: the
108
+ // migrations' path creates, refuses or reads it.
109
+ return undefined;
110
+ }
111
+ if (row === undefined || row.version !== STORE_SCHEMA || row.encoding !== "UTF-8")
112
+ return undefined;
113
+ return { last_seq: row.last_seq, next_id: row.next_id, outbox: row.outbox, outbox_floor: row.outbox_floor };
114
+ }
115
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA,iHAAiH;AACjH,yGAAyG;AACzG,6DAA6D;AAE7D,OAAO,EAAE,qBAAqB,EAA6C,MAAM,oBAAoB,CAAC;AAEtG,0BAA0B;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,cAAc;CACb,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,UAAU,GAA+B;IAC9C;QACC,OAAO,EAAE,CAAC;QACV,UAAU,EAAE;YACX,gBAAgB,MAAM,CAAC,IAAI;;;;;;YAMlB;YACT,eAAe,MAAM,CAAC,IAAI,8EAA8E;YACxG,gBAAgB,MAAM,CAAC,MAAM,0EAA0E;YACvG,gBAAgB,MAAM,CAAC,SAAS;;;;;;;;;;;;;YAavB;YACT,+CAA+C,MAAM,CAAC,SAAS;6BACrC;YAC1B,gBAAgB,MAAM,CAAC,SAAS;;;;;;;2BAOR;YACxB,gBAAgB,MAAM,CAAC,MAAM;;;;;YAKpB;SACT;KACD;IACD;QACC,OAAO,EAAE,CAAC;QACV,UAAU,EAAE;YACX,2CAA2C,MAAM,CAAC,SAAS,4CAA4C;YACvG,yCAAyC,MAAM,CAAC,SAAS,yBAAyB;YAClF,oGAAoG;YACpG,yCAAyC,MAAM,CAAC,SAAS,yCAAyC;SAClG;KACD;CACD,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;AAUvD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAkB;IACxD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,GAAG,CAAgC,iBAAiB,CAAC,CAAC;IAChF,IAAI,QAAQ,EAAE,QAAQ,KAAK,OAAO;QACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,QAAQ,aAAa,CAAC,CAAC;IACrF,MAAM,qBAAqB,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CACxB,uDAAuD,MAAM,CAAC,IAAI,sBAAsB,CACxF,CAAC;IACF,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,YAAY,GAAG;iDAC4B,MAAM,CAAC,IAAI,8CAA8C,CAAC;AAE3G,qGAAqG;AACrG,KAAK,UAAU,WAAW,CAAC,EAAkB;IAC5C,IAAI,GAAoF,CAAC;IACzF,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,0GAA0G;QAC1G,iDAAiD;QACjD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACpG,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;AAC7G,CAAC","sourcesContent":["// The store's own SQL schema (slice 6a §2): its metadata, the recorded table definitions, the documents engine's\n// records and revisions, and the outbox; versioned by `applySqliteMigrations`. Declared tables are named\n// `\"<owner>:<table>\"`, so no name here can meet one of them.\n\nimport { applySqliteMigrations, type SqliteDatabase, type SqliteMigration } from \"../sqlite/index.ts\";\n\n/** The store's tables. */\nexport const TABLES = {\n\tmeta: \"chord_meta\",\n\ttables: \"chord_tables\",\n\tdocuments: \"chord_documents\",\n\trevisions: \"chord_revisions\",\n\toutbox: \"chord_outbox\",\n} as const;\n\n/**\n * The schema history; never change an entry, append one (nothing is deployed yet: slice 6b changed entry 1 in place).\n * `chord_meta` is one row: `last_seq`, the allocator's next id (D3; from 2, id 1 is Durable's root conversation), and\n * the outbox setting with its floor (the seq it starts after, advanced by `trim`). A document record keeps its\n * history rule (R1), its current base's version and fingerprint and a `revision` counter for the conditional\n * `UPDATE`; the partial unique index refuses two live records at one address. Entry 2 adds the indexes of reads at a\n * point (slice 6b §1.5): an address's incarnations by creation, an owner's namespace by id, a document's bases (a\n * partial index: deltas write no entry).\n */\nconst MIGRATIONS: readonly SqliteMigration[] = [\n\t{\n\t\tversion: 1,\n\t\tstatements: [\n\t\t\t`CREATE TABLE ${TABLES.meta} (\n\t\t\t\tsingleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n\t\t\t\tlast_seq INTEGER NOT NULL,\n\t\t\t\tnext_id INTEGER NOT NULL,\n\t\t\t\toutbox INTEGER NOT NULL CHECK (outbox IN (0, 1)),\n\t\t\t\toutbox_floor INTEGER NOT NULL\n\t\t\t) STRICT`,\n\t\t\t`INSERT INTO ${TABLES.meta} (singleton, last_seq, next_id, outbox, outbox_floor) VALUES (1, 0, 2, 0, 0)`,\n\t\t\t`CREATE TABLE ${TABLES.tables} (name TEXT PRIMARY KEY, definition TEXT NOT NULL) STRICT, WITHOUT ROWID`,\n\t\t\t`CREATE TABLE ${TABLES.documents} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\towner TEXT NOT NULL,\n\t\t\t\tnamespace TEXT NOT NULL,\n\t\t\t\tkind TEXT NOT NULL,\n\t\t\t\tkey TEXT NOT NULL,\n\t\t\t\thistory TEXT NOT NULL CHECK (history IN ('none', 'latest', 'rewindable')),\n\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\tretired_at INTEGER,\n\t\t\t\tmeta TEXT,\n\t\t\t\trevision INTEGER NOT NULL,\n\t\t\t\tversion INTEGER NOT NULL,\n\t\t\t\tfingerprint TEXT NOT NULL\n\t\t\t) STRICT`,\n\t\t\t`CREATE UNIQUE INDEX chord_documents_live ON ${TABLES.documents} (owner, namespace, kind, key)\n\t\t\t\tWHERE retired_at IS NULL`,\n\t\t\t`CREATE TABLE ${TABLES.revisions} (\n\t\t\t\tdocument_id INTEGER NOT NULL,\n\t\t\t\tseq INTEGER NOT NULL,\n\t\t\t\tkind TEXT NOT NULL CHECK (kind IN ('base', 'delta')),\n\t\t\t\tversion INTEGER NOT NULL,\n\t\t\t\tcontent TEXT NOT NULL,\n\t\t\t\tPRIMARY KEY (document_id, seq)\n\t\t\t) STRICT, WITHOUT ROWID`,\n\t\t\t`CREATE TABLE ${TABLES.outbox} (\n\t\t\t\tseq INTEGER PRIMARY KEY,\n\t\t\t\tformat INTEGER NOT NULL,\n\t\t\t\tnext_id INTEGER NOT NULL,\n\t\t\t\twrites TEXT NOT NULL\n\t\t\t) STRICT`,\n\t\t],\n\t},\n\t{\n\t\tversion: 2,\n\t\tstatements: [\n\t\t\t`CREATE INDEX chord_documents_address ON ${TABLES.documents} (owner, namespace, kind, key, created_at)`,\n\t\t\t`CREATE INDEX chord_documents_scope ON ${TABLES.documents} (owner, namespace, id)`,\n\t\t\t// Only bases are looked up by it (a load's newest base at or below a point): deltas write no entry.\n\t\t\t`CREATE INDEX chord_revisions_bases ON ${TABLES.revisions} (document_id, seq) WHERE kind = 'base'`,\n\t\t],\n\t},\n];\n\n/** The store's schema version: the newest entry of its history (archives carry it). */\nexport const STORE_SCHEMA = MIGRATIONS.at(-1)!.version;\n\n/** The store's metadata row, as `openStore` reads it once. */\nexport type MetaRow = {\n\treadonly last_seq: number;\n\treadonly next_id: number;\n\treadonly outbox: number;\n\treadonly outbox_floor: number;\n};\n\n/**\n * Brings `db` to the store's newest schema (one transaction) and checks that it stores text as UTF-8 (the store\n * compares text by its bytes); returns the metadata row. A store already there is read in one statement, without the\n * migrations' write transaction (most opens: the cost of a reopen).\n */\nexport async function applyStoreSchema(db: SqliteDatabase): Promise<MetaRow> {\n\tconst current = await currentMeta(db);\n\tif (current !== undefined) return current;\n\tconst encoding = await db.get<{ readonly encoding: string }>(\"PRAGMA encoding\");\n\tif (encoding?.encoding !== \"UTF-8\")\n\t\tthrow new Error(`store: the database encoding is ${encoding?.encoding}, not UTF-8`);\n\tawait applySqliteMigrations(db, MIGRATIONS, { table: \"chord_store_schema\" });\n\tconst meta = await db.get<MetaRow>(\n\t\t`SELECT last_seq, next_id, outbox, outbox_floor FROM ${TABLES.meta} WHERE singleton = 1`,\n\t);\n\tif (meta === undefined) throw new Error(\"store: the metadata row is missing\");\n\treturn meta;\n}\n\n/** The schema version, the encoding and the metadata row of a store, in one read. */\nconst CURRENT_META = `SELECT s.version, e.encoding, m.last_seq, m.next_id, m.outbox, m.outbox_floor\n\tFROM chord_store_schema s, pragma_encoding e, ${TABLES.meta} m WHERE s.singleton = 1 AND m.singleton = 1`;\n\n/** The metadata row of a store at the newest schema in UTF-8; `undefined` for any other database. */\nasync function currentMeta(db: SqliteDatabase): Promise<MetaRow | undefined> {\n\tlet row: (MetaRow & { readonly version: number; readonly encoding: string }) | undefined;\n\ttry {\n\t\trow = await db.get(CURRENT_META);\n\t} catch {\n\t\t// A database without the store's tables (new, or not a store) or a backend without `pragma_encoding`: the\n\t\t// migrations' path creates, refuses or reads it.\n\t\treturn undefined;\n\t}\n\tif (row === undefined || row.version !== STORE_SCHEMA || row.encoding !== \"UTF-8\") return undefined;\n\treturn { last_seq: row.last_seq, next_id: row.next_id, outbox: row.outbox, outbox_floor: row.outbox_floor };\n}\n"]}
@@ -0,0 +1,73 @@
1
+ import type { SqliteValue } from "../sqlite/index.ts";
2
+ import type { Column, ColumnRecord } from "./columns.ts";
3
+ import type { SetNode, WhereNode } from "./expression.ts";
4
+ /** A statement and its parameters. */
5
+ export type Statement = {
6
+ readonly sql: string;
7
+ readonly params: SqliteValue[];
8
+ };
9
+ /** An order of rows: the order columns (the key appended as the tie-break) and one direction. */
10
+ export type Order = {
11
+ readonly columns: readonly string[];
12
+ readonly direction: "asc" | "desc";
13
+ };
14
+ /** A quoted SQL identifier. */
15
+ export declare function quote(name: string): string;
16
+ /** The SQL name of an owner's table: `<owner>:<table>` (R2), injective since neither part contains `:`. */
17
+ export declare function tableSqlName(owner: string, table: string): string;
18
+ /**
19
+ * `CREATE TABLE` for `columns` (as recorded) and `key`: `STRICT`, the key as primary key (`WITHOUT ROWID`, except
20
+ * for a single `int` key, which becomes the rowid: the fastest point lookups, and rows of any size), an `int`
21
+ * column checked within ±(2^53 - 1) (rule 10), a `bool` one within 0 and 1, a `json(...)` one as `TEXT` with its
22
+ * version column, and the row's `$v`.
23
+ */
24
+ export declare function createTableSql(table: string, columns: {
25
+ readonly [name: string]: ColumnRecord;
26
+ }, key: readonly string[]): string;
27
+ /** The definitions of one column: itself, and a `json(...)` column's version column. */
28
+ export declare function columnSql(name: string, column: ColumnRecord): string[];
29
+ /**
30
+ * The physical columns of a recorded table in the order `RowCodec.physical` uses (`physicalColumns`), and its
31
+ * whole-row `INSERT OR REPLACE` over them.
32
+ */
33
+ export declare function recordedPut(table: string, columns: {
34
+ readonly [name: string]: ColumnRecord;
35
+ }): {
36
+ readonly physical: readonly string[];
37
+ readonly sql: string;
38
+ };
39
+ /** `CREATE INDEX` named `<table>:<index>` over `columns`, the key appended (every index ends with it). */
40
+ export declare function createIndexSql(table: string, index: string, columns: readonly string[], key: readonly string[]): string;
41
+ /** `DROP INDEX` of `<table>:<index>`. */
42
+ export declare function dropIndexSql(table: string, index: string): string;
43
+ /**
44
+ * The statements of one table at one version, rendered once per table handle: the fixed ones as texts, the ones
45
+ * over compiled conditions and `set`s on demand.
46
+ */
47
+ export declare class TableSql {
48
+ #private;
49
+ readonly table: string;
50
+ /** `INSERT OR REPLACE` of a whole row, in `RowCodec.physical`'s order (`put` is an upsert). */
51
+ readonly put: string;
52
+ readonly get: string;
53
+ readonly delete: string;
54
+ constructor(table: string, columns: readonly Pick<Column, "name" | "type">[], physical: readonly string[], key: readonly string[]);
55
+ /** `SELECT` of `columns` of one row by key: a point lookup, without the `ORDER BY` and `LIMIT` of a page. */
56
+ getColumns(columns: readonly string[]): string;
57
+ /** `UPDATE` of one row by key; `versions` gives each `json(...)` column's version to stamp. */
58
+ update(set: SetNode, key: readonly SqliteValue[], versions: ReadonlyMap<string, number>): Statement;
59
+ /** `UPDATE` of every row matching `where`. */
60
+ updateWhere(where: WhereNode, set: SetNode, versions: ReadonlyMap<string, number>): Statement;
61
+ /** `DELETE` of every row matching `where`. */
62
+ deleteWhere(where: WhereNode): Statement;
63
+ /**
64
+ * A page: rows matching `where` in `order`, after the order values `after` (row-value comparison; the key in the
65
+ * order makes it total), at most `limit` (bound); every column, or only `columns`.
66
+ */
67
+ select(where: WhereNode | undefined, order: Order, after: readonly SqliteValue[] | undefined, limit: number, columns?: readonly string[]): Statement;
68
+ /** `count(*)` of the rows matching `where`. */
69
+ count(where: WhereNode | undefined): Statement;
70
+ }
71
+ /** A condition with its operands bound; SQL's `NULL` rules are the vocabulary's. */
72
+ export declare function whereSql(node: WhereNode, params: SqliteValue[]): string;
73
+ //# sourceMappingURL=sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/store/sql.ts"],"names":[],"mappings":"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"}