@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,387 @@
1
+ // Jobs (§15), in memory: the handle `self.job` returns, one per attempt, over the job's records on its object. It
2
+ // holds the implementation and the invocations: `run` runs outside transactions, `finish` in one with the cleanup,
3
+ // both on the attempt that is live; the attempt's seal cuts its invocations off (slice 6a §1.3). Each phase of a run
4
+ // (its start's intent, its run, its finish) is a `chord.job` span, under the run's stored carrier or its starter's span.
5
+ import { withAbortSignal, withoutAbortSignal, withTelemetry } from "../context/index.js";
6
+ import { ChordError, isChordError, PluginError } from "../data/index.js";
7
+ import { sleep } from "../host/index.js";
8
+ import { CallContext, nextDelay, SpanCtx } from "../host/internal.js";
9
+ import { capped, chordSpans, ended, OpenSpan, parentOf, spanFailed, untraced } from "../telemetry.js";
10
+ /** Failed finishes in a row after which a run is blocked. */
11
+ const FINISH_ATTEMPTS = 5;
12
+ /**
13
+ * A job as one attempt declares it: its implementation and the invocations and finishes running on the attempt. Starts
14
+ * are taken while the attempt is live; the object's records keep the runs.
15
+ */
16
+ export class Job {
17
+ #records;
18
+ /** The definition its attempt declared: its invocations get args in its version, whatever the records' is now. */
19
+ #definition;
20
+ #implementation;
21
+ #owner;
22
+ /** `declared` until the attempt is live (starts are refused), `sealed` once it is sealed. */
23
+ #state = "declared";
24
+ /** Runs whose `run` runs on this attempt. */
25
+ #invocations = new Set();
26
+ /** The seal's error and cut reason, once sealed: a reservation committing after it cuts its run off with them. */
27
+ #sealed;
28
+ /** Runs whose finish runs on this attempt. */
29
+ #finishing = new Set();
30
+ constructor(records, implementation, owner) {
31
+ this.#records = records;
32
+ // Its attempt's declaration redefined the records just before (`ChordObject.jobRecords`).
33
+ this.#definition = records.definition;
34
+ this.#implementation = implementation;
35
+ this.#owner = owner;
36
+ }
37
+ get running() {
38
+ // Its value is the list of entries `JobRun.entryFor` builds.
39
+ return this.#records.running;
40
+ }
41
+ async start(args, context, options = {}) {
42
+ const { documents, token } = this.#owner;
43
+ const parent = context.telemetry;
44
+ if (untraced(parent))
45
+ return documents.tx((tx) => this.stage(tx, args, context, options), token, context);
46
+ // The intent: the start's transaction, in its span (the run keeps it: its later phases are its children).
47
+ const attributes = {
48
+ "chord.host": this.#owner.host.spanHost,
49
+ job: this.#definition.name,
50
+ phase: "intent",
51
+ object: capped(documents.label),
52
+ };
53
+ return chordSpans(parent)("chord.job", attributes, async (span) => {
54
+ const traced = withTelemetry(span, context);
55
+ try {
56
+ const run = await documents.tx((tx) => this.stage(tx, args, traced, options), token, traced);
57
+ span.setAttributes({ outcome: "ok", "job.id": run.id });
58
+ return run;
59
+ }
60
+ catch (error) {
61
+ span.setAttributes({ outcome: ended(span, "job_failed", error, context.abortSignal) });
62
+ throw error;
63
+ }
64
+ });
65
+ }
66
+ outcome(id, context) {
67
+ return this.#records.outcome(id, context);
68
+ }
69
+ abort(id, context) {
70
+ return this.#records.abort(id, context);
71
+ }
72
+ /** A persisted job's runs, loaded once per object at its first activation (before it goes live). */
73
+ load(context) {
74
+ return this.#records.load(context);
75
+ }
76
+ /** The close writer of this job's runs, after the attempt's drain (slice 6b §4.2). */
77
+ writeAtClose(context) {
78
+ return this.#records.writeAtClose(context);
79
+ }
80
+ /** The attempt went live: starts are taken, and the records' waiting runs are invoked or finished here. */
81
+ live() {
82
+ if (this.#state !== "declared")
83
+ return;
84
+ this.#state = "live";
85
+ this.#records.attach(this);
86
+ }
87
+ /**
88
+ * Stages a run in `tx` (`start`, `tx.start`), in order: the args checked, dedupe by key (runs started earlier in
89
+ * `tx` included), the concurrency check, then the record and the state document, created in the commit. The run
90
+ * whose finish `tx` is counts for neither: `finish` may start the same job again, with the same key too. Returns
91
+ * the run's handle at once; a start that only dedupes stages nothing.
92
+ */
93
+ stage(tx, args, context, options) {
94
+ // Declaration policy: a handle belongs to its object (types cannot say whose transaction this is).
95
+ if (tx.documents !== this.#owner.documents) {
96
+ throw new Error(`${this.#owner.documents.label}: a transaction starts only its own object's jobs`);
97
+ }
98
+ if (this.#state === "sealed") {
99
+ throw new ChordError({
100
+ code: "released",
101
+ reason: "ended",
102
+ message: `${this.#records.name}: its attempt ended`,
103
+ });
104
+ }
105
+ if (this.#state === "declared") {
106
+ throw new ChordError({ code: "not_ready", message: `${this.#records.name}: its object is not live yet` });
107
+ }
108
+ return this.#records.stage(tx, args, context, options);
109
+ }
110
+ /**
111
+ * The attempt is sealed with `error`: starts are refused, running invocations are cut off (their signals fire, in
112
+ * memory they end `aborted` with `reason` and finish on the next live attempt, persisted ones are stopped and
113
+ * resumed, R3), and the runs finishing here wait for it.
114
+ */
115
+ seal(error, reason) {
116
+ if (this.#state === "sealed")
117
+ return;
118
+ this.#state = "sealed";
119
+ this.#sealed = { error, reason };
120
+ this.#records.detach(this, this.#finishing);
121
+ this.#finishing.clear();
122
+ for (const run of this.#invocations)
123
+ this.#records.cut(run, error, reason);
124
+ this.#invocations.clear();
125
+ }
126
+ /**
127
+ * Runs `run` for a committed run (with its signal aborted already after an early abort); a persisted run's
128
+ * reservation commits first (`running`: a crash from then on counts, D6). The reservation, the invocation and the
129
+ * run's finish are one piece of work in the drain, admitted before plugin code runs: `run` may end its own object
130
+ * before its first await.
131
+ */
132
+ invoke(run) {
133
+ const invocation = run.begin();
134
+ if (!this.#records.persisted || run.phase === "running") {
135
+ this.#start(run, invocation);
136
+ return;
137
+ }
138
+ const { documents, token, context } = this.#owner;
139
+ const reserving = documents
140
+ .tx((tx) => this.#records.reserve(tx, run), token, context)
141
+ .then(() => {
142
+ if (this.#state !== "sealed") {
143
+ this.#start(run, invocation);
144
+ return;
145
+ }
146
+ this.#records.cut(run, this.#sealed.error, this.#sealed.reason);
147
+ // No `run` started: nothing else ends it, and an abort joined to it returns.
148
+ invocation.ended();
149
+ }, () => {
150
+ invocation.settle();
151
+ invocation.ended();
152
+ // Refused because this attempt was sealed (at admission, or queued past the seal): the run is pending still,
153
+ // for the next live attempt (this one is detached already). Any other failure (the store closed or failed,
154
+ // the object ended) is not retried here: retrying on this attempt would only fail again.
155
+ if (this.#state === "sealed")
156
+ this.#records.requeue(run);
157
+ });
158
+ this.#owner.admit(reserving);
159
+ }
160
+ /**
161
+ * Starts `invocation` of `run` on this attempt, in its run phase's span: its ctx and its settling act for this
162
+ * invocation only.
163
+ */
164
+ #start(run, invocation) {
165
+ const { context, caller, host } = this.#owner;
166
+ const signal = invocation.abort.signal;
167
+ const span = this.#phaseSpan(run, "run");
168
+ const scope = withAbortSignal(signal, context);
169
+ const ctx = new JobContext(span === undefined ? scope : withTelemetry(span.span, scope), caller, host, run.id, this.#stateOf(run, invocation));
170
+ const work = Promise.withResolvers();
171
+ this.#owner.admitRun(work.promise, () => ctx.settle());
172
+ this.#invocations.add(run);
173
+ const running = (async () => {
174
+ try {
175
+ // Its own version's args: a run started by old work during a restart runs on the old code (its definition).
176
+ return await this.#implementation.run(this.#records.argsOf(run, this.#definition), ctx);
177
+ }
178
+ finally {
179
+ // The fence closes as `run` settles: a change made later is refused.
180
+ invocation.settle();
181
+ }
182
+ })();
183
+ running
184
+ .then((result) => this.#settled(run, invocation, ctx, { kind: "done", result }), (error) => this.#settled(run, invocation, ctx, this.#failed(run, invocation, error)))
185
+ .finally(() => invocation.ended())
186
+ .then(work.resolve);
187
+ span?.endWhen(running, "job_failed", signal);
188
+ }
189
+ /**
190
+ * The span of `run`'s phase `phase`, under its start's carrier (a persisted run resumed in a new attempt or process
191
+ * too: the same trace; without one the adapter's root); none when nothing records.
192
+ */
193
+ #phaseSpan(run, phase) {
194
+ const { host, documents } = this.#owner;
195
+ const parent = parentOf(run.trace, host.telemetry);
196
+ if (untraced(parent))
197
+ return undefined;
198
+ return new OpenSpan(parent, "chord.job", {
199
+ "chord.host": host.spanHost,
200
+ job: this.#definition.name,
201
+ phase,
202
+ object: capped(documents.label),
203
+ "job.id": run.id,
204
+ });
205
+ }
206
+ /**
207
+ * Runs the finish of `run`, whose outcome is recorded: `finish` with the cleanup in one transaction under the
208
+ * attempt's token, retried with backoff after a throw (reported), blocked after five in a row. The attempt's seal
209
+ * stops it without a report or a count; the next live attempt finishes the run.
210
+ */
211
+ finish(run) {
212
+ const work = this.#finish(run);
213
+ this.#owner.admit(work);
214
+ }
215
+ /** How a throwing `run` ended: `aborted` after its invocation's signal fired, otherwise `threw` (reported). */
216
+ #failed(run, invocation, error) {
217
+ if (invocation.abort.signal.aborted)
218
+ return { kind: "failed", error: { kind: "aborted", reason: "abort" } };
219
+ this.#records.report({ kind: "job_failed", id: run.id, error });
220
+ const thrown = isChordError(error) || error instanceof PluginError ? error : internal(error);
221
+ return { kind: "failed", error: { kind: "threw", error: thrown } };
222
+ }
223
+ /**
224
+ * `invocation` of `run` settled: its `ctx.get` references go; its outcome is recorded unless the attempt's seal cut
225
+ * it off (which recorded its own, or stopped the run for a later invocation), then the run finishes here while this
226
+ * attempt is live.
227
+ */
228
+ async #settled(run, invocation, ctx, ended) {
229
+ ctx.settle();
230
+ if (invocation.token.sealed || run.invocation !== invocation)
231
+ return;
232
+ this.#invocations.delete(run);
233
+ this.#records.settled(run, ended);
234
+ }
235
+ /**
236
+ * `run`'s finish phase in its span: each failed try a `chord.retry` event with its backoff; ends `ok`, `error`
237
+ * (blocked) or `aborted` (the attempt's seal).
238
+ */
239
+ async #finish(run) {
240
+ const span = this.#phaseSpan(run, "finish");
241
+ const { context } = this.#owner;
242
+ let outcome = "error";
243
+ try {
244
+ outcome = await this.#finishTries(run, span, span === undefined ? context : withTelemetry(span.span, context));
245
+ }
246
+ finally {
247
+ span?.span.setAttributes({ outcome });
248
+ span?.end();
249
+ }
250
+ }
251
+ /** The tries of `run`'s finish under `context`, retried with backoff; how the phase ended. */
252
+ async #finishTries(run, span, context) {
253
+ const { documents, token, signal } = this.#owner;
254
+ this.#finishing.add(run);
255
+ let delay;
256
+ try {
257
+ for (;;) {
258
+ try {
259
+ await documents.tx(async (tx) => {
260
+ const staging = this.#records.staging(tx);
261
+ staging.finishing = run;
262
+ await this.#implementation.finish?.(this.#records.outcomeOf(run, context), tx);
263
+ this.#records.change(tx, { kind: "delete", run });
264
+ }, token, context);
265
+ return "ok";
266
+ }
267
+ catch (error) {
268
+ if (this.#state === "sealed")
269
+ return "aborted";
270
+ this.#records.report({ kind: "job_finish_failed", id: run.id, error });
271
+ // The count is the run's (stored for a persisted job): failures count across a crash.
272
+ const finishFailures = run.finishFailures + 1;
273
+ if (finishFailures >= FINISH_ATTEMPTS) {
274
+ if (span !== undefined)
275
+ spanFailed(span.span, "job_failed", error);
276
+ await this.#records.record(run, { kind: "block", run, reason: "finish_failed" });
277
+ return "error";
278
+ }
279
+ await this.#records.record(run, { kind: "update", run, fields: { finishFailures } });
280
+ delay = nextDelay(delay);
281
+ span?.span.addEvent("chord.retry", { backoff: delay });
282
+ try {
283
+ await sleep(delay, withAbortSignal(signal, context));
284
+ }
285
+ catch {
286
+ return "aborted";
287
+ }
288
+ }
289
+ }
290
+ }
291
+ finally {
292
+ this.#finishing.delete(run);
293
+ }
294
+ }
295
+ /** `ctx.state` of `invocation` of `run`, when the job has a state: changes under its token while it runs. */
296
+ #stateOf(run, invocation) {
297
+ const records = this.#records;
298
+ const states = records.states;
299
+ if (states === undefined)
300
+ return undefined;
301
+ const { documents } = this.#owner;
302
+ const refused = () => new ChordError({
303
+ code: "released",
304
+ reason: "settled",
305
+ message: `${records.name}: run ${run.id} settled; its state is closed`,
306
+ });
307
+ return {
308
+ get value() {
309
+ const value = records.stateOf(run.id);
310
+ if (value === undefined)
311
+ throw refused();
312
+ return value;
313
+ },
314
+ change: (fn, context, options = {}) => {
315
+ if (invocation.state !== "running")
316
+ return Promise.reject(refused());
317
+ let persistence;
318
+ try {
319
+ persistence = checkedPersistence(options.persistence, records.name);
320
+ }
321
+ catch (error) {
322
+ return Promise.reject(error);
323
+ }
324
+ // Never the abort signal: a run records its progress also after an abort.
325
+ const unaborted = withoutAbortSignal(context);
326
+ // A change resetting the restart count is stored at once: the reset must be durable (D8).
327
+ const now = run.restarts === 0 ? persistence : IMMEDIATE;
328
+ return documents.tx(async (tx) => {
329
+ const value = fn(await tx.draftSlot(states, run.id));
330
+ records.progressed(tx, run);
331
+ return value;
332
+ }, invocation.token, unaborted, now);
333
+ },
334
+ };
335
+ }
336
+ }
337
+ const IMMEDIATE = { kind: "immediate" };
338
+ /**
339
+ * A state change's `persistence` (a trust boundary: plugin code): `immediate` when omitted; a deferred one's `withinMs`
340
+ * a number from 0 (`Infinity` waits for the others), `invalid/args` otherwise.
341
+ */
342
+ function checkedPersistence(persistence, what) {
343
+ if (persistence === undefined || persistence.kind === "immediate")
344
+ return IMMEDIATE;
345
+ const { withinMs } = persistence;
346
+ if (persistence.kind !== "deferred" ||
347
+ (withinMs !== undefined && !(typeof withinMs === "number" && withinMs >= 0))) {
348
+ throw new ChordError({
349
+ code: "invalid",
350
+ reason: "args",
351
+ message: `${what}: persistence is immediate or deferred with withinMs >= 0`,
352
+ });
353
+ }
354
+ return persistence;
355
+ }
356
+ /** A plugin's throw that is neither a ChordError nor a PluginError, as a run's outcome keeps it. */
357
+ function internal(error) {
358
+ return new PluginError("internal", error instanceof Error ? error.message : String(error));
359
+ }
360
+ /** A run's ctx: the handler's ctx of its object, its id and, with a state, its state document. */
361
+ export class JobContext extends CallContext {
362
+ jobId;
363
+ constructor(context, caller, host, jobId, state) {
364
+ super(context, caller, host);
365
+ this.jobId = jobId;
366
+ if (state !== undefined)
367
+ this.state = state;
368
+ }
369
+ /** Its child under `span` (`ctx.trace`): a job's ctx still, its id and state kept. */
370
+ traced(span) {
371
+ return new JobSpanContext(this, span, this.jobId, this.state);
372
+ }
373
+ }
374
+ /** A run's ctx under a child span (`ctx.trace`): its parent's members, its run's id and state. */
375
+ class JobSpanContext extends SpanCtx {
376
+ jobId;
377
+ constructor(parent, span, jobId, state) {
378
+ super(parent, span);
379
+ this.jobId = jobId;
380
+ if (state !== undefined)
381
+ this.state = state;
382
+ }
383
+ traced(span) {
384
+ return new JobSpanContext(this, span, this.jobId, this.state);
385
+ }
386
+ }
387
+ //# sourceMappingURL=job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/jobs/job.ts"],"names":[],"mappings":"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","sourcesContent":["// Jobs (§15), in memory: the handle `self.job` returns, one per attempt, over the job's records on its object. It\n// holds the implementation and the invocations: `run` runs outside transactions, `finish` in one with the cleanup,\n// both on the attempt that is live; the attempt's seal cuts its invocations off (slice 6a §1.3). Each phase of a run\n// (its start's intent, its run, its finish) is a `chord.job` span, under the run's stored carrier or its starter's span.\n\nimport type { TelemetrySpan } from \"@earendil-works/pi-telemetry\";\nimport { type Context, withAbortSignal, withoutAbortSignal, withTelemetry } from \"../context/index.ts\";\nimport { ChordError, isChordError, PluginError, type Principal } from \"../data/index.ts\";\nimport type { Draft } from \"../delta/index.ts\";\nimport type { CommitPersistence, JsonObject, Tx } from \"../documents/index.ts\";\nimport type { Documents, SealToken, Transaction } from \"../documents/internal.ts\";\nimport { type Ctx, sleep } from \"../host/index.ts\";\nimport { type AnyHost, CallContext, type Caller, nextDelay, SpanCtx } from \"../host/internal.ts\";\nimport type { JsonValue } from \"../json.ts\";\nimport { capped, chordSpans, ended, OpenSpan, parentOf, spanFailed, untraced } from \"../telemetry.ts\";\nimport type { Watchable } from \"../watch.ts\";\nimport type { JobDefinition, Outcome } from \"./definition.ts\";\nimport type { JobRecords, Settled } from \"./records.ts\";\nimport type { AnyOutcome, Invocation, JobRun, Run } from \"./run.ts\";\nimport type { RunningEntry } from \"./running.ts\";\n\n/** A job's handle, `self.job(Job, { run, finish? })`; `A`, `R` and `S` are its args, result and state. */\nexport interface JobHandle<A, R, S> {\n\t/**\n\t * Starts a run in one transaction on the object's line and resolves with its `Run` after the commit: the args\n\t * checked (`invalid/args`); a `key` of an unsettled run returns that run; at the `concurrency` limit (running plus\n\t * finishing runs) it rejects `unavailable/busy`. `run` starts after the commit.\n\t */\n\tstart(args: A, context: Context, options?: StartOptions): Promise<Run<Outcome<A, R, S>>>;\n\t/** Waits for the outcome of the unsettled run `id`; a settled or unknown id rejects `gone`. */\n\toutcome(id: string, context: Context): Promise<Outcome<A, R, S>>;\n\t/**\n\t * Aborts run `id` (D7, as Durable's `abortTask`): marks it (stored for a persisted job) and fires its `run`'s\n\t * signal, resolving `\"marked\"` once its `run` settled (a run not invoked yet ends `aborted` without one); a\n\t * finishing run is only marked, a blocked one dropped (no `finish`; its waiters reject `aborted`). `\"terminal\"` when\n\t * no unsettled run has that id. `context` ends only this wait.\n\t */\n\tabort(id: string, context: Context): Promise<\"marked\" | \"terminal\">;\n\t/** The unsettled runs, one entry each in start order, tagged by phase (a JSON watchable, a state member). */\n\treadonly running: Watchable<readonly RunningEntry<A, S>[]>;\n}\n\n/** What `start` and `tx.start` take besides the args. */\nexport type StartOptions = {\n\t/** Names one run: a start with the key of an unsettled run returns that run (args not compared). */\n\treadonly key?: string;\n};\n\n/** What `self.job` takes: the run and the optional finish. */\nexport type JobImplementation<A, R, S, P extends Principal = Principal> = {\n\t/** The work, outside transactions; its ctx's abort signal fires on `abort(id)` and on its object's end. */\n\treadonly run: (args: A, ctx: JobCtx<P, S>) => Promise<R>;\n\t/** Records the outcome in one transaction (only `await tx.*`); the run's record and state document go with it. */\n\treadonly finish?: (outcome: Outcome<A, R, S>, tx: Tx) => void | Promise<void>;\n};\n\n/** A run's ctx: a handler's ctx (the object's principal or the host's), its run's id and, with a state, the state. */\nexport type JobCtx<P extends Principal, S> = Ctx<P> & { readonly jobId: string } & ([S] extends [undefined]\n\t\t? unknown\n\t\t: { readonly state: RunState<S> });\n\n/** A run's state document. */\nexport interface RunState<S> {\n\t/** The document's value. */\n\treadonly value: S;\n\t/**\n\t * One transaction on the object's line drafting only this document, under `context` without its abort signal:\n\t * admitted while `run` runs (also after an abort, with the run's own ctx), refused `released` once it settled. A\n\t * persisted job's change may be `deferred` (D8): adopted and published at once, stored within `withinMs` (1,000 ms by\n\t * default) or earlier; a crash loses it. In memory the option changes nothing.\n\t */\n\tchange<T>(\n\t\tfn: (draft: Draft<S>) => T,\n\t\tcontext: Context,\n\t\toptions?: { readonly persistence?: CommitPersistence },\n\t): Promise<T>;\n}\n\n/** Where a job's handle runs its work: its attempt, as the job sees it. */\nexport type JobOwner = {\n\treadonly host: AnyHost;\n\t/** Whom runs act for: the object's principal (remote) or the host's (local), from this host. */\n\treadonly caller: Caller;\n\t/** The object's context, without an abort signal: runs, state changes and finishes run under it. */\n\treadonly context: Context;\n\t/** Aborted when the attempt is sealed: a finish's backoff waits under it. */\n\treadonly signal: AbortSignal;\n\t/** The attempt's seal token: its starts and finishes are transactions under it. */\n\treadonly token: SealToken;\n\treadonly documents: Documents;\n\t/**\n\t * Adds running work (a finish, a reservation) to the attempt's calls drain; `cleanup` (its bookkeeping) runs once,\n\t * when it settles or when the attempt ends with it still running.\n\t */\n\tadmit(running: Promise<unknown>, cleanup?: () => void): void;\n\t/** Adds a run's invocation to the attempt's drain at its end, as `admit`. */\n\tadmitRun(running: Promise<unknown>, cleanup: () => void): void;\n};\n\n/**\n * Why a seal cuts a running in-memory run off: `restart` (its attempt ended while the object continues) or `reload`\n * (a native restart, slice 7b §8); its outcome is `failed { aborted }` with that reason.\n */\nexport type CutReason = \"restart\" | \"reload\";\n\n/** A job's implementation as Chord calls it, whatever the job's types. */\nexport type AnyJobImplementation = {\n\treadonly run: (args: JsonValue, ctx: JobContext) => Promise<unknown>;\n\treadonly finish?: (outcome: AnyOutcome, tx: Tx) => void | Promise<void>;\n};\n\n/** Failed finishes in a row after which a run is blocked. */\nconst FINISH_ATTEMPTS = 5;\n\n/**\n * A job as one attempt declares it: its implementation and the invocations and finishes running on the attempt. Starts\n * are taken while the attempt is live; the object's records keep the runs.\n */\nexport class Job implements JobHandle<JsonValue, unknown, JsonValue | undefined> {\n\treadonly #records: JobRecords;\n\t/** The definition its attempt declared: its invocations get args in its version, whatever the records' is now. */\n\treadonly #definition: JobDefinition<unknown, unknown, unknown>;\n\treadonly #implementation: AnyJobImplementation;\n\treadonly #owner: JobOwner;\n\t/** `declared` until the attempt is live (starts are refused), `sealed` once it is sealed. */\n\t#state: \"declared\" | \"live\" | \"sealed\" = \"declared\";\n\t/** Runs whose `run` runs on this attempt. */\n\treadonly #invocations = new Set<JobRun>();\n\t/** The seal's error and cut reason, once sealed: a reservation committing after it cuts its run off with them. */\n\t#sealed: { readonly error: ChordError; readonly reason: CutReason } | undefined;\n\t/** Runs whose finish runs on this attempt. */\n\treadonly #finishing = new Set<JobRun>();\n\n\tconstructor(records: JobRecords, implementation: AnyJobImplementation, owner: JobOwner) {\n\t\tthis.#records = records;\n\t\t// Its attempt's declaration redefined the records just before (`ChordObject.jobRecords`).\n\t\tthis.#definition = records.definition;\n\t\tthis.#implementation = implementation;\n\t\tthis.#owner = owner;\n\t}\n\n\tget running(): Watchable<readonly RunningEntry<JsonValue, JsonValue | undefined>[]> {\n\t\t// Its value is the list of entries `JobRun.entryFor` builds.\n\t\treturn this.#records.running as unknown as Watchable<readonly RunningEntry<JsonValue, JsonValue | undefined>[]>;\n\t}\n\n\tasync start(args: JsonValue, context: Context, options: StartOptions = {}): Promise<Run<AnyOutcome>> {\n\t\tconst { documents, token } = this.#owner;\n\t\tconst parent = context.telemetry;\n\t\tif (untraced(parent)) return documents.tx((tx) => this.stage(tx, args, context, options), token, context);\n\t\t// The intent: the start's transaction, in its span (the run keeps it: its later phases are its children).\n\t\tconst attributes = {\n\t\t\t\"chord.host\": this.#owner.host.spanHost,\n\t\t\tjob: this.#definition.name,\n\t\t\tphase: \"intent\",\n\t\t\tobject: capped(documents.label),\n\t\t} as const;\n\t\treturn chordSpans(parent)(\"chord.job\", attributes, async (span) => {\n\t\t\tconst traced = withTelemetry(span, context);\n\t\t\ttry {\n\t\t\t\tconst run = await documents.tx((tx) => this.stage(tx, args, traced, options), token, traced);\n\t\t\t\tspan.setAttributes({ outcome: \"ok\", \"job.id\": run.id });\n\t\t\t\treturn run;\n\t\t\t} catch (error) {\n\t\t\t\tspan.setAttributes({ outcome: ended(span, \"job_failed\", error, context.abortSignal) });\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\toutcome(id: string, context: Context): Promise<AnyOutcome> {\n\t\treturn this.#records.outcome(id, context);\n\t}\n\n\tabort(id: string, context: Context): Promise<\"marked\" | \"terminal\"> {\n\t\treturn this.#records.abort(id, context);\n\t}\n\n\t/** A persisted job's runs, loaded once per object at its first activation (before it goes live). */\n\tload(context: Context): Promise<void> {\n\t\treturn this.#records.load(context);\n\t}\n\n\t/** The close writer of this job's runs, after the attempt's drain (slice 6b §4.2). */\n\twriteAtClose(context: Context): Promise<void> {\n\t\treturn this.#records.writeAtClose(context);\n\t}\n\n\t/** The attempt went live: starts are taken, and the records' waiting runs are invoked or finished here. */\n\tlive(): void {\n\t\tif (this.#state !== \"declared\") return;\n\t\tthis.#state = \"live\";\n\t\tthis.#records.attach(this);\n\t}\n\n\t/**\n\t * Stages a run in `tx` (`start`, `tx.start`), in order: the args checked, dedupe by key (runs started earlier in\n\t * `tx` included), the concurrency check, then the record and the state document, created in the commit. The run\n\t * whose finish `tx` is counts for neither: `finish` may start the same job again, with the same key too. Returns\n\t * the run's handle at once; a start that only dedupes stages nothing.\n\t */\n\tstage(tx: Transaction, args: unknown, context: Context, options: StartOptions): Run<AnyOutcome> {\n\t\t// Declaration policy: a handle belongs to its object (types cannot say whose transaction this is).\n\t\tif (tx.documents !== this.#owner.documents) {\n\t\t\tthrow new Error(`${this.#owner.documents.label}: a transaction starts only its own object's jobs`);\n\t\t}\n\t\tif (this.#state === \"sealed\") {\n\t\t\tthrow new ChordError({\n\t\t\t\tcode: \"released\",\n\t\t\t\treason: \"ended\",\n\t\t\t\tmessage: `${this.#records.name}: its attempt ended`,\n\t\t\t});\n\t\t}\n\t\tif (this.#state === \"declared\") {\n\t\t\tthrow new ChordError({ code: \"not_ready\", message: `${this.#records.name}: its object is not live yet` });\n\t\t}\n\t\treturn this.#records.stage(tx, args, context, options);\n\t}\n\n\t/**\n\t * The attempt is sealed with `error`: starts are refused, running invocations are cut off (their signals fire, in\n\t * memory they end `aborted` with `reason` and finish on the next live attempt, persisted ones are stopped and\n\t * resumed, R3), and the runs finishing here wait for it.\n\t */\n\tseal(error: ChordError, reason: CutReason): void {\n\t\tif (this.#state === \"sealed\") return;\n\t\tthis.#state = \"sealed\";\n\t\tthis.#sealed = { error, reason };\n\t\tthis.#records.detach(this, this.#finishing);\n\t\tthis.#finishing.clear();\n\t\tfor (const run of this.#invocations) this.#records.cut(run, error, reason);\n\t\tthis.#invocations.clear();\n\t}\n\n\t/**\n\t * Runs `run` for a committed run (with its signal aborted already after an early abort); a persisted run's\n\t * reservation commits first (`running`: a crash from then on counts, D6). The reservation, the invocation and the\n\t * run's finish are one piece of work in the drain, admitted before plugin code runs: `run` may end its own object\n\t * before its first await.\n\t */\n\tinvoke(run: JobRun): void {\n\t\tconst invocation = run.begin();\n\t\tif (!this.#records.persisted || run.phase === \"running\") {\n\t\t\tthis.#start(run, invocation);\n\t\t\treturn;\n\t\t}\n\t\tconst { documents, token, context } = this.#owner;\n\t\tconst reserving = documents\n\t\t\t.tx((tx) => this.#records.reserve(tx, run), token, context)\n\t\t\t.then(\n\t\t\t\t() => {\n\t\t\t\t\tif (this.#state !== \"sealed\") {\n\t\t\t\t\t\tthis.#start(run, invocation);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.#records.cut(run, this.#sealed!.error, this.#sealed!.reason);\n\t\t\t\t\t// No `run` started: nothing else ends it, and an abort joined to it returns.\n\t\t\t\t\tinvocation.ended();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tinvocation.settle();\n\t\t\t\t\tinvocation.ended();\n\t\t\t\t\t// Refused because this attempt was sealed (at admission, or queued past the seal): the run is pending still,\n\t\t\t\t\t// for the next live attempt (this one is detached already). Any other failure (the store closed or failed,\n\t\t\t\t\t// the object ended) is not retried here: retrying on this attempt would only fail again.\n\t\t\t\t\tif (this.#state === \"sealed\") this.#records.requeue(run);\n\t\t\t\t},\n\t\t\t);\n\t\tthis.#owner.admit(reserving);\n\t}\n\n\t/**\n\t * Starts `invocation` of `run` on this attempt, in its run phase's span: its ctx and its settling act for this\n\t * invocation only.\n\t */\n\t#start(run: JobRun, invocation: Invocation): void {\n\t\tconst { context, caller, host } = this.#owner;\n\t\tconst signal = invocation.abort.signal;\n\t\tconst span = this.#phaseSpan(run, \"run\");\n\t\tconst scope = withAbortSignal(signal, context);\n\t\tconst ctx = new JobContext(\n\t\t\tspan === undefined ? scope : withTelemetry(span.span, scope),\n\t\t\tcaller,\n\t\t\thost,\n\t\t\trun.id,\n\t\t\tthis.#stateOf(run, invocation),\n\t\t);\n\t\tconst work = Promise.withResolvers<void>();\n\t\tthis.#owner.admitRun(work.promise, () => ctx.settle());\n\t\tthis.#invocations.add(run);\n\t\tconst running = (async () => {\n\t\t\ttry {\n\t\t\t\t// Its own version's args: a run started by old work during a restart runs on the old code (its definition).\n\t\t\t\treturn await this.#implementation.run(this.#records.argsOf(run, this.#definition), ctx);\n\t\t\t} finally {\n\t\t\t\t// The fence closes as `run` settles: a change made later is refused.\n\t\t\t\tinvocation.settle();\n\t\t\t}\n\t\t})();\n\t\trunning\n\t\t\t.then(\n\t\t\t\t(result) => this.#settled(run, invocation, ctx, { kind: \"done\", result }),\n\t\t\t\t(error: unknown) => this.#settled(run, invocation, ctx, this.#failed(run, invocation, error)),\n\t\t\t)\n\t\t\t.finally(() => invocation.ended())\n\t\t\t.then(work.resolve);\n\t\tspan?.endWhen(running, \"job_failed\", signal);\n\t}\n\n\t/**\n\t * The span of `run`'s phase `phase`, under its start's carrier (a persisted run resumed in a new attempt or process\n\t * too: the same trace; without one the adapter's root); none when nothing records.\n\t */\n\t#phaseSpan(run: JobRun, phase: \"run\" | \"finish\"): OpenSpan<\"chord.job\"> | undefined {\n\t\tconst { host, documents } = this.#owner;\n\t\tconst parent = parentOf(run.trace, host.telemetry);\n\t\tif (untraced(parent)) return undefined;\n\t\treturn new OpenSpan(parent, \"chord.job\", {\n\t\t\t\"chord.host\": host.spanHost,\n\t\t\tjob: this.#definition.name,\n\t\t\tphase,\n\t\t\tobject: capped(documents.label),\n\t\t\t\"job.id\": run.id,\n\t\t});\n\t}\n\n\t/**\n\t * Runs the finish of `run`, whose outcome is recorded: `finish` with the cleanup in one transaction under the\n\t * attempt's token, retried with backoff after a throw (reported), blocked after five in a row. The attempt's seal\n\t * stops it without a report or a count; the next live attempt finishes the run.\n\t */\n\tfinish(run: JobRun): void {\n\t\tconst work = this.#finish(run);\n\t\tthis.#owner.admit(work);\n\t}\n\n\t/** How a throwing `run` ended: `aborted` after its invocation's signal fired, otherwise `threw` (reported). */\n\t#failed(run: JobRun, invocation: Invocation, error: unknown): Settled {\n\t\tif (invocation.abort.signal.aborted) return { kind: \"failed\", error: { kind: \"aborted\", reason: \"abort\" } };\n\t\tthis.#records.report({ kind: \"job_failed\", id: run.id, error });\n\t\tconst thrown = isChordError(error) || error instanceof PluginError ? error : internal(error);\n\t\treturn { kind: \"failed\", error: { kind: \"threw\", error: thrown } };\n\t}\n\n\t/**\n\t * `invocation` of `run` settled: its `ctx.get` references go; its outcome is recorded unless the attempt's seal cut\n\t * it off (which recorded its own, or stopped the run for a later invocation), then the run finishes here while this\n\t * attempt is live.\n\t */\n\tasync #settled(run: JobRun, invocation: Invocation, ctx: JobContext, ended: Settled): Promise<void> {\n\t\tctx.settle();\n\t\tif (invocation.token.sealed || run.invocation !== invocation) return;\n\t\tthis.#invocations.delete(run);\n\t\tthis.#records.settled(run, ended);\n\t}\n\n\t/**\n\t * `run`'s finish phase in its span: each failed try a `chord.retry` event with its backoff; ends `ok`, `error`\n\t * (blocked) or `aborted` (the attempt's seal).\n\t */\n\tasync #finish(run: JobRun): Promise<void> {\n\t\tconst span = this.#phaseSpan(run, \"finish\");\n\t\tconst { context } = this.#owner;\n\t\tlet outcome: \"ok\" | \"error\" | \"aborted\" = \"error\";\n\t\ttry {\n\t\t\toutcome = await this.#finishTries(run, span, span === undefined ? context : withTelemetry(span.span, context));\n\t\t} finally {\n\t\t\tspan?.span.setAttributes({ outcome });\n\t\t\tspan?.end();\n\t\t}\n\t}\n\n\t/** The tries of `run`'s finish under `context`, retried with backoff; how the phase ended. */\n\tasync #finishTries(\n\t\trun: JobRun,\n\t\tspan: OpenSpan<\"chord.job\"> | undefined,\n\t\tcontext: Context,\n\t): Promise<\"ok\" | \"error\" | \"aborted\"> {\n\t\tconst { documents, token, signal } = this.#owner;\n\t\tthis.#finishing.add(run);\n\t\tlet delay: number | undefined;\n\t\ttry {\n\t\t\tfor (;;) {\n\t\t\t\ttry {\n\t\t\t\t\tawait documents.tx(\n\t\t\t\t\t\tasync (tx) => {\n\t\t\t\t\t\t\tconst staging = this.#records.staging(tx);\n\t\t\t\t\t\t\tstaging.finishing = run;\n\t\t\t\t\t\t\tawait this.#implementation.finish?.(this.#records.outcomeOf(run, context), tx);\n\t\t\t\t\t\t\tthis.#records.change(tx, { kind: \"delete\", run });\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn \"ok\";\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.#state === \"sealed\") return \"aborted\";\n\t\t\t\t\tthis.#records.report({ kind: \"job_finish_failed\", id: run.id, error });\n\t\t\t\t\t// The count is the run's (stored for a persisted job): failures count across a crash.\n\t\t\t\t\tconst finishFailures = run.finishFailures + 1;\n\t\t\t\t\tif (finishFailures >= FINISH_ATTEMPTS) {\n\t\t\t\t\t\tif (span !== undefined) spanFailed(span.span, \"job_failed\", error);\n\t\t\t\t\t\tawait this.#records.record(run, { kind: \"block\", run, reason: \"finish_failed\" });\n\t\t\t\t\t\treturn \"error\";\n\t\t\t\t\t}\n\t\t\t\t\tawait this.#records.record(run, { kind: \"update\", run, fields: { finishFailures } });\n\t\t\t\t\tdelay = nextDelay(delay);\n\t\t\t\t\tspan?.span.addEvent(\"chord.retry\", { backoff: delay });\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait sleep(delay, withAbortSignal(signal, context));\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn \"aborted\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.#finishing.delete(run);\n\t\t}\n\t}\n\n\t/** `ctx.state` of `invocation` of `run`, when the job has a state: changes under its token while it runs. */\n\t#stateOf(run: JobRun, invocation: Invocation): RunState<JsonObject> | undefined {\n\t\tconst records = this.#records;\n\t\tconst states = records.states;\n\t\tif (states === undefined) return undefined;\n\t\tconst { documents } = this.#owner;\n\t\tconst refused = (): ChordError =>\n\t\t\tnew ChordError({\n\t\t\t\tcode: \"released\",\n\t\t\t\treason: \"settled\",\n\t\t\t\tmessage: `${records.name}: run ${run.id} settled; its state is closed`,\n\t\t\t});\n\t\treturn {\n\t\t\tget value(): JsonObject {\n\t\t\t\tconst value = records.stateOf(run.id);\n\t\t\t\tif (value === undefined) throw refused();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tchange: <T>(\n\t\t\t\tfn: (draft: Draft<JsonObject>) => T,\n\t\t\t\tcontext: Context,\n\t\t\t\toptions: { readonly persistence?: CommitPersistence } = {},\n\t\t\t): Promise<T> => {\n\t\t\t\tif (invocation.state !== \"running\") return Promise.reject(refused());\n\t\t\t\tlet persistence: CommitPersistence;\n\t\t\t\ttry {\n\t\t\t\t\tpersistence = checkedPersistence(options.persistence, records.name);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t}\n\t\t\t\t// Never the abort signal: a run records its progress also after an abort.\n\t\t\t\tconst unaborted = withoutAbortSignal(context);\n\t\t\t\t// A change resetting the restart count is stored at once: the reset must be durable (D8).\n\t\t\t\tconst now = run.restarts === 0 ? persistence : IMMEDIATE;\n\t\t\t\treturn documents.tx(\n\t\t\t\t\tasync (tx) => {\n\t\t\t\t\t\tconst value = fn(await tx.draftSlot(states, run.id));\n\t\t\t\t\t\trecords.progressed(tx, run);\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tinvocation.token,\n\t\t\t\t\tunaborted,\n\t\t\t\t\tnow,\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t}\n}\n\nconst IMMEDIATE: CommitPersistence = { kind: \"immediate\" };\n\n/**\n * A state change's `persistence` (a trust boundary: plugin code): `immediate` when omitted; a deferred one's `withinMs`\n * a number from 0 (`Infinity` waits for the others), `invalid/args` otherwise.\n */\nfunction checkedPersistence(persistence: CommitPersistence | undefined, what: string): CommitPersistence {\n\tif (persistence === undefined || persistence.kind === \"immediate\") return IMMEDIATE;\n\tconst { withinMs } = persistence;\n\tif (\n\t\tpersistence.kind !== \"deferred\" ||\n\t\t(withinMs !== undefined && !(typeof withinMs === \"number\" && withinMs >= 0))\n\t) {\n\t\tthrow new ChordError({\n\t\t\tcode: \"invalid\",\n\t\t\treason: \"args\",\n\t\t\tmessage: `${what}: persistence is immediate or deferred with withinMs >= 0`,\n\t\t});\n\t}\n\treturn persistence;\n}\n\n/** A plugin's throw that is neither a ChordError nor a PluginError, as a run's outcome keeps it. */\nfunction internal(error: unknown): PluginError {\n\treturn new PluginError(\"internal\", error instanceof Error ? error.message : String(error));\n}\n\n/** A run's ctx: the handler's ctx of its object, its id and, with a state, its state document. */\nexport class JobContext extends CallContext {\n\treadonly jobId: string;\n\tdeclare readonly state: RunState<JsonObject> | undefined;\n\n\tconstructor(\n\t\tcontext: Context,\n\t\tcaller: Caller,\n\t\thost: AnyHost,\n\t\tjobId: string,\n\t\tstate: RunState<JsonObject> | undefined,\n\t) {\n\t\tsuper(context, caller, host);\n\t\tthis.jobId = jobId;\n\t\tif (state !== undefined) this.state = state;\n\t}\n\n\t/** Its child under `span` (`ctx.trace`): a job's ctx still, its id and state kept. */\n\toverride traced(span: TelemetrySpan): Ctx {\n\t\treturn new JobSpanContext(this, span, this.jobId, this.state);\n\t}\n}\n\n/** A run's ctx under a child span (`ctx.trace`): its parent's members, its run's id and state. */\nclass JobSpanContext extends SpanCtx {\n\treadonly jobId: string;\n\tdeclare readonly state: RunState<JsonObject> | undefined;\n\n\tconstructor(\n\t\tparent: JobContext | JobSpanContext,\n\t\tspan: TelemetrySpan,\n\t\tjobId: string,\n\t\tstate: RunState<JsonObject> | undefined,\n\t) {\n\t\tsuper(parent, span);\n\t\tthis.jobId = jobId;\n\t\tif (state !== undefined) this.state = state;\n\t}\n\n\toverride traced(span: TelemetrySpan): Ctx {\n\t\treturn new JobSpanContext(this, span, this.jobId, this.state);\n\t}\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import type { Context } from "../context/index.ts";
2
+ import type { Persistence, Stored } from "../documents/internal.ts";
3
+ import type { StagedWrite } from "../store/step.ts";
4
+ import { type StoredRun } from "./stored.ts";
5
+ /** A run record as a load found it: its run id, the record and what is stored of it. */
6
+ export type LoadedRecord = {
7
+ readonly id: string;
8
+ readonly record: StoredRun;
9
+ readonly stored: Stored;
10
+ };
11
+ /** The record documents of one persisted job's runs, and what is stored of each. */
12
+ export declare class PersistedRuns {
13
+ #private;
14
+ /** `records` and `states` are the job's record and state documents' store sides (`chord.jobs`, `chord.job-states`). */
15
+ constructor(records: Persistence, states: Persistence);
16
+ /**
17
+ * Stages run `id`'s record `record` into `writes` (rule 8: serialized now): its creation, or a new base of what is
18
+ * stored; returns the adoption, which takes what the commit stored.
19
+ */
20
+ stage(id: string, record: StoredRun, writes: StagedWrite[]): () => void;
21
+ /**
22
+ * Stages the retirement of run `id`'s record into `writes` (the run settled or was dropped), and of its state
23
+ * document when the run is of another job version; the adoption forgets them.
24
+ */
25
+ stageRetire(id: string, writes: StagedWrite[]): () => void;
26
+ /** Finds what is stored of run `id`'s state document (a run of another job version), keeping it for the drop. */
27
+ findBlockedState(id: string, context: Context): Promise<void>;
28
+ /**
29
+ * A run of another job version that a reload's code now takes (`retryBlocked`): its state document is the job's
30
+ * again (read, decoded and retired with its record as any run's), no longer one to retire undecoded.
31
+ */
32
+ forgetBlockedState(id: string): void;
33
+ /** Every stored record of the job, in run id order, page by page with plain reads (activation holds the line). */
34
+ load(context: Context): Promise<LoadedRecord[]>;
35
+ /** The object's documents are dropped: nothing is known of the store any more. */
36
+ drop(): void;
37
+ }
38
+ //# sourceMappingURL=persisted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persisted.d.ts","sourceRoot":"","sources":["../../src/jobs/persisted.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnE,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAKxG,oFAAoF;AACpF,qBAAa,aAAa;;IAOzB,uHAAuH;IACvH,YAAY,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAGpD;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAgBtE;IAED;;;OAGG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CASzD;IAED,iHAAiH;IAC3G,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE;IAED;;;OAGG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEnC;IAED,kHAAkH;IAC5G,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBpD;IAED,kFAAkF;IAClF,IAAI,IAAI,IAAI,CAGX;CACD"}
@@ -0,0 +1,95 @@
1
+ // A persisted job's run records in its object's store (slice 6b §4.1, D5): the record document of each unsettled run
2
+ // (namespace `chord.jobs`, kind the job name, key the run id, `history: none`), written whole in the transactions that
3
+ // change the run, and read once per object when it first activates; for a run of another job version, also what is
4
+ // stored of its state document (`chord.job-states`), never decoded, so its drop retires it whatever the code declares.
5
+ import { changeDocument, createDocument, retireDocument } from "../store/engine.js";
6
+ import { RUN_RECORD, recordOf } from "./stored.js";
7
+ /** The keys a load reads per page. */
8
+ const KEYS_PAGE = 100;
9
+ /** The record documents of one persisted job's runs, and what is stored of each. */
10
+ export class PersistedRuns {
11
+ #records;
12
+ #states;
13
+ #stored = new Map();
14
+ /** What is stored of the state documents of runs of another job version, by run id. */
15
+ #blockedStates = new Map();
16
+ /** `records` and `states` are the job's record and state documents' store sides (`chord.jobs`, `chord.job-states`). */
17
+ constructor(records, states) {
18
+ this.#records = records;
19
+ this.#states = states;
20
+ }
21
+ /**
22
+ * Stages run `id`'s record `record` into `writes` (rule 8: serialized now): its creation, or a new base of what is
23
+ * stored; returns the adoption, which takes what the commit stored.
24
+ */
25
+ stage(id, record, writes) {
26
+ const text = JSON.stringify(record);
27
+ const stored = this.#stored.get(id);
28
+ const { version, fingerprint } = RUN_RECORD;
29
+ const value = record;
30
+ if (stored === undefined) {
31
+ const created = { id: 0 };
32
+ writes.push(createDocument(this.#records.at(id), { version, fingerprint, value }, text, (made) => {
33
+ created.id = made;
34
+ }));
35
+ return () => this.#stored.set(id, { id: created.id, revision: 1, version, deltasSinceBase: 0 });
36
+ }
37
+ writes.push(changeDocument(stored.id, stored.revision, { kind: "base", version, fingerprint, value }, text));
38
+ return () => this.#stored.set(id, { ...stored, revision: stored.revision + 1 });
39
+ }
40
+ /**
41
+ * Stages the retirement of run `id`'s record into `writes` (the run settled or was dropped), and of its state
42
+ * document when the run is of another job version; the adoption forgets them.
43
+ */
44
+ stageRetire(id, writes) {
45
+ const stored = this.#stored.get(id);
46
+ if (stored !== undefined)
47
+ writes.push(retireDocument(stored.id, stored.revision));
48
+ const state = this.#blockedStates.get(id);
49
+ if (state !== undefined)
50
+ writes.push(retireDocument(state.id, state.revision));
51
+ return () => {
52
+ this.#stored.delete(id);
53
+ this.#blockedStates.delete(id);
54
+ };
55
+ }
56
+ /** Finds what is stored of run `id`'s state document (a run of another job version), keeping it for the drop. */
57
+ async findBlockedState(id, context) {
58
+ const found = await this.#states.find(id, context);
59
+ if (found !== undefined)
60
+ this.#blockedStates.set(id, found.stored);
61
+ }
62
+ /**
63
+ * A run of another job version that a reload's code now takes (`retryBlocked`): its state document is the job's
64
+ * again (read, decoded and retired with its record as any run's), no longer one to retire undecoded.
65
+ */
66
+ forgetBlockedState(id) {
67
+ this.#blockedStates.delete(id);
68
+ }
69
+ /** Every stored record of the job, in run id order, page by page with plain reads (activation holds the line). */
70
+ async load(context) {
71
+ const loaded = [];
72
+ let after;
73
+ for (;;) {
74
+ const keys = await this.#records.keys(after, KEYS_PAGE, context);
75
+ for (const id of keys) {
76
+ const document = await this.#records.read(id, context);
77
+ if (document === undefined)
78
+ continue;
79
+ const { record: stored, value, deltasSinceBase } = document;
80
+ const found = { id: stored.id, revision: stored.revision, version: stored.version, deltasSinceBase };
81
+ this.#stored.set(id, found);
82
+ loaded.push({ id, record: recordOf(value), stored: found });
83
+ }
84
+ if (keys.length < KEYS_PAGE)
85
+ return loaded;
86
+ after = keys.at(-1);
87
+ }
88
+ }
89
+ /** The object's documents are dropped: nothing is known of the store any more. */
90
+ drop() {
91
+ this.#stored.clear();
92
+ this.#blockedStates.clear();
93
+ }
94
+ }
95
+ //# sourceMappingURL=persisted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persisted.js","sourceRoot":"","sources":["../../src/jobs/persisted.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,uHAAuH;AACvH,mHAAmH;AACnH,uHAAuH;AAKvH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAKnE,sCAAsC;AACtC,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,oFAAoF;AACpF,MAAM,OAAO,aAAa;IAChB,QAAQ,CAAc;IACtB,OAAO,CAAc;IACrB,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,uFAAuF;IAC9E,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,uHAAuH;IACvH,YAAY,OAAoB,EAAE,MAAmB;QACpD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,EAAU,EAAE,MAAiB,EAAE,MAAqB;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;QAC5C,MAAM,KAAK,GAAG,MAA+B,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CACV,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACpF,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;YACnB,CAAC,CAAC,CACF,CAAC;YACF,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7G,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,EAAU,EAAE,MAAqB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/E,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC;IACH,CAAC;IAED,iHAAiH;IACjH,KAAK,CAAC,gBAAgB,CAAC,EAAU,EAAE,OAAgB;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,EAAU;QAC5B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,kHAAkH;IAClH,KAAK,CAAC,IAAI,CAAC,OAAgB;QAC1B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,IAAI,KAAyB,CAAC;QAC9B,SAAS,CAAC;YACT,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACjE,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,QAAQ,KAAK,SAAS;oBAAE,SAAS;gBACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC;gBAC5D,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;gBACrG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;gBAAE,OAAO,MAAM,CAAC;YAC3C,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IAED,kFAAkF;IAClF,IAAI;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACD","sourcesContent":["// A persisted job's run records in its object's store (slice 6b §4.1, D5): the record document of each unsettled run\n// (namespace `chord.jobs`, kind the job name, key the run id, `history: none`), written whole in the transactions that\n// change the run, and read once per object when it first activates; for a run of another job version, also what is\n// stored of its state document (`chord.job-states`), never decoded, so its drop retires it whatever the code declares.\n\nimport type { Context } from \"../context/index.ts\";\nimport type { JsonObject } from \"../documents/index.ts\";\nimport type { Persistence, Stored } from \"../documents/internal.ts\";\nimport { changeDocument, createDocument, retireDocument } from \"../store/engine.ts\";\nimport type { StagedWrite } from \"../store/step.ts\";\nimport { RUN_RECORD, recordOf, type StoredRun } from \"./stored.ts\";\n\n/** A run record as a load found it: its run id, the record and what is stored of it. */\nexport type LoadedRecord = { readonly id: string; readonly record: StoredRun; readonly stored: Stored };\n\n/** The keys a load reads per page. */\nconst KEYS_PAGE = 100;\n\n/** The record documents of one persisted job's runs, and what is stored of each. */\nexport class PersistedRuns {\n\treadonly #records: Persistence;\n\treadonly #states: Persistence;\n\treadonly #stored = new Map<string, Stored>();\n\t/** What is stored of the state documents of runs of another job version, by run id. */\n\treadonly #blockedStates = new Map<string, Stored>();\n\n\t/** `records` and `states` are the job's record and state documents' store sides (`chord.jobs`, `chord.job-states`). */\n\tconstructor(records: Persistence, states: Persistence) {\n\t\tthis.#records = records;\n\t\tthis.#states = states;\n\t}\n\n\t/**\n\t * Stages run `id`'s record `record` into `writes` (rule 8: serialized now): its creation, or a new base of what is\n\t * stored; returns the adoption, which takes what the commit stored.\n\t */\n\tstage(id: string, record: StoredRun, writes: StagedWrite[]): () => void {\n\t\tconst text = JSON.stringify(record);\n\t\tconst stored = this.#stored.get(id);\n\t\tconst { version, fingerprint } = RUN_RECORD;\n\t\tconst value = record as unknown as JsonObject;\n\t\tif (stored === undefined) {\n\t\t\tconst created = { id: 0 };\n\t\t\twrites.push(\n\t\t\t\tcreateDocument(this.#records.at(id), { version, fingerprint, value }, text, (made) => {\n\t\t\t\t\tcreated.id = made;\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn () => this.#stored.set(id, { id: created.id, revision: 1, version, deltasSinceBase: 0 });\n\t\t}\n\t\twrites.push(changeDocument(stored.id, stored.revision, { kind: \"base\", version, fingerprint, value }, text));\n\t\treturn () => this.#stored.set(id, { ...stored, revision: stored.revision + 1 });\n\t}\n\n\t/**\n\t * Stages the retirement of run `id`'s record into `writes` (the run settled or was dropped), and of its state\n\t * document when the run is of another job version; the adoption forgets them.\n\t */\n\tstageRetire(id: string, writes: StagedWrite[]): () => void {\n\t\tconst stored = this.#stored.get(id);\n\t\tif (stored !== undefined) writes.push(retireDocument(stored.id, stored.revision));\n\t\tconst state = this.#blockedStates.get(id);\n\t\tif (state !== undefined) writes.push(retireDocument(state.id, state.revision));\n\t\treturn () => {\n\t\t\tthis.#stored.delete(id);\n\t\t\tthis.#blockedStates.delete(id);\n\t\t};\n\t}\n\n\t/** Finds what is stored of run `id`'s state document (a run of another job version), keeping it for the drop. */\n\tasync findBlockedState(id: string, context: Context): Promise<void> {\n\t\tconst found = await this.#states.find(id, context);\n\t\tif (found !== undefined) this.#blockedStates.set(id, found.stored);\n\t}\n\n\t/**\n\t * A run of another job version that a reload's code now takes (`retryBlocked`): its state document is the job's\n\t * again (read, decoded and retired with its record as any run's), no longer one to retire undecoded.\n\t */\n\tforgetBlockedState(id: string): void {\n\t\tthis.#blockedStates.delete(id);\n\t}\n\n\t/** Every stored record of the job, in run id order, page by page with plain reads (activation holds the line). */\n\tasync load(context: Context): Promise<LoadedRecord[]> {\n\t\tconst loaded: LoadedRecord[] = [];\n\t\tlet after: string | undefined;\n\t\tfor (;;) {\n\t\t\tconst keys = await this.#records.keys(after, KEYS_PAGE, context);\n\t\t\tfor (const id of keys) {\n\t\t\t\tconst document = await this.#records.read(id, context);\n\t\t\t\tif (document === undefined) continue;\n\t\t\t\tconst { record: stored, value, deltasSinceBase } = document;\n\t\t\t\tconst found = { id: stored.id, revision: stored.revision, version: stored.version, deltasSinceBase };\n\t\t\t\tthis.#stored.set(id, found);\n\t\t\t\tloaded.push({ id, record: recordOf(value as JsonObject), stored: found });\n\t\t\t}\n\t\t\tif (keys.length < KEYS_PAGE) return loaded;\n\t\t\tafter = keys.at(-1);\n\t\t}\n\t}\n\n\t/** The object's documents are dropped: nothing is known of the store any more. */\n\tdrop(): void {\n\t\tthis.#stored.clear();\n\t\tthis.#blockedStates.clear();\n\t}\n}\n"]}