@earendil-works/chord 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (820) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +79 -14
  3. package/dist/cell.d.ts +7 -7
  4. package/dist/cell.d.ts.map +1 -1
  5. package/dist/cell.js.map +1 -1
  6. package/dist/context/index.d.ts +1 -1
  7. package/dist/context/index.d.ts.map +1 -1
  8. package/dist/context/index.js +1 -1
  9. package/dist/context/index.js.map +1 -1
  10. package/dist/contract.d.ts +51 -52
  11. package/dist/contract.d.ts.map +1 -1
  12. package/dist/contract.js +19 -24
  13. package/dist/contract.js.map +1 -1
  14. package/dist/delta/apply-immutable-trusted.js +3 -4
  15. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  16. package/dist/delta/diff.d.ts.map +1 -1
  17. package/dist/delta/diff.js +5 -3
  18. package/dist/delta/diff.js.map +1 -1
  19. package/dist/delta/index.d.ts +9 -1
  20. package/dist/delta/index.d.ts.map +1 -1
  21. package/dist/delta/index.js +15 -11
  22. package/dist/delta/index.js.map +1 -1
  23. package/dist/delta/pending.d.ts +36 -0
  24. package/dist/delta/pending.d.ts.map +1 -0
  25. package/dist/delta/pending.js +143 -0
  26. package/dist/delta/pending.js.map +1 -0
  27. package/dist/delta/tracker.d.ts +12 -0
  28. package/dist/delta/tracker.d.ts.map +1 -1
  29. package/dist/delta/tracker.js +109 -39
  30. package/dist/delta/tracker.js.map +1 -1
  31. package/dist/host.d.ts.map +1 -1
  32. package/dist/host.js +9 -7
  33. package/dist/host.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/next/contracts/accepts.d.ts +81 -0
  39. package/dist/next/contracts/accepts.d.ts.map +1 -0
  40. package/dist/next/contracts/accepts.js +123 -0
  41. package/dist/next/contracts/accepts.js.map +1 -0
  42. package/dist/next/contracts/contract.d.ts +121 -0
  43. package/dist/next/contracts/contract.d.ts.map +1 -0
  44. package/dist/next/contracts/contract.js +50 -0
  45. package/dist/next/contracts/contract.js.map +1 -0
  46. package/dist/next/contracts/declare.d.ts +107 -0
  47. package/dist/next/contracts/declare.d.ts.map +1 -0
  48. package/dist/next/contracts/declare.js +136 -0
  49. package/dist/next/contracts/declare.js.map +1 -0
  50. package/dist/next/contracts/evolve.d.ts +92 -0
  51. package/dist/next/contracts/evolve.d.ts.map +1 -0
  52. package/dist/next/contracts/evolve.js +179 -0
  53. package/dist/next/contracts/evolve.js.map +1 -0
  54. package/dist/next/contracts/fingerprint.d.ts +16 -0
  55. package/dist/next/contracts/fingerprint.d.ts.map +1 -0
  56. package/dist/next/contracts/fingerprint.js +50 -0
  57. package/dist/next/contracts/fingerprint.js.map +1 -0
  58. package/dist/next/contracts/history.d.ts +71 -0
  59. package/dist/next/contracts/history.d.ts.map +1 -0
  60. package/dist/next/contracts/history.js +3 -0
  61. package/dist/next/contracts/history.js.map +1 -0
  62. package/dist/next/contracts/host-kind.d.ts +40 -0
  63. package/dist/next/contracts/host-kind.d.ts.map +1 -0
  64. package/dist/next/contracts/host-kind.js +37 -0
  65. package/dist/next/contracts/host-kind.js.map +1 -0
  66. package/dist/next/contracts/index.d.ts +7 -0
  67. package/dist/next/contracts/index.d.ts.map +1 -0
  68. package/dist/next/contracts/index.js +6 -0
  69. package/dist/next/contracts/index.js.map +1 -0
  70. package/dist/next/contracts/internal.d.ts +10 -0
  71. package/dist/next/contracts/internal.d.ts.map +1 -0
  72. package/dist/next/contracts/internal.js +9 -0
  73. package/dist/next/contracts/internal.js.map +1 -0
  74. package/dist/next/contracts/names.d.ts +3 -0
  75. package/dist/next/contracts/names.d.ts.map +1 -0
  76. package/dist/next/contracts/names.js +13 -0
  77. package/dist/next/contracts/names.js.map +1 -0
  78. package/dist/next/contracts/params.d.ts +28 -0
  79. package/dist/next/contracts/params.d.ts.map +1 -0
  80. package/dist/next/contracts/params.js +50 -0
  81. package/dist/next/contracts/params.js.map +1 -0
  82. package/dist/next/contracts/schema.d.ts +102 -0
  83. package/dist/next/contracts/schema.d.ts.map +1 -0
  84. package/dist/next/contracts/schema.js +103 -0
  85. package/dist/next/contracts/schema.js.map +1 -0
  86. package/dist/next/contracts/snapshot.d.ts +16 -0
  87. package/dist/next/contracts/snapshot.d.ts.map +1 -0
  88. package/dist/next/contracts/snapshot.js +167 -0
  89. package/dist/next/contracts/snapshot.js.map +1 -0
  90. package/dist/next/data/args.d.ts +50 -0
  91. package/dist/next/data/args.d.ts.map +1 -0
  92. package/dist/next/data/args.js +83 -0
  93. package/dist/next/data/args.js.map +1 -0
  94. package/dist/next/data/errors.d.ts +73 -0
  95. package/dist/next/data/errors.d.ts.map +1 -0
  96. package/dist/next/data/errors.js +107 -0
  97. package/dist/next/data/errors.js.map +1 -0
  98. package/dist/next/data/failure.d.ts +26 -0
  99. package/dist/next/data/failure.d.ts.map +1 -0
  100. package/dist/next/data/failure.js +72 -0
  101. package/dist/next/data/failure.js.map +1 -0
  102. package/dist/next/data/index.d.ts +4 -0
  103. package/dist/next/data/index.d.ts.map +1 -0
  104. package/dist/next/data/index.js +4 -0
  105. package/dist/next/data/index.js.map +1 -0
  106. package/dist/next/data/internal.d.ts +7 -0
  107. package/dist/next/data/internal.d.ts.map +1 -0
  108. package/dist/next/data/internal.js +8 -0
  109. package/dist/next/data/internal.js.map +1 -0
  110. package/dist/next/data/params.d.ts +20 -0
  111. package/dist/next/data/params.d.ts.map +1 -0
  112. package/dist/next/data/params.js +31 -0
  113. package/dist/next/data/params.js.map +1 -0
  114. package/dist/next/data/principal.d.ts +17 -0
  115. package/dist/next/data/principal.d.ts.map +1 -0
  116. package/dist/next/data/principal.js +41 -0
  117. package/dist/next/data/principal.js.map +1 -0
  118. package/dist/next/data/validator.d.ts +12 -0
  119. package/dist/next/data/validator.d.ts.map +1 -0
  120. package/dist/next/data/validator.js +34 -0
  121. package/dist/next/data/validator.js.map +1 -0
  122. package/dist/next/documents/address-source.d.ts +20 -0
  123. package/dist/next/documents/address-source.d.ts.map +1 -0
  124. package/dist/next/documents/address-source.js +44 -0
  125. package/dist/next/documents/address-source.js.map +1 -0
  126. package/dist/next/documents/definition.d.ts +84 -0
  127. package/dist/next/documents/definition.d.ts.map +1 -0
  128. package/dist/next/documents/definition.js +73 -0
  129. package/dist/next/documents/definition.js.map +1 -0
  130. package/dist/next/documents/documents.d.ts +106 -0
  131. package/dist/next/documents/documents.d.ts.map +1 -0
  132. package/dist/next/documents/documents.js +224 -0
  133. package/dist/next/documents/documents.js.map +1 -0
  134. package/dist/next/documents/fence.d.ts +9 -0
  135. package/dist/next/documents/fence.d.ts.map +1 -0
  136. package/dist/next/documents/fence.js +15 -0
  137. package/dist/next/documents/fence.js.map +1 -0
  138. package/dist/next/documents/handles.d.ts +76 -0
  139. package/dist/next/documents/handles.d.ts.map +1 -0
  140. package/dist/next/documents/handles.js +66 -0
  141. package/dist/next/documents/handles.js.map +1 -0
  142. package/dist/next/documents/index.d.ts +4 -0
  143. package/dist/next/documents/index.d.ts.map +1 -0
  144. package/dist/next/documents/index.js +3 -0
  145. package/dist/next/documents/index.js.map +1 -0
  146. package/dist/next/documents/internal.d.ts +9 -0
  147. package/dist/next/documents/internal.d.ts.map +1 -0
  148. package/dist/next/documents/internal.js +9 -0
  149. package/dist/next/documents/internal.js.map +1 -0
  150. package/dist/next/documents/keyed-slot.d.ts +103 -0
  151. package/dist/next/documents/keyed-slot.d.ts.map +1 -0
  152. package/dist/next/documents/keyed-slot.js +395 -0
  153. package/dist/next/documents/keyed-slot.js.map +1 -0
  154. package/dist/next/documents/line.d.ts +7 -0
  155. package/dist/next/documents/line.d.ts.map +1 -0
  156. package/dist/next/documents/line.js +14 -0
  157. package/dist/next/documents/line.js.map +1 -0
  158. package/dist/next/documents/persistence.d.ts +104 -0
  159. package/dist/next/documents/persistence.d.ts.map +1 -0
  160. package/dist/next/documents/persistence.js +128 -0
  161. package/dist/next/documents/persistence.js.map +1 -0
  162. package/dist/next/documents/residency.d.ts +31 -0
  163. package/dist/next/documents/residency.d.ts.map +1 -0
  164. package/dist/next/documents/residency.js +93 -0
  165. package/dist/next/documents/residency.js.map +1 -0
  166. package/dist/next/documents/slot.d.ts +109 -0
  167. package/dist/next/documents/slot.d.ts.map +1 -0
  168. package/dist/next/documents/slot.js +181 -0
  169. package/dist/next/documents/slot.js.map +1 -0
  170. package/dist/next/documents/transaction.d.ts +133 -0
  171. package/dist/next/documents/transaction.d.ts.map +1 -0
  172. package/dist/next/documents/transaction.js +409 -0
  173. package/dist/next/documents/transaction.js.map +1 -0
  174. package/dist/next/host/activity.d.ts +31 -0
  175. package/dist/next/host/activity.d.ts.map +1 -0
  176. package/dist/next/host/activity.js +40 -0
  177. package/dist/next/host/activity.js.map +1 -0
  178. package/dist/next/host/adapted.d.ts +49 -0
  179. package/dist/next/host/adapted.d.ts.map +1 -0
  180. package/dist/next/host/adapted.js +214 -0
  181. package/dist/next/host/adapted.js.map +1 -0
  182. package/dist/next/host/attempt.d.ts +278 -0
  183. package/dist/next/host/attempt.d.ts.map +1 -0
  184. package/dist/next/host/attempt.js +1072 -0
  185. package/dist/next/host/attempt.js.map +1 -0
  186. package/dist/next/host/backoff.d.ts +29 -0
  187. package/dist/next/host/backoff.d.ts.map +1 -0
  188. package/dist/next/host/backoff.js +69 -0
  189. package/dist/next/host/backoff.js.map +1 -0
  190. package/dist/next/host/ctx.d.ts +47 -0
  191. package/dist/next/host/ctx.d.ts.map +1 -0
  192. package/dist/next/host/ctx.js +108 -0
  193. package/dist/next/host/ctx.js.map +1 -0
  194. package/dist/next/host/deadline.d.ts +12 -0
  195. package/dist/next/host/deadline.d.ts.map +1 -0
  196. package/dist/next/host/deadline.js +40 -0
  197. package/dist/next/host/deadline.js.map +1 -0
  198. package/dist/next/host/dependencies.d.ts +65 -0
  199. package/dist/next/host/dependencies.d.ts.map +1 -0
  200. package/dist/next/host/dependencies.js +115 -0
  201. package/dist/next/host/dependencies.js.map +1 -0
  202. package/dist/next/host/destination.d.ts +48 -0
  203. package/dist/next/host/destination.d.ts.map +1 -0
  204. package/dist/next/host/destination.js +101 -0
  205. package/dist/next/host/destination.js.map +1 -0
  206. package/dist/next/host/facet.d.ts +79 -0
  207. package/dist/next/host/facet.d.ts.map +1 -0
  208. package/dist/next/host/facet.js +55 -0
  209. package/dist/next/host/facet.js.map +1 -0
  210. package/dist/next/host/follow.d.ts +52 -0
  211. package/dist/next/host/follow.d.ts.map +1 -0
  212. package/dist/next/host/follow.js +207 -0
  213. package/dist/next/host/follow.js.map +1 -0
  214. package/dist/next/host/host.d.ts +495 -0
  215. package/dist/next/host/host.d.ts.map +1 -0
  216. package/dist/next/host/host.js +1075 -0
  217. package/dist/next/host/host.js.map +1 -0
  218. package/dist/next/host/index.d.ts +17 -0
  219. package/dist/next/host/index.d.ts.map +1 -0
  220. package/dist/next/host/index.js +6 -0
  221. package/dist/next/host/index.js.map +1 -0
  222. package/dist/next/host/internal.d.ts +10 -0
  223. package/dist/next/host/internal.d.ts.map +1 -0
  224. package/dist/next/host/internal.js +8 -0
  225. package/dist/next/host/internal.js.map +1 -0
  226. package/dist/next/host/members.d.ts +50 -0
  227. package/dist/next/host/members.d.ts.map +1 -0
  228. package/dist/next/host/members.js +107 -0
  229. package/dist/next/host/members.js.map +1 -0
  230. package/dist/next/host/native.d.ts +55 -0
  231. package/dist/next/host/native.d.ts.map +1 -0
  232. package/dist/next/host/native.js +92 -0
  233. package/dist/next/host/native.js.map +1 -0
  234. package/dist/next/host/object.d.ts +290 -0
  235. package/dist/next/host/object.d.ts.map +1 -0
  236. package/dist/next/host/object.js +1127 -0
  237. package/dist/next/host/object.js.map +1 -0
  238. package/dist/next/host/parked.d.ts +23 -0
  239. package/dist/next/host/parked.d.ts.map +1 -0
  240. package/dist/next/host/parked.js +79 -0
  241. package/dist/next/host/parked.js.map +1 -0
  242. package/dist/next/host/presence.d.ts +34 -0
  243. package/dist/next/host/presence.d.ts.map +1 -0
  244. package/dist/next/host/presence.js +117 -0
  245. package/dist/next/host/presence.js.map +1 -0
  246. package/dist/next/host/ref-state.d.ts +53 -0
  247. package/dist/next/host/ref-state.d.ts.map +1 -0
  248. package/dist/next/host/ref-state.js +83 -0
  249. package/dist/next/host/ref-state.js.map +1 -0
  250. package/dist/next/host/reference-keys.d.ts +36 -0
  251. package/dist/next/host/reference-keys.d.ts.map +1 -0
  252. package/dist/next/host/reference-keys.js +168 -0
  253. package/dist/next/host/reference-keys.js.map +1 -0
  254. package/dist/next/host/reference-source.d.ts +65 -0
  255. package/dist/next/host/reference-source.d.ts.map +1 -0
  256. package/dist/next/host/reference-source.js +285 -0
  257. package/dist/next/host/reference-source.js.map +1 -0
  258. package/dist/next/host/reference.d.ts +308 -0
  259. package/dist/next/host/reference.d.ts.map +1 -0
  260. package/dist/next/host/reference.js +775 -0
  261. package/dist/next/host/reference.js.map +1 -0
  262. package/dist/next/host/retry-on.d.ts +28 -0
  263. package/dist/next/host/retry-on.d.ts.map +1 -0
  264. package/dist/next/host/retry-on.js +52 -0
  265. package/dist/next/host/retry-on.js.map +1 -0
  266. package/dist/next/host/revocation.d.ts +16 -0
  267. package/dist/next/host/revocation.d.ts.map +1 -0
  268. package/dist/next/host/revocation.js +27 -0
  269. package/dist/next/host/revocation.js.map +1 -0
  270. package/dist/next/host/root.d.ts +27 -0
  271. package/dist/next/host/root.d.ts.map +1 -0
  272. package/dist/next/host/root.js +68 -0
  273. package/dist/next/host/root.js.map +1 -0
  274. package/dist/next/host/route.d.ts +64 -0
  275. package/dist/next/host/route.d.ts.map +1 -0
  276. package/dist/next/host/route.js +190 -0
  277. package/dist/next/host/route.js.map +1 -0
  278. package/dist/next/host/routines.d.ts +76 -0
  279. package/dist/next/host/routines.d.ts.map +1 -0
  280. package/dist/next/host/routines.js +350 -0
  281. package/dist/next/host/routines.js.map +1 -0
  282. package/dist/next/host/sleep.d.ts +9 -0
  283. package/dist/next/host/sleep.d.ts.map +1 -0
  284. package/dist/next/host/sleep.js +40 -0
  285. package/dist/next/host/sleep.js.map +1 -0
  286. package/dist/next/host/staging.d.ts +94 -0
  287. package/dist/next/host/staging.d.ts.map +1 -0
  288. package/dist/next/host/staging.js +302 -0
  289. package/dist/next/host/staging.js.map +1 -0
  290. package/dist/next/host/unbound.d.ts +30 -0
  291. package/dist/next/host/unbound.d.ts.map +1 -0
  292. package/dist/next/host/unbound.js +67 -0
  293. package/dist/next/host/unbound.js.map +1 -0
  294. package/dist/next/host/uuid.d.ts +3 -0
  295. package/dist/next/host/uuid.d.ts.map +1 -0
  296. package/dist/next/host/uuid.js +38 -0
  297. package/dist/next/host/uuid.js.map +1 -0
  298. package/dist/next/index.d.ts +28 -0
  299. package/dist/next/index.d.ts.map +1 -0
  300. package/dist/next/index.js +18 -0
  301. package/dist/next/index.js.map +1 -0
  302. package/dist/next/jobs/definition.d.ts +96 -0
  303. package/dist/next/jobs/definition.d.ts.map +1 -0
  304. package/dist/next/jobs/definition.js +83 -0
  305. package/dist/next/jobs/definition.js.map +1 -0
  306. package/dist/next/jobs/index.d.ts +5 -0
  307. package/dist/next/jobs/index.d.ts.map +1 -0
  308. package/dist/next/jobs/index.js +3 -0
  309. package/dist/next/jobs/index.js.map +1 -0
  310. package/dist/next/jobs/internal.d.ts +3 -0
  311. package/dist/next/jobs/internal.d.ts.map +1 -0
  312. package/dist/next/jobs/internal.js +4 -0
  313. package/dist/next/jobs/internal.js.map +1 -0
  314. package/dist/next/jobs/job.d.ts +152 -0
  315. package/dist/next/jobs/job.d.ts.map +1 -0
  316. package/dist/next/jobs/job.js +320 -0
  317. package/dist/next/jobs/job.js.map +1 -0
  318. package/dist/next/jobs/persisted.d.ts +38 -0
  319. package/dist/next/jobs/persisted.d.ts.map +1 -0
  320. package/dist/next/jobs/persisted.js +95 -0
  321. package/dist/next/jobs/persisted.js.map +1 -0
  322. package/dist/next/jobs/records.d.ts +231 -0
  323. package/dist/next/jobs/records.d.ts.map +1 -0
  324. package/dist/next/jobs/records.js +869 -0
  325. package/dist/next/jobs/records.js.map +1 -0
  326. package/dist/next/jobs/run-states.d.ts +69 -0
  327. package/dist/next/jobs/run-states.d.ts.map +1 -0
  328. package/dist/next/jobs/run-states.js +228 -0
  329. package/dist/next/jobs/run-states.js.map +1 -0
  330. package/dist/next/jobs/run.d.ts +113 -0
  331. package/dist/next/jobs/run.d.ts.map +1 -0
  332. package/dist/next/jobs/run.js +200 -0
  333. package/dist/next/jobs/run.js.map +1 -0
  334. package/dist/next/jobs/running.d.ts +44 -0
  335. package/dist/next/jobs/running.d.ts.map +1 -0
  336. package/dist/next/jobs/running.js +117 -0
  337. package/dist/next/jobs/running.js.map +1 -0
  338. package/dist/next/jobs/stored.d.ts +63 -0
  339. package/dist/next/jobs/stored.d.ts.map +1 -0
  340. package/dist/next/jobs/stored.js +55 -0
  341. package/dist/next/jobs/stored.js.map +1 -0
  342. package/dist/next/link/binary.d.ts +4 -0
  343. package/dist/next/link/binary.d.ts.map +1 -0
  344. package/dist/next/link/binary.js +534 -0
  345. package/dist/next/link/binary.js.map +1 -0
  346. package/dist/next/link/channel.d.ts +63 -0
  347. package/dist/next/link/channel.d.ts.map +1 -0
  348. package/dist/next/link/channel.js +202 -0
  349. package/dist/next/link/channel.js.map +1 -0
  350. package/dist/next/link/errors.d.ts +7 -0
  351. package/dist/next/link/errors.d.ts.map +1 -0
  352. package/dist/next/link/errors.js +21 -0
  353. package/dist/next/link/errors.js.map +1 -0
  354. package/dist/next/link/index.d.ts +8 -0
  355. package/dist/next/link/index.d.ts.map +1 -0
  356. package/dist/next/link/index.js +8 -0
  357. package/dist/next/link/index.js.map +1 -0
  358. package/dist/next/link/internal.d.ts +9 -0
  359. package/dist/next/link/internal.d.ts.map +1 -0
  360. package/dist/next/link/internal.js +10 -0
  361. package/dist/next/link/internal.js.map +1 -0
  362. package/dist/next/link/ipc.d.ts +22 -0
  363. package/dist/next/link/ipc.d.ts.map +1 -0
  364. package/dist/next/link/ipc.js +64 -0
  365. package/dist/next/link/ipc.js.map +1 -0
  366. package/dist/next/link/link.d.ts +34 -0
  367. package/dist/next/link/link.d.ts.map +1 -0
  368. package/dist/next/link/link.js +87 -0
  369. package/dist/next/link/link.js.map +1 -0
  370. package/dist/next/link/message.d.ts +249 -0
  371. package/dist/next/link/message.d.ts.map +1 -0
  372. package/dist/next/link/message.js +123 -0
  373. package/dist/next/link/message.js.map +1 -0
  374. package/dist/next/link/part.d.ts +80 -0
  375. package/dist/next/link/part.d.ts.map +1 -0
  376. package/dist/next/link/part.js +164 -0
  377. package/dist/next/link/part.js.map +1 -0
  378. package/dist/next/link/text.d.ts +6 -0
  379. package/dist/next/link/text.d.ts.map +1 -0
  380. package/dist/next/link/text.js +335 -0
  381. package/dist/next/link/text.js.map +1 -0
  382. package/dist/next/link/values.d.ts +40 -0
  383. package/dist/next/link/values.d.ts.map +1 -0
  384. package/dist/next/link/values.js +117 -0
  385. package/dist/next/link/values.js.map +1 -0
  386. package/dist/next/link/websocket.d.ts +26 -0
  387. package/dist/next/link/websocket.d.ts.map +1 -0
  388. package/dist/next/link/websocket.js +91 -0
  389. package/dist/next/link/websocket.js.map +1 -0
  390. package/dist/next/registries/contribution.d.ts +50 -0
  391. package/dist/next/registries/contribution.d.ts.map +1 -0
  392. package/dist/next/registries/contribution.js +129 -0
  393. package/dist/next/registries/contribution.js.map +1 -0
  394. package/dist/next/registries/entries.d.ts +18 -0
  395. package/dist/next/registries/entries.d.ts.map +1 -0
  396. package/dist/next/registries/entries.js +42 -0
  397. package/dist/next/registries/entries.js.map +1 -0
  398. package/dist/next/registries/index.d.ts +3 -0
  399. package/dist/next/registries/index.d.ts.map +1 -0
  400. package/dist/next/registries/index.js +5 -0
  401. package/dist/next/registries/index.js.map +1 -0
  402. package/dist/next/registries/internal.d.ts +4 -0
  403. package/dist/next/registries/internal.d.ts.map +1 -0
  404. package/dist/next/registries/internal.js +5 -0
  405. package/dist/next/registries/internal.js.map +1 -0
  406. package/dist/next/registries/record.d.ts +94 -0
  407. package/dist/next/registries/record.d.ts.map +1 -0
  408. package/dist/next/registries/record.js +253 -0
  409. package/dist/next/registries/record.js.map +1 -0
  410. package/dist/next/registries/registry.d.ts +74 -0
  411. package/dist/next/registries/registry.d.ts.map +1 -0
  412. package/dist/next/registries/registry.js +14 -0
  413. package/dist/next/registries/registry.js.map +1 -0
  414. package/dist/next/registries/value.d.ts +48 -0
  415. package/dist/next/registries/value.d.ts.map +1 -0
  416. package/dist/next/registries/value.js +199 -0
  417. package/dist/next/registries/value.js.map +1 -0
  418. package/dist/next/remote/calls.d.ts +25 -0
  419. package/dist/next/remote/calls.d.ts.map +1 -0
  420. package/dist/next/remote/calls.js +62 -0
  421. package/dist/next/remote/calls.js.map +1 -0
  422. package/dist/next/remote/consumer.d.ts +42 -0
  423. package/dist/next/remote/consumer.d.ts.map +1 -0
  424. package/dist/next/remote/consumer.js +343 -0
  425. package/dist/next/remote/consumer.js.map +1 -0
  426. package/dist/next/remote/hold.d.ts +130 -0
  427. package/dist/next/remote/hold.d.ts.map +1 -0
  428. package/dist/next/remote/hold.js +537 -0
  429. package/dist/next/remote/hold.js.map +1 -0
  430. package/dist/next/remote/host-link.d.ts +77 -0
  431. package/dist/next/remote/host-link.d.ts.map +1 -0
  432. package/dist/next/remote/host-link.js +182 -0
  433. package/dist/next/remote/host-link.js.map +1 -0
  434. package/dist/next/remote/internal.d.ts +6 -0
  435. package/dist/next/remote/internal.d.ts.map +1 -0
  436. package/dist/next/remote/internal.js +6 -0
  437. package/dist/next/remote/internal.js.map +1 -0
  438. package/dist/next/remote/path.d.ts +46 -0
  439. package/dist/next/remote/path.d.ts.map +1 -0
  440. package/dist/next/remote/path.js +73 -0
  441. package/dist/next/remote/path.js.map +1 -0
  442. package/dist/next/remote/provider.d.ts +76 -0
  443. package/dist/next/remote/provider.d.ts.map +1 -0
  444. package/dist/next/remote/provider.js +506 -0
  445. package/dist/next/remote/provider.js.map +1 -0
  446. package/dist/next/remote/relay.d.ts +58 -0
  447. package/dist/next/remote/relay.d.ts.map +1 -0
  448. package/dist/next/remote/relay.js +117 -0
  449. package/dist/next/remote/relay.js.map +1 -0
  450. package/dist/next/remote/remote-object.d.ts +133 -0
  451. package/dist/next/remote/remote-object.d.ts.map +1 -0
  452. package/dist/next/remote/remote-object.js +411 -0
  453. package/dist/next/remote/remote-object.js.map +1 -0
  454. package/dist/next/remote/replica.d.ts +59 -0
  455. package/dist/next/remote/replica.d.ts.map +1 -0
  456. package/dist/next/remote/replica.js +125 -0
  457. package/dist/next/remote/replica.js.map +1 -0
  458. package/dist/next/state/batch.d.ts +64 -0
  459. package/dist/next/state/batch.d.ts.map +1 -0
  460. package/dist/next/state/batch.js +163 -0
  461. package/dist/next/state/batch.js.map +1 -0
  462. package/dist/next/state/derive.d.ts +52 -0
  463. package/dist/next/state/derive.d.ts.map +1 -0
  464. package/dist/next/state/derive.js +182 -0
  465. package/dist/next/state/derive.js.map +1 -0
  466. package/dist/next/state/index.d.ts +6 -0
  467. package/dist/next/state/index.d.ts.map +1 -0
  468. package/dist/next/state/index.js +4 -0
  469. package/dist/next/state/index.js.map +1 -0
  470. package/dist/next/state/internal.d.ts +6 -0
  471. package/dist/next/state/internal.d.ts.map +1 -0
  472. package/dist/next/state/internal.js +8 -0
  473. package/dist/next/state/internal.js.map +1 -0
  474. package/dist/next/state/native-source.d.ts +106 -0
  475. package/dist/next/state/native-source.d.ts.map +1 -0
  476. package/dist/next/state/native-source.js +240 -0
  477. package/dist/next/state/native-source.js.map +1 -0
  478. package/dist/next/state/watchable.d.ts +114 -0
  479. package/dist/next/state/watchable.d.ts.map +1 -0
  480. package/dist/next/state/watchable.js +156 -0
  481. package/dist/next/state/watchable.js.map +1 -0
  482. package/dist/next/state/writable.d.ts +32 -0
  483. package/dist/next/state/writable.d.ts.map +1 -0
  484. package/dist/next/state/writable.js +49 -0
  485. package/dist/next/state/writable.js.map +1 -0
  486. package/dist/next/store/adapter.d.ts +67 -0
  487. package/dist/next/store/adapter.d.ts.map +1 -0
  488. package/dist/next/store/adapter.js +118 -0
  489. package/dist/next/store/adapter.js.map +1 -0
  490. package/dist/next/store/allocator.d.ts +17 -0
  491. package/dist/next/store/allocator.d.ts.map +1 -0
  492. package/dist/next/store/allocator.js +30 -0
  493. package/dist/next/store/allocator.js.map +1 -0
  494. package/dist/next/store/applier.d.ts +8 -0
  495. package/dist/next/store/applier.d.ts.map +1 -0
  496. package/dist/next/store/applier.js +375 -0
  497. package/dist/next/store/applier.js.map +1 -0
  498. package/dist/next/store/apply-batch.d.ts +12 -0
  499. package/dist/next/store/apply-batch.d.ts.map +1 -0
  500. package/dist/next/store/apply-batch.js +83 -0
  501. package/dist/next/store/apply-batch.js.map +1 -0
  502. package/dist/next/store/archive.d.ts +32 -0
  503. package/dist/next/store/archive.d.ts.map +1 -0
  504. package/dist/next/store/archive.js +129 -0
  505. package/dist/next/store/archive.js.map +1 -0
  506. package/dist/next/store/backend.d.ts +10 -0
  507. package/dist/next/store/backend.d.ts.map +1 -0
  508. package/dist/next/store/backend.js +15 -0
  509. package/dist/next/store/backend.js.map +1 -0
  510. package/dist/next/store/catalog.d.ts +24 -0
  511. package/dist/next/store/catalog.d.ts.map +1 -0
  512. package/dist/next/store/catalog.js +17 -0
  513. package/dist/next/store/catalog.js.map +1 -0
  514. package/dist/next/store/claims.d.ts +23 -0
  515. package/dist/next/store/claims.d.ts.map +1 -0
  516. package/dist/next/store/claims.js +65 -0
  517. package/dist/next/store/claims.js.map +1 -0
  518. package/dist/next/store/columns.d.ts +77 -0
  519. package/dist/next/store/columns.d.ts.map +1 -0
  520. package/dist/next/store/columns.js +77 -0
  521. package/dist/next/store/columns.js.map +1 -0
  522. package/dist/next/store/engine.d.ts +176 -0
  523. package/dist/next/store/engine.d.ts.map +1 -0
  524. package/dist/next/store/engine.js +283 -0
  525. package/dist/next/store/engine.js.map +1 -0
  526. package/dist/next/store/evaluate.d.ts +17 -0
  527. package/dist/next/store/evaluate.d.ts.map +1 -0
  528. package/dist/next/store/evaluate.js +128 -0
  529. package/dist/next/store/evaluate.js.map +1 -0
  530. package/dist/next/store/export.d.ts +17 -0
  531. package/dist/next/store/export.d.ts.map +1 -0
  532. package/dist/next/store/export.js +200 -0
  533. package/dist/next/store/export.js.map +1 -0
  534. package/dist/next/store/expression.d.ts +150 -0
  535. package/dist/next/store/expression.d.ts.map +1 -0
  536. package/dist/next/store/expression.js +268 -0
  537. package/dist/next/store/expression.js.map +1 -0
  538. package/dist/next/store/import.d.ts +10 -0
  539. package/dist/next/store/import.d.ts.map +1 -0
  540. package/dist/next/store/import.js +276 -0
  541. package/dist/next/store/import.js.map +1 -0
  542. package/dist/next/store/index.d.ts +16 -0
  543. package/dist/next/store/index.d.ts.map +1 -0
  544. package/dist/next/store/index.js +13 -0
  545. package/dist/next/store/index.js.map +1 -0
  546. package/dist/next/store/json-column.d.ts +33 -0
  547. package/dist/next/store/json-column.d.ts.map +1 -0
  548. package/dist/next/store/json-column.js +61 -0
  549. package/dist/next/store/json-column.js.map +1 -0
  550. package/dist/next/store/jsonl.d.ts +9 -0
  551. package/dist/next/store/jsonl.d.ts.map +1 -0
  552. package/dist/next/store/jsonl.js +61 -0
  553. package/dist/next/store/jsonl.js.map +1 -0
  554. package/dist/next/store/outbox.d.ts +26 -0
  555. package/dist/next/store/outbox.d.ts.map +1 -0
  556. package/dist/next/store/outbox.js +80 -0
  557. package/dist/next/store/outbox.js.map +1 -0
  558. package/dist/next/store/query.d.ts +39 -0
  559. package/dist/next/store/query.d.ts.map +1 -0
  560. package/dist/next/store/query.js +97 -0
  561. package/dist/next/store/query.js.map +1 -0
  562. package/dist/next/store/refusal.d.ts +15 -0
  563. package/dist/next/store/refusal.d.ts.map +1 -0
  564. package/dist/next/store/refusal.js +36 -0
  565. package/dist/next/store/refusal.js.map +1 -0
  566. package/dist/next/store/rows.d.ts +80 -0
  567. package/dist/next/store/rows.d.ts.map +1 -0
  568. package/dist/next/store/rows.js +183 -0
  569. package/dist/next/store/rows.js.map +1 -0
  570. package/dist/next/store/schema.d.ts +25 -0
  571. package/dist/next/store/schema.d.ts.map +1 -0
  572. package/dist/next/store/schema.js +115 -0
  573. package/dist/next/store/schema.js.map +1 -0
  574. package/dist/next/store/sql.d.ts +73 -0
  575. package/dist/next/store/sql.d.ts.map +1 -0
  576. package/dist/next/store/sql.js +234 -0
  577. package/dist/next/store/sql.js.map +1 -0
  578. package/dist/next/store/step.d.ts +48 -0
  579. package/dist/next/store/step.d.ts.map +1 -0
  580. package/dist/next/store/step.js +50 -0
  581. package/dist/next/store/step.js.map +1 -0
  582. package/dist/next/store/store.d.ts +161 -0
  583. package/dist/next/store/store.d.ts.map +1 -0
  584. package/dist/next/store/store.js +627 -0
  585. package/dist/next/store/store.js.map +1 -0
  586. package/dist/next/store/table-changes.d.ts +29 -0
  587. package/dist/next/store/table-changes.d.ts.map +1 -0
  588. package/dist/next/store/table-changes.js +102 -0
  589. package/dist/next/store/table-changes.js.map +1 -0
  590. package/dist/next/store/table-evolve.d.ts +74 -0
  591. package/dist/next/store/table-evolve.d.ts.map +1 -0
  592. package/dist/next/store/table-evolve.js +201 -0
  593. package/dist/next/store/table-evolve.js.map +1 -0
  594. package/dist/next/store/table-handle.d.ts +67 -0
  595. package/dist/next/store/table-handle.d.ts.map +1 -0
  596. package/dist/next/store/table-handle.js +101 -0
  597. package/dist/next/store/table-handle.js.map +1 -0
  598. package/dist/next/store/table-history.d.ts +75 -0
  599. package/dist/next/store/table-history.d.ts.map +1 -0
  600. package/dist/next/store/table-history.js +42 -0
  601. package/dist/next/store/table-history.js.map +1 -0
  602. package/dist/next/store/table-migration.d.ts +16 -0
  603. package/dist/next/store/table-migration.d.ts.map +1 -0
  604. package/dist/next/store/table-migration.js +202 -0
  605. package/dist/next/store/table-migration.js.map +1 -0
  606. package/dist/next/store/table-writes.d.ts +125 -0
  607. package/dist/next/store/table-writes.d.ts.map +1 -0
  608. package/dist/next/store/table-writes.js +165 -0
  609. package/dist/next/store/table-writes.js.map +1 -0
  610. package/dist/next/store/table.d.ts +80 -0
  611. package/dist/next/store/table.d.ts.map +1 -0
  612. package/dist/next/store/table.js +103 -0
  613. package/dist/next/store/table.js.map +1 -0
  614. package/dist/next/store/text.d.ts +14 -0
  615. package/dist/next/store/text.d.ts.map +1 -0
  616. package/dist/next/store/text.js +51 -0
  617. package/dist/next/store/text.js.map +1 -0
  618. package/dist/next/store/writes.d.ts +5 -0
  619. package/dist/next/store/writes.d.ts.map +1 -0
  620. package/dist/next/store/writes.js +4 -0
  621. package/dist/next/store/writes.js.map +1 -0
  622. package/dist/next-node/compression.d.ts +7 -0
  623. package/dist/next-node/compression.d.ts.map +1 -0
  624. package/dist/next-node/compression.js +24 -0
  625. package/dist/next-node/compression.js.map +1 -0
  626. package/dist/next-node/http/admission.d.ts +63 -0
  627. package/dist/next-node/http/admission.d.ts.map +1 -0
  628. package/dist/next-node/http/admission.js +134 -0
  629. package/dist/next-node/http/admission.js.map +1 -0
  630. package/dist/next-node/http/authenticate.d.ts +21 -0
  631. package/dist/next-node/http/authenticate.d.ts.map +1 -0
  632. package/dist/next-node/http/authenticate.js +34 -0
  633. package/dist/next-node/http/authenticate.js.map +1 -0
  634. package/dist/next-node/http/cookies.d.ts +24 -0
  635. package/dist/next-node/http/cookies.d.ts.map +1 -0
  636. package/dist/next-node/http/cookies.js +62 -0
  637. package/dist/next-node/http/cookies.js.map +1 -0
  638. package/dist/next-node/http/file.d.ts +23 -0
  639. package/dist/next-node/http/file.d.ts.map +1 -0
  640. package/dist/next-node/http/file.js +94 -0
  641. package/dist/next-node/http/file.js.map +1 -0
  642. package/dist/next-node/http/headers.d.ts +37 -0
  643. package/dist/next-node/http/headers.d.ts.map +1 -0
  644. package/dist/next-node/http/headers.js +129 -0
  645. package/dist/next-node/http/headers.js.map +1 -0
  646. package/dist/next-node/http/http.d.ts +100 -0
  647. package/dist/next-node/http/http.d.ts.map +1 -0
  648. package/dist/next-node/http/http.js +462 -0
  649. package/dist/next-node/http/http.js.map +1 -0
  650. package/dist/next-node/http/incoming.d.ts +19 -0
  651. package/dist/next-node/http/incoming.d.ts.map +1 -0
  652. package/dist/next-node/http/incoming.js +31 -0
  653. package/dist/next-node/http/incoming.js.map +1 -0
  654. package/dist/next-node/http/index.d.ts +11 -0
  655. package/dist/next-node/http/index.d.ts.map +1 -0
  656. package/dist/next-node/http/index.js +12 -0
  657. package/dist/next-node/http/index.js.map +1 -0
  658. package/dist/next-node/http/node.d.ts +78 -0
  659. package/dist/next-node/http/node.d.ts.map +1 -0
  660. package/dist/next-node/http/node.js +291 -0
  661. package/dist/next-node/http/node.js.map +1 -0
  662. package/dist/next-node/http/request.d.ts +54 -0
  663. package/dist/next-node/http/request.d.ts.map +1 -0
  664. package/dist/next-node/http/request.js +116 -0
  665. package/dist/next-node/http/request.js.map +1 -0
  666. package/dist/next-node/http/response.d.ts +63 -0
  667. package/dist/next-node/http/response.d.ts.map +1 -0
  668. package/dist/next-node/http/response.js +202 -0
  669. package/dist/next-node/http/response.js.map +1 -0
  670. package/dist/next-node/http/router.d.ts +114 -0
  671. package/dist/next-node/http/router.d.ts.map +1 -0
  672. package/dist/next-node/http/router.js +261 -0
  673. package/dist/next-node/http/router.js.map +1 -0
  674. package/dist/next-node/http/upgrades.d.ts +58 -0
  675. package/dist/next-node/http/upgrades.d.ts.map +1 -0
  676. package/dist/next-node/http/upgrades.js +184 -0
  677. package/dist/next-node/http/upgrades.js.map +1 -0
  678. package/dist/next-node/plugins/build.d.ts +57 -0
  679. package/dist/next-node/plugins/build.d.ts.map +1 -0
  680. package/dist/next-node/plugins/build.js +334 -0
  681. package/dist/next-node/plugins/build.js.map +1 -0
  682. package/dist/next-node/plugins/discover.d.ts +36 -0
  683. package/dist/next-node/plugins/discover.d.ts.map +1 -0
  684. package/dist/next-node/plugins/discover.js +91 -0
  685. package/dist/next-node/plugins/discover.js.map +1 -0
  686. package/dist/next-node/plugins/evaluate.d.ts +33 -0
  687. package/dist/next-node/plugins/evaluate.d.ts.map +1 -0
  688. package/dist/next-node/plugins/evaluate.js +98 -0
  689. package/dist/next-node/plugins/evaluate.js.map +1 -0
  690. package/dist/next-node/plugins/index.d.ts +9 -0
  691. package/dist/next-node/plugins/index.d.ts.map +1 -0
  692. package/dist/next-node/plugins/index.js +11 -0
  693. package/dist/next-node/plugins/index.js.map +1 -0
  694. package/dist/next-node/plugins/install.d.ts +13 -0
  695. package/dist/next-node/plugins/install.d.ts.map +1 -0
  696. package/dist/next-node/plugins/install.js +37 -0
  697. package/dist/next-node/plugins/install.js.map +1 -0
  698. package/dist/next-node/plugins/plugins.d.ts +135 -0
  699. package/dist/next-node/plugins/plugins.d.ts.map +1 -0
  700. package/dist/next-node/plugins/plugins.js +206 -0
  701. package/dist/next-node/plugins/plugins.js.map +1 -0
  702. package/dist/next-node/plugins/runtime.d.ts +41 -0
  703. package/dist/next-node/plugins/runtime.d.ts.map +1 -0
  704. package/dist/next-node/plugins/runtime.js +136 -0
  705. package/dist/next-node/plugins/runtime.js.map +1 -0
  706. package/dist/next-node/plugins/stack.d.ts +16 -0
  707. package/dist/next-node/plugins/stack.d.ts.map +1 -0
  708. package/dist/next-node/plugins/stack.js +61 -0
  709. package/dist/next-node/plugins/stack.js.map +1 -0
  710. package/dist/next-node/plugins/watcher.d.ts +58 -0
  711. package/dist/next-node/plugins/watcher.d.ts.map +1 -0
  712. package/dist/next-node/plugins/watcher.js +281 -0
  713. package/dist/next-node/plugins/watcher.js.map +1 -0
  714. package/dist/next-node/workers/control.d.ts +83 -0
  715. package/dist/next-node/workers/control.d.ts.map +1 -0
  716. package/dist/next-node/workers/control.js +77 -0
  717. package/dist/next-node/workers/control.js.map +1 -0
  718. package/dist/next-node/workers/index.d.ts +5 -0
  719. package/dist/next-node/workers/index.d.ts.map +1 -0
  720. package/dist/next-node/workers/index.js +7 -0
  721. package/dist/next-node/workers/index.js.map +1 -0
  722. package/dist/next-node/workers/lock.d.ts +21 -0
  723. package/dist/next-node/workers/lock.d.ts.map +1 -0
  724. package/dist/next-node/workers/lock.js +137 -0
  725. package/dist/next-node/workers/lock.js.map +1 -0
  726. package/dist/next-node/workers/main.d.ts +46 -0
  727. package/dist/next-node/workers/main.d.ts.map +1 -0
  728. package/dist/next-node/workers/main.js +230 -0
  729. package/dist/next-node/workers/main.js.map +1 -0
  730. package/dist/next-node/workers/process.d.ts +42 -0
  731. package/dist/next-node/workers/process.d.ts.map +1 -0
  732. package/dist/next-node/workers/process.js +125 -0
  733. package/dist/next-node/workers/process.js.map +1 -0
  734. package/dist/next-node/workers/workers.d.ts +80 -0
  735. package/dist/next-node/workers/workers.d.ts.map +1 -0
  736. package/dist/next-node/workers/workers.js +572 -0
  737. package/dist/next-node/workers/workers.js.map +1 -0
  738. package/dist/object.d.ts +4 -4
  739. package/dist/object.d.ts.map +1 -1
  740. package/dist/object.js +3 -4
  741. package/dist/object.js.map +1 -1
  742. package/dist/output.d.ts +1 -1
  743. package/dist/output.d.ts.map +1 -1
  744. package/dist/output.js +4 -2
  745. package/dist/output.js.map +1 -1
  746. package/dist/remote.d.ts.map +1 -1
  747. package/dist/remote.js +2 -2
  748. package/dist/remote.js.map +1 -1
  749. package/dist/schema.d.ts +8 -4
  750. package/dist/schema.d.ts.map +1 -1
  751. package/dist/schema.js +180 -5
  752. package/dist/schema.js.map +1 -1
  753. package/dist/sqlite/cloudflare.d.ts +2 -0
  754. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  755. package/dist/sqlite/cloudflare.js +10 -0
  756. package/dist/sqlite/cloudflare.js.map +1 -1
  757. package/dist/sqlite/database.d.ts +5 -2
  758. package/dist/sqlite/database.d.ts.map +1 -1
  759. package/dist/sqlite/database.js.map +1 -1
  760. package/dist/sqlite/node.d.ts +4 -1
  761. package/dist/sqlite/node.d.ts.map +1 -1
  762. package/dist/sqlite/node.js +22 -5
  763. package/dist/sqlite/node.js.map +1 -1
  764. package/dist/watch.d.ts +194 -0
  765. package/dist/watch.d.ts.map +1 -0
  766. package/dist/watch.js +383 -0
  767. package/dist/watch.js.map +1 -0
  768. package/dist/wire.d.ts +174 -193
  769. package/dist/wire.d.ts.map +1 -1
  770. package/dist/wire.js +81 -80
  771. package/dist/wire.js.map +1 -1
  772. package/docs/guide.md +15 -15
  773. package/docs/next/benchmarks.md +959 -0
  774. package/docs/next/decisions.md +2957 -0
  775. package/docs/next/dependencies/book.md +1671 -0
  776. package/docs/next/dependencies/index.html +2641 -0
  777. package/docs/next/dependencies/model.md +330 -0
  778. package/docs/next/design.md +2554 -0
  779. package/docs/next/durable-observers/book.md +432 -0
  780. package/docs/next/durable-observers/index.html +517 -0
  781. package/docs/next/flow-control/book.md +333 -0
  782. package/docs/next/flow-control/fold/index.html +265 -0
  783. package/docs/next/flow-control/index.html +548 -0
  784. package/docs/next/flow-control/window/index.html +228 -0
  785. package/docs/next/guide-plugins-hosts/book.md +607 -0
  786. package/docs/next/guide-plugins-hosts/index.html +652 -0
  787. package/docs/next/http-workers/book.md +378 -0
  788. package/docs/next/http-workers/index.html +515 -0
  789. package/docs/next/layer-1.md +311 -0
  790. package/docs/next/layer-2.md +216 -0
  791. package/docs/next/plugin-model/book.md +186 -0
  792. package/docs/next/plugin-model/index.html +310 -0
  793. package/docs/next/plugin-primer/book.md +273 -0
  794. package/docs/next/plugin-primer/index.html +430 -0
  795. package/docs/next/slice-1.md +236 -0
  796. package/docs/next/slice-10.md +285 -0
  797. package/docs/next/slice-11.md +93 -0
  798. package/docs/next/slice-2.md +174 -0
  799. package/docs/next/slice-3a.md +296 -0
  800. package/docs/next/slice-3b.md +197 -0
  801. package/docs/next/slice-4.md +146 -0
  802. package/docs/next/slice-4a.md +418 -0
  803. package/docs/next/slice-4b.md +208 -0
  804. package/docs/next/slice-5.md +281 -0
  805. package/docs/next/slice-6a.md +676 -0
  806. package/docs/next/slice-6b.md +332 -0
  807. package/docs/next/slice-7a.md +130 -0
  808. package/docs/next/slice-7b/book.md +608 -0
  809. package/docs/next/slice-7b/index.html +842 -0
  810. package/docs/next/slice-7b.md +255 -0
  811. package/docs/next/slice-7c.md +165 -0
  812. package/docs/next/slice-8.md +194 -0
  813. package/docs/next/slices.md +230 -0
  814. package/docs/next/store/book.md +665 -0
  815. package/docs/next/store/index.html +861 -0
  816. package/docs/next/store/walkthrough.md +193 -0
  817. package/docs/spec.md +9 -9
  818. package/docs/tutorial.md +26 -25
  819. package/package.json +22 -6
  820. package/src/delta/README.md +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../src/next/link/binary.ts"],"names":[],"mappings":"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","sourcesContent":["// The binary codec (2b): a kind byte (its high bit set when an origin follows as a varint), then the kind's fields as\n// unsigned varints, length-prefixed UTF-8 strings, raw incarnation (16 bytes) and fingerprint (8 bytes), parts as\n// length-prefixed bytes whose prefix also says whether the part is deflated (decoded as views of the message, never\n// parsed or inflated here), and byte segments only beside payloads marked as carrying bytes. No outer length: links\n// deliver whole messages.\n\nimport {\n\ttype BoundEntry,\n\tCAUSE_KINDS,\n\ttype Codec,\n\ttype FailedMember,\n\ttype Message,\n\tNO_RETIRED,\n\ttype StateEntry,\n} from \"./message.ts\";\nimport { DeflatedPart, type Part } from \"./part.ts\";\nimport { parseJson, readUtf8 } from \"./values.ts\";\n\nconst UTF8 = new TextEncoder();\n\n/** Kinds by their byte. */\nconst KINDS = [\n\t\"hello\",\n\t\"hold\",\n\t\"release\",\n\t\"call\",\n\t\"abort\",\n\t\"bound\",\n\t\"state\",\n\t\"failed\",\n\t\"result\",\n\t\"error\",\n\t\"gone\",\n\t\"retry\",\n\t\"loading\",\n\t\"ack\",\n\t\"closed\",\n\t\"ping\",\n\t\"pong\",\n\t\"revoke\",\n] as const;\n\nconst KIND_BYTES = new Map<string, number>(KINDS.map((kind, byte) => [kind, byte]));\n\n/** The kind byte's flag for an origin. */\nconst ORIGIN = 0x80;\n\n/** A payload's flags: present, and carrying byte segments. */\nconst PRESENT = 1;\n\nconst SEGMENTS = 2;\n\n/** A hold's optional fields, one bit each. */\nconst PRINCIPAL = 1;\n\nconst INCARNATION = 2;\n\nconst CHAIN = 4;\n\nconst LIMIT = 8;\n\n/** A part's length prefix is its length doubled, plus one when the part is deflated. */\nconst DEFLATED = 1;\n\n/** Messages as bytes; the default codec of every link. */\nexport const binaryCodec: Codec = {\n\tname: \"binary\",\n\tencode(message) {\n\t\tconst writer = new Writer();\n\t\tconst origin = \"origin\" in message ? message.origin : undefined;\n\t\tif (origin === undefined) {\n\t\t\twriter.byte(KIND_BYTES.get(message.kind)!);\n\t\t} else {\n\t\t\twriter.byte(KIND_BYTES.get(message.kind)! | ORIGIN);\n\t\t\twriter.varint(origin);\n\t\t}\n\t\tencodeFields(message, writer);\n\t\treturn writer.finish();\n\t},\n\tdecode(bytes) {\n\t\tconst reader = new Reader(bytes);\n\t\tconst byte = reader.byte();\n\t\tconst origin = byte & ORIGIN ? reader.varint() : undefined;\n\t\tconst kind = KINDS[byte & ~ORIGIN];\n\t\tif (kind === undefined) throw new Error(\"binary: an unknown kind\");\n\t\tconst message = decodeFields(kind, reader);\n\t\treader.end();\n\t\t// A fresh object; the message schema refuses an origin on a kind without one.\n\t\tif (origin !== undefined) (message as { origin?: number }).origin = origin;\n\t\treturn message;\n\t},\n};\n\nfunction encodeFields(message: Message, writer: Writer): void {\n\tswitch (message.kind) {\n\t\tcase \"hello\":\n\t\t\twriter.varint(message.protocol);\n\t\t\twriter.raw(hex(message.incarnation.replaceAll(\"-\", \"\"), 16));\n\t\t\twriter.varint(message.calls);\n\t\t\treturn;\n\t\tcase \"hold\": {\n\t\t\twriter.varint(message.hold);\n\t\t\twriter.string(message.type);\n\t\t\twriter.varint(message.version);\n\t\t\twriter.raw(hex(message.fingerprint, 8));\n\t\t\twriter.part(message.params);\n\t\t\tconst { address, principal, incarnation, chain, limit } = message;\n\t\t\twriter.string(address.kind);\n\t\t\twriter.json(address.params);\n\t\t\twriter.byte(\n\t\t\t\t(principal === undefined ? 0 : PRINCIPAL) |\n\t\t\t\t\t(incarnation === undefined ? 0 : INCARNATION) |\n\t\t\t\t\t(chain === undefined ? 0 : CHAIN) |\n\t\t\t\t\t(limit === undefined ? 0 : LIMIT),\n\t\t\t);\n\t\t\tif (principal !== undefined) writer.json(principal);\n\t\t\tif (incarnation !== undefined) writer.raw(hex(incarnation.replaceAll(\"-\", \"\"), 16));\n\t\t\tif (chain !== undefined) {\n\t\t\t\twriter.varint(chain.length);\n\t\t\t\tfor (const instance of chain) writer.raw(hex(instance.replaceAll(\"-\", \"\"), 16));\n\t\t\t}\n\t\t\tif (limit !== undefined) writer.varint(limit);\n\t\t\treturn;\n\t\t}\n\t\tcase \"release\":\n\t\tcase \"loading\":\n\t\t\twriter.varint(message.hold);\n\t\t\treturn;\n\t\tcase \"retry\":\n\t\t\twriter.varint(message.hold);\n\t\t\twriter.varint(message.hops);\n\t\t\treturn;\n\t\tcase \"call\":\n\t\t\twriter.varint(message.call);\n\t\t\twriter.varint(message.hold);\n\t\t\twriter.varint(message.method);\n\t\t\twriter.payload(message.args, message.segments);\n\t\t\treturn;\n\t\tcase \"abort\":\n\t\t\twriter.varint(message.call);\n\t\t\treturn;\n\t\tcase \"bound\":\n\t\t\twriter.varint(message.holds.length);\n\t\t\tfor (const { hold, variant, members, failed } of message.holds) {\n\t\t\t\twriter.varint(hold);\n\t\t\t\twriter.varint(variant);\n\t\t\t\twriter.varint(members.length);\n\t\t\t\tfor (const { member, value } of members) {\n\t\t\t\t\twriter.varint(member);\n\t\t\t\t\twriter.part(value);\n\t\t\t\t}\n\t\t\t\twriter.failed(failed);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"state\":\n\t\t\twriter.varint(message.holds.length);\n\t\t\tfor (const { hold, members, failed, retired } of message.holds) {\n\t\t\t\twriter.varint(hold);\n\t\t\t\twriter.varint(members.length);\n\t\t\t\tfor (const { member, ops } of members) {\n\t\t\t\t\twriter.varint(member);\n\t\t\t\t\twriter.part(ops);\n\t\t\t\t}\n\t\t\t\twriter.failedAndRetired(failed, retired);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"failed\":\n\t\t\twriter.varint(message.hold);\n\t\t\twriter.byte(CAUSE_KINDS.indexOf(message.cause.kind));\n\t\t\twriter.json(message.cause.error);\n\t\t\t// 0 when absent, else one more than the delay.\n\t\t\twriter.varint(message.retryIn === undefined ? 0 : message.retryIn + 1);\n\t\t\treturn;\n\t\tcase \"result\":\n\t\t\twriter.varint(message.call);\n\t\t\twriter.payload(message.value, message.segments);\n\t\t\treturn;\n\t\tcase \"error\":\n\t\t\twriter.varint(message.call);\n\t\t\twriter.json(message.error);\n\t\t\treturn;\n\t\tcase \"gone\":\n\t\t\twriter.varint(message.hold);\n\t\t\twriter.json(message.error);\n\t\t\treturn;\n\t\tcase \"revoke\":\n\t\t\twriter.json(message.revocation);\n\t\t\treturn;\n\t\tcase \"ack\":\n\t\tcase \"closed\":\n\t\tcase \"ping\":\n\t\tcase \"pong\":\n\t\t\treturn;\n\t}\n}\n\n/** The kind's fields, read structurally; the envelope's types are checked by the message schema afterwards. */\nfunction decodeFields(kind: (typeof KINDS)[number], reader: Reader): Message {\n\t// The message schema establishes the types of what is read here (JSON fields are checked by it).\n\tswitch (kind) {\n\t\tcase \"hello\":\n\t\t\treturn { kind, protocol: reader.varint(), incarnation: uuid(reader.raw(16)), calls: reader.varint() };\n\t\tcase \"hold\": {\n\t\t\tconst hold = reader.varint();\n\t\t\tconst type = reader.string();\n\t\t\tconst version = reader.varint();\n\t\t\tconst fingerprint = hexText(reader.raw(8));\n\t\t\tconst params = reader.part();\n\t\t\tconst address = { kind: reader.string(), params: reader.json() };\n\t\t\tconst flags = reader.byte();\n\t\t\tif (flags > (PRINCIPAL | INCARNATION | CHAIN | LIMIT)) throw new Error(\"binary: unknown hold flags\");\n\t\t\tconst principal = flags & PRINCIPAL ? { principal: reader.json() as { kind: string } } : {};\n\t\t\tconst incarnation = flags & INCARNATION ? { incarnation: uuid(reader.raw(16)) } : {};\n\t\t\tconst chain = flags & CHAIN ? { chain: reader.list(() => uuid(reader.raw(16))) } : {};\n\t\t\tconst limit = flags & LIMIT ? { limit: reader.varint() } : {};\n\t\t\treturn {\n\t\t\t\tkind,\n\t\t\t\thold,\n\t\t\t\ttype,\n\t\t\t\tversion,\n\t\t\t\tfingerprint,\n\t\t\t\tparams,\n\t\t\t\taddress,\n\t\t\t\t...principal,\n\t\t\t\t...incarnation,\n\t\t\t\t...chain,\n\t\t\t\t...limit,\n\t\t\t};\n\t\t}\n\t\tcase \"release\":\n\t\tcase \"loading\":\n\t\t\treturn { kind, hold: reader.varint() };\n\t\tcase \"retry\":\n\t\t\treturn { kind, hold: reader.varint(), hops: reader.varint() };\n\t\tcase \"call\": {\n\t\t\tconst [call, hold, method] = [reader.varint(), reader.varint(), reader.varint()];\n\t\t\treturn { kind, call, hold, method, ...reader.payload(\"args\") };\n\t\t}\n\t\tcase \"abort\":\n\t\t\treturn { kind, call: reader.varint() };\n\t\tcase \"bound\": {\n\t\t\tconst holds = reader.list((): BoundEntry => {\n\t\t\t\tconst [hold, variant] = [reader.varint(), reader.varint()];\n\t\t\t\tconst members = reader.list(() => ({ member: reader.varint(), value: reader.part() }));\n\t\t\t\treturn { hold, variant, members, failed: reader.failed() };\n\t\t\t});\n\t\t\treturn { kind, holds };\n\t\t}\n\t\tcase \"state\": {\n\t\t\tconst holds = reader.list((): StateEntry => {\n\t\t\t\tconst hold = reader.varint();\n\t\t\t\tconst members = reader.list(() => ({ member: reader.varint(), ops: reader.part() }));\n\t\t\t\t// The failure count times two, plus one when retirements follow.\n\t\t\t\tconst flags = reader.varint();\n\t\t\t\tconst failed = reader.failedEntries(Math.floor(flags / 2));\n\t\t\t\tconst retired = flags % 2 === 0 ? NO_RETIRED : reader.list(() => reader.varint());\n\t\t\t\treturn { hold, members, failed, retired };\n\t\t\t});\n\t\t\treturn { kind, holds };\n\t\t}\n\t\tcase \"failed\": {\n\t\t\tconst hold = reader.varint();\n\t\t\tconst cause = CAUSE_KINDS[reader.byte()];\n\t\t\tif (cause === undefined) throw new Error(\"binary: an unknown failure kind\");\n\t\t\t// The schema check after decoding establishes the wire error.\n\t\t\tconst error = reader.json() as Extract<Message, { kind: \"error\" }>[\"error\"];\n\t\t\tconst retryIn = reader.varint();\n\t\t\treturn {\n\t\t\t\tkind,\n\t\t\t\thold,\n\t\t\t\tcause: { kind: cause, error },\n\t\t\t\t...(retryIn === 0 ? {} : { retryIn: retryIn - 1 }),\n\t\t\t};\n\t\t}\n\t\tcase \"result\":\n\t\t\treturn { kind, call: reader.varint(), ...reader.payload(\"value\") };\n\t\tcase \"error\":\n\t\t\treturn { kind, call: reader.varint(), error: reader.json() as Extract<Message, { kind: \"error\" }>[\"error\"] };\n\t\tcase \"gone\":\n\t\t\treturn { kind, hold: reader.varint(), error: reader.json() as Extract<Message, { kind: \"error\" }>[\"error\"] };\n\t\tcase \"revoke\":\n\t\t\treturn { kind, revocation: reader.json() };\n\t\tcase \"ack\":\n\t\tcase \"ping\":\n\t\tcase \"pong\":\n\t\t\treturn { kind };\n\t\tcase \"closed\":\n\t\t\t// Its origin is the kind byte's; 0 without one, which the message schema refuses.\n\t\t\treturn { kind, origin: 0 };\n\t}\n}\n\n/** Up to this many UTF-16 units a string takes at most 126 bytes, so its length is one varint byte. */\nconst SHORT = 42;\n\n/** From this many UTF-16 units a string is encoded in place (below it, encoding on its own and copying is cheaper). */\nconst LONG = 4096;\n\n/** The fixed length prefix of a long string: five varint bytes, up to 32 GiB (16 GiB for a part). */\nconst LENGTH_SLOT = 5;\n\n/** The room left after a large chunk for the fields that follow it. */\nconst SPARE = 4096;\n\n/** Writes a message into one growing buffer, right-sized at the end. */\nclass Writer {\n\t/** Large enough for most small messages (a state change, a call), small enough to zero cheaply. */\n\t#buffer = new Uint8Array(256);\n\t#length = 0;\n\n\tbyte(byte: number): void {\n\t\tthis.#reserve(1);\n\t\tthis.#buffer[this.#length++] = byte;\n\t}\n\n\t/** An unsigned LEB128 varint of a safe integer. */\n\tvarint(value: number): void {\n\t\tthis.#reserve(8);\n\t\tlet rest = value;\n\t\twhile (rest >= 0x80) {\n\t\t\tthis.#buffer[this.#length++] = (rest % 0x80) | 0x80;\n\t\t\trest = Math.floor(rest / 0x80);\n\t\t}\n\t\tthis.#buffer[this.#length++] = rest;\n\t}\n\n\traw(bytes: Uint8Array): void {\n\t\tthis.#reserve(bytes.byteLength);\n\t\tthis.#buffer.set(bytes, this.#length);\n\t\tthis.#length += bytes.byteLength;\n\t}\n\n\t/** A length-prefixed UTF-8 string (`#text`). */\n\tstring(text: string): void {\n\t\tthis.#text(text, 1);\n\t}\n\n\tjson(value: unknown): void {\n\t\tthis.string(JSON.stringify(value) ?? \"null\");\n\t}\n\n\t/**\n\t * A part: its text encoded in place, or its bytes (a part received) copied as they are, behind its length doubled,\n\t * plus one when deflated.\n\t */\n\tpart(part: Part): void {\n\t\tif (typeof part === \"string\") {\n\t\t\tthis.#text(part, 2);\n\t\t\treturn;\n\t\t}\n\t\tconst bytes = part instanceof DeflatedPart ? part.bytes : part;\n\t\tthis.varint(bytes.byteLength * 2 + (part instanceof DeflatedPart ? DEFLATED : 0));\n\t\tthis.raw(bytes);\n\t}\n\n\t/**\n\t * Text behind its UTF-8 length times `scale` (2 for a part's prefix), encoded straight into the buffer where the\n\t * prefix is known in advance: a short text (its prefix fits one byte: at most 126 bytes, 42 UTF-16 units, divided\n\t * by `scale`) and a long one (a snapshot's JSON, behind a fixed five-byte prefix, a padded varint, which readers\n\t * accept). Others are encoded on their own and copied in. No text is encoded twice, and the largest value of a\n\t * message is never copied.\n\t */\n\t#text(text: string, scale: 1 | 2): void {\n\t\tif (text.length <= SHORT / scale) {\n\t\t\tthis.#reserve(1 + text.length * 3);\n\t\t\tconst { written } = UTF8.encodeInto(text, this.#buffer.subarray(this.#length + 1));\n\t\t\tthis.#buffer[this.#length] = written * scale;\n\t\t\tthis.#length += 1 + written;\n\t\t\treturn;\n\t\t}\n\t\tif (text.length < LONG) {\n\t\t\tconst bytes = UTF8.encode(text);\n\t\t\tthis.varint(bytes.byteLength * scale);\n\t\t\tthis.raw(bytes);\n\t\t\treturn;\n\t\t}\n\t\tconst slot = this.#length;\n\t\t// At least one byte per UTF-16 unit; more room is made when the text is not all ASCII.\n\t\tthis.#reserve(LENGTH_SLOT + text.length);\n\t\tthis.#length += LENGTH_SLOT;\n\t\tlet read = 0;\n\t\twhile (read < text.length) {\n\t\t\tconst rest = read === 0 ? text : text.slice(read);\n\t\t\tconst done = UTF8.encodeInto(rest, this.#buffer.subarray(this.#length));\n\t\t\tread += done.read;\n\t\t\tthis.#length += done.written;\n\t\t\tif (read < text.length) this.#reserve(Math.max((text.length - read) * 2, 4));\n\t\t}\n\t\tlet length = (this.#length - slot - LENGTH_SLOT) * scale;\n\t\tfor (let index = 0; index < LENGTH_SLOT; index++) {\n\t\t\tthis.#buffer[slot + index] = (length % 0x80) | (index < LENGTH_SLOT - 1 ? 0x80 : 0);\n\t\t\tlength = Math.floor(length / 0x80);\n\t\t}\n\t}\n\n\t/** A payload: its flags, then its part and, when marked, its segments (count, lengths, raw bytes). */\n\tpayload(part: Part | undefined, segments: readonly Uint8Array[] | undefined): void {\n\t\tif (part === undefined) {\n\t\t\tthis.varint(0);\n\t\t\treturn;\n\t\t}\n\t\tthis.varint(segments === undefined ? PRESENT : PRESENT | SEGMENTS);\n\t\tthis.part(part);\n\t\tif (segments === undefined) return;\n\t\tthis.varint(segments.length);\n\t\tfor (const segment of segments) this.varint(segment.byteLength);\n\t\tfor (const segment of segments) this.raw(segment);\n\t}\n\n\tfailed(failed: readonly FailedMember[]): void {\n\t\tthis.varint(failed.length);\n\t\tthis.#failedEntries(failed);\n\t}\n\n\t/**\n\t * A state entry's failures and retirements: the failure count times two, plus one when retirements follow, so an\n\t * entry without retirements costs no byte more than its failures.\n\t */\n\tfailedAndRetired(failed: readonly FailedMember[], retired: readonly number[]): void {\n\t\tthis.varint(failed.length * 2 + (retired.length > 0 ? 1 : 0));\n\t\tthis.#failedEntries(failed);\n\t\tif (retired.length === 0) return;\n\t\tthis.varint(retired.length);\n\t\tfor (const member of retired) this.varint(member);\n\t}\n\n\t#failedEntries(failed: readonly FailedMember[]): void {\n\t\tfor (const { member, error } of failed) {\n\t\t\tthis.varint(member);\n\t\t\tthis.json(error);\n\t\t}\n\t}\n\n\t/**\n\t * The message: a view of the buffer, or a right-sized copy when the spare room is meaningful (at least 64 bytes and\n\t * more than an eighth of the message), so a kept message keeps at most that much beyond itself. A large message\n\t * ends within its 4 KiB of room and is not copied.\n\t */\n\tfinish(): Uint8Array {\n\t\tconst message = this.#buffer.subarray(0, this.#length);\n\t\tconst spare = this.#buffer.byteLength - this.#length;\n\t\treturn spare >= 64 && spare * 8 > this.#length ? message.slice() : message;\n\t}\n\n\t/** Grows the buffer to fit `bytes` more: doubled, or for a large chunk to its end plus room for the small fields after it. */\n\t#reserve(bytes: number): void {\n\t\tif (this.#length + bytes <= this.#buffer.byteLength) return;\n\t\tconst grown = new Uint8Array(Math.max(this.#buffer.byteLength * 2, this.#length + bytes + SPARE));\n\t\tgrown.set(this.#buffer.subarray(0, this.#length));\n\t\tthis.#buffer = grown;\n\t}\n}\n\n/** Reads a message's bytes; every read is bounds-checked, segments are views of the message. */\nclass Reader {\n\treadonly #bytes: Uint8Array;\n\t#offset = 0;\n\n\tconstructor(bytes: Uint8Array) {\n\t\tthis.#bytes = bytes;\n\t}\n\n\tbyte(): number {\n\t\tconst byte = this.#bytes[this.#offset];\n\t\tif (byte === undefined) throw new Error(\"binary: the message ends early\");\n\t\tthis.#offset++;\n\t\treturn byte;\n\t}\n\n\t/** An unsigned LEB128 varint of at most 8 bytes, at most a safe integer. */\n\tvarint(): number {\n\t\tlet value = 0;\n\t\tlet scale = 1;\n\t\tfor (let read = 1; ; read++) {\n\t\t\tif (read > 8) throw new Error(\"binary: a varint does not fit\");\n\t\t\tconst byte = this.byte();\n\t\t\tvalue += (byte & 0x7f) * scale;\n\t\t\tif (value > Number.MAX_SAFE_INTEGER) throw new Error(\"binary: a varint does not fit\");\n\t\t\tif (byte < 0x80) return value;\n\t\t\tscale *= 0x80;\n\t\t}\n\t}\n\n\traw(length: number): Uint8Array {\n\t\tif (length > this.#bytes.byteLength - this.#offset) throw new Error(\"binary: the message ends early\");\n\t\tconst bytes = this.#bytes.subarray(this.#offset, this.#offset + length);\n\t\tthis.#offset += length;\n\t\treturn bytes;\n\t}\n\n\tstring(): string {\n\t\treturn readUtf8(this.raw(this.varint()));\n\t}\n\n\tjson(): unknown {\n\t\treturn parseJson(this.raw(this.varint()));\n\t}\n\n\t/** A part as a view of the message, unparsed and not inflated. */\n\tpart(): Uint8Array | DeflatedPart {\n\t\tconst prefix = this.varint();\n\t\tconst bytes = this.raw(Math.floor(prefix / 2));\n\t\treturn prefix % 2 === DEFLATED ? new DeflatedPart(bytes) : bytes;\n\t}\n\n\t/** A list: its count (each element takes at least a byte, so it cannot pass the message's end), then its elements. */\n\tlist<T>(read: () => T): T[] {\n\t\tconst count = this.varint();\n\t\tif (count > this.#bytes.byteLength - this.#offset) throw new Error(\"binary: a count does not fit\");\n\t\treturn Array.from({ length: count }, read);\n\t}\n\n\t/** A payload part under `key`, absent when not present, with its segments when marked as carrying them. */\n\tpayload<K extends string>(key: K): { [P in K]?: Part } & { segments?: Uint8Array[] } {\n\t\tconst flags = this.varint();\n\t\tif (flags === 0) return {};\n\t\tif (flags !== PRESENT && flags !== (PRESENT | SEGMENTS)) throw new Error(\"binary: unknown payload flags\");\n\t\tconst part = this.part();\n\t\tif (flags === PRESENT) return { [key]: part } as { [P in K]?: Part };\n\t\tconst lengths = this.list(() => this.varint());\n\t\tconst segments = lengths.map((length) => this.raw(length));\n\t\treturn { [key]: part, segments } as { [P in K]?: Part } & { segments: Uint8Array[] };\n\t}\n\n\tfailed(): FailedMember[] {\n\t\treturn this.failedEntries(this.varint());\n\t}\n\n\t/** `count` failed members, as `Writer.failed` writes them after their count. */\n\tfailedEntries(count: number): FailedMember[] {\n\t\tif (count > this.#bytes.byteLength - this.#offset) throw new Error(\"binary: a count does not fit\");\n\t\t// The message schema checks each error's shape.\n\t\treturn Array.from({ length: count }, () => ({\n\t\t\tmember: this.varint(),\n\t\t\terror: this.json() as Extract<Message, { kind: \"error\" }>[\"error\"],\n\t\t}));\n\t}\n\n\t/** The message is consumed exactly. */\n\tend(): void {\n\t\tif (this.#offset !== this.#bytes.byteLength) throw new Error(\"binary: bytes after the message\");\n\t}\n}\n\n/** Lowercase hex of 8 and 16 bytes: a fingerprint, an incarnation without its dashes. */\nconst HEX = new Map([\n\t[8, /^[0-9a-f]{16}$/],\n\t[16, /^[0-9a-f]{32}$/],\n]);\n\n/** `length` bytes from lowercase hex (an incarnation without dashes, a fingerprint). */\nfunction hex(text: string, length: number): Uint8Array {\n\tif (!HEX.get(length)!.test(text)) throw new Error(`binary: not ${length} bytes of hex`);\n\treturn Uint8Array.from({ length }, (_, index) => Number.parseInt(text.slice(index * 2, index * 2 + 2), 16));\n}\n\nfunction hexText(bytes: Uint8Array): string {\n\treturn Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/** 16 bytes as a UUID's text. */\nfunction uuid(bytes: Uint8Array): string {\n\tconst text = hexText(bytes);\n\treturn `${text.slice(0, 8)}-${text.slice(8, 12)}-${text.slice(12, 16)}-${text.slice(16, 20)}-${text.slice(20)}`;\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import type { Context } from "../../context/index.ts";
