@earendil-works/chord 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1299) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/README.md +115 -90
  3. package/dist/context/index.d.ts +1 -1
  4. package/dist/context/index.d.ts.map +1 -1
  5. package/dist/context/index.js +1 -1
  6. package/dist/context/index.js.map +1 -1
  7. package/dist/contracts/accepts.d.ts +81 -0
  8. package/dist/contracts/accepts.d.ts.map +1 -0
  9. package/dist/contracts/accepts.js +123 -0
  10. package/dist/contracts/accepts.js.map +1 -0
  11. package/dist/contracts/contract.d.ts +121 -0
  12. package/dist/contracts/contract.d.ts.map +1 -0
  13. package/dist/contracts/contract.js +50 -0
  14. package/dist/contracts/contract.js.map +1 -0
  15. package/dist/contracts/declare.d.ts +107 -0
  16. package/dist/contracts/declare.d.ts.map +1 -0
  17. package/dist/contracts/declare.js +136 -0
  18. package/dist/contracts/declare.js.map +1 -0
  19. package/dist/contracts/evolve.d.ts +92 -0
  20. package/dist/contracts/evolve.d.ts.map +1 -0
  21. package/dist/contracts/evolve.js +179 -0
  22. package/dist/contracts/evolve.js.map +1 -0
  23. package/dist/contracts/fingerprint.d.ts +16 -0
  24. package/dist/contracts/fingerprint.d.ts.map +1 -0
  25. package/dist/contracts/fingerprint.js +50 -0
  26. package/dist/contracts/fingerprint.js.map +1 -0
  27. package/dist/contracts/history.d.ts +71 -0
  28. package/dist/contracts/history.d.ts.map +1 -0
  29. package/dist/contracts/history.js +3 -0
  30. package/dist/contracts/history.js.map +1 -0
  31. package/dist/contracts/host-kind.d.ts +40 -0
  32. package/dist/contracts/host-kind.d.ts.map +1 -0
  33. package/dist/contracts/host-kind.js +37 -0
  34. package/dist/contracts/host-kind.js.map +1 -0
  35. package/dist/contracts/index.d.ts +7 -0
  36. package/dist/contracts/index.d.ts.map +1 -0
  37. package/dist/contracts/index.js +6 -0
  38. package/dist/contracts/index.js.map +1 -0
  39. package/dist/contracts/internal.d.ts +10 -0
  40. package/dist/contracts/internal.d.ts.map +1 -0
  41. package/dist/contracts/internal.js +9 -0
  42. package/dist/contracts/internal.js.map +1 -0
  43. package/dist/contracts/names.d.ts +3 -0
  44. package/dist/contracts/names.d.ts.map +1 -0
  45. package/dist/contracts/names.js +13 -0
  46. package/dist/contracts/names.js.map +1 -0
  47. package/dist/contracts/params.d.ts +28 -0
  48. package/dist/contracts/params.d.ts.map +1 -0
  49. package/dist/contracts/params.js +50 -0
  50. package/dist/contracts/params.js.map +1 -0
  51. package/dist/contracts/schema.d.ts +102 -0
  52. package/dist/contracts/schema.d.ts.map +1 -0
  53. package/dist/contracts/schema.js +103 -0
  54. package/dist/contracts/schema.js.map +1 -0
  55. package/dist/contracts/snapshot.d.ts +16 -0
  56. package/dist/contracts/snapshot.d.ts.map +1 -0
  57. package/dist/contracts/snapshot.js +167 -0
  58. package/dist/contracts/snapshot.js.map +1 -0
  59. package/dist/data/args.d.ts +50 -0
  60. package/dist/data/args.d.ts.map +1 -0
  61. package/dist/data/args.js +83 -0
  62. package/dist/data/args.js.map +1 -0
  63. package/dist/data/errors.d.ts +80 -0
  64. package/dist/data/errors.d.ts.map +1 -0
  65. package/dist/data/errors.js +116 -0
  66. package/dist/data/errors.js.map +1 -0
  67. package/dist/data/failure.d.ts +26 -0
  68. package/dist/data/failure.d.ts.map +1 -0
  69. package/dist/data/failure.js +77 -0
  70. package/dist/data/failure.js.map +1 -0
  71. package/dist/data/index.d.ts +4 -0
  72. package/dist/data/index.d.ts.map +1 -0
  73. package/dist/data/index.js +5 -0
  74. package/dist/data/index.js.map +1 -0
  75. package/dist/data/internal.d.ts +7 -0
  76. package/dist/data/internal.d.ts.map +1 -0
  77. package/dist/data/internal.js +8 -0
  78. package/dist/data/internal.js.map +1 -0
  79. package/dist/data/params.d.ts +20 -0
  80. package/dist/data/params.d.ts.map +1 -0
  81. package/dist/data/params.js +31 -0
  82. package/dist/data/params.js.map +1 -0
  83. package/dist/data/principal.d.ts +22 -0
  84. package/dist/data/principal.d.ts.map +1 -0
  85. package/dist/data/principal.js +49 -0
  86. package/dist/data/principal.js.map +1 -0
  87. package/dist/data/validator.d.ts +12 -0
  88. package/dist/data/validator.d.ts.map +1 -0
  89. package/dist/data/validator.js +35 -0
  90. package/dist/data/validator.js.map +1 -0
  91. package/dist/delta/apply-immutable-trusted.js +3 -4
  92. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  93. package/dist/delta/diff.d.ts.map +1 -1
  94. package/dist/delta/diff.js +5 -3
  95. package/dist/delta/diff.js.map +1 -1
  96. package/dist/delta/index.d.ts +9 -1
  97. package/dist/delta/index.d.ts.map +1 -1
  98. package/dist/delta/index.js +15 -11
  99. package/dist/delta/index.js.map +1 -1
  100. package/dist/delta/pending.d.ts +36 -0
  101. package/dist/delta/pending.d.ts.map +1 -0
  102. package/dist/delta/pending.js +143 -0
  103. package/dist/delta/pending.js.map +1 -0
  104. package/dist/delta/tracker.d.ts +12 -0
  105. package/dist/delta/tracker.d.ts.map +1 -1
  106. package/dist/delta/tracker.js +109 -39
  107. package/dist/delta/tracker.js.map +1 -1
  108. package/dist/documents/address-source.d.ts +20 -0
  109. package/dist/documents/address-source.d.ts.map +1 -0
  110. package/dist/documents/address-source.js +44 -0
  111. package/dist/documents/address-source.js.map +1 -0
  112. package/dist/documents/definition.d.ts +84 -0
  113. package/dist/documents/definition.d.ts.map +1 -0
  114. package/dist/documents/definition.js +74 -0
  115. package/dist/documents/definition.js.map +1 -0
  116. package/dist/documents/documents.d.ts +126 -0
  117. package/dist/documents/documents.d.ts.map +1 -0
  118. package/dist/documents/documents.js +248 -0
  119. package/dist/documents/documents.js.map +1 -0
  120. package/dist/documents/fence.d.ts +9 -0
  121. package/dist/documents/fence.d.ts.map +1 -0
  122. package/dist/documents/fence.js +15 -0
  123. package/dist/documents/fence.js.map +1 -0
  124. package/dist/documents/handles.d.ts +76 -0
  125. package/dist/documents/handles.d.ts.map +1 -0
  126. package/dist/documents/handles.js +66 -0
  127. package/dist/documents/handles.js.map +1 -0
  128. package/dist/documents/index.d.ts +4 -0
  129. package/dist/documents/index.d.ts.map +1 -0
  130. package/dist/documents/index.js +3 -0
  131. package/dist/documents/index.js.map +1 -0
  132. package/dist/documents/internal.d.ts +9 -0
  133. package/dist/documents/internal.d.ts.map +1 -0
  134. package/dist/documents/internal.js +9 -0
  135. package/dist/documents/internal.js.map +1 -0
  136. package/dist/documents/keyed-slot.d.ts +103 -0
  137. package/dist/documents/keyed-slot.d.ts.map +1 -0
  138. package/dist/documents/keyed-slot.js +395 -0
  139. package/dist/documents/keyed-slot.js.map +1 -0
  140. package/dist/documents/line.d.ts +7 -0
  141. package/dist/documents/line.d.ts.map +1 -0
  142. package/dist/documents/line.js +14 -0
  143. package/dist/documents/line.js.map +1 -0
  144. package/dist/documents/persistence.d.ts +104 -0
  145. package/dist/documents/persistence.d.ts.map +1 -0
  146. package/dist/documents/persistence.js +129 -0
  147. package/dist/documents/persistence.js.map +1 -0
  148. package/dist/documents/residency.d.ts +31 -0
  149. package/dist/documents/residency.d.ts.map +1 -0
  150. package/dist/documents/residency.js +93 -0
  151. package/dist/documents/residency.js.map +1 -0
  152. package/dist/documents/slot.d.ts +109 -0
  153. package/dist/documents/slot.d.ts.map +1 -0
  154. package/dist/documents/slot.js +181 -0
  155. package/dist/documents/slot.js.map +1 -0
  156. package/dist/documents/transaction.d.ts +143 -0
  157. package/dist/documents/transaction.d.ts.map +1 -0
  158. package/dist/documents/transaction.js +442 -0
  159. package/dist/documents/transaction.js.map +1 -0
  160. package/dist/host/activity.d.ts +31 -0
  161. package/dist/host/activity.d.ts.map +1 -0
  162. package/dist/host/activity.js +40 -0
  163. package/dist/host/activity.js.map +1 -0
  164. package/dist/host/adapted.d.ts +49 -0
  165. package/dist/host/adapted.d.ts.map +1 -0
  166. package/dist/host/adapted.js +214 -0
  167. package/dist/host/adapted.js.map +1 -0
  168. package/dist/host/attempt.d.ts +308 -0
  169. package/dist/host/attempt.d.ts.map +1 -0
  170. package/dist/host/attempt.js +1199 -0
  171. package/dist/host/attempt.js.map +1 -0
  172. package/dist/host/backoff.d.ts +29 -0
  173. package/dist/host/backoff.d.ts.map +1 -0
  174. package/dist/host/backoff.js +69 -0
  175. package/dist/host/backoff.js.map +1 -0
  176. package/dist/host/ctx.d.ts +94 -0
  177. package/dist/host/ctx.d.ts.map +1 -0
  178. package/dist/host/ctx.js +200 -0
  179. package/dist/host/ctx.js.map +1 -0
  180. package/dist/host/deadline.d.ts +12 -0
  181. package/dist/host/deadline.d.ts.map +1 -0
  182. package/dist/host/deadline.js +40 -0
  183. package/dist/host/deadline.js.map +1 -0
  184. package/dist/host/dependencies.d.ts +65 -0
  185. package/dist/host/dependencies.d.ts.map +1 -0
  186. package/dist/host/dependencies.js +115 -0
  187. package/dist/host/dependencies.js.map +1 -0
  188. package/dist/host/destination.d.ts +48 -0
  189. package/dist/host/destination.d.ts.map +1 -0
  190. package/dist/host/destination.js +101 -0
  191. package/dist/host/destination.js.map +1 -0
  192. package/dist/host/facet.d.ts +84 -0
  193. package/dist/host/facet.d.ts.map +1 -0
  194. package/dist/host/facet.js +55 -0
  195. package/dist/host/facet.js.map +1 -0
  196. package/dist/host/follow.d.ts +52 -0
  197. package/dist/host/follow.d.ts.map +1 -0
  198. package/dist/host/follow.js +207 -0
  199. package/dist/host/follow.js.map +1 -0
  200. package/dist/host/host.d.ts +571 -0
  201. package/dist/host/host.d.ts.map +1 -0
  202. package/dist/host/host.js +1318 -0
  203. package/dist/host/host.js.map +1 -0
  204. package/dist/host/index.d.ts +17 -0
  205. package/dist/host/index.d.ts.map +1 -0
  206. package/dist/host/index.js +6 -0
  207. package/dist/host/index.js.map +1 -0
  208. package/dist/host/internal.d.ts +11 -0
  209. package/dist/host/internal.d.ts.map +1 -0
  210. package/dist/host/internal.js +9 -0
  211. package/dist/host/internal.js.map +1 -0
  212. package/dist/host/members.d.ts +50 -0
  213. package/dist/host/members.d.ts.map +1 -0
  214. package/dist/host/members.js +107 -0
  215. package/dist/host/members.js.map +1 -0
  216. package/dist/host/native.d.ts +64 -0
  217. package/dist/host/native.d.ts.map +1 -0
  218. package/dist/host/native.js +126 -0
  219. package/dist/host/native.js.map +1 -0
  220. package/dist/host/object.d.ts +331 -0
  221. package/dist/host/object.d.ts.map +1 -0
  222. package/dist/host/object.js +1296 -0
  223. package/dist/host/object.js.map +1 -0
  224. package/dist/host/old-work.d.ts +34 -0
  225. package/dist/host/old-work.d.ts.map +1 -0
  226. package/dist/host/old-work.js +52 -0
  227. package/dist/host/old-work.js.map +1 -0
  228. package/dist/host/parked.d.ts +23 -0
  229. package/dist/host/parked.d.ts.map +1 -0
  230. package/dist/host/parked.js +79 -0
  231. package/dist/host/parked.js.map +1 -0
  232. package/dist/host/presence.d.ts +34 -0
  233. package/dist/host/presence.d.ts.map +1 -0
  234. package/dist/host/presence.js +117 -0
  235. package/dist/host/presence.js.map +1 -0
  236. package/dist/host/readiness.d.ts +27 -0
  237. package/dist/host/readiness.d.ts.map +1 -0
  238. package/dist/host/readiness.js +134 -0
  239. package/dist/host/readiness.js.map +1 -0
  240. package/dist/host/ref-state.d.ts +53 -0
  241. package/dist/host/ref-state.d.ts.map +1 -0
  242. package/dist/host/ref-state.js +83 -0
  243. package/dist/host/ref-state.js.map +1 -0
  244. package/dist/host/reference-keys.d.ts +36 -0
  245. package/dist/host/reference-keys.d.ts.map +1 -0
  246. package/dist/host/reference-keys.js +168 -0
  247. package/dist/host/reference-keys.js.map +1 -0
  248. package/dist/host/reference-source.d.ts +65 -0
  249. package/dist/host/reference-source.d.ts.map +1 -0
  250. package/dist/host/reference-source.js +285 -0
  251. package/dist/host/reference-source.js.map +1 -0
  252. package/dist/host/reference.d.ts +321 -0
  253. package/dist/host/reference.d.ts.map +1 -0
  254. package/dist/host/reference.js +797 -0
  255. package/dist/host/reference.js.map +1 -0
  256. package/dist/host/reload-cycle.d.ts +16 -0
  257. package/dist/host/reload-cycle.d.ts.map +1 -0
  258. package/dist/host/reload-cycle.js +81 -0
  259. package/dist/host/reload-cycle.js.map +1 -0
  260. package/dist/host/retry-on.d.ts +28 -0
  261. package/dist/host/retry-on.d.ts.map +1 -0
  262. package/dist/host/retry-on.js +52 -0
  263. package/dist/host/retry-on.js.map +1 -0
  264. package/dist/host/revocation.d.ts +16 -0
  265. package/dist/host/revocation.d.ts.map +1 -0
  266. package/dist/host/revocation.js +27 -0
  267. package/dist/host/revocation.js.map +1 -0
  268. package/dist/host/root.d.ts +37 -0
  269. package/dist/host/root.d.ts.map +1 -0
  270. package/dist/host/root.js +68 -0
  271. package/dist/host/root.js.map +1 -0
  272. package/dist/host/route.d.ts +64 -0
  273. package/dist/host/route.d.ts.map +1 -0
  274. package/dist/host/route.js +227 -0
  275. package/dist/host/route.js.map +1 -0
  276. package/dist/host/routines.d.ts +78 -0
  277. package/dist/host/routines.d.ts.map +1 -0
  278. package/dist/host/routines.js +398 -0
  279. package/dist/host/routines.js.map +1 -0
  280. package/dist/host/sleep.d.ts +9 -0
  281. package/dist/host/sleep.d.ts.map +1 -0
  282. package/dist/host/sleep.js +40 -0
  283. package/dist/host/sleep.js.map +1 -0
  284. package/dist/host/staging.d.ts +94 -0
  285. package/dist/host/staging.d.ts.map +1 -0
  286. package/dist/host/staging.js +304 -0
  287. package/dist/host/staging.js.map +1 -0
  288. package/dist/host/unbound-clock.d.ts +23 -0
  289. package/dist/host/unbound-clock.d.ts.map +1 -0
  290. package/dist/host/unbound-clock.js +58 -0
  291. package/dist/host/unbound-clock.js.map +1 -0
  292. package/dist/host/unbound.d.ts +37 -0
  293. package/dist/host/unbound.d.ts.map +1 -0
  294. package/dist/host/unbound.js +88 -0
  295. package/dist/host/unbound.js.map +1 -0
  296. package/dist/host/uuid.d.ts +3 -0
  297. package/dist/host/uuid.d.ts.map +1 -0
  298. package/dist/host/uuid.js +38 -0
  299. package/dist/host/uuid.js.map +1 -0
  300. package/dist/index.d.ts +29 -18
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +20 -9
  303. package/dist/index.js.map +1 -1
  304. package/dist/jobs/definition.d.ts +96 -0
  305. package/dist/jobs/definition.d.ts.map +1 -0
  306. package/dist/jobs/definition.js +83 -0
  307. package/dist/jobs/definition.js.map +1 -0
  308. package/dist/jobs/index.d.ts +5 -0
  309. package/dist/jobs/index.d.ts.map +1 -0
  310. package/dist/jobs/index.js +3 -0
  311. package/dist/jobs/index.js.map +1 -0
  312. package/dist/jobs/internal.d.ts +3 -0
  313. package/dist/jobs/internal.d.ts.map +1 -0
  314. package/dist/jobs/internal.js +4 -0
  315. package/dist/jobs/internal.js.map +1 -0
  316. package/dist/jobs/job.d.ts +149 -0
  317. package/dist/jobs/job.d.ts.map +1 -0
  318. package/dist/jobs/job.js +387 -0
  319. package/dist/jobs/job.js.map +1 -0
  320. package/dist/jobs/persisted.d.ts +38 -0
  321. package/dist/jobs/persisted.d.ts.map +1 -0
  322. package/dist/jobs/persisted.js +95 -0
  323. package/dist/jobs/persisted.js.map +1 -0
  324. package/dist/jobs/records.d.ts +231 -0
  325. package/dist/jobs/records.d.ts.map +1 -0
  326. package/dist/jobs/records.js +871 -0
  327. package/dist/jobs/records.js.map +1 -0
  328. package/dist/jobs/run-states.d.ts +69 -0
  329. package/dist/jobs/run-states.d.ts.map +1 -0
  330. package/dist/jobs/run-states.js +228 -0
  331. package/dist/jobs/run-states.js.map +1 -0
  332. package/dist/jobs/run.d.ts +117 -0
  333. package/dist/jobs/run.d.ts.map +1 -0
  334. package/dist/jobs/run.js +204 -0
  335. package/dist/jobs/run.js.map +1 -0
  336. package/dist/jobs/running.d.ts +44 -0
  337. package/dist/jobs/running.d.ts.map +1 -0
  338. package/dist/jobs/running.js +117 -0
  339. package/dist/jobs/running.js.map +1 -0
  340. package/dist/jobs/stored.d.ts +63 -0
  341. package/dist/jobs/stored.d.ts.map +1 -0
  342. package/dist/jobs/stored.js +55 -0
  343. package/dist/jobs/stored.js.map +1 -0
  344. package/dist/link/binary.d.ts +4 -0
  345. package/dist/link/binary.d.ts.map +1 -0
  346. package/dist/link/binary.js +544 -0
  347. package/dist/link/binary.js.map +1 -0
  348. package/dist/link/channel.d.ts +68 -0
  349. package/dist/link/channel.d.ts.map +1 -0
  350. package/dist/link/channel.js +215 -0
  351. package/dist/link/channel.js.map +1 -0
  352. package/dist/link/errors.d.ts +7 -0
  353. package/dist/link/errors.d.ts.map +1 -0
  354. package/dist/link/errors.js +21 -0
  355. package/dist/link/errors.js.map +1 -0
  356. package/dist/link/index.d.ts +8 -0
  357. package/dist/link/index.d.ts.map +1 -0
  358. package/dist/link/index.js +8 -0
  359. package/dist/link/index.js.map +1 -0
  360. package/dist/link/internal.d.ts +9 -0
  361. package/dist/link/internal.d.ts.map +1 -0
  362. package/dist/link/internal.js +10 -0
  363. package/dist/link/internal.js.map +1 -0
  364. package/dist/link/ipc.d.ts +22 -0
  365. package/dist/link/ipc.d.ts.map +1 -0
  366. package/dist/link/ipc.js +64 -0
  367. package/dist/link/ipc.js.map +1 -0
  368. package/dist/link/link.d.ts +34 -0
  369. package/dist/link/link.d.ts.map +1 -0
  370. package/dist/link/link.js +87 -0
  371. package/dist/link/link.js.map +1 -0
  372. package/dist/link/message.d.ts +262 -0
  373. package/dist/link/message.d.ts.map +1 -0
  374. package/dist/link/message.js +156 -0
  375. package/dist/link/message.js.map +1 -0
  376. package/dist/link/part.d.ts +80 -0
  377. package/dist/link/part.d.ts.map +1 -0
  378. package/dist/link/part.js +165 -0
  379. package/dist/link/part.js.map +1 -0
  380. package/dist/link/text.d.ts +6 -0
  381. package/dist/link/text.d.ts.map +1 -0
  382. package/dist/link/text.js +355 -0
  383. package/dist/link/text.js.map +1 -0
  384. package/dist/link/values.d.ts +40 -0
  385. package/dist/link/values.d.ts.map +1 -0
  386. package/dist/link/values.js +121 -0
  387. package/dist/link/values.js.map +1 -0
  388. package/dist/link/websocket.d.ts +26 -0
  389. package/dist/link/websocket.d.ts.map +1 -0
  390. package/dist/link/websocket.js +91 -0
  391. package/dist/link/websocket.js.map +1 -0
  392. package/dist/node/app/app.d.ts +269 -0
  393. package/dist/node/app/app.d.ts.map +1 -0
  394. package/dist/node/app/app.js +513 -0
  395. package/dist/node/app/app.js.map +1 -0
  396. package/dist/node/app/archive.d.ts +37 -0
  397. package/dist/node/app/archive.d.ts.map +1 -0
  398. package/dist/node/app/archive.js +204 -0
  399. package/dist/node/app/archive.js.map +1 -0
  400. package/dist/node/app/blobs.d.ts +23 -0
  401. package/dist/node/app/blobs.d.ts.map +1 -0
  402. package/dist/node/app/blobs.js +64 -0
  403. package/dist/node/app/blobs.js.map +1 -0
  404. package/dist/node/app/data.d.ts +35 -0
  405. package/dist/node/app/data.d.ts.map +1 -0
  406. package/dist/node/app/data.js +44 -0
  407. package/dist/node/app/data.js.map +1 -0
  408. package/dist/node/app/ephemeral-sessions.d.ts +20 -0
  409. package/dist/node/app/ephemeral-sessions.d.ts.map +1 -0
  410. package/dist/node/app/ephemeral-sessions.js +69 -0
  411. package/dist/node/app/ephemeral-sessions.js.map +1 -0
  412. package/dist/node/app/ephemeral.d.ts +11 -0
  413. package/dist/node/app/ephemeral.d.ts.map +1 -0
  414. package/dist/node/app/ephemeral.js +34 -0
  415. package/dist/node/app/ephemeral.js.map +1 -0
  416. package/dist/node/app/files-copy.d.ts +13 -0
  417. package/dist/node/app/files-copy.d.ts.map +1 -0
  418. package/dist/node/app/files-copy.js +86 -0
  419. package/dist/node/app/files-copy.js.map +1 -0
  420. package/dist/node/app/files-entry.d.ts +4 -0
  421. package/dist/node/app/files-entry.d.ts.map +1 -0
  422. package/dist/node/app/files-entry.js +7 -0
  423. package/dist/node/app/files-entry.js.map +1 -0
  424. package/dist/node/app/files-index.d.ts +180 -0
  425. package/dist/node/app/files-index.d.ts.map +1 -0
  426. package/dist/node/app/files-index.js +535 -0
  427. package/dist/node/app/files-index.js.map +1 -0
  428. package/dist/node/app/files.d.ts +363 -0
  429. package/dist/node/app/files.d.ts.map +1 -0
  430. package/dist/node/app/files.js +368 -0
  431. package/dist/node/app/files.js.map +1 -0
  432. package/dist/node/app/folder-views.d.ts +21 -0
  433. package/dist/node/app/folder-views.d.ts.map +1 -0
  434. package/dist/node/app/folder-views.js +55 -0
  435. package/dist/node/app/folder-views.js.map +1 -0
  436. package/dist/node/app/index.d.ts +12 -0
  437. package/dist/node/app/index.d.ts.map +1 -0
  438. package/dist/node/app/index.js +15 -0
  439. package/dist/node/app/index.js.map +1 -0
  440. package/dist/node/app/info.d.ts +66 -0
  441. package/dist/node/app/info.d.ts.map +1 -0
  442. package/dist/node/app/info.js +37 -0
  443. package/dist/node/app/info.js.map +1 -0
  444. package/dist/node/app/invite.d.ts +5 -0
  445. package/dist/node/app/invite.d.ts.map +1 -0
  446. package/dist/node/app/invite.js +64 -0
  447. package/dist/node/app/invite.js.map +1 -0
  448. package/dist/node/app/layout.d.ts +36 -0
  449. package/dist/node/app/layout.d.ts.map +1 -0
  450. package/dist/node/app/layout.js +87 -0
  451. package/dist/node/app/layout.js.map +1 -0
  452. package/dist/node/app/owner.d.ts +31 -0
  453. package/dist/node/app/owner.d.ts.map +1 -0
  454. package/dist/node/app/owner.js +104 -0
  455. package/dist/node/app/owner.js.map +1 -0
  456. package/dist/node/app/pairing.d.ts +55 -0
  457. package/dist/node/app/pairing.d.ts.map +1 -0
  458. package/dist/node/app/pairing.js +183 -0
  459. package/dist/node/app/pairing.js.map +1 -0
  460. package/dist/node/app/secrets.d.ts +16 -0
  461. package/dist/node/app/secrets.d.ts.map +1 -0
  462. package/dist/node/app/secrets.js +72 -0
  463. package/dist/node/app/secrets.js.map +1 -0
  464. package/dist/node/app/sessions.d.ts +72 -0
  465. package/dist/node/app/sessions.d.ts.map +1 -0
  466. package/dist/node/app/sessions.js +222 -0
  467. package/dist/node/app/sessions.js.map +1 -0
  468. package/dist/node/app/tar.d.ts +24 -0
  469. package/dist/node/app/tar.d.ts.map +1 -0
  470. package/dist/node/app/tar.js +167 -0
  471. package/dist/node/app/tar.js.map +1 -0
  472. package/dist/node/app/uploads.d.ts +37 -0
  473. package/dist/node/app/uploads.d.ts.map +1 -0
  474. package/dist/node/app/uploads.js +157 -0
  475. package/dist/node/app/uploads.js.map +1 -0
  476. package/dist/node/app/users.d.ts +37 -0
  477. package/dist/node/app/users.d.ts.map +1 -0
  478. package/dist/node/app/users.js +62 -0
  479. package/dist/node/app/users.js.map +1 -0
  480. package/dist/node/app/worker.d.ts +18 -0
  481. package/dist/node/app/worker.d.ts.map +1 -0
  482. package/dist/node/app/worker.js +84 -0
  483. package/dist/node/app/worker.js.map +1 -0
  484. package/dist/node/compression.d.ts +7 -0
  485. package/dist/node/compression.d.ts.map +1 -0
  486. package/dist/node/compression.js +25 -0
  487. package/dist/node/compression.js.map +1 -0
  488. package/dist/node/http/admission.d.ts +63 -0
  489. package/dist/node/http/admission.d.ts.map +1 -0
  490. package/dist/node/http/admission.js +134 -0
  491. package/dist/node/http/admission.js.map +1 -0
  492. package/dist/node/http/authenticate.d.ts +21 -0
  493. package/dist/node/http/authenticate.d.ts.map +1 -0
  494. package/dist/node/http/authenticate.js +34 -0
  495. package/dist/node/http/authenticate.js.map +1 -0
  496. package/dist/node/http/cookies.d.ts +32 -0
  497. package/dist/node/http/cookies.d.ts.map +1 -0
  498. package/dist/node/http/cookies.js +70 -0
  499. package/dist/node/http/cookies.js.map +1 -0
  500. package/dist/node/http/file.d.ts +23 -0
  501. package/dist/node/http/file.d.ts.map +1 -0
  502. package/dist/node/http/file.js +94 -0
  503. package/dist/node/http/file.js.map +1 -0
  504. package/dist/node/http/headers.d.ts +37 -0
  505. package/dist/node/http/headers.d.ts.map +1 -0
  506. package/dist/node/http/headers.js +136 -0
  507. package/dist/node/http/headers.js.map +1 -0
  508. package/dist/node/http/http.d.ts +111 -0
  509. package/dist/node/http/http.d.ts.map +1 -0
  510. package/dist/node/http/http.js +524 -0
  511. package/dist/node/http/http.js.map +1 -0
  512. package/dist/node/http/incoming.d.ts +19 -0
  513. package/dist/node/http/incoming.d.ts.map +1 -0
  514. package/dist/node/http/incoming.js +31 -0
  515. package/dist/node/http/incoming.js.map +1 -0
  516. package/dist/node/http/index.d.ts +11 -0
  517. package/dist/node/http/index.d.ts.map +1 -0
  518. package/dist/node/http/index.js +12 -0
  519. package/dist/node/http/index.js.map +1 -0
  520. package/dist/node/http/node.d.ts +78 -0
  521. package/dist/node/http/node.d.ts.map +1 -0
  522. package/dist/node/http/node.js +291 -0
  523. package/dist/node/http/node.js.map +1 -0
  524. package/dist/node/http/request.d.ts +60 -0
  525. package/dist/node/http/request.d.ts.map +1 -0
  526. package/dist/node/http/request.js +118 -0
  527. package/dist/node/http/request.js.map +1 -0
  528. package/dist/node/http/response.d.ts +63 -0
  529. package/dist/node/http/response.d.ts.map +1 -0
  530. package/dist/node/http/response.js +202 -0
  531. package/dist/node/http/response.js.map +1 -0
  532. package/dist/node/http/router.d.ts +132 -0
  533. package/dist/node/http/router.d.ts.map +1 -0
  534. package/dist/node/http/router.js +267 -0
  535. package/dist/node/http/router.js.map +1 -0
  536. package/dist/node/http/upgrades.d.ts +61 -0
  537. package/dist/node/http/upgrades.d.ts.map +1 -0
  538. package/dist/node/http/upgrades.js +192 -0
  539. package/dist/node/http/upgrades.js.map +1 -0
  540. package/dist/node/plugins/base-inputs.d.ts +14 -0
  541. package/dist/node/plugins/base-inputs.d.ts.map +1 -0
  542. package/dist/node/plugins/base-inputs.js +33 -0
  543. package/dist/node/plugins/base-inputs.js.map +1 -0
  544. package/dist/node/plugins/build.d.ts +77 -0
  545. package/dist/node/plugins/build.d.ts.map +1 -0
  546. package/dist/node/plugins/build.js +576 -0
  547. package/dist/node/plugins/build.js.map +1 -0
  548. package/dist/node/plugins/css-modules.d.ts +13 -0
  549. package/dist/node/plugins/css-modules.d.ts.map +1 -0
  550. package/dist/node/plugins/css-modules.js +58 -0
  551. package/dist/node/plugins/css-modules.js.map +1 -0
  552. package/dist/node/plugins/discover.d.ts +67 -0
  553. package/dist/node/plugins/discover.d.ts.map +1 -0
  554. package/dist/node/plugins/discover.js +369 -0
  555. package/dist/node/plugins/discover.js.map +1 -0
  556. package/dist/node/plugins/evaluate.d.ts +33 -0
  557. package/dist/node/plugins/evaluate.d.ts.map +1 -0
  558. package/dist/node/plugins/evaluate.js +121 -0
  559. package/dist/node/plugins/evaluate.js.map +1 -0
  560. package/dist/node/plugins/index.d.ts +11 -0
  561. package/dist/node/plugins/index.d.ts.map +1 -0
  562. package/dist/node/plugins/index.js +13 -0
  563. package/dist/node/plugins/index.js.map +1 -0
  564. package/dist/node/plugins/install.d.ts +38 -0
  565. package/dist/node/plugins/install.d.ts.map +1 -0
  566. package/dist/node/plugins/install.js +213 -0
  567. package/dist/node/plugins/install.js.map +1 -0
  568. package/dist/node/plugins/plugins.d.ts +162 -0
  569. package/dist/node/plugins/plugins.d.ts.map +1 -0
  570. package/dist/node/plugins/plugins.js +244 -0
  571. package/dist/node/plugins/plugins.js.map +1 -0
  572. package/dist/node/plugins/runtime.d.ts +57 -0
  573. package/dist/node/plugins/runtime.d.ts.map +1 -0
  574. package/dist/node/plugins/runtime.js +92 -0
  575. package/dist/node/plugins/runtime.js.map +1 -0
  576. package/dist/node/plugins/stack.d.ts +16 -0
  577. package/dist/node/plugins/stack.d.ts.map +1 -0
  578. package/dist/node/plugins/stack.js +61 -0
  579. package/dist/node/plugins/stack.js.map +1 -0
  580. package/dist/node/plugins/testing.d.ts +58 -0
  581. package/dist/node/plugins/testing.d.ts.map +1 -0
  582. package/dist/node/plugins/testing.js +210 -0
  583. package/dist/node/plugins/testing.js.map +1 -0
  584. package/dist/node/plugins/watcher.d.ts +69 -0
  585. package/dist/node/plugins/watcher.d.ts.map +1 -0
  586. package/dist/node/plugins/watcher.js +622 -0
  587. package/dist/node/plugins/watcher.js.map +1 -0
  588. package/dist/node/surfaces/bundle.d.ts +31 -0
  589. package/dist/node/surfaces/bundle.d.ts.map +1 -0
  590. package/dist/node/surfaces/bundle.js +118 -0
  591. package/dist/node/surfaces/bundle.js.map +1 -0
  592. package/dist/node/surfaces/current.d.ts +17 -0
  593. package/dist/node/surfaces/current.d.ts.map +1 -0
  594. package/dist/node/surfaces/current.js +54 -0
  595. package/dist/node/surfaces/current.js.map +1 -0
  596. package/dist/node/surfaces/index.d.ts +6 -0
  597. package/dist/node/surfaces/index.d.ts.map +1 -0
  598. package/dist/node/surfaces/index.js +6 -0
  599. package/dist/node/surfaces/index.js.map +1 -0
  600. package/dist/node/surfaces/published.d.ts +27 -0
  601. package/dist/node/surfaces/published.d.ts.map +1 -0
  602. package/dist/node/surfaces/published.js +142 -0
  603. package/dist/node/surfaces/published.js.map +1 -0
  604. package/dist/node/surfaces/served.d.ts +15 -0
  605. package/dist/node/surfaces/served.d.ts.map +1 -0
  606. package/dist/node/surfaces/served.js +42 -0
  607. package/dist/node/surfaces/served.js.map +1 -0
  608. package/dist/node/surfaces/surface-build.d.ts +53 -0
  609. package/dist/node/surfaces/surface-build.d.ts.map +1 -0
  610. package/dist/node/surfaces/surface-build.js +105 -0
  611. package/dist/node/surfaces/surface-build.js.map +1 -0
  612. package/dist/node/surfaces/tui.d.ts +40 -0
  613. package/dist/node/surfaces/tui.d.ts.map +1 -0
  614. package/dist/node/surfaces/tui.js +55 -0
  615. package/dist/node/surfaces/tui.js.map +1 -0
  616. package/dist/node/surfaces/web.d.ts +56 -0
  617. package/dist/node/surfaces/web.d.ts.map +1 -0
  618. package/dist/node/surfaces/web.js +108 -0
  619. package/dist/node/surfaces/web.js.map +1 -0
  620. package/dist/node/tui/actions.d.ts +49 -0
  621. package/dist/node/tui/actions.d.ts.map +1 -0
  622. package/dist/node/tui/actions.js +195 -0
  623. package/dist/node/tui/actions.js.map +1 -0
  624. package/dist/node/tui/credentials.d.ts +17 -0
  625. package/dist/node/tui/credentials.d.ts.map +1 -0
  626. package/dist/node/tui/credentials.js +54 -0
  627. package/dist/node/tui/credentials.js.map +1 -0
  628. package/dist/node/tui/filter.d.ts +5 -0
  629. package/dist/node/tui/filter.d.ts.map +1 -0
  630. package/dist/node/tui/filter.js +79 -0
  631. package/dist/node/tui/filter.js.map +1 -0
  632. package/dist/node/tui/index.d.ts +6 -0
  633. package/dist/node/tui/index.d.ts.map +1 -0
  634. package/dist/node/tui/index.js +6 -0
  635. package/dist/node/tui/index.js.map +1 -0
  636. package/dist/node/tui/launcher.d.ts +40 -0
  637. package/dist/node/tui/launcher.d.ts.map +1 -0
  638. package/dist/node/tui/launcher.js +439 -0
  639. package/dist/node/tui/launcher.js.map +1 -0
  640. package/dist/node/tui/pipe.d.ts +18 -0
  641. package/dist/node/tui/pipe.d.ts.map +1 -0
  642. package/dist/node/tui/pipe.js +134 -0
  643. package/dist/node/tui/pipe.js.map +1 -0
  644. package/dist/node/tui/sandbox.d.ts +54 -0
  645. package/dist/node/tui/sandbox.d.ts.map +1 -0
  646. package/dist/node/tui/sandbox.js +431 -0
  647. package/dist/node/tui/sandbox.js.map +1 -0
  648. package/dist/node/workers/base.d.ts +30 -0
  649. package/dist/node/workers/base.d.ts.map +1 -0
  650. package/dist/node/workers/base.js +255 -0
  651. package/dist/node/workers/base.js.map +1 -0
  652. package/dist/node/workers/child.d.ts +4 -0
  653. package/dist/node/workers/child.d.ts.map +1 -0
  654. package/dist/node/workers/child.js +6 -0
  655. package/dist/node/workers/child.js.map +1 -0
  656. package/dist/node/workers/control.d.ts +83 -0
  657. package/dist/node/workers/control.d.ts.map +1 -0
  658. package/dist/node/workers/control.js +77 -0
  659. package/dist/node/workers/control.js.map +1 -0
  660. package/dist/node/workers/index.d.ts +4 -0
  661. package/dist/node/workers/index.d.ts.map +1 -0
  662. package/dist/node/workers/index.js +7 -0
  663. package/dist/node/workers/index.js.map +1 -0
  664. package/dist/node/workers/lock.d.ts +30 -0
  665. package/dist/node/workers/lock.d.ts.map +1 -0
  666. package/dist/node/workers/lock.js +180 -0
  667. package/dist/node/workers/lock.js.map +1 -0
  668. package/dist/node/workers/main.d.ts +46 -0
  669. package/dist/node/workers/main.d.ts.map +1 -0
  670. package/dist/node/workers/main.js +230 -0
  671. package/dist/node/workers/main.js.map +1 -0
  672. package/dist/node/workers/process.d.ts +42 -0
  673. package/dist/node/workers/process.d.ts.map +1 -0
  674. package/dist/node/workers/process.js +125 -0
  675. package/dist/node/workers/process.js.map +1 -0
  676. package/dist/node/workers/workers.d.ts +122 -0
  677. package/dist/node/workers/workers.d.ts.map +1 -0
  678. package/dist/node/workers/workers.js +677 -0
  679. package/dist/node/workers/workers.js.map +1 -0
  680. package/dist/output.d.ts +1 -1
  681. package/dist/output.d.ts.map +1 -1
  682. package/dist/output.js +4 -2
  683. package/dist/output.js.map +1 -1
  684. package/dist/react/hooks.d.ts +43 -0
  685. package/dist/react/hooks.d.ts.map +1 -0
  686. package/dist/react/hooks.js +82 -0
  687. package/dist/react/hooks.js.map +1 -0
  688. package/dist/react/index.d.ts +3 -0
  689. package/dist/react/index.d.ts.map +1 -0
  690. package/dist/react/index.js +4 -0
  691. package/dist/react/index.js.map +1 -0
  692. package/dist/react/stores.d.ts +9 -0
  693. package/dist/react/stores.d.ts.map +1 -0
  694. package/dist/react/stores.js +37 -0
  695. package/dist/react/stores.js.map +1 -0
  696. package/dist/registries/contribution.d.ts +50 -0
  697. package/dist/registries/contribution.d.ts.map +1 -0
  698. package/dist/registries/contribution.js +129 -0
  699. package/dist/registries/contribution.js.map +1 -0
  700. package/dist/registries/entries.d.ts +18 -0
  701. package/dist/registries/entries.d.ts.map +1 -0
  702. package/dist/registries/entries.js +42 -0
  703. package/dist/registries/entries.js.map +1 -0
  704. package/dist/registries/index.d.ts +3 -0
  705. package/dist/registries/index.d.ts.map +1 -0
  706. package/dist/registries/index.js +5 -0
  707. package/dist/registries/index.js.map +1 -0
  708. package/dist/registries/internal.d.ts +4 -0
  709. package/dist/registries/internal.d.ts.map +1 -0
  710. package/dist/registries/internal.js +5 -0
  711. package/dist/registries/internal.js.map +1 -0
  712. package/dist/registries/record.d.ts +115 -0
  713. package/dist/registries/record.d.ts.map +1 -0
  714. package/dist/registries/record.js +283 -0
  715. package/dist/registries/record.js.map +1 -0
  716. package/dist/registries/registry.d.ts +74 -0
  717. package/dist/registries/registry.d.ts.map +1 -0
  718. package/dist/registries/registry.js +14 -0
  719. package/dist/registries/registry.js.map +1 -0
  720. package/dist/registries/value.d.ts +48 -0
  721. package/dist/registries/value.d.ts.map +1 -0
  722. package/dist/registries/value.js +224 -0
  723. package/dist/registries/value.js.map +1 -0
  724. package/dist/remote/calls.d.ts +25 -0
  725. package/dist/remote/calls.d.ts.map +1 -0
  726. package/dist/remote/calls.js +62 -0
  727. package/dist/remote/calls.js.map +1 -0
  728. package/dist/remote/consumer.d.ts +43 -0
  729. package/dist/remote/consumer.d.ts.map +1 -0
  730. package/dist/remote/consumer.js +350 -0
  731. package/dist/remote/consumer.js.map +1 -0
  732. package/dist/remote/hold.d.ts +141 -0
  733. package/dist/remote/hold.d.ts.map +1 -0
  734. package/dist/remote/hold.js +579 -0
  735. package/dist/remote/hold.js.map +1 -0
  736. package/dist/remote/host-link.d.ts +77 -0
  737. package/dist/remote/host-link.d.ts.map +1 -0
  738. package/dist/remote/host-link.js +184 -0
  739. package/dist/remote/host-link.js.map +1 -0
  740. package/dist/remote/internal.d.ts +6 -0
  741. package/dist/remote/internal.d.ts.map +1 -0
  742. package/dist/remote/internal.js +6 -0
  743. package/dist/remote/internal.js.map +1 -0
  744. package/dist/remote/path.d.ts +46 -0
  745. package/dist/remote/path.d.ts.map +1 -0
  746. package/dist/remote/path.js +73 -0
  747. package/dist/remote/path.js.map +1 -0
  748. package/dist/remote/provider.d.ts +89 -0
  749. package/dist/remote/provider.d.ts.map +1 -0
  750. package/dist/remote/provider.js +597 -0
  751. package/dist/remote/provider.js.map +1 -0
  752. package/dist/remote/relay.d.ts +69 -0
  753. package/dist/remote/relay.d.ts.map +1 -0
  754. package/dist/remote/relay.js +219 -0
  755. package/dist/remote/relay.js.map +1 -0
  756. package/dist/remote/remote-object.d.ts +138 -0
  757. package/dist/remote/remote-object.d.ts.map +1 -0
  758. package/dist/remote/remote-object.js +492 -0
  759. package/dist/remote/remote-object.js.map +1 -0
  760. package/dist/remote/replica.d.ts +59 -0
  761. package/dist/remote/replica.d.ts.map +1 -0
  762. package/dist/remote/replica.js +125 -0
  763. package/dist/remote/replica.js.map +1 -0
  764. package/dist/sqlite/cloudflare.d.ts +2 -0
  765. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  766. package/dist/sqlite/cloudflare.js +10 -0
  767. package/dist/sqlite/cloudflare.js.map +1 -1
  768. package/dist/sqlite/database.d.ts +5 -2
  769. package/dist/sqlite/database.d.ts.map +1 -1
  770. package/dist/sqlite/database.js.map +1 -1
  771. package/dist/sqlite/node.d.ts +13 -2
  772. package/dist/sqlite/node.d.ts.map +1 -1
  773. package/dist/sqlite/node.js +31 -8
  774. package/dist/sqlite/node.js.map +1 -1
  775. package/dist/state/batch.d.ts +64 -0
  776. package/dist/state/batch.d.ts.map +1 -0
  777. package/dist/state/batch.js +164 -0
  778. package/dist/state/batch.js.map +1 -0
  779. package/dist/state/derive.d.ts +52 -0
  780. package/dist/state/derive.d.ts.map +1 -0
  781. package/dist/state/derive.js +182 -0
  782. package/dist/state/derive.js.map +1 -0
  783. package/dist/state/index.d.ts +6 -0
  784. package/dist/state/index.d.ts.map +1 -0
  785. package/dist/state/index.js +4 -0
  786. package/dist/state/index.js.map +1 -0
  787. package/dist/state/internal.d.ts +6 -0
  788. package/dist/state/internal.d.ts.map +1 -0
  789. package/dist/state/internal.js +8 -0
  790. package/dist/state/internal.js.map +1 -0
  791. package/dist/state/native-source.d.ts +106 -0
  792. package/dist/state/native-source.d.ts.map +1 -0
  793. package/dist/state/native-source.js +240 -0
  794. package/dist/state/native-source.js.map +1 -0
  795. package/dist/state/watchable.d.ts +114 -0
  796. package/dist/state/watchable.d.ts.map +1 -0
  797. package/dist/state/watchable.js +156 -0
  798. package/dist/state/watchable.js.map +1 -0
  799. package/dist/state/writable.d.ts +32 -0
  800. package/dist/state/writable.d.ts.map +1 -0
  801. package/dist/state/writable.js +49 -0
  802. package/dist/state/writable.js.map +1 -0
  803. package/dist/store/adapter.d.ts +67 -0
  804. package/dist/store/adapter.d.ts.map +1 -0
  805. package/dist/store/adapter.js +118 -0
  806. package/dist/store/adapter.js.map +1 -0
  807. package/dist/store/allocator.d.ts +17 -0
  808. package/dist/store/allocator.d.ts.map +1 -0
  809. package/dist/store/allocator.js +30 -0
  810. package/dist/store/allocator.js.map +1 -0
  811. package/dist/store/applier.d.ts +8 -0
  812. package/dist/store/applier.d.ts.map +1 -0
  813. package/dist/store/applier.js +375 -0
  814. package/dist/store/applier.js.map +1 -0
  815. package/dist/store/apply-batch.d.ts +12 -0
  816. package/dist/store/apply-batch.d.ts.map +1 -0
  817. package/dist/store/apply-batch.js +83 -0
  818. package/dist/store/apply-batch.js.map +1 -0
  819. package/dist/store/archive.d.ts +32 -0
  820. package/dist/store/archive.d.ts.map +1 -0
  821. package/dist/store/archive.js +130 -0
  822. package/dist/store/archive.js.map +1 -0
  823. package/dist/store/backend.d.ts +10 -0
  824. package/dist/store/backend.d.ts.map +1 -0
  825. package/dist/store/backend.js +15 -0
  826. package/dist/store/backend.js.map +1 -0
  827. package/dist/store/catalog.d.ts +24 -0
  828. package/dist/store/catalog.d.ts.map +1 -0
  829. package/dist/store/catalog.js +17 -0
  830. package/dist/store/catalog.js.map +1 -0
  831. package/dist/store/claims.d.ts +23 -0
  832. package/dist/store/claims.d.ts.map +1 -0
  833. package/dist/store/claims.js +65 -0
  834. package/dist/store/claims.js.map +1 -0
  835. package/dist/store/columns.d.ts +77 -0
  836. package/dist/store/columns.d.ts.map +1 -0
  837. package/dist/store/columns.js +77 -0
  838. package/dist/store/columns.js.map +1 -0
  839. package/dist/store/engine.d.ts +176 -0
  840. package/dist/store/engine.d.ts.map +1 -0
  841. package/dist/store/engine.js +283 -0
  842. package/dist/store/engine.js.map +1 -0
  843. package/dist/store/evaluate.d.ts +17 -0
  844. package/dist/store/evaluate.d.ts.map +1 -0
  845. package/dist/store/evaluate.js +128 -0
  846. package/dist/store/evaluate.js.map +1 -0
  847. package/dist/store/export.d.ts +17 -0
  848. package/dist/store/export.d.ts.map +1 -0
  849. package/dist/store/export.js +200 -0
  850. package/dist/store/export.js.map +1 -0
  851. package/dist/store/expression.d.ts +150 -0
  852. package/dist/store/expression.d.ts.map +1 -0
  853. package/dist/store/expression.js +268 -0
  854. package/dist/store/expression.js.map +1 -0
  855. package/dist/store/import.d.ts +10 -0
  856. package/dist/store/import.d.ts.map +1 -0
  857. package/dist/store/import.js +276 -0
  858. package/dist/store/import.js.map +1 -0
  859. package/dist/store/index.d.ts +16 -0
  860. package/dist/store/index.d.ts.map +1 -0
  861. package/dist/store/index.js +13 -0
  862. package/dist/store/index.js.map +1 -0
  863. package/dist/store/json-column.d.ts +33 -0
  864. package/dist/store/json-column.d.ts.map +1 -0
  865. package/dist/store/json-column.js +62 -0
  866. package/dist/store/json-column.js.map +1 -0
  867. package/dist/store/jsonl.d.ts +9 -0
  868. package/dist/store/jsonl.d.ts.map +1 -0
  869. package/dist/store/jsonl.js +61 -0
  870. package/dist/store/jsonl.js.map +1 -0
  871. package/dist/store/live-query.d.ts +108 -0
  872. package/dist/store/live-query.d.ts.map +1 -0
  873. package/dist/store/live-query.js +254 -0
  874. package/dist/store/live-query.js.map +1 -0
  875. package/dist/store/outbox.d.ts +26 -0
  876. package/dist/store/outbox.d.ts.map +1 -0
  877. package/dist/store/outbox.js +80 -0
  878. package/dist/store/outbox.js.map +1 -0
  879. package/dist/store/query.d.ts +39 -0
  880. package/dist/store/query.d.ts.map +1 -0
  881. package/dist/store/query.js +97 -0
  882. package/dist/store/query.js.map +1 -0
  883. package/dist/store/refusal.d.ts +15 -0
  884. package/dist/store/refusal.d.ts.map +1 -0
  885. package/dist/store/refusal.js +36 -0
  886. package/dist/store/refusal.js.map +1 -0
  887. package/dist/store/rows.d.ts +80 -0
  888. package/dist/store/rows.d.ts.map +1 -0
  889. package/dist/store/rows.js +183 -0
  890. package/dist/store/rows.js.map +1 -0
  891. package/dist/store/schema.d.ts +25 -0
  892. package/dist/store/schema.d.ts.map +1 -0
  893. package/dist/store/schema.js +115 -0
  894. package/dist/store/schema.js.map +1 -0
  895. package/dist/store/sql.d.ts +73 -0
  896. package/dist/store/sql.d.ts.map +1 -0
  897. package/dist/store/sql.js +234 -0
  898. package/dist/store/sql.js.map +1 -0
  899. package/dist/store/step.d.ts +50 -0
  900. package/dist/store/step.d.ts.map +1 -0
  901. package/dist/store/step.js +52 -0
  902. package/dist/store/step.js.map +1 -0
  903. package/dist/store/store.d.ts +171 -0
  904. package/dist/store/store.d.ts.map +1 -0
  905. package/dist/store/store.js +818 -0
  906. package/dist/store/store.js.map +1 -0
  907. package/dist/store/table-changes.d.ts +29 -0
  908. package/dist/store/table-changes.d.ts.map +1 -0
  909. package/dist/store/table-changes.js +102 -0
  910. package/dist/store/table-changes.js.map +1 -0
  911. package/dist/store/table-evolve.d.ts +74 -0
  912. package/dist/store/table-evolve.d.ts.map +1 -0
  913. package/dist/store/table-evolve.js +201 -0
  914. package/dist/store/table-evolve.js.map +1 -0
  915. package/dist/store/table-handle.d.ts +73 -0
  916. package/dist/store/table-handle.d.ts.map +1 -0
  917. package/dist/store/table-handle.js +101 -0
  918. package/dist/store/table-handle.js.map +1 -0
  919. package/dist/store/table-history.d.ts +75 -0
  920. package/dist/store/table-history.d.ts.map +1 -0
  921. package/dist/store/table-history.js +42 -0
  922. package/dist/store/table-history.js.map +1 -0
  923. package/dist/store/table-migration.d.ts +16 -0
  924. package/dist/store/table-migration.d.ts.map +1 -0
  925. package/dist/store/table-migration.js +202 -0
  926. package/dist/store/table-migration.js.map +1 -0
  927. package/dist/store/table-writes.d.ts +125 -0
  928. package/dist/store/table-writes.d.ts.map +1 -0
  929. package/dist/store/table-writes.js +170 -0
  930. package/dist/store/table-writes.js.map +1 -0
  931. package/dist/store/table.d.ts +80 -0
  932. package/dist/store/table.d.ts.map +1 -0
  933. package/dist/store/table.js +103 -0
  934. package/dist/store/table.js.map +1 -0
  935. package/dist/store/text.d.ts +14 -0
  936. package/dist/store/text.d.ts.map +1 -0
  937. package/dist/store/text.js +51 -0
  938. package/dist/store/text.js.map +1 -0
  939. package/dist/store/writes.d.ts +5 -0
  940. package/dist/store/writes.d.ts.map +1 -0
  941. package/dist/store/writes.js +4 -0
  942. package/dist/store/writes.js.map +1 -0
  943. package/dist/surfaces/active-language.d.ts +20 -0
  944. package/dist/surfaces/active-language.d.ts.map +1 -0
  945. package/dist/surfaces/active-language.js +78 -0
  946. package/dist/surfaces/active-language.js.map +1 -0
  947. package/dist/surfaces/active-theme.d.ts +16 -0
  948. package/dist/surfaces/active-theme.d.ts.map +1 -0
  949. package/dist/surfaces/active-theme.js +47 -0
  950. package/dist/surfaces/active-theme.js.map +1 -0
  951. package/dist/surfaces/client.d.ts +96 -0
  952. package/dist/surfaces/client.d.ts.map +1 -0
  953. package/dist/surfaces/client.js +264 -0
  954. package/dist/surfaces/client.js.map +1 -0
  955. package/dist/surfaces/connection.d.ts +49 -0
  956. package/dist/surfaces/connection.d.ts.map +1 -0
  957. package/dist/surfaces/connection.js +142 -0
  958. package/dist/surfaces/connection.js.map +1 -0
  959. package/dist/surfaces/format.d.ts +5 -0
  960. package/dist/surfaces/format.d.ts.map +1 -0
  961. package/dist/surfaces/format.js +37 -0
  962. package/dist/surfaces/format.js.map +1 -0
  963. package/dist/surfaces/index.d.ts +15 -0
  964. package/dist/surfaces/index.d.ts.map +1 -0
  965. package/dist/surfaces/index.js +18 -0
  966. package/dist/surfaces/index.js.map +1 -0
  967. package/dist/surfaces/language.d.ts +53 -0
  968. package/dist/surfaces/language.d.ts.map +1 -0
  969. package/dist/surfaces/language.js +74 -0
  970. package/dist/surfaces/language.js.map +1 -0
  971. package/dist/surfaces/loaded.d.ts +42 -0
  972. package/dist/surfaces/loaded.d.ts.map +1 -0
  973. package/dist/surfaces/loaded.js +116 -0
  974. package/dist/surfaces/loaded.js.map +1 -0
  975. package/dist/surfaces/locale-choice.d.ts +25 -0
  976. package/dist/surfaces/locale-choice.d.ts.map +1 -0
  977. package/dist/surfaces/locale-choice.js +14 -0
  978. package/dist/surfaces/locale-choice.js.map +1 -0
  979. package/dist/surfaces/messages.d.ts +67 -0
  980. package/dist/surfaces/messages.d.ts.map +1 -0
  981. package/dist/surfaces/messages.js +112 -0
  982. package/dist/surfaces/messages.js.map +1 -0
  983. package/dist/surfaces/page-state.d.ts +14 -0
  984. package/dist/surfaces/page-state.d.ts.map +1 -0
  985. package/dist/surfaces/page-state.js +43 -0
  986. package/dist/surfaces/page-state.js.map +1 -0
  987. package/dist/surfaces/preference.d.ts +32 -0
  988. package/dist/surfaces/preference.d.ts.map +1 -0
  989. package/dist/surfaces/preference.js +72 -0
  990. package/dist/surfaces/preference.js.map +1 -0
  991. package/dist/surfaces/registered.d.ts +33 -0
  992. package/dist/surfaces/registered.d.ts.map +1 -0
  993. package/dist/surfaces/registered.js +51 -0
  994. package/dist/surfaces/registered.js.map +1 -0
  995. package/dist/surfaces/scripts.d.ts +84 -0
  996. package/dist/surfaces/scripts.d.ts.map +1 -0
  997. package/dist/surfaces/scripts.js +28 -0
  998. package/dist/surfaces/scripts.js.map +1 -0
  999. package/dist/surfaces/theme-choice.d.ts +31 -0
  1000. package/dist/surfaces/theme-choice.d.ts.map +1 -0
  1001. package/dist/surfaces/theme-choice.js +18 -0
  1002. package/dist/surfaces/theme-choice.js.map +1 -0
  1003. package/dist/surfaces/themes.d.ts +43 -0
  1004. package/dist/surfaces/themes.d.ts.map +1 -0
  1005. package/dist/surfaces/themes.js +110 -0
  1006. package/dist/surfaces/themes.js.map +1 -0
  1007. package/dist/surfaces/translations.d.ts +29 -0
  1008. package/dist/surfaces/translations.d.ts.map +1 -0
  1009. package/dist/surfaces/translations.js +57 -0
  1010. package/dist/surfaces/translations.js.map +1 -0
  1011. package/dist/sync/batch.d.ts +18 -0
  1012. package/dist/sync/batch.d.ts.map +1 -0
  1013. package/dist/sync/batch.js +125 -0
  1014. package/dist/sync/batch.js.map +1 -0
  1015. package/dist/sync/client.d.ts +166 -0
  1016. package/dist/sync/client.d.ts.map +1 -0
  1017. package/dist/sync/client.js +438 -0
  1018. package/dist/sync/client.js.map +1 -0
  1019. package/dist/sync/files.d.ts +46 -0
  1020. package/dist/sync/files.d.ts.map +1 -0
  1021. package/dist/sync/files.js +13 -0
  1022. package/dist/sync/files.js.map +1 -0
  1023. package/dist/sync/filesystem.d.ts +37 -0
  1024. package/dist/sync/filesystem.d.ts.map +1 -0
  1025. package/dist/sync/filesystem.js +185 -0
  1026. package/dist/sync/filesystem.js.map +1 -0
  1027. package/dist/sync/index.d.ts +8 -0
  1028. package/dist/sync/index.d.ts.map +1 -0
  1029. package/dist/sync/index.js +9 -0
  1030. package/dist/sync/index.js.map +1 -0
  1031. package/dist/sync/lines.d.ts +18 -0
  1032. package/dist/sync/lines.d.ts.map +1 -0
  1033. package/dist/sync/lines.js +46 -0
  1034. package/dist/sync/lines.js.map +1 -0
  1035. package/dist/sync/remote.d.ts +130 -0
  1036. package/dist/sync/remote.d.ts.map +1 -0
  1037. package/dist/sync/remote.js +46 -0
  1038. package/dist/sync/remote.js.map +1 -0
  1039. package/dist/sync/state.d.ts +17 -0
  1040. package/dist/sync/state.d.ts.map +1 -0
  1041. package/dist/sync/state.js +40 -0
  1042. package/dist/sync/state.js.map +1 -0
  1043. package/dist/telemetry-ingest/batch.d.ts +70 -0
  1044. package/dist/telemetry-ingest/batch.d.ts.map +1 -0
  1045. package/dist/telemetry-ingest/batch.js +110 -0
  1046. package/dist/telemetry-ingest/batch.js.map +1 -0
  1047. package/dist/telemetry-ingest/facet.d.ts +21 -0
  1048. package/dist/telemetry-ingest/facet.d.ts.map +1 -0
  1049. package/dist/telemetry-ingest/facet.js +96 -0
  1050. package/dist/telemetry-ingest/facet.js.map +1 -0
  1051. package/dist/telemetry-ingest/index.d.ts +5 -0
  1052. package/dist/telemetry-ingest/index.d.ts.map +1 -0
  1053. package/dist/telemetry-ingest/index.js +8 -0
  1054. package/dist/telemetry-ingest/index.js.map +1 -0
  1055. package/dist/telemetry-ingest/recorder.d.ts +50 -0
  1056. package/dist/telemetry-ingest/recorder.d.ts.map +1 -0
  1057. package/dist/telemetry-ingest/recorder.js +298 -0
  1058. package/dist/telemetry-ingest/recorder.js.map +1 -0
  1059. package/dist/telemetry-ingest/sender.d.ts +14 -0
  1060. package/dist/telemetry-ingest/sender.d.ts.map +1 -0
  1061. package/dist/telemetry-ingest/sender.js +64 -0
  1062. package/dist/telemetry-ingest/sender.js.map +1 -0
  1063. package/dist/telemetry-sqlite/index.d.ts +13 -4
  1064. package/dist/telemetry-sqlite/index.d.ts.map +1 -1
  1065. package/dist/telemetry-sqlite/index.js +81 -241
  1066. package/dist/telemetry-sqlite/index.js.map +1 -1
  1067. package/dist/telemetry-sqlite/node.d.ts +13 -0
  1068. package/dist/telemetry-sqlite/node.d.ts.map +1 -0
  1069. package/dist/telemetry-sqlite/node.js +27 -0
  1070. package/dist/telemetry-sqlite/node.js.map +1 -0
  1071. package/dist/telemetry-sqlite/schema.d.ts +9 -0
  1072. package/dist/telemetry-sqlite/schema.d.ts.map +1 -0
  1073. package/dist/telemetry-sqlite/schema.js +61 -0
  1074. package/dist/telemetry-sqlite/schema.js.map +1 -0
  1075. package/dist/telemetry-sqlite/store.d.ts +3 -0
  1076. package/dist/telemetry-sqlite/store.d.ts.map +1 -1
  1077. package/dist/telemetry-sqlite/store.js +24 -13
  1078. package/dist/telemetry-sqlite/store.js.map +1 -1
  1079. package/dist/telemetry.d.ts +937 -0
  1080. package/dist/telemetry.d.ts.map +1 -0
  1081. package/dist/telemetry.js +470 -0
  1082. package/dist/telemetry.js.map +1 -0
  1083. package/dist/tui/bridge.d.ts +112 -0
  1084. package/dist/tui/bridge.d.ts.map +1 -0
  1085. package/dist/tui/bridge.js +9 -0
  1086. package/dist/tui/bridge.js.map +1 -0
  1087. package/dist/tui/channel.d.ts +44 -0
  1088. package/dist/tui/channel.d.ts.map +1 -0
  1089. package/dist/tui/channel.js +150 -0
  1090. package/dist/tui/channel.js.map +1 -0
  1091. package/dist/tui/frames.d.ts +5 -0
  1092. package/dist/tui/frames.d.ts.map +1 -0
  1093. package/dist/tui/frames.js +52 -0
  1094. package/dist/tui/frames.js.map +1 -0
  1095. package/dist/tui/index.d.ts +7 -0
  1096. package/dist/tui/index.d.ts.map +1 -0
  1097. package/dist/tui/index.js +8 -0
  1098. package/dist/tui/index.js.map +1 -0
  1099. package/dist/tui/runtime.d.ts +46 -0
  1100. package/dist/tui/runtime.d.ts.map +1 -0
  1101. package/dist/tui/runtime.js +101 -0
  1102. package/dist/tui/runtime.js.map +1 -0
  1103. package/dist/tui/scope.d.ts +46 -0
  1104. package/dist/tui/scope.d.ts.map +1 -0
  1105. package/dist/tui/scope.js +141 -0
  1106. package/dist/tui/scope.js.map +1 -0
  1107. package/dist/tui/terminal.d.ts +15 -0
  1108. package/dist/tui/terminal.d.ts.map +1 -0
  1109. package/dist/tui/terminal.js +37 -0
  1110. package/dist/tui/terminal.js.map +1 -0
  1111. package/dist/tui/theme.d.ts +17 -0
  1112. package/dist/tui/theme.d.ts.map +1 -0
  1113. package/dist/tui/theme.js +38 -0
  1114. package/dist/tui/theme.js.map +1 -0
  1115. package/dist/watch.d.ts +194 -0
  1116. package/dist/watch.d.ts.map +1 -0
  1117. package/dist/watch.js +383 -0
  1118. package/dist/watch.js.map +1 -0
  1119. package/dist/web/environment.d.ts +4 -0
  1120. package/dist/web/environment.d.ts.map +1 -0
  1121. package/dist/web/environment.js +37 -0
  1122. package/dist/web/environment.js.map +1 -0
  1123. package/dist/web/index.d.ts +5 -0
  1124. package/dist/web/index.d.ts.map +1 -0
  1125. package/dist/web/index.js +7 -0
  1126. package/dist/web/index.js.map +1 -0
  1127. package/dist/web/language.d.ts +7 -0
  1128. package/dist/web/language.d.ts.map +1 -0
  1129. package/dist/web/language.js +21 -0
  1130. package/dist/web/language.js.map +1 -0
  1131. package/dist/web/page.d.ts +29 -0
  1132. package/dist/web/page.d.ts.map +1 -0
  1133. package/dist/web/page.js +92 -0
  1134. package/dist/web/page.js.map +1 -0
  1135. package/dist/web/scripts.d.ts +23 -0
  1136. package/dist/web/scripts.d.ts.map +1 -0
  1137. package/dist/web/scripts.js +50 -0
  1138. package/dist/web/scripts.js.map +1 -0
  1139. package/dist/web/styles.d.ts +17 -0
  1140. package/dist/web/styles.d.ts.map +1 -0
  1141. package/dist/web/styles.js +218 -0
  1142. package/dist/web/styles.js.map +1 -0
  1143. package/dist/web/themes.d.ts +6 -0
  1144. package/dist/web/themes.d.ts.map +1 -0
  1145. package/dist/web/themes.js +31 -0
  1146. package/dist/web/themes.js.map +1 -0
  1147. package/docs/benchmarks.md +1036 -0
  1148. package/docs/decisions.md +3436 -0
  1149. package/docs/dependencies/book.md +1671 -0
  1150. package/docs/dependencies/index.html +2641 -0
  1151. package/docs/dependencies/model.md +330 -0
  1152. package/docs/design.md +3065 -0
  1153. package/docs/durable-observers/book.md +432 -0
  1154. package/docs/durable-observers/index.html +517 -0
  1155. package/docs/flow-control/book.md +333 -0
  1156. package/docs/flow-control/fold/index.html +265 -0
  1157. package/docs/flow-control/index.html +548 -0
  1158. package/docs/flow-control/window/index.html +228 -0
  1159. package/docs/guide-plugins-hosts/book.md +957 -0
  1160. package/docs/guide-plugins-hosts/index.html +952 -0
  1161. package/docs/http-workers/book.md +378 -0
  1162. package/docs/http-workers/index.html +515 -0
  1163. package/docs/i18n/book.md +217 -0
  1164. package/docs/i18n/index.html +344 -0
  1165. package/docs/layer-1.md +311 -0
  1166. package/docs/layer-2.md +216 -0
  1167. package/docs/p3-features/README.md +6 -0
  1168. package/docs/p3-features/book.md +478 -0
  1169. package/docs/plugin-authoring.md +276 -0
  1170. package/docs/plugin-model/book.md +186 -0
  1171. package/docs/plugin-model/index.html +310 -0
  1172. package/docs/plugin-primer/book.md +273 -0
  1173. package/docs/plugin-primer/index.html +430 -0
  1174. package/docs/slice-1.md +236 -0
  1175. package/docs/slice-10.md +288 -0
  1176. package/docs/slice-11.md +114 -0
  1177. package/docs/slice-12.md +132 -0
  1178. package/docs/slice-13.md +121 -0
  1179. package/docs/slice-2.md +174 -0
  1180. package/docs/slice-3a.md +296 -0
  1181. package/docs/slice-3b.md +197 -0
  1182. package/docs/slice-4.md +146 -0
  1183. package/docs/slice-4a.md +418 -0
  1184. package/docs/slice-4b.md +208 -0
  1185. package/docs/slice-5.md +281 -0
  1186. package/docs/slice-6a.md +676 -0
  1187. package/docs/slice-6b.md +332 -0
  1188. package/docs/slice-7a.md +130 -0
  1189. package/docs/slice-7b/book.md +608 -0
  1190. package/docs/slice-7b/index.html +842 -0
  1191. package/docs/slice-7b.md +255 -0
  1192. package/docs/slice-7c.md +165 -0
  1193. package/docs/slice-8.md +194 -0
  1194. package/docs/slice-9.md +110 -0
  1195. package/docs/slices.md +241 -0
  1196. package/docs/store/book.md +670 -0
  1197. package/docs/store/index.html +861 -0
  1198. package/docs/store/walkthrough.md +193 -0
  1199. package/docs/theming/book.md +223 -0
  1200. package/docs/theming/index.html +371 -0
  1201. package/docs/tutorial/book.md +2169 -0
  1202. package/docs/tutorial/index.html +2112 -0
  1203. package/docs/tutorial/screens/click-after.png +0 -0
  1204. package/docs/tutorial/screens/click-before.png +0 -0
  1205. package/docs/tutorial/screens/edited.png +0 -0
  1206. package/docs/tutorial/screens/french.png +0 -0
  1207. package/docs/tutorial/screens/harbor.png +0 -0
  1208. package/docs/tutorial/screens/page.png +0 -0
  1209. package/docs/tutorial/screens/traces-ada.png +0 -0
  1210. package/docs/tutorial/screens/traces.png +0 -0
  1211. package/package.json +114 -20
  1212. package/src/delta/README.md +69 -0
  1213. package/dist/cell.d.ts +0 -122
  1214. package/dist/cell.d.ts.map +0 -1
  1215. package/dist/cell.js +0 -356
  1216. package/dist/cell.js.map +0 -1
  1217. package/dist/cluster.d.ts +0 -27
  1218. package/dist/cluster.d.ts.map +0 -1
  1219. package/dist/cluster.js +0 -230
  1220. package/dist/cluster.js.map +0 -1
  1221. package/dist/connection.d.ts +0 -270
  1222. package/dist/connection.d.ts.map +0 -1
  1223. package/dist/connection.js +0 -1216
  1224. package/dist/connection.js.map +0 -1
  1225. package/dist/contract.d.ts +0 -208
  1226. package/dist/contract.d.ts.map +0 -1
  1227. package/dist/contract.js +0 -246
  1228. package/dist/contract.js.map +0 -1
  1229. package/dist/declare.d.ts +0 -33
  1230. package/dist/declare.d.ts.map +0 -1
  1231. package/dist/declare.js +0 -2
  1232. package/dist/declare.js.map +0 -1
  1233. package/dist/errors.d.ts +0 -28
  1234. package/dist/errors.d.ts.map +0 -1
  1235. package/dist/errors.js +0 -59
  1236. package/dist/errors.js.map +0 -1
  1237. package/dist/host.d.ts +0 -348
  1238. package/dist/host.d.ts.map +0 -1
  1239. package/dist/host.js +0 -1000
  1240. package/dist/host.js.map +0 -1
  1241. package/dist/link.d.ts +0 -107
  1242. package/dist/link.d.ts.map +0 -1
  1243. package/dist/link.js +0 -355
  1244. package/dist/link.js.map +0 -1
  1245. package/dist/loader.d.ts +0 -4
  1246. package/dist/loader.d.ts.map +0 -1
  1247. package/dist/loader.js +0 -73
  1248. package/dist/loader.js.map +0 -1
  1249. package/dist/manager.d.ts +0 -115
  1250. package/dist/manager.d.ts.map +0 -1
  1251. package/dist/manager.js +0 -345
  1252. package/dist/manager.js.map +0 -1
  1253. package/dist/node.d.ts +0 -4
  1254. package/dist/node.d.ts.map +0 -1
  1255. package/dist/node.js +0 -4
  1256. package/dist/node.js.map +0 -1
  1257. package/dist/object.d.ts +0 -438
  1258. package/dist/object.d.ts.map +0 -1
  1259. package/dist/object.js +0 -1571
  1260. package/dist/object.js.map +0 -1
  1261. package/dist/publish.d.ts +0 -5
  1262. package/dist/publish.d.ts.map +0 -1
  1263. package/dist/publish.js +0 -40
  1264. package/dist/publish.js.map +0 -1
  1265. package/dist/registry.d.ts +0 -25
  1266. package/dist/registry.d.ts.map +0 -1
  1267. package/dist/registry.js +0 -6
  1268. package/dist/registry.js.map +0 -1
  1269. package/dist/reload.d.ts +0 -126
  1270. package/dist/reload.d.ts.map +0 -1
  1271. package/dist/reload.js +0 -653
  1272. package/dist/reload.js.map +0 -1
  1273. package/dist/remote.d.ts +0 -165
  1274. package/dist/remote.d.ts.map +0 -1
  1275. package/dist/remote.js +0 -612
  1276. package/dist/remote.js.map +0 -1
  1277. package/dist/schema.d.ts +0 -21
  1278. package/dist/schema.d.ts.map +0 -1
  1279. package/dist/schema.js +0 -228
  1280. package/dist/schema.js.map +0 -1
  1281. package/dist/state.d.ts +0 -92
  1282. package/dist/state.d.ts.map +0 -1
  1283. package/dist/state.js +0 -287
  1284. package/dist/state.js.map +0 -1
  1285. package/dist/types.d.ts +0 -88
  1286. package/dist/types.d.ts.map +0 -1
  1287. package/dist/types.js +0 -2
  1288. package/dist/types.js.map +0 -1
  1289. package/dist/websocket.d.ts +0 -15
  1290. package/dist/websocket.d.ts.map +0 -1
  1291. package/dist/websocket.js +0 -16
  1292. package/dist/websocket.js.map +0 -1
  1293. package/dist/wire.d.ts +0 -216
  1294. package/dist/wire.d.ts.map +0 -1
  1295. package/dist/wire.js +0 -165
  1296. package/dist/wire.js.map +0 -1
  1297. package/docs/guide.md +0 -814
  1298. package/docs/spec.md +0 -288
  1299. package/docs/tutorial.md +0 -931
