@earendil-works/chord 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +129 -10
  3. package/dist/cell.d.ts +7 -7
  4. package/dist/cell.d.ts.map +1 -1
  5. package/dist/cell.js.map +1 -1
  6. package/dist/context/index.d.ts +8 -0
  7. package/dist/context/index.d.ts.map +1 -1
  8. package/dist/context/index.js +15 -0
  9. package/dist/context/index.js.map +1 -1
  10. package/dist/contract.d.ts +51 -52
  11. package/dist/contract.d.ts.map +1 -1
  12. package/dist/contract.js +19 -24
  13. package/dist/contract.js.map +1 -1
  14. package/dist/delta/apply-immutable-trusted.js +3 -4
  15. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  16. package/dist/delta/diff.d.ts.map +1 -1
  17. package/dist/delta/diff.js +5 -3
  18. package/dist/delta/diff.js.map +1 -1
  19. package/dist/delta/index.d.ts +9 -1
  20. package/dist/delta/index.d.ts.map +1 -1
  21. package/dist/delta/index.js +15 -11
  22. package/dist/delta/index.js.map +1 -1
  23. package/dist/delta/pending.d.ts +36 -0
  24. package/dist/delta/pending.d.ts.map +1 -0
  25. package/dist/delta/pending.js +143 -0
  26. package/dist/delta/pending.js.map +1 -0
  27. package/dist/delta/tracker.d.ts +12 -0
  28. package/dist/delta/tracker.d.ts.map +1 -1
  29. package/dist/delta/tracker.js +109 -39
  30. package/dist/delta/tracker.js.map +1 -1
  31. package/dist/host.d.ts.map +1 -1
  32. package/dist/host.js +9 -7
  33. package/dist/host.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/next/contracts/accepts.d.ts +81 -0
  39. package/dist/next/contracts/accepts.d.ts.map +1 -0
  40. package/dist/next/contracts/accepts.js +123 -0
  41. package/dist/next/contracts/accepts.js.map +1 -0
  42. package/dist/next/contracts/contract.d.ts +121 -0
  43. package/dist/next/contracts/contract.d.ts.map +1 -0
  44. package/dist/next/contracts/contract.js +50 -0
  45. package/dist/next/contracts/contract.js.map +1 -0
  46. package/dist/next/contracts/declare.d.ts +107 -0
  47. package/dist/next/contracts/declare.d.ts.map +1 -0
  48. package/dist/next/contracts/declare.js +136 -0
  49. package/dist/next/contracts/declare.js.map +1 -0
  50. package/dist/next/contracts/evolve.d.ts +92 -0
  51. package/dist/next/contracts/evolve.d.ts.map +1 -0
  52. package/dist/next/contracts/evolve.js +179 -0
  53. package/dist/next/contracts/evolve.js.map +1 -0
  54. package/dist/next/contracts/fingerprint.d.ts +16 -0
  55. package/dist/next/contracts/fingerprint.d.ts.map +1 -0
  56. package/dist/next/contracts/fingerprint.js +50 -0
  57. package/dist/next/contracts/fingerprint.js.map +1 -0
  58. package/dist/next/contracts/history.d.ts +71 -0
  59. package/dist/next/contracts/history.d.ts.map +1 -0
  60. package/dist/next/contracts/history.js +3 -0
  61. package/dist/next/contracts/history.js.map +1 -0
  62. package/dist/next/contracts/host-kind.d.ts +40 -0
  63. package/dist/next/contracts/host-kind.d.ts.map +1 -0
  64. package/dist/next/contracts/host-kind.js +37 -0
  65. package/dist/next/contracts/host-kind.js.map +1 -0
  66. package/dist/next/contracts/index.d.ts +7 -0
  67. package/dist/next/contracts/index.d.ts.map +1 -0
  68. package/dist/next/contracts/index.js +6 -0
  69. package/dist/next/contracts/index.js.map +1 -0
  70. package/dist/next/contracts/internal.d.ts +10 -0
  71. package/dist/next/contracts/internal.d.ts.map +1 -0
  72. package/dist/next/contracts/internal.js +9 -0
  73. package/dist/next/contracts/internal.js.map +1 -0
  74. package/dist/next/contracts/names.d.ts +3 -0
  75. package/dist/next/contracts/names.d.ts.map +1 -0
  76. package/dist/next/contracts/names.js +13 -0
  77. package/dist/next/contracts/names.js.map +1 -0
  78. package/dist/next/contracts/params.d.ts +28 -0
  79. package/dist/next/contracts/params.d.ts.map +1 -0
  80. package/dist/next/contracts/params.js +50 -0
  81. package/dist/next/contracts/params.js.map +1 -0
  82. package/dist/next/contracts/schema.d.ts +102 -0
  83. package/dist/next/contracts/schema.d.ts.map +1 -0
  84. package/dist/next/contracts/schema.js +103 -0
  85. package/dist/next/contracts/schema.js.map +1 -0
  86. package/dist/next/contracts/snapshot.d.ts +16 -0
  87. package/dist/next/contracts/snapshot.d.ts.map +1 -0
  88. package/dist/next/contracts/snapshot.js +167 -0
  89. package/dist/next/contracts/snapshot.js.map +1 -0
  90. package/dist/next/data/args.d.ts +50 -0
  91. package/dist/next/data/args.d.ts.map +1 -0
  92. package/dist/next/data/args.js +83 -0
  93. package/dist/next/data/args.js.map +1 -0
  94. package/dist/next/data/errors.d.ts +73 -0
  95. package/dist/next/data/errors.d.ts.map +1 -0
  96. package/dist/next/data/errors.js +107 -0
  97. package/dist/next/data/errors.js.map +1 -0
  98. package/dist/next/data/failure.d.ts +26 -0
  99. package/dist/next/data/failure.d.ts.map +1 -0
  100. package/dist/next/data/failure.js +72 -0
  101. package/dist/next/data/failure.js.map +1 -0
  102. package/dist/next/data/index.d.ts +4 -0
  103. package/dist/next/data/index.d.ts.map +1 -0
  104. package/dist/next/data/index.js +4 -0
  105. package/dist/next/data/index.js.map +1 -0
  106. package/dist/next/data/internal.d.ts +7 -0
  107. package/dist/next/data/internal.d.ts.map +1 -0
  108. package/dist/next/data/internal.js +8 -0
  109. package/dist/next/data/internal.js.map +1 -0
  110. package/dist/next/data/params.d.ts +20 -0
  111. package/dist/next/data/params.d.ts.map +1 -0
  112. package/dist/next/data/params.js +31 -0
  113. package/dist/next/data/params.js.map +1 -0
  114. package/dist/next/data/principal.d.ts +17 -0
  115. package/dist/next/data/principal.d.ts.map +1 -0
  116. package/dist/next/data/principal.js +41 -0
  117. package/dist/next/data/principal.js.map +1 -0
  118. package/dist/next/data/validator.d.ts +12 -0
  119. package/dist/next/data/validator.d.ts.map +1 -0
  120. package/dist/next/data/validator.js +34 -0
  121. package/dist/next/data/validator.js.map +1 -0
  122. package/dist/next/documents/address-source.d.ts +20 -0
  123. package/dist/next/documents/address-source.d.ts.map +1 -0
  124. package/dist/next/documents/address-source.js +44 -0
  125. package/dist/next/documents/address-source.js.map +1 -0
  126. package/dist/next/documents/definition.d.ts +84 -0
  127. package/dist/next/documents/definition.d.ts.map +1 -0
  128. package/dist/next/documents/definition.js +73 -0
  129. package/dist/next/documents/definition.js.map +1 -0
  130. package/dist/next/documents/documents.d.ts +106 -0
  131. package/dist/next/documents/documents.d.ts.map +1 -0
  132. package/dist/next/documents/documents.js +224 -0
  133. package/dist/next/documents/documents.js.map +1 -0
  134. package/dist/next/documents/fence.d.ts +9 -0
  135. package/dist/next/documents/fence.d.ts.map +1 -0
  136. package/dist/next/documents/fence.js +15 -0
  137. package/dist/next/documents/fence.js.map +1 -0
  138. package/dist/next/documents/handles.d.ts +76 -0
  139. package/dist/next/documents/handles.d.ts.map +1 -0
  140. package/dist/next/documents/handles.js +66 -0
  141. package/dist/next/documents/handles.js.map +1 -0
  142. package/dist/next/documents/index.d.ts +4 -0
  143. package/dist/next/documents/index.d.ts.map +1 -0
  144. package/dist/next/documents/index.js +3 -0
  145. package/dist/next/documents/index.js.map +1 -0
  146. package/dist/next/documents/internal.d.ts +9 -0
  147. package/dist/next/documents/internal.d.ts.map +1 -0
  148. package/dist/next/documents/internal.js +9 -0
  149. package/dist/next/documents/internal.js.map +1 -0
  150. package/dist/next/documents/keyed-slot.d.ts +103 -0
  151. package/dist/next/documents/keyed-slot.d.ts.map +1 -0
  152. package/dist/next/documents/keyed-slot.js +395 -0
  153. package/dist/next/documents/keyed-slot.js.map +1 -0
  154. package/dist/next/documents/line.d.ts +7 -0
  155. package/dist/next/documents/line.d.ts.map +1 -0
  156. package/dist/next/documents/line.js +14 -0
  157. package/dist/next/documents/line.js.map +1 -0
  158. package/dist/next/documents/persistence.d.ts +104 -0
  159. package/dist/next/documents/persistence.d.ts.map +1 -0
  160. package/dist/next/documents/persistence.js +128 -0
  161. package/dist/next/documents/persistence.js.map +1 -0
  162. package/dist/next/documents/residency.d.ts +31 -0
  163. package/dist/next/documents/residency.d.ts.map +1 -0
  164. package/dist/next/documents/residency.js +93 -0
  165. package/dist/next/documents/residency.js.map +1 -0
  166. package/dist/next/documents/slot.d.ts +109 -0
  167. package/dist/next/documents/slot.d.ts.map +1 -0
  168. package/dist/next/documents/slot.js +181 -0
  169. package/dist/next/documents/slot.js.map +1 -0
  170. package/dist/next/documents/transaction.d.ts +133 -0
  171. package/dist/next/documents/transaction.d.ts.map +1 -0
  172. package/dist/next/documents/transaction.js +409 -0
  173. package/dist/next/documents/transaction.js.map +1 -0
  174. package/dist/next/host/activity.d.ts +31 -0
  175. package/dist/next/host/activity.d.ts.map +1 -0
  176. package/dist/next/host/activity.js +40 -0
  177. package/dist/next/host/activity.js.map +1 -0
  178. package/dist/next/host/adapted.d.ts +49 -0
  179. package/dist/next/host/adapted.d.ts.map +1 -0
  180. package/dist/next/host/adapted.js +214 -0
  181. package/dist/next/host/adapted.js.map +1 -0
  182. package/dist/next/host/attempt.d.ts +278 -0
  183. package/dist/next/host/attempt.d.ts.map +1 -0
  184. package/dist/next/host/attempt.js +1072 -0
  185. package/dist/next/host/attempt.js.map +1 -0
  186. package/dist/next/host/backoff.d.ts +29 -0
  187. package/dist/next/host/backoff.d.ts.map +1 -0
  188. package/dist/next/host/backoff.js +69 -0
  189. package/dist/next/host/backoff.js.map +1 -0
  190. package/dist/next/host/ctx.d.ts +47 -0
  191. package/dist/next/host/ctx.d.ts.map +1 -0
  192. package/dist/next/host/ctx.js +108 -0
  193. package/dist/next/host/ctx.js.map +1 -0
  194. package/dist/next/host/deadline.d.ts +12 -0
  195. package/dist/next/host/deadline.d.ts.map +1 -0
  196. package/dist/next/host/deadline.js +40 -0
  197. package/dist/next/host/deadline.js.map +1 -0
  198. package/dist/next/host/dependencies.d.ts +65 -0
  199. package/dist/next/host/dependencies.d.ts.map +1 -0
  200. package/dist/next/host/dependencies.js +115 -0
  201. package/dist/next/host/dependencies.js.map +1 -0
  202. package/dist/next/host/destination.d.ts +48 -0
  203. package/dist/next/host/destination.d.ts.map +1 -0
  204. package/dist/next/host/destination.js +101 -0
  205. package/dist/next/host/destination.js.map +1 -0
  206. package/dist/next/host/facet.d.ts +79 -0
  207. package/dist/next/host/facet.d.ts.map +1 -0
  208. package/dist/next/host/facet.js +55 -0
  209. package/dist/next/host/facet.js.map +1 -0
  210. package/dist/next/host/follow.d.ts +52 -0
  211. package/dist/next/host/follow.d.ts.map +1 -0
  212. package/dist/next/host/follow.js +207 -0
  213. package/dist/next/host/follow.js.map +1 -0
  214. package/dist/next/host/host.d.ts +495 -0
  215. package/dist/next/host/host.d.ts.map +1 -0
  216. package/dist/next/host/host.js +1075 -0
  217. package/dist/next/host/host.js.map +1 -0
  218. package/dist/next/host/index.d.ts +17 -0
  219. package/dist/next/host/index.d.ts.map +1 -0
  220. package/dist/next/host/index.js +6 -0
  221. package/dist/next/host/index.js.map +1 -0
  222. package/dist/next/host/internal.d.ts +10 -0
  223. package/dist/next/host/internal.d.ts.map +1 -0
  224. package/dist/next/host/internal.js +8 -0
  225. package/dist/next/host/internal.js.map +1 -0
  226. package/dist/next/host/members.d.ts +50 -0
  227. package/dist/next/host/members.d.ts.map +1 -0
  228. package/dist/next/host/members.js +107 -0
  229. package/dist/next/host/members.js.map +1 -0
  230. package/dist/next/host/native.d.ts +55 -0
  231. package/dist/next/host/native.d.ts.map +1 -0
  232. package/dist/next/host/native.js +92 -0
  233. package/dist/next/host/native.js.map +1 -0
  234. package/dist/next/host/object.d.ts +290 -0
  235. package/dist/next/host/object.d.ts.map +1 -0
  236. package/dist/next/host/object.js +1127 -0
  237. package/dist/next/host/object.js.map +1 -0
  238. package/dist/next/host/parked.d.ts +23 -0
  239. package/dist/next/host/parked.d.ts.map +1 -0
  240. package/dist/next/host/parked.js +79 -0
  241. package/dist/next/host/parked.js.map +1 -0
  242. package/dist/next/host/presence.d.ts +34 -0
  243. package/dist/next/host/presence.d.ts.map +1 -0
  244. package/dist/next/host/presence.js +117 -0
  245. package/dist/next/host/presence.js.map +1 -0
  246. package/dist/next/host/ref-state.d.ts +53 -0
  247. package/dist/next/host/ref-state.d.ts.map +1 -0
  248. package/dist/next/host/ref-state.js +83 -0
  249. package/dist/next/host/ref-state.js.map +1 -0
  250. package/dist/next/host/reference-keys.d.ts +36 -0
  251. package/dist/next/host/reference-keys.d.ts.map +1 -0
  252. package/dist/next/host/reference-keys.js +168 -0
  253. package/dist/next/host/reference-keys.js.map +1 -0
  254. package/dist/next/host/reference-source.d.ts +65 -0
  255. package/dist/next/host/reference-source.d.ts.map +1 -0
  256. package/dist/next/host/reference-source.js +285 -0
  257. package/dist/next/host/reference-source.js.map +1 -0
  258. package/dist/next/host/reference.d.ts +308 -0
  259. package/dist/next/host/reference.d.ts.map +1 -0
  260. package/dist/next/host/reference.js +775 -0
  261. package/dist/next/host/reference.js.map +1 -0
  262. package/dist/next/host/retry-on.d.ts +28 -0
  263. package/dist/next/host/retry-on.d.ts.map +1 -0
  264. package/dist/next/host/retry-on.js +52 -0
  265. package/dist/next/host/retry-on.js.map +1 -0
  266. package/dist/next/host/revocation.d.ts +16 -0
  267. package/dist/next/host/revocation.d.ts.map +1 -0
  268. package/dist/next/host/revocation.js +27 -0
  269. package/dist/next/host/revocation.js.map +1 -0
  270. package/dist/next/host/root.d.ts +27 -0
  271. package/dist/next/host/root.d.ts.map +1 -0
  272. package/dist/next/host/root.js +68 -0
  273. package/dist/next/host/root.js.map +1 -0
  274. package/dist/next/host/route.d.ts +64 -0
  275. package/dist/next/host/route.d.ts.map +1 -0
  276. package/dist/next/host/route.js +190 -0
  277. package/dist/next/host/route.js.map +1 -0
  278. package/dist/next/host/routines.d.ts +76 -0
  279. package/dist/next/host/routines.d.ts.map +1 -0
  280. package/dist/next/host/routines.js +350 -0
  281. package/dist/next/host/routines.js.map +1 -0
  282. package/dist/next/host/sleep.d.ts +9 -0
  283. package/dist/next/host/sleep.d.ts.map +1 -0
  284. package/dist/next/host/sleep.js +40 -0
  285. package/dist/next/host/sleep.js.map +1 -0
  286. package/dist/next/host/staging.d.ts +94 -0
  287. package/dist/next/host/staging.d.ts.map +1 -0
  288. package/dist/next/host/staging.js +302 -0
  289. package/dist/next/host/staging.js.map +1 -0
  290. package/dist/next/host/unbound.d.ts +30 -0
  291. package/dist/next/host/unbound.d.ts.map +1 -0
  292. package/dist/next/host/unbound.js +67 -0
  293. package/dist/next/host/unbound.js.map +1 -0
  294. package/dist/next/host/uuid.d.ts +3 -0
  295. package/dist/next/host/uuid.d.ts.map +1 -0
  296. package/dist/next/host/uuid.js +38 -0
  297. package/dist/next/host/uuid.js.map +1 -0
  298. package/dist/next/index.d.ts +28 -0
  299. package/dist/next/index.d.ts.map +1 -0
  300. package/dist/next/index.js +18 -0
  301. package/dist/next/index.js.map +1 -0
  302. package/dist/next/jobs/definition.d.ts +96 -0
  303. package/dist/next/jobs/definition.d.ts.map +1 -0
  304. package/dist/next/jobs/definition.js +83 -0
  305. package/dist/next/jobs/definition.js.map +1 -0
  306. package/dist/next/jobs/index.d.ts +5 -0
  307. package/dist/next/jobs/index.d.ts.map +1 -0
  308. package/dist/next/jobs/index.js +3 -0
  309. package/dist/next/jobs/index.js.map +1 -0
  310. package/dist/next/jobs/internal.d.ts +3 -0
  311. package/dist/next/jobs/internal.d.ts.map +1 -0
  312. package/dist/next/jobs/internal.js +4 -0
  313. package/dist/next/jobs/internal.js.map +1 -0
  314. package/dist/next/jobs/job.d.ts +152 -0
  315. package/dist/next/jobs/job.d.ts.map +1 -0
  316. package/dist/next/jobs/job.js +320 -0
  317. package/dist/next/jobs/job.js.map +1 -0
  318. package/dist/next/jobs/persisted.d.ts +38 -0
  319. package/dist/next/jobs/persisted.d.ts.map +1 -0
  320. package/dist/next/jobs/persisted.js +95 -0
  321. package/dist/next/jobs/persisted.js.map +1 -0
  322. package/dist/next/jobs/records.d.ts +231 -0
  323. package/dist/next/jobs/records.d.ts.map +1 -0
  324. package/dist/next/jobs/records.js +869 -0
  325. package/dist/next/jobs/records.js.map +1 -0
  326. package/dist/next/jobs/run-states.d.ts +69 -0
  327. package/dist/next/jobs/run-states.d.ts.map +1 -0
  328. package/dist/next/jobs/run-states.js +228 -0
  329. package/dist/next/jobs/run-states.js.map +1 -0
  330. package/dist/next/jobs/run.d.ts +113 -0
  331. package/dist/next/jobs/run.d.ts.map +1 -0
  332. package/dist/next/jobs/run.js +200 -0
  333. package/dist/next/jobs/run.js.map +1 -0
  334. package/dist/next/jobs/running.d.ts +44 -0
  335. package/dist/next/jobs/running.d.ts.map +1 -0
  336. package/dist/next/jobs/running.js +117 -0
  337. package/dist/next/jobs/running.js.map +1 -0
  338. package/dist/next/jobs/stored.d.ts +63 -0
  339. package/dist/next/jobs/stored.d.ts.map +1 -0
  340. package/dist/next/jobs/stored.js +55 -0
  341. package/dist/next/jobs/stored.js.map +1 -0
  342. package/dist/next/link/binary.d.ts +4 -0
  343. package/dist/next/link/binary.d.ts.map +1 -0
  344. package/dist/next/link/binary.js +534 -0
  345. package/dist/next/link/binary.js.map +1 -0
  346. package/dist/next/link/channel.d.ts +63 -0
  347. package/dist/next/link/channel.d.ts.map +1 -0
  348. package/dist/next/link/channel.js +202 -0
  349. package/dist/next/link/channel.js.map +1 -0
  350. package/dist/next/link/errors.d.ts +7 -0
  351. package/dist/next/link/errors.d.ts.map +1 -0
  352. package/dist/next/link/errors.js +21 -0
  353. package/dist/next/link/errors.js.map +1 -0
  354. package/dist/next/link/index.d.ts +8 -0
  355. package/dist/next/link/index.d.ts.map +1 -0
  356. package/dist/next/link/index.js +8 -0
  357. package/dist/next/link/index.js.map +1 -0
  358. package/dist/next/link/internal.d.ts +9 -0
  359. package/dist/next/link/internal.d.ts.map +1 -0
  360. package/dist/next/link/internal.js +10 -0
  361. package/dist/next/link/internal.js.map +1 -0
  362. package/dist/next/link/ipc.d.ts +22 -0
  363. package/dist/next/link/ipc.d.ts.map +1 -0
  364. package/dist/next/link/ipc.js +64 -0
  365. package/dist/next/link/ipc.js.map +1 -0
  366. package/dist/next/link/link.d.ts +34 -0
  367. package/dist/next/link/link.d.ts.map +1 -0
  368. package/dist/next/link/link.js +87 -0
  369. package/dist/next/link/link.js.map +1 -0
  370. package/dist/next/link/message.d.ts +249 -0
  371. package/dist/next/link/message.d.ts.map +1 -0
  372. package/dist/next/link/message.js +123 -0
  373. package/dist/next/link/message.js.map +1 -0
  374. package/dist/next/link/part.d.ts +80 -0
  375. package/dist/next/link/part.d.ts.map +1 -0
  376. package/dist/next/link/part.js +164 -0
  377. package/dist/next/link/part.js.map +1 -0
  378. package/dist/next/link/text.d.ts +6 -0
  379. package/dist/next/link/text.d.ts.map +1 -0
  380. package/dist/next/link/text.js +335 -0
  381. package/dist/next/link/text.js.map +1 -0
  382. package/dist/next/link/values.d.ts +40 -0
  383. package/dist/next/link/values.d.ts.map +1 -0
  384. package/dist/next/link/values.js +117 -0
  385. package/dist/next/link/values.js.map +1 -0
  386. package/dist/next/link/websocket.d.ts +26 -0
  387. package/dist/next/link/websocket.d.ts.map +1 -0
  388. package/dist/next/link/websocket.js +91 -0
  389. package/dist/next/link/websocket.js.map +1 -0
  390. package/dist/next/registries/contribution.d.ts +50 -0
  391. package/dist/next/registries/contribution.d.ts.map +1 -0
  392. package/dist/next/registries/contribution.js +129 -0
  393. package/dist/next/registries/contribution.js.map +1 -0
  394. package/dist/next/registries/entries.d.ts +18 -0
  395. package/dist/next/registries/entries.d.ts.map +1 -0
  396. package/dist/next/registries/entries.js +42 -0
  397. package/dist/next/registries/entries.js.map +1 -0
  398. package/dist/next/registries/index.d.ts +3 -0
  399. package/dist/next/registries/index.d.ts.map +1 -0
  400. package/dist/next/registries/index.js +5 -0
  401. package/dist/next/registries/index.js.map +1 -0
  402. package/dist/next/registries/internal.d.ts +4 -0
  403. package/dist/next/registries/internal.d.ts.map +1 -0
  404. package/dist/next/registries/internal.js +5 -0
  405. package/dist/next/registries/internal.js.map +1 -0
  406. package/dist/next/registries/record.d.ts +94 -0
  407. package/dist/next/registries/record.d.ts.map +1 -0
  408. package/dist/next/registries/record.js +253 -0
  409. package/dist/next/registries/record.js.map +1 -0
  410. package/dist/next/registries/registry.d.ts +74 -0
  411. package/dist/next/registries/registry.d.ts.map +1 -0
  412. package/dist/next/registries/registry.js +14 -0
  413. package/dist/next/registries/registry.js.map +1 -0
  414. package/dist/next/registries/value.d.ts +48 -0
  415. package/dist/next/registries/value.d.ts.map +1 -0
  416. package/dist/next/registries/value.js +199 -0
  417. package/dist/next/registries/value.js.map +1 -0
  418. package/dist/next/remote/calls.d.ts +25 -0
  419. package/dist/next/remote/calls.d.ts.map +1 -0
  420. package/dist/next/remote/calls.js +62 -0
  421. package/dist/next/remote/calls.js.map +1 -0
  422. package/dist/next/remote/consumer.d.ts +42 -0
  423. package/dist/next/remote/consumer.d.ts.map +1 -0
  424. package/dist/next/remote/consumer.js +343 -0
  425. package/dist/next/remote/consumer.js.map +1 -0
  426. package/dist/next/remote/hold.d.ts +130 -0
  427. package/dist/next/remote/hold.d.ts.map +1 -0
  428. package/dist/next/remote/hold.js +537 -0
  429. package/dist/next/remote/hold.js.map +1 -0
  430. package/dist/next/remote/host-link.d.ts +77 -0
  431. package/dist/next/remote/host-link.d.ts.map +1 -0
  432. package/dist/next/remote/host-link.js +182 -0
  433. package/dist/next/remote/host-link.js.map +1 -0
  434. package/dist/next/remote/internal.d.ts +6 -0
  435. package/dist/next/remote/internal.d.ts.map +1 -0
  436. package/dist/next/remote/internal.js +6 -0
  437. package/dist/next/remote/internal.js.map +1 -0
  438. package/dist/next/remote/path.d.ts +46 -0
  439. package/dist/next/remote/path.d.ts.map +1 -0
  440. package/dist/next/remote/path.js +73 -0
  441. package/dist/next/remote/path.js.map +1 -0
  442. package/dist/next/remote/provider.d.ts +76 -0
  443. package/dist/next/remote/provider.d.ts.map +1 -0
  444. package/dist/next/remote/provider.js +506 -0
  445. package/dist/next/remote/provider.js.map +1 -0
  446. package/dist/next/remote/relay.d.ts +58 -0
  447. package/dist/next/remote/relay.d.ts.map +1 -0
  448. package/dist/next/remote/relay.js +117 -0
  449. package/dist/next/remote/relay.js.map +1 -0
  450. package/dist/next/remote/remote-object.d.ts +133 -0
  451. package/dist/next/remote/remote-object.d.ts.map +1 -0
  452. package/dist/next/remote/remote-object.js +411 -0
  453. package/dist/next/remote/remote-object.js.map +1 -0
  454. package/dist/next/remote/replica.d.ts +59 -0
  455. package/dist/next/remote/replica.d.ts.map +1 -0
  456. package/dist/next/remote/replica.js +125 -0
  457. package/dist/next/remote/replica.js.map +1 -0
  458. package/dist/next/state/batch.d.ts +64 -0
  459. package/dist/next/state/batch.d.ts.map +1 -0
  460. package/dist/next/state/batch.js +163 -0
  461. package/dist/next/state/batch.js.map +1 -0
  462. package/dist/next/state/derive.d.ts +52 -0
  463. package/dist/next/state/derive.d.ts.map +1 -0
  464. package/dist/next/state/derive.js +182 -0
  465. package/dist/next/state/derive.js.map +1 -0
  466. package/dist/next/state/index.d.ts +6 -0
  467. package/dist/next/state/index.d.ts.map +1 -0
  468. package/dist/next/state/index.js +4 -0
  469. package/dist/next/state/index.js.map +1 -0
  470. package/dist/next/state/internal.d.ts +6 -0
  471. package/dist/next/state/internal.d.ts.map +1 -0
  472. package/dist/next/state/internal.js +8 -0
  473. package/dist/next/state/internal.js.map +1 -0
  474. package/dist/next/state/native-source.d.ts +106 -0
  475. package/dist/next/state/native-source.d.ts.map +1 -0
  476. package/dist/next/state/native-source.js +240 -0
  477. package/dist/next/state/native-source.js.map +1 -0
  478. package/dist/next/state/watchable.d.ts +114 -0
  479. package/dist/next/state/watchable.d.ts.map +1 -0
  480. package/dist/next/state/watchable.js +156 -0
  481. package/dist/next/state/watchable.js.map +1 -0
  482. package/dist/next/state/writable.d.ts +32 -0
  483. package/dist/next/state/writable.d.ts.map +1 -0
  484. package/dist/next/state/writable.js +49 -0
  485. package/dist/next/state/writable.js.map +1 -0
  486. package/dist/next/store/adapter.d.ts +67 -0
  487. package/dist/next/store/adapter.d.ts.map +1 -0
  488. package/dist/next/store/adapter.js +118 -0
  489. package/dist/next/store/adapter.js.map +1 -0
  490. package/dist/next/store/allocator.d.ts +17 -0
  491. package/dist/next/store/allocator.d.ts.map +1 -0
  492. package/dist/next/store/allocator.js +30 -0
  493. package/dist/next/store/allocator.js.map +1 -0
  494. package/dist/next/store/applier.d.ts +8 -0
  495. package/dist/next/store/applier.d.ts.map +1 -0
  496. package/dist/next/store/applier.js +375 -0
  497. package/dist/next/store/applier.js.map +1 -0
  498. package/dist/next/store/apply-batch.d.ts +12 -0
  499. package/dist/next/store/apply-batch.d.ts.map +1 -0
  500. package/dist/next/store/apply-batch.js +83 -0
  501. package/dist/next/store/apply-batch.js.map +1 -0
  502. package/dist/next/store/archive.d.ts +32 -0
  503. package/dist/next/store/archive.d.ts.map +1 -0
  504. package/dist/next/store/archive.js +129 -0
  505. package/dist/next/store/archive.js.map +1 -0
  506. package/dist/next/store/backend.d.ts +10 -0
  507. package/dist/next/store/backend.d.ts.map +1 -0
  508. package/dist/next/store/backend.js +15 -0
  509. package/dist/next/store/backend.js.map +1 -0
  510. package/dist/next/store/catalog.d.ts +24 -0
  511. package/dist/next/store/catalog.d.ts.map +1 -0
  512. package/dist/next/store/catalog.js +17 -0
  513. package/dist/next/store/catalog.js.map +1 -0
  514. package/dist/next/store/claims.d.ts +23 -0
  515. package/dist/next/store/claims.d.ts.map +1 -0
  516. package/dist/next/store/claims.js +65 -0
  517. package/dist/next/store/claims.js.map +1 -0
  518. package/dist/next/store/columns.d.ts +77 -0
  519. package/dist/next/store/columns.d.ts.map +1 -0
  520. package/dist/next/store/columns.js +77 -0
  521. package/dist/next/store/columns.js.map +1 -0
  522. package/dist/next/store/engine.d.ts +176 -0
  523. package/dist/next/store/engine.d.ts.map +1 -0
  524. package/dist/next/store/engine.js +283 -0
  525. package/dist/next/store/engine.js.map +1 -0
  526. package/dist/next/store/evaluate.d.ts +17 -0
  527. package/dist/next/store/evaluate.d.ts.map +1 -0
  528. package/dist/next/store/evaluate.js +128 -0
  529. package/dist/next/store/evaluate.js.map +1 -0
  530. package/dist/next/store/export.d.ts +17 -0
  531. package/dist/next/store/export.d.ts.map +1 -0
  532. package/dist/next/store/export.js +200 -0
  533. package/dist/next/store/export.js.map +1 -0
  534. package/dist/next/store/expression.d.ts +150 -0
  535. package/dist/next/store/expression.d.ts.map +1 -0
  536. package/dist/next/store/expression.js +268 -0
  537. package/dist/next/store/expression.js.map +1 -0
  538. package/dist/next/store/import.d.ts +10 -0
  539. package/dist/next/store/import.d.ts.map +1 -0
  540. package/dist/next/store/import.js +276 -0
  541. package/dist/next/store/import.js.map +1 -0
  542. package/dist/next/store/index.d.ts +16 -0
  543. package/dist/next/store/index.d.ts.map +1 -0
  544. package/dist/next/store/index.js +13 -0
  545. package/dist/next/store/index.js.map +1 -0
  546. package/dist/next/store/json-column.d.ts +33 -0
  547. package/dist/next/store/json-column.d.ts.map +1 -0
  548. package/dist/next/store/json-column.js +61 -0
  549. package/dist/next/store/json-column.js.map +1 -0
  550. package/dist/next/store/jsonl.d.ts +9 -0
  551. package/dist/next/store/jsonl.d.ts.map +1 -0
  552. package/dist/next/store/jsonl.js +61 -0
  553. package/dist/next/store/jsonl.js.map +1 -0
  554. package/dist/next/store/outbox.d.ts +26 -0
  555. package/dist/next/store/outbox.d.ts.map +1 -0
  556. package/dist/next/store/outbox.js +80 -0
  557. package/dist/next/store/outbox.js.map +1 -0
  558. package/dist/next/store/query.d.ts +39 -0
  559. package/dist/next/store/query.d.ts.map +1 -0
  560. package/dist/next/store/query.js +97 -0
  561. package/dist/next/store/query.js.map +1 -0
  562. package/dist/next/store/refusal.d.ts +15 -0
  563. package/dist/next/store/refusal.d.ts.map +1 -0
  564. package/dist/next/store/refusal.js +36 -0
  565. package/dist/next/store/refusal.js.map +1 -0
  566. package/dist/next/store/rows.d.ts +80 -0
  567. package/dist/next/store/rows.d.ts.map +1 -0
  568. package/dist/next/store/rows.js +183 -0
  569. package/dist/next/store/rows.js.map +1 -0
  570. package/dist/next/store/schema.d.ts +25 -0
  571. package/dist/next/store/schema.d.ts.map +1 -0
  572. package/dist/next/store/schema.js +115 -0
  573. package/dist/next/store/schema.js.map +1 -0
  574. package/dist/next/store/sql.d.ts +73 -0
  575. package/dist/next/store/sql.d.ts.map +1 -0
  576. package/dist/next/store/sql.js +234 -0
  577. package/dist/next/store/sql.js.map +1 -0
  578. package/dist/next/store/step.d.ts +48 -0
  579. package/dist/next/store/step.d.ts.map +1 -0
  580. package/dist/next/store/step.js +50 -0
  581. package/dist/next/store/step.js.map +1 -0
  582. package/dist/next/store/store.d.ts +161 -0
  583. package/dist/next/store/store.d.ts.map +1 -0
  584. package/dist/next/store/store.js +627 -0
  585. package/dist/next/store/store.js.map +1 -0
  586. package/dist/next/store/table-changes.d.ts +29 -0
  587. package/dist/next/store/table-changes.d.ts.map +1 -0
  588. package/dist/next/store/table-changes.js +102 -0
  589. package/dist/next/store/table-changes.js.map +1 -0
  590. package/dist/next/store/table-evolve.d.ts +74 -0
  591. package/dist/next/store/table-evolve.d.ts.map +1 -0
  592. package/dist/next/store/table-evolve.js +201 -0
  593. package/dist/next/store/table-evolve.js.map +1 -0
  594. package/dist/next/store/table-handle.d.ts +67 -0
  595. package/dist/next/store/table-handle.d.ts.map +1 -0
  596. package/dist/next/store/table-handle.js +101 -0
  597. package/dist/next/store/table-handle.js.map +1 -0
  598. package/dist/next/store/table-history.d.ts +75 -0
  599. package/dist/next/store/table-history.d.ts.map +1 -0
  600. package/dist/next/store/table-history.js +42 -0
  601. package/dist/next/store/table-history.js.map +1 -0
  602. package/dist/next/store/table-migration.d.ts +16 -0
  603. package/dist/next/store/table-migration.d.ts.map +1 -0
  604. package/dist/next/store/table-migration.js +202 -0
  605. package/dist/next/store/table-migration.js.map +1 -0
  606. package/dist/next/store/table-writes.d.ts +125 -0
  607. package/dist/next/store/table-writes.d.ts.map +1 -0
  608. package/dist/next/store/table-writes.js +165 -0
  609. package/dist/next/store/table-writes.js.map +1 -0
  610. package/dist/next/store/table.d.ts +80 -0
  611. package/dist/next/store/table.d.ts.map +1 -0
  612. package/dist/next/store/table.js +103 -0
  613. package/dist/next/store/table.js.map +1 -0
  614. package/dist/next/store/text.d.ts +14 -0
  615. package/dist/next/store/text.d.ts.map +1 -0
  616. package/dist/next/store/text.js +51 -0
  617. package/dist/next/store/text.js.map +1 -0
  618. package/dist/next/store/writes.d.ts +5 -0
  619. package/dist/next/store/writes.d.ts.map +1 -0
  620. package/dist/next/store/writes.js +4 -0
  621. package/dist/next/store/writes.js.map +1 -0
  622. package/dist/next-node/compression.d.ts +7 -0
  623. package/dist/next-node/compression.d.ts.map +1 -0
  624. package/dist/next-node/compression.js +24 -0
  625. package/dist/next-node/compression.js.map +1 -0
  626. package/dist/next-node/http/admission.d.ts +63 -0
  627. package/dist/next-node/http/admission.d.ts.map +1 -0
  628. package/dist/next-node/http/admission.js +134 -0
  629. package/dist/next-node/http/admission.js.map +1 -0
  630. package/dist/next-node/http/authenticate.d.ts +21 -0
  631. package/dist/next-node/http/authenticate.d.ts.map +1 -0
  632. package/dist/next-node/http/authenticate.js +34 -0
  633. package/dist/next-node/http/authenticate.js.map +1 -0
  634. package/dist/next-node/http/cookies.d.ts +24 -0
  635. package/dist/next-node/http/cookies.d.ts.map +1 -0
  636. package/dist/next-node/http/cookies.js +62 -0
  637. package/dist/next-node/http/cookies.js.map +1 -0
  638. package/dist/next-node/http/file.d.ts +23 -0
  639. package/dist/next-node/http/file.d.ts.map +1 -0
  640. package/dist/next-node/http/file.js +94 -0
  641. package/dist/next-node/http/file.js.map +1 -0
  642. package/dist/next-node/http/headers.d.ts +37 -0
  643. package/dist/next-node/http/headers.d.ts.map +1 -0
  644. package/dist/next-node/http/headers.js +129 -0
  645. package/dist/next-node/http/headers.js.map +1 -0
  646. package/dist/next-node/http/http.d.ts +100 -0
  647. package/dist/next-node/http/http.d.ts.map +1 -0
  648. package/dist/next-node/http/http.js +462 -0
  649. package/dist/next-node/http/http.js.map +1 -0
  650. package/dist/next-node/http/incoming.d.ts +19 -0
  651. package/dist/next-node/http/incoming.d.ts.map +1 -0
  652. package/dist/next-node/http/incoming.js +31 -0
  653. package/dist/next-node/http/incoming.js.map +1 -0
  654. package/dist/next-node/http/index.d.ts +11 -0
  655. package/dist/next-node/http/index.d.ts.map +1 -0
  656. package/dist/next-node/http/index.js +12 -0
  657. package/dist/next-node/http/index.js.map +1 -0
  658. package/dist/next-node/http/node.d.ts +78 -0
  659. package/dist/next-node/http/node.d.ts.map +1 -0
  660. package/dist/next-node/http/node.js +291 -0
  661. package/dist/next-node/http/node.js.map +1 -0
  662. package/dist/next-node/http/request.d.ts +54 -0
  663. package/dist/next-node/http/request.d.ts.map +1 -0
  664. package/dist/next-node/http/request.js +116 -0
  665. package/dist/next-node/http/request.js.map +1 -0
  666. package/dist/next-node/http/response.d.ts +63 -0
  667. package/dist/next-node/http/response.d.ts.map +1 -0
  668. package/dist/next-node/http/response.js +202 -0
  669. package/dist/next-node/http/response.js.map +1 -0
  670. package/dist/next-node/http/router.d.ts +114 -0
  671. package/dist/next-node/http/router.d.ts.map +1 -0
  672. package/dist/next-node/http/router.js +261 -0
  673. package/dist/next-node/http/router.js.map +1 -0
  674. package/dist/next-node/http/upgrades.d.ts +58 -0
  675. package/dist/next-node/http/upgrades.d.ts.map +1 -0
  676. package/dist/next-node/http/upgrades.js +184 -0
  677. package/dist/next-node/http/upgrades.js.map +1 -0
  678. package/dist/next-node/plugins/build.d.ts +57 -0
  679. package/dist/next-node/plugins/build.d.ts.map +1 -0
  680. package/dist/next-node/plugins/build.js +334 -0
  681. package/dist/next-node/plugins/build.js.map +1 -0
  682. package/dist/next-node/plugins/discover.d.ts +36 -0
  683. package/dist/next-node/plugins/discover.d.ts.map +1 -0
  684. package/dist/next-node/plugins/discover.js +91 -0
  685. package/dist/next-node/plugins/discover.js.map +1 -0
  686. package/dist/next-node/plugins/evaluate.d.ts +33 -0
  687. package/dist/next-node/plugins/evaluate.d.ts.map +1 -0
  688. package/dist/next-node/plugins/evaluate.js +98 -0
  689. package/dist/next-node/plugins/evaluate.js.map +1 -0
  690. package/dist/next-node/plugins/index.d.ts +9 -0
  691. package/dist/next-node/plugins/index.d.ts.map +1 -0
  692. package/dist/next-node/plugins/index.js +11 -0
  693. package/dist/next-node/plugins/index.js.map +1 -0
  694. package/dist/next-node/plugins/install.d.ts +13 -0
  695. package/dist/next-node/plugins/install.d.ts.map +1 -0
  696. package/dist/next-node/plugins/install.js +37 -0
  697. package/dist/next-node/plugins/install.js.map +1 -0
  698. package/dist/next-node/plugins/plugins.d.ts +135 -0
  699. package/dist/next-node/plugins/plugins.d.ts.map +1 -0
  700. package/dist/next-node/plugins/plugins.js +206 -0
  701. package/dist/next-node/plugins/plugins.js.map +1 -0
  702. package/dist/next-node/plugins/runtime.d.ts +41 -0
  703. package/dist/next-node/plugins/runtime.d.ts.map +1 -0
  704. package/dist/next-node/plugins/runtime.js +136 -0
  705. package/dist/next-node/plugins/runtime.js.map +1 -0
  706. package/dist/next-node/plugins/stack.d.ts +16 -0
  707. package/dist/next-node/plugins/stack.d.ts.map +1 -0
  708. package/dist/next-node/plugins/stack.js +61 -0
  709. package/dist/next-node/plugins/stack.js.map +1 -0
  710. package/dist/next-node/plugins/watcher.d.ts +58 -0
  711. package/dist/next-node/plugins/watcher.d.ts.map +1 -0
  712. package/dist/next-node/plugins/watcher.js +281 -0
  713. package/dist/next-node/plugins/watcher.js.map +1 -0
  714. package/dist/next-node/workers/control.d.ts +83 -0
  715. package/dist/next-node/workers/control.d.ts.map +1 -0
  716. package/dist/next-node/workers/control.js +77 -0
  717. package/dist/next-node/workers/control.js.map +1 -0
  718. package/dist/next-node/workers/index.d.ts +5 -0
  719. package/dist/next-node/workers/index.d.ts.map +1 -0
  720. package/dist/next-node/workers/index.js +7 -0
  721. package/dist/next-node/workers/index.js.map +1 -0
  722. package/dist/next-node/workers/lock.d.ts +21 -0
  723. package/dist/next-node/workers/lock.d.ts.map +1 -0
  724. package/dist/next-node/workers/lock.js +137 -0
  725. package/dist/next-node/workers/lock.js.map +1 -0
  726. package/dist/next-node/workers/main.d.ts +46 -0
  727. package/dist/next-node/workers/main.d.ts.map +1 -0
  728. package/dist/next-node/workers/main.js +230 -0
  729. package/dist/next-node/workers/main.js.map +1 -0
  730. package/dist/next-node/workers/process.d.ts +42 -0
  731. package/dist/next-node/workers/process.d.ts.map +1 -0
  732. package/dist/next-node/workers/process.js +125 -0
  733. package/dist/next-node/workers/process.js.map +1 -0
  734. package/dist/next-node/workers/workers.d.ts +80 -0
  735. package/dist/next-node/workers/workers.d.ts.map +1 -0
  736. package/dist/next-node/workers/workers.js +572 -0
  737. package/dist/next-node/workers/workers.js.map +1 -0
  738. package/dist/object.d.ts +4 -4
  739. package/dist/object.d.ts.map +1 -1
  740. package/dist/object.js +3 -4
  741. package/dist/object.js.map +1 -1
  742. package/dist/output.d.ts +9 -3
  743. package/dist/output.d.ts.map +1 -1
  744. package/dist/output.js +21 -9
  745. package/dist/output.js.map +1 -1
  746. package/dist/remote.d.ts.map +1 -1
  747. package/dist/remote.js +2 -2
  748. package/dist/remote.js.map +1 -1
  749. package/dist/schema.d.ts +8 -4
  750. package/dist/schema.d.ts.map +1 -1
  751. package/dist/schema.js +180 -5
  752. package/dist/schema.js.map +1 -1
  753. package/dist/sqlite/cloudflare.d.ts +54 -0
  754. package/dist/sqlite/cloudflare.d.ts.map +1 -0
  755. package/dist/sqlite/cloudflare.js +144 -0
  756. package/dist/sqlite/cloudflare.js.map +1 -0
  757. package/dist/sqlite/database.d.ts +40 -0
  758. package/dist/sqlite/database.d.ts.map +1 -0
  759. package/dist/sqlite/database.js +2 -0
  760. package/dist/sqlite/database.js.map +1 -0
  761. package/dist/sqlite/index.d.ts +4 -0
  762. package/dist/sqlite/index.d.ts.map +1 -0
  763. package/dist/sqlite/index.js +3 -0
  764. package/dist/sqlite/index.js.map +1 -0
  765. package/dist/sqlite/migrations.d.ts +10 -0
  766. package/dist/sqlite/migrations.d.ts.map +1 -0
  767. package/dist/sqlite/migrations.js +33 -0
  768. package/dist/sqlite/migrations.js.map +1 -0
  769. package/dist/sqlite/node.d.ts +41 -0
  770. package/dist/sqlite/node.d.ts.map +1 -0
  771. package/dist/sqlite/node.js +191 -0
  772. package/dist/sqlite/node.js.map +1 -0
  773. package/dist/sqlite/schema.d.ts +3 -0
  774. package/dist/sqlite/schema.d.ts.map +1 -0
  775. package/dist/sqlite/schema.js +10 -0
  776. package/dist/sqlite/schema.js.map +1 -0
  777. package/dist/telemetry-sqlite/index.d.ts +24 -0
  778. package/dist/telemetry-sqlite/index.d.ts.map +1 -0
  779. package/dist/telemetry-sqlite/index.js +273 -0
  780. package/dist/telemetry-sqlite/index.js.map +1 -0
  781. package/dist/telemetry-sqlite/store.d.ts +9 -0
  782. package/dist/telemetry-sqlite/store.d.ts.map +1 -0
  783. package/dist/telemetry-sqlite/store.js +110 -0
  784. package/dist/telemetry-sqlite/store.js.map +1 -0
  785. package/dist/watch.d.ts +194 -0
  786. package/dist/watch.d.ts.map +1 -0
  787. package/dist/watch.js +383 -0
  788. package/dist/watch.js.map +1 -0
  789. package/dist/wire.d.ts +174 -193
  790. package/dist/wire.d.ts.map +1 -1
  791. package/dist/wire.js +81 -80
  792. package/dist/wire.js.map +1 -1
  793. package/docs/guide.md +15 -15
  794. package/docs/next/benchmarks.md +959 -0
  795. package/docs/next/decisions.md +2957 -0
  796. package/docs/next/dependencies/book.md +1671 -0
  797. package/docs/next/dependencies/index.html +2641 -0
  798. package/docs/next/dependencies/model.md +330 -0
  799. package/docs/next/design.md +2554 -0
  800. package/docs/next/durable-observers/book.md +432 -0
  801. package/docs/next/durable-observers/index.html +517 -0
  802. package/docs/next/flow-control/book.md +333 -0
  803. package/docs/next/flow-control/fold/index.html +265 -0
  804. package/docs/next/flow-control/index.html +548 -0
  805. package/docs/next/flow-control/window/index.html +228 -0
  806. package/docs/next/guide-plugins-hosts/book.md +607 -0
  807. package/docs/next/guide-plugins-hosts/index.html +652 -0
  808. package/docs/next/http-workers/book.md +378 -0
  809. package/docs/next/http-workers/index.html +515 -0
  810. package/docs/next/layer-1.md +311 -0
  811. package/docs/next/layer-2.md +216 -0
  812. package/docs/next/plugin-model/book.md +186 -0
  813. package/docs/next/plugin-model/index.html +310 -0
  814. package/docs/next/plugin-primer/book.md +273 -0
  815. package/docs/next/plugin-primer/index.html +430 -0
  816. package/docs/next/slice-1.md +236 -0
  817. package/docs/next/slice-10.md +285 -0
  818. package/docs/next/slice-11.md +93 -0
  819. package/docs/next/slice-2.md +174 -0
  820. package/docs/next/slice-3a.md +296 -0
  821. package/docs/next/slice-3b.md +197 -0
  822. package/docs/next/slice-4.md +146 -0
  823. package/docs/next/slice-4a.md +418 -0
  824. package/docs/next/slice-4b.md +208 -0
  825. package/docs/next/slice-5.md +281 -0
  826. package/docs/next/slice-6a.md +676 -0
  827. package/docs/next/slice-6b.md +332 -0
  828. package/docs/next/slice-7a.md +130 -0
  829. package/docs/next/slice-7b/book.md +608 -0
  830. package/docs/next/slice-7b/index.html +842 -0
  831. package/docs/next/slice-7b.md +255 -0
  832. package/docs/next/slice-7c.md +165 -0
  833. package/docs/next/slice-8.md +194 -0
  834. package/docs/next/slices.md +230 -0
  835. package/docs/next/store/book.md +665 -0
  836. package/docs/next/store/index.html +861 -0
  837. package/docs/next/store/walkthrough.md +193 -0
  838. package/docs/spec.md +9 -9
  839. package/docs/tutorial.md +26 -25
  840. package/package.json +42 -5
  841. package/src/delta/README.md +69 -0