2
+ import type { Link } from "./link.ts";
3
+ import { type Codec, type Message } from "./message.ts";
4
+ /** What the owner of a channel handles. */
5
+ export interface ChannelHandler {
6
+ /** The peer's `hello` arrived: the link is open. */
7
+ opened(): void;
8
+ /**
9
+ * A checked message after the handshake (never `hello`, `ping` or `pong`). A throw is a protocol error. A promise
10
+ * (the message waits for an asynchronous inflate) holds every later message until it settles; a rejection is a
11
+ * protocol error too.
12
+ */
13
+ message(message: Message): void | Promise<void>;
14
+ /** The link closed, from either end; called once. */
15
+ closed(): void;
16
+ }
17
+ /** What a channel is made with besides its link and handler. */
18
+ type ChannelOptions = {
19
+ readonly codec: Codec;
20
+ /** This host's incarnation, sent in `hello`. */
21
+ readonly incarnation: string;
22
+ /** How many concurrent calls this side accepts, sent in `hello`. */
23
+ readonly calls: number;
24
+ /** Skips the `MESSAGE` check (framing, the codec's decode and the owners' checks still run). */
25
+ readonly trusted: boolean;
26
+ /** Where protocol errors go. */
27
+ readonly report: (error: unknown) => void;
28
+ };
29
+ /**
30
+ * One end of a link. It sends `hello { protocol, incarnation, calls }` first and nothing else until the peer's arrived
31
+ * (its own messages wait). Every message is decoded by the link's codec and, unless the link is trusted, checked
32
+ * against the message schema; a first message that is no `hello` of this codec, a second `hello`, another protocol
33
+ * version, or a message failing a check closes the link and is reported. The heartbeat: every received message
34
+ * stamps `lastReceived`; the host's timer calls `tick`, which pings a silent open link and closes a link silent for
35
+ * too long (the handshake included); a `ping` is answered with `pong` at once. A message the handler handles
36
+ * asynchronously holds the later ones, `ping` included, until it settles; they are handled in order then, and dropped
37
+ * when the link closes meanwhile.
38
+ */
39
+ export declare class Channel {
40
+ #private;
41
+ constructor(link: Link, handler: ChannelHandler, options: ChannelOptions, context: Context);
42
+ /**
43
+ * Sends `hello` and starts listening: messages that arrived already are handled now, and a link closed already
44
+ * calls `closed` now; so the handler is complete before it starts.
45
+ */
46
+ start(): void;
47
+ /** The peer's incarnation, from its `hello`; empty before it arrived (nothing else can arrive before it). */
48
+ get peer(): string;
49
+ /** How many concurrent calls the peer accepts, from its `hello`; 0 before it arrived. */
50
+ get peerCalls(): number;
51
+ get opened(): boolean;
52
+ get closed(): boolean;
53
+ /** Sends one message; before the handshake it waits, after the close it is dropped. */
54
+ send(message: Message): void;
55
+ close(): void;
56
+ /**
57
+ * The heartbeat, at `now`: a link silent for `close` ms (the handshake included) closes; an open one silent for
58
+ * `ping` ms sends one `ping`.
59
+ */
60
+ tick(now: number, ping: number, close: number): void;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/next/link/channel.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,KAAK,EAAgB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtE,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC9B,oDAAoD;IACpD,MAAM,IAAI,IAAI,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,qDAAqD;IACrD,MAAM,IAAI,IAAI,CAAC;CACf;AAED,gEAAgE;AAChE,KAAK,cAAc,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C,CAAC;AAWF;;;;;;;;;GASG;AACH,qBAAa,OAAO;;IAqBnB,YAAY,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAazF;IAED;;;OAGG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED,6GAA6G;IAC7G,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,yFAAyF;IACzF,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,uFAAuF;IACvF,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM3B;IAED,KAAK,IAAI,IAAI,CAEZ;IAED;;;OAGG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOnD;CAmGD"}
@@ -0,0 +1,202 @@
1
+ // A host's end of a link (§3, §22, 2b): the handshake, the link's codec, the checks of every message (skipped on a
2
+ // trusted link), the heartbeat, and messages handled in order while one waits for an asynchronous inflate; a protocol
3
+ // error closes the link.
4
+ import { PROTOCOL_VERSION } from "../data/internal.js";
5
+ import { checkMessage } from "./message.js";
6
+ /**
7
+ * One end of a link. It sends `hello { protocol, incarnation, calls }` first and nothing else until the peer's arrived
8
+ * (its own messages wait). Every message is decoded by the link's codec and, unless the link is trusted, checked
9
+ * against the message schema; a first message that is no `hello` of this codec, a second `hello`, another protocol
10
+ * version, or a message failing a check closes the link and is reported. The heartbeat: every received message
11
+ * stamps `lastReceived`; the host's timer calls `tick`, which pings a silent open link and closes a link silent for
12
+ * too long (the handshake included); a `ping` is answered with `pong` at once. A message the handler handles
13
+ * asynchronously holds the later ones, `ping` included, until it settles; they are handled in order then, and dropped
14
+ * when the link closes meanwhile.
15
+ */
16
+ export class Channel {
17
+ #link;
18
+ #codec;
19
+ #handler;
20
+ #report;
21
+ #trusted;
22
+ #context;
23
+ #state = { kind: "greeting", queued: [] };
24
+ /** When the last message arrived (`Date.now()`), or the channel was made. */
25
+ #lastReceived = Date.now();
26
+ /** Whether a `ping` went out since the last received message. */
27
+ #pinged = false;
28
+ /**
29
+ * Messages received while one is handled asynchronously, in order, and the index of the next to handle; `undefined`
30
+ * while none waits.
31
+ */
32
+ #held;
33
+ /** Whether a message is being handled asynchronously: the held ones wait. */
34
+ #waiting = false;
35
+ #hello;
36
+ constructor(link, handler, options, context) {
37
+ this.#link = link;
38
+ this.#codec = options.codec;
39
+ this.#handler = handler;
40
+ this.#report = options.report;
41
+ this.#trusted = options.trusted;
42
+ this.#context = context;
43
+ this.#hello = this.#codec.encode({
44
+ kind: "hello",
45
+ protocol: PROTOCOL_VERSION,
46
+ incarnation: options.incarnation,
47
+ calls: options.calls,
48
+ });
49
+ }
50
+ /**
51
+ * Sends `hello` and starts listening: messages that arrived already are handled now, and a link closed already
52
+ * calls `closed` now; so the handler is complete before it starts.
53
+ */
54
+ start() {
55
+ this.#link.send(this.#hello);
56
+ this.#link.onMessage((bytes) => this.#receive(bytes));
57
+ this.#link.onClose(() => this.#closed());
58
+ }
59
+ /** The peer's incarnation, from its `hello`; empty before it arrived (nothing else can arrive before it). */
60
+ get peer() {
61
+ return this.#state.kind === "open" ? this.#state.peer : "";
62
+ }
63
+ /** How many concurrent calls the peer accepts, from its `hello`; 0 before it arrived. */
64
+ get peerCalls() {
65
+ return this.#state.kind === "open" ? this.#state.calls : 0;
66
+ }
67
+ get opened() {
68
+ return this.#state.kind === "open";
69
+ }
70
+ get closed() {
71
+ return this.#state.kind === "closed";
72
+ }
73
+ /** Sends one message; before the handshake it waits, after the close it is dropped. */
74
+ send(message) {
75
+ const state = this.#state;
76
+ if (state.kind === "closed")
77
+ return;
78
+ const bytes = this.#codec.encode(message);
79
+ if (state.kind === "greeting")
80
+ state.queued.push(bytes);
81
+ else
82
+ this.#link.send(bytes);
83
+ }
84
+ close() {
85
+ this.#link.close();
86
+ }
87
+ /**
88
+ * The heartbeat, at `now`: a link silent for `close` ms (the handshake included) closes; an open one silent for
89
+ * `ping` ms sends one `ping`.
90
+ */
91
+ tick(now, ping, close) {
92
+ const silent = now - this.#lastReceived;
93
+ if (silent >= close)
94
+ this.close();
95
+ else if (silent >= ping && !this.#pinged && this.#state.kind === "open") {
96
+ this.#pinged = true;
97
+ this.#link.send(this.#codec.encode({ kind: "ping" }));
98
+ }
99
+ }
100
+ #receive(bytes) {
101
+ if (this.#state.kind === "closed")
102
+ return;
103
+ this.#lastReceived = Date.now();
104
+ this.#pinged = false;
105
+ if (this.#held === undefined)
106
+ this.#handle(bytes);
107
+ else
108
+ this.#held.queue.push(bytes);
109
+ }
110
+ /** Handles one received message; one the handler handles asynchronously holds the next until it settles. */
111
+ #handle(bytes) {
112
+ const state = this.#state;
113
+ try {
114
+ if (state.kind === "greeting") {
115
+ this.#greet(bytes, state.queued);
116
+ return;
117
+ }
118
+ const message = this.#decode(bytes);
119
+ if (message.kind === "hello")
120
+ throw new Error("handshake: a second hello");
121
+ // Control of the link itself, never queued behind the window.
122
+ if (message.kind === "ping")
123
+ this.#link.send(this.#codec.encode({ kind: "pong" }));
124
+ else if (message.kind !== "pong") {
125
+ const handling = this.#handler.message(message);
126
+ if (handling !== undefined)
127
+ this.#hold(handling);
128
+ }
129
+ }
130
+ catch (error) {
131
+ this.#failed(error);
132
+ }
133
+ }
134
+ /** Holds later messages until `handling` settles, then handles them in order (each may hold again). */
135
+ #hold(handling) {
136
+ this.#held ??= { queue: [], next: 0 };
137
+ this.#waiting = true;
138
+ handling.then(() => {
139
+ this.#waiting = false;
140
+ this.#release();
141
+ }, (error) => this.#failed(error));
142
+ }
143
+ /**
144
+ * The held message was handled: the ones behind it are handled in order, until one holds again (the handled ones are
145
+ * dropped from the queue then).
146
+ */
147
+ #release() {
148
+ const held = this.#held;
149
+ if (held === undefined)
150
+ return;
151
+ while (held.next < held.queue.length) {
152
+ if (this.#state.kind !== "open")
153
+ return;
154
+ this.#handle(held.queue[held.next++]);
155
+ if (this.#waiting) {
156
+ held.queue.splice(0, held.next);
157
+ held.next = 0;
158
+ return;
159
+ }
160
+ }
161
+ this.#held = undefined;
162
+ }
163
+ /** A protocol error: reported, and the link closes. */
164
+ #failed(error) {
165
+ if (this.#state.kind === "closed")
166
+ return;
167
+ this.#report(error);
168
+ this.close();
169
+ }
170
+ /** A message from its bytes, checked against the message schema unless the link is trusted. */
171
+ #decode(bytes) {
172
+ const message = this.#codec.decode(bytes);
173
+ return this.#trusted ? message : checkMessage(message, this.#context);
174
+ }
175
+ /** The first message: the peer's `hello` in this link's codec and protocol version. */
176
+ #greet(bytes, queued) {
177
+ let message;
178
+ try {
179
+ message = this.#decode(bytes);
180
+ }
181
+ catch (error) {
182
+ throw new Error(`handshake: the first message is no ${this.#codec.name} message`, { cause: error });
183
+ }
184
+ if (message.kind !== "hello")
185
+ throw new Error(`handshake: ${message.kind} before hello`);
186
+ if (message.protocol !== PROTOCOL_VERSION) {
187
+ throw new Error(`handshake: protocol ${message.protocol}, this host speaks ${PROTOCOL_VERSION}`);
188
+ }
189
+ this.#state = { kind: "open", peer: message.incarnation, calls: message.calls };
190
+ for (const bytes of queued)
191
+ this.#link.send(bytes);
192
+ this.#handler.opened();
193
+ }
194
+ #closed() {
195
+ if (this.#state.kind === "closed")
196
+ return;
197
+ this.#state = { kind: "closed" };
198
+ this.#held = undefined;
199
+ this.#handler.closed();
200
+ }
201
+ }
202
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/next/link/channel.ts"],"names":[],"mappings":"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","sourcesContent":["// A host's end of a link (§3, §22, 2b): the handshake, the link's codec, the checks of every message (skipped on a\n// trusted link), the heartbeat, and messages handled in order while one waits for an asynchronous inflate; a protocol\n// error closes the link.\n\nimport type { Context } from \"../../context/index.ts\";\nimport { PROTOCOL_VERSION } from \"../data/internal.ts\";\nimport type { Link } from \"./link.ts\";\nimport { type Codec, checkMessage, type Message } from \"./message.ts\";\n\n/** What the owner of a channel handles. */\nexport interface ChannelHandler {\n\t/** The peer's `hello` arrived: the link is open. */\n\topened(): void;\n\t/**\n\t * A checked message after the handshake (never `hello`, `ping` or `pong`). A throw is a protocol error. A promise\n\t * (the message waits for an asynchronous inflate) holds every later message until it settles; a rejection is a\n\t * protocol error too.\n\t */\n\tmessage(message: Message): void | Promise<void>;\n\t/** The link closed, from either end; called once. */\n\tclosed(): void;\n}\n\n/** What a channel is made with besides its link and handler. */\ntype ChannelOptions = {\n\treadonly codec: Codec;\n\t/** This host's incarnation, sent in `hello`. */\n\treadonly incarnation: string;\n\t/** How many concurrent calls this side accepts, sent in `hello`. */\n\treadonly calls: number;\n\t/** Skips the `MESSAGE` check (framing, the codec's decode and the owners' checks still run). */\n\treadonly trusted: boolean;\n\t/** Where protocol errors go. */\n\treadonly report: (error: unknown) => void;\n};\n\n/**\n * Where a channel stands: `greeting` until the peer's `hello`, with what this end sent meanwhile; `open` with the\n * peer's incarnation and call window.\n */\ntype ChannelState =\n\t| { readonly kind: \"greeting\"; readonly queued: Uint8Array[] }\n\t| { readonly kind: \"open\"; readonly peer: string; readonly calls: number }\n\t| { readonly kind: \"closed\" };\n\n/**\n * One end of a link. It sends `hello { protocol, incarnation, calls }` first and nothing else until the peer's arrived\n * (its own messages wait). Every message is decoded by the link's codec and, unless the link is trusted, checked\n * against the message schema; a first message that is no `hello` of this codec, a second `hello`, another protocol\n * version, or a message failing a check closes the link and is reported. The heartbeat: every received message\n * stamps `lastReceived`; the host's timer calls `tick`, which pings a silent open link and closes a link silent for\n * too long (the handshake included); a `ping` is answered with `pong` at once. A message the handler handles\n * asynchronously holds the later ones, `ping` included, until it settles; they are handled in order then, and dropped\n * when the link closes meanwhile.\n */\nexport class Channel {\n\treadonly #link: Link;\n\treadonly #codec: Codec;\n\treadonly #handler: ChannelHandler;\n\treadonly #report: (error: unknown) => void;\n\treadonly #trusted: boolean;\n\treadonly #context: Context;\n\t#state: ChannelState = { kind: \"greeting\", queued: [] };\n\t/** When the last message arrived (`Date.now()`), or the channel was made. */\n\t#lastReceived = Date.now();\n\t/** Whether a `ping` went out since the last received message. */\n\t#pinged = false;\n\t/**\n\t * Messages received while one is handled asynchronously, in order, and the index of the next to handle; `undefined`\n\t * while none waits.\n\t */\n\t#held: { queue: Uint8Array[]; next: number } | undefined;\n\t/** Whether a message is being handled asynchronously: the held ones wait. */\n\t#waiting = false;\n\treadonly #hello: Uint8Array;\n\n\tconstructor(link: Link, handler: ChannelHandler, options: ChannelOptions, context: Context) {\n\t\tthis.#link = link;\n\t\tthis.#codec = options.codec;\n\t\tthis.#handler = handler;\n\t\tthis.#report = options.report;\n\t\tthis.#trusted = options.trusted;\n\t\tthis.#context = context;\n\t\tthis.#hello = this.#codec.encode({\n\t\t\tkind: \"hello\",\n\t\t\tprotocol: PROTOCOL_VERSION,\n\t\t\tincarnation: options.incarnation,\n\t\t\tcalls: options.calls,\n\t\t});\n\t}\n\n\t/**\n\t * Sends `hello` and starts listening: messages that arrived already are handled now, and a link closed already\n\t * calls `closed` now; so the handler is complete before it starts.\n\t */\n\tstart(): void {\n\t\tthis.#link.send(this.#hello);\n\t\tthis.#link.onMessage((bytes) => this.#receive(bytes));\n\t\tthis.#link.onClose(() => this.#closed());\n\t}\n\n\t/** The peer's incarnation, from its `hello`; empty before it arrived (nothing else can arrive before it). */\n\tget peer(): string {\n\t\treturn this.#state.kind === \"open\" ? this.#state.peer : \"\";\n\t}\n\n\t/** How many concurrent calls the peer accepts, from its `hello`; 0 before it arrived. */\n\tget peerCalls(): number {\n\t\treturn this.#state.kind === \"open\" ? this.#state.calls : 0;\n\t}\n\n\tget opened(): boolean {\n\t\treturn this.#state.kind === \"open\";\n\t}\n\n\tget closed(): boolean {\n\t\treturn this.#state.kind === \"closed\";\n\t}\n\n\t/** Sends one message; before the handshake it waits, after the close it is dropped. */\n\tsend(message: Message): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"closed\") return;\n\t\tconst bytes = this.#codec.encode(message);\n\t\tif (state.kind === \"greeting\") state.queued.push(bytes);\n\t\telse this.#link.send(bytes);\n\t}\n\n\tclose(): void {\n\t\tthis.#link.close();\n\t}\n\n\t/**\n\t * The heartbeat, at `now`: a link silent for `close` ms (the handshake included) closes; an open one silent for\n\t * `ping` ms sends one `ping`.\n\t */\n\ttick(now: number, ping: number, close: number): void {\n\t\tconst silent = now - this.#lastReceived;\n\t\tif (silent >= close) this.close();\n\t\telse if (silent >= ping && !this.#pinged && this.#state.kind === \"open\") {\n\t\t\tthis.#pinged = true;\n\t\t\tthis.#link.send(this.#codec.encode({ kind: \"ping\" }));\n\t\t}\n\t}\n\n\t#receive(bytes: Uint8Array): void {\n\t\tif (this.#state.kind === \"closed\") return;\n\t\tthis.#lastReceived = Date.now();\n\t\tthis.#pinged = false;\n\t\tif (this.#held === undefined) this.#handle(bytes);\n\t\telse this.#held.queue.push(bytes);\n\t}\n\n\t/** Handles one received message; one the handler handles asynchronously holds the next until it settles. */\n\t#handle(bytes: Uint8Array): void {\n\t\tconst state = this.#state;\n\t\ttry {\n\t\t\tif (state.kind === \"greeting\") {\n\t\t\t\tthis.#greet(bytes, state.queued);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst message = this.#decode(bytes);\n\t\t\tif (message.kind === \"hello\") throw new Error(\"handshake: a second hello\");\n\t\t\t// Control of the link itself, never queued behind the window.\n\t\t\tif (message.kind === \"ping\") this.#link.send(this.#codec.encode({ kind: \"pong\" }));\n\t\t\telse if (message.kind !== \"pong\") {\n\t\t\t\tconst handling = this.#handler.message(message);\n\t\t\t\tif (handling !== undefined) this.#hold(handling);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.#failed(error);\n\t\t}\n\t}\n\n\t/** Holds later messages until `handling` settles, then handles them in order (each may hold again). */\n\t#hold(handling: Promise<void>): void {\n\t\tthis.#held ??= { queue: [], next: 0 };\n\t\tthis.#waiting = true;\n\t\thandling.then(\n\t\t\t() => {\n\t\t\t\tthis.#waiting = false;\n\t\t\t\tthis.#release();\n\t\t\t},\n\t\t\t(error: unknown) => this.#failed(error),\n\t\t);\n\t}\n\n\t/**\n\t * The held message was handled: the ones behind it are handled in order, until one holds again (the handled ones are\n\t * dropped from the queue then).\n\t */\n\t#release(): void {\n\t\tconst held = this.#held;\n\t\tif (held === undefined) return;\n\t\twhile (held.next < held.queue.length) {\n\t\t\tif (this.#state.kind !== \"open\") return;\n\t\t\tthis.#handle(held.queue[held.next++]!);\n\t\t\tif (this.#waiting) {\n\t\t\t\theld.queue.splice(0, held.next);\n\t\t\t\theld.next = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.#held = undefined;\n\t}\n\n\t/** A protocol error: reported, and the link closes. */\n\t#failed(error: unknown): void {\n\t\tif (this.#state.kind === \"closed\") return;\n\t\tthis.#report(error);\n\t\tthis.close();\n\t}\n\n\t/** A message from its bytes, checked against the message schema unless the link is trusted. */\n\t#decode(bytes: Uint8Array): Message {\n\t\tconst message = this.#codec.decode(bytes);\n\t\treturn this.#trusted ? message : checkMessage(message, this.#context);\n\t}\n\n\t/** The first message: the peer's `hello` in this link's codec and protocol version. */\n\t#greet(bytes: Uint8Array, queued: readonly Uint8Array[]): void {\n\t\tlet message: Message;\n\t\ttry {\n\t\t\tmessage = this.#decode(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new Error(`handshake: the first message is no ${this.#codec.name} message`, { cause: error });\n\t\t}\n\t\tif (message.kind !== \"hello\") throw new Error(`handshake: ${message.kind} before hello`);\n\t\tif (message.protocol !== PROTOCOL_VERSION) {\n\t\t\tthrow new Error(`handshake: protocol ${message.protocol}, this host speaks ${PROTOCOL_VERSION}`);\n\t\t}\n\t\tthis.#state = { kind: \"open\", peer: message.incarnation, calls: message.calls };\n\t\tfor (const bytes of queued) this.#link.send(bytes);\n\t\tthis.#handler.opened();\n\t}\n\n\t#closed(): void {\n\t\tif (this.#state.kind === \"closed\") return;\n\t\tthis.#state = { kind: \"closed\" };\n\t\tthis.#held = undefined;\n\t\tthis.#handler.closed();\n\t}\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { type ChordError, PluginError } from "../data/index.ts";
2
+ import type { WireError } from "./message.ts";
3
+ /** What crosses for a thrown value: a ChordError, a PluginError, or anything else as the plugin code `internal`. */
4
+ export declare function wireError(error: unknown): WireError;
5
+ /** The error a consumer rethrows. A malformed ChordError envelope throws (a protocol error). */
6
+ export declare function errorFromWire(error: WireError): ChordError | PluginError;
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/next/link/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAgB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,oHAAoH;AACpH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAOnD;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAIxE"}
@@ -0,0 +1,21 @@
1
+ // Errors on the wire: a ChordError's JSON or a plugin's code, message and details; never a stack or a cause.
2
+ import { isChordError, PluginError } from "../data/index.js";
3
+ import { chordErrorFromJson } from "../data/internal.js";
4
+ /** What crosses for a thrown value: a ChordError, a PluginError, or anything else as the plugin code `internal`. */
5
+ export function wireError(error) {
6
+ if (isChordError(error))
7
+ return { kind: "chord", error: error.toJSON() };
8
+ if (error instanceof PluginError) {
9
+ const { code, message, details } = error;
10
+ return { kind: "plugin", code, message, ...(details === undefined ? {} : { details }) };
11
+ }
12
+ return { kind: "plugin", code: "internal", message: error instanceof Error ? error.message : String(error) };
13
+ }
14
+ /** The error a consumer rethrows. A malformed ChordError envelope throws (a protocol error). */
15
+ export function errorFromWire(error) {
16
+ if (error.kind === "chord")
17
+ return chordErrorFromJson(error.error);
18
+ // Fresh JSON from the link: details are JSON.
19
+ return new PluginError(error.code, error.message, error.details);
20
+ }
21
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/next/link/errors.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAG7G,OAAO,EAAmB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,oHAAoH;AACpH,MAAM,UAAU,SAAS,CAAC,KAAc;IACvC,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QAClC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9G,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnE,8CAA8C;IAC9C,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAgC,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["// Errors on the wire: a ChordError's JSON or a plugin's code, message and details; never a stack or a cause.\n\nimport type { JsonValue } from \"../../json.ts\";\nimport { type ChordError, isChordError, PluginError } from \"../data/index.ts\";\nimport { chordErrorFromJson } from \"../data/internal.ts\";\nimport type { WireError } from \"./message.ts\";\n\n/** What crosses for a thrown value: a ChordError, a PluginError, or anything else as the plugin code `internal`. */\nexport function wireError(error: unknown): WireError {\n\tif (isChordError(error)) return { kind: \"chord\", error: error.toJSON() };\n\tif (error instanceof PluginError) {\n\t\tconst { code, message, details } = error;\n\t\treturn { kind: \"plugin\", code, message, ...(details === undefined ? {} : { details }) };\n\t}\n\treturn { kind: \"plugin\", code: \"internal\", message: error instanceof Error ? error.message : String(error) };\n}\n\n/** The error a consumer rethrows. A malformed ChordError envelope throws (a protocol error). */\nexport function errorFromWire(error: WireError): ChordError | PluginError {\n\tif (error.kind === \"chord\") return chordErrorFromJson(error.error);\n\t// Fresh JSON from the link: details are JSON.\n\treturn new PluginError(error.code, error.message, error.details as JsonValue | undefined);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export { binaryCodec } from "./binary.ts";
2
+ export { type IpcPort, ipcLink } from "./ipc.ts";
3
+ export { type Link, memoryLinkPair } from "./link.ts";
4
+ export type { Codec, Message } from "./message.ts";
5
+ export type { Compression, Inflated, PartLimits } from "./part.ts";
6
+ export { describeMessage, textCodec } from "./text.ts";
7
+ export { type WebSocketLike, webSocketLink } from "./websocket.ts";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/next/link/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,KAAK,IAAI,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ // Links for apps: the link interface adapters implement, the in-memory pair, IPC and WebSocket links, the codecs a link
2
+ // may use, its limits per part and the compressor a host may bring.
3
+ export { binaryCodec } from "./binary.js";
4
+ export { ipcLink } from "./ipc.js";
5
+ export { memoryLinkPair } from "./link.js";
6
+ export { describeMessage, textCodec } from "./text.js";
7
+ export { webSocketLink } from "./websocket.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/next/link/index.ts"],"names":[],"mappings":"AAAA,wHAAwH;AACxH,oEAAoE;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAgB,OAAO,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAa,cAAc,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAsB,aAAa,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["// Links for apps: the link interface adapters implement, the in-memory pair, IPC and WebSocket links, the codecs a link\n// may use, its limits per part and the compressor a host may bring.\n\nexport { binaryCodec } from \"./binary.ts\";\nexport { type IpcPort, ipcLink } from \"./ipc.ts\";\nexport { type Link, memoryLinkPair } from \"./link.ts\";\nexport type { Codec, Message } from \"./message.ts\";\nexport type { Compression, Inflated, PartLimits } from \"./part.ts\";\nexport { describeMessage, textCodec } from \"./text.ts\";\nexport { type WebSocketLike, webSocketLink } from \"./websocket.ts\";\n"]}
@@ -0,0 +1,9 @@
1
+ export { binaryCodec } from "./binary.ts";
2
+ export { Channel, type ChannelHandler } from "./channel.ts";
3
+ export { errorFromWire, wireError } from "./errors.ts";
4
+ export type { Link } from "./link.ts";
5
+ export { type BoundEntry, CHAIN, type Codec, type ConsumerMessage, checkMessage, type FailedMember, type Message, NO_RETIRED, type OriginMessage, type ProviderMessage, RETRY_HOPS, type StateEntry, type WireAddress, } from "./message.ts";
6
+ export { type Compression, DeflatedPart, inflateAsync, type Limits, linkLimits, openPart, originPart, oversized, type Part, type PartLimits, } from "./part.ts";
7
+ export { describeMessage, textCodec } from "./text.ts";
8
+ export { jsonPart, parsePart, parsePayload, payloadPart } from "./values.ts";
9
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/next/link/internal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACN,KAAK,UAAU,EACf,KAAK,EACL,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,UAAU,EACV,KAAK,UAAU,EACf,KAAK,WAAW,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,KAAK,WAAW,EAChB,YAAY,EACZ,YAAY,EACZ,KAAK,MAAM,EACX,UAAU,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EACT,KAAK,IAAI,EACT,KAAK,UAAU,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ // Links for Chord's layers: a host's end of a link (handshake, codec, checks, heartbeat and in-order handling), the
2
+ // message type, parts with their limits and compression, and errors in messages.
3
+ export { binaryCodec } from "./binary.js";
4
+ export { Channel } from "./channel.js";
5
+ export { errorFromWire, wireError } from "./errors.js";
6
+ export { CHAIN, checkMessage, NO_RETIRED, RETRY_HOPS, } from "./message.js";
7
+ export { DeflatedPart, inflateAsync, linkLimits, openPart, originPart, oversized, } from "./part.js";
8
+ export { describeMessage, textCodec } from "./text.js";
9
+ export { jsonPart, parsePart, parsePayload, payloadPart } from "./values.js";
10
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/next/link/internal.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,iFAAiF;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAEN,KAAK,EAGL,YAAY,EAGZ,UAAU,EAGV,UAAU,GAGV,MAAM,cAAc,CAAC;AACtB,OAAO,EAEN,YAAY,EACZ,YAAY,EAEZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,SAAS,GAGT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC","sourcesContent":["// Links for Chord's layers: a host's end of a link (handshake, codec, checks, heartbeat and in-order handling), the\n// message type, parts with their limits and compression, and errors in messages.\n\nexport { binaryCodec } from \"./binary.ts\";\nexport { Channel, type ChannelHandler } from \"./channel.ts\";\nexport { errorFromWire, wireError } from \"./errors.ts\";\nexport type { Link } from \"./link.ts\";\nexport {\n\ttype BoundEntry,\n\tCHAIN,\n\ttype Codec,\n\ttype ConsumerMessage,\n\tcheckMessage,\n\ttype FailedMember,\n\ttype Message,\n\tNO_RETIRED,\n\ttype OriginMessage,\n\ttype ProviderMessage,\n\tRETRY_HOPS,\n\ttype StateEntry,\n\ttype WireAddress,\n} from \"./message.ts\";\nexport {\n\ttype Compression,\n\tDeflatedPart,\n\tinflateAsync,\n\ttype Limits,\n\tlinkLimits,\n\topenPart,\n\toriginPart,\n\toversized,\n\ttype Part,\n\ttype PartLimits,\n} from \"./part.ts\";\nexport { describeMessage, textCodec } from \"./text.ts\";\nexport { jsonPart, parsePart, parsePayload, payloadPart } from \"./values.ts\";\n"]}
@@ -0,0 +1,22 @@
1
+ import { type Link } from "./link.ts";
2
+ /**
3
+ * The part of a Node IPC channel a link uses: a `ChildProcess` or the child's `process`. `send` returning `false` is
4
+ * backpressure (the message is queued by Node), not a failure.
5
+ */
6
+ export interface IpcPort {
7
+ send(message: Uint8Array, callback: (error: Error | null) => void): boolean;
8
+ on(event: "message", listener: (message: unknown) => void): unknown;
9
+ on(event: "disconnect", listener: () => void): unknown;
10
+ removeListener(event: "message", listener: (message: unknown) => void): unknown;
11
+ removeListener(event: "disconnect", listener: () => void): unknown;
12
+ disconnect(): void;
13
+ readonly connected: boolean;
14
+ }
15
+ /**
16
+ * A link over `port`: each message one `Uint8Array` (V8 serialization keeps it one). It listens from the moment it is
17
+ * made and queues messages until its listener is set, so a child makes it before awaiting its start message; messages
18
+ * that are no `Uint8Array` (the app's own, such as that start message) are not the link's and are skipped. A thrown
19
+ * `send`, an error in its callback or `disconnect` closes the link once; its listeners are removed then.
20
+ */
21
+ export declare function ipcLink(port: IpcPort): Link;
22
+ //# sourceMappingURL=ipc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc.d.ts","sourceRoot":"","sources":["../../../src/next/link/ipc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAW,MAAM,WAAW,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,OAAO;IACvB,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IAC5E,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IACpE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IACvD,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IAChF,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IACnE,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE3C"}
@@ -0,0 +1,64 @@
1
+ // IPC links (§3): a link over a Node IPC channel, a forked child (`fork` with `serialization: "advanced"`) or
2
+ // `process` in the child, typed structurally so Chord imports nothing from Node.
3
+ import { LinkEnd } from "./link.js";
4
+ /**
5
+ * A link over `port`: each message one `Uint8Array` (V8 serialization keeps it one). It listens from the moment it is
6
+ * made and queues messages until its listener is set, so a child makes it before awaiting its start message; messages
7
+ * that are no `Uint8Array` (the app's own, such as that start message) are not the link's and are skipped. A thrown
8
+ * `send`, an error in its callback or `disconnect` closes the link once; its listeners are removed then.
9
+ */
10
+ export function ipcLink(port) {
11
+ return new IpcLink(port);
12
+ }
13
+ class IpcLink extends LinkEnd {
14
+ /** The port while the link is open. */
15
+ #port;
16
+ #onMessage = (message) => {
17
+ if (message instanceof Uint8Array)
18
+ this.deliver(message);
19
+ };
20
+ #onDisconnect = () => this.#end();
21
+ #onSent = (error) => {
22
+ if (error !== null)
23
+ this.#end();
24
+ };
25
+ constructor(port) {
26
+ super();
27
+ this.#port = port;
28
+ if (!port.connected) {
29
+ this.#end();
30
+ return;
31
+ }
32
+ port.on("message", this.#onMessage);
33
+ port.on("disconnect", this.#onDisconnect);
34
+ }
35
+ send(message) {
36
+ const port = this.#port;
37
+ if (port === undefined)
38
+ return;
39
+ try {
40
+ port.send(message, this.#onSent);
41
+ }
42
+ catch {
43
+ this.#end();
44
+ }
45
+ }
46
+ close() {
47
+ const port = this.#port;
48
+ if (port === undefined)
49
+ return;
50
+ this.#end();
51
+ // Disconnecting a channel that is gone already would emit an error.
52
+ if (port.connected)
53
+ port.disconnect();
54
+ }
55
+ /** Detaches from the port and closes this end. */
56
+ #end() {
57
+ const port = this.#port;
58
+ this.#port = undefined;
59
+ port?.removeListener("message", this.#onMessage);
60
+ port?.removeListener("disconnect", this.#onDisconnect);
61
+ this.ended();
62
+ }
63
+ }
64
+ //# sourceMappingURL=ipc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc.js","sourceRoot":"","sources":["../../../src/next/link/ipc.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,iFAAiF;AAEjF,OAAO,EAAa,OAAO,EAAE,MAAM,WAAW,CAAC;AAgB/C;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,IAAa;IACpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,OAAQ,SAAQ,OAAO;IAC5B,uCAAuC;IACvC,KAAK,CAAsB;IAClB,UAAU,GAAG,CAAC,OAAgB,EAAQ,EAAE;QAChD,IAAI,OAAO,YAAY,UAAU;YAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC;IACO,aAAa,GAAG,GAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAChD,IAAI,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC,CAAC;IAEF,YAAY,IAAa;QACxB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;QACR,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,OAAmB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO;QAC/B,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;IACF,CAAC;IAED,KAAK;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,oEAAoE;QACpE,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAED,kDAAkD;IAClD,IAAI;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,EAAE,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,EAAE,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;CACD","sourcesContent":["// IPC links (§3): a link over a Node IPC channel, a forked child (`fork` with `serialization: \"advanced\"`) or\n// `process` in the child, typed structurally so Chord imports nothing from Node.\n\nimport { type Link, LinkEnd } from \"./link.ts\";\n\n/**\n * The part of a Node IPC channel a link uses: a `ChildProcess` or the child's `process`. `send` returning `false` is\n * backpressure (the message is queued by Node), not a failure.\n */\nexport interface IpcPort {\n\tsend(message: Uint8Array, callback: (error: Error | null) => void): boolean;\n\ton(event: \"message\", listener: (message: unknown) => void): unknown;\n\ton(event: \"disconnect\", listener: () => void): unknown;\n\tremoveListener(event: \"message\", listener: (message: unknown) => void): unknown;\n\tremoveListener(event: \"disconnect\", listener: () => void): unknown;\n\tdisconnect(): void;\n\treadonly connected: boolean;\n}\n\n/**\n * A link over `port`: each message one `Uint8Array` (V8 serialization keeps it one). It listens from the moment it is\n * made and queues messages until its listener is set, so a child makes it before awaiting its start message; messages\n * that are no `Uint8Array` (the app's own, such as that start message) are not the link's and are skipped. A thrown\n * `send`, an error in its callback or `disconnect` closes the link once; its listeners are removed then.\n */\nexport function ipcLink(port: IpcPort): Link {\n\treturn new IpcLink(port);\n}\n\nclass IpcLink extends LinkEnd {\n\t/** The port while the link is open. */\n\t#port: IpcPort | undefined;\n\treadonly #onMessage = (message: unknown): void => {\n\t\tif (message instanceof Uint8Array) this.deliver(message);\n\t};\n\treadonly #onDisconnect = (): void => this.#end();\n\treadonly #onSent = (error: Error | null): void => {\n\t\tif (error !== null) this.#end();\n\t};\n\n\tconstructor(port: IpcPort) {\n\t\tsuper();\n\t\tthis.#port = port;\n\t\tif (!port.connected) {\n\t\t\tthis.#end();\n\t\t\treturn;\n\t\t}\n\t\tport.on(\"message\", this.#onMessage);\n\t\tport.on(\"disconnect\", this.#onDisconnect);\n\t}\n\n\tsend(message: Uint8Array): void {\n\t\tconst port = this.#port;\n\t\tif (port === undefined) return;\n\t\ttry {\n\t\t\tport.send(message, this.#onSent);\n\t\t} catch {\n\t\t\tthis.#end();\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tconst port = this.#port;\n\t\tif (port === undefined) return;\n\t\tthis.#end();\n\t\t// Disconnecting a channel that is gone already would emit an error.\n\t\tif (port.connected) port.disconnect();\n\t}\n\n\t/** Detaches from the port and closes this end. */\n\t#end(): void {\n\t\tconst port = this.#port;\n\t\tthis.#port = undefined;\n\t\tport?.removeListener(\"message\", this.#onMessage);\n\t\tport?.removeListener(\"disconnect\", this.#onDisconnect);\n\t\tthis.ended();\n\t}\n}\n"]}