@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,101 @@
1
+ // Destination (§3, section 1's table; dependency model §1): where a reference made on a host, or a hold arriving on one
2
+ // of its links, goes, by address alone: here when the address is this host's (served here or not), else over the
3
+ // route of its host address's kind, or over the parent link; and the check that an object served here lives here.
4
+ import { contractData } from "../contracts/internal.js";
5
+ import { ChordError } from "../data/index.js";
6
+ import { invalid } from "../data/internal.js";
7
+ /** A host's destinations: its address, its routes and its parent path, as the host keeps them. */
8
+ export class Destination {
9
+ #address;
10
+ #routes;
11
+ #parent;
12
+ constructor(address, routes, parent) {
13
+ this.#address = address;
14
+ this.#routes = routes;
15
+ this.#parent = parent;
16
+ }
17
+ /**
18
+ * Where a reference to `Type` with `params` made as `principal` goes: here for a local type, and for a remote type
19
+ * whose host address is this host's, served here or not (the check against what is served is the host's); otherwise
20
+ * over the route of its host address's kind, or over the parent link (the host address decides where an object
21
+ * lives: a worker reaches another worker's object of a type it serves too). Throws `invalid/host_address` for a host
22
+ * address whose params do not fit its kind, `forbidden` when the route refuses, and what a `hostAddress` or
23
+ * `authorize` throws.
24
+ */
25
+ reference(Type, params, principal, context) {
26
+ if (Type.kind === "local")
27
+ return HERE;
28
+ const address = hostAddressOf(Type, params);
29
+ if (this.#isHere(address))
30
+ return HERE;
31
+ return { kind: "path", path: this.#pathTo(address, principal, context) ?? this.#parent, address };
32
+ }
33
+ /**
34
+ * Whether a reference to `Type` with `params` goes here: a local type, or a remote one whose host address is this
35
+ * host's. A `hostAddress` that throws, throws.
36
+ */
37
+ placedHere(Type, params) {
38
+ return Type.kind === "local" || this.#isHere(hostAddressOf(Type, params));
39
+ }
40
+ /**
41
+ * Where a hold arriving on `link` acting as `principal` goes, by the address it names: here when it is this host's
42
+ * (a relay never captures a hold for serving the same name); over the route of its kind; else over the parent link
43
+ * (waiting for it while it is down), unless it came on the parent link or this host never had one (`unavailable`).
44
+ * Throws as `reference` does.
45
+ */
46
+ hold(request, link, principal, context) {
47
+ const { address } = request;
48
+ if (this.#isHere(address))
49
+ return HERE;
50
+ const routed = this.#pathTo(address, principal, context);
51
+ if (routed !== undefined)
52
+ return { kind: "path", path: routed, address };
53
+ if (link.role === "parent" || !this.#parent.linked) {
54
+ throw new ChordError({ code: "unavailable", message: `${request.type} is not served here` });
55
+ }
56
+ return { kind: "path", path: this.#parent, address };
57
+ }
58
+ /**
59
+ * The provider's own check of a request placed here for the remote `Type` it serves, with `params` (checked):
60
+ * `invalid/host_address` when its `hostAddress` puts the object on another host (code skew: the consumer computed
61
+ * this host), `undefined` when it lives here. A `hostAddress` that throws throws (the provider's own code). The
62
+ * address a request names only routes it.
63
+ */
64
+ misplaced(Type, params) {
65
+ const address = hostAddressOf(Type, params);
66
+ if (this.#isHere(address))
67
+ return undefined;
68
+ // A host serving a remote type has an address (`serve` refuses one without).
69
+ return invalid("host_address", `${Type.name}: placed on ${address.kind}, this host is ${this.#address.key}`);
70
+ }
71
+ /**
72
+ * The path to `address` when this host routes its kind (its params checked, `authorize` run for `principal`);
73
+ * `undefined` without a route for its kind.
74
+ */
75
+ #pathTo(address, principal, context) {
76
+ return this.#routes.get(address.kind)?.path(address.params, principal, context);
77
+ }
78
+ /** Whether an object whose host address is `address` lives here: this host has that address. */
79
+ #isHere(address) {
80
+ const own = this.#address;
81
+ return own !== undefined && sameAddress(own, address);
82
+ }
83
+ }
84
+ const HERE = { kind: "here" };
85
+ /** The address a remote `Type`'s `hostAddress` computes for `params`. */
86
+ function hostAddressOf(Type, params) {
87
+ // Every remote contract has one (declaration policy, `remote`).
88
+ const hostAddress = contractData(Type).hostAddress;
89
+ // Plugin code: what it returns is checked where it is routed or served.
90
+ const { kind, params: values } = hostAddress(params);
91
+ return { kind, params: values };
92
+ }
93
+ /** Whether `address` names the host at `own`: the same kind and the same value for each of its params. */
94
+ function sameAddress(own, address) {
95
+ if (own.kind !== address.kind || typeof address.params !== "object" || address.params === null)
96
+ return false;
97
+ const values = address.params;
98
+ const fields = Object.keys(own.params);
99
+ return Object.keys(values).length === fields.length && fields.every((field) => values[field] === own.params[field]);
100
+ }
101
+ //# sourceMappingURL=destination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destination.js","sourceRoot":"","sources":["../../src/host/destination.ts"],"names":[],"mappings":"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","sourcesContent":["// Destination (§3, section 1's table; dependency model §1): where a reference made on a host, or a hold arriving on one\n// of its links, goes, by address alone: here when the address is this host's (served here or not), else over the\n// route of its host address's kind, or over the parent link; and the check that an object served here lives here.\n\nimport type { Context } from \"../context/index.ts\";\nimport type { Address, Contract, ParamsOf } from \"../contracts/index.ts\";\nimport { contractData } from \"../contracts/internal.ts\";\nimport { ChordError, type Principal } from \"../data/index.ts\";\nimport { invalid } from \"../data/internal.ts\";\nimport type { WireAddress } from \"../link/internal.ts\";\nimport type { HoldRequest, HostLink, Path } from \"../remote/internal.ts\";\nimport type { Route } from \"./route.ts\";\n\n/** Where something is placed: here, or over a path (with the host address it was computed or named with). */\nexport type Placed =\n\t| { readonly kind: \"here\" }\n\t| { readonly kind: \"path\"; readonly path: Path; readonly address: WireAddress };\n\n/** A host's destinations: its address, its routes and its parent path, as the host keeps them. */\nexport class Destination {\n\treadonly #address: Address | undefined;\n\treadonly #routes: ReadonlyMap<string, Route>;\n\treadonly #parent: Path;\n\n\tconstructor(address: Address | undefined, routes: ReadonlyMap<string, Route>, parent: Path) {\n\t\tthis.#address = address;\n\t\tthis.#routes = routes;\n\t\tthis.#parent = parent;\n\t}\n\n\t/**\n\t * Where a reference to `Type` with `params` made as `principal` goes: here for a local type, and for a remote type\n\t * whose host address is this host's, served here or not (the check against what is served is the host's); otherwise\n\t * over the route of its host address's kind, or over the parent link (the host address decides where an object\n\t * lives: a worker reaches another worker's object of a type it serves too). Throws `invalid/host_address` for a host\n\t * address whose params do not fit its kind, `forbidden` when the route refuses, and what a `hostAddress` or\n\t * `authorize` throws.\n\t */\n\treference(Type: Contract, params: ParamsOf<Contract>, principal: Principal | undefined, context: Context): Placed {\n\t\tif (Type.kind === \"local\") return HERE;\n\t\tconst address = hostAddressOf(Type, params);\n\t\tif (this.#isHere(address)) return HERE;\n\t\treturn { kind: \"path\", path: this.#pathTo(address, principal, context) ?? this.#parent, address };\n\t}\n\n\t/**\n\t * Whether a reference to `Type` with `params` goes here: a local type, or a remote one whose host address is this\n\t * host's. A `hostAddress` that throws, throws.\n\t */\n\tplacedHere(Type: Contract, params: ParamsOf<Contract>): boolean {\n\t\treturn Type.kind === \"local\" || this.#isHere(hostAddressOf(Type, params));\n\t}\n\n\t/**\n\t * Where a hold arriving on `link` acting as `principal` goes, by the address it names: here when it is this host's\n\t * (a relay never captures a hold for serving the same name); over the route of its kind; else over the parent link\n\t * (waiting for it while it is down), unless it came on the parent link or this host never had one (`unavailable`).\n\t * Throws as `reference` does.\n\t */\n\thold(request: HoldRequest, link: HostLink, principal: Principal | undefined, context: Context): Placed {\n\t\tconst { address } = request;\n\t\tif (this.#isHere(address)) return HERE;\n\t\tconst routed = this.#pathTo(address, principal, context);\n\t\tif (routed !== undefined) return { kind: \"path\", path: routed, address };\n\t\tif (link.role === \"parent\" || !this.#parent.linked) {\n\t\t\tthrow new ChordError({ code: \"unavailable\", message: `${request.type} is not served here` });\n\t\t}\n\t\treturn { kind: \"path\", path: this.#parent, address };\n\t}\n\n\t/**\n\t * The provider's own check of a request placed here for the remote `Type` it serves, with `params` (checked):\n\t * `invalid/host_address` when its `hostAddress` puts the object on another host (code skew: the consumer computed\n\t * this host), `undefined` when it lives here. A `hostAddress` that throws throws (the provider's own code). The\n\t * address a request names only routes it.\n\t */\n\tmisplaced(Type: Contract, params: ParamsOf<Contract>): ChordError | undefined {\n\t\tconst address = hostAddressOf(Type, params);\n\t\tif (this.#isHere(address)) return undefined;\n\t\t// A host serving a remote type has an address (`serve` refuses one without).\n\t\treturn invalid(\"host_address\", `${Type.name}: placed on ${address.kind}, this host is ${this.#address!.key}`);\n\t}\n\n\t/**\n\t * The path to `address` when this host routes its kind (its params checked, `authorize` run for `principal`);\n\t * `undefined` without a route for its kind.\n\t */\n\t#pathTo(address: WireAddress, principal: Principal | undefined, context: Context): Path | undefined {\n\t\treturn this.#routes.get(address.kind)?.path(address.params, principal, context);\n\t}\n\n\t/** Whether an object whose host address is `address` lives here: this host has that address. */\n\t#isHere(address: WireAddress): boolean {\n\t\tconst own = this.#address;\n\t\treturn own !== undefined && sameAddress(own, address);\n\t}\n}\n\nconst HERE: Placed = { kind: \"here\" };\n\n/** The address a remote `Type`'s `hostAddress` computes for `params`. */\nfunction hostAddressOf(Type: Contract, params: ParamsOf<Contract>): WireAddress {\n\t// Every remote contract has one (declaration policy, `remote`).\n\tconst hostAddress = contractData(Type).hostAddress!;\n\t// Plugin code: what it returns is checked where it is routed or served.\n\tconst { kind, params: values } = hostAddress(params) as { readonly kind: string; readonly params: unknown };\n\treturn { kind, params: values };\n}\n\n/** Whether `address` names the host at `own`: the same kind and the same value for each of its params. */\nfunction sameAddress(own: Address, address: WireAddress): boolean {\n\tif (own.kind !== address.kind || typeof address.params !== \"object\" || address.params === null) return false;\n\tconst values = address.params as { readonly [field: string]: unknown };\n\tconst fields = Object.keys(own.params);\n\treturn Object.keys(values).length === fields.length && fields.every((field) => values[field] === own.params[field]);\n}\n"]}
@@ -0,0 +1,84 @@
1
+ import type { AcceptsTable, Contract } from "../contracts/index.ts";
2
+ import type { Principal } from "../data/index.ts";
3
+ import type { Contribution, Registry, RegistryProvider } from "../registries/index.ts";
4
+ import type { Watchable } from "../watch.ts";
5
+ import type { Factory } from "./attempt.ts";
6
+ import type { Presence } from "./presence.ts";
7
+ /** What a setup serves types and registries with (valid only while the setup runs), and the host's presence lists. */
8
+ export interface FacetHost<P extends Principal = Principal> {
9
+ /**
10
+ * Serves a type on this host with `factory`; a remote type's factory gets the principal its object is for.
11
+ * `options.accepts` maps the older versions it still serves (checked here: a declaration error rejects the load or
12
+ * the reload).
13
+ */
14
+ serve<C extends Contract>(Type: C, factory: Factory<C, P>, options?: ServeOptions<C>): void;
15
+ /**
16
+ * Serves registry `R` on this host (its defining plugin's facet, the one provider, D1): `compose` builds the value
17
+ * from the table, `accepts` adapts older versions. A second serve of a registry is refused at `load`.
18
+ */
19
+ serve<C, V>(R: Registry<C, V>, provider: RegistryProvider<C, V>): void;
20
+ /** `host.references(Type)`: the references to objects of `Type` on this host (§19), for factories to derive from. */
21
+ references<C extends Contract>(Type: C): Watchable<readonly Presence<C, P>[]>;
22
+ }
23
+ /** What `host.serve` takes besides the type and the factory. */
24
+ export type ServeOptions<C extends Contract = Contract> = {
25
+ /**
26
+ * The older versions of `C` this provider still binds, with the mappings their edits need (Q10, `checkAccepts`):
27
+ * an older consumer's state members mapped per binding, its calls' arguments and results mapped.
28
+ */
29
+ readonly accepts?: AcceptsTable<C>;
30
+ /**
31
+ * How long, in milliseconds, a live object with params stays live after its last reference is released (0 by
32
+ * default): a reference within that time reuses it, with its documents and dependencies.
33
+ */
34
+ readonly linger?: number;
35
+ /**
36
+ * Its calls start no `chord.method` span (`true`): Chord's telemetry ingest, whose every call would otherwise record
37
+ * a span about the telemetry it writes. Traced by default.
38
+ */
39
+ readonly untraced?: true;
40
+ };
41
+ /** What a facet's setup declares with besides the host: its contributions to registries (R21). */
42
+ export interface FacetSelf {
43
+ /**
44
+ * Contributes `value` to registry `R` while this plugin is loaded: a plain value, or a Chord watchable of one
45
+ * (followed: its change recomposes). At most one per registry.
46
+ */
47
+ contribute<C>(R: Registry<C, unknown>, value: Contribution<C>): void;
48
+ }
49
+ /** What a setup served, by kind: a type (its contract, factory and options), or a registry (its provider). */
50
+ export type ServedEntry = {
51
+ readonly kind: "type";
52
+ readonly contract: Contract;
53
+ readonly factory: ServedFactory;
54
+ readonly options: ServeOptions;
55
+ } | {
56
+ readonly kind: "registry";
57
+ readonly registry: Registry<unknown, unknown>;
58
+ readonly provider: RegistryProvider<unknown, unknown>;
59
+ };
60
+ /** A contribution a setup declared. */
61
+ export type FacetContribution = {
62
+ readonly registry: Registry<unknown, unknown>;
63
+ readonly value: unknown;
64
+ };
65
+ /** A factory as a setup served it, of either kind (the host dispatches on its contract's kind). */
66
+ type ServedFactory = (params: never, principalOrSelf: never, self: never) => unknown;
67
+ /** A plugin's facet for hosts of the app's principal type `P` (type only: nothing is checked at runtime). */
68
+ export type Facet<P extends Principal> = {
69
+ readonly setup: (host: FacetHost<P>, self: FacetSelf) => void;
70
+ /** Type only: the principal type, invariant, so a host takes only facets typed for exactly its `P`. */
71
+ readonly "~principal"?: (principal: P) => P;
72
+ };
73
+ /** Defines a facet; base code binds `P` once, next to its principal type. */
74
+ export declare function defineFacet<P extends Principal>(setup: (host: FacetHost<P>, self: FacetSelf) => void): Facet<P>;
75
+ /**
76
+ * Runs a facet's setup and returns the types and registries it served and its contributions, in order; `references`
77
+ * is the host's.
78
+ */
79
+ export declare function setUp<P extends Principal>(name: string, facet: Facet<P>, references: <C extends Contract>(Type: C) => Watchable<readonly Presence<C, P>[]>): {
80
+ readonly served: readonly ServedEntry[];
81
+ readonly contributions: readonly FacetContribution[];
82
+ };
83
+ export {};
84
+ //# sourceMappingURL=facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet.d.ts","sourceRoot":"","sources":["../../src/host/facet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ // Facets (§16): a plugin's setup for one host, typed by the app's principal type. A setup only declares: the types and
2
+ // registries it serves, its contributions to registries (slice 8) and the host's presence lists; it has no documents,
3
+ // routines or natives, so a facet cannot fail after `load`.
4
+ /** Defines a facet; base code binds `P` once, next to its principal type. */
5
+ export function defineFacet(setup) {
6
+ return { setup };
7
+ }
8
+ /**
9
+ * Runs a facet's setup and returns the types and registries it served and its contributions, in order; `references`
10
+ * is the host's.
11
+ */
12
+ export function setUp(name, facet, references) {
13
+ const served = [];
14
+ const contributions = [];
15
+ let open = true;
16
+ const assertOpen = (what) => {
17
+ if (!open)
18
+ throw new Error(`${name}: ${what} is valid only in the facet's setup`);
19
+ };
20
+ const host = {
21
+ serve: (Type, implementation, options = {}) => {
22
+ assertOpen("host.serve");
23
+ // Served types and registries are dispatched by their kind; a factory matches its own contract, a provider
24
+ // its own registry.
25
+ if (Type.kind === "registry") {
26
+ served.push({
27
+ kind: "registry",
28
+ registry: Type,
29
+ provider: implementation,
30
+ });
31
+ }
32
+ else {
33
+ served.push({ kind: "type", contract: Type, factory: implementation, options });
34
+ }
35
+ },
36
+ references,
37
+ };
38
+ const self = {
39
+ contribute: (registry, value) => {
40
+ assertOpen("self.contribute");
41
+ if (contributions.some((each) => each.registry.name === registry.name)) {
42
+ throw new Error(`${name}: registry ${registry.name} is contributed to twice`);
43
+ }
44
+ contributions.push({ registry: registry, value });
45
+ },
46
+ };
47
+ try {
48
+ facet.setup(host, self);
49
+ }
50
+ finally {
51
+ open = false;
52
+ }
53
+ return { served, contributions };
54
+ }
55
+ //# sourceMappingURL=facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet.js","sourceRoot":"","sources":["../../src/host/facet.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,sHAAsH;AACtH,4DAA4D;AAiF5D,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAsB,KAAoD;IACpG,OAAO,EAAE,KAAK,EAAE,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CACpB,IAAY,EACZ,KAAe,EACf,UAAiF;IAEjF,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,aAAa,GAAwB,EAAE,CAAC;IAC9C,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,MAAM,UAAU,GAAG,CAAC,IAAY,EAAQ,EAAE;QACzC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,qCAAqC,CAAC,CAAC;IACnF,CAAC,CAAC;IACF,MAAM,IAAI,GAAiB;QAC1B,KAAK,EAAE,CAAC,IAA2C,EAAE,cAAuB,EAAE,OAAO,GAAiB,EAAE,EAAE,EAAE;YAC3G,UAAU,CAAC,YAAY,CAAC,CAAC;YACzB,2GAA2G;YAC3G,oBAAoB;YACpB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,cAAoD;iBAC9D,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,cAA+B,EAAE,OAAO,EAAE,CAAC,CAAC;YAClG,CAAC;QACF,CAAC;QACD,UAAU;KACV,CAAC;IACF,MAAM,IAAI,GAAc;QACvB,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YAC/B,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC9B,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,QAAQ,CAAC,IAAI,0BAA0B,CAAC,CAAC;YAC/E,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAsC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;KACD,CAAC;IACF,IAAI,CAAC;QACJ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;YAAS,CAAC;QACV,IAAI,GAAG,KAAK,CAAC;IACd,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC","sourcesContent":["// Facets (§16): a plugin's setup for one host, typed by the app's principal type. A setup only declares: the types and\n// registries it serves, its contributions to registries (slice 8) and the host's presence lists; it has no documents,\n// routines or natives, so a facet cannot fail after `load`.\n\nimport type { AcceptsTable, Contract } from \"../contracts/index.ts\";\nimport type { Principal } from \"../data/index.ts\";\nimport type { Contribution, Registry, RegistryProvider } from \"../registries/index.ts\";\nimport type { Watchable } from \"../watch.ts\";\nimport type { Factory } from \"./attempt.ts\";\nimport type { Presence } from \"./presence.ts\";\n\n/** What a setup serves types and registries with (valid only while the setup runs), and the host's presence lists. */\nexport interface FacetHost<P extends Principal = Principal> {\n\t/**\n\t * Serves a type on this host with `factory`; a remote type's factory gets the principal its object is for.\n\t * `options.accepts` maps the older versions it still serves (checked here: a declaration error rejects the load or\n\t * the reload).\n\t */\n\tserve<C extends Contract>(Type: C, factory: Factory<C, P>, options?: ServeOptions<C>): void;\n\t/**\n\t * Serves registry `R` on this host (its defining plugin's facet, the one provider, D1): `compose` builds the value\n\t * from the table, `accepts` adapts older versions. A second serve of a registry is refused at `load`.\n\t */\n\tserve<C, V>(R: Registry<C, V>, provider: RegistryProvider<C, V>): void;\n\t/** `host.references(Type)`: the references to objects of `Type` on this host (§19), for factories to derive from. */\n\treferences<C extends Contract>(Type: C): Watchable<readonly Presence<C, P>[]>;\n}\n\n/** What `host.serve` takes besides the type and the factory. */\nexport type ServeOptions<C extends Contract = Contract> = {\n\t/**\n\t * The older versions of `C` this provider still binds, with the mappings their edits need (Q10, `checkAccepts`):\n\t * an older consumer's state members mapped per binding, its calls' arguments and results mapped.\n\t */\n\treadonly accepts?: AcceptsTable<C>;\n\t/**\n\t * How long, in milliseconds, a live object with params stays live after its last reference is released (0 by\n\t * default): a reference within that time reuses it, with its documents and dependencies.\n\t */\n\treadonly linger?: number;\n\t/**\n\t * Its calls start no `chord.method` span (`true`): Chord's telemetry ingest, whose every call would otherwise record\n\t * a span about the telemetry it writes. Traced by default.\n\t */\n\treadonly untraced?: true;\n};\n\n/** What a facet's setup declares with besides the host: its contributions to registries (R21). */\nexport interface FacetSelf {\n\t/**\n\t * Contributes `value` to registry `R` while this plugin is loaded: a plain value, or a Chord watchable of one\n\t * (followed: its change recomposes). At most one per registry.\n\t */\n\tcontribute<C>(R: Registry<C, unknown>, value: Contribution<C>): void;\n}\n\n/** What a setup served, by kind: a type (its contract, factory and options), or a registry (its provider). */\nexport type ServedEntry =\n\t| {\n\t\t\treadonly kind: \"type\";\n\t\t\treadonly contract: Contract;\n\t\t\treadonly factory: ServedFactory;\n\t\t\treadonly options: ServeOptions;\n\t }\n\t| {\n\t\t\treadonly kind: \"registry\";\n\t\t\treadonly registry: Registry<unknown, unknown>;\n\t\t\treadonly provider: RegistryProvider<unknown, unknown>;\n\t };\n\n/** A contribution a setup declared. */\nexport type FacetContribution = { readonly registry: Registry<unknown, unknown>; readonly value: unknown };\n\n/** A factory as a setup served it, of either kind (the host dispatches on its contract's kind). */\ntype ServedFactory = (params: never, principalOrSelf: never, self: never) => unknown;\n\n/** A plugin's facet for hosts of the app's principal type `P` (type only: nothing is checked at runtime). */\nexport type Facet<P extends Principal> = {\n\treadonly setup: (host: FacetHost<P>, self: FacetSelf) => void;\n\t/** Type only: the principal type, invariant, so a host takes only facets typed for exactly its `P`. */\n\treadonly \"~principal\"?: (principal: P) => P;\n};\n\n/** Defines a facet; base code binds `P` once, next to its principal type. */\nexport function defineFacet<P extends Principal>(setup: (host: FacetHost<P>, self: FacetSelf) => void): Facet<P> {\n\treturn { setup };\n}\n\n/**\n * Runs a facet's setup and returns the types and registries it served and its contributions, in order; `references`\n * is the host's.\n */\nexport function setUp<P extends Principal>(\n\tname: string,\n\tfacet: Facet<P>,\n\treferences: <C extends Contract>(Type: C) => Watchable<readonly Presence<C, P>[]>,\n): { readonly served: readonly ServedEntry[]; readonly contributions: readonly FacetContribution[] } {\n\tconst served: ServedEntry[] = [];\n\tconst contributions: FacetContribution[] = [];\n\tlet open = true;\n\tconst assertOpen = (what: string): void => {\n\t\tif (!open) throw new Error(`${name}: ${what} is valid only in the facet's setup`);\n\t};\n\tconst host: FacetHost<P> = {\n\t\tserve: (Type: Contract | Registry<unknown, unknown>, implementation: unknown, options: ServeOptions = {}) => {\n\t\t\tassertOpen(\"host.serve\");\n\t\t\t// Served types and registries are dispatched by their kind; a factory matches its own contract, a provider\n\t\t\t// its own registry.\n\t\t\tif (Type.kind === \"registry\") {\n\t\t\t\tserved.push({\n\t\t\t\t\tkind: \"registry\",\n\t\t\t\t\tregistry: Type,\n\t\t\t\t\tprovider: implementation as RegistryProvider<unknown, unknown>,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tserved.push({ kind: \"type\", contract: Type, factory: implementation as ServedFactory, options });\n\t\t\t}\n\t\t},\n\t\treferences,\n\t};\n\tconst self: FacetSelf = {\n\t\tcontribute: (registry, value) => {\n\t\t\tassertOpen(\"self.contribute\");\n\t\t\tif (contributions.some((each) => each.registry.name === registry.name)) {\n\t\t\t\tthrow new Error(`${name}: registry ${registry.name} is contributed to twice`);\n\t\t\t}\n\t\t\tcontributions.push({ registry: registry as Registry<unknown, unknown>, value });\n\t\t},\n\t};\n\ttry {\n\t\tfacet.setup(host, self);\n\t} finally {\n\t\topen = false;\n\t}\n\treturn { served, contributions };\n}\n"]}
@@ -0,0 +1,52 @@
1
+ import type { Context } from "../context/index.ts";
2
+ import type { JsonValue } from "../json.ts";
3
+ import { type Batch, Source, type Subscriber } from "../state/internal.ts";
4
+ import type { Watch, WatchCall, WatchEnd } from "../watch.ts";
5
+ /** The observer a followed runtime is given: Chord's watch shapes (Durable's `Observer`). */
6
+ export type FollowObserver<T> = {
7
+ /** One change, synchronously and quickly: Chord only records it. */
8
+ advance(call: WatchCall<T>, context: Context): void;
9
+ /** The followed source ended: `failed` (its runtime failed), or `ended` for good. */
10
+ end(end: WatchEnd): void;
11
+ };
12
+ /** What attaching gives: the value every later call starts from, and how to detach (Durable's `Observation`). */
13
+ export type FollowAttachment<T> = {
14
+ readonly value: T;
15
+ detach(): void;
16
+ };
17
+ /**
18
+ * What `self.follow` takes: attaches `observer`, resolving with the attachment, `undefined` for an absent address.
19
+ * The observer takes calls of any value (it only records them), so `T` is inferred from the attachment alone.
20
+ */
21
+ export type FollowAttach<T> = (observer: FollowObserver<unknown>, context: Context) => Promise<FollowAttachment<T> | undefined>;
22
+ /** Who a followed source belongs to: its attempt (R4) and its context. */
23
+ export type FollowOwner = {
24
+ readonly label: string;
25
+ readonly context: Context;
26
+ /**
27
+ * The followed runtime ended its observer: `failed` fails the attempt `transient` (live or activating, its retry
28
+ * attaches again); `ended` while the attempt activates fails it `transient` too (it would go live on a source that
29
+ * ended); `ended` while live is final for the source only.
30
+ */
31
+ ended(end: WatchEnd): void;
32
+ };
33
+ /** A followed source: the runtime's value, its calls applied in order, its frames delivered in the host's batch. */
34
+ export declare class FollowSource extends Source {
35
+ #private;
36
+ constructor(attach: FollowAttach<JsonValue>, owner: FollowOwner, batch: Batch);
37
+ get value(): JsonValue;
38
+ /**
39
+ * Attaches (activation, after the natives opened): the calls that came meanwhile apply on the attachment's value,
40
+ * and an end that came meanwhile takes effect then (the value stays). A rejected attachment, or `undefined` (an
41
+ * absent address), throws; an attachment arriving after its attempt detached the source is detached at once.
42
+ */
43
+ attach(context: Context): Promise<void>;
44
+ /** Its attempt ended: the observer is detached (also after the runtime ended it) and its watches end `ended`. */
45
+ detach(): void;
46
+ /** A watch of an ended source opens at its value and ends `ended` at once. */
47
+ openWatch(context: Context): Watch<JsonValue>;
48
+ /** A subscriber of an ended source (a reference's watch through its member) ends `ended` at once. */
49
+ subscribe(subscriber: Subscriber): void;
50
+ deliver(context: Context): void;
51
+ }
52
+ //# sourceMappingURL=follow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow.d.ts","sourceRoot":"","sources":["../../src/host/follow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,6FAA6F;AAC7F,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC/B,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,qFAAqF;IACrF,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,iHAAiH;AACjH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,MAAM,IAAI,IAAI,CAAA;CAAE,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAC7B,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,EACjC,OAAO,EAAE,OAAO,KACZ,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B,CAAC;AAgBF,oHAAoH;AACpH,qBAAa,YAAa,SAAQ,MAAM;;IAmBvC,YAAY,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAI5E;IAED,IAAI,KAAK,IAAI,SAAS,CAQrB;IAED;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5C;IAED,iHAAiH;IACjH,MAAM,IAAI,IAAI,CAMb;IAED,8EAA8E;IACrE,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAIrD;IAED,qGAAqG;IAC5F,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAG/C;IAED,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW9B;CA4FD"}
@@ -0,0 +1,207 @@
1
+ // Followed sources (slice 6b D9, R4, §3): `self.follow(attach)`, a Chord source over a synchronous observer of another
2
+ // runtime (Durable's `observeConversation`, `observeTaskGraph`, `observeDoc`). Attached during its attempt's
3
+ // activation, detached at the attempt's end. Calls inside a running batch (Durable adopting in the store's commit step)
4
+ // are marked in that batch, calls outside one are grouped into one batch on the next microtask, so a derive over two
5
+ // views of one commit computes once with both changes.
6
+ import { ChordError } from "../data/index.js";
7
+ import { Source } from "../state/internal.js";
8
+ const NO_OPS = [];
9
+ const ENDED = { kind: "ended" };
10
+ /** A followed source: the runtime's value, its calls applied in order, its frames delivered in the host's batch. */
11
+ export class FollowSource extends Source {
12
+ #attach;
13
+ #owner;
14
+ #state = { kind: "attaching", end: undefined };
15
+ #value;
16
+ /** Calls not applied yet: before the attachment resolved, and outside a batch until the next microtask. */
17
+ #queued = [];
18
+ /** Whether a microtask is queued to apply `#queued` in a batch of its own. */
19
+ #scheduled = false;
20
+ /**
21
+ * The runtime's end, still to reach the watches: `queued` after the queued calls' batch, `frame` after the current
22
+ * batch's frame (a retirement and an end in one batch: the retirement first).
23
+ */
24
+ #ending = "none";
25
+ /** The ops of the current batch's frame (kept only while watched), and whether a retirement came in it. */
26
+ #ops = [];
27
+ #retired = false;
28
+ #listed = false;
29
+ constructor(attach, owner, batch) {
30
+ super(batch);
31
+ this.#attach = attach;
32
+ this.#owner = owner;
33
+ }
34
+ get value() {
35
+ if (this.#value === undefined) {
36
+ throw new ChordError({
37
+ code: "not_ready",
38
+ message: `${this.#owner.label}: a followed source read before it attached`,
39
+ });
40
+ }
41
+ return this.#value;
42
+ }
43
+ /**
44
+ * Attaches (activation, after the natives opened): the calls that came meanwhile apply on the attachment's value,
45
+ * and an end that came meanwhile takes effect then (the value stays). A rejected attachment, or `undefined` (an
46
+ * absent address), throws; an attachment arriving after its attempt detached the source is detached at once.
47
+ */
48
+ async attach(context) {
49
+ const observer = {
50
+ advance: (call) => this.#advance(call),
51
+ end: (end) => this.#end(end),
52
+ };
53
+ const attached = await this.#attach(observer, context);
54
+ if (attached === undefined) {
55
+ throw new ChordError({ code: "unavailable", message: `${this.#owner.label}: the followed address is absent` });
56
+ }
57
+ const state = this.#state;
58
+ const detach = () => attached.detach();
59
+ if (state.kind !== "attaching") {
60
+ detach();
61
+ return;
62
+ }
63
+ this.#value = attached.value;
64
+ // Nothing watches it yet (members are checked after this): the queued calls only move the value on.
65
+ for (const call of this.#queued)
66
+ if (call.kind === "value")
67
+ this.#value = call.value;
68
+ this.#queued = [];
69
+ this.#state = state.end?.kind === "ended" ? { kind: "ended", detach } : { kind: "attached", detach };
70
+ }
71
+ /** Its attempt ended: the observer is detached (also after the runtime ended it) and its watches end `ended`. */
72
+ detach() {
73
+ const state = this.#state;
74
+ this.#state = { kind: "detached" };
75
+ this.#queued = [];
76
+ if (state.kind === "attached" || state.kind === "ended")
77
+ state.detach();
78
+ this.endWatches();
79
+ }
80
+ /** A watch of an ended source opens at its value and ends `ended` at once. */
81
+ openWatch(context) {
82
+ const watch = super.openWatch(context);
83
+ if (this.#over)
84
+ watch.end(ENDED);
85
+ return watch;
86
+ }
87
+ /** A subscriber of an ended source (a reference's watch through its member) ends `ended` at once. */
88
+ subscribe(subscriber) {
89
+ if (this.#over)
90
+ subscriber.end(ENDED);
91
+ else
92
+ super.subscribe(subscriber);
93
+ }
94
+ deliver(context) {
95
+ const ops = this.#ops;
96
+ const retired = this.#retired;
97
+ this.#ops = [];
98
+ this.#retired = false;
99
+ this.#listed = false;
100
+ this.publish(this.#value, ops.length === 0 ? NO_OPS : ops, retired, context);
101
+ if (this.#ending === "frame") {
102
+ this.#ending = "none";
103
+ this.endWatchesAfterDelivery();
104
+ }
105
+ }
106
+ /** Whether nothing reaches its watches any more: ended by the runtime (what it gave delivered) or detached. */
107
+ get #over() {
108
+ const { kind } = this.#state;
109
+ return (kind === "ended" && this.#ending === "none") || kind === "detached";
110
+ }
111
+ /**
112
+ * A call of the runtime: before the attachment, queued; inside a running batch, applied there (after what was
113
+ * queued); outside one, queued for one batch on the next microtask.
114
+ */
115
+ #advance(call) {
116
+ const { kind } = this.#state;
117
+ if (kind === "ended" || kind === "detached")
118
+ return;
119
+ if (kind === "attaching" || !this.batch.running) {
120
+ this.#queued.push(call);
121
+ if (kind === "attached")
122
+ this.#schedule();
123
+ return;
124
+ }
125
+ this.#applyQueued();
126
+ this.#apply(call);
127
+ }
128
+ /**
129
+ * The runtime ended its observer (R4); its attempt is told. `ended` is final: what came before reaches the watches
130
+ * first (the queued calls in their batch, a call of the running batch in its frame), then they end, the value
131
+ * staying. A `failed` attempt detaches the source.
132
+ */
133
+ #end(end) {
134
+ const state = this.#state;
135
+ if (state.kind === "ended" || state.kind === "detached")
136
+ return;
137
+ if (state.kind === "attaching") {
138
+ if (state.end === undefined)
139
+ this.#state = { kind: "attaching", end };
140
+ this.#owner.ended(end);
141
+ return;
142
+ }
143
+ if (end.kind === "ended") {
144
+ this.#state = { kind: "ended", detach: state.detach };
145
+ if (this.#queued.length > 0 && !this.batch.running)
146
+ this.#ending = "queued";
147
+ else {
148
+ // Inside a running batch the queued calls join it (none is queued outside one: they wait for their batch).
149
+ this.#applyQueued();
150
+ this.#endAfterFrame();
151
+ }
152
+ }
153
+ this.#owner.ended(end);
154
+ }
155
+ /** The watches end once this batch's frame reached them, at once when the source is in none. */
156
+ #endAfterFrame() {
157
+ // No frame to wait for (nothing watches it): the end is over now, and a later watch ends at once.
158
+ this.#ending = this.#listed ? "frame" : "none";
159
+ if (!this.#listed)
160
+ this.endWatchesAfterDelivery();
161
+ }
162
+ #schedule() {
163
+ if (this.#scheduled)
164
+ return;
165
+ this.#scheduled = true;
166
+ this.batch.soon(() => {
167
+ this.#scheduled = false;
168
+ const { kind } = this.#state;
169
+ if (kind === "attached" || kind === "ended")
170
+ this.#applyQueued();
171
+ if (this.#ending === "queued")
172
+ this.#endAfterFrame();
173
+ }, this.#owner.context);
174
+ }
175
+ #applyQueued() {
176
+ const queued = this.#queued;
177
+ if (queued.length === 0)
178
+ return;
179
+ this.#queued = [];
180
+ for (const call of queued)
181
+ this.#apply(call);
182
+ }
183
+ /** Applies one value call inside the running batch: the new value, its ops for the frame, the source marked once. */
184
+ #apply(call) {
185
+ // The runtime's failures are final: it ends its observer instead of sending one.
186
+ if (call.kind !== "value")
187
+ return;
188
+ this.#value = call.value;
189
+ if (call.retired)
190
+ this.#retired = true;
191
+ if (!this.watched) {
192
+ this.changed();
193
+ if (call.retired)
194
+ this.retiredInBatch();
195
+ return;
196
+ }
197
+ for (const op of call.ops)
198
+ this.#ops.push(op);
199
+ if (!this.#listed) {
200
+ this.#listed = true;
201
+ this.changed();
202
+ }
203
+ if (call.retired)
204
+ this.retiredInBatch();
205
+ }
206
+ }
207
+ //# sourceMappingURL=follow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow.js","sourceRoot":"","sources":["../../src/host/follow.ts"],"names":[],"mappings":"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","sourcesContent":["// Followed sources (slice 6b D9, R4, §3): `self.follow(attach)`, a Chord source over a synchronous observer of another\n// runtime (Durable's `observeConversation`, `observeTaskGraph`, `observeDoc`). Attached during its attempt's\n// activation, detached at the attempt's end. Calls inside a running batch (Durable adopting in the store's commit step)\n// are marked in that batch, calls outside one are grouped into one batch on the next microtask, so a derive over two\n// views of one commit computes once with both changes.\n\nimport type { Context } from \"../context/index.ts\";\nimport { ChordError } from \"../data/index.ts\";\nimport type { Op } from \"../delta/index.ts\";\nimport type { JsonValue } from \"../json.ts\";\nimport { type Batch, Source, type Subscriber } from \"../state/internal.ts\";\nimport type { Watch, WatchCall, WatchEnd } from \"../watch.ts\";\n\n/** The observer a followed runtime is given: Chord's watch shapes (Durable's `Observer`). */\nexport type FollowObserver<T> = {\n\t/** One change, synchronously and quickly: Chord only records it. */\n\tadvance(call: WatchCall<T>, context: Context): void;\n\t/** The followed source ended: `failed` (its runtime failed), or `ended` for good. */\n\tend(end: WatchEnd): void;\n};\n\n/** What attaching gives: the value every later call starts from, and how to detach (Durable's `Observation`). */\nexport type FollowAttachment<T> = { readonly value: T; detach(): void };\n\n/**\n * What `self.follow` takes: attaches `observer`, resolving with the attachment, `undefined` for an absent address.\n * The observer takes calls of any value (it only records them), so `T` is inferred from the attachment alone.\n */\nexport type FollowAttach<T> = (\n\tobserver: FollowObserver<unknown>,\n\tcontext: Context,\n) => Promise<FollowAttachment<T> | undefined>;\n\n/** Who a followed source belongs to: its attempt (R4) and its context. */\nexport type FollowOwner = {\n\treadonly label: string;\n\treadonly context: Context;\n\t/**\n\t * The followed runtime ended its observer: `failed` fails the attempt `transient` (live or activating, its retry\n\t * attaches again); `ended` while the attempt activates fails it `transient` too (it would go live on a source that\n\t * ended); `ended` while live is final for the source only.\n\t */\n\tended(end: WatchEnd): void;\n};\n\n/**\n * Where a followed source stands: waiting for its attachment (with the runtime's end when it came first), attached,\n * ended by the runtime (its value stays; detached at its attempt's end), or detached by its attempt.\n */\ntype FollowState =\n\t| { readonly kind: \"attaching\"; readonly end: WatchEnd | undefined }\n\t| { readonly kind: \"attached\"; readonly detach: () => void }\n\t| { readonly kind: \"ended\"; readonly detach: () => void }\n\t| { readonly kind: \"detached\" };\n\nconst NO_OPS: readonly Op[] = [];\n\nconst ENDED: WatchEnd = { kind: \"ended\" };\n\n/** A followed source: the runtime's value, its calls applied in order, its frames delivered in the host's batch. */\nexport class FollowSource extends Source {\n\treadonly #attach: FollowAttach<JsonValue>;\n\treadonly #owner: FollowOwner;\n\t#state: FollowState = { kind: \"attaching\", end: undefined };\n\t#value: JsonValue | undefined;\n\t/** Calls not applied yet: before the attachment resolved, and outside a batch until the next microtask. */\n\t#queued: WatchCall<JsonValue>[] = [];\n\t/** Whether a microtask is queued to apply `#queued` in a batch of its own. */\n\t#scheduled = false;\n\t/**\n\t * The runtime's end, still to reach the watches: `queued` after the queued calls' batch, `frame` after the current\n\t * batch's frame (a retirement and an end in one batch: the retirement first).\n\t */\n\t#ending: \"none\" | \"queued\" | \"frame\" = \"none\";\n\t/** The ops of the current batch's frame (kept only while watched), and whether a retirement came in it. */\n\t#ops: Op[] = [];\n\t#retired = false;\n\t#listed = false;\n\n\tconstructor(attach: FollowAttach<JsonValue>, owner: FollowOwner, batch: Batch) {\n\t\tsuper(batch);\n\t\tthis.#attach = attach;\n\t\tthis.#owner = owner;\n\t}\n\n\tget value(): JsonValue {\n\t\tif (this.#value === undefined) {\n\t\t\tthrow new ChordError({\n\t\t\t\tcode: \"not_ready\",\n\t\t\t\tmessage: `${this.#owner.label}: a followed source read before it attached`,\n\t\t\t});\n\t\t}\n\t\treturn this.#value;\n\t}\n\n\t/**\n\t * Attaches (activation, after the natives opened): the calls that came meanwhile apply on the attachment's value,\n\t * and an end that came meanwhile takes effect then (the value stays). A rejected attachment, or `undefined` (an\n\t * absent address), throws; an attachment arriving after its attempt detached the source is detached at once.\n\t */\n\tasync attach(context: Context): Promise<void> {\n\t\tconst observer: FollowObserver<JsonValue> = {\n\t\t\tadvance: (call) => this.#advance(call),\n\t\t\tend: (end) => this.#end(end),\n\t\t};\n\t\tconst attached = await this.#attach(observer, context);\n\t\tif (attached === undefined) {\n\t\t\tthrow new ChordError({ code: \"unavailable\", message: `${this.#owner.label}: the followed address is absent` });\n\t\t}\n\t\tconst state = this.#state;\n\t\tconst detach = () => attached.detach();\n\t\tif (state.kind !== \"attaching\") {\n\t\t\tdetach();\n\t\t\treturn;\n\t\t}\n\t\tthis.#value = attached.value;\n\t\t// Nothing watches it yet (members are checked after this): the queued calls only move the value on.\n\t\tfor (const call of this.#queued) if (call.kind === \"value\") this.#value = call.value;\n\t\tthis.#queued = [];\n\t\tthis.#state = state.end?.kind === \"ended\" ? { kind: \"ended\", detach } : { kind: \"attached\", detach };\n\t}\n\n\t/** Its attempt ended: the observer is detached (also after the runtime ended it) and its watches end `ended`. */\n\tdetach(): void {\n\t\tconst state = this.#state;\n\t\tthis.#state = { kind: \"detached\" };\n\t\tthis.#queued = [];\n\t\tif (state.kind === \"attached\" || state.kind === \"ended\") state.detach();\n\t\tthis.endWatches();\n\t}\n\n\t/** A watch of an ended source opens at its value and ends `ended` at once. */\n\toverride openWatch(context: Context): Watch<JsonValue> {\n\t\tconst watch = super.openWatch(context);\n\t\tif (this.#over) watch.end(ENDED);\n\t\treturn watch;\n\t}\n\n\t/** A subscriber of an ended source (a reference's watch through its member) ends `ended` at once. */\n\toverride subscribe(subscriber: Subscriber): void {\n\t\tif (this.#over) subscriber.end(ENDED);\n\t\telse super.subscribe(subscriber);\n\t}\n\n\tdeliver(context: Context): void {\n\t\tconst ops = this.#ops;\n\t\tconst retired = this.#retired;\n\t\tthis.#ops = [];\n\t\tthis.#retired = false;\n\t\tthis.#listed = false;\n\t\tthis.publish(this.#value!, ops.length === 0 ? NO_OPS : ops, retired, context);\n\t\tif (this.#ending === \"frame\") {\n\t\t\tthis.#ending = \"none\";\n\t\t\tthis.endWatchesAfterDelivery();\n\t\t}\n\t}\n\n\t/** Whether nothing reaches its watches any more: ended by the runtime (what it gave delivered) or detached. */\n\tget #over(): boolean {\n\t\tconst { kind } = this.#state;\n\t\treturn (kind === \"ended\" && this.#ending === \"none\") || kind === \"detached\";\n\t}\n\n\t/**\n\t * A call of the runtime: before the attachment, queued; inside a running batch, applied there (after what was\n\t * queued); outside one, queued for one batch on the next microtask.\n\t */\n\t#advance(call: WatchCall<JsonValue>): void {\n\t\tconst { kind } = this.#state;\n\t\tif (kind === \"ended\" || kind === \"detached\") return;\n\t\tif (kind === \"attaching\" || !this.batch.running) {\n\t\t\tthis.#queued.push(call);\n\t\t\tif (kind === \"attached\") this.#schedule();\n\t\t\treturn;\n\t\t}\n\t\tthis.#applyQueued();\n\t\tthis.#apply(call);\n\t}\n\n\t/**\n\t * The runtime ended its observer (R4); its attempt is told. `ended` is final: what came before reaches the watches\n\t * first (the queued calls in their batch, a call of the running batch in its frame), then they end, the value\n\t * staying. A `failed` attempt detaches the source.\n\t */\n\t#end(end: WatchEnd): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"ended\" || state.kind === \"detached\") return;\n\t\tif (state.kind === \"attaching\") {\n\t\t\tif (state.end === undefined) this.#state = { kind: \"attaching\", end };\n\t\t\tthis.#owner.ended(end);\n\t\t\treturn;\n\t\t}\n\t\tif (end.kind === \"ended\") {\n\t\t\tthis.#state = { kind: \"ended\", detach: state.detach };\n\t\t\tif (this.#queued.length > 0 && !this.batch.running) this.#ending = \"queued\";\n\t\t\telse {\n\t\t\t\t// Inside a running batch the queued calls join it (none is queued outside one: they wait for their batch).\n\t\t\t\tthis.#applyQueued();\n\t\t\t\tthis.#endAfterFrame();\n\t\t\t}\n\t\t}\n\t\tthis.#owner.ended(end);\n\t}\n\n\t/** The watches end once this batch's frame reached them, at once when the source is in none. */\n\t#endAfterFrame(): void {\n\t\t// No frame to wait for (nothing watches it): the end is over now, and a later watch ends at once.\n\t\tthis.#ending = this.#listed ? \"frame\" : \"none\";\n\t\tif (!this.#listed) this.endWatchesAfterDelivery();\n\t}\n\n\t#schedule(): void {\n\t\tif (this.#scheduled) return;\n\t\tthis.#scheduled = true;\n\t\tthis.batch.soon(() => {\n\t\t\tthis.#scheduled = false;\n\t\t\tconst { kind } = this.#state;\n\t\t\tif (kind === \"attached\" || kind === \"ended\") this.#applyQueued();\n\t\t\tif (this.#ending === \"queued\") this.#endAfterFrame();\n\t\t}, this.#owner.context);\n\t}\n\n\t#applyQueued(): void {\n\t\tconst queued = this.#queued;\n\t\tif (queued.length === 0) return;\n\t\tthis.#queued = [];\n\t\tfor (const call of queued) this.#apply(call);\n\t}\n\n\t/** Applies one value call inside the running batch: the new value, its ops for the frame, the source marked once. */\n\t#apply(call: WatchCall<JsonValue>): void {\n\t\t// The runtime's failures are final: it ends its observer instead of sending one.\n\t\tif (call.kind !== \"value\") return;\n\t\tthis.#value = call.value;\n\t\tif (call.retired) this.#retired = true;\n\t\tif (!this.watched) {\n\t\t\tthis.changed();\n\t\t\tif (call.retired) this.retiredInBatch();\n\t\t\treturn;\n\t\t}\n\t\tfor (const op of call.ops) this.#ops.push(op);\n\t\tif (!this.#listed) {\n\t\t\tthis.#listed = true;\n\t\t\tthis.changed();\n\t\t}\n\t\tif (call.retired) this.retiredInBatch();\n\t}\n}\n"]}