@@ -0,0 +1,869 @@
1
+ // A job's records on its object (§15, slice 6a §1.2, slice 6b §4): its runs by id and by key, the active count, the
2
+ // run state documents, `running` and the runs waiting for a live attempt, across the object's attempts. Records and
3
+ // state documents change only in transactions on the object's line (staged changes adopted in the commit step); a
4
+ // persisted job's also in its object's store, in the same commits, loaded once per object, and written back stopped by
5
+ // the close writer when a clean stop cuts its runs off. Across a reload (slice 7b §8) the records take the new
6
+ // declaration's definition and every run keeps its version: an older one is mapped forwards through `accepts`, one
7
+ // without an adapter (or newer, or of a job the code no longer declares) is blocked `version` until a reload brings
8
+ // matching code.
9
+ import { withoutAbortSignal } from "../../context/index.js";
10
+ import { ChordError } from "../data/index.js";
11
+ import { check, validatorFor } from "../data/internal.js";
12
+ import { Persistence } from "../documents/internal.js";
13
+ import { uuidv7 } from "../host/internal.js";
14
+ import { PersistedRuns } from "./persisted.js";
15
+ import { JobRun } from "./run.js";
16
+ import { RunStates } from "./run-states.js";
17
+ import { Running } from "./running.js";
18
+ import { outcomeOf, storedRun } from "./stored.js";
19
+ const RESTART = { kind: "failed", error: { kind: "aborted", reason: "restart" } };
20
+ const RELOAD = { kind: "failed", error: { kind: "aborted", reason: "reload" } };
21
+ const ABORTED = { kind: "failed", error: { kind: "aborted", reason: "abort" } };
22
+ /** A persisted run cut off this many times in a row ends `restart_limit` (D6, Durable's limit). */
23
+ const RESTART_LIMIT = 5;
24
+ /**
25
+ * The records of one job name on one object. The live attempt's `Job` invokes and finishes its runs; between live
26
+ * attempts, committed runs not yet invoked and runs whose outcome is recorded wait for the next one.
27
+ */
28
+ export class JobRecords {
29
+ /** The latest declaration's definition: a reload's new attempt redefines it; each run keeps its own version. */
30
+ definition;
31
+ running;
32
+ #owner;
33
+ #states;
34
+ /** The store side of a persisted job's state documents; `undefined` in memory. */
35
+ #statePersistence;
36
+ /** The store side of a persisted job's runs; `undefined` in memory. */
37
+ #persisted;
38
+ #runs = new Map();
39
+ #keys = new Map();
40
+ /** Running and finishing runs: concurrency and keep-alive count them. */
41
+ #active = 0;
42
+ /** The live attempt's job; `undefined` between live attempts. */
43
+ #job;
44
+ /** Runs waiting for a live attempt: to be invoked (`invocation` pending) or finished (phase `finishing`). */
45
+ #waiting = new Set();
46
+ /** Runs a clean stop cut off whose record the close writer has not written `stopped` yet. */
47
+ #stopped = new Set();
48
+ /** Whether a persisted job's records were loaded (once per object). */
49
+ #loaded = false;
50
+ /** The object's end error, once it ended. */
51
+ #ended;
52
+ /** Whether the latest live attempt declares the job: its runs are blocked `version` while it does not. */
53
+ #declared = true;
54
+ constructor(definition, owner) {
55
+ this.definition = definition;
56
+ this.#owner = owner;
57
+ const { state, persist, name } = definition;
58
+ const store = persist === undefined ? undefined : owner.store;
59
+ const persistence = store === undefined ? undefined : new Persistence(store.store, store.owner, "chord.job-states", name);
60
+ this.#statePersistence = persistence;
61
+ this.#states = state === undefined ? undefined : this.#runStates(state);
62
+ this.#persisted =
63
+ store === undefined
64
+ ? undefined
65
+ : new PersistedRuns(new Persistence(store.store, store.owner, "chord.jobs", name), persistence);
66
+ this.running = new Running(owner.documents.batch, this.name);
67
+ }
68
+ /** The run state documents of `state`, reporting their changes to `running` and their held deadlines. */
69
+ #runStates(state) {
70
+ const owner = this.#owner;
71
+ const states = {
72
+ documents: owner.documents,
73
+ changed: (id, ops) => this.#stateChanged(id, ops),
74
+ held: (deadline) => owner.held(deadline),
75
+ };
76
+ return new RunStates(state, states, this.#statePersistence);
77
+ }
78
+ /**
79
+ * Refuses a declaration of this job that its records cannot take (slice 7b §8): the same version with another
80
+ * fingerprint (its args, result or state schema changed without a version bump), or a state document definition
81
+ * the run documents refuse (`SlotDefinition.check`). A reload's staging checks it too.
82
+ */
83
+ check(definition) {
84
+ const current = this.definition;
85
+ if (definition.version === current.version && definition.fingerprint !== current.fingerprint) {
86
+ throw new Error(`${this.name}: its schema changed without a version bump (version ${definition.version})`);
87
+ }
88
+ const { state } = definition;
89
+ const states = this.#states;
90
+ if (state !== undefined && states !== undefined && state !== states.definition.current) {
91
+ states.definition.check(state);
92
+ }
93
+ }
94
+ /**
95
+ * Takes a new attempt's declaration `definition` (another version after a reload, `ChordObject.checkJob` refused
96
+ * the same version with another fingerprint): new runs are of its version; the runs of others keep theirs, their
97
+ * `running` entries show their args mapped forwards (or blocked); their state documents keep their version until
98
+ * their run settles or moves to the new code.
99
+ */
100
+ redefine(definition) {
101
+ this.#declared = true;
102
+ if (definition === this.definition)
103
+ return;
104
+ this.definition = definition;
105
+ const { state } = definition;
106
+ if (state !== undefined) {
107
+ if (this.#states === undefined)
108
+ this.#states = this.#runStates(state);
109
+ else
110
+ this.#states.redefine(state);
111
+ }
112
+ if (this.#runs.size === 0)
113
+ return;
114
+ this.#owner.documents.batch.within(() => {
115
+ for (const run of this.#runs.values())
116
+ if (run.entry !== undefined)
117
+ this.#replaceEntry(run);
118
+ }, this.#owner.context);
119
+ }
120
+ /**
121
+ * The latest live attempt does not declare the job (slice 7b §8): its runs not invoked and its finishing runs are
122
+ * blocked `version` (kept, not invoked) until a reload declares it again or they are aborted; a running
123
+ * invocation finishes and is blocked then.
124
+ */
125
+ undeclare() {
126
+ if (!this.#declared || this.#ended !== undefined)
127
+ return;
128
+ this.#declared = false;
129
+ this.#job = undefined;
130
+ const waiting = [...this.#waiting];
131
+ this.#waiting.clear();
132
+ for (const run of waiting)
133
+ void this.record(run, { kind: "block", run, reason: "version" });
134
+ }
135
+ /**
136
+ * A reload brought new code (its attempt is live): blocked runs are retried, once: a `finish_failed` one finishes
137
+ * again, a `version` one whose version the code now takes (its own, or an older one with an adapter) is invoked or
138
+ * finished; the others stay blocked. A persisted run blocked at its load has its state document read first.
139
+ */
140
+ async retryBlocked(context) {
141
+ if (!this.#declared || this.#ended !== undefined)
142
+ return;
143
+ const retried = [...this.#runs.values()].filter((run) => run.phase === "blocked" && (run.blocked === "finish_failed" || this.#takes(run)));
144
+ if (retried.length === 0)
145
+ return;
146
+ try {
147
+ for (const run of retried)
148
+ if (run.blockedPhase !== undefined)
149
+ await this.#readBlockedState(run, context);
150
+ }
151
+ catch {
152
+ // Its state document cannot be read: it stays blocked (the next reload tries again).
153
+ return;
154
+ }
155
+ const { documents } = this.#owner;
156
+ try {
157
+ await documents.tx((tx) => {
158
+ for (const run of retried) {
159
+ if (this.#runs.get(run.id) !== run || run.phase !== "blocked")
160
+ continue;
161
+ const phase = run.outcome !== undefined ? "finishing" : this.#persisted === undefined ? "running" : "pending";
162
+ this.change(tx, { kind: "unblock", run, phase });
163
+ }
164
+ }, documents.own, this.#owner.context);
165
+ }
166
+ catch {
167
+ // The object ended.
168
+ }
169
+ }
170
+ /** Reads and decodes the state document of a persisted run blocked at its load, now that the code takes it. */
171
+ async #readBlockedState(run, context) {
172
+ const states = this.#states;
173
+ this.#persisted.forgetBlockedState(run.id);
174
+ if (states === undefined)
175
+ return;
176
+ const document = await states.persistence.read(run.id, context);
177
+ if (document === undefined)
178
+ return;
179
+ const { value, stored } = states.persistence.decode(document, states.definition.current, context);
180
+ states.create(run.id, value, stored);
181
+ if (run.outcome !== undefined)
182
+ run.outcome = { ...run.outcome, state: value };
183
+ }
184
+ /**
185
+ * Whether the current code takes `run`: of its version and fingerprint, or of an older version its `accepts` maps
186
+ * forwards; a newer one (a rollback) or an older one without an adapter is not (`blocked { version }`).
187
+ */
188
+ #takes(run) {
189
+ const { definition } = this;
190
+ if (run.version === definition.version)
191
+ return run.fingerprint === definition.fingerprint;
192
+ return run.version < definition.version && definition.accepts[run.version] !== undefined;
193
+ }
194
+ /**
195
+ * `run`'s args as the code of `definition` takes them (the current code's, or an invoking attempt's own): mapped
196
+ * forwards once per run and version when older.
197
+ */
198
+ argsOf(run, definition) {
199
+ if (run.version === definition.version)
200
+ return run.args;
201
+ const mapped = run.mapped;
202
+ if (mapped !== undefined && mapped.version === definition.version)
203
+ return mapped.args;
204
+ // `#takes` found the adapter; its result is the current args (the provider's mapping, not validated).
205
+ const args = definition.accepts[run.version].args(run.args);
206
+ run.mapped = { version: definition.version, args };
207
+ return args;
208
+ }
209
+ /**
210
+ * `run`'s outcome as the current code's `finish` gets it: an older run's args and result mapped forwards (once per
211
+ * run), its state document migrated to the current state definition.
212
+ */
213
+ outcomeOf(run, context) {
214
+ const outcome = run.outcome;
215
+ const { definition } = this;
216
+ if (run.version === definition.version)
217
+ return outcome;
218
+ const args = this.argsOf(run, definition);
219
+ const mapped = run.mapped;
220
+ if (mapped.outcome !== undefined)
221
+ return mapped.outcome;
222
+ const result = outcome.kind === "done"
223
+ ? { kind: "done", result: definition.accepts[run.version].result(outcome.result) }
224
+ : { kind: "failed", error: outcome.error };
225
+ const state = this.#states?.migrated(run.id, context) ?? outcome.state;
226
+ mapped.outcome = { id: outcome.id, args, state, ...result };
227
+ return mapped.outcome;
228
+ }
229
+ /** The job in errors: its object and its name. */
230
+ get name() {
231
+ return `${this.#owner.label} job ${this.definition.name}`;
232
+ }
233
+ /** Waits for the outcome of the unsettled run `id`; a settled or unknown id rejects `gone`. */
234
+ outcome(id, context) {
235
+ const run = this.#runs.get(id);
236
+ if (run === undefined) {
237
+ return Promise.reject(new ChordError({ code: "gone", message: `${this.name}: no unsettled run ${id}` }));
238
+ }
239
+ return run.handle.outcome(context);
240
+ }
241
+ /**
242
+ * Aborts run `id` (D7, Durable's `abortTask`): a blocked run is dropped; a finishing one is only marked; any other
243
+ * is marked (stored for a persisted job) in a transaction, its signal fired after the commit, outside the batch and
244
+ * the line, and the abort joins its invocation. `"marked"`, or `"terminal"` when no unsettled run has that id.
245
+ */
246
+ async abort(id, context) {
247
+ const run = this.#runs.get(id);
248
+ if (run === undefined || this.#ended !== undefined)
249
+ return "terminal";
250
+ if (run.phase === "blocked") {
251
+ await this.record(run, { kind: "drop", run });
252
+ return "marked";
253
+ }
254
+ if (!run.abortMarked)
255
+ await this.record(run, { kind: "update", run, fields: { abortMarked: true } });
256
+ // A finishing run's outcome stays: it is only marked.
257
+ if (run.phase === "finishing")
258
+ return "marked";
259
+ run.invocation?.abort.abort(new ChordError({ code: "aborted", message: `${this.name}: run ${id} aborted` }));
260
+ await run.over(context);
261
+ return "marked";
262
+ }
263
+ /** See `Job.stage`: the checks and the staged creation, against the object's runs. */
264
+ stage(tx, args, context, options) {
265
+ const definition = this.definition;
266
+ // Plugin code, not type-checked: the args are checked as a method's are (R7).
267
+ check(validatorFor(definition.args, context), args, "args", context);
268
+ const staged = tx.staged(this);
269
+ const { key } = options;
270
+ if (key !== undefined) {
271
+ const known = staged?.started.find((run) => run.key === key) ?? this.#keys.get(key);
272
+ if (known !== undefined && known !== staged?.finishing)
273
+ return known.handle;
274
+ }
275
+ const { concurrency } = definition;
276
+ const active = this.#active + (staged?.started.length ?? 0) - (staged?.finishing === undefined ? 0 : 1);
277
+ if (concurrency !== undefined && active >= concurrency) {
278
+ const message = `${this.name}: at its concurrency limit (${concurrency})`;
279
+ throw new ChordError({ code: "unavailable", reason: "busy", message });
280
+ }
281
+ const persisted = this.#persisted !== undefined;
282
+ const trace = persisted ? context.telemetry.propagation?.inject(context.telemetry) : undefined;
283
+ // Checked above: the args are JSON (the definition refuses bytes).
284
+ const run = new JobRun(uuidv7(), definition.version, definition.fingerprint, key, args, persisted ? "pending" : "running", trace);
285
+ const staging = this.staging(tx);
286
+ staging.started.push(run);
287
+ this.change(tx, { kind: "create", run });
288
+ const state = definition.state?.initial(context);
289
+ if (state !== undefined)
290
+ staging.adopts.push(this.#states.stageCreate(run.id, state, () => this.#store(tx)));
291
+ return run.handle;
292
+ }
293
+ /**
294
+ * Stages `change` in `tx`: in the job's staging, adopted in the commit step, and for a persisted job the run's record
295
+ * written with it (rule 8: serialized now), and for a settled run its state document retired.
296
+ */
297
+ change(tx, change) {
298
+ const staging = this.staging(tx);
299
+ staging.changes.push(change);
300
+ const { run } = change;
301
+ const states = this.#states;
302
+ const retires = change.kind === "delete" || change.kind === "drop";
303
+ if (retires && states?.current(run.id) !== undefined)
304
+ tx.retireSlot(states, run.id);
305
+ const persisted = this.#persisted;
306
+ if (persisted === undefined)
307
+ return;
308
+ const writes = this.#store(tx);
309
+ if (retires) {
310
+ staging.adopts.push(persisted.stageRetire(run.id, writes));
311
+ return;
312
+ }
313
+ const fields = recordFields(change);
314
+ staging.adopts.push(persisted.stage(run.id, storedRun(run, fields), writes));
315
+ }
316
+ /** This job's changes in `tx`, made on the first. */
317
+ staging(tx) {
318
+ return tx.stage(this, () => {
319
+ const changes = [];
320
+ const adopts = [];
321
+ return {
322
+ started: [],
323
+ changes,
324
+ adopts,
325
+ finishing: undefined,
326
+ adopt: () => {
327
+ // A step admitted before the object ended adopts after it: the records are not changed any more.
328
+ if (this.#ended !== undefined)
329
+ return;
330
+ // What is stored first: a new run's state document exists when its `running` entry is made.
331
+ runAll(adopts);
332
+ for (const change of changes)
333
+ this.#adopt(change);
334
+ },
335
+ committed: () => {
336
+ const ended = this.#ended;
337
+ if (ended === undefined) {
338
+ for (const change of changes)
339
+ this.#committed(change);
340
+ return;
341
+ }
342
+ // Its runs end as the object's other runs did.
343
+ for (const change of changes)
344
+ if (change.kind === "create")
345
+ change.run.reject(ended);
346
+ },
347
+ discarded: () => {
348
+ for (const change of changes)
349
+ if (change.kind === "create")
350
+ change.run.reject(this.#discarded());
351
+ },
352
+ };
353
+ });
354
+ }
355
+ /**
356
+ * A persisted job's runs, loaded once per object at its first activation (slice 6b §4.2), again only after a load
357
+ * failed (design §9): each record read; a record of another version or fingerprint blocked (`version`) as stored,
358
+ * its state document left undecoded; the others' state documents read and decoded, a run cut off while `running`
359
+ * counted (`restarts + 1`; at the limit it ends `restart_limit`, reported `job_interrupted`), `stopped` and
360
+ * `pending` ones made `pending` again. The runs and their activation changes are adopted in one commit, all before
361
+ * anything runs; a failure leaves nothing loaded.
362
+ */
363
+ async load(context) {
364
+ const persisted = this.#persisted;
365
+ if (persisted === undefined || this.#loaded)
366
+ return;
367
+ const restored = [];
368
+ try {
369
+ for (const loaded of await persisted.load(context))
370
+ restored.push(await this.#restored(loaded, context));
371
+ if (restored.length > 0) {
372
+ const { documents } = this.#owner;
373
+ await documents.tx((tx) => this.#restoreAll(tx, restored), documents.own, context);
374
+ }
375
+ }
376
+ catch (error) {
377
+ persisted.drop();
378
+ for (const { run } of restored)
379
+ this.#states?.retire(run.id);
380
+ throw error;
381
+ }
382
+ this.#loaded = true;
383
+ for (const { run, change } of restored) {
384
+ if (change?.kind === "outcome" &&
385
+ change.outcome.kind === "failed" &&
386
+ change.outcome.error.kind === "restart_limit") {
387
+ this.report({ kind: "job_interrupted", id: run.id, restarts: change.outcome.error.restarts });
388
+ }
389
+ }
390
+ for (const { run } of restored)
391
+ this.#need(run);
392
+ }
393
+ /** Stages the loaded runs in `tx`: each restored, then the activation changes (adopted after every restore). */
394
+ #restoreAll(tx, restored) {
395
+ const staging = this.staging(tx);
396
+ for (const { run } of restored)
397
+ staging.changes.push({ kind: "restore", run });
398
+ for (const { change } of restored)
399
+ if (change !== undefined)
400
+ this.change(tx, change);
401
+ }
402
+ /** `job`, of the attempt that went live, invokes and finishes the runs from now on; the waiting ones first. */
403
+ attach(job) {
404
+ if (this.#ended !== undefined)
405
+ return;
406
+ this.#job = job;
407
+ const waiting = [...this.#waiting];
408
+ this.#waiting.clear();
409
+ for (const run of waiting)
410
+ this.#dispatch(run, job);
411
+ }
412
+ /**
413
+ * `job`'s attempt was sealed: its running invocations are cut off (`cut`), the runs it was finishing wait for the
414
+ * next live attempt.
415
+ */
416
+ detach(job, finishing) {
417
+ if (this.#job === job)
418
+ this.#job = undefined;
419
+ for (const run of finishing)
420
+ this.#need(run);
421
+ }
422
+ /**
423
+ * A run whose reservation its sealed attempt never committed waits for the next live attempt (dispatched now when one
424
+ * is attached already: the sealed attempt was detached at its seal).
425
+ */
426
+ requeue(run) {
427
+ this.#need(run);
428
+ }
429
+ /** Records `run` running before its `run` is invoked (a persisted run's reservation: a crash after it counts). */
430
+ reserve(tx, run) {
431
+ this.change(tx, { kind: "update", run, fields: { phase: "running" } });
432
+ }
433
+ /** A state change of a run with restarts counted resets them in its commit (progress, D6). */
434
+ progressed(tx, run) {
435
+ if (run.restarts !== 0)
436
+ this.change(tx, { kind: "update", run, fields: { restarts: 0 } });
437
+ }
438
+ /**
439
+ * A run's invocation settled: its outcome is recorded (phase `finishing`) in a transaction of the object behind the
440
+ * state changes admitted before, so `outcome.state` has them; then it is finished on the live attempt.
441
+ */
442
+ settled(run, ended) {
443
+ void this.#recordOutcome(run, ended);
444
+ }
445
+ /**
446
+ * A running run whose attempt was sealed: its signal fires with `error`, its invocation is fenced (later state
447
+ * changes refused, the open one discarded, its settling ignored). In memory it ends `failed { aborted }` with
448
+ * `reason` (`reload` for a native restart, slice 7b §8), finished on the next live attempt; persisted it is stopped (R3), written back by the close writer and
449
+ * resumed by the next live attempt as after a clean close.
450
+ */
451
+ cut(run, error, reason) {
452
+ // Only an invoked run is cut: its current invocation is the one the seal stops.
453
+ const invocation = run.invocation;
454
+ invocation.settle();
455
+ this.#owner.documents.fence(invocation.token);
456
+ invocation.abort.abort(error);
457
+ if (this.#persisted !== undefined) {
458
+ run.phase = "stopped";
459
+ // Resumed per the job's `resume` (an `abandon` job's run ends `failed { aborted, restart }`).
460
+ run.resuming = true;
461
+ this.#stopped.add(run);
462
+ if (this.#ended === undefined)
463
+ this.#need(run);
464
+ return;
465
+ }
466
+ if (this.#ended === undefined)
467
+ void this.#recordOutcome(run, reason === "reload" ? RELOAD : RESTART);
468
+ }
469
+ /**
470
+ * Records `change` (a run's finish failure, its block, its drop) in a transaction of the object, if `run` is still
471
+ * one of its runs there. The object's end ends it.
472
+ */
473
+ async record(run, change) {
474
+ const { documents, context } = this.#owner;
475
+ try {
476
+ await documents.tx((tx) => {
477
+ if (this.#runs.get(run.id) === run)
478
+ this.change(tx, change);
479
+ }, documents.own, context);
480
+ }
481
+ catch {
482
+ // The object ended: its runs went with it.
483
+ }
484
+ }
485
+ /**
486
+ * The close writer (slice 6b §4.2, Durable's `writeAtClose`): one commit past the seal writing the runs a clean stop
487
+ * cut off `stopped` and every held state change, straight to the store (the object's transactions are refused by
488
+ * now). Its failure is the store's; the records stay as they were (a crash counts them).
489
+ */
490
+ async writeAtClose(context) {
491
+ const persisted = this.#persisted;
492
+ if (persisted === undefined)
493
+ return;
494
+ const writes = [];
495
+ const adopts = [];
496
+ for (const run of this.#stopped) {
497
+ adopts.push(persisted.stage(run.id, storedRun(run), writes));
498
+ }
499
+ this.#stopped.clear();
500
+ for (const id of this.#states?.heldIds ?? []) {
501
+ const adopt = this.#states.stageHeld(id, writes);
502
+ if (adopt !== undefined)
503
+ adopts.push(adopt);
504
+ }
505
+ if (writes.length === 0)
506
+ return;
507
+ const fence = { admit: () => true, adopt: () => runAll(adopts) };
508
+ try {
509
+ await this.#owner.store.store.commit(writes, fence, withoutAbortSignal(context));
510
+ }
511
+ catch {
512
+ // The store failed or refused it (reported as the store's): a crash loses as much.
513
+ }
514
+ }
515
+ /** Stores every held state change whose deadline passed (`now`), in one transaction of the object (D8). */
516
+ async flushHeld(now) {
517
+ const states = this.#states;
518
+ if (states === undefined || states.heldIds.length === 0)
519
+ return;
520
+ const { documents, context } = this.#owner;
521
+ try {
522
+ await documents.tx((tx) => {
523
+ const staging = this.staging(tx);
524
+ for (const id of states.heldIds) {
525
+ if (states.deadline(id) > now)
526
+ continue;
527
+ const adopt = states.stageHeld(id, this.#store(tx));
528
+ if (adopt !== undefined)
529
+ staging.adopts.push(adopt);
530
+ }
531
+ }, documents.own, context);
532
+ }
533
+ catch {
534
+ // The object is ending: its close writer stores what is held.
535
+ }
536
+ }
537
+ /** The earliest deadline of a held state change (`Infinity`: none). */
538
+ nextDeadline() {
539
+ const states = this.#states;
540
+ if (states === undefined)
541
+ return Number.POSITIVE_INFINITY;
542
+ return Math.min(Number.POSITIVE_INFINITY, ...states.heldIds.map((id) => states.deadline(id)));
543
+ }
544
+ /** The value of run `id`'s state document, `undefined` without one or once retired. */
545
+ stateOf(id) {
546
+ return this.#states?.value(id);
547
+ }
548
+ /** The run state documents, for `ctx.state.change`; `undefined` without a state definition. */
549
+ get states() {
550
+ return this.#states;
551
+ }
552
+ /** Whether the job persists its runs. */
553
+ get persisted() {
554
+ return this.#persisted !== undefined;
555
+ }
556
+ /**
557
+ * The object ends: running runs' signals fire, every waiter rejects with `error`; blocked in-memory runs are
558
+ * dropped (reported), persisted ones keep their records; nothing finishes. The records stay readable until `drop`.
559
+ */
560
+ end(error) {
561
+ if (this.#ended !== undefined)
562
+ return;
563
+ this.#ended = error;
564
+ this.#job = undefined;
565
+ this.#waiting.clear();
566
+ for (const run of this.#runs.values()) {
567
+ if (run.phase === "blocked" && this.#persisted === undefined)
568
+ this.report({ kind: "job_dropped", id: run.id });
569
+ const { invocation } = run;
570
+ invocation?.abort.abort(error);
571
+ run.reject(error);
572
+ if (invocation?.state !== "running")
573
+ invocation?.ended();
574
+ }
575
+ if (this.#active > 0)
576
+ this.#owner.countRuns(-this.#active);
577
+ }
578
+ /** Its object's documents are dropped: the runs, their state documents and `running`'s watches go. */
579
+ drop() {
580
+ this.#runs.clear();
581
+ this.#keys.clear();
582
+ this.#states?.drop();
583
+ this.#persisted?.drop();
584
+ this.running.end();
585
+ }
586
+ /** Reports a run's failure, drop or interruption to the host. */
587
+ report(error) {
588
+ this.#owner.host.report({ ...error, object: this.#owner.label, job: this.definition.name });
589
+ }
590
+ /** The store writes of `tx` (Chord's own documents of a persisted job). */
591
+ #store(tx) {
592
+ return tx.stageStore(this.#owner.store.store);
593
+ }
594
+ /**
595
+ * The run a loaded record stands for and the change its activation writes (D6): a record of another version or
596
+ * fingerprint blocked as stored (its state document only found, never decoded: slice 7 maps it); otherwise its state
597
+ * document read and decoded (migrated), pinned while it is unsettled, a crash counted, at the limit its outcome,
598
+ * marked resuming unless blocked or finishing.
599
+ */
600
+ async #restored(loaded, context) {
601
+ const { id, record } = loaded;
602
+ const { definition } = this;
603
+ const run = new JobRun(id, record.version, record.fingerprint, record.key, record.args, record.phase, record.trace);
604
+ run.restarts = record.restarts;
605
+ run.finishFailures = record.finishFailures;
606
+ run.abortMarked = record.abort === true;
607
+ const states = this.#states;
608
+ if (record.version !== definition.version || record.fingerprint !== definition.fingerprint) {
609
+ run.phase = "blocked";
610
+ run.blocked = "version";
611
+ // What the record says, for the reload that brings its version (`retryBlocked`).
612
+ run.blockedPhase = record.phase;
613
+ if (record.outcome !== undefined)
614
+ run.outcome = outcomeOf(record.outcome, id, record.args, undefined);
615
+ // What is stored of its state (also when this version declares none), so an abort drops it with the record.
616
+ await this.#persisted.findBlockedState(id, context);
617
+ return { run, change: undefined };
618
+ }
619
+ const document = await states?.persistence.read(id, context);
620
+ if (document !== undefined) {
621
+ const { value, stored } = states.persistence.decode(document, states.definition.current, context);
622
+ states.create(id, value, stored);
623
+ }
624
+ if (record.outcome !== undefined)
625
+ run.outcome = outcomeOf(record.outcome, id, record.args, this.stateOf(id));
626
+ run.blocked = record.blocked;
627
+ switch (record.phase) {
628
+ case "running": {
629
+ const restarts = record.restarts + 1;
630
+ run.resuming = true;
631
+ if (restarts < RESTART_LIMIT) {
632
+ return { run, change: { kind: "update", run, fields: { phase: "pending", restarts } } };
633
+ }
634
+ run.restarts = restarts;
635
+ const outcome = this.#outcome(run, { kind: "failed", error: { kind: "restart_limit", restarts } });
636
+ return { run, change: { kind: "outcome", run, outcome } };
637
+ }
638
+ case "stopped":
639
+ run.resuming = true;
640
+ return { run, change: { kind: "update", run, fields: { phase: "pending" } } };
641
+ case "pending":
642
+ run.resuming = true;
643
+ return { run, change: undefined };
644
+ default:
645
+ return { run, change: undefined };
646
+ }
647
+ }
648
+ /** Records the outcome of `run` (with what its state holds, D8), then has it finished on the live attempt. */
649
+ async #recordOutcome(run, ended) {
650
+ const { documents, context } = this.#owner;
651
+ try {
652
+ await documents.tx((tx) => {
653
+ const outcome = this.#outcome(run, ended);
654
+ this.change(tx, { kind: "outcome", run, outcome });
655
+ // What its state holds is stored before the outcome is recorded (D8).
656
+ const adopt = this.#persisted === undefined ? undefined : this.#states?.stageHeld(run.id, this.#store(tx));
657
+ if (adopt !== undefined)
658
+ this.staging(tx).adopts.push(adopt);
659
+ }, documents.own, context);
660
+ }
661
+ catch {
662
+ // The object ended: nothing finishes.
663
+ return;
664
+ }
665
+ finally {
666
+ // A run ending without an invocation (marked aborted, abandoned, cut off in memory) has none to wait for.
667
+ run.invocation?.ended();
668
+ }
669
+ this.#need(run);
670
+ }
671
+ /** `run`'s outcome for `ended`, with its args and its state as it is now. */
672
+ #outcome(run, ended) {
673
+ return { id: run.id, args: run.args, state: this.stateOf(run.id), ...ended };
674
+ }
675
+ /** `run` needs a live attempt (to be invoked or finished): now, or once one attaches. */
676
+ #need(run) {
677
+ if (this.#ended !== undefined || this.#runs.get(run.id) !== run)
678
+ return;
679
+ // A job the code no longer declares: blocked `version`, kept (slice 7b §8).
680
+ if (!this.#declared) {
681
+ if (run.phase !== "blocked")
682
+ void this.record(run, { kind: "block", run, reason: "version" });
683
+ return;
684
+ }
685
+ const job = this.#job;
686
+ if (job === undefined)
687
+ this.#waiting.add(run);
688
+ else
689
+ this.#dispatch(run, job);
690
+ }
691
+ /**
692
+ * Invokes or finishes `run` on `job`, as its record stands: a finishing run is finished; a run not invoked yet is
693
+ * invoked, unless it is marked aborted (it ends `aborted` without `run`) or resumes abandoned (`failed { aborted,
694
+ * reason: "restart" }`).
695
+ */
696
+ #dispatch(run, job) {
697
+ if (this.#runs.get(run.id) !== run || run.phase === "blocked")
698
+ return;
699
+ // Not of a version the code takes: blocked `version` until a reload brings matching code.
700
+ if (!this.#takes(run)) {
701
+ void this.record(run, { kind: "block", run, reason: "version" });
702
+ return;
703
+ }
704
+ if (run.phase === "finishing") {
705
+ job.finish(run);
706
+ return;
707
+ }
708
+ if (run.invoked)
709
+ return;
710
+ if (run.abortMarked) {
711
+ void this.#recordOutcome(run, ABORTED);
712
+ return;
713
+ }
714
+ if (run.resuming && this.definition.persist?.resume === "abandon") {
715
+ void this.#recordOutcome(run, RESTART);
716
+ return;
717
+ }
718
+ run.resuming = false;
719
+ job.invoke(run);
720
+ }
721
+ /**
722
+ * Adopts one record change, inside the commit step: the maps, the active count, `running`. A new run is counted for
723
+ * its object here, before the commit's publication (a link closing while it sends may release the object's last
724
+ * reference) and before any run of the same commit settles in `#committed`.
725
+ */
726
+ #adopt(change) {
727
+ const { run } = change;
728
+ switch (change.kind) {
729
+ case "create":
730
+ case "restore":
731
+ this.#runs.set(run.id, run);
732
+ if (run.key !== undefined)
733
+ this.#keys.set(run.key, run);
734
+ if (run.phase !== "blocked") {
735
+ this.#active++;
736
+ this.#owner.countRuns(1);
737
+ }
738
+ run.entry = this.#entryOf(run);
739
+ this.running.add(run.entry);
740
+ return;
741
+ case "update":
742
+ Object.assign(run, change.fields);
743
+ this.#replaceEntry(run);
744
+ return;
745
+ case "outcome":
746
+ run.outcome = change.outcome;
747
+ run.phase = "finishing";
748
+ this.#replaceEntry(run);
749
+ return;
750
+ case "block":
751
+ run.phase = "blocked";
752
+ run.blocked = change.reason;
753
+ this.#active--;
754
+ this.#replaceEntry(run);
755
+ return;
756
+ case "unblock":
757
+ run.phase = change.phase;
758
+ run.blocked = undefined;
759
+ run.blockedPhase = undefined;
760
+ run.finishFailures = 0;
761
+ // A persisted run to be invoked again resumes per its job's `resume`, as after a stop.
762
+ if (change.phase === "pending")
763
+ run.resuming = true;
764
+ this.#active++;
765
+ this.#owner.countRuns(1);
766
+ this.#replaceEntry(run);
767
+ return;
768
+ case "delete":
769
+ case "drop":
770
+ this.#runs.delete(run.id);
771
+ // The finishing run's key may name its successor already, started in the same commit.
772
+ if (run.key !== undefined && this.#keys.get(run.key) === run)
773
+ this.#keys.delete(run.key);
774
+ if (change.kind === "delete")
775
+ this.#active--;
776
+ this.running.remove(run.entry);
777
+ run.entry = undefined;
778
+ return;
779
+ }
780
+ }
781
+ /** The actions after a record change committed. */
782
+ #committed(change) {
783
+ const { run } = change;
784
+ switch (change.kind) {
785
+ case "create":
786
+ // After the commit, outside the batch, once the transaction settled; on the live attempt, or the next.
787
+ queueMicrotask(() => this.#need(run));
788
+ return;
789
+ case "restore":
790
+ case "update":
791
+ case "outcome":
792
+ return;
793
+ case "delete":
794
+ this.#owner.countRuns(-1);
795
+ run.resolve(run.outcome);
796
+ return;
797
+ case "block":
798
+ this.#owner.countRuns(-1);
799
+ return;
800
+ case "unblock":
801
+ this.#need(run);
802
+ return;
803
+ case "drop":
804
+ this.report({ kind: "job_dropped", id: run.id });
805
+ run.reject(new ChordError({ code: "aborted", message: `${this.name}: run ${run.id} dropped` }));
806
+ return;
807
+ }
808
+ }
809
+ /** A run's state document changed by `ops`, inside the commit step: its entry is replaced. */
810
+ #stateChanged(id, ops) {
811
+ const run = this.#runs.get(id);
812
+ // Its record may not be adopted yet (a start creates both in one commit; its entry takes the state then).
813
+ if (run?.entry === undefined)
814
+ return;
815
+ const before = run.entry;
816
+ run.entry = this.#entryOf(run);
817
+ this.running.stateChanged(before, run.entry, ops);
818
+ }
819
+ /** A run's record changed, inside the commit step: its entry is replaced. */
820
+ #replaceEntry(run) {
821
+ const before = run.entry;
822
+ run.entry = this.#entryOf(run);
823
+ this.running.replace(before, run.entry);
824
+ }
825
+ /**
826
+ * `run`'s `running` entry: blocked, or with its state and its args as the current code takes them (an older run's
827
+ * mapped; one the code does not take, or whose mapping throws, shows its own).
828
+ */
829
+ #entryOf(run) {
830
+ let args = run.args;
831
+ if (run.phase !== "blocked" && run.version !== this.definition.version && this.#takes(run)) {
832
+ try {
833
+ args = this.argsOf(run, this.definition);
834
+ }
835
+ catch {
836
+ // The provider's mapping threw: its own args (its finish meets the same throw and is retried).
837
+ }
838
+ }
839
+ return run.entryFor(this.stateOf(run.id), args);
840
+ }
841
+ #discarded() {
842
+ return new ChordError({
843
+ code: "released",
844
+ reason: "discarded",
845
+ message: `${this.name}: the start's transaction was discarded`,
846
+ });
847
+ }
848
+ }
849
+ /** Runs every adoption of `adopts`. */
850
+ function runAll(adopts) {
851
+ for (const adopt of adopts)
852
+ adopt();
853
+ }
854
+ /** The record fields a change writes, its phase transitions included. */
855
+ function recordFields(change) {
856
+ switch (change.kind) {
857
+ case "create":
858
+ return {};
859
+ case "update":
860
+ return change.fields;
861
+ case "outcome":
862
+ return { phase: "finishing", outcome: change.outcome };
863
+ case "block":
864
+ return { phase: "blocked", blocked: change.reason };
865
+ case "unblock":
866
+ return { phase: change.phase, blocked: undefined, finishFailures: 0 };
867
+ }
868
+ }
869
+ //# sourceMappingURL=records.js.map