@@ -0,0 +1,1296 @@
1
+ // Objects (§6): one per identity, from its first attempt to its end. Its state across attempts (its documents, line
2
+ // and job runs), the instance its references follow (`followed`: decision "References are the only indirection"), its
3
+ // holders, retries after failures (backoff, `ref.retry()`, passed
4
+ // on while parked), what it shows while its attempt is parked on dependencies (dependency model §3), its first outcome
5
+ // (the start barrier, decision (a)), a live object's failure (slice 6a §1.4), the waits and cycle checks of activations
6
+ // (Q5, its instance id and the activation chain it was created for), lingering after its last reference (§3, D8), the
7
+ // job runs that keep it alive (§15), its contributions to registries while live and its wake signals (`retryOn`, slice
8
+ // 8), its ending, revocation included (§4, R11), and what a reload does to it (decision "Reload restarts every affected
9
+ // object; old work finishes on old code"): a restart, whose old attempt serves old work until it drained and its
10
+ // successor's requests are ready, a retry on the new code, or its end by its type's removal, after which its
11
+ // references wait with their last values and follow the next object of the identity.
12
+ import { awaitWithContext } from "../context/index.js";
13
+ import { ChordError } from "../data/index.js";
14
+ import { asChordError, binds, invalid, sameCause } from "../data/internal.js";
15
+ import { Documents } from "../documents/internal.js";
16
+ import { JobRecords } from "../jobs/internal.js";
17
+ import { CHAIN } from "../link/internal.js";
18
+ import { LiveQueries } from "../store/live-query.js";
19
+ import { chordMetrics } from "../telemetry.js";
20
+ import { refusal } from "./adapted.js";
21
+ import { Attempt } from "./attempt.js";
22
+ import { OPENING } from "./old-work.js";
23
+ import { Readiness } from "./readiness.js";
24
+ import { LIVE, LOADING } from "./ref-state.js";
25
+ import { retryWalk } from "./reference.js";
26
+ import { RetryWakes } from "./retry-on.js";
27
+ import { uuidv7 } from "./uuid.js";
28
+ const END = { kind: "end" };
29
+ const CLOSE = { kind: "close" };
30
+ const RELOAD = { kind: "reload" };
31
+ /** No dependencies waited for: the shared empty list. */
32
+ const NO_DEPENDENCIES = [];
33
+ /** No contributions leaving: the shared empty list. */
34
+ const NO_CONTRIBUTIONS = [];
35
+ /**
36
+ * One object. Each attempt is a fresh `Attempt`; the documents, the line, the job runs and the holders outlive it. An
37
+ * attempt parked on its dependencies waits for them without a timer; a transient failure (its own) is retried after its
38
+ * backoff window, or at once when a reference asks (`retry`); a broken one stays failed until a reference asks.
39
+ * The object ends with its last reference, a live one after its type's `linger` (never, for a host-lifetime object),
40
+ * or when the host closes.
41
+ */
42
+ export class ChordObject {
43
+ /** An object on this host (a reference's target that is not held over a link). */
44
+ kind = "local";
45
+ host;
46
+ /** Its served type: replaced by a reload that restarts or retries it. */
47
+ served;
48
+ params;
49
+ /** Its params' identity key (empty for empty params). */
50
+ key;
51
+ /** The principal in a remote object's identity, which its factory gets; `undefined` for a local object. */
52
+ principal;
53
+ identity;
54
+ /** The object in errors, reports and cycles: its type, and its params key when it has params. */
55
+ label;
56
+ /**
57
+ * The activation chain it was created for (Q5): the instance ids of the activations waiting for it, from the hold
58
+ * that created it (a trusted link's) or the activation here that declared it; empty otherwise.
59
+ */
60
+ chain;
61
+ /** Its documents and line, across its attempts. */
62
+ documents;
63
+ /** The context of every attempt: its creator's, without the creator's cancellation. */
64
+ #context;
65
+ /**
66
+ * What its next attempt's activation span links to: its first trigger (the span that created it, a hold's carrier),
67
+ * then the last attempt's span (a retry's trigger).
68
+ */
69
+ #trigger;
70
+ /** Its attempts so far (the activation span's `attempt`). */
71
+ #attempts = 0;
72
+ /** Its job runs by job name, across its attempts. */
73
+ #jobs = new Map();
74
+ /** This instance's id (uuidv7), minted at its first attempt: a restarted object is a new instance (D4). */
75
+ #instance;
76
+ #state = { kind: "waiting" };
77
+ /** References and holds of this object. */
78
+ #holders = new Set();
79
+ /** The dependencies its parked attempt waits for; their objects are followed to find cycles (Q5). */
80
+ #waitingFor = NO_DEPENDENCIES;
81
+ /**
82
+ * Its first outcome (decision (a)): live, failed, parked with no blocker here still without one, or ended; once.
83
+ * The promise is made by the first who waits for it (the start barrier, for host-lifetime objects).
84
+ */
85
+ #firstOutcome;
86
+ #hasFirstOutcome = false;
87
+ /** The error of the last failed attempt, or the last cause a parked attempt showed, until one goes live. */
88
+ #lastFailure;
89
+ /** Ends the object when its type's `linger` passed after its last reference; cleared by a new one. */
90
+ #lingering;
91
+ /** Its running and finishing job runs: they keep it alive like references (D4), without being references. */
92
+ #runs = 0;
93
+ /**
94
+ * The instance its references follow (`followed`): the live one, or the last one that went live while it still
95
+ * changes after a failure or during a restart (references take their last values from it when it stops);
96
+ * `undefined` before the first went live and once it stopped changing.
97
+ */
98
+ #exposed;
99
+ /**
100
+ * Whether references still follow `#exposed`, which may still change: while it is live, while a restart keeps it
101
+ * open for old work, or failed live until the commits admitted before it published (every member, its own and
102
+ * re-exposed ones: audit A10); not once it stopped changing.
103
+ */
104
+ #following = false;
105
+ /** The one timer storing its jobs' held state changes by their earliest deadline (D8), while one is held. */
106
+ #flush;
107
+ /** Its wake signals (`retryOn`), the last attempt's declaration; made by the first. */
108
+ #wakes;
109
+ /**
110
+ * A restart's old attempt while it is open (until it stopped changing): old work runs on it, and consumers whose
111
+ * version it binds see it live (decision "Reload restarts every affected object", rules 2 and 5).
112
+ */
113
+ #old;
114
+ /**
115
+ * A restart's old attempt without natives whose contributions stay in the tables until its successor is live (F-c),
116
+ * replaced there in one batch; they leave if the successor fails, parks on a failure or the object ends.
117
+ */
118
+ #kept;
119
+ /** A restart's readiness, until its successor's first dependency check. */
120
+ #readiness;
121
+ /** A restart's successor that shows its readiness's failures, until the old attempt ended. */
122
+ #showsReadiness;
123
+ /** Starts a restart's readiness and successor, once every fate of its reload started (`startSuccessor`). */
124
+ #startSuccessor;
125
+ /** The objects whose gate its activation's opener waits at now: its wait edges for reload cycles. */
126
+ #gateWaits;
127
+ /** Its live queries by table, across its attempts; made by the first table it declares. */
128
+ #liveQueries;
129
+ /** Resolves at its next change of state, for calls waiting at the gate; made by the first one. */
130
+ #changed;
131
+ constructor(host, served, params, principal, key, identity, trigger, context, chain) {
132
+ this.host = host;
133
+ this.served = served;
134
+ this.params = params;
135
+ this.principal = principal;
136
+ this.key = key;
137
+ this.identity = identity;
138
+ this.label = key === "" ? served.contract.name : `${served.contract.name}(${key})`;
139
+ this.chain = chain;
140
+ this.#trigger = trigger;
141
+ this.#context = context;
142
+ const { store } = host;
143
+ this.documents = new Documents({
144
+ label: this.label,
145
+ batch: host.batch,
146
+ context,
147
+ store: store === undefined ? undefined : { store, owner: served.contract.name },
148
+ fail: (error) => {
149
+ if (this.#state.kind === "live")
150
+ this.failLive(this.#state.attempt, { kind: "broken", error });
151
+ },
152
+ report: (error) => host.report(error),
153
+ telemetry: host.telemetry,
154
+ });
155
+ }
156
+ /** The object's state as its references show it. */
157
+ get state() {
158
+ const state = this.#state;
159
+ if (state.kind === "failed")
160
+ return state.failure;
161
+ if (state.kind === "live")
162
+ return LIVE;
163
+ if (state.kind === "ended")
164
+ return state.ended;
165
+ return state.kind === "activating" ? state.shown : LOADING;
166
+ }
167
+ /**
168
+ * Whether its state members have values: once live (a local object stays live until it ends), and while a
169
+ * restart's old attempt is open (its consumers check their version through `stateFor`).
170
+ */
171
+ get hydrated() {
172
+ return this.#state.kind === "live" || this.openOldAttempt !== undefined;
173
+ }
174
+ /**
175
+ * The state a same-host consumer of `version` and `fingerprint` sees (rule 5): `live` while a restart's open old
176
+ * attempt binds that version and its successor is not parked on a failure; otherwise `state`.
177
+ */
178
+ stateFor(version, fingerprint) {
179
+ const state = this.#state;
180
+ if (state.kind === "activating" && state.shown.kind !== "failed" && this.oldServes(version, fingerprint)) {
181
+ return LIVE;
182
+ }
183
+ return this.state;
184
+ }
185
+ /** Whether a restart's open old attempt binds `version` and `fingerprint`: its consumers of that version may use it. */
186
+ oldServes(version, fingerprint) {
187
+ const old = this.openOldAttempt;
188
+ return old !== undefined && binds(old.served.provider, version, fingerprint);
189
+ }
190
+ /**
191
+ * A restart's old attempt while it is open (draining, not sealed yet): old work runs on it, and consumers whose
192
+ * version it binds see it as the live instance; `undefined` otherwise.
193
+ */
194
+ get openOldAttempt() {
195
+ const old = this.#old;
196
+ return old?.draining ? old : undefined;
197
+ }
198
+ /** Resolves at its first outcome (the start barrier waits for it); never rejects. */
199
+ get firstOutcome() {
200
+ if (this.#hasFirstOutcome)
201
+ return Promise.resolve();
202
+ this.#firstOutcome ??= Promise.withResolvers();
203
+ return this.#firstOutcome.promise;
204
+ }
205
+ /**
206
+ * Whether an activation is under way: waiting for its previous instance's teardown, or activating and showing
207
+ * `loading` (its factory, its natives' opens, a dependency still loading); a parked wait (`failed { waiting }`) is not.
208
+ */
209
+ get activating() {
210
+ const state = this.#state;
211
+ return state.kind === "waiting" || (state.kind === "activating" && state.shown.kind === "loading");
212
+ }
213
+ /** Whether it holds up the start barrier: it has no first outcome yet. */
214
+ get blocksFirstPass() {
215
+ return !this.#hasFirstOutcome;
216
+ }
217
+ /**
218
+ * The error of its last failure while none went live since: a failed attempt's, or the cause its parked attempt
219
+ * showed last (kept when the dependency falls back to `loading`, so a getter's deadline names it).
220
+ */
221
+ get lastFailure() {
222
+ return this.#lastFailure;
223
+ }
224
+ /** The span of the activation under way, when one runs and is recorded (getters waiting for it link to it). */
225
+ get activationSpan() {
226
+ return this.#state.kind === "activating" ? this.#state.attempt.activationSpan : undefined;
227
+ }
228
+ /** Its instance id while an attempt activates; `undefined` otherwise (a hold's chain names only activations). */
229
+ get activationId() {
230
+ return this.#state.kind === "activating" ? this.#instance : undefined;
231
+ }
232
+ /**
233
+ * The chain a hold this object's activation makes over a link carries (Q5): its own chain and its instance id, the
234
+ * last 32; `undefined` when it is not activating.
235
+ */
236
+ activationChain() {
237
+ const id = this.activationId;
238
+ if (id === undefined)
239
+ return undefined;
240
+ const { chain } = this;
241
+ return [...(chain.length < CHAIN ? chain : chain.slice(chain.length - CHAIN + 1)), id];
242
+ }
243
+ /** Its holders, for a presence list made after they took it. */
244
+ get holders() {
245
+ return this.#holders;
246
+ }
247
+ /**
248
+ * The variant a live remote object's factory chose (a restart's open old attempt's meanwhile); `undefined` for a
249
+ * local object and before it is live.
250
+ */
251
+ get variant() {
252
+ return this.#state.kind === "live" ? this.#state.attempt.variant : this.openOldAttempt?.variant;
253
+ }
254
+ /** The live object's state members, as Chord follows them. */
255
+ get stateMembers() {
256
+ return this.#live().stateMembers;
257
+ }
258
+ /**
259
+ * Starts an attempt when waiting or failed and returns it; a trigger while an attempt runs (or once live) is ignored.
260
+ * After a failure the holders are told: their references are loading again.
261
+ */
262
+ attempt() {
263
+ const state = this.#state;
264
+ if (state.kind !== "waiting" && state.kind !== "failed")
265
+ return undefined;
266
+ this.#instance ??= uuidv7();
267
+ const attempt = this.#newAttempt();
268
+ this.#state = { kind: "activating", attempt, shown: LOADING };
269
+ if (state.kind === "failed")
270
+ this.#notify();
271
+ void this.#run(attempt, this.host.endingOf(this.identity));
272
+ return attempt;
273
+ }
274
+ /**
275
+ * `ref.retry()` and a `retry` message, as a step of `walk` (handled once per walk: a diamond reaches it twice): an
276
+ * attempt now when failed (a broken one too) or waiting, its backoff window skipped; passed on to the failed
277
+ * dependencies while parked `failed { waiting }`; ignored otherwise (an attempt runs, or it is live).
278
+ */
279
+ retry(walk = retryWalk()) {
280
+ if (walk.visited.has(this))
281
+ return;
282
+ walk.visited.add(this);
283
+ const state = this.#state;
284
+ if (state.kind === "activating") {
285
+ if (state.shown.kind === "failed")
286
+ state.attempt.retryDependencies(walk);
287
+ return;
288
+ }
289
+ if (state.kind !== "waiting" && state.kind !== "failed")
290
+ return;
291
+ this.host.backoff.skip(this.identity);
292
+ this.attempt();
293
+ }
294
+ /**
295
+ * Follows `sources` as its wake signals instead of the last attempt's (`self.retryOn`, right after a factory
296
+ * returned): a new value retries it while failed, as `ref.retry()` does; one while it activates retries it at once
297
+ * if that attempt fails; one while live does nothing.
298
+ */
299
+ retryOn(sources) {
300
+ if (this.#wakes === undefined && sources.length === 0)
301
+ return;
302
+ this.#wakes ??= new RetryWakes();
303
+ this.#wakes.replace(sources, () => this.#wake());
304
+ }
305
+ /**
306
+ * Calls a method of the live object for `caller`, bound at `version` (an older one maps its arguments and result,
307
+ * Q10), its `chord.method` span under `parent` (the caller's span on this host, a call's carrier over a link). While
308
+ * an attempt activates (a reload's restart, a retry), new work waits for its outcome (the gate); old work runs on a
309
+ * restart's open old attempt.
310
+ */
311
+ async call(method, args, context, caller, version, parent) {
312
+ if (this.#state.kind === "activating") {
313
+ // Old work runs on the open old attempt (rule 2): work begun before the reload finishes on old code, and a
314
+ // restart's drain never waits on itself. The old attempt checks the call's version against its own contract.
315
+ const old = this.openOldAttempt;
316
+ if (old !== undefined && this.host.oldWork.of(context)) {
317
+ return old.call(method, args, context, caller, version, parent ?? context.telemetry);
318
+ }
319
+ // Old work here found no open old attempt (else it was routed above): any version cycles through the gate.
320
+ await this.host.waitAsOldWork(this.#openerGate(context), this, this.served.contract, context);
321
+ }
322
+ return this.#live().call(method, args, context, caller, version, parent ?? context.telemetry);
323
+ }
324
+ /** Whether a consumer of `contract`'s version and fingerprint binds to this object's provider now (R6, Q10). */
325
+ binds(contract) {
326
+ return binds(this.served.provider, contract.version, contract.fingerprint);
327
+ }
328
+ /** Its params as checked, with their identity key. */
329
+ get checkedParams() {
330
+ return { params: this.params, key: this.key };
331
+ }
332
+ /**
333
+ * What a reference of `version` follows for state member `member` now (decision "References are the only
334
+ * indirection"): the shown instance's member (its mapping at an older version) while that instance is live, while a
335
+ * restart keeps it open, and after a live failure until its admitted commits published; else nothing:
336
+ * `failed` with the cause's error, or `loading`, with that member to take a last value from.
337
+ */
338
+ followed(member, version) {
339
+ const exposed = this.#exposed;
340
+ let shown;
341
+ let lacking;
342
+ if (exposed !== undefined) {
343
+ try {
344
+ shown = exposed.memberAt(member, version);
345
+ }
346
+ catch (error) {
347
+ const failure = asChordError(error, this.label);
348
+ // The shown instance does not serve this version (a restart's old one, while a reload brings it): nothing yet.
349
+ if (failure.code !== "contract_mismatch")
350
+ lacking = failure;
351
+ }
352
+ }
353
+ if (exposed !== undefined && this.#following) {
354
+ if (shown !== undefined)
355
+ return { kind: "live", source: shown, instance: exposed };
356
+ if (lacking !== undefined)
357
+ return { kind: "lacking", error: lacking };
358
+ return { kind: "loading", last: undefined, instance: undefined };
359
+ }
360
+ const state = this.#state;
361
+ const failure = state.kind === "failed"
362
+ ? state.failure
363
+ : state.kind === "activating" && state.shown.kind === "failed"
364
+ ? state.shown
365
+ : undefined;
366
+ if (failure !== undefined)
367
+ return { kind: "failed", error: failure.cause.error, last: shown, instance: exposed };
368
+ return { kind: "loading", last: shown, instance: exposed };
369
+ }
370
+ /**
371
+ * The instance its references follow now (they attach to it; they take last values only from an instance they
372
+ * attached to); `undefined` once it stopped changing.
373
+ */
374
+ get attachable() {
375
+ return this.#following ? this.#exposed : undefined;
376
+ }
377
+ /**
378
+ * The live instance, which references pin their keys on (a new one: they pin again), or a restart's open old
379
+ * attempt; `undefined` otherwise.
380
+ */
381
+ get instance() {
382
+ return this.#state.kind === "live" ? this.#state.attempt : this.openOldAttempt;
383
+ }
384
+ /** The live instance's state member `member` as a consumer of `version` follows it (a hold over a link). */
385
+ liveMember(member, version) {
386
+ return this.#live().memberAt(member, version);
387
+ }
388
+ /** How a consumer of `version` reads keyed member `member`'s documents: mapped back when older (`undefined`: as they are). */
389
+ keyedMapping(member, version) {
390
+ return this.#live().keyMapping(member, version);
391
+ }
392
+ /**
393
+ * The gate, with an activation's opener waiting here recorded as an edge of its object (a wait of old work on that
394
+ * object then sees it), the waits of old work checked again when one starts.
395
+ */
396
+ async #openerGate(context) {
397
+ const opener = context.value(OPENING);
398
+ if (opener === undefined)
399
+ return this.#gate(context);
400
+ opener.#gateWaits ??= new Set();
401
+ const waits = opener.#gateWaits;
402
+ waits.add(this);
403
+ this.host.reloadCycles.recheck();
404
+ try {
405
+ await this.#gate(context);
406
+ }
407
+ finally {
408
+ waits.delete(this);
409
+ }
410
+ }
411
+ /**
412
+ * What its activation waits for now (reload cycles, rule 6): the objects its parked attempt's dependencies are bound
413
+ * to, and those whose gate its opener waits at.
414
+ */
415
+ waitEdges() {
416
+ const edges = [...(this.#gateWaits ?? [])];
417
+ for (const dependency of this.#waitingFor) {
418
+ const target = dependency.kind === "reference" ? dependency.binding.target : undefined;
419
+ if (target instanceof ChordObject)
420
+ edges.push(target);
421
+ }
422
+ return edges;
423
+ }
424
+ /**
425
+ * Waits while an attempt activates until the object is live, failed or ended (`#live` then calls or throws);
426
+ * rejects with the cause once the attempt parks on a failed dependency (`failed { waiting }`), and with
427
+ * `unavailable/park_timeout` after `readyTimeout`, as a call parked on a reference. A hold over a link stays bound
428
+ * while a restart's old attempt is open, so its consumer sees `live` and sends calls that arrive here: new work
429
+ * waits for the new attempt, never `not_ready`.
430
+ */
431
+ async #gate(context) {
432
+ const { ready } = this.host.timeouts;
433
+ const due = Date.now() + ready;
434
+ for (;;) {
435
+ const state = this.#state;
436
+ if (state.kind !== "activating")
437
+ return;
438
+ if (state.shown.kind === "failed")
439
+ throw state.shown.cause.error;
440
+ const left = due - Date.now();
441
+ if (left <= 0) {
442
+ const message = `${this.label}: a call waited ${ready} ms for its object to go live`;
443
+ throw new ChordError({ code: "unavailable", reason: "park_timeout", message });
444
+ }
445
+ this.#changed ??= Promise.withResolvers();
446
+ const timer = Promise.withResolvers();
447
+ const timeout = setTimeout(timer.resolve, left);
448
+ try {
449
+ await awaitWithContext(Promise.race([this.#changed.promise, timer.promise]), context);
450
+ }
451
+ finally {
452
+ clearTimeout(timeout);
453
+ }
454
+ }
455
+ }
456
+ /** The keyed member `member` of the live object: its ultimate slot (slice 6a §12). */
457
+ keyedMember(member) {
458
+ return this.#live().keyedMember(member);
459
+ }
460
+ /** Pins `key` of keyed member `member` on the live instance, as a consumer of `version` reads it (`Attempt.pinKey`). */
461
+ pinKey(member, key, version, context) {
462
+ return this.#live().pinKey(member, key, version, context);
463
+ }
464
+ /**
465
+ * Counts `holder` as a reference to this object (the holder reads `state` itself), listed in its type's presence; a
466
+ * lingering object stays.
467
+ */
468
+ hold(holder) {
469
+ // A version it binds whose member the live provider refuses (an older consumer): it waits unbound instead.
470
+ const state = this.#state;
471
+ const unfit = state.kind === "live" ? this.#unfit(holder, state.attempt) : undefined;
472
+ if (unfit !== undefined) {
473
+ this.#unbound(holder, unfit);
474
+ return;
475
+ }
476
+ this.#holders.add(holder);
477
+ this.#stopLingering();
478
+ // Last: a derive over the presence list may close a link synchronously, which may release this holder again.
479
+ this.host.referenced(this, holder, this.#context);
480
+ }
481
+ /** `holder` was released: the object may end (`#idle`). */
482
+ unhold(holder) {
483
+ if (!this.#holders.delete(holder))
484
+ return;
485
+ this.#dropUnheld(holder.contract.version);
486
+ this.#idle();
487
+ // Last: a derive over the presence list may close a link synchronously, which releases other holders again.
488
+ this.host.unreferenced(this, [holder], this.#context);
489
+ }
490
+ /**
491
+ * The records of job `definition`'s runs, made by its first declaration. A later declaration (a new attempt's, after a
492
+ * reload) at another version takes the records over (each run keeps its version, slice 7b §8); one at the same
493
+ * version with another fingerprint is refused (`checkJob`).
494
+ */
495
+ jobRecords(definition) {
496
+ const records = this.#jobs.get(definition.name);
497
+ if (records === undefined) {
498
+ const { store } = this.host;
499
+ const owner = {
500
+ label: this.label,
501
+ host: this.host,
502
+ context: this.#context,
503
+ documents: this.documents,
504
+ store: store === undefined ? undefined : { store, owner: this.served.contract.name },
505
+ countRuns: (delta) => this.countRuns(delta),
506
+ held: (deadline) => this.#heldUntil(deadline),
507
+ };
508
+ const made = new JobRecords(definition, owner);
509
+ this.#jobs.set(definition.name, made);
510
+ return made;
511
+ }
512
+ this.checkJob(definition);
513
+ records.redefine(definition);
514
+ return records;
515
+ }
516
+ /** Refuses a declaration of a job its records cannot take (`JobRecords.check`); a reload's staging checks it too. */
517
+ checkJob(definition) {
518
+ this.#jobs.get(definition.name)?.check(definition);
519
+ }
520
+ /**
521
+ * Claims table `table` (its SQL name) in the host's store for this object, until its end (slice 6b claims); held by
522
+ * another owner: `invalid/args`, which fails the declaring factory.
523
+ */
524
+ claimTable(table) {
525
+ this.host.store.claims.table(table, this);
526
+ }
527
+ /** Its live queries by table (`self.query`), across its attempts: what its commits writing a table re-run. */
528
+ get liveQueries() {
529
+ this.#liveQueries ??= new LiveQueries();
530
+ return this.#liveQueries;
531
+ }
532
+ /** Claims this object's documents in `namespace` of the host's store, as `claimTable`. */
533
+ claimDocuments(namespace) {
534
+ this.host.store.claims.documents(this.served.contract.name, namespace, this);
535
+ }
536
+ /**
537
+ * A runtime failure of the live attempt `attempt`: `broken` (a `migrate` failing on access, a stored version newer
538
+ * than the code, a refused commit) or `transient` (a followed runtime failed, R4): the attempt is sealed and the
539
+ * object `failed` with `cause`; calls reject with it, holders are told, its references keep their last values once the
540
+ * admitted commits adopted (`followed`), the natives close in the background (then its references are released),
541
+ * `onError` gets `object_failed` once. Documents and job runs stay. Recovery: a broken failure by `ref.retry()`, a
542
+ * transient one after its identity's backoff too (a new attempt, whose members its references follow once live). A
543
+ * failure of a sealed attempt is ignored, so several at once fail it once.
544
+ */
545
+ failLive(attempt, cause) {
546
+ const state = this.#state;
547
+ if (state.kind !== "live" || state.attempt !== attempt)
548
+ return;
549
+ const { error } = cause;
550
+ if (cause.kind === "transient")
551
+ this.host.backoff.failed(this.identity);
552
+ else
553
+ this.host.backoff.delete(this.identity);
554
+ const failure = { kind: "failed", cause, retryAt: this.host.backoff.until(this.identity) };
555
+ this.#state = { kind: "failed", failure };
556
+ this.#lastFailure = error;
557
+ this.#withdraw(attempt);
558
+ attempt.seal(error);
559
+ // Its references follow every member on until the commits admitted before the seal adopted and published once
560
+ // (frames included), then stop. A retry's factory and hydration wait for both (its ending), so no old commit
561
+ // lands in a new attempt.
562
+ const frozen = this.documents.settled().then(() => this.#stopFollowing(attempt));
563
+ const closing = Promise.all([attempt.close(END), frozen]).then(([failures]) => {
564
+ attempt.detach();
565
+ attempt.releaseReferences();
566
+ return failures;
567
+ });
568
+ this.host.ending(this.identity, this.#reported(closing));
569
+ this.host.report({ kind: "object_failed", object: this.label, failure: cause });
570
+ this.#notify();
571
+ this.#idle();
572
+ }
573
+ /** A held state change must be stored by `deadline`: the timer is set for the earliest one. */
574
+ #heldUntil(deadline) {
575
+ if (this.#flush !== undefined && this.#flush.deadline <= deadline)
576
+ return;
577
+ if (this.#flush !== undefined)
578
+ clearTimeout(this.#flush.timer);
579
+ // A foreground timer: what is held is stored before the process may exit.
580
+ const timer = setTimeout(() => void this.#flushHeld(), Math.max(0, deadline - Date.now()));
581
+ this.#flush = { deadline, timer };
582
+ }
583
+ /** The timer fired: every held change past its deadline is stored, and the timer set for the next one. */
584
+ async #flushHeld() {
585
+ this.#flush = undefined;
586
+ if (this.#state.kind === "ended")
587
+ return;
588
+ const now = Date.now();
589
+ const jobs = [...this.#jobs.values()];
590
+ await Promise.all(jobs.map((records) => records.flushHeld(now)));
591
+ const next = Math.min(...jobs.map((records) => records.nextDeadline()));
592
+ if (Number.isFinite(next))
593
+ this.#heldUntil(next);
594
+ }
595
+ /**
596
+ * Adds `delta` to its running and finishing job runs (and `host.activity.jobs`). A new run keeps a lingering object;
597
+ * the last one settling on an object without references ends it as its last release would (`#idle`).
598
+ */
599
+ countRuns(delta) {
600
+ this.#runs += delta;
601
+ this.host.count("jobs", delta);
602
+ // A run started while the object lingers keeps it, like a new reference.
603
+ if (delta > 0)
604
+ this.#stopLingering();
605
+ if (this.#runs === 0)
606
+ this.#idle();
607
+ }
608
+ /**
609
+ * Throws `invalid/cycle` when waiting for `dependency` closes a chain of waits back to this object (Q5). Every other
610
+ * object on the chain fails broken with the same error, so no part of a cycle waits for a retry. Counts the objects
611
+ * it visits (`chord.cycle.visits`). Otherwise, a dependency whose activation is in this object's chain closes a
612
+ * cycle through other hosts (they fail through their dependency on this one).
613
+ */
614
+ assertNoCycle(dependency, context) {
615
+ const visited = new Set();
616
+ const cycle = dependency.pathTo(this, visited);
617
+ chordMetrics(context.telemetry.metrics).counter("chord.cycle.visits").add(visited.size);
618
+ if (cycle === undefined) {
619
+ const across = dependency.activationId;
620
+ if (across === undefined || !this.chain.includes(across))
621
+ return;
622
+ throw this.host.cycle(this.chain, across, [this.label, dependency.label]);
623
+ }
624
+ const error = invalid("cycle", `dependency cycle: ${[this, ...cycle].map(({ label }) => label).join(" → ")}`);
625
+ for (const object of cycle) {
626
+ const state = object.#state;
627
+ if (object !== this && state.kind === "activating") {
628
+ state.attempt.abandon({ kind: "failed", cause: { kind: "broken", error } });
629
+ }
630
+ }
631
+ throw error;
632
+ }
633
+ /** Its parked attempt waits for `dependencies` (none once it leaves parking): the waits a cycle check follows. */
634
+ waitsFor(dependencies) {
635
+ this.#waitingFor = dependencies;
636
+ }
637
+ /**
638
+ * A dependency of its current attempt changed (its state, or its first outcome): a parked attempt checks again; an
639
+ * attempt past its dependency check ignores it (R18 after live), and so does any other state.
640
+ */
641
+ dependencyMoved() {
642
+ const state = this.#state;
643
+ if (state.kind === "activating")
644
+ state.attempt.dependencyMoved();
645
+ }
646
+ /**
647
+ * Its attempt `attempt` is parked showing `shown` (`loading` or `failed { waiting }`): holders are told when that
648
+ * changed (a cause compared by value). `firstPass`: no blocker here is still without its first outcome, so this
649
+ * object has its first outcome now.
650
+ */
651
+ parked(attempt, shown, firstPass) {
652
+ const state = this.#state;
653
+ if (state.kind !== "activating" || state.attempt !== attempt)
654
+ return;
655
+ if (!sameState(state.shown, shown)) {
656
+ this.#state = { kind: "activating", attempt, shown };
657
+ if (shown.kind === "failed") {
658
+ this.#lastFailure = shown.cause.error;
659
+ // A restart's successor parked on a failure: the old attempt's kept contributions leave (F-c).
660
+ this.#dropKept();
661
+ }
662
+ this.#notify();
663
+ }
664
+ if (firstPass)
665
+ this.#settleFirstOutcome();
666
+ // A park may close a cycle with a wait of old work (rule 6).
667
+ this.host.reloadCycles.recheck();
668
+ }
669
+ /** Its attempt `attempt` left parking for its own steps: it shows `loading` until its outcome. */
670
+ unparked(attempt) {
671
+ const state = this.#state;
672
+ if (state.kind !== "activating" || state.attempt !== attempt)
673
+ return;
674
+ if (!sameState(state.shown, LOADING))
675
+ this.parked(attempt, LOADING, false);
676
+ }
677
+ /** The contributions a restart kept for its successor leave the tables (F-c): it will not take them over now. */
678
+ #dropKept() {
679
+ const kept = this.#kept;
680
+ if (kept === undefined)
681
+ return;
682
+ this.#kept = undefined;
683
+ this.#withdraw(kept);
684
+ }
685
+ /**
686
+ * Ends the object (once): sealed now, its holders and running calls told `error` (`released` by default), torn down
687
+ * in the background with reason `end`, close failures reported.
688
+ */
689
+ end(error = this.ended()) {
690
+ const teardown = this.#seal({ kind: "end", error });
691
+ if (teardown.kind !== "none")
692
+ this.host.ending(this.identity, this.#reported(this.#tearDown(teardown, END)));
693
+ }
694
+ /**
695
+ * Ends the object for `host.close`: sealed now; returns its teardown (reason `close`), which the host runs once every
696
+ * object is sealed, so no reference it releases starts an ending in the background.
697
+ */
698
+ stop() {
699
+ const teardown = this.#seal({ kind: "end", error: this.ended() });
700
+ return () => this.#tearDown(teardown, CLOSE);
701
+ }
702
+ /**
703
+ * Ends the object because a reload removed its type (slice 7b §4): as `end` (natives close with reason `end`,
704
+ * running calls' callers rejected `released`, handlers drained), but its holders' requests are not ended: they wait
705
+ * unbound with `cause` (`not_served`), references with their last values, until the next object of its identity
706
+ * binds them (`Removal`).
707
+ */
708
+ remove(cause) {
709
+ const teardown = this.#seal({ kind: "removed", error: this.ended(), cause });
710
+ if (teardown.kind !== "none")
711
+ this.host.ending(this.identity, this.#reported(this.#tearDown(teardown, END)));
712
+ }
713
+ /** What a reload does to this object, whose type is still served: a live object restarts, any other is retried. */
714
+ reloadFate() {
715
+ return this.#state.kind === "live" ? "restart" : "retry";
716
+ }
717
+ /**
718
+ * Takes `fate` with its new served type (after the reload's commit) and, for a restart, its new factory's requests as
719
+ * staging recorded them; returns the new attempt, whose first dependency check the reload's report waits for (a
720
+ * retry's).
721
+ */
722
+ reload(served, fate, requests) {
723
+ // Its members per version stay: the previous version's are mapped once the new attempt goes live.
724
+ this.served = served;
725
+ const attempt = fate === "restart" ? this.#restart(requests) : this.#retryReloaded();
726
+ attempt.startedByReload();
727
+ return attempt;
728
+ }
729
+ /**
730
+ * A restart (decision "Reload restarts every affected object; old work finishes on old code"): its routines stop,
731
+ * new calls wait at the gate, old work runs on the old attempt, and consumers whose version it binds see it live; its
732
+ * contributions stay (until its seal with natives, F-b; until its successor is live without, F-c). It is sealed once
733
+ * its successor's recorded requests are ready and its calls, routed old work included, drained, bounded by the
734
+ * reload drain bound; then its natives close with reason `reload` and the successor, a new instance (D4), runs its
735
+ * factory. Readiness and successor start once every fate of the reload started (`startSuccessor`).
736
+ */
737
+ #restart(requests) {
738
+ // A restart starts from a live object (`reloadFate`).
739
+ const old = this.#state.attempt;
740
+ this.#old = old;
741
+ old.beginDrain();
742
+ old.stopRoutines();
743
+ if (!old.opensNatives)
744
+ this.#kept = old;
745
+ this.#instance = uuidv7();
746
+ const attempt = this.#replace();
747
+ const shows = (cause) => this.#readinessShown(attempt, cause);
748
+ const readiness = new Readiness(this.host, this.#caller(), requests, shows, this.#context);
749
+ this.#readiness = readiness;
750
+ const due = Date.now() + this.host.timeouts.reload;
751
+ const ended = this.#endOld(old, readiness, due);
752
+ this.host.ending(this.identity, this.#reported(ended));
753
+ const ending = this.host.endingOf(this.identity);
754
+ this.#startSuccessor = () => this.#startRestarted(attempt, old, readiness, ended, ending);
755
+ return attempt;
756
+ }
757
+ /**
758
+ * Ends a restart's old attempt: once its successor's requests are ready and its calls drained (routed old work joins
759
+ * while the drain runs), by `due`; sealed (in-memory job runs end `aborted { reload }`), its references take their
760
+ * last values once its admitted commits published (a store write is not a running call's promise), its natives
761
+ * close with reason `reload`.
762
+ */
763
+ async #endOld(old, readiness, due) {
764
+ await readiness.ready(due);
765
+ await old.drainCalls(due);
766
+ // With natives its contributions leave at the seal (F-b); without, they stay for its successor (F-c), unless a
767
+ // failure dropped them already.
768
+ if (old.opensNatives)
769
+ this.#withdraw(old);
770
+ old.seal(this.#reloaded(), "reload");
771
+ // Sealed, it is no longer the instance its holders bind (`instance`, `stateFor`): a hold waiting for a window
772
+ // slot unbinds now, before an `ack` could bind it to nothing; bound holds and references follow it on until it
773
+ // stopped changing.
774
+ this.#notify();
775
+ await this.documents.settled();
776
+ this.#stopFollowing(old);
777
+ const failures = await old.close(RELOAD);
778
+ old.detach();
779
+ return failures;
780
+ }
781
+ /** Starts a restart's readiness and its successor, once every fate of the reload started (its served types are new). */
782
+ startSuccessor() {
783
+ const start = this.#startSuccessor;
784
+ this.#startSuccessor = undefined;
785
+ start?.();
786
+ }
787
+ /**
788
+ * Binds the readiness, whose failures the successor shows until the old attempt ended (`#readinessShown`). The
789
+ * successor runs after `ending`; once the old attempt ended (`ended`) and the successor's own requests bound, the old
790
+ * attempt's references and the readiness bindings are released (F-a: a dependency held only by them never ends; a
791
+ * successor a later reload replaces never releases them early).
792
+ */
793
+ #startRestarted(attempt, old, readiness, ended, ending) {
794
+ this.#showsReadiness = attempt;
795
+ // Before the successor's own steps (`ending` settles after `ended`): its own checks show what it waits for then.
796
+ void ended.then(() => {
797
+ if (this.#showsReadiness === attempt)
798
+ this.#showsReadiness = undefined;
799
+ });
800
+ readiness.start();
801
+ void this.#run(attempt, ending);
802
+ void Promise.all([ended, attempt.checked]).then(() => {
803
+ old.releaseReferences();
804
+ readiness.release();
805
+ if (this.#readiness === readiness)
806
+ this.#readiness = undefined;
807
+ });
808
+ }
809
+ /** What a restart's readiness finds now: a failed request the successor waits for, if any (the report's). */
810
+ get readinessCause() {
811
+ return this.#readiness?.cause;
812
+ }
813
+ /**
814
+ * A restart's readiness found `cause` (a failed request), or none any more: while the old attempt has not ended, the
815
+ * successor `attempt` shows it (new calls get the cause, consumers see the failure; old work still runs on the old
816
+ * attempt), and shows `loading` again once the request recovered. Its kept contributions stay: only the successor's
817
+ * own failure or park drops them (F-c).
818
+ */
819
+ #readinessShown(attempt, cause) {
820
+ const state = this.#state;
821
+ if (this.#showsReadiness !== attempt || state.kind !== "activating" || state.attempt !== attempt)
822
+ return;
823
+ const shown = cause === undefined ? LOADING : { kind: "failed", cause, retryAt: undefined };
824
+ if (sameState(state.shown, shown))
825
+ return;
826
+ this.#state = { kind: "activating", attempt, shown };
827
+ if (cause !== undefined)
828
+ this.#lastFailure = cause.error;
829
+ this.#notify();
830
+ this.host.reloadCycles.recheck();
831
+ }
832
+ /** Whom its own requests act as: the host for a local object, its principal for a remote one. */
833
+ #caller() {
834
+ const { host, served, principal } = this;
835
+ return { principal: served.kind === "remote" ? principal : host.principal, incarnation: host.incarnation };
836
+ }
837
+ /**
838
+ * A reload retries an object that is not live (slice 7b §9, decision 1): a parked attempt is replaced in one
839
+ * handover (it opened nothing: the new attempt's requests bind before the old ones are released, M§3.9); an attempt
840
+ * in its own steps is sealed, its natives close with reason `reload`, and the new one activates after that teardown;
841
+ * a failed or waiting one gets an attempt now, its backoff skipped.
842
+ */
843
+ #retryReloaded() {
844
+ const state = this.#state;
845
+ if (state.kind === "activating") {
846
+ const { attempt: old } = state;
847
+ const parked = old.isParked;
848
+ // A parked attempt's successor waits for no teardown of it (its references are released after it bound).
849
+ const ending = this.host.endingOf(this.identity);
850
+ old.seal(this.#reloaded(), "reload");
851
+ const attempt = this.#replace();
852
+ if (parked)
853
+ void this.#run(attempt, ending);
854
+ const after = parked ? attempt.checked : Promise.resolve();
855
+ const closing = after
856
+ .then(() => old.close(RELOAD))
857
+ .then((failures) => {
858
+ old.detach();
859
+ old.releaseReferences();
860
+ return failures;
861
+ });
862
+ this.host.ending(this.identity, this.#reported(closing));
863
+ if (!parked)
864
+ void this.#run(attempt, this.host.endingOf(this.identity));
865
+ return attempt;
866
+ }
867
+ this.host.backoff.skip(this.identity);
868
+ // Waiting or failed (`reloadFate`): an attempt starts.
869
+ return this.attempt();
870
+ }
871
+ /** A new attempt replacing the current one, holders told; its caller starts it (`#run`) after what it waits for. */
872
+ #replace() {
873
+ const attempt = this.#newAttempt();
874
+ this.#state = { kind: "activating", attempt, shown: LOADING };
875
+ this.#notify();
876
+ return attempt;
877
+ }
878
+ /** Its next attempt, its activation span linked to the trigger of the last (or its first trigger). */
879
+ #newAttempt() {
880
+ return new Attempt(this, this.#context, { trigger: this.#trigger, attempt: ++this.#attempts });
881
+ }
882
+ /** The `released` error of an attempt a reload replaced. */
883
+ #reloaded() {
884
+ return new ChordError({ code: "released", reason: "ended", message: `${this.label}: replaced by a reload` });
885
+ }
886
+ /** The `released` error of this object. */
887
+ ended() {
888
+ return new ChordError({ code: "released", reason: "ended", message: `${this.label}: ended` });
889
+ }
890
+ /** Runs `attempt`'s activation once `ending` (its predecessors' teardowns, if any) finished; takes its outcome. */
891
+ async #run(attempt, ending) {
892
+ const outcome = await attempt.activate(ending);
893
+ this.#trigger = attempt.activationSpan ?? this.#trigger;
894
+ // The object may have ended after the activation's last step.
895
+ if (this.#state.kind !== "activating" || this.#state.attempt !== attempt) {
896
+ attempt.activated({ kind: "ended" });
897
+ return;
898
+ }
899
+ switch (outcome.kind) {
900
+ case "live":
901
+ this.#wentLive(attempt);
902
+ attempt.activated(outcome);
903
+ return;
904
+ case "failed":
905
+ this.#failed(attempt, outcome.cause);
906
+ attempt.activated({ ...outcome, retryAt: this.host.backoff.until(this.identity) });
907
+ return;
908
+ case "ended":
909
+ attempt.activated(outcome);
910
+ }
911
+ }
912
+ #wentLive(attempt) {
913
+ if (this.#wakes !== undefined)
914
+ this.#wakes.during = undefined;
915
+ // Before the new instance is shown: holders of a version its provider does not bind leave with their last values,
916
+ // which their references take from the instance shown so far.
917
+ const unbound = this.#unbindUnfit(attempt);
918
+ this.#state = { kind: "live", attempt };
919
+ this.#exposed = attempt;
920
+ this.#following = true;
921
+ const { contributions } = attempt;
922
+ // A restart's kept contributions leave in the batch the new ones enter (F-c), so no reader sees a gap.
923
+ const leaving = this.#kept?.contributions ?? NO_CONTRIBUTIONS;
924
+ this.#kept = undefined;
925
+ // In the registries' tables before anyone sees it live (a getter released now reads them recomposed).
926
+ if (contributions.length > 0 || leaving.length > 0) {
927
+ this.host.batch.within(() => {
928
+ for (const contribution of leaving)
929
+ contribution.record.remove(contribution);
930
+ for (const contribution of contributions)
931
+ contribution.record.add(contribution);
932
+ }, this.#context);
933
+ // Contributions entering a registry nobody serves are reported as at a publication.
934
+ for (const contribution of contributions)
935
+ contribution.record.reportUndeclared();
936
+ }
937
+ this.#lastFailure = undefined;
938
+ this.host.wentLive(this);
939
+ // Its references move to the new instance (one frame each); holds get a fresh `bound`.
940
+ this.#notify();
941
+ this.#settleFirstOutcome();
942
+ attempt.live();
943
+ this.#takeJobs(attempt);
944
+ // Its last holders may have left for their version: it ends as at their release.
945
+ if (unbound)
946
+ this.#idle();
947
+ }
948
+ /**
949
+ * After `attempt` went live: the jobs it does not declare block their runs (slice 7b §8); after a reload, the blocked
950
+ * runs of the jobs it declares are retried.
951
+ */
952
+ #takeJobs(attempt) {
953
+ if (this.#jobs.size === 0)
954
+ return;
955
+ const reloaded = attempt.reloadStarted;
956
+ for (const [name, records] of this.#jobs) {
957
+ if (!attempt.declaresJob(name))
958
+ records.undeclare();
959
+ else if (reloaded)
960
+ void records.retryBlocked(this.#context);
961
+ }
962
+ }
963
+ /**
964
+ * Its holders whose version `attempt`'s provider (going live) does not bind (a reload dropped it, slice 7b §6), or
965
+ * of which it refuses a member (`contract_mismatch`), leave it: they wait unbound `version` (`failed { waiting }`),
966
+ * references with their last values, until a publication serves their version again. The object and its other
967
+ * holders stay.
968
+ */
969
+ #unbindUnfit(attempt) {
970
+ let unfit;
971
+ for (const holder of this.#holders) {
972
+ const error = this.#unfit(holder, attempt);
973
+ if (error === undefined)
974
+ continue;
975
+ unfit ??= [];
976
+ unfit.push([holder, error]);
977
+ }
978
+ if (unfit === undefined)
979
+ return false;
980
+ for (const [holder] of unfit)
981
+ this.#holders.delete(holder);
982
+ this.host.unreferenced(this, unfit.map(([holder]) => holder), this.#context);
983
+ for (const [holder, error] of unfit)
984
+ this.#unbound(holder, error);
985
+ return true;
986
+ }
987
+ /** Whether a holder of `version` holds it. */
988
+ #heldAt(version) {
989
+ for (const holder of this.#holders)
990
+ if (holder.contract.version === version)
991
+ return true;
992
+ return false;
993
+ }
994
+ /**
995
+ * Why `holder` cannot bind to `attempt` (live): its version is not one the provider binds, or the provider refuses a
996
+ * member of it (`contract_mismatch`); `undefined` when it binds.
997
+ */
998
+ #unfit(holder, attempt) {
999
+ const { contract, provider } = this.served;
1000
+ const { version, fingerprint } = holder.contract;
1001
+ if (version === contract.version && fingerprint === contract.fingerprint)
1002
+ return undefined;
1003
+ if (binds(provider, version, fingerprint))
1004
+ return refusal(this.served, version, attempt.variant);
1005
+ return new ChordError({ code: "contract_mismatch", message: `${contract.name} v${version} is not served here` });
1006
+ }
1007
+ /**
1008
+ * `holder` (no longer held) waits unbound with `error` (`failed { waiting }`) until a publication fits it.
1009
+ */
1010
+ #unbound(holder, error) {
1011
+ const cause = { kind: "waiting", error };
1012
+ holder.removed({ cause, host: this.host, params: this.checkedParams, context: this.#context });
1013
+ }
1014
+ /**
1015
+ * Records a failed attempt: reported, torn down in the background (reason `end`), its references released once its
1016
+ * natives closed, its holders told. Transient: a backoff window, whose end is the failure's `retryAt`; broken: no
1017
+ * automatic retry.
1018
+ */
1019
+ #failed(attempt, cause) {
1020
+ this.#dropKept();
1021
+ const wokenBy = this.#wakes?.during === attempt;
1022
+ if (this.#wakes !== undefined)
1023
+ this.#wakes.during = undefined;
1024
+ if (cause.kind === "transient")
1025
+ this.host.backoff.failed(this.identity);
1026
+ else
1027
+ this.host.backoff.delete(this.identity);
1028
+ const failure = { kind: "failed", cause, retryAt: this.host.backoff.until(this.identity) };
1029
+ this.#state = { kind: "failed", failure };
1030
+ this.#lastFailure = cause.error;
1031
+ attempt.seal(this.ended());
1032
+ const closing = attempt.close(END).then((failures) => {
1033
+ attempt.detach();
1034
+ // Released once its natives closed (a close may use them, §6, §13).
1035
+ attempt.releaseReferences();
1036
+ return failures;
1037
+ });
1038
+ this.host.ending(this.identity, this.#reported(closing));
1039
+ this.host.report({ kind: "activation_failed", object: this.label, failure: cause });
1040
+ this.#notify();
1041
+ this.#settleFirstOutcome();
1042
+ // Job runs kept it while it activated; failed, they keep it no longer.
1043
+ this.#idle();
1044
+ // A wake signal arrived while it activated: it retries it now.
1045
+ if (wokenBy)
1046
+ this.retry();
1047
+ }
1048
+ /**
1049
+ * A wake signal's new value (inside its batch): retries a failed object (after the batch: a factory may not run in
1050
+ * one), remembered while it activates, ignored while live and when its own contributions' leaving made it.
1051
+ */
1052
+ #wake() {
1053
+ const state = this.#state;
1054
+ // Called by its wakes only.
1055
+ const wakes = this.#wakes;
1056
+ if (state.kind === "activating") {
1057
+ // While parked its dependencies decide (dependency model §3.8).
1058
+ if (!state.attempt.isParked)
1059
+ wakes.during = state.attempt;
1060
+ return;
1061
+ }
1062
+ if (state.kind !== "failed" || wakes.leaving)
1063
+ return;
1064
+ queueMicrotask(() => this.retry());
1065
+ }
1066
+ /**
1067
+ * The live attempt `attempt` leaves the registries' tables (it fails or ends), inside a batch; a composition this
1068
+ * leaving makes wakes no wake signal of this object.
1069
+ */
1070
+ #withdraw(attempt) {
1071
+ const { contributions } = attempt;
1072
+ if (contributions.length === 0)
1073
+ return;
1074
+ const { batch } = this.host;
1075
+ const wakes = this.#wakes;
1076
+ batch.within(() => {
1077
+ if (wakes !== undefined) {
1078
+ wakes.leaving = true;
1079
+ batch.flushing(() => {
1080
+ wakes.leaving = false;
1081
+ });
1082
+ }
1083
+ for (const contribution of contributions)
1084
+ contribution.record.remove(contribution);
1085
+ }, this.#context);
1086
+ }
1087
+ /**
1088
+ * `attempt`, the instance shown, stopped changing (a live failure's admitted commits published, a restart's old
1089
+ * attempt sealed): its references take their last values from it, holds leave it, and the object lets it go (a
1090
+ * reference made later never attached to it: it takes nothing from it).
1091
+ */
1092
+ #stopFollowing(attempt) {
1093
+ if (this.#old === attempt)
1094
+ this.#old = undefined;
1095
+ if (this.#exposed !== attempt || !this.#following)
1096
+ return;
1097
+ this.#following = false;
1098
+ this.#notify();
1099
+ // Its references took their values (`#notify` retargets them at once): a failed object keeps no ended instance.
1100
+ this.#exposed = undefined;
1101
+ }
1102
+ /** Tells every holder that the state changed: references first follow what it shows now (`followed`). */
1103
+ #notify() {
1104
+ this.#wakeGate();
1105
+ const holders = [...this.#holders];
1106
+ // In one batch when some reference's members move (one frame each, a diamond over several sees one change); no
1107
+ // commit at all for references that used none (activation churn).
1108
+ const retarget = () => {
1109
+ for (const holder of holders)
1110
+ holder.retarget();
1111
+ };
1112
+ if (holders.some((holder) => holder.following))
1113
+ this.host.batch.within(retarget, this.#context);
1114
+ else
1115
+ retarget();
1116
+ for (const holder of holders)
1117
+ holder.moved();
1118
+ }
1119
+ /** Calls waiting at the gate check the state again. */
1120
+ #wakeGate() {
1121
+ this.#changed?.resolve();
1122
+ this.#changed = undefined;
1123
+ }
1124
+ /**
1125
+ * Marks the object ended: forgotten by the host, waits rejected, references to it ended with `error` (and gone from
1126
+ * its type's presence), its job runs ended (signals fired, waiters rejected), its transactions refused, its attempt
1127
+ * sealed. Returns what is left to tear down; it releases nothing itself.
1128
+ */
1129
+ #seal(ending) {
1130
+ const { error } = ending;
1131
+ const state = this.#state;
1132
+ if (state.kind === "ended")
1133
+ return { kind: "none" };
1134
+ // A restart's teardown (its old attempt's end) finishes before this one (they share its documents).
1135
+ const previous = this.host.endingOf(this.identity);
1136
+ // Its ending rejects the callers of a restart's old attempt too, at once; that attempt's end closes it.
1137
+ this.#old?.seal(error);
1138
+ this.#dropKept();
1139
+ this.#readiness?.release();
1140
+ this.#readiness = undefined;
1141
+ this.#showsReadiness = undefined;
1142
+ this.#startSuccessor = undefined;
1143
+ this.#state = { kind: "ended", ended: { kind: "ended", error } };
1144
+ this.#wakeGate();
1145
+ for (const records of this.#jobs.values())
1146
+ records.end(error);
1147
+ if (this.#flush !== undefined)
1148
+ clearTimeout(this.#flush.timer);
1149
+ this.#flush = undefined;
1150
+ this.documents.seal();
1151
+ this.#stopLingering();
1152
+ this.#wakes?.stop();
1153
+ this.host.forget(this);
1154
+ // An object of the start barrier's cohort that ends before its first outcome settles it as ended.
1155
+ this.#settleFirstOutcome();
1156
+ // Sealed: its instance stops changing; its references take their last values from it.
1157
+ this.#following = false;
1158
+ const holders = [...this.#holders];
1159
+ this.#holders.clear();
1160
+ this.host.unreferenced(this, holders, this.#context);
1161
+ // Its type removed: its references wait with their last values, which they take from the instance shown (still
1162
+ // here); otherwise they end with it.
1163
+ const removal = ending.kind === "removed"
1164
+ ? { cause: ending.cause, host: this.host, params: this.checkedParams, context: this.#context }
1165
+ : undefined;
1166
+ for (const holder of holders) {
1167
+ if (removal === undefined)
1168
+ holder.end(error);
1169
+ else
1170
+ holder.removed(removal);
1171
+ }
1172
+ this.#exposed = undefined;
1173
+ // A failed attempt is closed (or closing) since it failed.
1174
+ if (state.kind === "waiting" || state.kind === "failed")
1175
+ return { kind: "end", previous };
1176
+ if (state.kind === "live")
1177
+ this.#withdraw(state.attempt);
1178
+ state.attempt.seal(error);
1179
+ return { kind: "close", attempt: state.attempt, previous };
1180
+ }
1181
+ /**
1182
+ * The last holder of `version` left: the shown instance's shared mapping for it goes (Opus F2), so a long-lived
1183
+ * object keeps no mapped value nobody reads.
1184
+ */
1185
+ #dropUnheld(version) {
1186
+ if (this.#heldAt(version))
1187
+ return;
1188
+ this.#exposed?.dropVersion(version);
1189
+ }
1190
+ /**
1191
+ * A remote object or a local one with params ends once it has no references and no running or finishing job runs:
1192
+ * a live one once its type's `linger` passed without a new reference, any other at once.
1193
+ */
1194
+ #idle() {
1195
+ const kind = this.#state.kind;
1196
+ // A run waiting for a live attempt keeps its object only while one is live or activating.
1197
+ const running = this.#runs > 0 && (kind === "live" || kind === "activating");
1198
+ const kept = this.#holders.size > 0 || running || (this.served.kind === "local" && this.served.hostLifetime);
1199
+ if (kept || this.#state.kind === "ended" || this.#lingering !== undefined)
1200
+ return;
1201
+ if (this.#state.kind !== "live" || this.served.linger === 0) {
1202
+ this.end();
1203
+ return;
1204
+ }
1205
+ // A new holder clears the timer (`hold`), so an expiry finds none.
1206
+ this.#lingering = setTimeout(() => {
1207
+ this.#stopLingering();
1208
+ this.end();
1209
+ }, this.served.linger);
1210
+ this.host.count("lingering", 1);
1211
+ }
1212
+ /** Its linger timer stops (a new holder, its expiry, its end): no longer counted as lingering. */
1213
+ #stopLingering() {
1214
+ if (this.#lingering === undefined)
1215
+ return;
1216
+ clearTimeout(this.#lingering);
1217
+ this.#lingering = undefined;
1218
+ this.host.count("lingering", -1);
1219
+ }
1220
+ /**
1221
+ * Once the previous teardowns finished (a failed attempt's closes may read the documents): drains and closes a
1222
+ * sealed attempt, then releases its references (after the closes, which may use them), then waits for an admitted
1223
+ * commit step to adopt and drops the documents and job runs. Resolves with the closes that threw.
1224
+ */
1225
+ async #tearDown(teardown, reason) {
1226
+ if (teardown.kind === "none")
1227
+ return [];
1228
+ await teardown.previous;
1229
+ const failures = teardown.kind === "close" ? await teardown.attempt.close(reason) : [];
1230
+ if (teardown.kind === "close") {
1231
+ teardown.attempt.detach();
1232
+ teardown.attempt.releaseReferences();
1233
+ }
1234
+ await this.documents.settled();
1235
+ this.documents.end();
1236
+ this.host.store?.claims.release(this);
1237
+ for (const records of this.#jobs.values())
1238
+ records.drop();
1239
+ this.#jobs.clear();
1240
+ return failures;
1241
+ }
1242
+ /** Reports the close failures of a teardown nobody waits for. */
1243
+ async #reported(closing) {
1244
+ for (const failure of await closing)
1245
+ this.host.report(failure);
1246
+ }
1247
+ /**
1248
+ * The live attempt, or a restart's open old attempt (its consumers saw it live); `not_ready` before the object went
1249
+ * live and while it activates again, the cause while failed, `released` once it ended.
1250
+ */
1251
+ #live() {
1252
+ const state = this.#state;
1253
+ if (state.kind === "live")
1254
+ return state.attempt;
1255
+ const old = this.openOldAttempt;
1256
+ if (old !== undefined && state.kind === "activating")
1257
+ return old;
1258
+ if (state.kind === "ended")
1259
+ throw this.ended();
1260
+ if (state.kind === "failed")
1261
+ throw state.failure.cause.error;
1262
+ throw new ChordError({ code: "not_ready", message: `${this.label}: not live yet` });
1263
+ }
1264
+ /** The settlement of its first outcome (once): dependents parked on it check their first pass again. */
1265
+ #settleFirstOutcome() {
1266
+ if (this.#hasFirstOutcome)
1267
+ return;
1268
+ this.#hasFirstOutcome = true;
1269
+ this.#firstOutcome?.resolve();
1270
+ this.#firstOutcome = undefined;
1271
+ for (const holder of this.#holders)
1272
+ holder.dependent?.dependencyMoved();
1273
+ }
1274
+ /** The chain of waits from this activation to `target` (see `Target`), through its parked attempt's dependencies. */
1275
+ pathTo(target, visited) {
1276
+ if (this === target)
1277
+ return [this];
1278
+ visited.add(this);
1279
+ for (const dependency of this.#waitingFor) {
1280
+ const next = dependency.kind === "reference" ? dependency.binding.target : undefined;
1281
+ if (next === undefined || visited.has(next))
1282
+ continue;
1283
+ const rest = next.pathTo(target, visited);
1284
+ if (rest !== undefined)
1285
+ return [this, ...rest];
1286
+ }
1287
+ return undefined;
1288
+ }
1289
+ }
1290
+ /** Whether two states of a reference say the same: the same object, or failures with the same cause (by value). */
1291
+ function sameState(a, b) {
1292
+ if (a === b)
1293
+ return true;
1294
+ return a.kind === "failed" && b.kind === "failed" && a.retryAt === b.retryAt && sameCause(a.cause, b.cause);
1295
+ }
1296
+ //# sourceMappingURL=object.js.map