@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,1072 @@
1
+ // Attempts (§6, §13, §14, §15): one activation of an object, a fresh instance each time. It is the `self` its factory
2
+ // declares with (handles to the object's documents and jobs, under its seal token); it runs the activation steps,
3
+ // each failing with its own kind; it takes the live object's calls and starts its routines and jobs; and it ends with
4
+ // its seal (slice 6a §1.3), the drain and the closes of its natives. A reload's swap hands it over (slice 7b §5): its
5
+ // routines stop and hand over to the new attempt's, its jobs to the new attempt's, and it is sealed once its calls
6
+ // settled.
7
+ import { awaitWithContext, withAbortSignal } from "../../context/index.js";
8
+ import { contractData } from "../contracts/internal.js";
9
+ import { ChordError } from "../data/index.js";
10
+ import { asChordError, checkArgs, checkParams, invalid, openFailure } from "../data/internal.js";
11
+ import { SealToken, } from "../documents/internal.js";
12
+ import { Job } from "../jobs/internal.js";
13
+ import { Derive, WritableSource } from "../state/internal.js";
14
+ import { tableSqlName } from "../store/sql.js";
15
+ import { TableHandle } from "../store/table-handle.js";
16
+ import { prepareTables } from "../store/table-migration.js";
17
+ import { AdaptedMembers } from "./adapted.js";
18
+ import { CallContext, withLinkedAbortSignal } from "./ctx.js";
19
+ import { Deadline } from "./deadline.js";
20
+ import { checkDependencies, ParkedLong, parkedCause, waitingOn } from "./dependencies.js";
21
+ import { FollowSource } from "./follow.js";
22
+ import { attachDerives, checkImplementation, contributionOf, } from "./members.js";
23
+ import { drained, NativeHandle, } from "./native.js";
24
+ import { retrySource } from "./retry-on.js";
25
+ import { Routines, } from "./routines.js";
26
+ /** No declarations of a kind: the shared empty list. */
27
+ const NONE = [];
28
+ /** A first dependency check that did not park: the shared answer. */
29
+ const NOT_PARKED = { done: true, cause: undefined };
30
+ /** No running work: the shared empty map. */
31
+ const NO_WORK = new Map();
32
+ /** Runs the bookkeeping of the work still in `work` (stuck past the drain) and forgets it. */
33
+ function cleanUp(work) {
34
+ if (work === undefined)
35
+ return;
36
+ for (const [running, cleanup] of work) {
37
+ work.delete(running);
38
+ cleanup?.();
39
+ }
40
+ }
41
+ /** The error of an object, or a getter, that waited `ms` without the object going live. */
42
+ export function notLive(label, ms) {
43
+ return new ChordError({ code: "unavailable", message: `${label}: did not become live within ${ms} ms` });
44
+ }
45
+ /**
46
+ * One attempt of an object. Activation: factory, documents hydrated (the object's slots), references bound, then parked
47
+ * until every dependency is live (no timer: the deadline paused), then its own steps: natives opened one after
48
+ * another, followed sources attached, members checked, derives computed; bounded by the host's `readyTimeout`.
49
+ * Ending: sealed at once (calls aborted, its transactions refused and the one holding the line discarded, its job
50
+ * invocations cut off), then the drain, the closes in reverse, derives detached; its object releases its references.
51
+ * Documents and job runs stay on the object.
52
+ */
53
+ export class Attempt {
54
+ #object;
55
+ /** The type its object was served as when it was made: its provider's `accepts` map its older consumers. */
56
+ #served;
57
+ /** Its shared mappings for the consumers of older versions (Q10), by version; made by the first. */
58
+ #adapted;
59
+ /** The object's context: the natives' closes run under it. */
60
+ #context;
61
+ /** Aborted when the attempt is abandoned or ends: openers, activation's waits and calls run under its signal. */
62
+ #abort = new AbortController();
63
+ /** The object's context under this attempt's signal. */
64
+ #opening;
65
+ /** The seal token its handles and transactions carry (the seal fence). */
66
+ #token = new SealToken();
67
+ /** Its routines once they started (most attempts have none). */
68
+ #routineRun;
69
+ /** The documents it declared, by name: "declared twice" is per attempt. */
70
+ #declared = new Map();
71
+ /** Its factory's `at(key)` pins: the object holds them from its factory's return to the next one's (rule 6). */
72
+ #pins = [];
73
+ #declaring = false;
74
+ /** Set once it went live: its derives' failures are reported from then on (`derive_failed`). */
75
+ #isLive = false;
76
+ /** The checked implementation and, for a remote object, its variant, once activation checked them. */
77
+ #members;
78
+ #variant;
79
+ #derives = [];
80
+ /** Its followed sources, attached in declaration order after the natives. */
81
+ #follows = [];
82
+ #routines = new Routines();
83
+ #jobs = new Map();
84
+ /** The tables it declared, by name. */
85
+ #tables = new Map();
86
+ /** References this attempt declared with `self.get` (params checked), bound during activation. */
87
+ #references = [];
88
+ /**
89
+ * Its dependencies (`self.get` references and `self.registry` values) in declaration order: the parked cause and
90
+ * `parked_long` name the first that blocks. Made by the first; let go after the dependency check (a live attempt
91
+ * keeps none).
92
+ */
93
+ #dependencies;
94
+ #natives = [];
95
+ /**
96
+ * Running calls' handlers, routine calls and job runs, each with its bookkeeping (call counts, `ctx.get`
97
+ * references): an ending attempt waits for them (the drain); the bookkeeping runs once, when its work settles or at
98
+ * teardown for work stuck past the drain (decision "The seal fence" (4)). One map and one reaction per piece of work:
99
+ * the call path costs no more than before the cleanups.
100
+ */
101
+ #running = new Map();
102
+ /**
103
+ * Its running job invocations, as `#running`: the drain at its end waits for them; a swap does not (they finish on
104
+ * their old code, slice 7b §8). Made by the first.
105
+ */
106
+ #runs;
107
+ /** What activation returns once the attempt was abandoned: a timeout, a cycle through its object, or its end. */
108
+ #abandoned;
109
+ /** Its dependencies while it is parked on them (the dependency check); `undefined` otherwise. */
110
+ #parked;
111
+ /** A dependency changed since the last check: the parked attempt checks again (one check per batch of changes). */
112
+ #moved = false;
113
+ /** What a parked attempt waiting for a change waits on; resolved after the change's batch. */
114
+ #changed;
115
+ /** A followed source's end while this attempt activated: it fails as it goes live (if its activation returned). */
116
+ #endedEarly;
117
+ /** Its registry reads, contributions, wake signals and writables, made by the first: most attempts have none. */
118
+ #registryDeclarations;
119
+ /**
120
+ * Its first dependency check, for a reload (its report, a swap's handover): waited for by someone, or done with why
121
+ * it parked (`undefined`: it did not). Made by the first who asks or by the check.
122
+ */
123
+ #check;
124
+ /** What a reload did to it, made by the first such step (most attempts never meet one). */
125
+ #reloaded;
126
+ constructor(object, context) {
127
+ this.#object = object;
128
+ this.#served = object.served;
129
+ this.#context = context;
130
+ this.#opening = withAbortSignal(this.#abort.signal, context);
131
+ }
132
+ state(definition) {
133
+ this.#assertDeclaring("state");
134
+ const what = `state "${definition.name}"`;
135
+ if (this.#declared.has(definition.name))
136
+ throw new Error(`${this.#object.label}: ${what} is declared twice`);
137
+ if (definition.persist) {
138
+ this.#assertPersistable(what);
139
+ this.#object.claimDocuments("chord");
140
+ }
141
+ this.#declared.set(definition.name, definition);
142
+ return this.#object.documents.declare(definition, this.#token, this);
143
+ }
144
+ /** `handle.at(key)`: pins `key` of `slot` while this attempt's factory's pins are held, and returns its source. */
145
+ at(slot, key) {
146
+ this.#assertDeclaring("state(...).at");
147
+ this.#pins.push(slot.pin(key, this.#opening));
148
+ return slot.source(key);
149
+ }
150
+ table(definition) {
151
+ this.#assertDeclaring("table");
152
+ const object = this.#object;
153
+ const { served, label } = object;
154
+ const store = this.#assertPersistable(`table "${definition.name}"`);
155
+ if (this.#tables.has(definition.name))
156
+ throw new Error(`${label}: table "${definition.name}" is declared twice`);
157
+ const sqlName = tableSqlName(served.contract.name, definition.name);
158
+ object.claimTable(sqlName);
159
+ const owner = {
160
+ label,
161
+ scope: object.documents,
162
+ assertLive: () => object.documents.assertLive(),
163
+ fail: (error) => object.failLive(this, { kind: "broken", error }),
164
+ };
165
+ // The handle's rows are the definition's, typed by `C` and `K`.
166
+ const handle = new TableHandle(definition, sqlName, store, owner);
167
+ this.#tables.set(definition.name, handle);
168
+ return handle;
169
+ }
170
+ derive(sources, compute) {
171
+ this.#assertDeclaring("derive");
172
+ // The values are the sources' values, in order; the result is `T`.
173
+ const derive = new Derive(sources, compute, this.#object.host.batch);
174
+ this.#derives.push(derive);
175
+ return derive;
176
+ }
177
+ get(Type, params) {
178
+ this.#assertDeclaring("get");
179
+ const { host } = this.#object;
180
+ const checked = checkParams(Type, params, this.#opening);
181
+ const binding = host.reference(Type, this.#object, this.#caller(), {});
182
+ this.#references.push({ binding, contract: Type, params: checked });
183
+ this.#dependencies ??= [];
184
+ this.#dependencies.push({ kind: "reference", binding });
185
+ // The binding was built from `Type`'s members.
186
+ return binding.reference;
187
+ }
188
+ registry(R) {
189
+ this.#assertDeclaring("registry");
190
+ const value = this.#object.host.registryRecord(R.name).value(R.version);
191
+ this.#dependencies ??= [];
192
+ this.#dependencies.push({ kind: "registry", value });
193
+ // Its values are the composition as `R`'s version has it, `V`.
194
+ return value;
195
+ }
196
+ writable(initial) {
197
+ this.#assertDeclaring("writable");
198
+ const owner = {
199
+ context: this.#context,
200
+ assertUsable: () => {
201
+ if (this.#token.sealed)
202
+ throw this.#object.ended();
203
+ },
204
+ };
205
+ const writable = new WritableSource(initial, owner, this.#object.host.batch);
206
+ this.#declarations().writables.push(writable);
207
+ return writable;
208
+ }
209
+ retryOn(...sources) {
210
+ this.#assertDeclaring("retryOn");
211
+ const { retrySources } = this.#declarations();
212
+ for (const source of sources)
213
+ retrySources.push(retrySource(source, this.#object.label));
214
+ }
215
+ contribute(R, value) {
216
+ this.#assertDeclaring("contribute");
217
+ const { served, label } = this.#object;
218
+ // R21: the types allow it only to host-lifetime objects; plugin code is bundled without type checks.
219
+ if (served.kind !== "local" || !served.hostLifetime) {
220
+ throw new Error(`${label}: self.contribute is valid only in a local type with empty params`);
221
+ }
222
+ const { declared } = this.#declarations();
223
+ if (declared.some(({ registry }) => registry.name === R.name)) {
224
+ throw new Error(`${label}: registry ${R.name} is contributed to twice`);
225
+ }
226
+ declared.push({ registry: R, value });
227
+ }
228
+ open(open, close, options = {}) {
229
+ this.#assertDeclaring("open");
230
+ const { host, label } = this.#object;
231
+ const closeTimeout = options.closeTimeout ?? host.timeouts.close;
232
+ const owner = {
233
+ object: label,
234
+ position: this.#natives.length + 1,
235
+ context: this.#context,
236
+ report: (error) => host.report(error),
237
+ };
238
+ const native = new NativeHandle(open, close, closeTimeout, owner);
239
+ this.#natives.push(native);
240
+ return native;
241
+ }
242
+ tx(fn, context) {
243
+ return this.#object.documents.tx(fn, this.#token, context);
244
+ }
245
+ follow(attach) {
246
+ this.#assertDeclaring("follow");
247
+ const object = this.#object;
248
+ const owner = { label: object.label, context: this.#context, ended: (end) => this.#followEnded(end) };
249
+ // The source holds what the runtime gives it, `T`, as Chord's JSON sources do.
250
+ const source = new FollowSource(attach, owner, object.host.batch);
251
+ this.#follows.push(source);
252
+ return source;
253
+ }
254
+ on(source, fn) {
255
+ this.#assertDeclaring("on");
256
+ this.#routines.on(source, fn);
257
+ }
258
+ onLive(fn) {
259
+ this.#assertDeclaring("onLive");
260
+ this.#routines.onLive(fn);
261
+ }
262
+ job(definition, implementation) {
263
+ this.#assertDeclaring("job");
264
+ const object = this.#object;
265
+ if (this.#jobs.has(definition.name)) {
266
+ throw new Error(`${object.label}: job "${definition.name}" is declared twice`);
267
+ }
268
+ if (definition.persist !== undefined) {
269
+ this.#assertPersistable(`job "${definition.name}"`);
270
+ object.claimDocuments("chord.jobs");
271
+ object.claimDocuments("chord.job-states");
272
+ }
273
+ const owner = {
274
+ host: object.host,
275
+ caller: this.#caller(),
276
+ context: this.#context,
277
+ signal: this.#abort.signal,
278
+ token: this.#token,
279
+ documents: object.documents,
280
+ admit: (running, cleanup) => this.#admit(this.#running, running, cleanup),
281
+ admitRun: (running, cleanup) => {
282
+ this.#runs ??= new Map();
283
+ this.#admit(this.#runs, running, cleanup);
284
+ },
285
+ };
286
+ // The job keeps its runs as JSON and calls the implementation with them; the handle types them again.
287
+ const records = object.jobRecords(definition);
288
+ const job = new Job(records, implementation, owner);
289
+ this.#jobs.set(definition.name, job);
290
+ return job;
291
+ }
292
+ /**
293
+ * Activates once `ending` (the previous instance's) has finished; `readyTimeout` bounds both (an attempt abandoned
294
+ * while it waits has opened nothing).
295
+ */
296
+ async activate(ending) {
297
+ const { ready } = this.#object.host.timeouts;
298
+ const deadline = new Deadline(ready, () => {
299
+ this.abandon({ kind: "failed", cause: { kind: "transient", error: notLive(this.#object.label, ready) } });
300
+ });
301
+ try {
302
+ if (ending !== undefined) {
303
+ try {
304
+ await awaitWithContext(ending, this.#opening);
305
+ }
306
+ catch {
307
+ // An ending never rejects: only an abandonment (the deadline) ends this wait early.
308
+ return this.#abandoned;
309
+ }
310
+ }
311
+ return await this.#activate(deadline);
312
+ }
313
+ finally {
314
+ deadline.clear();
315
+ // Ended before its first dependency check (its factory threw, it was abandoned): nothing parked.
316
+ this.#settleCheck(undefined);
317
+ }
318
+ }
319
+ /** Abandons the activation with `outcome` (once): its waits stop and the openers' contexts are aborted. */
320
+ abandon(outcome) {
321
+ if (this.#abandoned !== undefined)
322
+ return;
323
+ this.#abandoned = outcome;
324
+ const reason = outcome.kind === "ended" ? outcome.error : outcome.cause.error;
325
+ this.#abort.abort(reason);
326
+ this.#stopRoutines(reason);
327
+ }
328
+ /**
329
+ * A followed runtime ended its observer (R4): `failed` fails this attempt `transient`, live or activating; `ended`
330
+ * does only while it activates (it would go live over a source that ended). An activation that already returned
331
+ * fails as it goes live.
332
+ */
333
+ #followEnded(end) {
334
+ if (end.kind === "ended" && this.#isLive)
335
+ return;
336
+ const { label } = this.#object;
337
+ const error = end.kind === "failed"
338
+ ? asChordError(end.error, label)
339
+ : new ChordError({ code: "unavailable", message: `${label}: a followed source ended while it activated` });
340
+ if (this.#isLive) {
341
+ this.#object.failLive(this, { kind: "transient", error });
342
+ return;
343
+ }
344
+ this.#endedEarly ??= error;
345
+ this.abandon({ kind: "failed", cause: { kind: "transient", error } });
346
+ }
347
+ /**
348
+ * The object went live: its jobs take starts and its routines start, in this turn; both stop when it is sealed.
349
+ * After a swap (`previous`, the attempt it replaced) its routines start once the previous attempt's routine calls
350
+ * finished (the handover per object, §14), calls never wait for it.
351
+ */
352
+ live(previous) {
353
+ this.#isLive = true;
354
+ const early = this.#endedEarly;
355
+ if (early !== undefined) {
356
+ this.#object.failLive(this, { kind: "transient", error: early });
357
+ return;
358
+ }
359
+ for (const job of this.#jobs.values())
360
+ job.live();
361
+ if (this.#routines.empty)
362
+ return;
363
+ if (previous === undefined)
364
+ this.#startRoutines();
365
+ else
366
+ void previous.handOverRoutines().then(() => this.#startRoutines());
367
+ }
368
+ /** Starts its routines, unless it was sealed meanwhile. */
369
+ #startRoutines() {
370
+ if (this.#abandoned !== undefined || this.#reloaded?.routinesStopped === true)
371
+ return;
372
+ const { host, label } = this.#object;
373
+ const run = { abort: new AbortController(), calls: new Map() };
374
+ this.#routineRun = run;
375
+ this.#routines.start({
376
+ label,
377
+ host,
378
+ caller: this.#caller(),
379
+ context: withAbortSignal(run.abort.signal, this.#context),
380
+ admit: (running, cleanup) => this.#admit(run.calls, running, cleanup),
381
+ });
382
+ }
383
+ /** Its routines stop with `reason` (or may not start any more: `#startRoutines` asks the abandonment too). */
384
+ #stopRoutines(reason) {
385
+ this.#routineRun?.abort.abort(reason);
386
+ }
387
+ /**
388
+ * A reload swaps this live attempt out (slice 7b §5): its routines stop, its jobs are handed over (their running
389
+ * invocations finish on this code), it takes no new starts; its calls run on until `drainCalls` settled.
390
+ */
391
+ handOver() {
392
+ this.#reload().handedOver = true;
393
+ this.stopRoutines();
394
+ for (const job of this.#jobs.values())
395
+ job.handOver();
396
+ }
397
+ /** Its routines stop (their ctx aborted); their running calls are waited for by the drain or the handover. */
398
+ stopRoutines() {
399
+ this.#reload().routinesStopped = true;
400
+ this.#stopRoutines(new ChordError({ code: "released", reason: "ended", message: `${this.#object.label}: reloaded` }));
401
+ }
402
+ /**
403
+ * The new attempt's routines may start: once this attempt's routine calls finished, bounded by `closeTimeout` (a
404
+ * stuck one is reported `drain_timeout`; the whole attempt is sealed by then: the swap's retirement drains its
405
+ * calls and routine calls on the same bound from the swap's start, then seals it, so a stuck call's later commit
406
+ * is refused `released`).
407
+ */
408
+ async handOverRoutines() {
409
+ const { host, label } = this.#object;
410
+ const calls = this.#routineRun?.calls ?? NO_WORK;
411
+ if ((await drained(calls.keys(), calls.size, host.timeouts.close)) === "timeout") {
412
+ host.report({ kind: "drain_timeout", object: label });
413
+ }
414
+ }
415
+ /**
416
+ * Waits for its running calls and routine calls (not its job invocations), bounded by `closeTimeout`
417
+ * (`drain_timeout` reported): a reload's swap or restart lets them finish before the seal. Its end's drain then
418
+ * waits for them no more.
419
+ */
420
+ async drainCalls() {
421
+ const { host, label } = this.#object;
422
+ const calls = [...this.#running.keys(), ...(this.#routineRun?.calls ?? NO_WORK).keys()];
423
+ this.#reload().callsDrained = true;
424
+ if ((await drained(calls, calls.length, host.timeouts.close)) === "timeout") {
425
+ host.report({ kind: "drain_timeout", object: label });
426
+ }
427
+ }
428
+ /** A reload started it: once live, its object retries its blocked job runs (slice 7b §8). */
429
+ startedByReload() {
430
+ this.#reload().started = true;
431
+ }
432
+ /** Whether a reload started it. */
433
+ get reloadStarted() {
434
+ return this.#reloaded?.started === true;
435
+ }
436
+ /** What a reload did to it, made by the first such step. */
437
+ #reload() {
438
+ this.#reloaded ??= { started: false, handedOver: false, callsDrained: false, routinesStopped: false };
439
+ return this.#reloaded;
440
+ }
441
+ /** Whether its factory declared job `name`. */
442
+ declaresJob(name) {
443
+ return this.#jobs.has(name);
444
+ }
445
+ /** Whether its factory opens natives (`self.open`): a reload restarts it instead of swapping it. */
446
+ get opensNatives() {
447
+ return this.#natives.length > 0;
448
+ }
449
+ /**
450
+ * Its first dependency check: why it parked (`parkedCause`), `undefined` when it went on (its dependencies live) or
451
+ * its activation ended before (a reload's report and a swap's handover wait for it).
452
+ */
453
+ get checked() {
454
+ const check = this.#check;
455
+ if (check?.done === true)
456
+ return Promise.resolve(check.cause);
457
+ if (check !== undefined)
458
+ return check.waiting.promise;
459
+ const waiting = Promise.withResolvers();
460
+ this.#check = { done: false, waiting };
461
+ return waiting.promise;
462
+ }
463
+ /** Its first dependency check is done: parked for `cause`, or not (once). */
464
+ #settleCheck(cause) {
465
+ const check = this.#check;
466
+ if (check?.done === true)
467
+ return;
468
+ // Not parked (most attempts): the shared answer, nothing made.
469
+ this.#check = cause === undefined ? NOT_PARKED : { done: true, cause };
470
+ check?.waiting.resolve(cause);
471
+ }
472
+ /** Whether it is parked on its dependencies (the dependency check runs). */
473
+ get isParked() {
474
+ return this.#parked !== undefined;
475
+ }
476
+ /** Its contributions, resolved by its activation: in the registries' tables while its object is live. */
477
+ get contributions() {
478
+ return this.#registryDeclarations?.contributions ?? NONE;
479
+ }
480
+ /** The variant a remote object's factory chose; `undefined` for a local object. */
481
+ get variant() {
482
+ return this.#variant;
483
+ }
484
+ /** The state members, as Chord follows them. */
485
+ get stateMembers() {
486
+ return this.#members.state;
487
+ }
488
+ /**
489
+ * Calls a method for `caller`, bound at `version`: a method outside the variant fails `invalid/member` first (for an
490
+ * older version after its table's checks), then the arguments are checked against that version (L1) and, for an
491
+ * older one (Q10), mapped forwards, the handler's result mapped back, or the provider's replacement of a removed
492
+ * method run instead; a refused method fails `contract_mismatch`. The handler runs under a ctx aborted by the caller
493
+ * and by this attempt's end, admitted to the drain before it runs. Either rejects the caller at once; the handler
494
+ * runs on, its transactions refused, and the drain waits for it. Its `ctx.get` references are released when it
495
+ * settles. Measured choices (fix round 2): one body for every version (with the shared part in a helper method, a
496
+ * call over a link was about 10% slower in the links benchmark), and no `async` (a check's throw is returned as a
497
+ * rejection; as an async function a local call allocated about 250 B more).
498
+ */
499
+ call(method, args, context, caller, version) {
500
+ let checked;
501
+ let handler;
502
+ try {
503
+ context.abortSignal?.throwIfAborted();
504
+ const { served } = this.#object;
505
+ const own = this.#members.methods.get(method);
506
+ if (own === undefined && version === served.contract.version)
507
+ throw this.#noMethod(method);
508
+ checked = checkArgs(served.provider, method, args, version, context);
509
+ const call = checked.kind === "call" ? checked.call : undefined;
510
+ handler = call !== undefined ? (callArgs, ctx) => call(callArgs, ctx) : own;
511
+ if (handler === undefined)
512
+ throw this.#noMethod(method);
513
+ }
514
+ catch (error) {
515
+ return Promise.reject(error);
516
+ }
517
+ const { host, served } = this.#object;
518
+ const linked = withLinkedAbortSignal(this.#abort.signal, context);
519
+ const callContext = linked.context;
520
+ // A local object's handlers act as the host, its principal and its incarnation (§4); a remote one's as their
521
+ // caller. The caller stays the reference's (presence, §19).
522
+ const acting = served.kind === "remote" ? caller : { principal: host.principal, incarnation: host.incarnation };
523
+ const ctx = new CallContext(callContext, acting, host);
524
+ // Admitted to the drain before the handler runs: the handler may end its own object before it returns.
525
+ const running = Promise.withResolvers();
526
+ host.count("calls", 1);
527
+ this.#admit(this.#running, running.promise, () => {
528
+ host.count("calls", -1);
529
+ linked.release();
530
+ ctx.settle();
531
+ });
532
+ // Plugin code, not type-checked: a synchronous throw or a plain value becomes the promise. Constants: the closure
533
+ // captures them, not the `let`s above.
534
+ const run = handler;
535
+ const runArgs = checked.args;
536
+ (async () => run(runArgs, ctx))().then(running.resolve, running.reject);
537
+ const settled = awaitWithContext(running.promise, callContext);
538
+ if (checked.kind === "call" || checked.result === undefined)
539
+ return settled;
540
+ // The handler's result is the current version's: its mapping back is the provider's (results are not validated).
541
+ const back = checked.result;
542
+ return settled.then((result) => back(result));
543
+ }
544
+ /** The `invalid/member` error of a method outside the variant. */
545
+ #noMethod(method) {
546
+ return invalid("member", `${this.#object.label}${this.#inVariant()} has no method "${method}"`);
547
+ }
548
+ /**
549
+ * The keyed member `member`'s ultimate slot (slice 6a §12, rule 22: through re-exposures); an unknown one fails
550
+ * `invalid/member`.
551
+ */
552
+ keyedMember(member) {
553
+ const keyed = this.#members.keyed.get(member);
554
+ if (keyed === undefined)
555
+ throw invalid("member", `${this.#object.label} has no keyed member "${member}"`);
556
+ return keyed.kind === "own" ? keyed.slot : keyed.binding.keyedSlot(keyed.member);
557
+ }
558
+ /** The keyed members as checked: what each is (`KeyedBinding`), for the keys its object holds across attempts. */
559
+ get keyedMembers() {
560
+ return this.#members.keyed;
561
+ }
562
+ /**
563
+ * State member `member` as a consumer of `version` follows it: its own member at its version, else its shared mapping
564
+ * for that version (`AdaptedMembers`); `invalid/member` outside the variant, `contract_mismatch` for a version or
565
+ * member its provider refuses.
566
+ */
567
+ memberAt(member, version) {
568
+ if (version === this.#served.contract.version)
569
+ return this.member(member);
570
+ return this.#adaptedAt(version).member(member);
571
+ }
572
+ /** How a consumer of `version` reads keyed member `member`'s documents: mapped when older (`undefined`: as they are). */
573
+ keyMapping(member, version) {
574
+ if (version === this.#served.contract.version)
575
+ return undefined;
576
+ return this.#adaptedAt(version).keyed(member);
577
+ }
578
+ /**
579
+ * Pins `key` of keyed member `member` on this instance, loaded (its own slot's document, or the re-exposed reference's
580
+ * key), as a consumer of `version` reads it (mapped when older); `release` lets it go.
581
+ */
582
+ async pinKey(member, key, version, context) {
583
+ const keyed = this.#members.keyed.get(member);
584
+ if (keyed === undefined)
585
+ throw invalid("member", `${this.#object.label} has no keyed member "${member}"`);
586
+ const raw = keyed.kind === "own"
587
+ ? await pinned(keyed.slot, key, context)
588
+ : await keyed.binding.pinKey(keyed.member, key, context);
589
+ if (version === this.#served.contract.version)
590
+ return raw;
591
+ try {
592
+ const mapped = this.#adaptedAt(version).key(member, raw.source);
593
+ return {
594
+ source: mapped.source,
595
+ release: () => {
596
+ mapped.release();
597
+ raw.release();
598
+ },
599
+ };
600
+ }
601
+ catch (error) {
602
+ raw.release();
603
+ throw error;
604
+ }
605
+ }
606
+ /** No consumer of `version` is left: its shared mapping goes. */
607
+ dropVersion(version) {
608
+ const adapted = this.#adapted?.get(version);
609
+ if (adapted === undefined)
610
+ return;
611
+ this.#adapted.delete(version);
612
+ adapted.detach(this.#object.ended());
613
+ }
614
+ /** Its mapping for `version`, made by the first use, reading this instance's own members and provider. */
615
+ #adaptedAt(version) {
616
+ this.#adapted ??= new Map();
617
+ let adapted = this.#adapted.get(version);
618
+ if (adapted === undefined) {
619
+ const { host, label } = this.#object;
620
+ adapted = new AdaptedMembers({
621
+ served: this.#served,
622
+ variant: this.#variant,
623
+ label,
624
+ batch: host.batch,
625
+ member: (name) => this.member(name),
626
+ report: (member, error) => host.report({ kind: "derive_failed", object: label, member, error }),
627
+ }, version);
628
+ this.#adapted.set(version, adapted);
629
+ }
630
+ return adapted;
631
+ }
632
+ /** The state member `member`, as Chord follows it; one outside the variant fails `invalid/member`. */
633
+ member(member) {
634
+ const source = this.#members.state.get(member);
635
+ if (source === undefined) {
636
+ throw invalid("member", `${this.#object.label}${this.#inVariant()} has no state member "${member}"`);
637
+ }
638
+ return source;
639
+ }
640
+ /**
641
+ * Ends the attempt at once (the seal fence): calls, openers and routines aborted with `error` (their callers
642
+ * rejected with it), its transactions refused and the one holding the line discarded, its job invocations cut off
643
+ * (an in-memory run ends `aborted` with `runs` as its reason: `reload` for a native restart, slice 7b §8); documents
644
+ * stay readable.
645
+ */
646
+ seal(error, runs = "restart") {
647
+ this.abandon({ kind: "ended", error });
648
+ const { documents } = this.#object;
649
+ documents.fence(this.#token);
650
+ for (const job of this.#jobs.values())
651
+ job.seal(error, runs);
652
+ }
653
+ /**
654
+ * Tears a sealed attempt down: waits for its running handlers, routine calls and runs up to the host's
655
+ * `closeTimeout` (the drain), then closes its natives in reverse with `reason`. Resolves with the closes that threw.
656
+ */
657
+ async close(reason) {
658
+ const { host, label } = this.#object;
659
+ if ((await this.#drained()) === "timeout")
660
+ host.report({ kind: "drain_timeout", object: label });
661
+ // The close writer: the persisted runs the seal stopped, and the held state changes (slice 6b §4.2).
662
+ const handedOver = this.#reloaded?.handedOver === true;
663
+ if (!handedOver)
664
+ for (const job of this.#jobs.values())
665
+ await job.writeAtClose(this.#context);
666
+ // Work stuck past the drain keeps running, but no longer counts as a call or holds its `ctx.get` references.
667
+ cleanUp(this.#running);
668
+ cleanUp(this.#routineRun?.calls);
669
+ if (!handedOver)
670
+ cleanUp(this.#runs);
671
+ const failures = [];
672
+ for (const native of [...this.#natives].reverse()) {
673
+ const failure = await native.close(reason);
674
+ if (failure !== undefined)
675
+ failures.push(failure);
676
+ }
677
+ return failures;
678
+ }
679
+ /**
680
+ * The drain at its end, bounded by `closeTimeout`: its running calls (unless a reload's `drainCalls` waited for them
681
+ * already), routine calls and job invocations (unless a swap handed its jobs over: they finish on their own).
682
+ */
683
+ #drained() {
684
+ const { close } = this.#object.host.timeouts;
685
+ const reloaded = this.#reloaded;
686
+ const running = reloaded?.callsDrained === true ? NO_WORK : this.#running;
687
+ const runs = reloaded?.handedOver === true ? undefined : this.#runs;
688
+ const routineCalls = this.#routineRun?.calls;
689
+ // Most attempts have only calls: no list is made for them.
690
+ if (routineCalls === undefined && runs === undefined)
691
+ return drained(running.keys(), running.size, close);
692
+ const all = [...running.keys(), ...(routineCalls ?? NO_WORK).keys(), ...(runs ?? NO_WORK).keys()];
693
+ return drained(all, all.length, close);
694
+ }
695
+ /**
696
+ * Detaches its derives (once their object no longer needs them: reads throw `released`, their watches end), its
697
+ * followed sources (their observers detached, their watches ended) and its writables (their watches ended).
698
+ */
699
+ detach() {
700
+ const ended = this.#object.ended();
701
+ for (const adapted of this.#adapted?.values() ?? [])
702
+ adapted.detach(ended);
703
+ this.#adapted = undefined;
704
+ for (const derive of this.#derives)
705
+ derive.detach(ended);
706
+ for (const follow of this.#follows)
707
+ follow.detach();
708
+ const declarations = this.#registryDeclarations;
709
+ if (declarations !== undefined)
710
+ for (const writable of declarations.writables)
711
+ writable.detach(ended);
712
+ }
713
+ /** Releases its references and registry reads. */
714
+ releaseReferences() {
715
+ for (const { binding } of this.#references)
716
+ binding.release();
717
+ const declarations = this.#registryDeclarations;
718
+ if (declarations !== undefined)
719
+ for (const release of declarations.reads.splice(0))
720
+ release();
721
+ }
722
+ /** The activation steps; each catches its own failures with their kind (the table in slice 2's spec). */
723
+ async #activate(deadline) {
724
+ let implementation;
725
+ let dependencies = NONE;
726
+ try {
727
+ implementation = this.#declare();
728
+ // Right after the factory, before anything can fail: a failed attempt keeps its wake signals.
729
+ this.#object.retryOn(this.#registryDeclarations?.retrySources ?? NONE);
730
+ const { documents } = this.#object;
731
+ // The object holds the pins from now on.
732
+ documents.hydrate(this.#declared, this.#pins.splice(0), this.#opening);
733
+ const loading = documents.load(this.#opening);
734
+ if (loading !== undefined)
735
+ await loading;
736
+ if (this.#tables.size > 0)
737
+ await this.#prepareTables(deadline);
738
+ // A persisted job's runs, loaded once per object: rebuilt before anything runs.
739
+ for (const job of this.#jobs.values())
740
+ await job.load(this.#opening);
741
+ const { host } = this.#object;
742
+ for (const { binding, contract, params } of this.#references) {
743
+ host.bind(binding, contract, params, this.#opening);
744
+ }
745
+ // Once all are bound: a dependency made here may have bound back to this object meanwhile.
746
+ for (const { binding } of this.#references) {
747
+ const { target } = binding;
748
+ if (target !== undefined)
749
+ this.#object.assertNoCycle(target, this.#opening);
750
+ }
751
+ // Needed only up to the dependency check: a live attempt keeps none.
752
+ dependencies = this.#dependencies ?? NONE;
753
+ this.#dependencies = undefined;
754
+ for (const dependency of dependencies) {
755
+ // Read from here until its references are released: an older version's mapping is kept meanwhile.
756
+ if (dependency.kind === "registry")
757
+ this.#declarations().reads.push(dependency.value.read());
758
+ }
759
+ }
760
+ catch (error) {
761
+ return this.#broken(error);
762
+ }
763
+ // Parked only when something is not live yet (most activations find their dependencies live).
764
+ if ((dependencies.length > 0 && checkDependencies(dependencies).kind !== "live") || this.#pinsKeys()) {
765
+ const parked = await this.#park(dependencies, deadline);
766
+ if (parked !== undefined)
767
+ return parked;
768
+ }
769
+ else {
770
+ this.#settleCheck(undefined);
771
+ // Its own steps start in a later turn: an object ended in the turn it was made opens nothing.
772
+ await undefined;
773
+ }
774
+ return this.#ownSteps(implementation);
775
+ }
776
+ /**
777
+ * Parks while a dependency is not live (dependency model §3), with no timer: the deadline paused, `parked_long`'s
778
+ * report the only clock. Checks at every change of a dependency (after its batch) and shows what it found on its
779
+ * object; once all are live, the keys the factory pinned on them are loaded (a failed load parks it `waiting`
780
+ * until the next change or a retry). Resolves `undefined` once all are live and pinned, else with how it ends:
781
+ * abandoned, or broken (a cycle, an ended dependency).
782
+ */
783
+ async #park(dependencies, deadline) {
784
+ const object = this.#object;
785
+ deadline.pause();
786
+ this.#parked = dependencies;
787
+ object.waitsFor(dependencies);
788
+ // Waiters on a registry are woken when its value turns usable or its failure changes.
789
+ const waits = [];
790
+ for (const each of dependencies)
791
+ if (each.kind === "registry")
792
+ waits.push(each.value.wait(this));
793
+ const long = new ParkedLong(object);
794
+ try {
795
+ for (;;) {
796
+ this.#moved = false;
797
+ const check = checkDependencies(dependencies);
798
+ if (check.kind !== "parked")
799
+ this.#settleCheck(undefined);
800
+ if (check.kind === "broken")
801
+ return this.#abandoned ?? { kind: "failed", cause: { kind: "broken", error: check.error } };
802
+ if (check.kind === "live") {
803
+ const pinned = await this.#pinKeys(long);
804
+ if (this.#abandoned !== undefined)
805
+ return this.#abandoned;
806
+ // Changed while the keys loaded: checked again.
807
+ if (pinned === undefined && !this.#moved) {
808
+ // Its own steps follow: `loading` until its outcome (a failure shows as the failure, not this).
809
+ object.unparked(this);
810
+ return undefined;
811
+ }
812
+ if (pinned !== undefined)
813
+ object.parked(this, pinned, true);
814
+ }
815
+ else {
816
+ object.parked(this, check.shown, check.firstPass);
817
+ this.#settleCheck(parkedCause(check));
818
+ long.blockedBy(check.blocker);
819
+ }
820
+ if (!(await this.#nextChange()))
821
+ return this.#abandoned;
822
+ }
823
+ }
824
+ finally {
825
+ long.stop();
826
+ for (const release of waits)
827
+ release();
828
+ this.#parked = undefined;
829
+ object.waitsFor(NONE);
830
+ deadline.resume();
831
+ }
832
+ }
833
+ /**
834
+ * Waits for the next change of a dependency (at once when one came during the check); `false` when the attempt was
835
+ * abandoned meanwhile (its end, the only thing that stops the wait).
836
+ */
837
+ async #nextChange() {
838
+ if (this.#moved)
839
+ return true;
840
+ this.#changed = Promise.withResolvers();
841
+ try {
842
+ await awaitWithContext(this.#changed.promise, this.#opening);
843
+ return true;
844
+ }
845
+ catch {
846
+ return false;
847
+ }
848
+ finally {
849
+ this.#changed = undefined;
850
+ }
851
+ }
852
+ /**
853
+ * Loads the keys the factory pinned on its dependencies' keyed members (`at(key)`), each reference's named to `long`
854
+ * as the blocker while they load (`failed` when they failed); `undefined` once all are, else what the parked attempt
855
+ * shows for the first that failed to load (`waiting` on its reference).
856
+ */
857
+ async #pinKeys(long) {
858
+ for (const { binding } of this.#references) {
859
+ const { label } = binding;
860
+ try {
861
+ const pinning = binding.pinKeys(this.#opening);
862
+ if (pinning === undefined)
863
+ continue;
864
+ long.blockedBy({ label, state: "loading" });
865
+ await pinning;
866
+ }
867
+ catch (error) {
868
+ long.blockedBy({ label, state: "failed" });
869
+ return waitingOn(label, asChordError(error, label));
870
+ }
871
+ }
872
+ return undefined;
873
+ }
874
+ /**
875
+ * A dependency of this parked attempt changed (its state, its cause, its first outcome): it checks again after the
876
+ * batch that changed it, once however many changed. A change while it checks or loads pinned keys is remembered
877
+ * (`#moved`); one outside parking costs a flag.
878
+ */
879
+ dependencyMoved() {
880
+ if (this.#moved)
881
+ return;
882
+ this.#moved = true;
883
+ if (this.#changed !== undefined)
884
+ queueMicrotask(() => this.#changed?.resolve());
885
+ }
886
+ /** A registry it is parked on closed with its host: the parked attempt ends with `error`. */
887
+ closed(error) {
888
+ this.abandon({ kind: "ended", error });
889
+ }
890
+ /** Whether its factory pinned keys on its dependencies' keyed members (`at(key)`), which load while it is parked. */
891
+ #pinsKeys() {
892
+ for (const { binding } of this.#references)
893
+ if (binding.pinsKeys)
894
+ return true;
895
+ return false;
896
+ }
897
+ /**
898
+ * `ref.retry()` on its parked object (`failed { waiting }`): passed on to every failed dependency (a broken or
899
+ * transient one retries, a parked one passes it on, a request waiting in an index is left alone), as a step of
900
+ * `walk`; then it checks again (a key that failed to load is loaded again).
901
+ */
902
+ retryDependencies(walk) {
903
+ for (const dependency of this.#parked ?? NONE) {
904
+ if (dependency.kind === "reference" && dependency.binding.refState.kind === "failed") {
905
+ dependency.binding.retry(walk);
906
+ }
907
+ }
908
+ this.dependencyMoved();
909
+ }
910
+ /**
911
+ * The steps after the dependency check (its own: natives, followed sources, the member check, derives, the keys
912
+ * references pin on its keyed members), under the deadline. A dependency that leaves `live` meanwhile changes
913
+ * nothing (R18 after live).
914
+ */
915
+ async #ownSteps(implementation) {
916
+ for (const native of this.#natives) {
917
+ // An attempt abandoned before this open (ended while it waited) closed its natives already: none opens late.
918
+ if (this.#abandoned !== undefined)
919
+ return this.#abandoned;
920
+ try {
921
+ await awaitWithContext(native.open(this.#opening), this.#opening);
922
+ }
923
+ catch (error) {
924
+ return this.#abandoned ?? { kind: "failed", cause: openFailure(error, this.#object.label) };
925
+ }
926
+ }
927
+ for (const follow of this.#follows) {
928
+ if (this.#abandoned !== undefined)
929
+ return this.#abandoned;
930
+ try {
931
+ await awaitWithContext(follow.attach(this.#opening), this.#opening);
932
+ }
933
+ catch (error) {
934
+ const cause = { kind: "transient", error: asChordError(error, this.#object.label) };
935
+ return this.#abandoned ?? { kind: "failed", cause };
936
+ }
937
+ }
938
+ let members;
939
+ try {
940
+ const checked = checkImplementation(this.#object.served.contract, implementation);
941
+ members = checked.members;
942
+ this.#members = members;
943
+ this.#variant = checked.variant;
944
+ if (this.#registryDeclarations !== undefined)
945
+ this.#registryDeclarations.contributions = this.#resolveContributions(this.#registryDeclarations);
946
+ const { host, label } = this.#object;
947
+ attachDerives(this.#derives, members.state, (member) => (error) => {
948
+ // During activation a throwing derive fails the attempt, which `activation_failed` reports alone.
949
+ if (!this.#isLive)
950
+ return;
951
+ host.report({ kind: "derive_failed", object: label, ...(member === undefined ? {} : { member }), error });
952
+ });
953
+ for (const derive of this.#derives)
954
+ void derive.value;
955
+ }
956
+ catch (error) {
957
+ return this.#broken(error);
958
+ }
959
+ return this.#abandoned ?? { kind: "live" };
960
+ }
961
+ /** Its declared contributions, as Chord follows them (its references are live now), by its plugin and type. */
962
+ #resolveContributions({ declared }) {
963
+ const { served, host } = this.#object;
964
+ const contributor = { plugin: served.plugin, type: served.contract.name };
965
+ return declared.map(({ registry, value }) => contributionOf(host.registryRecord(registry.name), contributor, registry.version, value));
966
+ }
967
+ /**
968
+ * Brings the declared tables to their definitions before the references are bound (slice 6a §9): created fresh or
969
+ * migrated eagerly, with the `readyTimeout` deadline paused meanwhile (resumed with the budget it had left).
970
+ */
971
+ async #prepareTables(deadline) {
972
+ const handles = [...this.#tables.values()];
973
+ const tables = handles.map(({ definition, sql }) => ({ definition, table: sql.table }));
974
+ const fence = { admit: () => !this.#token.sealed && this.#abandoned === undefined, adopt: () => { } };
975
+ deadline.pause();
976
+ try {
977
+ await prepareTables(tables, handles[0].store, fence, this.#object.label, this.#opening);
978
+ }
979
+ finally {
980
+ deadline.resume();
981
+ }
982
+ }
983
+ /**
984
+ * Runs the factory with declarations open; the member check establishes what it returned. A throwing factory
985
+ * releases its pins.
986
+ */
987
+ #declare() {
988
+ this.#declaring = true;
989
+ try {
990
+ const { served, params, principal } = this.#object;
991
+ if (served.kind === "local")
992
+ return served.factory(params, this);
993
+ // A remote object's identity has its principal.
994
+ return served.factory(params, principal, this);
995
+ }
996
+ catch (error) {
997
+ for (const release of this.#pins)
998
+ release();
999
+ throw error;
1000
+ }
1001
+ finally {
1002
+ this.#declaring = false;
1003
+ }
1004
+ }
1005
+ /**
1006
+ * Persisted data needs a stable identity (P3: a `local` type with empty params, also checked by the types) and the
1007
+ * host's store; returns the store.
1008
+ */
1009
+ #assertPersistable(what) {
1010
+ const { host, served, label } = this.#object;
1011
+ if (served.kind !== "local" || contractData(served.contract).params.fields.length > 0) {
1012
+ throw new Error(`${label}: ${what}: persist needs a stable identity (a local type with empty params)`);
1013
+ }
1014
+ if (host.store === undefined)
1015
+ throw new Error(`${label}: ${what}: persist needs a store`);
1016
+ return host.store;
1017
+ }
1018
+ /**
1019
+ * Adds `running` to `work` (its calls, routine calls or job invocations: the drain), with `cleanup` run once: when
1020
+ * it settles, or at teardown if it never does.
1021
+ */
1022
+ #admit(work, running, cleanup) {
1023
+ work.set(running, cleanup);
1024
+ // Out of the map already: the teardown ran the cleanup.
1025
+ const settled = () => {
1026
+ if (work.delete(running))
1027
+ cleanup?.();
1028
+ };
1029
+ running.then(settled, settled);
1030
+ }
1031
+ /** Whom this object's own work acts for: a remote object as its principal, a local one as the host; from this host. */
1032
+ #caller() {
1033
+ const { host, served, principal } = this.#object;
1034
+ return { principal: served.kind === "remote" ? principal : host.principal, incarnation: host.incarnation };
1035
+ }
1036
+ /** ` (variant reader)` for a remote object, for errors. */
1037
+ #inVariant() {
1038
+ return this.#variant === undefined ? "" : ` (variant ${this.#variant})`;
1039
+ }
1040
+ #broken(error) {
1041
+ const cause = { kind: "broken", error: asChordError(error, this.#object.label) };
1042
+ return this.#abandoned ?? { kind: "failed", cause };
1043
+ }
1044
+ #declarations() {
1045
+ this.#registryDeclarations ??= {
1046
+ reads: [],
1047
+ retrySources: [],
1048
+ writables: [],
1049
+ declared: [],
1050
+ contributions: NONE,
1051
+ };
1052
+ return this.#registryDeclarations;
1053
+ }
1054
+ #assertDeclaring(declaration) {
1055
+ if (!this.#declaring) {
1056
+ throw new Error(`${this.#object.label}: self.${declaration} is valid only in the factory`);
1057
+ }
1058
+ }
1059
+ }
1060
+ /** Pins `key` on `slot` and loads it when it is not in memory; a failed load releases the pin. */
1061
+ async function pinned(slot, key, context) {
1062
+ const release = slot.pin(key, context);
1063
+ try {
1064
+ await slot.ensure(key, context);
1065
+ }
1066
+ catch (error) {
1067
+ release();
1068
+ throw error;
1069
+ }
1070
+ return { source: slot.source(key), release };
1071
+ }
1072
+ //# sourceMappingURL=attempt.js.map