@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,164 @@
1
+ // Parts on links (R1, R2, Q2, §22): a value as it crosses a link (JSON text at its origin, its bytes once received, or
2
+ // deflated by its origin), the size limits per part, compression at the origin, and opening a part where it is owned:
3
+ // its size checked before anything is parsed or inflated, a deflated part inflated within the decoded limit.
4
+ import { ChordError } from "../data/index.js";
5
+ /**
6
+ * A JSON part deflated (raw deflate) by its origin. A host without a synchronous compressor inflates it before its
7
+ * owner handles the message (`inflateAsync`) and keeps the outcome here for the owner to open.
8
+ */
9
+ export class DeflatedPart {
10
+ bytes;
11
+ /** The asynchronous inflate's outcome; `undefined` until one ran. */
12
+ inflated;
13
+ constructor(bytes) {
14
+ this.bytes = bytes;
15
+ }
16
+ }
17
+ const MiB = 1024 * 1024;
18
+ /** The limits of untrusted links unless set (Q2); trusted links (IPC) have none. */
19
+ const UNTRUSTED = { part: 16 * MiB, decoded: 64 * MiB };
20
+ const NONE = { part: Number.POSITIVE_INFINITY, decoded: Number.POSITIVE_INFINITY };
21
+ /** The limits of a link: the ones set, the defaults of its trust for the others. */
22
+ export function linkLimits(trusted, limits = {}) {
23
+ const defaults = trusted ? NONE : UNTRUSTED;
24
+ return { part: limits.part ?? defaults.part, decoded: limits.decoded ?? defaults.decoded };
25
+ }
26
+ /** JSON parts above this many UTF-8 bytes are compressed at their origin (a protocol constant). */
27
+ export const COMPRESS_ABOVE = 16 * 1024;
28
+ const UTF8 = new TextEncoder();
29
+ /**
30
+ * A JSON part at its origin: deflated when the host compresses, its UTF-8 bytes are above `COMPRESS_ABOVE` and
31
+ * deflating made it smaller; otherwise the text, or its bytes once they were encoded (never encoded twice). Counts one
32
+ * deflate (`chord.link.deflates`).
33
+ */
34
+ export function originPart(json, compression, context) {
35
+ // A UTF-16 unit is at most three UTF-8 bytes: a text this short is within the threshold without encoding it.
36
+ if (compression === undefined || json.length * 3 <= COMPRESS_ABOVE)
37
+ return json;
38
+ const bytes = UTF8.encode(json);
39
+ if (bytes.byteLength <= COMPRESS_ABOVE)
40
+ return bytes;
41
+ context.telemetry.metrics?.counter("chord.link.deflates").add(1);
42
+ const deflated = compression.deflate(bytes);
43
+ return deflated.byteLength < bytes.byteLength ? new DeflatedPart(deflated) : bytes;
44
+ }
45
+ /**
46
+ * The `too_large/part` error of a part whose size on the wire (its UTF-8 bytes; a deflated part's deflated bytes) is
47
+ * above `limit`; `undefined` within it. Nothing is parsed or inflated.
48
+ */
49
+ export function oversized(part, limit) {
50
+ if (limit === Number.POSITIVE_INFINITY)
51
+ return undefined;
52
+ const size = sizeOf(part);
53
+ return size > limit ? tooLarge(size, limit, "wire") : undefined;
54
+ }
55
+ /**
56
+ * The JSON of a part its owner is about to parse: its size checked against `limits.part` first, then its decoded size
57
+ * against `limits.decoded`, a deflated part inflated within it (synchronously with `compression`, or by the
58
+ * asynchronous inflate that ran ahead of its owner). Throws `too_large/part` past a limit; throws a plain error for a
59
+ * deflated part nothing inflated or that is no raw deflate stream (a protocol error). Counts one synchronous inflate
60
+ * (`chord.link.inflates`).
61
+ */
62
+ export function openPart(part, limits, compression, context) {
63
+ const wire = oversized(part, limits.part);
64
+ if (wire !== undefined)
65
+ throw wire;
66
+ if (!(part instanceof DeflatedPart)) {
67
+ // Not deflated: its decoded size is its size.
68
+ const size = limits.decoded === Number.POSITIVE_INFINITY ? 0 : sizeOf(part);
69
+ if (size > limits.decoded)
70
+ throw tooLarge(size, limits.decoded, "decoded");
71
+ return part;
72
+ }
73
+ let inflated = part.inflated;
74
+ if (inflated === undefined) {
75
+ if (compression === undefined)
76
+ throw new Error("part: a deflated part this host did not inflate");
77
+ context.telemetry.metrics?.counter("chord.link.inflates").add(1);
78
+ inflated = compression.inflate(part.bytes, limits.decoded);
79
+ }
80
+ switch (inflated.kind) {
81
+ case "bytes":
82
+ return inflated.bytes;
83
+ case "too_large":
84
+ throw tooLarge(undefined, limits.decoded, "decoded");
85
+ case "corrupt":
86
+ throw new Error("part: no raw deflate stream", { cause: inflated.error });
87
+ }
88
+ }
89
+ /**
90
+ * Inflates `part` with the web `DecompressionStream` (a host without a synchronous compressor), counting output bytes
91
+ * and stopping past `limit`; the outcome is kept on the part. `signal` (the link's close) cancels the stream at once,
92
+ * leaving no outcome. Counts one inflate (`chord.link.inflates`).
93
+ */
94
+ export async function inflateAsync(part, limit, signal, context) {
95
+ context.telemetry.metrics?.counter("chord.link.inflates").add(1);
96
+ const reader = new Blob([part.bytes])
97
+ .stream()
98
+ .pipeThrough(new DecompressionStream("deflate-raw"))
99
+ .getReader();
100
+ // A pending read settles once cancelled: nothing of the stream outlives the link.
101
+ const cancel = () => void reader.cancel().catch(() => { });
102
+ signal.addEventListener("abort", cancel, { once: true });
103
+ const chunks = [];
104
+ let length = 0;
105
+ try {
106
+ for (;;) {
107
+ const { done, value } = await reader.read();
108
+ if (done || signal.aborted)
109
+ break;
110
+ length += value.byteLength;
111
+ if (length > limit) {
112
+ cancel();
113
+ part.inflated = { kind: "too_large" };
114
+ return;
115
+ }
116
+ chunks.push(value);
117
+ }
118
+ }
119
+ catch (error) {
120
+ if (!signal.aborted)
121
+ part.inflated = { kind: "corrupt", error };
122
+ return;
123
+ }
124
+ finally {
125
+ signal.removeEventListener("abort", cancel);
126
+ }
127
+ if (signal.aborted)
128
+ return;
129
+ const bytes = new Uint8Array(length);
130
+ let offset = 0;
131
+ for (const chunk of chunks) {
132
+ bytes.set(chunk, offset);
133
+ offset += chunk.byteLength;
134
+ }
135
+ part.inflated = { kind: "bytes", bytes };
136
+ }
137
+ /** A part's size on the wire: its UTF-8 bytes (counted for text, without encoding it). */
138
+ function sizeOf(part) {
139
+ if (typeof part !== "string")
140
+ return part instanceof DeflatedPart ? part.bytes.byteLength : part.byteLength;
141
+ let size = part.length;
142
+ for (let index = 0; index < part.length; index++) {
143
+ const unit = part.charCodeAt(index);
144
+ if (unit < 0x80)
145
+ continue;
146
+ if (unit < 0x800)
147
+ size += 1;
148
+ else if (unit >= 0xd800 && unit < 0xdc00 && (part.charCodeAt(index + 1) & 0xfc00) === 0xdc00) {
149
+ // A surrogate pair: four bytes for two units.
150
+ size += 2;
151
+ index++;
152
+ }
153
+ else
154
+ size += 2;
155
+ }
156
+ return size;
157
+ }
158
+ /** The error of a part past a limit (`size` unknown while inflating). */
159
+ function tooLarge(size, limit, measure) {
160
+ const what = size === undefined ? "a part" : `a part of ${size} bytes`;
161
+ const message = `${what} is over the ${measure} limit of ${limit} bytes`;
162
+ return new ChordError({ code: "too_large", reason: "part", message });
163
+ }
164
+ //# sourceMappingURL=part.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part.js","sourceRoot":"","sources":["../../../src/next/link/part.ts"],"names":[],"mappings":"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","sourcesContent":["// Parts on links (R1, R2, Q2, §22): a value as it crosses a link (JSON text at its origin, its bytes once received, or\n// deflated by its origin), the size limits per part, compression at the origin, and opening a part where it is owned:\n// its size checked before anything is parsed or inflated, a deflated part inflated within the decoded limit.\n\nimport type { Context } from \"../../context/index.ts\";\nimport { ChordError } from \"../data/index.ts\";\n\n/**\n * A part (R1): a value as JSON text at its origin (and after a text decode), its UTF-8 bytes once a binary codec\n * received it (or at an origin that encoded it already), or those bytes deflated by an origin that compresses. Opaque\n * on the way: only the end that owns it opens and parses it, while handling its message (a malformed part is a protocol\n * error then), so a relay forwards it unparsed and still deflated.\n */\nexport type Part = string | Uint8Array | DeflatedPart;\n\n/** What inflating a deflated part gave: its JSON bytes, more than the decoded limit, or data that is no raw deflate. */\nexport type Inflated =\n\t| { readonly kind: \"bytes\"; readonly bytes: Uint8Array }\n\t| { readonly kind: \"too_large\" }\n\t| { readonly kind: \"corrupt\"; readonly error: unknown };\n\n/**\n * A JSON part deflated (raw deflate) by its origin. A host without a synchronous compressor inflates it before its\n * owner handles the message (`inflateAsync`) and keeps the outcome here for the owner to open.\n */\nexport class DeflatedPart {\n\treadonly bytes: Uint8Array;\n\t/** The asynchronous inflate's outcome; `undefined` until one ran. */\n\tinflated: Inflated | undefined;\n\n\tconstructor(bytes: Uint8Array) {\n\t\tthis.bytes = bytes;\n\t}\n}\n\n/**\n * A synchronous compressor (`createHost({ compression })`; `nodeCompression` for Node). `deflate` is raw deflate at\n * level 1. `inflate` gives at most `limit` bytes (`Infinity`: no limit; 0 allowed), `too_large` when the output would\n * be larger, `corrupt` for data that is no raw deflate stream.\n */\nexport interface Compression {\n\tdeflate(bytes: Uint8Array): Uint8Array;\n\tinflate(bytes: Uint8Array, limit: number): Inflated;\n}\n\n/** A link's limits per part as `accept`, `connect` and `resolve` take them, in bytes. */\nexport type PartLimits = {\n\t/** A part's size on the wire. */\n\treadonly part?: number;\n\t/** A part's size after inflating it. */\n\treadonly decoded?: number;\n};\n\n/** A link's limits in force; `Infinity` for none. */\nexport type Limits = { readonly part: number; readonly decoded: number };\n\nconst MiB = 1024 * 1024;\n\n/** The limits of untrusted links unless set (Q2); trusted links (IPC) have none. */\nconst UNTRUSTED: Limits = { part: 16 * MiB, decoded: 64 * MiB };\n\nconst NONE: Limits = { part: Number.POSITIVE_INFINITY, decoded: Number.POSITIVE_INFINITY };\n\n/** The limits of a link: the ones set, the defaults of its trust for the others. */\nexport function linkLimits(trusted: boolean, limits: PartLimits = {}): Limits {\n\tconst defaults = trusted ? NONE : UNTRUSTED;\n\treturn { part: limits.part ?? defaults.part, decoded: limits.decoded ?? defaults.decoded };\n}\n\n/** JSON parts above this many UTF-8 bytes are compressed at their origin (a protocol constant). */\nexport const COMPRESS_ABOVE = 16 * 1024;\n\nconst UTF8 = new TextEncoder();\n\n/**\n * A JSON part at its origin: deflated when the host compresses, its UTF-8 bytes are above `COMPRESS_ABOVE` and\n * deflating made it smaller; otherwise the text, or its bytes once they were encoded (never encoded twice). Counts one\n * deflate (`chord.link.deflates`).\n */\nexport function originPart(json: string, compression: Compression | undefined, context: Context): Part {\n\t// A UTF-16 unit is at most three UTF-8 bytes: a text this short is within the threshold without encoding it.\n\tif (compression === undefined || json.length * 3 <= COMPRESS_ABOVE) return json;\n\tconst bytes = UTF8.encode(json);\n\tif (bytes.byteLength <= COMPRESS_ABOVE) return bytes;\n\tcontext.telemetry.metrics?.counter(\"chord.link.deflates\").add(1);\n\tconst deflated = compression.deflate(bytes);\n\treturn deflated.byteLength < bytes.byteLength ? new DeflatedPart(deflated) : bytes;\n}\n\n/**\n * The `too_large/part` error of a part whose size on the wire (its UTF-8 bytes; a deflated part's deflated bytes) is\n * above `limit`; `undefined` within it. Nothing is parsed or inflated.\n */\nexport function oversized(part: Part, limit: number): ChordError | undefined {\n\tif (limit === Number.POSITIVE_INFINITY) return undefined;\n\tconst size = sizeOf(part);\n\treturn size > limit ? tooLarge(size, limit, \"wire\") : undefined;\n}\n\n/**\n * The JSON of a part its owner is about to parse: its size checked against `limits.part` first, then its decoded size\n * against `limits.decoded`, a deflated part inflated within it (synchronously with `compression`, or by the\n * asynchronous inflate that ran ahead of its owner). Throws `too_large/part` past a limit; throws a plain error for a\n * deflated part nothing inflated or that is no raw deflate stream (a protocol error). Counts one synchronous inflate\n * (`chord.link.inflates`).\n */\nexport function openPart(\n\tpart: Part,\n\tlimits: Limits,\n\tcompression: Compression | undefined,\n\tcontext: Context,\n): string | Uint8Array {\n\tconst wire = oversized(part, limits.part);\n\tif (wire !== undefined) throw wire;\n\tif (!(part instanceof DeflatedPart)) {\n\t\t// Not deflated: its decoded size is its size.\n\t\tconst size = limits.decoded === Number.POSITIVE_INFINITY ? 0 : sizeOf(part);\n\t\tif (size > limits.decoded) throw tooLarge(size, limits.decoded, \"decoded\");\n\t\treturn part;\n\t}\n\tlet inflated = part.inflated;\n\tif (inflated === undefined) {\n\t\tif (compression === undefined) throw new Error(\"part: a deflated part this host did not inflate\");\n\t\tcontext.telemetry.metrics?.counter(\"chord.link.inflates\").add(1);\n\t\tinflated = compression.inflate(part.bytes, limits.decoded);\n\t}\n\tswitch (inflated.kind) {\n\t\tcase \"bytes\":\n\t\t\treturn inflated.bytes;\n\t\tcase \"too_large\":\n\t\t\tthrow tooLarge(undefined, limits.decoded, \"decoded\");\n\t\tcase \"corrupt\":\n\t\t\tthrow new Error(\"part: no raw deflate stream\", { cause: inflated.error });\n\t}\n}\n\n/**\n * Inflates `part` with the web `DecompressionStream` (a host without a synchronous compressor), counting output bytes\n * and stopping past `limit`; the outcome is kept on the part. `signal` (the link's close) cancels the stream at once,\n * leaving no outcome. Counts one inflate (`chord.link.inflates`).\n */\nexport async function inflateAsync(\n\tpart: DeflatedPart,\n\tlimit: number,\n\tsignal: AbortSignal,\n\tcontext: Context,\n): Promise<void> {\n\tcontext.telemetry.metrics?.counter(\"chord.link.inflates\").add(1);\n\tconst reader = new Blob([part.bytes as Uint8Array<ArrayBuffer>])\n\t\t.stream()\n\t\t.pipeThrough(new DecompressionStream(\"deflate-raw\"))\n\t\t.getReader();\n\t// A pending read settles once cancelled: nothing of the stream outlives the link.\n\tconst cancel = (): void => void reader.cancel().catch(() => {});\n\tsignal.addEventListener(\"abort\", cancel, { once: true });\n\tconst chunks: Uint8Array[] = [];\n\tlet length = 0;\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done || signal.aborted) break;\n\t\t\tlength += value.byteLength;\n\t\t\tif (length > limit) {\n\t\t\t\tcancel();\n\t\t\t\tpart.inflated = { kind: \"too_large\" };\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tchunks.push(value);\n\t\t}\n\t} catch (error) {\n\t\tif (!signal.aborted) part.inflated = { kind: \"corrupt\", error };\n\t\treturn;\n\t} finally {\n\t\tsignal.removeEventListener(\"abort\", cancel);\n\t}\n\tif (signal.aborted) return;\n\tconst bytes = new Uint8Array(length);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tbytes.set(chunk, offset);\n\t\toffset += chunk.byteLength;\n\t}\n\tpart.inflated = { kind: \"bytes\", bytes };\n}\n\n/** A part's size on the wire: its UTF-8 bytes (counted for text, without encoding it). */\nfunction sizeOf(part: Part): number {\n\tif (typeof part !== \"string\") return part instanceof DeflatedPart ? part.bytes.byteLength : part.byteLength;\n\tlet size = part.length;\n\tfor (let index = 0; index < part.length; index++) {\n\t\tconst unit = part.charCodeAt(index);\n\t\tif (unit < 0x80) continue;\n\t\tif (unit < 0x800) size += 1;\n\t\telse if (unit >= 0xd800 && unit < 0xdc00 && (part.charCodeAt(index + 1) & 0xfc00) === 0xdc00) {\n\t\t\t// A surrogate pair: four bytes for two units.\n\t\t\tsize += 2;\n\t\t\tindex++;\n\t\t} else size += 2;\n\t}\n\treturn size;\n}\n\n/** The error of a part past a limit (`size` unknown while inflating). */\nfunction tooLarge(size: number | undefined, limit: number, measure: \"wire\" | \"decoded\"): ChordError {\n\tconst what = size === undefined ? \"a part\" : `a part of ${size} bytes`;\n\tconst message = `${what} is over the ${measure} limit of ${limit} bytes`;\n\treturn new ChordError({ code: \"too_large\", reason: \"part\", message });\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { type Codec, type Message } from "./message.ts";
2
+ /** Messages as JSON tuples: readable on the wire, for debugging links. */
3
+ export declare const textCodec: Codec;
4
+ /** A message in the text codec's tuple form, for logs and tests (byte segments show as `{"$bytes": i}`). */
5
+ export declare function describeMessage(message: Message): string;
6
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/next/link/text.ts"],"names":[],"mappings":"AAQA,OAAO,EAGN,KAAK,KAAK,EAEV,KAAK,OAAO,EAGZ,MAAM,cAAc,CAAC;AAMtB,0EAA0E;AAC1E,eAAO,MAAM,SAAS,EAAE,KA0BvB,CAAC;AAEF,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAExD"}
@@ -0,0 +1,335 @@
1
+ // The text codec (2b): one JSON tuple per message, Delta style (a short kind tag, positional fields, no field names),
2
+ // and `describeMessage`, which prints any message in that form. A part's JSON text is spliced into the tuple as it is;
3
+ // decoding parses the tuple and writes each part back as text (one parse per part per hop: a debugging codec). Byte
4
+ // segments of a payload marked as carrying bytes follow the tuple after a newline (JSON text never contains a raw
5
+ // one), their lengths the tuple's last field. A message with an origin is wrapped: `["@", origin, tuple]`. Every part
6
+ // is tagged with its codec, so no JSON value is reserved: `[0, json]`, or `[1, base64]` for a part its origin deflated
7
+ // (the text codec itself never compresses).
8
+ import { CAUSE_KINDS, NO_RETIRED, } from "./message.js";
9
+ import { parseJson, partText, textPart } from "./values.js";
10
+ const UTF8 = new TextEncoder();
11
+ /** Messages as JSON tuples: readable on the wire, for debugging links. */
12
+ export const textCodec = {
13
+ name: "text",
14
+ encode(message) {
15
+ const json = UTF8.encode(tuple(message));
16
+ const segments = segmentsOf(message);
17
+ if (segments === undefined)
18
+ return json;
19
+ let length = json.byteLength + 1;
20
+ for (const segment of segments)
21
+ length += segment.byteLength;
22
+ const bytes = new Uint8Array(length);
23
+ bytes.set(json, 0);
24
+ bytes[json.byteLength] = NEWLINE;
25
+ let offset = json.byteLength + 1;
26
+ for (const segment of segments) {
27
+ bytes.set(segment, offset);
28
+ offset += segment.byteLength;
29
+ }
30
+ return bytes;
31
+ },
32
+ decode(bytes) {
33
+ const newline = bytes.indexOf(NEWLINE);
34
+ const json = newline === -1 ? bytes : bytes.subarray(0, newline);
35
+ const rest = newline === -1 ? bytes.subarray(bytes.byteLength) : bytes.subarray(newline + 1);
36
+ const fields = parseJson(json);
37
+ if (!Array.isArray(fields))
38
+ throw new Error("text: a message is a tuple");
39
+ return fromTuple(fields, rest);
40
+ },
41
+ };
42
+ /** A message in the text codec's tuple form, for logs and tests (byte segments show as `{"$bytes": i}`). */
43
+ export function describeMessage(message) {
44
+ return tuple(message);
45
+ }
46
+ const NEWLINE = 0x0a;
47
+ /** The segments following a payload's tuple; `undefined` without a payload marked as carrying bytes. */
48
+ function segmentsOf(message) {
49
+ return message.kind === "call" || message.kind === "result" ? message.segments : undefined;
50
+ }
51
+ /** The tuple's JSON text, parts spliced in; wrapped with its origin when it has one. */
52
+ function tuple(message) {
53
+ const origin = "origin" in message ? message.origin : undefined;
54
+ return origin === undefined ? ownTuple(message) : `["@",${origin},${ownTuple(message)}]`;
55
+ }
56
+ /** The tuple of a message's own fields. */
57
+ function ownTuple(message) {
58
+ switch (message.kind) {
59
+ case "hello":
60
+ return json(["h", message.protocol, message.incarnation, message.calls]);
61
+ case "hold": {
62
+ const { address, principal, incarnation, chain, limit } = message;
63
+ const head = json(["H", message.hold, message.type, message.version, message.fingerprint]).slice(0, -1);
64
+ // Optional trailing fields: an absent one in the middle is null, absent ones at the end are left out.
65
+ const optional = [principal ?? null, incarnation ?? null, chain ?? null, limit ?? null];
66
+ while (optional.length > 0 && optional.at(-1) === null)
67
+ optional.pop();
68
+ const rest = optional.map((field) => `,${json(field)}`).join("");
69
+ return `${head},${partText(message.params)},${json([address.kind, address.params])}${rest}]`;
70
+ }
71
+ case "release":
72
+ return json(["R", message.hold]);
73
+ case "call":
74
+ return withPayload(json(["c", message.call, message.hold, message.method]), message.args, message.segments);
75
+ case "abort":
76
+ return json(["x", message.call]);
77
+ case "bound":
78
+ return `["b",[${message.holds.map(boundEntry).join(",")}]]`;
79
+ case "state":
80
+ return `["s",[${message.holds.map(stateEntry).join(",")}]]`;
81
+ case "failed": {
82
+ const kind = message.cause.kind[0];
83
+ const retryIn = message.retryIn === undefined ? [] : [message.retryIn];
84
+ return json(["f", message.hold, kind, message.cause.error, ...retryIn]);
85
+ }
86
+ case "result":
87
+ return withPayload(json(["r", message.call]), message.value, message.segments);
88
+ case "error":
89
+ return json(["e", message.call, message.error]);
90
+ case "gone":
91
+ return json(["g", message.hold, message.error]);
92
+ case "revoke":
93
+ return json(["V", message.revocation]);
94
+ case "retry":
95
+ return json(["T", message.hold, message.hops]);
96
+ case "loading":
97
+ return json(["l", message.hold]);
98
+ case "ack":
99
+ return json(["a"]);
100
+ case "closed":
101
+ return json(["C"]);
102
+ case "ping":
103
+ return json(["p"]);
104
+ case "pong":
105
+ return json(["P"]);
106
+ }
107
+ }
108
+ function json(value) {
109
+ return JSON.stringify(value);
110
+ }
111
+ /** `[hold, variant, [[member, value]…], failed?]`. */
112
+ function boundEntry({ hold, variant, members, failed }) {
113
+ const pairs = members.map(({ member, value }) => `[${member},${partText(value)}]`).join(",");
114
+ return `[${hold},${variant},[${pairs}]${failedField(failed)}]`;
115
+ }
116
+ /** `[hold, [[member, ops]…], failed?, retired?]`; `failed` is `[]` when only `retired` follows. */
117
+ function stateEntry({ hold, members, failed, retired }) {
118
+ const pairs = members.map(({ member, ops }) => `[${member},${partText(ops)}]`).join(",");
119
+ if (retired.length === 0)
120
+ return `[${hold},[${pairs}]${failedField(failed)}]`;
121
+ return `[${hold},[${pairs}],${json(failed.map(({ member, error }) => [member, error]))},${json(retired)}]`;
122
+ }
123
+ /** The failures as an entry's optional last field: left out when there are none. */
124
+ function failedField(failed) {
125
+ return failed.length === 0 ? "" : `,${json(failed.map(({ member, error }) => [member, error]))}`;
126
+ }
127
+ /**
128
+ * A tuple (its closed JSON `head`) ending in a payload part; one marked as carrying bytes adds the segments' lengths
129
+ * as the last field.
130
+ */
131
+ function withPayload(head, part, segments) {
132
+ if (part === undefined)
133
+ return head;
134
+ const prefix = `${head.slice(0, -1)},${partText(part)}`;
135
+ if (segments === undefined)
136
+ return `${prefix}]`;
137
+ return `${prefix},${json(segments.map((segment) => segment.byteLength))}]`;
138
+ }
139
+ /**
140
+ * A message from its tuple: the tag and arity checked, lists of pairs checked as lists, parts written back as text;
141
+ * the field types are the message schema's to check. `rest` holds the segments, which only a payload marked as
142
+ * carrying bytes may have.
143
+ */
144
+ function fromTuple(fields, rest) {
145
+ if (fields[0] !== "@")
146
+ return fromFields(fields, rest);
147
+ const inner = fields.length === 3 ? list(fields[2]) : [];
148
+ if (inner[0] === "@" || inner.length === 0)
149
+ throw new Error("text: an origin wraps one message");
150
+ const message = fromFields(inner, rest);
151
+ // A fresh object; the message schema checks the origin and refuses one on a kind without it.
152
+ message.origin = fields[1];
153
+ return message;
154
+ }
155
+ /** A message from its own fields' tuple (see `fromTuple`). */
156
+ function fromFields(fields, rest) {
157
+ const [tag, ...f] = fields;
158
+ const arity = (...allowed) => {
159
+ if (!allowed.includes(f.length))
160
+ throw new Error(`text: a "${String(tag)}" message with ${f.length} fields`);
161
+ };
162
+ if (tag !== "c" && tag !== "r" && rest.byteLength > 0) {
163
+ throw new Error("text: byte segments without a payload that carries them");
164
+ }
165
+ // The message schema establishes the types of the fields taken here.
166
+ const field = (index) => f[index];
167
+ switch (tag) {
168
+ case "h":
169
+ arity(3);
170
+ return { kind: "hello", protocol: field(0), incarnation: field(1), calls: field(2) };
171
+ case "H": {
172
+ arity(6, 7, 8, 9, 10);
173
+ const address = list(f[5]);
174
+ if (address.length !== 2)
175
+ throw new Error("text: an address is a pair");
176
+ const [principal, incarnation, chain, limit] = [6, 7, 8, 9].map((index) => f[index] ?? null);
177
+ return {
178
+ kind: "hold",
179
+ hold: field(0),
180
+ type: field(1),
181
+ version: field(2),
182
+ fingerprint: field(3),
183
+ params: textPart(f[4]),
184
+ address: { kind: address[0], params: address[1] },
185
+ ...(principal === null ? {} : { principal: principal }),
186
+ ...(incarnation === null ? {} : { incarnation: incarnation }),
187
+ ...(chain === null ? {} : { chain: chain }),
188
+ ...(limit === null ? {} : { limit: limit }),
189
+ };
190
+ }
191
+ case "R":
192
+ arity(1);
193
+ return { kind: "release", hold: field(0) };
194
+ case "c":
195
+ arity(3, 4, 5);
196
+ return {
197
+ kind: "call",
198
+ call: field(0),
199
+ hold: field(1),
200
+ method: field(2),
201
+ ...payload("args", f.slice(3), rest),
202
+ };
203
+ case "x":
204
+ arity(1);
205
+ return { kind: "abort", call: field(0) };
206
+ case "b":
207
+ arity(1);
208
+ return {
209
+ kind: "bound",
210
+ holds: list(f[0]).map((entry) => {
211
+ const fields = list(entry);
212
+ if (fields.length !== 3 && fields.length !== 4) {
213
+ throw new Error(`text: a bound entry with ${fields.length} fields`);
214
+ }
215
+ const [hold, variant, members, failed] = fields;
216
+ return {
217
+ hold: hold,
218
+ variant: variant,
219
+ members: pairs(members).map(([member, value]) => ({
220
+ member: member,
221
+ value: textPart(value),
222
+ })),
223
+ failed: failures(failed),
224
+ };
225
+ }),
226
+ };
227
+ case "s":
228
+ arity(1);
229
+ return {
230
+ kind: "state",
231
+ holds: list(f[0]).map((entry) => {
232
+ const fields = list(entry);
233
+ if (fields.length < 2 || fields.length > 4) {
234
+ throw new Error(`text: a state entry with ${fields.length} fields`);
235
+ }
236
+ const [hold, members, failed, retired] = fields;
237
+ return {
238
+ hold: hold,
239
+ members: pairs(members).map(([member, ops]) => ({ member: member, ops: textPart(ops) })),
240
+ failed: failures(failed),
241
+ // The message schema checks each index.
242
+ retired: retired === undefined ? NO_RETIRED : list(retired),
243
+ };
244
+ }),
245
+ };
246
+ case "f": {
247
+ arity(3, 4);
248
+ const causeKind = CAUSE_KINDS.find((each) => each[0] === f[1]);
249
+ if (causeKind === undefined)
250
+ throw new Error("text: an unknown failure kind");
251
+ // The schema check after decoding establishes the wire error.
252
+ const error = f[2];
253
+ const cause = { kind: causeKind, error };
254
+ return { kind: "failed", hold: field(0), cause, ...(f.length === 4 ? { retryIn: field(3) } : {}) };
255
+ }
256
+ case "r":
257
+ arity(1, 2, 3);
258
+ return { kind: "result", call: field(0), ...payload("value", f.slice(1), rest) };
259
+ case "e":
260
+ arity(2);
261
+ return { kind: "error", call: field(0), error: field(1) };
262
+ case "g":
263
+ arity(2);
264
+ return { kind: "gone", hold: field(0), error: field(1) };
265
+ case "V":
266
+ arity(1);
267
+ return { kind: "revoke", revocation: f[0] };
268
+ case "T":
269
+ arity(2);
270
+ return { kind: "retry", hold: field(0), hops: field(1) };
271
+ case "l":
272
+ arity(1);
273
+ return { kind: "loading", hold: field(0) };
274
+ case "a":
275
+ arity(0);
276
+ return { kind: "ack" };
277
+ case "C":
278
+ arity(0);
279
+ // Its origin is the wrapper's; 0 without one, which the message schema refuses.
280
+ return { kind: "closed", origin: 0 };
281
+ case "p":
282
+ arity(0);
283
+ return { kind: "ping" };
284
+ case "P":
285
+ arity(0);
286
+ return { kind: "pong" };
287
+ default:
288
+ throw new Error("text: an unknown kind");
289
+ }
290
+ }
291
+ /**
292
+ * A payload part from its fields: none, the value, or the value and its segments' lengths (marked as carrying bytes,
293
+ * the segments views of `rest`).
294
+ */
295
+ function payload(key, fields, rest) {
296
+ if (fields.length < 2) {
297
+ if (rest.byteLength > 0)
298
+ throw new Error("text: byte segments without a payload that carries them");
299
+ return (fields.length === 0 ? {} : { [key]: textPart(fields[0]) });
300
+ }
301
+ const lengths = list(fields[1]);
302
+ let offset = 0;
303
+ const segments = lengths.map((length) => {
304
+ if (!Number.isSafeInteger(length) || length < 0)
305
+ throw new Error("text: a segment length");
306
+ const segment = rest.subarray(offset, offset + length);
307
+ offset += length;
308
+ return segment;
309
+ });
310
+ if (offset !== rest.byteLength)
311
+ throw new Error("text: the segments do not fill the message");
312
+ return { [key]: textPart(fields[0]), segments };
313
+ }
314
+ function list(value) {
315
+ if (!Array.isArray(value))
316
+ throw new Error("text: expected a list");
317
+ return value;
318
+ }
319
+ /** A list of `[index, value]` pairs. */
320
+ function pairs(value) {
321
+ return list(value).map((pair) => {
322
+ const entry = list(pair);
323
+ if (entry.length !== 2)
324
+ throw new Error("text: expected a pair");
325
+ return entry;
326
+ });
327
+ }
328
+ /** The optional failures field; absent means none. */
329
+ function failures(value) {
330
+ if (value === undefined)
331
+ return [];
332
+ // The message schema checks each error's shape.
333
+ return pairs(value).map(([member, error]) => ({ member, error }));
334
+ }
335
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/next/link/text.ts"],"names":[],"mappings":"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","sourcesContent":["// The text codec (2b): one JSON tuple per message, Delta style (a short kind tag, positional fields, no field names),\n// and `describeMessage`, which prints any message in that form. A part's JSON text is spliced into the tuple as it is;\n// decoding parses the tuple and writes each part back as text (one parse per part per hop: a debugging codec). Byte\n// segments of a payload marked as carrying bytes follow the tuple after a newline (JSON text never contains a raw\n// one), their lengths the tuple's last field. A message with an origin is wrapped: `[\"@\", origin, tuple]`. Every part\n// is tagged with its codec, so no JSON value is reserved: `[0, json]`, or `[1, base64]` for a part its origin deflated\n// (the text codec itself never compresses).\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 type { Part } from \"./part.ts\";\nimport { parseJson, partText, textPart } from \"./values.ts\";\n\nconst UTF8 = new TextEncoder();\n\n/** Messages as JSON tuples: readable on the wire, for debugging links. */\nexport const textCodec: Codec = {\n\tname: \"text\",\n\tencode(message) {\n\t\tconst json = UTF8.encode(tuple(message));\n\t\tconst segments = segmentsOf(message);\n\t\tif (segments === undefined) return json;\n\t\tlet length = json.byteLength + 1;\n\t\tfor (const segment of segments) length += segment.byteLength;\n\t\tconst bytes = new Uint8Array(length);\n\t\tbytes.set(json, 0);\n\t\tbytes[json.byteLength] = NEWLINE;\n\t\tlet offset = json.byteLength + 1;\n\t\tfor (const segment of segments) {\n\t\t\tbytes.set(segment, offset);\n\t\t\toffset += segment.byteLength;\n\t\t}\n\t\treturn bytes;\n\t},\n\tdecode(bytes) {\n\t\tconst newline = bytes.indexOf(NEWLINE);\n\t\tconst json = newline === -1 ? bytes : bytes.subarray(0, newline);\n\t\tconst rest = newline === -1 ? bytes.subarray(bytes.byteLength) : bytes.subarray(newline + 1);\n\t\tconst fields = parseJson(json);\n\t\tif (!Array.isArray(fields)) throw new Error(\"text: a message is a tuple\");\n\t\treturn fromTuple(fields, rest);\n\t},\n};\n\n/** A message in the text codec's tuple form, for logs and tests (byte segments show as `{\"$bytes\": i}`). */\nexport function describeMessage(message: Message): string {\n\treturn tuple(message);\n}\n\nconst NEWLINE = 0x0a;\n\n/** The segments following a payload's tuple; `undefined` without a payload marked as carrying bytes. */\nfunction segmentsOf(message: Message): readonly Uint8Array[] | undefined {\n\treturn message.kind === \"call\" || message.kind === \"result\" ? message.segments : undefined;\n}\n\n/** The tuple's JSON text, parts spliced in; wrapped with its origin when it has one. */\nfunction tuple(message: Message): string {\n\tconst origin = \"origin\" in message ? message.origin : undefined;\n\treturn origin === undefined ? ownTuple(message) : `[\"@\",${origin},${ownTuple(message)}]`;\n}\n\n/** The tuple of a message's own fields. */\nfunction ownTuple(message: Message): string {\n\tswitch (message.kind) {\n\t\tcase \"hello\":\n\t\t\treturn json([\"h\", message.protocol, message.incarnation, message.calls]);\n\t\tcase \"hold\": {\n\t\t\tconst { address, principal, incarnation, chain, limit } = message;\n\t\t\tconst head = json([\"H\", message.hold, message.type, message.version, message.fingerprint]).slice(0, -1);\n\t\t\t// Optional trailing fields: an absent one in the middle is null, absent ones at the end are left out.\n\t\t\tconst optional = [principal ?? null, incarnation ?? null, chain ?? null, limit ?? null];\n\t\t\twhile (optional.length > 0 && optional.at(-1) === null) optional.pop();\n\t\t\tconst rest = optional.map((field) => `,${json(field)}`).join(\"\");\n\t\t\treturn `${head},${partText(message.params)},${json([address.kind, address.params])}${rest}]`;\n\t\t}\n\t\tcase \"release\":\n\t\t\treturn json([\"R\", message.hold]);\n\t\tcase \"call\":\n\t\t\treturn withPayload(json([\"c\", message.call, message.hold, message.method]), message.args, message.segments);\n\t\tcase \"abort\":\n\t\t\treturn json([\"x\", message.call]);\n\t\tcase \"bound\":\n\t\t\treturn `[\"b\",[${message.holds.map(boundEntry).join(\",\")}]]`;\n\t\tcase \"state\":\n\t\t\treturn `[\"s\",[${message.holds.map(stateEntry).join(\",\")}]]`;\n\t\tcase \"failed\": {\n\t\t\tconst kind = message.cause.kind[0];\n\t\t\tconst retryIn = message.retryIn === undefined ? [] : [message.retryIn];\n\t\t\treturn json([\"f\", message.hold, kind, message.cause.error, ...retryIn]);\n\t\t}\n\t\tcase \"result\":\n\t\t\treturn withPayload(json([\"r\", message.call]), message.value, message.segments);\n\t\tcase \"error\":\n\t\t\treturn json([\"e\", message.call, message.error]);\n\t\tcase \"gone\":\n\t\t\treturn json([\"g\", message.hold, message.error]);\n\t\tcase \"revoke\":\n\t\t\treturn json([\"V\", message.revocation]);\n\t\tcase \"retry\":\n\t\t\treturn json([\"T\", message.hold, message.hops]);\n\t\tcase \"loading\":\n\t\t\treturn json([\"l\", message.hold]);\n\t\tcase \"ack\":\n\t\t\treturn json([\"a\"]);\n\t\tcase \"closed\":\n\t\t\treturn json([\"C\"]);\n\t\tcase \"ping\":\n\t\t\treturn json([\"p\"]);\n\t\tcase \"pong\":\n\t\t\treturn json([\"P\"]);\n\t}\n}\n\nfunction json(value: unknown): string {\n\treturn JSON.stringify(value);\n}\n\n/** `[hold, variant, [[member, value]…], failed?]`. */\nfunction boundEntry({ hold, variant, members, failed }: BoundEntry): string {\n\tconst pairs = members.map(({ member, value }) => `[${member},${partText(value)}]`).join(\",\");\n\treturn `[${hold},${variant},[${pairs}]${failedField(failed)}]`;\n}\n\n/** `[hold, [[member, ops]…], failed?, retired?]`; `failed` is `[]` when only `retired` follows. */\nfunction stateEntry({ hold, members, failed, retired }: StateEntry): string {\n\tconst pairs = members.map(({ member, ops }) => `[${member},${partText(ops)}]`).join(\",\");\n\tif (retired.length === 0) return `[${hold},[${pairs}]${failedField(failed)}]`;\n\treturn `[${hold},[${pairs}],${json(failed.map(({ member, error }) => [member, error]))},${json(retired)}]`;\n}\n\n/** The failures as an entry's optional last field: left out when there are none. */\nfunction failedField(failed: readonly FailedMember[]): string {\n\treturn failed.length === 0 ? \"\" : `,${json(failed.map(({ member, error }) => [member, error]))}`;\n}\n\n/**\n * A tuple (its closed JSON `head`) ending in a payload part; one marked as carrying bytes adds the segments' lengths\n * as the last field.\n */\nfunction withPayload(head: string, part: Part | undefined, segments: readonly Uint8Array[] | undefined): string {\n\tif (part === undefined) return head;\n\tconst prefix = `${head.slice(0, -1)},${partText(part)}`;\n\tif (segments === undefined) return `${prefix}]`;\n\treturn `${prefix},${json(segments.map((segment) => segment.byteLength))}]`;\n}\n\n/**\n * A message from its tuple: the tag and arity checked, lists of pairs checked as lists, parts written back as text;\n * the field types are the message schema's to check. `rest` holds the segments, which only a payload marked as\n * carrying bytes may have.\n */\nfunction fromTuple(fields: unknown[], rest: Uint8Array): Message {\n\tif (fields[0] !== \"@\") return fromFields(fields, rest);\n\tconst inner = fields.length === 3 ? list(fields[2]) : [];\n\tif (inner[0] === \"@\" || inner.length === 0) throw new Error(\"text: an origin wraps one message\");\n\tconst message = fromFields(inner, rest);\n\t// A fresh object; the message schema checks the origin and refuses one on a kind without it.\n\t(message as { origin?: unknown }).origin = fields[1];\n\treturn message;\n}\n\n/** A message from its own fields' tuple (see `fromTuple`). */\nfunction fromFields(fields: unknown[], rest: Uint8Array): Message {\n\tconst [tag, ...f] = fields;\n\tconst arity = (...allowed: number[]): void => {\n\t\tif (!allowed.includes(f.length)) throw new Error(`text: a \"${String(tag)}\" message with ${f.length} fields`);\n\t};\n\tif (tag !== \"c\" && tag !== \"r\" && rest.byteLength > 0) {\n\t\tthrow new Error(\"text: byte segments without a payload that carries them\");\n\t}\n\t// The message schema establishes the types of the fields taken here.\n\tconst field = <T>(index: number): T => f[index] as T;\n\tswitch (tag) {\n\t\tcase \"h\":\n\t\t\tarity(3);\n\t\t\treturn { kind: \"hello\", protocol: field(0), incarnation: field(1), calls: field(2) };\n\t\tcase \"H\": {\n\t\t\tarity(6, 7, 8, 9, 10);\n\t\t\tconst address = list(f[5]);\n\t\t\tif (address.length !== 2) throw new Error(\"text: an address is a pair\");\n\t\t\tconst [principal, incarnation, chain, limit] = [6, 7, 8, 9].map((index) => f[index] ?? null);\n\t\t\treturn {\n\t\t\t\tkind: \"hold\",\n\t\t\t\thold: field(0),\n\t\t\t\ttype: field(1),\n\t\t\t\tversion: field(2),\n\t\t\t\tfingerprint: field(3),\n\t\t\t\tparams: textPart(f[4]),\n\t\t\t\taddress: { kind: address[0] as string, params: address[1] },\n\t\t\t\t...(principal === null ? {} : { principal: principal as { kind: string } }),\n\t\t\t\t...(incarnation === null ? {} : { incarnation: incarnation as string }),\n\t\t\t\t...(chain === null ? {} : { chain: chain as string[] }),\n\t\t\t\t...(limit === null ? {} : { limit: limit as number }),\n\t\t\t};\n\t\t}\n\t\tcase \"R\":\n\t\t\tarity(1);\n\t\t\treturn { kind: \"release\", hold: field(0) };\n\t\tcase \"c\":\n\t\t\tarity(3, 4, 5);\n\t\t\treturn {\n\t\t\t\tkind: \"call\",\n\t\t\t\tcall: field(0),\n\t\t\t\thold: field(1),\n\t\t\t\tmethod: field(2),\n\t\t\t\t...payload(\"args\", f.slice(3), rest),\n\t\t\t};\n\t\tcase \"x\":\n\t\t\tarity(1);\n\t\t\treturn { kind: \"abort\", call: field(0) };\n\t\tcase \"b\":\n\t\t\tarity(1);\n\t\t\treturn {\n\t\t\t\tkind: \"bound\",\n\t\t\t\tholds: list(f[0]).map((entry): BoundEntry => {\n\t\t\t\t\tconst fields = list(entry);\n\t\t\t\t\tif (fields.length !== 3 && fields.length !== 4) {\n\t\t\t\t\t\tthrow new Error(`text: a bound entry with ${fields.length} fields`);\n\t\t\t\t\t}\n\t\t\t\t\tconst [hold, variant, members, failed] = fields;\n\t\t\t\t\treturn {\n\t\t\t\t\t\thold: hold as number,\n\t\t\t\t\t\tvariant: variant as number,\n\t\t\t\t\t\tmembers: pairs(members).map(([member, value]) => ({\n\t\t\t\t\t\t\tmember: member as number,\n\t\t\t\t\t\t\tvalue: textPart(value),\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tfailed: failures(failed),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t};\n\t\tcase \"s\":\n\t\t\tarity(1);\n\t\t\treturn {\n\t\t\t\tkind: \"state\",\n\t\t\t\tholds: list(f[0]).map((entry): StateEntry => {\n\t\t\t\t\tconst fields = list(entry);\n\t\t\t\t\tif (fields.length < 2 || fields.length > 4) {\n\t\t\t\t\t\tthrow new Error(`text: a state entry with ${fields.length} fields`);\n\t\t\t\t\t}\n\t\t\t\t\tconst [hold, members, failed, retired] = fields;\n\t\t\t\t\treturn {\n\t\t\t\t\t\thold: hold as number,\n\t\t\t\t\t\tmembers: pairs(members).map(([member, ops]) => ({ member: member as number, ops: textPart(ops) })),\n\t\t\t\t\t\tfailed: failures(failed),\n\t\t\t\t\t\t// The message schema checks each index.\n\t\t\t\t\t\tretired: retired === undefined ? NO_RETIRED : (list(retired) as number[]),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t};\n\t\tcase \"f\": {\n\t\t\tarity(3, 4);\n\t\t\tconst causeKind = CAUSE_KINDS.find((each) => each[0] === f[1]);\n\t\t\tif (causeKind === undefined) throw new Error(\"text: an unknown failure kind\");\n\t\t\t// The schema check after decoding establishes the wire error.\n\t\t\tconst error = f[2] as Extract<Message, { kind: \"error\" }>[\"error\"];\n\t\t\tconst cause = { kind: causeKind, error };\n\t\t\treturn { kind: \"failed\", hold: field(0), cause, ...(f.length === 4 ? { retryIn: field<number>(3) } : {}) };\n\t\t}\n\t\tcase \"r\":\n\t\t\tarity(1, 2, 3);\n\t\t\treturn { kind: \"result\", call: field(0), ...payload(\"value\", f.slice(1), rest) };\n\t\tcase \"e\":\n\t\t\tarity(2);\n\t\t\treturn { kind: \"error\", call: field(0), error: field(1) };\n\t\tcase \"g\":\n\t\t\tarity(2);\n\t\t\treturn { kind: \"gone\", hold: field(0), error: field(1) };\n\t\tcase \"V\":\n\t\t\tarity(1);\n\t\t\treturn { kind: \"revoke\", revocation: f[0] };\n\t\tcase \"T\":\n\t\t\tarity(2);\n\t\t\treturn { kind: \"retry\", hold: field(0), hops: field(1) };\n\t\tcase \"l\":\n\t\t\tarity(1);\n\t\t\treturn { kind: \"loading\", hold: field(0) };\n\t\tcase \"a\":\n\t\t\tarity(0);\n\t\t\treturn { kind: \"ack\" };\n\t\tcase \"C\":\n\t\t\tarity(0);\n\t\t\t// Its origin is the wrapper's; 0 without one, which the message schema refuses.\n\t\t\treturn { kind: \"closed\", origin: 0 };\n\t\tcase \"p\":\n\t\t\tarity(0);\n\t\t\treturn { kind: \"ping\" };\n\t\tcase \"P\":\n\t\t\tarity(0);\n\t\t\treturn { kind: \"pong\" };\n\t\tdefault:\n\t\t\tthrow new Error(\"text: an unknown kind\");\n\t}\n}\n\n/**\n * A payload part from its fields: none, the value, or the value and its segments' lengths (marked as carrying bytes,\n * the segments views of `rest`).\n */\nfunction payload<K extends string>(\n\tkey: K,\n\tfields: unknown[],\n\trest: Uint8Array,\n): { [P in K]?: Part } & { segments?: Uint8Array[] } {\n\tif (fields.length < 2) {\n\t\tif (rest.byteLength > 0) throw new Error(\"text: byte segments without a payload that carries them\");\n\t\treturn (fields.length === 0 ? {} : { [key]: textPart(fields[0]) }) as { [P in K]?: Part };\n\t}\n\tconst lengths = list(fields[1]);\n\tlet offset = 0;\n\tconst segments = lengths.map((length) => {\n\t\tif (!Number.isSafeInteger(length) || (length as number) < 0) throw new Error(\"text: a segment length\");\n\t\tconst segment = rest.subarray(offset, offset + (length as number));\n\t\toffset += length as number;\n\t\treturn segment;\n\t});\n\tif (offset !== rest.byteLength) throw new Error(\"text: the segments do not fill the message\");\n\treturn { [key]: textPart(fields[0]), segments } as { [P in K]?: Part } & { segments: Uint8Array[] };\n}\n\nfunction list(value: unknown): unknown[] {\n\tif (!Array.isArray(value)) throw new Error(\"text: expected a list\");\n\treturn value;\n}\n\n/** A list of `[index, value]` pairs. */\nfunction pairs(value: unknown): [unknown, unknown][] {\n\treturn list(value).map((pair) => {\n\t\tconst entry = list(pair);\n\t\tif (entry.length !== 2) throw new Error(\"text: expected a pair\");\n\t\treturn entry as [unknown, unknown];\n\t});\n}\n\n/** The optional failures field; absent means none. */\nfunction failures(value: unknown): FailedMember[] {\n\tif (value === undefined) return [];\n\t// The message schema checks each error's shape.\n\treturn pairs(value).map(([member, error]) => ({ member, error }) as FailedMember);\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { type Part } from "./part.ts";
2
+ /** A JSON part at its origin: the value's JSON text (state and params are JSON only). */
3
+ export declare function jsonPart(value: unknown): string;
4
+ /**
5
+ * A payload part at its origin (arguments, a result): its JSON and, when `bytes` (its method's schema has a `bytes()`
6
+ * leaf), its byte segments: each `Uint8Array` leaf becomes a segment, and an own key `$bytes`, reserved there, fails
7
+ * `invalid/args`; otherwise plain JSON, where `$bytes` is ordinary data. `undefined` (a handler returning nothing) is
8
+ * `null`.
9
+ */
10
+ export declare function payloadPart(value: unknown, bytes: boolean): {
11
+ readonly json: string;
12
+ readonly segments: Uint8Array[] | undefined;
13
+ };
14
+ /**
15
+ * Parses a part's JSON where it is owned, once opened (`openPart`). Throws on a part that is no strict UTF-8 JSON (a
16
+ * protocol error).
17
+ */
18
+ export declare function parsePart(json: string | Uint8Array): unknown;
19
+ /**
20
+ * Parses a payload part's JSON where it is owned, once opened, its `{"$bytes": i}` references resolved to views of
21
+ * `segments` when it has them. Throws on a malformed part (a protocol error).
22
+ */
23
+ export declare function parsePayload(json: string | Uint8Array, segments: readonly Uint8Array[] | undefined): unknown;
24
+ /**
25
+ * A part as the text codec splices it into its tuple, tagged so that no JSON value is reserved: `[0, json]` for a plain
26
+ * part, `[1, base64]` for a deflated one. Throws on invalid UTF-8.
27
+ */
28
+ export declare function partText(part: Part): string;
29
+ /** A part from its place in a text tuple (`partText` reversed). Throws on anything else (a protocol error). */
30
+ export declare function textPart(value: unknown): Part;
31
+ /** Strict UTF-8 JSON. Throws on anything else (a protocol error). */
32
+ export declare function parseJson(bytes: Uint8Array): unknown;
33
+ /** Strict UTF-8 text. Throws on invalid UTF-8 (a protocol error). */
34
+ export declare function readUtf8(bytes: Uint8Array): string;
35
+ /**
36
+ * Replaces every `{"$bytes": i}` in a freshly decoded payload with segment `i`, in place. Throws on a malformed
37
+ * reference (a protocol error).
38
+ */
39
+ export declare function resolveSegments(value: unknown, segments: readonly Uint8Array[]): unknown;
40
+ //# sourceMappingURL=values.d.ts.map