@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":"values.d.ts","sourceRoot":"","sources":["../../../src/next/link/values.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAKpD,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,OAAO,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,CAAA;CAAE,CAexE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAE5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,QAAQ,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GAAG,OAAO,CAG5G;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAG3C;AAED,+GAA+G;AAC/G,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAO7C;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAEpD;AAED,qEAAqE;AACrE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAmBxF"}
@@ -0,0 +1,117 @@
1
+ // Values in messages (§3 values, §22): JSON text, and for payloads marked as carrying bytes raw byte segments, a
2
+ // `Uint8Array` leaf written as `{"$bytes": i}` and read back as a view of the received message (no copy, never
3
+ // base64); a part as the text codec splices it. Shared by the codecs.
4
+ import { invalid } from "../data/internal.js";
5
+ import { DeflatedPart } from "./part.js";
6
+ /** Strict, and a leading U+FEFF is data, not a byte order mark to strip. */
7
+ const STRICT_UTF8 = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
8
+ /** A JSON part at its origin: the value's JSON text (state and params are JSON only). */
9
+ export function jsonPart(value) {
10
+ return JSON.stringify(value) ?? "null";
11
+ }
12
+ /**
13
+ * A payload part at its origin (arguments, a result): its JSON and, when `bytes` (its method's schema has a `bytes()`
14
+ * leaf), its byte segments: each `Uint8Array` leaf becomes a segment, and an own key `$bytes`, reserved there, fails
15
+ * `invalid/args`; otherwise plain JSON, where `$bytes` is ordinary data. `undefined` (a handler returning nothing) is
16
+ * `null`.
17
+ */
18
+ export function payloadPart(value, bytes) {
19
+ if (!bytes)
20
+ return { json: jsonPart(value), segments: undefined };
21
+ const segments = [];
22
+ const json = JSON.stringify(value, (_key, leaf) => {
23
+ if (leaf instanceof Uint8Array) {
24
+ segments.push(leaf);
25
+ return { $bytes: segments.length - 1 };
26
+ }
27
+ // The replacer does not see the markers it returns, only their fields.
28
+ if (typeof leaf === "object" && leaf !== null && Object.hasOwn(leaf, "$bytes")) {
29
+ throw invalid("args", '"$bytes" is reserved in values crossing a link');
30
+ }
31
+ return leaf;
32
+ });
33
+ return { json: json ?? "null", segments };
34
+ }
35
+ /**
36
+ * Parses a part's JSON where it is owned, once opened (`openPart`). Throws on a part that is no strict UTF-8 JSON (a
37
+ * protocol error).
38
+ */
39
+ export function parsePart(json) {
40
+ return typeof json === "string" ? JSON.parse(json) : parseJson(json);
41
+ }
42
+ /**
43
+ * Parses a payload part's JSON where it is owned, once opened, its `{"$bytes": i}` references resolved to views of
44
+ * `segments` when it has them. Throws on a malformed part (a protocol error).
45
+ */
46
+ export function parsePayload(json, segments) {
47
+ const value = parsePart(json);
48
+ return segments === undefined ? value : resolveSegments(value, segments);
49
+ }
50
+ /**
51
+ * A part as the text codec splices it into its tuple, tagged so that no JSON value is reserved: `[0, json]` for a plain
52
+ * part, `[1, base64]` for a deflated one. Throws on invalid UTF-8.
53
+ */
54
+ export function partText(part) {
55
+ if (part instanceof DeflatedPart)
56
+ return `[1,"${base64(part.bytes)}"]`;
57
+ return `[0,${typeof part === "string" ? part : readUtf8(part)}]`;
58
+ }
59
+ /** A part from its place in a text tuple (`partText` reversed). Throws on anything else (a protocol error). */
60
+ export function textPart(value) {
61
+ // Trust boundary: fresh JSON from the text decoder.
62
+ if (!Array.isArray(value) || value.length !== 2)
63
+ throw new Error("text: a part is no [codec, payload] pair");
64
+ const [codec, payload] = value;
65
+ if (codec === 0)
66
+ return JSON.stringify(payload);
67
+ if (codec === 1 && typeof payload === "string")
68
+ return new DeflatedPart(fromBase64(payload));
69
+ throw new Error("text: a part of an unknown codec");
70
+ }
71
+ /** Strict UTF-8 JSON. Throws on anything else (a protocol error). */
72
+ export function parseJson(bytes) {
73
+ return JSON.parse(STRICT_UTF8.decode(bytes));
74
+ }
75
+ /** Strict UTF-8 text. Throws on invalid UTF-8 (a protocol error). */
76
+ export function readUtf8(bytes) {
77
+ return STRICT_UTF8.decode(bytes);
78
+ }
79
+ /**
80
+ * Replaces every `{"$bytes": i}` in a freshly decoded payload with segment `i`, in place. Throws on a malformed
81
+ * reference (a protocol error).
82
+ */
83
+ export function resolveSegments(value, segments) {
84
+ if (typeof value !== "object" || value === null)
85
+ return value;
86
+ // Trust boundary: fresh JSON from the link, owned by this decode.
87
+ const node = value;
88
+ if (!Array.isArray(node) && Object.hasOwn(node, "$bytes")) {
89
+ const index = node.$bytes;
90
+ if (Object.keys(node).length !== 1 || typeof index !== "number" || segments[index] === undefined) {
91
+ throw new Error("payload: a malformed byte segment reference");
92
+ }
93
+ return segments[index];
94
+ }
95
+ for (const key of Object.keys(node)) {
96
+ const child = node[key];
97
+ const resolved = resolveSegments(child, segments);
98
+ // Defined, not assigned: a key `__proto__` is an own property of parsed JSON.
99
+ if (resolved !== child)
100
+ Object.defineProperty(node, key, { value: resolved, writable: true, enumerable: true, configurable: true });
101
+ }
102
+ return node;
103
+ }
104
+ /** Bytes as base64 (the text codec's deflated parts; portable: `btoa` over a binary string, in chunks). */
105
+ function base64(bytes) {
106
+ let binary = "";
107
+ for (let offset = 0; offset < bytes.byteLength; offset += 0x8000) {
108
+ binary += String.fromCharCode(...bytes.subarray(offset, offset + 0x8000));
109
+ }
110
+ return btoa(binary);
111
+ }
112
+ /** Bytes from base64. Throws on text that is no base64 (a protocol error). */
113
+ function fromBase64(text) {
114
+ const binary = atob(text);
115
+ return Uint8Array.from(binary, (char) => char.charCodeAt(0));
116
+ }
117
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../../src/next/link/values.ts"],"names":[],"mappings":"AAAA,iHAAiH;AACjH,+GAA+G;AAC/G,sEAAsE;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAa,MAAM,WAAW,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/E,yFAAyF;AACzF,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAC1B,KAAc,EACd,KAAc;IAEd,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE;QAC1D,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,CAAC;QACD,uEAAuE;QACvE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChF,MAAM,OAAO,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAyB;IAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAyB,EAAE,QAA2C;IAClG,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAU;IAClC,IAAI,IAAI,YAAY,YAAY;QAAE,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACvE,OAAO,MAAM,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAClE,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,oDAAoD;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7G,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAA2B,CAAC;IACrD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7F,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACrD,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,KAAiB;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAC,KAAiB;IACzC,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,QAA+B;IAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,kEAAkE;IAClE,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClD,8EAA8E;QAC9E,IAAI,QAAQ,KAAK,KAAK;YACrB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,2GAA2G;AAC3G,SAAS,MAAM,CAAC,KAAiB;IAChC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,EAAE,CAAC;QAClE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,SAAS,UAAU,CAAC,IAAY;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["// Values in messages (§3 values, §22): JSON text, and for payloads marked as carrying bytes raw byte segments, a\n// `Uint8Array` leaf written as `{\"$bytes\": i}` and read back as a view of the received message (no copy, never\n// base64); a part as the text codec splices it. Shared by the codecs.\n\nimport { invalid } from \"../data/internal.ts\";\nimport { DeflatedPart, type Part } from \"./part.ts\";\n\n/** Strict, and a leading U+FEFF is data, not a byte order mark to strip. */\nconst STRICT_UTF8 = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n\n/** A JSON part at its origin: the value's JSON text (state and params are JSON only). */\nexport function jsonPart(value: unknown): string {\n\treturn JSON.stringify(value) ?? \"null\";\n}\n\n/**\n * A payload part at its origin (arguments, a result): its JSON and, when `bytes` (its method's schema has a `bytes()`\n * leaf), its byte segments: each `Uint8Array` leaf becomes a segment, and an own key `$bytes`, reserved there, fails\n * `invalid/args`; otherwise plain JSON, where `$bytes` is ordinary data. `undefined` (a handler returning nothing) is\n * `null`.\n */\nexport function payloadPart(\n\tvalue: unknown,\n\tbytes: boolean,\n): { readonly json: string; readonly segments: Uint8Array[] | undefined } {\n\tif (!bytes) return { json: jsonPart(value), segments: undefined };\n\tconst segments: Uint8Array[] = [];\n\tconst json = JSON.stringify(value, (_key, leaf: unknown) => {\n\t\tif (leaf instanceof Uint8Array) {\n\t\t\tsegments.push(leaf);\n\t\t\treturn { $bytes: segments.length - 1 };\n\t\t}\n\t\t// The replacer does not see the markers it returns, only their fields.\n\t\tif (typeof leaf === \"object\" && leaf !== null && Object.hasOwn(leaf, \"$bytes\")) {\n\t\t\tthrow invalid(\"args\", '\"$bytes\" is reserved in values crossing a link');\n\t\t}\n\t\treturn leaf;\n\t});\n\treturn { json: json ?? \"null\", segments };\n}\n\n/**\n * Parses a part's JSON where it is owned, once opened (`openPart`). Throws on a part that is no strict UTF-8 JSON (a\n * protocol error).\n */\nexport function parsePart(json: string | Uint8Array): unknown {\n\treturn typeof json === \"string\" ? JSON.parse(json) : parseJson(json);\n}\n\n/**\n * Parses a payload part's JSON where it is owned, once opened, its `{\"$bytes\": i}` references resolved to views of\n * `segments` when it has them. Throws on a malformed part (a protocol error).\n */\nexport function parsePayload(json: string | Uint8Array, segments: readonly Uint8Array[] | undefined): unknown {\n\tconst value = parsePart(json);\n\treturn segments === undefined ? value : resolveSegments(value, segments);\n}\n\n/**\n * A part as the text codec splices it into its tuple, tagged so that no JSON value is reserved: `[0, json]` for a plain\n * part, `[1, base64]` for a deflated one. Throws on invalid UTF-8.\n */\nexport function partText(part: Part): string {\n\tif (part instanceof DeflatedPart) return `[1,\"${base64(part.bytes)}\"]`;\n\treturn `[0,${typeof part === \"string\" ? part : readUtf8(part)}]`;\n}\n\n/** A part from its place in a text tuple (`partText` reversed). Throws on anything else (a protocol error). */\nexport function textPart(value: unknown): Part {\n\t// Trust boundary: fresh JSON from the text decoder.\n\tif (!Array.isArray(value) || value.length !== 2) throw new Error(\"text: a part is no [codec, payload] pair\");\n\tconst [codec, payload] = value as [unknown, unknown];\n\tif (codec === 0) return JSON.stringify(payload);\n\tif (codec === 1 && typeof payload === \"string\") return new DeflatedPart(fromBase64(payload));\n\tthrow new Error(\"text: a part of an unknown codec\");\n}\n\n/** Strict UTF-8 JSON. Throws on anything else (a protocol error). */\nexport function parseJson(bytes: Uint8Array): unknown {\n\treturn JSON.parse(STRICT_UTF8.decode(bytes));\n}\n\n/** Strict UTF-8 text. Throws on invalid UTF-8 (a protocol error). */\nexport function readUtf8(bytes: Uint8Array): string {\n\treturn STRICT_UTF8.decode(bytes);\n}\n\n/**\n * Replaces every `{\"$bytes\": i}` in a freshly decoded payload with segment `i`, in place. Throws on a malformed\n * reference (a protocol error).\n */\nexport function resolveSegments(value: unknown, segments: readonly Uint8Array[]): unknown {\n\tif (typeof value !== \"object\" || value === null) return value;\n\t// Trust boundary: fresh JSON from the link, owned by this decode.\n\tconst node = value as Record<string, unknown>;\n\tif (!Array.isArray(node) && Object.hasOwn(node, \"$bytes\")) {\n\t\tconst index = node.$bytes;\n\t\tif (Object.keys(node).length !== 1 || typeof index !== \"number\" || segments[index] === undefined) {\n\t\t\tthrow new Error(\"payload: a malformed byte segment reference\");\n\t\t}\n\t\treturn segments[index];\n\t}\n\tfor (const key of Object.keys(node)) {\n\t\tconst child = node[key];\n\t\tconst resolved = resolveSegments(child, segments);\n\t\t// Defined, not assigned: a key `__proto__` is an own property of parsed JSON.\n\t\tif (resolved !== child)\n\t\t\tObject.defineProperty(node, key, { value: resolved, writable: true, enumerable: true, configurable: true });\n\t}\n\treturn node;\n}\n\n/** Bytes as base64 (the text codec's deflated parts; portable: `btoa` over a binary string, in chunks). */\nfunction base64(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (let offset = 0; offset < bytes.byteLength; offset += 0x8000) {\n\t\tbinary += String.fromCharCode(...bytes.subarray(offset, offset + 0x8000));\n\t}\n\treturn btoa(binary);\n}\n\n/** Bytes from base64. Throws on text that is no base64 (a protocol error). */\nfunction fromBase64(text: string): Uint8Array {\n\tconst binary = atob(text);\n\treturn Uint8Array.from(binary, (char) => char.charCodeAt(0));\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { type Link } from "./link.ts";
2
+ /** The part of a WebSocket a link uses (the browser's `WebSocket`, `ws`'s `WebSocket`). */
3
+ export interface WebSocketLike {
4
+ /** 0 connecting, 1 open, 2 closing, 3 closed. */
5
+ readonly readyState: number;
6
+ binaryType: string;
7
+ /** Typed as the browser's `WebSocket` takes bytes: on an `ArrayBuffer`, never shared memory. */
8
+ send(data: Uint8Array<ArrayBuffer>): void;
9
+ close(): void;
10
+ addEventListener(type: "open" | "close" | "error", listener: () => void): void;
11
+ addEventListener(type: "message", listener: (event: {
12
+ readonly data: unknown;
13
+ }) => void): void;
14
+ removeEventListener(type: "open" | "close" | "error", listener: () => void): void;
15
+ removeEventListener(type: "message", listener: (event: {
16
+ readonly data: unknown;
17
+ }) => void): void;
18
+ }
19
+ /**
20
+ * A link over `socket`, one binary frame per message (`binaryType = "arraybuffer"`). Messages sent while it connects
21
+ * wait for `open`; a socket closing or closed already gives a closed link; `close` and `error` close the link once, and
22
+ * so does a text frame (no message of this protocol). A frame above the transport's `maxPayload` closes the socket
23
+ * (code 1009), which closes the link.
24
+ */
25
+ export declare function webSocketLink(socket: WebSocketLike): Link;
26
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/next/link/websocket.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAW,MAAM,WAAW,CAAC;AAE/C,2FAA2F;AAC3F,MAAM,WAAW,aAAa;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;IACd,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/E,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/F,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAClF,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAClG;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEzD"}
@@ -0,0 +1,91 @@
1
+ // WebSocket links (§3): a link over a WebSocket, the browser's or `ws` in Node, typed structurally; binary frames,
2
+ // messages sent while it still connects buffered until it opens.
3
+ import { LinkEnd } from "./link.js";
4
+ const CONNECTING = 0;
5
+ const OPEN = 1;
6
+ /**
7
+ * A link over `socket`, one binary frame per message (`binaryType = "arraybuffer"`). Messages sent while it connects
8
+ * wait for `open`; a socket closing or closed already gives a closed link; `close` and `error` close the link once, and
9
+ * so does a text frame (no message of this protocol). A frame above the transport's `maxPayload` closes the socket
10
+ * (code 1009), which closes the link.
11
+ */
12
+ export function webSocketLink(socket) {
13
+ return new WebSocketLink(socket);
14
+ }
15
+ class WebSocketLink extends LinkEnd {
16
+ /** The socket while the link is open. */
17
+ #socket;
18
+ /** Messages sent while the socket connects; `undefined` once it is open. */
19
+ #connecting;
20
+ #onOpen = () => {
21
+ const queued = this.#connecting ?? [];
22
+ this.#connecting = undefined;
23
+ for (const message of queued)
24
+ this.send(message);
25
+ };
26
+ #onMessage = (event) => {
27
+ if (event.data instanceof ArrayBuffer)
28
+ this.deliver(new Uint8Array(event.data));
29
+ else
30
+ this.close();
31
+ };
32
+ #onError = () => this.#end();
33
+ constructor(socket) {
34
+ super();
35
+ if (socket.readyState !== CONNECTING && socket.readyState !== OPEN) {
36
+ this.ended();
37
+ return;
38
+ }
39
+ this.#socket = socket;
40
+ socket.binaryType = "arraybuffer";
41
+ if (socket.readyState === CONNECTING) {
42
+ this.#connecting = [];
43
+ socket.addEventListener("open", this.#onOpen);
44
+ }
45
+ socket.addEventListener("message", this.#onMessage);
46
+ // `error` and `close` stay handled until the socket's own close, after this end closed: `ws` emits an `error`
47
+ // for a socket closed while it connects, and an unhandled one would end the process.
48
+ const onClose = () => {
49
+ socket.removeEventListener("close", onClose);
50
+ socket.removeEventListener("error", this.#onError);
51
+ this.#end();
52
+ };
53
+ socket.addEventListener("close", onClose);
54
+ socket.addEventListener("error", this.#onError);
55
+ }
56
+ send(message) {
57
+ const socket = this.#socket;
58
+ if (socket === undefined)
59
+ return;
60
+ if (this.#connecting !== undefined) {
61
+ this.#connecting.push(message);
62
+ return;
63
+ }
64
+ try {
65
+ // A link's messages are codec output or received frames, both on plain `ArrayBuffer`s.
66
+ socket.send(message);
67
+ }
68
+ catch {
69
+ this.close();
70
+ }
71
+ }
72
+ close() {
73
+ const socket = this.#socket;
74
+ if (socket === undefined)
75
+ return;
76
+ this.#end();
77
+ socket.close();
78
+ }
79
+ /** Stops listening for frames, drops what waits to be sent and closes this end. */
80
+ #end() {
81
+ const socket = this.#socket;
82
+ if (socket === undefined)
83
+ return;
84
+ this.#socket = undefined;
85
+ this.#connecting = undefined;
86
+ socket.removeEventListener("open", this.#onOpen);
87
+ socket.removeEventListener("message", this.#onMessage);
88
+ this.ended();
89
+ }
90
+ }
91
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/next/link/websocket.ts"],"names":[],"mappings":"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","sourcesContent":["// WebSocket links (§3): a link over a WebSocket, the browser's or `ws` in Node, typed structurally; binary frames,\n// messages sent while it still connects buffered until it opens.\n\nimport { type Link, LinkEnd } from \"./link.ts\";\n\n/** The part of a WebSocket a link uses (the browser's `WebSocket`, `ws`'s `WebSocket`). */\nexport interface WebSocketLike {\n\t/** 0 connecting, 1 open, 2 closing, 3 closed. */\n\treadonly readyState: number;\n\tbinaryType: string;\n\t/** Typed as the browser's `WebSocket` takes bytes: on an `ArrayBuffer`, never shared memory. */\n\tsend(data: Uint8Array<ArrayBuffer>): void;\n\tclose(): void;\n\taddEventListener(type: \"open\" | \"close\" | \"error\", listener: () => void): void;\n\taddEventListener(type: \"message\", listener: (event: { readonly data: unknown }) => void): void;\n\tremoveEventListener(type: \"open\" | \"close\" | \"error\", listener: () => void): void;\n\tremoveEventListener(type: \"message\", listener: (event: { readonly data: unknown }) => void): void;\n}\n\nconst CONNECTING = 0;\n\nconst OPEN = 1;\n\n/**\n * A link over `socket`, one binary frame per message (`binaryType = \"arraybuffer\"`). Messages sent while it connects\n * wait for `open`; a socket closing or closed already gives a closed link; `close` and `error` close the link once, and\n * so does a text frame (no message of this protocol). A frame above the transport's `maxPayload` closes the socket\n * (code 1009), which closes the link.\n */\nexport function webSocketLink(socket: WebSocketLike): Link {\n\treturn new WebSocketLink(socket);\n}\n\nclass WebSocketLink extends LinkEnd {\n\t/** The socket while the link is open. */\n\t#socket: WebSocketLike | undefined;\n\t/** Messages sent while the socket connects; `undefined` once it is open. */\n\t#connecting: Uint8Array[] | undefined;\n\treadonly #onOpen = (): void => {\n\t\tconst queued = this.#connecting ?? [];\n\t\tthis.#connecting = undefined;\n\t\tfor (const message of queued) this.send(message);\n\t};\n\treadonly #onMessage = (event: { readonly data: unknown }): void => {\n\t\tif (event.data instanceof ArrayBuffer) this.deliver(new Uint8Array(event.data));\n\t\telse this.close();\n\t};\n\treadonly #onError = (): void => this.#end();\n\n\tconstructor(socket: WebSocketLike) {\n\t\tsuper();\n\t\tif (socket.readyState !== CONNECTING && socket.readyState !== OPEN) {\n\t\t\tthis.ended();\n\t\t\treturn;\n\t\t}\n\t\tthis.#socket = socket;\n\t\tsocket.binaryType = \"arraybuffer\";\n\t\tif (socket.readyState === CONNECTING) {\n\t\t\tthis.#connecting = [];\n\t\t\tsocket.addEventListener(\"open\", this.#onOpen);\n\t\t}\n\t\tsocket.addEventListener(\"message\", this.#onMessage);\n\t\t// `error` and `close` stay handled until the socket's own close, after this end closed: `ws` emits an `error`\n\t\t// for a socket closed while it connects, and an unhandled one would end the process.\n\t\tconst onClose = (): void => {\n\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\tsocket.removeEventListener(\"error\", this.#onError);\n\t\t\tthis.#end();\n\t\t};\n\t\tsocket.addEventListener(\"close\", onClose);\n\t\tsocket.addEventListener(\"error\", this.#onError);\n\t}\n\n\tsend(message: Uint8Array): void {\n\t\tconst socket = this.#socket;\n\t\tif (socket === undefined) return;\n\t\tif (this.#connecting !== undefined) {\n\t\t\tthis.#connecting.push(message);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\t// A link's messages are codec output or received frames, both on plain `ArrayBuffer`s.\n\t\t\tsocket.send(message as Uint8Array<ArrayBuffer>);\n\t\t} catch {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tconst socket = this.#socket;\n\t\tif (socket === undefined) return;\n\t\tthis.#end();\n\t\tsocket.close();\n\t}\n\n\t/** Stops listening for frames, drops what waits to be sent and closes this end. */\n\t#end(): void {\n\t\tconst socket = this.#socket;\n\t\tif (socket === undefined) return;\n\t\tthis.#socket = undefined;\n\t\tthis.#connecting = undefined;\n\t\tsocket.removeEventListener(\"open\", this.#onOpen);\n\t\tsocket.removeEventListener(\"message\", this.#onMessage);\n\t\tthis.ended();\n\t}\n}\n"]}
@@ -0,0 +1,50 @@
1
+ import { type Dependent, type DeriveSource, type NativeSource } from "../state/internal.ts";
2
+ import type { RegistryRecord } from "./record.ts";
3
+ import type { RegistryEntry, RegistryProvider } from "./registry.ts";
4
+ /** Who contributes: a facet (by plugin) or a host-lifetime object (by plugin and type). */
5
+ export type Contributor = {
6
+ readonly plugin: string;
7
+ readonly type: string | undefined;
8
+ };
9
+ /**
10
+ * What a contribution is: a plain value, a Chord JSON watchable (a source or a constant), or a native source; the
11
+ * watchables followed for their value.
12
+ */
13
+ export type ContributionContent = {
14
+ readonly kind: "plain";
15
+ readonly value: unknown;
16
+ } | {
17
+ readonly kind: "json";
18
+ readonly source: DeriveSource;
19
+ } | {
20
+ readonly kind: "native";
21
+ readonly source: NativeSource;
22
+ };
23
+ /**
24
+ * One contributor's contribution to a registry: a plain value, or a Chord source it follows as a dependent (a change
25
+ * marks the registry's table). Its table entry is made once per value (an older version's adapted once per value);
26
+ * a failure or refusal leaves it out, reported once per episode.
27
+ */
28
+ export declare class RegistryContribution implements Dependent {
29
+ #private;
30
+ /** The registry it contributes to. */
31
+ readonly record: RegistryRecord;
32
+ readonly contributor: Contributor;
33
+ /** The registry version its contributor was built against. */
34
+ readonly version: number;
35
+ constructor(record: RegistryRecord, contributor: Contributor, version: number, content: ContributionContent);
36
+ /** Its source changed (inside a batch): the registry's table is marked. */
37
+ invalidate(): void;
38
+ /** A retirement of its source's document changes nothing beyond the value. */
39
+ sourceRetired(): void;
40
+ /** Starts following its source, if it has one. */
41
+ follow(): void;
42
+ /** Stops following its source. */
43
+ unfollow(): void;
44
+ /**
45
+ * Its entry in a table of the provider at `version`: the same object while its value is the same; `undefined` when
46
+ * left out (a refused version, a failing source, a throwing adapter).
47
+ */
48
+ entry(version: number, provider: RegistryProvider<unknown, unknown>): RegistryEntry<unknown> | undefined;
49
+ }
50
+ //# sourceMappingURL=contribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.d.ts","sourceRoot":"","sources":["../../../src/next/registries/contribution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAa,KAAK,YAAY,EAAU,MAAM,sBAAsB,CAAC;AAC/G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAErE,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEzF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,SAAS;;IACrD,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAQzB,YAAY,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAK1G;IAED,2EAA2E;IAC3E,UAAU,IAAI,IAAI,CAEjB;IAED,8EAA8E;IAC9E,aAAa,IAAI,IAAI,CAAG;IAExB,kDAAkD;IAClD,MAAM,IAAI,IAAI,CAGb;IAED,kCAAkC;IAClC,QAAQ,IAAI,IAAI,CAEf;IASD;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAqBvG;CAqDD"}
@@ -0,0 +1,129 @@
1
+ // One contributor's contribution to a registry (slice 8 §1): its table entry, made once per value (an older version's
2
+ // adapted once per value), followed when it is a Chord watchable, left out and reported when it fails or is refused.
3
+ import { handedOut, Source } from "../state/internal.js";
4
+ /**
5
+ * One contributor's contribution to a registry: a plain value, or a Chord source it follows as a dependent (a change
6
+ * marks the registry's table). Its table entry is made once per value (an older version's adapted once per value);
7
+ * a failure or refusal leaves it out, reported once per episode.
8
+ */
9
+ export class RegistryContribution {
10
+ /** The registry it contributes to. */
11
+ record;
12
+ contributor;
13
+ /** The registry version its contributor was built against. */
14
+ version;
15
+ #content;
16
+ /** The last adaptation of an older contribution: the value and adapter it was made from, and its result. */
17
+ #adapted;
18
+ #entry;
19
+ /** Left out since its last entry: failing (reported once), or refused (reported once). */
20
+ #out = "none";
21
+ constructor(record, contributor, version, content) {
22
+ this.record = record;
23
+ this.contributor = contributor;
24
+ this.version = version;
25
+ this.#content = content;
26
+ }
27
+ /** Its source changed (inside a batch): the registry's table is marked. */
28
+ invalidate() {
29
+ this.record.contributionChanged();
30
+ }
31
+ /** A retirement of its source's document changes nothing beyond the value. */
32
+ sourceRetired() { }
33
+ /** Starts following its source, if it has one. */
34
+ follow() {
35
+ const source = this.#followed();
36
+ source?.dependents.add(this);
37
+ }
38
+ /** Stops following its source. */
39
+ unfollow() {
40
+ this.#followed()?.dependents.delete(this);
41
+ }
42
+ /** Its source when it changes (a constant never does). */
43
+ #followed() {
44
+ const content = this.#content;
45
+ if (content.kind === "native")
46
+ return content.source;
47
+ return content.kind === "json" && content.source instanceof Source ? content.source : undefined;
48
+ }
49
+ /**
50
+ * Its entry in a table of the provider at `version`: the same object while its value is the same; `undefined` when
51
+ * left out (a refused version, a failing source, a throwing adapter).
52
+ */
53
+ entry(version, provider) {
54
+ const adapter = this.version < version ? provider.accepts?.[this.version]?.contribution : undefined;
55
+ if (this.version > version || (this.version < version && adapter === undefined)) {
56
+ if (this.#out !== "refused")
57
+ this.#refused();
58
+ return undefined;
59
+ }
60
+ let value;
61
+ try {
62
+ const raw = this.#raw();
63
+ value = adapter === undefined ? raw : this.#adapt(raw, adapter);
64
+ }
65
+ catch (error) {
66
+ if (this.#out !== "failed")
67
+ this.#failed(error);
68
+ return undefined;
69
+ }
70
+ this.#out = "none";
71
+ const entry = this.#entry;
72
+ // `undefined` is a value: the entry, not its field, says whether there was one.
73
+ if (entry !== undefined && entry.value === value)
74
+ return entry;
75
+ const { plugin, type } = this.contributor;
76
+ this.#entry = { plugin, ...(type === undefined ? {} : { type }), version: this.version, value };
77
+ return this.#entry;
78
+ }
79
+ /**
80
+ * The contributed value now: a JSON source's value throws while it is failed or ended; a native source that failed
81
+ * (a registry whose `compose` threw) keeps a last good value for its readers, but is left out here as failed.
82
+ */
83
+ #raw() {
84
+ const content = this.#content;
85
+ switch (content.kind) {
86
+ case "plain":
87
+ return content.value;
88
+ case "json":
89
+ return content.source.value;
90
+ case "native":
91
+ return content.source.current();
92
+ }
93
+ }
94
+ #adapt(raw, adapter) {
95
+ const adapted = this.#adapted;
96
+ if (adapted !== undefined && adapted.from === raw && adapted.adapter === adapter)
97
+ return adapted.value;
98
+ const value = this.record.adapt(() => adapter(raw));
99
+ this.#adapted = { from: raw, adapter, value };
100
+ return value;
101
+ }
102
+ #refused() {
103
+ this.#out = "refused";
104
+ const { plugin, type } = this.contributor;
105
+ const registry = this.record.name;
106
+ const where = type === undefined ? {} : { type };
107
+ this.record.reportContribution({
108
+ kind: "contribution_refused",
109
+ registry,
110
+ plugin,
111
+ ...where,
112
+ version: this.version,
113
+ });
114
+ }
115
+ #failed(error) {
116
+ this.#out = "failed";
117
+ const { plugin, type } = this.contributor;
118
+ const registry = this.record.name;
119
+ const where = type === undefined ? {} : { type };
120
+ this.record.reportContribution({
121
+ kind: "contribution_failed",
122
+ registry,
123
+ plugin,
124
+ ...where,
125
+ error: handedOut(error),
126
+ });
127
+ }
128
+ }
129
+ //# sourceMappingURL=contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.js","sourceRoot":"","sources":["../../../src/next/registries/contribution.ts"],"names":[],"mappings":"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","sourcesContent":["// One contributor's contribution to a registry (slice 8 §1): its table entry, made once per value (an older version's\n// adapted once per value), followed when it is a Chord watchable, left out and reported when it fails or is refused.\n\nimport { type Dependent, type DeriveSource, handedOut, type NativeSource, Source } from \"../state/internal.ts\";\nimport type { RegistryRecord } from \"./record.ts\";\nimport type { RegistryEntry, RegistryProvider } from \"./registry.ts\";\n\n/** Who contributes: a facet (by plugin) or a host-lifetime object (by plugin and type). */\nexport type Contributor = { readonly plugin: string; readonly type: string | undefined };\n\n/**\n * What a contribution is: a plain value, a Chord JSON watchable (a source or a constant), or a native source; the\n * watchables followed for their value.\n */\nexport type ContributionContent =\n\t| { readonly kind: \"plain\"; readonly value: unknown }\n\t| { readonly kind: \"json\"; readonly source: DeriveSource }\n\t| { readonly kind: \"native\"; readonly source: NativeSource };\n\n/**\n * One contributor's contribution to a registry: a plain value, or a Chord source it follows as a dependent (a change\n * marks the registry's table). Its table entry is made once per value (an older version's adapted once per value);\n * a failure or refusal leaves it out, reported once per episode.\n */\nexport class RegistryContribution implements Dependent {\n\t/** The registry it contributes to. */\n\treadonly record: RegistryRecord;\n\treadonly contributor: Contributor;\n\t/** The registry version its contributor was built against. */\n\treadonly version: number;\n\treadonly #content: ContributionContent;\n\t/** The last adaptation of an older contribution: the value and adapter it was made from, and its result. */\n\t#adapted: { readonly from: unknown; readonly adapter: (old: never) => unknown; readonly value: unknown } | undefined;\n\t#entry: RegistryEntry<unknown> | undefined;\n\t/** Left out since its last entry: failing (reported once), or refused (reported once). */\n\t#out: \"none\" | \"failed\" | \"refused\" = \"none\";\n\n\tconstructor(record: RegistryRecord, contributor: Contributor, version: number, content: ContributionContent) {\n\t\tthis.record = record;\n\t\tthis.contributor = contributor;\n\t\tthis.version = version;\n\t\tthis.#content = content;\n\t}\n\n\t/** Its source changed (inside a batch): the registry's table is marked. */\n\tinvalidate(): void {\n\t\tthis.record.contributionChanged();\n\t}\n\n\t/** A retirement of its source's document changes nothing beyond the value. */\n\tsourceRetired(): void {}\n\n\t/** Starts following its source, if it has one. */\n\tfollow(): void {\n\t\tconst source = this.#followed();\n\t\tsource?.dependents.add(this);\n\t}\n\n\t/** Stops following its source. */\n\tunfollow(): void {\n\t\tthis.#followed()?.dependents.delete(this);\n\t}\n\n\t/** Its source when it changes (a constant never does). */\n\t#followed(): Source | NativeSource | undefined {\n\t\tconst content = this.#content;\n\t\tif (content.kind === \"native\") return content.source;\n\t\treturn content.kind === \"json\" && content.source instanceof Source ? content.source : undefined;\n\t}\n\n\t/**\n\t * Its entry in a table of the provider at `version`: the same object while its value is the same; `undefined` when\n\t * left out (a refused version, a failing source, a throwing adapter).\n\t */\n\tentry(version: number, provider: RegistryProvider<unknown, unknown>): RegistryEntry<unknown> | undefined {\n\t\tconst adapter = this.version < version ? provider.accepts?.[this.version]?.contribution : undefined;\n\t\tif (this.version > version || (this.version < version && adapter === undefined)) {\n\t\t\tif (this.#out !== \"refused\") this.#refused();\n\t\t\treturn undefined;\n\t\t}\n\t\tlet value: unknown;\n\t\ttry {\n\t\t\tconst raw = this.#raw();\n\t\t\tvalue = adapter === undefined ? raw : this.#adapt(raw, adapter);\n\t\t} catch (error) {\n\t\t\tif (this.#out !== \"failed\") this.#failed(error);\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.#out = \"none\";\n\t\tconst entry = this.#entry;\n\t\t// `undefined` is a value: the entry, not its field, says whether there was one.\n\t\tif (entry !== undefined && entry.value === value) return entry;\n\t\tconst { plugin, type } = this.contributor;\n\t\tthis.#entry = { plugin, ...(type === undefined ? {} : { type }), version: this.version, value };\n\t\treturn this.#entry;\n\t}\n\n\t/**\n\t * The contributed value now: a JSON source's value throws while it is failed or ended; a native source that failed\n\t * (a registry whose `compose` threw) keeps a last good value for its readers, but is left out here as failed.\n\t */\n\t#raw(): unknown {\n\t\tconst content = this.#content;\n\t\tswitch (content.kind) {\n\t\t\tcase \"plain\":\n\t\t\t\treturn content.value;\n\t\t\tcase \"json\":\n\t\t\t\treturn content.source.value;\n\t\t\tcase \"native\":\n\t\t\t\treturn content.source.current();\n\t\t}\n\t}\n\n\t#adapt(raw: unknown, adapter: (old: never) => unknown): unknown {\n\t\tconst adapted = this.#adapted;\n\t\tif (adapted !== undefined && adapted.from === raw && adapted.adapter === adapter) return adapted.value;\n\t\tconst value = this.record.adapt(() => adapter(raw as never));\n\t\tthis.#adapted = { from: raw, adapter, value };\n\t\treturn value;\n\t}\n\n\t#refused(): void {\n\t\tthis.#out = \"refused\";\n\t\tconst { plugin, type } = this.contributor;\n\t\tconst registry = this.record.name;\n\t\tconst where = type === undefined ? {} : { type };\n\t\tthis.record.reportContribution({\n\t\t\tkind: \"contribution_refused\",\n\t\t\tregistry,\n\t\t\tplugin,\n\t\t\t...where,\n\t\t\tversion: this.version,\n\t\t});\n\t}\n\n\t#failed(error: unknown): void {\n\t\tthis.#out = \"failed\";\n\t\tconst { plugin, type } = this.contributor;\n\t\tconst registry = this.record.name;\n\t\tconst where = type === undefined ? {} : { type };\n\t\tthis.record.reportContribution({\n\t\t\tkind: \"contribution_failed\",\n\t\t\tregistry,\n\t\t\tplugin,\n\t\t\t...where,\n\t\t\terror: handedOut(error),\n\t\t});\n\t}\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { ComposeContext, RegistryTable } from "./registry.ts";
2
+ /** An item taken from a table, with the contributor it came from. */
3
+ export type TableItem<I> = {
4
+ readonly value: I;
5
+ readonly plugin: string;
6
+ readonly type?: string;
7
+ };
8
+ /**
9
+ * A map of every entry's keyed items (`entriesOf`, e.g. its routes), in table order: a key taken already is reported
10
+ * through `report` (`compose`'s) naming both plugins, and the first by plugin name keeps it.
11
+ */
12
+ export declare function keyedEntries<C, I>(table: RegistryTable<C>, entriesOf: (value: C) => Readonly<Record<string, I>> | undefined, report: ComposeContext["report"]): ReadonlyMap<string, TableItem<I>>;
13
+ /**
14
+ * Every entry's items (`itemsOf`) in one list: in table order, or sorted by `orderOf` (a phase's index, for example),
15
+ * table order kept among equals.
16
+ */
17
+ export declare function orderedEntries<C, I>(table: RegistryTable<C>, itemsOf: (value: C) => readonly I[] | undefined, orderOf?: (item: I) => number): readonly TableItem<I>[];
18
+ //# sourceMappingURL=entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/next/registries/entries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnE,qEAAqE;AACrE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EAChE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAC9B,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAenC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAClC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,CAAC,EAAE,GAAG,SAAS,EAC/C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAC3B,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,CAQzB"}
@@ -0,0 +1,42 @@
1
+ // Table helpers for `compose` (slice 8 §1, Q8): a map by key (the first by plugin name wins, duplicates reported) and
2
+ // an ordered list; both keep each item's plugin, so a use site reports the contributor of an entry that throws.
3
+ /**
4
+ * A map of every entry's keyed items (`entriesOf`, e.g. its routes), in table order: a key taken already is reported
5
+ * through `report` (`compose`'s) naming both plugins, and the first by plugin name keeps it.
6
+ */
7
+ export function keyedEntries(table, entriesOf, report) {
8
+ const map = new Map();
9
+ for (const entry of table) {
10
+ const items = entriesOf(entry.value);
11
+ if (items === undefined)
12
+ continue;
13
+ for (const [key, value] of Object.entries(items)) {
14
+ const taken = map.get(key);
15
+ if (taken !== undefined) {
16
+ report({ message: `"${key}" is contributed twice`, plugins: [taken.plugin, entry.plugin] });
17
+ continue;
18
+ }
19
+ map.set(key, item(value, entry.plugin, entry.type));
20
+ }
21
+ }
22
+ return map;
23
+ }
24
+ /**
25
+ * Every entry's items (`itemsOf`) in one list: in table order, or sorted by `orderOf` (a phase's index, for example),
26
+ * table order kept among equals.
27
+ */
28
+ export function orderedEntries(table, itemsOf, orderOf) {
29
+ const items = [];
30
+ for (const entry of table) {
31
+ for (const value of itemsOf(entry.value) ?? [])
32
+ items.push(item(value, entry.plugin, entry.type));
33
+ }
34
+ // `sort` is stable: equal orders keep table order.
35
+ if (orderOf !== undefined)
36
+ items.sort((a, b) => orderOf(a.value) - orderOf(b.value));
37
+ return items;
38
+ }
39
+ function item(value, plugin, type) {
40
+ return type === undefined ? { value, plugin } : { value, plugin, type };
41
+ }
42
+ //# sourceMappingURL=entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../../src/next/registries/entries.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,gHAAgH;AAOhH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC3B,KAAuB,EACvB,SAAgE,EAChE,MAAgC;IAEhC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,wBAAwB,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5F,SAAS;YACV,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC7B,KAAuB,EACvB,OAA+C,EAC/C,OAA6B;IAE7B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,mDAAmD;IACnD,IAAI,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAI,KAAQ,EAAE,MAAc,EAAE,IAAwB;IAClE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC","sourcesContent":["// Table helpers for `compose` (slice 8 §1, Q8): a map by key (the first by plugin name wins, duplicates reported) and\n// an ordered list; both keep each item's plugin, so a use site reports the contributor of an entry that throws.\n\nimport type { ComposeContext, RegistryTable } from \"./registry.ts\";\n\n/** An item taken from a table, with the contributor it came from. */\nexport type TableItem<I> = { readonly value: I; readonly plugin: string; readonly type?: string };\n\n/**\n * A map of every entry's keyed items (`entriesOf`, e.g. its routes), in table order: a key taken already is reported\n * through `report` (`compose`'s) naming both plugins, and the first by plugin name keeps it.\n */\nexport function keyedEntries<C, I>(\n\ttable: RegistryTable<C>,\n\tentriesOf: (value: C) => Readonly<Record<string, I>> | undefined,\n\treport: ComposeContext[\"report\"],\n): ReadonlyMap<string, TableItem<I>> {\n\tconst map = new Map<string, TableItem<I>>();\n\tfor (const entry of table) {\n\t\tconst items = entriesOf(entry.value);\n\t\tif (items === undefined) continue;\n\t\tfor (const [key, value] of Object.entries(items)) {\n\t\t\tconst taken = map.get(key);\n\t\t\tif (taken !== undefined) {\n\t\t\t\treport({ message: `\"${key}\" is contributed twice`, plugins: [taken.plugin, entry.plugin] });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tmap.set(key, item(value, entry.plugin, entry.type));\n\t\t}\n\t}\n\treturn map;\n}\n\n/**\n * Every entry's items (`itemsOf`) in one list: in table order, or sorted by `orderOf` (a phase's index, for example),\n * table order kept among equals.\n */\nexport function orderedEntries<C, I>(\n\ttable: RegistryTable<C>,\n\titemsOf: (value: C) => readonly I[] | undefined,\n\torderOf?: (item: I) => number,\n): readonly TableItem<I>[] {\n\tconst items: TableItem<I>[] = [];\n\tfor (const entry of table) {\n\t\tfor (const value of itemsOf(entry.value) ?? []) items.push(item(value, entry.plugin, entry.type));\n\t}\n\t// `sort` is stable: equal orders keep table order.\n\tif (orderOf !== undefined) items.sort((a, b) => orderOf(a.value) - orderOf(b.value));\n\treturn items;\n}\n\nfunction item<I>(value: I, plugin: string, type: string | undefined): TableItem<I> {\n\treturn type === undefined ? { value, plugin } : { value, plugin, type };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { keyedEntries, orderedEntries, type TableItem } from "./entries.ts";
2
+ export { type ComposeContext, type Contribution, defineRegistry, type Registry, type RegistryAccepts, type RegistryConflict, type RegistryEntry, type RegistryProvider, type RegistryTable, type RegistryValue, } from "./registry.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/next/registries/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,GAClB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Registries for apps: tokens, what a provider serves them with, the table `compose` gets and its helpers, and the
2
+ // composed value readers follow.
3
+ export { keyedEntries, orderedEntries } from "./entries.js";
4
+ export { defineRegistry, } from "./registry.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/next/registries/index.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,iCAAiC;AAEjC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAkB,MAAM,cAAc,CAAC;AAC5E,OAAO,EAGN,cAAc,GAQd,MAAM,eAAe,CAAC","sourcesContent":["// Registries for apps: tokens, what a provider serves them with, the table `compose` gets and its helpers, and the\n// composed value readers follow.\n\nexport { keyedEntries, orderedEntries, type TableItem } from \"./entries.ts\";\nexport {\n\ttype ComposeContext,\n\ttype Contribution,\n\tdefineRegistry,\n\ttype Registry,\n\ttype RegistryAccepts,\n\ttype RegistryConflict,\n\ttype RegistryEntry,\n\ttype RegistryProvider,\n\ttype RegistryTable,\n\ttype RegistryValue,\n} from \"./registry.ts\";\n"]}
@@ -0,0 +1,4 @@
1
+ export { type ContributionContent, type Contributor, RegistryContribution } from "./contribution.ts";
2
+ export { checkProvider, type RegistryError, RegistryRecord } from "./record.ts";
3
+ export { RegistryValueSource, type RegistryWaiter } from "./value.ts";
4
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/next/registries/internal.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Registries for Chord's layers: a host's record of each registry, its contributions and its values by version.
2
+ export { RegistryContribution } from "./contribution.js";
3
+ export { checkProvider, RegistryRecord } from "./record.js";
4
+ export { RegistryValueSource } from "./value.js";
5
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/next/registries/internal.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAEhH,OAAO,EAA8C,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAsB,cAAc,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAuB,MAAM,YAAY,CAAC","sourcesContent":["// Registries for Chord's layers: a host's record of each registry, its contributions and its values by version.\n\nexport { type ContributionContent, type Contributor, RegistryContribution } from \"./contribution.ts\";\nexport { checkProvider, type RegistryError, RegistryRecord } from \"./record.ts\";\nexport { RegistryValueSource, type RegistryWaiter } from \"./value.ts\";\n"]}