@earendil-works/chord 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1299) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/README.md +115 -90
  3. package/dist/context/index.d.ts +1 -1
  4. package/dist/context/index.d.ts.map +1 -1
  5. package/dist/context/index.js +1 -1
  6. package/dist/context/index.js.map +1 -1
  7. package/dist/contracts/accepts.d.ts +81 -0
  8. package/dist/contracts/accepts.d.ts.map +1 -0
  9. package/dist/contracts/accepts.js +123 -0
  10. package/dist/contracts/accepts.js.map +1 -0
  11. package/dist/contracts/contract.d.ts +121 -0
  12. package/dist/contracts/contract.d.ts.map +1 -0
  13. package/dist/contracts/contract.js +50 -0
  14. package/dist/contracts/contract.js.map +1 -0
  15. package/dist/contracts/declare.d.ts +107 -0
  16. package/dist/contracts/declare.d.ts.map +1 -0
  17. package/dist/contracts/declare.js +136 -0
  18. package/dist/contracts/declare.js.map +1 -0
  19. package/dist/contracts/evolve.d.ts +92 -0
  20. package/dist/contracts/evolve.d.ts.map +1 -0
  21. package/dist/contracts/evolve.js +179 -0
  22. package/dist/contracts/evolve.js.map +1 -0
  23. package/dist/contracts/fingerprint.d.ts +16 -0
  24. package/dist/contracts/fingerprint.d.ts.map +1 -0
  25. package/dist/contracts/fingerprint.js +50 -0
  26. package/dist/contracts/fingerprint.js.map +1 -0
  27. package/dist/contracts/history.d.ts +71 -0
  28. package/dist/contracts/history.d.ts.map +1 -0
  29. package/dist/contracts/history.js +3 -0
  30. package/dist/contracts/history.js.map +1 -0
  31. package/dist/contracts/host-kind.d.ts +40 -0
  32. package/dist/contracts/host-kind.d.ts.map +1 -0
  33. package/dist/contracts/host-kind.js +37 -0
  34. package/dist/contracts/host-kind.js.map +1 -0
  35. package/dist/contracts/index.d.ts +7 -0
  36. package/dist/contracts/index.d.ts.map +1 -0
  37. package/dist/contracts/index.js +6 -0
  38. package/dist/contracts/index.js.map +1 -0
  39. package/dist/contracts/internal.d.ts +10 -0
  40. package/dist/contracts/internal.d.ts.map +1 -0
  41. package/dist/contracts/internal.js +9 -0
  42. package/dist/contracts/internal.js.map +1 -0
  43. package/dist/contracts/names.d.ts +3 -0
  44. package/dist/contracts/names.d.ts.map +1 -0
  45. package/dist/contracts/names.js +13 -0
  46. package/dist/contracts/names.js.map +1 -0
  47. package/dist/contracts/params.d.ts +28 -0
  48. package/dist/contracts/params.d.ts.map +1 -0
  49. package/dist/contracts/params.js +50 -0
  50. package/dist/contracts/params.js.map +1 -0
  51. package/dist/contracts/schema.d.ts +102 -0
  52. package/dist/contracts/schema.d.ts.map +1 -0
  53. package/dist/contracts/schema.js +103 -0
  54. package/dist/contracts/schema.js.map +1 -0
  55. package/dist/contracts/snapshot.d.ts +16 -0
  56. package/dist/contracts/snapshot.d.ts.map +1 -0
  57. package/dist/contracts/snapshot.js +167 -0
  58. package/dist/contracts/snapshot.js.map +1 -0
  59. package/dist/data/args.d.ts +50 -0
  60. package/dist/data/args.d.ts.map +1 -0
  61. package/dist/data/args.js +83 -0
  62. package/dist/data/args.js.map +1 -0
  63. package/dist/data/errors.d.ts +80 -0
  64. package/dist/data/errors.d.ts.map +1 -0
  65. package/dist/data/errors.js +116 -0
  66. package/dist/data/errors.js.map +1 -0
  67. package/dist/data/failure.d.ts +26 -0
  68. package/dist/data/failure.d.ts.map +1 -0
  69. package/dist/data/failure.js +77 -0
  70. package/dist/data/failure.js.map +1 -0
  71. package/dist/data/index.d.ts +4 -0
  72. package/dist/data/index.d.ts.map +1 -0
  73. package/dist/data/index.js +5 -0
  74. package/dist/data/index.js.map +1 -0
  75. package/dist/data/internal.d.ts +7 -0
  76. package/dist/data/internal.d.ts.map +1 -0
  77. package/dist/data/internal.js +8 -0
  78. package/dist/data/internal.js.map +1 -0
  79. package/dist/data/params.d.ts +20 -0
  80. package/dist/data/params.d.ts.map +1 -0
  81. package/dist/data/params.js +31 -0
  82. package/dist/data/params.js.map +1 -0
  83. package/dist/data/principal.d.ts +22 -0
  84. package/dist/data/principal.d.ts.map +1 -0
  85. package/dist/data/principal.js +49 -0
  86. package/dist/data/principal.js.map +1 -0
  87. package/dist/data/validator.d.ts +12 -0
  88. package/dist/data/validator.d.ts.map +1 -0
  89. package/dist/data/validator.js +35 -0
  90. package/dist/data/validator.js.map +1 -0
  91. package/dist/delta/apply-immutable-trusted.js +3 -4
  92. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  93. package/dist/delta/diff.d.ts.map +1 -1
  94. package/dist/delta/diff.js +5 -3
  95. package/dist/delta/diff.js.map +1 -1
  96. package/dist/delta/index.d.ts +9 -1
  97. package/dist/delta/index.d.ts.map +1 -1
  98. package/dist/delta/index.js +15 -11
  99. package/dist/delta/index.js.map +1 -1
  100. package/dist/delta/pending.d.ts +36 -0
  101. package/dist/delta/pending.d.ts.map +1 -0
  102. package/dist/delta/pending.js +143 -0
  103. package/dist/delta/pending.js.map +1 -0
  104. package/dist/delta/tracker.d.ts +12 -0
  105. package/dist/delta/tracker.d.ts.map +1 -1
  106. package/dist/delta/tracker.js +109 -39
  107. package/dist/delta/tracker.js.map +1 -1
  108. package/dist/documents/address-source.d.ts +20 -0
  109. package/dist/documents/address-source.d.ts.map +1 -0
  110. package/dist/documents/address-source.js +44 -0
  111. package/dist/documents/address-source.js.map +1 -0
  112. package/dist/documents/definition.d.ts +84 -0
  113. package/dist/documents/definition.d.ts.map +1 -0
  114. package/dist/documents/definition.js +74 -0
  115. package/dist/documents/definition.js.map +1 -0
  116. package/dist/documents/documents.d.ts +126 -0
  117. package/dist/documents/documents.d.ts.map +1 -0
  118. package/dist/documents/documents.js +248 -0
  119. package/dist/documents/documents.js.map +1 -0
  120. package/dist/documents/fence.d.ts +9 -0
  121. package/dist/documents/fence.d.ts.map +1 -0
  122. package/dist/documents/fence.js +15 -0
  123. package/dist/documents/fence.js.map +1 -0
  124. package/dist/documents/handles.d.ts +76 -0
  125. package/dist/documents/handles.d.ts.map +1 -0
  126. package/dist/documents/handles.js +66 -0
  127. package/dist/documents/handles.js.map +1 -0
  128. package/dist/documents/index.d.ts +4 -0
  129. package/dist/documents/index.d.ts.map +1 -0
  130. package/dist/documents/index.js +3 -0
  131. package/dist/documents/index.js.map +1 -0
  132. package/dist/documents/internal.d.ts +9 -0
  133. package/dist/documents/internal.d.ts.map +1 -0
  134. package/dist/documents/internal.js +9 -0
  135. package/dist/documents/internal.js.map +1 -0
  136. package/dist/documents/keyed-slot.d.ts +103 -0
  137. package/dist/documents/keyed-slot.d.ts.map +1 -0
  138. package/dist/documents/keyed-slot.js +395 -0
  139. package/dist/documents/keyed-slot.js.map +1 -0
  140. package/dist/documents/line.d.ts +7 -0
  141. package/dist/documents/line.d.ts.map +1 -0
  142. package/dist/documents/line.js +14 -0
  143. package/dist/documents/line.js.map +1 -0
  144. package/dist/documents/persistence.d.ts +104 -0
  145. package/dist/documents/persistence.d.ts.map +1 -0
  146. package/dist/documents/persistence.js +129 -0
  147. package/dist/documents/persistence.js.map +1 -0
  148. package/dist/documents/residency.d.ts +31 -0
  149. package/dist/documents/residency.d.ts.map +1 -0
  150. package/dist/documents/residency.js +93 -0
  151. package/dist/documents/residency.js.map +1 -0
  152. package/dist/documents/slot.d.ts +109 -0
  153. package/dist/documents/slot.d.ts.map +1 -0
  154. package/dist/documents/slot.js +181 -0
  155. package/dist/documents/slot.js.map +1 -0
  156. package/dist/documents/transaction.d.ts +143 -0
  157. package/dist/documents/transaction.d.ts.map +1 -0
  158. package/dist/documents/transaction.js +442 -0
  159. package/dist/documents/transaction.js.map +1 -0
  160. package/dist/host/activity.d.ts +31 -0
  161. package/dist/host/activity.d.ts.map +1 -0
  162. package/dist/host/activity.js +40 -0
  163. package/dist/host/activity.js.map +1 -0
  164. package/dist/host/adapted.d.ts +49 -0
  165. package/dist/host/adapted.d.ts.map +1 -0
  166. package/dist/host/adapted.js +214 -0
  167. package/dist/host/adapted.js.map +1 -0
  168. package/dist/host/attempt.d.ts +308 -0
  169. package/dist/host/attempt.d.ts.map +1 -0
  170. package/dist/host/attempt.js +1199 -0
  171. package/dist/host/attempt.js.map +1 -0
  172. package/dist/host/backoff.d.ts +29 -0
  173. package/dist/host/backoff.d.ts.map +1 -0
  174. package/dist/host/backoff.js +69 -0
  175. package/dist/host/backoff.js.map +1 -0
  176. package/dist/host/ctx.d.ts +94 -0
  177. package/dist/host/ctx.d.ts.map +1 -0
  178. package/dist/host/ctx.js +200 -0
  179. package/dist/host/ctx.js.map +1 -0
  180. package/dist/host/deadline.d.ts +12 -0
  181. package/dist/host/deadline.d.ts.map +1 -0
  182. package/dist/host/deadline.js +40 -0
  183. package/dist/host/deadline.js.map +1 -0
  184. package/dist/host/dependencies.d.ts +65 -0
  185. package/dist/host/dependencies.d.ts.map +1 -0
  186. package/dist/host/dependencies.js +115 -0
  187. package/dist/host/dependencies.js.map +1 -0
  188. package/dist/host/destination.d.ts +48 -0
  189. package/dist/host/destination.d.ts.map +1 -0
  190. package/dist/host/destination.js +101 -0
  191. package/dist/host/destination.js.map +1 -0
  192. package/dist/host/facet.d.ts +84 -0
  193. package/dist/host/facet.d.ts.map +1 -0
  194. package/dist/host/facet.js +55 -0
  195. package/dist/host/facet.js.map +1 -0
  196. package/dist/host/follow.d.ts +52 -0
  197. package/dist/host/follow.d.ts.map +1 -0
  198. package/dist/host/follow.js +207 -0
  199. package/dist/host/follow.js.map +1 -0
  200. package/dist/host/host.d.ts +571 -0
  201. package/dist/host/host.d.ts.map +1 -0
  202. package/dist/host/host.js +1318 -0
  203. package/dist/host/host.js.map +1 -0
  204. package/dist/host/index.d.ts +17 -0
  205. package/dist/host/index.d.ts.map +1 -0
  206. package/dist/host/index.js +6 -0
  207. package/dist/host/index.js.map +1 -0
  208. package/dist/host/internal.d.ts +11 -0
  209. package/dist/host/internal.d.ts.map +1 -0
  210. package/dist/host/internal.js +9 -0
  211. package/dist/host/internal.js.map +1 -0
  212. package/dist/host/members.d.ts +50 -0
  213. package/dist/host/members.d.ts.map +1 -0
  214. package/dist/host/members.js +107 -0
  215. package/dist/host/members.js.map +1 -0
  216. package/dist/host/native.d.ts +64 -0
  217. package/dist/host/native.d.ts.map +1 -0
  218. package/dist/host/native.js +126 -0
  219. package/dist/host/native.js.map +1 -0
  220. package/dist/host/object.d.ts +331 -0
  221. package/dist/host/object.d.ts.map +1 -0
  222. package/dist/host/object.js +1296 -0
  223. package/dist/host/object.js.map +1 -0
  224. package/dist/host/old-work.d.ts +34 -0
  225. package/dist/host/old-work.d.ts.map +1 -0
  226. package/dist/host/old-work.js +52 -0
  227. package/dist/host/old-work.js.map +1 -0
  228. package/dist/host/parked.d.ts +23 -0
  229. package/dist/host/parked.d.ts.map +1 -0
  230. package/dist/host/parked.js +79 -0
  231. package/dist/host/parked.js.map +1 -0
  232. package/dist/host/presence.d.ts +34 -0
  233. package/dist/host/presence.d.ts.map +1 -0
  234. package/dist/host/presence.js +117 -0
  235. package/dist/host/presence.js.map +1 -0
  236. package/dist/host/readiness.d.ts +27 -0
  237. package/dist/host/readiness.d.ts.map +1 -0
  238. package/dist/host/readiness.js +134 -0
  239. package/dist/host/readiness.js.map +1 -0
  240. package/dist/host/ref-state.d.ts +53 -0
  241. package/dist/host/ref-state.d.ts.map +1 -0
  242. package/dist/host/ref-state.js +83 -0
  243. package/dist/host/ref-state.js.map +1 -0
  244. package/dist/host/reference-keys.d.ts +36 -0
  245. package/dist/host/reference-keys.d.ts.map +1 -0
  246. package/dist/host/reference-keys.js +168 -0
  247. package/dist/host/reference-keys.js.map +1 -0
  248. package/dist/host/reference-source.d.ts +65 -0
  249. package/dist/host/reference-source.d.ts.map +1 -0
  250. package/dist/host/reference-source.js +285 -0
  251. package/dist/host/reference-source.js.map +1 -0
  252. package/dist/host/reference.d.ts +321 -0
  253. package/dist/host/reference.d.ts.map +1 -0
  254. package/dist/host/reference.js +797 -0
  255. package/dist/host/reference.js.map +1 -0
  256. package/dist/host/reload-cycle.d.ts +16 -0
  257. package/dist/host/reload-cycle.d.ts.map +1 -0
  258. package/dist/host/reload-cycle.js +81 -0
  259. package/dist/host/reload-cycle.js.map +1 -0
  260. package/dist/host/retry-on.d.ts +28 -0
  261. package/dist/host/retry-on.d.ts.map +1 -0
  262. package/dist/host/retry-on.js +52 -0
  263. package/dist/host/retry-on.js.map +1 -0
  264. package/dist/host/revocation.d.ts +16 -0
  265. package/dist/host/revocation.d.ts.map +1 -0
  266. package/dist/host/revocation.js +27 -0
  267. package/dist/host/revocation.js.map +1 -0
  268. package/dist/host/root.d.ts +37 -0
  269. package/dist/host/root.d.ts.map +1 -0
  270. package/dist/host/root.js +68 -0
  271. package/dist/host/root.js.map +1 -0
  272. package/dist/host/route.d.ts +64 -0
  273. package/dist/host/route.d.ts.map +1 -0
  274. package/dist/host/route.js +227 -0
  275. package/dist/host/route.js.map +1 -0
  276. package/dist/host/routines.d.ts +78 -0
  277. package/dist/host/routines.d.ts.map +1 -0
  278. package/dist/host/routines.js +398 -0
  279. package/dist/host/routines.js.map +1 -0
  280. package/dist/host/sleep.d.ts +9 -0
  281. package/dist/host/sleep.d.ts.map +1 -0
  282. package/dist/host/sleep.js +40 -0
  283. package/dist/host/sleep.js.map +1 -0
  284. package/dist/host/staging.d.ts +94 -0
  285. package/dist/host/staging.d.ts.map +1 -0
  286. package/dist/host/staging.js +304 -0
  287. package/dist/host/staging.js.map +1 -0
  288. package/dist/host/unbound-clock.d.ts +23 -0
  289. package/dist/host/unbound-clock.d.ts.map +1 -0
  290. package/dist/host/unbound-clock.js +58 -0
  291. package/dist/host/unbound-clock.js.map +1 -0
  292. package/dist/host/unbound.d.ts +37 -0
  293. package/dist/host/unbound.d.ts.map +1 -0
  294. package/dist/host/unbound.js +88 -0
  295. package/dist/host/unbound.js.map +1 -0
  296. package/dist/host/uuid.d.ts +3 -0
  297. package/dist/host/uuid.d.ts.map +1 -0
  298. package/dist/host/uuid.js +38 -0
  299. package/dist/host/uuid.js.map +1 -0
  300. package/dist/index.d.ts +29 -18
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +20 -9
  303. package/dist/index.js.map +1 -1
  304. package/dist/jobs/definition.d.ts +96 -0
  305. package/dist/jobs/definition.d.ts.map +1 -0
  306. package/dist/jobs/definition.js +83 -0
  307. package/dist/jobs/definition.js.map +1 -0
  308. package/dist/jobs/index.d.ts +5 -0
  309. package/dist/jobs/index.d.ts.map +1 -0
  310. package/dist/jobs/index.js +3 -0
  311. package/dist/jobs/index.js.map +1 -0
  312. package/dist/jobs/internal.d.ts +3 -0
  313. package/dist/jobs/internal.d.ts.map +1 -0
  314. package/dist/jobs/internal.js +4 -0
  315. package/dist/jobs/internal.js.map +1 -0
  316. package/dist/jobs/job.d.ts +149 -0
  317. package/dist/jobs/job.d.ts.map +1 -0
  318. package/dist/jobs/job.js +387 -0
  319. package/dist/jobs/job.js.map +1 -0
  320. package/dist/jobs/persisted.d.ts +38 -0
  321. package/dist/jobs/persisted.d.ts.map +1 -0
  322. package/dist/jobs/persisted.js +95 -0
  323. package/dist/jobs/persisted.js.map +1 -0
  324. package/dist/jobs/records.d.ts +231 -0
  325. package/dist/jobs/records.d.ts.map +1 -0
  326. package/dist/jobs/records.js +871 -0
  327. package/dist/jobs/records.js.map +1 -0
  328. package/dist/jobs/run-states.d.ts +69 -0
  329. package/dist/jobs/run-states.d.ts.map +1 -0
  330. package/dist/jobs/run-states.js +228 -0
  331. package/dist/jobs/run-states.js.map +1 -0
  332. package/dist/jobs/run.d.ts +117 -0
  333. package/dist/jobs/run.d.ts.map +1 -0
  334. package/dist/jobs/run.js +204 -0
  335. package/dist/jobs/run.js.map +1 -0
  336. package/dist/jobs/running.d.ts +44 -0
  337. package/dist/jobs/running.d.ts.map +1 -0
  338. package/dist/jobs/running.js +117 -0
  339. package/dist/jobs/running.js.map +1 -0
  340. package/dist/jobs/stored.d.ts +63 -0
  341. package/dist/jobs/stored.d.ts.map +1 -0
  342. package/dist/jobs/stored.js +55 -0
  343. package/dist/jobs/stored.js.map +1 -0
  344. package/dist/link/binary.d.ts +4 -0
  345. package/dist/link/binary.d.ts.map +1 -0
  346. package/dist/link/binary.js +544 -0
  347. package/dist/link/binary.js.map +1 -0
  348. package/dist/link/channel.d.ts +68 -0
  349. package/dist/link/channel.d.ts.map +1 -0
  350. package/dist/link/channel.js +215 -0
  351. package/dist/link/channel.js.map +1 -0
  352. package/dist/link/errors.d.ts +7 -0
  353. package/dist/link/errors.d.ts.map +1 -0
  354. package/dist/link/errors.js +21 -0
  355. package/dist/link/errors.js.map +1 -0
  356. package/dist/link/index.d.ts +8 -0
  357. package/dist/link/index.d.ts.map +1 -0
  358. package/dist/link/index.js +8 -0
  359. package/dist/link/index.js.map +1 -0
  360. package/dist/link/internal.d.ts +9 -0
  361. package/dist/link/internal.d.ts.map +1 -0
  362. package/dist/link/internal.js +10 -0
  363. package/dist/link/internal.js.map +1 -0
  364. package/dist/link/ipc.d.ts +22 -0
  365. package/dist/link/ipc.d.ts.map +1 -0
  366. package/dist/link/ipc.js +64 -0
  367. package/dist/link/ipc.js.map +1 -0
  368. package/dist/link/link.d.ts +34 -0
  369. package/dist/link/link.d.ts.map +1 -0
  370. package/dist/link/link.js +87 -0
  371. package/dist/link/link.js.map +1 -0
  372. package/dist/link/message.d.ts +262 -0
  373. package/dist/link/message.d.ts.map +1 -0
  374. package/dist/link/message.js +156 -0
  375. package/dist/link/message.js.map +1 -0
  376. package/dist/link/part.d.ts +80 -0
  377. package/dist/link/part.d.ts.map +1 -0
  378. package/dist/link/part.js +165 -0
  379. package/dist/link/part.js.map +1 -0
  380. package/dist/link/text.d.ts +6 -0
  381. package/dist/link/text.d.ts.map +1 -0
  382. package/dist/link/text.js +355 -0
  383. package/dist/link/text.js.map +1 -0
  384. package/dist/link/values.d.ts +40 -0
  385. package/dist/link/values.d.ts.map +1 -0
  386. package/dist/link/values.js +121 -0
  387. package/dist/link/values.js.map +1 -0
  388. package/dist/link/websocket.d.ts +26 -0
  389. package/dist/link/websocket.d.ts.map +1 -0
  390. package/dist/link/websocket.js +91 -0
  391. package/dist/link/websocket.js.map +1 -0
  392. package/dist/node/app/app.d.ts +269 -0
  393. package/dist/node/app/app.d.ts.map +1 -0
  394. package/dist/node/app/app.js +513 -0
  395. package/dist/node/app/app.js.map +1 -0
  396. package/dist/node/app/archive.d.ts +37 -0
  397. package/dist/node/app/archive.d.ts.map +1 -0
  398. package/dist/node/app/archive.js +204 -0
  399. package/dist/node/app/archive.js.map +1 -0
  400. package/dist/node/app/blobs.d.ts +23 -0
  401. package/dist/node/app/blobs.d.ts.map +1 -0
  402. package/dist/node/app/blobs.js +64 -0
  403. package/dist/node/app/blobs.js.map +1 -0
  404. package/dist/node/app/data.d.ts +35 -0
  405. package/dist/node/app/data.d.ts.map +1 -0
  406. package/dist/node/app/data.js +44 -0
  407. package/dist/node/app/data.js.map +1 -0
  408. package/dist/node/app/ephemeral-sessions.d.ts +20 -0
  409. package/dist/node/app/ephemeral-sessions.d.ts.map +1 -0
  410. package/dist/node/app/ephemeral-sessions.js +69 -0
  411. package/dist/node/app/ephemeral-sessions.js.map +1 -0
  412. package/dist/node/app/ephemeral.d.ts +11 -0
  413. package/dist/node/app/ephemeral.d.ts.map +1 -0
  414. package/dist/node/app/ephemeral.js +34 -0
  415. package/dist/node/app/ephemeral.js.map +1 -0
  416. package/dist/node/app/files-copy.d.ts +13 -0
  417. package/dist/node/app/files-copy.d.ts.map +1 -0
  418. package/dist/node/app/files-copy.js +86 -0
  419. package/dist/node/app/files-copy.js.map +1 -0
  420. package/dist/node/app/files-entry.d.ts +4 -0
  421. package/dist/node/app/files-entry.d.ts.map +1 -0
  422. package/dist/node/app/files-entry.js +7 -0
  423. package/dist/node/app/files-entry.js.map +1 -0
  424. package/dist/node/app/files-index.d.ts +180 -0
  425. package/dist/node/app/files-index.d.ts.map +1 -0
  426. package/dist/node/app/files-index.js +535 -0
  427. package/dist/node/app/files-index.js.map +1 -0
  428. package/dist/node/app/files.d.ts +363 -0
  429. package/dist/node/app/files.d.ts.map +1 -0
  430. package/dist/node/app/files.js +368 -0
  431. package/dist/node/app/files.js.map +1 -0
  432. package/dist/node/app/folder-views.d.ts +21 -0
  433. package/dist/node/app/folder-views.d.ts.map +1 -0
  434. package/dist/node/app/folder-views.js +55 -0
  435. package/dist/node/app/folder-views.js.map +1 -0
  436. package/dist/node/app/index.d.ts +12 -0
  437. package/dist/node/app/index.d.ts.map +1 -0
  438. package/dist/node/app/index.js +15 -0
  439. package/dist/node/app/index.js.map +1 -0
  440. package/dist/node/app/info.d.ts +66 -0
  441. package/dist/node/app/info.d.ts.map +1 -0
  442. package/dist/node/app/info.js +37 -0
  443. package/dist/node/app/info.js.map +1 -0
  444. package/dist/node/app/invite.d.ts +5 -0
  445. package/dist/node/app/invite.d.ts.map +1 -0
  446. package/dist/node/app/invite.js +64 -0
  447. package/dist/node/app/invite.js.map +1 -0
  448. package/dist/node/app/layout.d.ts +36 -0
  449. package/dist/node/app/layout.d.ts.map +1 -0
  450. package/dist/node/app/layout.js +87 -0
  451. package/dist/node/app/layout.js.map +1 -0
  452. package/dist/node/app/owner.d.ts +31 -0
  453. package/dist/node/app/owner.d.ts.map +1 -0
  454. package/dist/node/app/owner.js +104 -0
  455. package/dist/node/app/owner.js.map +1 -0
  456. package/dist/node/app/pairing.d.ts +55 -0
  457. package/dist/node/app/pairing.d.ts.map +1 -0
  458. package/dist/node/app/pairing.js +183 -0
  459. package/dist/node/app/pairing.js.map +1 -0
  460. package/dist/node/app/secrets.d.ts +16 -0
  461. package/dist/node/app/secrets.d.ts.map +1 -0
  462. package/dist/node/app/secrets.js +72 -0
  463. package/dist/node/app/secrets.js.map +1 -0
  464. package/dist/node/app/sessions.d.ts +72 -0
  465. package/dist/node/app/sessions.d.ts.map +1 -0
  466. package/dist/node/app/sessions.js +222 -0
  467. package/dist/node/app/sessions.js.map +1 -0
  468. package/dist/node/app/tar.d.ts +24 -0
  469. package/dist/node/app/tar.d.ts.map +1 -0
  470. package/dist/node/app/tar.js +167 -0
  471. package/dist/node/app/tar.js.map +1 -0
  472. package/dist/node/app/uploads.d.ts +37 -0
  473. package/dist/node/app/uploads.d.ts.map +1 -0
  474. package/dist/node/app/uploads.js +157 -0
  475. package/dist/node/app/uploads.js.map +1 -0
  476. package/dist/node/app/users.d.ts +37 -0
  477. package/dist/node/app/users.d.ts.map +1 -0
  478. package/dist/node/app/users.js +62 -0
  479. package/dist/node/app/users.js.map +1 -0
  480. package/dist/node/app/worker.d.ts +18 -0
  481. package/dist/node/app/worker.d.ts.map +1 -0
  482. package/dist/node/app/worker.js +84 -0
  483. package/dist/node/app/worker.js.map +1 -0
  484. package/dist/node/compression.d.ts +7 -0
  485. package/dist/node/compression.d.ts.map +1 -0
  486. package/dist/node/compression.js +25 -0
  487. package/dist/node/compression.js.map +1 -0
  488. package/dist/node/http/admission.d.ts +63 -0
  489. package/dist/node/http/admission.d.ts.map +1 -0
  490. package/dist/node/http/admission.js +134 -0
  491. package/dist/node/http/admission.js.map +1 -0
  492. package/dist/node/http/authenticate.d.ts +21 -0
  493. package/dist/node/http/authenticate.d.ts.map +1 -0
  494. package/dist/node/http/authenticate.js +34 -0
  495. package/dist/node/http/authenticate.js.map +1 -0
  496. package/dist/node/http/cookies.d.ts +32 -0
  497. package/dist/node/http/cookies.d.ts.map +1 -0
  498. package/dist/node/http/cookies.js +70 -0
  499. package/dist/node/http/cookies.js.map +1 -0
  500. package/dist/node/http/file.d.ts +23 -0
  501. package/dist/node/http/file.d.ts.map +1 -0
  502. package/dist/node/http/file.js +94 -0
  503. package/dist/node/http/file.js.map +1 -0
  504. package/dist/node/http/headers.d.ts +37 -0
  505. package/dist/node/http/headers.d.ts.map +1 -0
  506. package/dist/node/http/headers.js +136 -0
  507. package/dist/node/http/headers.js.map +1 -0
  508. package/dist/node/http/http.d.ts +111 -0
  509. package/dist/node/http/http.d.ts.map +1 -0
  510. package/dist/node/http/http.js +524 -0
  511. package/dist/node/http/http.js.map +1 -0
  512. package/dist/node/http/incoming.d.ts +19 -0
  513. package/dist/node/http/incoming.d.ts.map +1 -0
  514. package/dist/node/http/incoming.js +31 -0
  515. package/dist/node/http/incoming.js.map +1 -0
  516. package/dist/node/http/index.d.ts +11 -0
  517. package/dist/node/http/index.d.ts.map +1 -0
  518. package/dist/node/http/index.js +12 -0
  519. package/dist/node/http/index.js.map +1 -0
  520. package/dist/node/http/node.d.ts +78 -0
  521. package/dist/node/http/node.d.ts.map +1 -0
  522. package/dist/node/http/node.js +291 -0
  523. package/dist/node/http/node.js.map +1 -0
  524. package/dist/node/http/request.d.ts +60 -0
  525. package/dist/node/http/request.d.ts.map +1 -0
  526. package/dist/node/http/request.js +118 -0
  527. package/dist/node/http/request.js.map +1 -0
  528. package/dist/node/http/response.d.ts +63 -0
  529. package/dist/node/http/response.d.ts.map +1 -0
  530. package/dist/node/http/response.js +202 -0
  531. package/dist/node/http/response.js.map +1 -0
  532. package/dist/node/http/router.d.ts +132 -0
  533. package/dist/node/http/router.d.ts.map +1 -0
  534. package/dist/node/http/router.js +267 -0
  535. package/dist/node/http/router.js.map +1 -0
  536. package/dist/node/http/upgrades.d.ts +61 -0
  537. package/dist/node/http/upgrades.d.ts.map +1 -0
  538. package/dist/node/http/upgrades.js +192 -0
  539. package/dist/node/http/upgrades.js.map +1 -0
  540. package/dist/node/plugins/base-inputs.d.ts +14 -0
  541. package/dist/node/plugins/base-inputs.d.ts.map +1 -0
  542. package/dist/node/plugins/base-inputs.js +33 -0
  543. package/dist/node/plugins/base-inputs.js.map +1 -0
  544. package/dist/node/plugins/build.d.ts +77 -0
  545. package/dist/node/plugins/build.d.ts.map +1 -0
  546. package/dist/node/plugins/build.js +576 -0
  547. package/dist/node/plugins/build.js.map +1 -0
  548. package/dist/node/plugins/css-modules.d.ts +13 -0
  549. package/dist/node/plugins/css-modules.d.ts.map +1 -0
  550. package/dist/node/plugins/css-modules.js +58 -0
  551. package/dist/node/plugins/css-modules.js.map +1 -0
  552. package/dist/node/plugins/discover.d.ts +67 -0
  553. package/dist/node/plugins/discover.d.ts.map +1 -0
  554. package/dist/node/plugins/discover.js +369 -0
  555. package/dist/node/plugins/discover.js.map +1 -0
  556. package/dist/node/plugins/evaluate.d.ts +33 -0
  557. package/dist/node/plugins/evaluate.d.ts.map +1 -0
  558. package/dist/node/plugins/evaluate.js +121 -0
  559. package/dist/node/plugins/evaluate.js.map +1 -0
  560. package/dist/node/plugins/index.d.ts +11 -0
  561. package/dist/node/plugins/index.d.ts.map +1 -0
  562. package/dist/node/plugins/index.js +13 -0
  563. package/dist/node/plugins/index.js.map +1 -0
  564. package/dist/node/plugins/install.d.ts +38 -0
  565. package/dist/node/plugins/install.d.ts.map +1 -0
  566. package/dist/node/plugins/install.js +213 -0
  567. package/dist/node/plugins/install.js.map +1 -0
  568. package/dist/node/plugins/plugins.d.ts +162 -0
  569. package/dist/node/plugins/plugins.d.ts.map +1 -0
  570. package/dist/node/plugins/plugins.js +244 -0
  571. package/dist/node/plugins/plugins.js.map +1 -0
  572. package/dist/node/plugins/runtime.d.ts +57 -0
  573. package/dist/node/plugins/runtime.d.ts.map +1 -0
  574. package/dist/node/plugins/runtime.js +92 -0
  575. package/dist/node/plugins/runtime.js.map +1 -0
  576. package/dist/node/plugins/stack.d.ts +16 -0
  577. package/dist/node/plugins/stack.d.ts.map +1 -0
  578. package/dist/node/plugins/stack.js +61 -0
  579. package/dist/node/plugins/stack.js.map +1 -0
  580. package/dist/node/plugins/testing.d.ts +58 -0
  581. package/dist/node/plugins/testing.d.ts.map +1 -0
  582. package/dist/node/plugins/testing.js +210 -0
  583. package/dist/node/plugins/testing.js.map +1 -0
  584. package/dist/node/plugins/watcher.d.ts +69 -0
  585. package/dist/node/plugins/watcher.d.ts.map +1 -0
  586. package/dist/node/plugins/watcher.js +622 -0
  587. package/dist/node/plugins/watcher.js.map +1 -0
  588. package/dist/node/surfaces/bundle.d.ts +31 -0
  589. package/dist/node/surfaces/bundle.d.ts.map +1 -0
  590. package/dist/node/surfaces/bundle.js +118 -0
  591. package/dist/node/surfaces/bundle.js.map +1 -0
  592. package/dist/node/surfaces/current.d.ts +17 -0
  593. package/dist/node/surfaces/current.d.ts.map +1 -0
  594. package/dist/node/surfaces/current.js +54 -0
  595. package/dist/node/surfaces/current.js.map +1 -0
  596. package/dist/node/surfaces/index.d.ts +6 -0
  597. package/dist/node/surfaces/index.d.ts.map +1 -0
  598. package/dist/node/surfaces/index.js +6 -0
  599. package/dist/node/surfaces/index.js.map +1 -0
  600. package/dist/node/surfaces/published.d.ts +27 -0
  601. package/dist/node/surfaces/published.d.ts.map +1 -0
  602. package/dist/node/surfaces/published.js +142 -0
  603. package/dist/node/surfaces/published.js.map +1 -0
  604. package/dist/node/surfaces/served.d.ts +15 -0
  605. package/dist/node/surfaces/served.d.ts.map +1 -0
  606. package/dist/node/surfaces/served.js +42 -0
  607. package/dist/node/surfaces/served.js.map +1 -0
  608. package/dist/node/surfaces/surface-build.d.ts +53 -0
  609. package/dist/node/surfaces/surface-build.d.ts.map +1 -0
  610. package/dist/node/surfaces/surface-build.js +105 -0
  611. package/dist/node/surfaces/surface-build.js.map +1 -0
  612. package/dist/node/surfaces/tui.d.ts +40 -0
  613. package/dist/node/surfaces/tui.d.ts.map +1 -0
  614. package/dist/node/surfaces/tui.js +55 -0
  615. package/dist/node/surfaces/tui.js.map +1 -0
  616. package/dist/node/surfaces/web.d.ts +56 -0
  617. package/dist/node/surfaces/web.d.ts.map +1 -0
  618. package/dist/node/surfaces/web.js +108 -0
  619. package/dist/node/surfaces/web.js.map +1 -0
  620. package/dist/node/tui/actions.d.ts +49 -0
  621. package/dist/node/tui/actions.d.ts.map +1 -0
  622. package/dist/node/tui/actions.js +195 -0
  623. package/dist/node/tui/actions.js.map +1 -0
  624. package/dist/node/tui/credentials.d.ts +17 -0
  625. package/dist/node/tui/credentials.d.ts.map +1 -0
  626. package/dist/node/tui/credentials.js +54 -0
  627. package/dist/node/tui/credentials.js.map +1 -0
  628. package/dist/node/tui/filter.d.ts +5 -0
  629. package/dist/node/tui/filter.d.ts.map +1 -0
  630. package/dist/node/tui/filter.js +79 -0
  631. package/dist/node/tui/filter.js.map +1 -0
  632. package/dist/node/tui/index.d.ts +6 -0
  633. package/dist/node/tui/index.d.ts.map +1 -0
  634. package/dist/node/tui/index.js +6 -0
  635. package/dist/node/tui/index.js.map +1 -0
  636. package/dist/node/tui/launcher.d.ts +40 -0
  637. package/dist/node/tui/launcher.d.ts.map +1 -0
  638. package/dist/node/tui/launcher.js +439 -0
  639. package/dist/node/tui/launcher.js.map +1 -0
  640. package/dist/node/tui/pipe.d.ts +18 -0
  641. package/dist/node/tui/pipe.d.ts.map +1 -0
  642. package/dist/node/tui/pipe.js +134 -0
  643. package/dist/node/tui/pipe.js.map +1 -0
  644. package/dist/node/tui/sandbox.d.ts +54 -0
  645. package/dist/node/tui/sandbox.d.ts.map +1 -0
  646. package/dist/node/tui/sandbox.js +431 -0
  647. package/dist/node/tui/sandbox.js.map +1 -0
  648. package/dist/node/workers/base.d.ts +30 -0
  649. package/dist/node/workers/base.d.ts.map +1 -0
  650. package/dist/node/workers/base.js +255 -0
  651. package/dist/node/workers/base.js.map +1 -0
  652. package/dist/node/workers/child.d.ts +4 -0
  653. package/dist/node/workers/child.d.ts.map +1 -0
  654. package/dist/node/workers/child.js +6 -0
  655. package/dist/node/workers/child.js.map +1 -0
  656. package/dist/node/workers/control.d.ts +83 -0
  657. package/dist/node/workers/control.d.ts.map +1 -0
  658. package/dist/node/workers/control.js +77 -0
  659. package/dist/node/workers/control.js.map +1 -0
  660. package/dist/node/workers/index.d.ts +4 -0
  661. package/dist/node/workers/index.d.ts.map +1 -0
  662. package/dist/node/workers/index.js +7 -0
  663. package/dist/node/workers/index.js.map +1 -0
  664. package/dist/node/workers/lock.d.ts +30 -0
  665. package/dist/node/workers/lock.d.ts.map +1 -0
  666. package/dist/node/workers/lock.js +180 -0
  667. package/dist/node/workers/lock.js.map +1 -0
  668. package/dist/node/workers/main.d.ts +46 -0
  669. package/dist/node/workers/main.d.ts.map +1 -0
  670. package/dist/node/workers/main.js +230 -0
  671. package/dist/node/workers/main.js.map +1 -0
  672. package/dist/node/workers/process.d.ts +42 -0
  673. package/dist/node/workers/process.d.ts.map +1 -0
  674. package/dist/node/workers/process.js +125 -0
  675. package/dist/node/workers/process.js.map +1 -0
  676. package/dist/node/workers/workers.d.ts +122 -0
  677. package/dist/node/workers/workers.d.ts.map +1 -0
  678. package/dist/node/workers/workers.js +677 -0
  679. package/dist/node/workers/workers.js.map +1 -0
  680. package/dist/output.d.ts +1 -1
  681. package/dist/output.d.ts.map +1 -1
  682. package/dist/output.js +4 -2
  683. package/dist/output.js.map +1 -1
  684. package/dist/react/hooks.d.ts +43 -0
  685. package/dist/react/hooks.d.ts.map +1 -0
  686. package/dist/react/hooks.js +82 -0
  687. package/dist/react/hooks.js.map +1 -0
  688. package/dist/react/index.d.ts +3 -0
  689. package/dist/react/index.d.ts.map +1 -0
  690. package/dist/react/index.js +4 -0
  691. package/dist/react/index.js.map +1 -0
  692. package/dist/react/stores.d.ts +9 -0
  693. package/dist/react/stores.d.ts.map +1 -0
  694. package/dist/react/stores.js +37 -0
  695. package/dist/react/stores.js.map +1 -0
  696. package/dist/registries/contribution.d.ts +50 -0
  697. package/dist/registries/contribution.d.ts.map +1 -0
  698. package/dist/registries/contribution.js +129 -0
  699. package/dist/registries/contribution.js.map +1 -0
  700. package/dist/registries/entries.d.ts +18 -0
  701. package/dist/registries/entries.d.ts.map +1 -0
  702. package/dist/registries/entries.js +42 -0
  703. package/dist/registries/entries.js.map +1 -0
  704. package/dist/registries/index.d.ts +3 -0
  705. package/dist/registries/index.d.ts.map +1 -0
  706. package/dist/registries/index.js +5 -0
  707. package/dist/registries/index.js.map +1 -0
  708. package/dist/registries/internal.d.ts +4 -0
  709. package/dist/registries/internal.d.ts.map +1 -0
  710. package/dist/registries/internal.js +5 -0
  711. package/dist/registries/internal.js.map +1 -0
  712. package/dist/registries/record.d.ts +115 -0
  713. package/dist/registries/record.d.ts.map +1 -0
  714. package/dist/registries/record.js +283 -0
  715. package/dist/registries/record.js.map +1 -0
  716. package/dist/registries/registry.d.ts +74 -0
  717. package/dist/registries/registry.d.ts.map +1 -0
  718. package/dist/registries/registry.js +14 -0
  719. package/dist/registries/registry.js.map +1 -0
  720. package/dist/registries/value.d.ts +48 -0
  721. package/dist/registries/value.d.ts.map +1 -0
  722. package/dist/registries/value.js +224 -0
  723. package/dist/registries/value.js.map +1 -0
  724. package/dist/remote/calls.d.ts +25 -0
  725. package/dist/remote/calls.d.ts.map +1 -0
  726. package/dist/remote/calls.js +62 -0
  727. package/dist/remote/calls.js.map +1 -0
  728. package/dist/remote/consumer.d.ts +43 -0
  729. package/dist/remote/consumer.d.ts.map +1 -0
  730. package/dist/remote/consumer.js +350 -0
  731. package/dist/remote/consumer.js.map +1 -0
  732. package/dist/remote/hold.d.ts +141 -0
  733. package/dist/remote/hold.d.ts.map +1 -0
  734. package/dist/remote/hold.js +579 -0
  735. package/dist/remote/hold.js.map +1 -0
  736. package/dist/remote/host-link.d.ts +77 -0
  737. package/dist/remote/host-link.d.ts.map +1 -0
  738. package/dist/remote/host-link.js +184 -0
  739. package/dist/remote/host-link.js.map +1 -0
  740. package/dist/remote/internal.d.ts +6 -0
  741. package/dist/remote/internal.d.ts.map +1 -0
  742. package/dist/remote/internal.js +6 -0
  743. package/dist/remote/internal.js.map +1 -0
  744. package/dist/remote/path.d.ts +46 -0
  745. package/dist/remote/path.d.ts.map +1 -0
  746. package/dist/remote/path.js +73 -0
  747. package/dist/remote/path.js.map +1 -0
  748. package/dist/remote/provider.d.ts +89 -0
  749. package/dist/remote/provider.d.ts.map +1 -0
  750. package/dist/remote/provider.js +597 -0
  751. package/dist/remote/provider.js.map +1 -0
  752. package/dist/remote/relay.d.ts +69 -0
  753. package/dist/remote/relay.d.ts.map +1 -0
  754. package/dist/remote/relay.js +219 -0
  755. package/dist/remote/relay.js.map +1 -0
  756. package/dist/remote/remote-object.d.ts +138 -0
  757. package/dist/remote/remote-object.d.ts.map +1 -0
  758. package/dist/remote/remote-object.js +492 -0
  759. package/dist/remote/remote-object.js.map +1 -0
  760. package/dist/remote/replica.d.ts +59 -0
  761. package/dist/remote/replica.d.ts.map +1 -0
  762. package/dist/remote/replica.js +125 -0
  763. package/dist/remote/replica.js.map +1 -0
  764. package/dist/sqlite/cloudflare.d.ts +2 -0
  765. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  766. package/dist/sqlite/cloudflare.js +10 -0
  767. package/dist/sqlite/cloudflare.js.map +1 -1
  768. package/dist/sqlite/database.d.ts +5 -2
  769. package/dist/sqlite/database.d.ts.map +1 -1
  770. package/dist/sqlite/database.js.map +1 -1
  771. package/dist/sqlite/node.d.ts +13 -2
  772. package/dist/sqlite/node.d.ts.map +1 -1
  773. package/dist/sqlite/node.js +31 -8
  774. package/dist/sqlite/node.js.map +1 -1
  775. package/dist/state/batch.d.ts +64 -0
  776. package/dist/state/batch.d.ts.map +1 -0
  777. package/dist/state/batch.js +164 -0
  778. package/dist/state/batch.js.map +1 -0
  779. package/dist/state/derive.d.ts +52 -0
  780. package/dist/state/derive.d.ts.map +1 -0
  781. package/dist/state/derive.js +182 -0
  782. package/dist/state/derive.js.map +1 -0
  783. package/dist/state/index.d.ts +6 -0
  784. package/dist/state/index.d.ts.map +1 -0
  785. package/dist/state/index.js +4 -0
  786. package/dist/state/index.js.map +1 -0
  787. package/dist/state/internal.d.ts +6 -0
  788. package/dist/state/internal.d.ts.map +1 -0
  789. package/dist/state/internal.js +8 -0
  790. package/dist/state/internal.js.map +1 -0
  791. package/dist/state/native-source.d.ts +106 -0
  792. package/dist/state/native-source.d.ts.map +1 -0
  793. package/dist/state/native-source.js +240 -0
  794. package/dist/state/native-source.js.map +1 -0
  795. package/dist/state/watchable.d.ts +114 -0
  796. package/dist/state/watchable.d.ts.map +1 -0
  797. package/dist/state/watchable.js +156 -0
  798. package/dist/state/watchable.js.map +1 -0
  799. package/dist/state/writable.d.ts +32 -0
  800. package/dist/state/writable.d.ts.map +1 -0
  801. package/dist/state/writable.js +49 -0
  802. package/dist/state/writable.js.map +1 -0
  803. package/dist/store/adapter.d.ts +67 -0
  804. package/dist/store/adapter.d.ts.map +1 -0
  805. package/dist/store/adapter.js +118 -0
  806. package/dist/store/adapter.js.map +1 -0
  807. package/dist/store/allocator.d.ts +17 -0
  808. package/dist/store/allocator.d.ts.map +1 -0
  809. package/dist/store/allocator.js +30 -0
  810. package/dist/store/allocator.js.map +1 -0
  811. package/dist/store/applier.d.ts +8 -0
  812. package/dist/store/applier.d.ts.map +1 -0
  813. package/dist/store/applier.js +375 -0
  814. package/dist/store/applier.js.map +1 -0
  815. package/dist/store/apply-batch.d.ts +12 -0
  816. package/dist/store/apply-batch.d.ts.map +1 -0
  817. package/dist/store/apply-batch.js +83 -0
  818. package/dist/store/apply-batch.js.map +1 -0
  819. package/dist/store/archive.d.ts +32 -0
  820. package/dist/store/archive.d.ts.map +1 -0
  821. package/dist/store/archive.js +130 -0
  822. package/dist/store/archive.js.map +1 -0
  823. package/dist/store/backend.d.ts +10 -0
  824. package/dist/store/backend.d.ts.map +1 -0
  825. package/dist/store/backend.js +15 -0
  826. package/dist/store/backend.js.map +1 -0
  827. package/dist/store/catalog.d.ts +24 -0
  828. package/dist/store/catalog.d.ts.map +1 -0
  829. package/dist/store/catalog.js +17 -0
  830. package/dist/store/catalog.js.map +1 -0
  831. package/dist/store/claims.d.ts +23 -0
  832. package/dist/store/claims.d.ts.map +1 -0
  833. package/dist/store/claims.js +65 -0
  834. package/dist/store/claims.js.map +1 -0
  835. package/dist/store/columns.d.ts +77 -0
  836. package/dist/store/columns.d.ts.map +1 -0
  837. package/dist/store/columns.js +77 -0
  838. package/dist/store/columns.js.map +1 -0
  839. package/dist/store/engine.d.ts +176 -0
  840. package/dist/store/engine.d.ts.map +1 -0
  841. package/dist/store/engine.js +283 -0
  842. package/dist/store/engine.js.map +1 -0
  843. package/dist/store/evaluate.d.ts +17 -0
  844. package/dist/store/evaluate.d.ts.map +1 -0
  845. package/dist/store/evaluate.js +128 -0
  846. package/dist/store/evaluate.js.map +1 -0
  847. package/dist/store/export.d.ts +17 -0
  848. package/dist/store/export.d.ts.map +1 -0
  849. package/dist/store/export.js +200 -0
  850. package/dist/store/export.js.map +1 -0
  851. package/dist/store/expression.d.ts +150 -0
  852. package/dist/store/expression.d.ts.map +1 -0
  853. package/dist/store/expression.js +268 -0
  854. package/dist/store/expression.js.map +1 -0
  855. package/dist/store/import.d.ts +10 -0
  856. package/dist/store/import.d.ts.map +1 -0
  857. package/dist/store/import.js +276 -0
  858. package/dist/store/import.js.map +1 -0
  859. package/dist/store/index.d.ts +16 -0
  860. package/dist/store/index.d.ts.map +1 -0
  861. package/dist/store/index.js +13 -0
  862. package/dist/store/index.js.map +1 -0
  863. package/dist/store/json-column.d.ts +33 -0
  864. package/dist/store/json-column.d.ts.map +1 -0
  865. package/dist/store/json-column.js +62 -0
  866. package/dist/store/json-column.js.map +1 -0
  867. package/dist/store/jsonl.d.ts +9 -0
  868. package/dist/store/jsonl.d.ts.map +1 -0
  869. package/dist/store/jsonl.js +61 -0
  870. package/dist/store/jsonl.js.map +1 -0
  871. package/dist/store/live-query.d.ts +108 -0
  872. package/dist/store/live-query.d.ts.map +1 -0
  873. package/dist/store/live-query.js +254 -0
  874. package/dist/store/live-query.js.map +1 -0
  875. package/dist/store/outbox.d.ts +26 -0
  876. package/dist/store/outbox.d.ts.map +1 -0
  877. package/dist/store/outbox.js +80 -0
  878. package/dist/store/outbox.js.map +1 -0
  879. package/dist/store/query.d.ts +39 -0
  880. package/dist/store/query.d.ts.map +1 -0
  881. package/dist/store/query.js +97 -0
  882. package/dist/store/query.js.map +1 -0
  883. package/dist/store/refusal.d.ts +15 -0
  884. package/dist/store/refusal.d.ts.map +1 -0
  885. package/dist/store/refusal.js +36 -0
  886. package/dist/store/refusal.js.map +1 -0
  887. package/dist/store/rows.d.ts +80 -0
  888. package/dist/store/rows.d.ts.map +1 -0
  889. package/dist/store/rows.js +183 -0
  890. package/dist/store/rows.js.map +1 -0
  891. package/dist/store/schema.d.ts +25 -0
  892. package/dist/store/schema.d.ts.map +1 -0
  893. package/dist/store/schema.js +115 -0
  894. package/dist/store/schema.js.map +1 -0
  895. package/dist/store/sql.d.ts +73 -0
  896. package/dist/store/sql.d.ts.map +1 -0
  897. package/dist/store/sql.js +234 -0
  898. package/dist/store/sql.js.map +1 -0
  899. package/dist/store/step.d.ts +50 -0
  900. package/dist/store/step.d.ts.map +1 -0
  901. package/dist/store/step.js +52 -0
  902. package/dist/store/step.js.map +1 -0
  903. package/dist/store/store.d.ts +171 -0
  904. package/dist/store/store.d.ts.map +1 -0
  905. package/dist/store/store.js +818 -0
  906. package/dist/store/store.js.map +1 -0
  907. package/dist/store/table-changes.d.ts +29 -0
  908. package/dist/store/table-changes.d.ts.map +1 -0
  909. package/dist/store/table-changes.js +102 -0
  910. package/dist/store/table-changes.js.map +1 -0
  911. package/dist/store/table-evolve.d.ts +74 -0
  912. package/dist/store/table-evolve.d.ts.map +1 -0
  913. package/dist/store/table-evolve.js +201 -0
  914. package/dist/store/table-evolve.js.map +1 -0
  915. package/dist/store/table-handle.d.ts +73 -0
  916. package/dist/store/table-handle.d.ts.map +1 -0
  917. package/dist/store/table-handle.js +101 -0
  918. package/dist/store/table-handle.js.map +1 -0
  919. package/dist/store/table-history.d.ts +75 -0
  920. package/dist/store/table-history.d.ts.map +1 -0
  921. package/dist/store/table-history.js +42 -0
  922. package/dist/store/table-history.js.map +1 -0
  923. package/dist/store/table-migration.d.ts +16 -0
  924. package/dist/store/table-migration.d.ts.map +1 -0
  925. package/dist/store/table-migration.js +202 -0
  926. package/dist/store/table-migration.js.map +1 -0
  927. package/dist/store/table-writes.d.ts +125 -0
  928. package/dist/store/table-writes.d.ts.map +1 -0
  929. package/dist/store/table-writes.js +170 -0
  930. package/dist/store/table-writes.js.map +1 -0
  931. package/dist/store/table.d.ts +80 -0
  932. package/dist/store/table.d.ts.map +1 -0
  933. package/dist/store/table.js +103 -0
  934. package/dist/store/table.js.map +1 -0
  935. package/dist/store/text.d.ts +14 -0
  936. package/dist/store/text.d.ts.map +1 -0
  937. package/dist/store/text.js +51 -0
  938. package/dist/store/text.js.map +1 -0
  939. package/dist/store/writes.d.ts +5 -0
  940. package/dist/store/writes.d.ts.map +1 -0
  941. package/dist/store/writes.js +4 -0
  942. package/dist/store/writes.js.map +1 -0
  943. package/dist/surfaces/active-language.d.ts +20 -0
  944. package/dist/surfaces/active-language.d.ts.map +1 -0
  945. package/dist/surfaces/active-language.js +78 -0
  946. package/dist/surfaces/active-language.js.map +1 -0
  947. package/dist/surfaces/active-theme.d.ts +16 -0
  948. package/dist/surfaces/active-theme.d.ts.map +1 -0
  949. package/dist/surfaces/active-theme.js +47 -0
  950. package/dist/surfaces/active-theme.js.map +1 -0
  951. package/dist/surfaces/client.d.ts +96 -0
  952. package/dist/surfaces/client.d.ts.map +1 -0
  953. package/dist/surfaces/client.js +264 -0
  954. package/dist/surfaces/client.js.map +1 -0
  955. package/dist/surfaces/connection.d.ts +49 -0
  956. package/dist/surfaces/connection.d.ts.map +1 -0
  957. package/dist/surfaces/connection.js +142 -0
  958. package/dist/surfaces/connection.js.map +1 -0
  959. package/dist/surfaces/format.d.ts +5 -0
  960. package/dist/surfaces/format.d.ts.map +1 -0
  961. package/dist/surfaces/format.js +37 -0
  962. package/dist/surfaces/format.js.map +1 -0
  963. package/dist/surfaces/index.d.ts +15 -0
  964. package/dist/surfaces/index.d.ts.map +1 -0
  965. package/dist/surfaces/index.js +18 -0
  966. package/dist/surfaces/index.js.map +1 -0
  967. package/dist/surfaces/language.d.ts +53 -0
  968. package/dist/surfaces/language.d.ts.map +1 -0
  969. package/dist/surfaces/language.js +74 -0
  970. package/dist/surfaces/language.js.map +1 -0
  971. package/dist/surfaces/loaded.d.ts +42 -0
  972. package/dist/surfaces/loaded.d.ts.map +1 -0
  973. package/dist/surfaces/loaded.js +116 -0
  974. package/dist/surfaces/loaded.js.map +1 -0
  975. package/dist/surfaces/locale-choice.d.ts +25 -0
  976. package/dist/surfaces/locale-choice.d.ts.map +1 -0
  977. package/dist/surfaces/locale-choice.js +14 -0
  978. package/dist/surfaces/locale-choice.js.map +1 -0
  979. package/dist/surfaces/messages.d.ts +67 -0
  980. package/dist/surfaces/messages.d.ts.map +1 -0
  981. package/dist/surfaces/messages.js +112 -0
  982. package/dist/surfaces/messages.js.map +1 -0
  983. package/dist/surfaces/page-state.d.ts +14 -0
  984. package/dist/surfaces/page-state.d.ts.map +1 -0
  985. package/dist/surfaces/page-state.js +43 -0
  986. package/dist/surfaces/page-state.js.map +1 -0
  987. package/dist/surfaces/preference.d.ts +32 -0
  988. package/dist/surfaces/preference.d.ts.map +1 -0
  989. package/dist/surfaces/preference.js +72 -0
  990. package/dist/surfaces/preference.js.map +1 -0
  991. package/dist/surfaces/registered.d.ts +33 -0
  992. package/dist/surfaces/registered.d.ts.map +1 -0
  993. package/dist/surfaces/registered.js +51 -0
  994. package/dist/surfaces/registered.js.map +1 -0
  995. package/dist/surfaces/scripts.d.ts +84 -0
  996. package/dist/surfaces/scripts.d.ts.map +1 -0
  997. package/dist/surfaces/scripts.js +28 -0
  998. package/dist/surfaces/scripts.js.map +1 -0
  999. package/dist/surfaces/theme-choice.d.ts +31 -0
  1000. package/dist/surfaces/theme-choice.d.ts.map +1 -0
  1001. package/dist/surfaces/theme-choice.js +18 -0
  1002. package/dist/surfaces/theme-choice.js.map +1 -0
  1003. package/dist/surfaces/themes.d.ts +43 -0
  1004. package/dist/surfaces/themes.d.ts.map +1 -0
  1005. package/dist/surfaces/themes.js +110 -0
  1006. package/dist/surfaces/themes.js.map +1 -0
  1007. package/dist/surfaces/translations.d.ts +29 -0
  1008. package/dist/surfaces/translations.d.ts.map +1 -0
  1009. package/dist/surfaces/translations.js +57 -0
  1010. package/dist/surfaces/translations.js.map +1 -0
  1011. package/dist/sync/batch.d.ts +18 -0
  1012. package/dist/sync/batch.d.ts.map +1 -0
  1013. package/dist/sync/batch.js +125 -0
  1014. package/dist/sync/batch.js.map +1 -0
  1015. package/dist/sync/client.d.ts +166 -0
  1016. package/dist/sync/client.d.ts.map +1 -0
  1017. package/dist/sync/client.js +438 -0
  1018. package/dist/sync/client.js.map +1 -0
  1019. package/dist/sync/files.d.ts +46 -0
  1020. package/dist/sync/files.d.ts.map +1 -0
  1021. package/dist/sync/files.js +13 -0
  1022. package/dist/sync/files.js.map +1 -0
  1023. package/dist/sync/filesystem.d.ts +37 -0
  1024. package/dist/sync/filesystem.d.ts.map +1 -0
  1025. package/dist/sync/filesystem.js +185 -0
  1026. package/dist/sync/filesystem.js.map +1 -0
  1027. package/dist/sync/index.d.ts +8 -0
  1028. package/dist/sync/index.d.ts.map +1 -0
  1029. package/dist/sync/index.js +9 -0
  1030. package/dist/sync/index.js.map +1 -0
  1031. package/dist/sync/lines.d.ts +18 -0
  1032. package/dist/sync/lines.d.ts.map +1 -0
  1033. package/dist/sync/lines.js +46 -0
  1034. package/dist/sync/lines.js.map +1 -0
  1035. package/dist/sync/remote.d.ts +130 -0
  1036. package/dist/sync/remote.d.ts.map +1 -0
  1037. package/dist/sync/remote.js +46 -0
  1038. package/dist/sync/remote.js.map +1 -0
  1039. package/dist/sync/state.d.ts +17 -0
  1040. package/dist/sync/state.d.ts.map +1 -0
  1041. package/dist/sync/state.js +40 -0
  1042. package/dist/sync/state.js.map +1 -0
  1043. package/dist/telemetry-ingest/batch.d.ts +70 -0
  1044. package/dist/telemetry-ingest/batch.d.ts.map +1 -0
  1045. package/dist/telemetry-ingest/batch.js +110 -0
  1046. package/dist/telemetry-ingest/batch.js.map +1 -0
  1047. package/dist/telemetry-ingest/facet.d.ts +21 -0
  1048. package/dist/telemetry-ingest/facet.d.ts.map +1 -0
  1049. package/dist/telemetry-ingest/facet.js +96 -0
  1050. package/dist/telemetry-ingest/facet.js.map +1 -0
  1051. package/dist/telemetry-ingest/index.d.ts +5 -0
  1052. package/dist/telemetry-ingest/index.d.ts.map +1 -0
  1053. package/dist/telemetry-ingest/index.js +8 -0
  1054. package/dist/telemetry-ingest/index.js.map +1 -0
  1055. package/dist/telemetry-ingest/recorder.d.ts +50 -0
  1056. package/dist/telemetry-ingest/recorder.d.ts.map +1 -0
  1057. package/dist/telemetry-ingest/recorder.js +298 -0
  1058. package/dist/telemetry-ingest/recorder.js.map +1 -0
  1059. package/dist/telemetry-ingest/sender.d.ts +14 -0
  1060. package/dist/telemetry-ingest/sender.d.ts.map +1 -0
  1061. package/dist/telemetry-ingest/sender.js +64 -0
  1062. package/dist/telemetry-ingest/sender.js.map +1 -0
  1063. package/dist/telemetry-sqlite/index.d.ts +13 -4
  1064. package/dist/telemetry-sqlite/index.d.ts.map +1 -1
  1065. package/dist/telemetry-sqlite/index.js +81 -241
  1066. package/dist/telemetry-sqlite/index.js.map +1 -1
  1067. package/dist/telemetry-sqlite/node.d.ts +13 -0
  1068. package/dist/telemetry-sqlite/node.d.ts.map +1 -0
  1069. package/dist/telemetry-sqlite/node.js +27 -0
  1070. package/dist/telemetry-sqlite/node.js.map +1 -0
  1071. package/dist/telemetry-sqlite/schema.d.ts +9 -0
  1072. package/dist/telemetry-sqlite/schema.d.ts.map +1 -0
  1073. package/dist/telemetry-sqlite/schema.js +61 -0
  1074. package/dist/telemetry-sqlite/schema.js.map +1 -0
  1075. package/dist/telemetry-sqlite/store.d.ts +3 -0
  1076. package/dist/telemetry-sqlite/store.d.ts.map +1 -1
  1077. package/dist/telemetry-sqlite/store.js +24 -13
  1078. package/dist/telemetry-sqlite/store.js.map +1 -1
  1079. package/dist/telemetry.d.ts +937 -0
  1080. package/dist/telemetry.d.ts.map +1 -0
  1081. package/dist/telemetry.js +470 -0
  1082. package/dist/telemetry.js.map +1 -0
  1083. package/dist/tui/bridge.d.ts +112 -0
  1084. package/dist/tui/bridge.d.ts.map +1 -0
  1085. package/dist/tui/bridge.js +9 -0
  1086. package/dist/tui/bridge.js.map +1 -0
  1087. package/dist/tui/channel.d.ts +44 -0
  1088. package/dist/tui/channel.d.ts.map +1 -0
  1089. package/dist/tui/channel.js +150 -0
  1090. package/dist/tui/channel.js.map +1 -0
  1091. package/dist/tui/frames.d.ts +5 -0
  1092. package/dist/tui/frames.d.ts.map +1 -0
  1093. package/dist/tui/frames.js +52 -0
  1094. package/dist/tui/frames.js.map +1 -0
  1095. package/dist/tui/index.d.ts +7 -0
  1096. package/dist/tui/index.d.ts.map +1 -0
  1097. package/dist/tui/index.js +8 -0
  1098. package/dist/tui/index.js.map +1 -0
  1099. package/dist/tui/runtime.d.ts +46 -0
  1100. package/dist/tui/runtime.d.ts.map +1 -0
  1101. package/dist/tui/runtime.js +101 -0
  1102. package/dist/tui/runtime.js.map +1 -0
  1103. package/dist/tui/scope.d.ts +46 -0
  1104. package/dist/tui/scope.d.ts.map +1 -0
  1105. package/dist/tui/scope.js +141 -0
  1106. package/dist/tui/scope.js.map +1 -0
  1107. package/dist/tui/terminal.d.ts +15 -0
  1108. package/dist/tui/terminal.d.ts.map +1 -0
  1109. package/dist/tui/terminal.js +37 -0
  1110. package/dist/tui/terminal.js.map +1 -0
  1111. package/dist/tui/theme.d.ts +17 -0
  1112. package/dist/tui/theme.d.ts.map +1 -0
  1113. package/dist/tui/theme.js +38 -0
  1114. package/dist/tui/theme.js.map +1 -0
  1115. package/dist/watch.d.ts +194 -0
  1116. package/dist/watch.d.ts.map +1 -0
  1117. package/dist/watch.js +383 -0
  1118. package/dist/watch.js.map +1 -0
  1119. package/dist/web/environment.d.ts +4 -0
  1120. package/dist/web/environment.d.ts.map +1 -0
  1121. package/dist/web/environment.js +37 -0
  1122. package/dist/web/environment.js.map +1 -0
  1123. package/dist/web/index.d.ts +5 -0
  1124. package/dist/web/index.d.ts.map +1 -0
  1125. package/dist/web/index.js +7 -0
  1126. package/dist/web/index.js.map +1 -0
  1127. package/dist/web/language.d.ts +7 -0
  1128. package/dist/web/language.d.ts.map +1 -0
  1129. package/dist/web/language.js +21 -0
  1130. package/dist/web/language.js.map +1 -0
  1131. package/dist/web/page.d.ts +29 -0
  1132. package/dist/web/page.d.ts.map +1 -0
  1133. package/dist/web/page.js +92 -0
  1134. package/dist/web/page.js.map +1 -0
  1135. package/dist/web/scripts.d.ts +23 -0
  1136. package/dist/web/scripts.d.ts.map +1 -0
  1137. package/dist/web/scripts.js +50 -0
  1138. package/dist/web/scripts.js.map +1 -0
  1139. package/dist/web/styles.d.ts +17 -0
  1140. package/dist/web/styles.d.ts.map +1 -0
  1141. package/dist/web/styles.js +218 -0
  1142. package/dist/web/styles.js.map +1 -0
  1143. package/dist/web/themes.d.ts +6 -0
  1144. package/dist/web/themes.d.ts.map +1 -0
  1145. package/dist/web/themes.js +31 -0
  1146. package/dist/web/themes.js.map +1 -0
  1147. package/docs/benchmarks.md +1036 -0
  1148. package/docs/decisions.md +3436 -0
  1149. package/docs/dependencies/book.md +1671 -0
  1150. package/docs/dependencies/index.html +2641 -0
  1151. package/docs/dependencies/model.md +330 -0
  1152. package/docs/design.md +3065 -0
  1153. package/docs/durable-observers/book.md +432 -0
  1154. package/docs/durable-observers/index.html +517 -0
  1155. package/docs/flow-control/book.md +333 -0
  1156. package/docs/flow-control/fold/index.html +265 -0
  1157. package/docs/flow-control/index.html +548 -0
  1158. package/docs/flow-control/window/index.html +228 -0
  1159. package/docs/guide-plugins-hosts/book.md +957 -0
  1160. package/docs/guide-plugins-hosts/index.html +952 -0
  1161. package/docs/http-workers/book.md +378 -0
  1162. package/docs/http-workers/index.html +515 -0
  1163. package/docs/i18n/book.md +217 -0
  1164. package/docs/i18n/index.html +344 -0
  1165. package/docs/layer-1.md +311 -0
  1166. package/docs/layer-2.md +216 -0
  1167. package/docs/p3-features/README.md +6 -0
  1168. package/docs/p3-features/book.md +478 -0
  1169. package/docs/plugin-authoring.md +276 -0
  1170. package/docs/plugin-model/book.md +186 -0
  1171. package/docs/plugin-model/index.html +310 -0
  1172. package/docs/plugin-primer/book.md +273 -0
  1173. package/docs/plugin-primer/index.html +430 -0
  1174. package/docs/slice-1.md +236 -0
  1175. package/docs/slice-10.md +288 -0
  1176. package/docs/slice-11.md +114 -0
  1177. package/docs/slice-12.md +132 -0
  1178. package/docs/slice-13.md +121 -0
  1179. package/docs/slice-2.md +174 -0
  1180. package/docs/slice-3a.md +296 -0
  1181. package/docs/slice-3b.md +197 -0
  1182. package/docs/slice-4.md +146 -0
  1183. package/docs/slice-4a.md +418 -0
  1184. package/docs/slice-4b.md +208 -0
  1185. package/docs/slice-5.md +281 -0
  1186. package/docs/slice-6a.md +676 -0
  1187. package/docs/slice-6b.md +332 -0
  1188. package/docs/slice-7a.md +130 -0
  1189. package/docs/slice-7b/book.md +608 -0
  1190. package/docs/slice-7b/index.html +842 -0
  1191. package/docs/slice-7b.md +255 -0
  1192. package/docs/slice-7c.md +165 -0
  1193. package/docs/slice-8.md +194 -0
  1194. package/docs/slice-9.md +110 -0
  1195. package/docs/slices.md +241 -0
  1196. package/docs/store/book.md +670 -0
  1197. package/docs/store/index.html +861 -0
  1198. package/docs/store/walkthrough.md +193 -0
  1199. package/docs/theming/book.md +223 -0
  1200. package/docs/theming/index.html +371 -0
  1201. package/docs/tutorial/book.md +2169 -0
  1202. package/docs/tutorial/index.html +2112 -0
  1203. package/docs/tutorial/screens/click-after.png +0 -0
  1204. package/docs/tutorial/screens/click-before.png +0 -0
  1205. package/docs/tutorial/screens/edited.png +0 -0
  1206. package/docs/tutorial/screens/french.png +0 -0
  1207. package/docs/tutorial/screens/harbor.png +0 -0
  1208. package/docs/tutorial/screens/page.png +0 -0
  1209. package/docs/tutorial/screens/traces-ada.png +0 -0
  1210. package/docs/tutorial/screens/traces.png +0 -0
  1211. package/package.json +114 -20
  1212. package/src/delta/README.md +69 -0
  1213. package/dist/cell.d.ts +0 -122
  1214. package/dist/cell.d.ts.map +0 -1
  1215. package/dist/cell.js +0 -356
  1216. package/dist/cell.js.map +0 -1
  1217. package/dist/cluster.d.ts +0 -27
  1218. package/dist/cluster.d.ts.map +0 -1
  1219. package/dist/cluster.js +0 -230
  1220. package/dist/cluster.js.map +0 -1
  1221. package/dist/connection.d.ts +0 -270
  1222. package/dist/connection.d.ts.map +0 -1
  1223. package/dist/connection.js +0 -1216
  1224. package/dist/connection.js.map +0 -1
  1225. package/dist/contract.d.ts +0 -208
  1226. package/dist/contract.d.ts.map +0 -1
  1227. package/dist/contract.js +0 -246
  1228. package/dist/contract.js.map +0 -1
  1229. package/dist/declare.d.ts +0 -33
  1230. package/dist/declare.d.ts.map +0 -1
  1231. package/dist/declare.js +0 -2
  1232. package/dist/declare.js.map +0 -1
  1233. package/dist/errors.d.ts +0 -28
  1234. package/dist/errors.d.ts.map +0 -1
  1235. package/dist/errors.js +0 -59
  1236. package/dist/errors.js.map +0 -1
  1237. package/dist/host.d.ts +0 -348
  1238. package/dist/host.d.ts.map +0 -1
  1239. package/dist/host.js +0 -1000
  1240. package/dist/host.js.map +0 -1
  1241. package/dist/link.d.ts +0 -107
  1242. package/dist/link.d.ts.map +0 -1
  1243. package/dist/link.js +0 -355
  1244. package/dist/link.js.map +0 -1
  1245. package/dist/loader.d.ts +0 -4
  1246. package/dist/loader.d.ts.map +0 -1
  1247. package/dist/loader.js +0 -73
  1248. package/dist/loader.js.map +0 -1
  1249. package/dist/manager.d.ts +0 -115
  1250. package/dist/manager.d.ts.map +0 -1
  1251. package/dist/manager.js +0 -345
  1252. package/dist/manager.js.map +0 -1
  1253. package/dist/node.d.ts +0 -4
  1254. package/dist/node.d.ts.map +0 -1
  1255. package/dist/node.js +0 -4
  1256. package/dist/node.js.map +0 -1
  1257. package/dist/object.d.ts +0 -438
  1258. package/dist/object.d.ts.map +0 -1
  1259. package/dist/object.js +0 -1571
  1260. package/dist/object.js.map +0 -1
  1261. package/dist/publish.d.ts +0 -5
  1262. package/dist/publish.d.ts.map +0 -1
  1263. package/dist/publish.js +0 -40
  1264. package/dist/publish.js.map +0 -1
  1265. package/dist/registry.d.ts +0 -25
  1266. package/dist/registry.d.ts.map +0 -1
  1267. package/dist/registry.js +0 -6
  1268. package/dist/registry.js.map +0 -1
  1269. package/dist/reload.d.ts +0 -126
  1270. package/dist/reload.d.ts.map +0 -1
  1271. package/dist/reload.js +0 -653
  1272. package/dist/reload.js.map +0 -1
  1273. package/dist/remote.d.ts +0 -165
  1274. package/dist/remote.d.ts.map +0 -1
  1275. package/dist/remote.js +0 -612
  1276. package/dist/remote.js.map +0 -1
  1277. package/dist/schema.d.ts +0 -21
  1278. package/dist/schema.d.ts.map +0 -1
  1279. package/dist/schema.js +0 -228
  1280. package/dist/schema.js.map +0 -1
  1281. package/dist/state.d.ts +0 -92
  1282. package/dist/state.d.ts.map +0 -1
  1283. package/dist/state.js +0 -287
  1284. package/dist/state.js.map +0 -1
  1285. package/dist/types.d.ts +0 -88
  1286. package/dist/types.d.ts.map +0 -1
  1287. package/dist/types.js +0 -2
  1288. package/dist/types.js.map +0 -1
  1289. package/dist/websocket.d.ts +0 -15
  1290. package/dist/websocket.d.ts.map +0 -1
  1291. package/dist/websocket.js +0 -16
  1292. package/dist/websocket.js.map +0 -1
  1293. package/dist/wire.d.ts +0 -216
  1294. package/dist/wire.d.ts.map +0 -1
  1295. package/dist/wire.js +0 -165
  1296. package/dist/wire.js.map +0 -1
  1297. package/docs/guide.md +0 -814
  1298. package/docs/spec.md +0 -288
  1299. package/docs/tutorial.md +0 -931
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/contracts/schema.ts"],"names":[],"mappings":"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","sourcesContent":["// Schema helpers: Chord's short constructors over pi-schema's builders (plain JSON Schema, typed with the values they\n// accept), and method and keyed member declarations. The helpers keep the shapes contracts were fingerprinted with:\n// literals carry their `type`, `oneOf` is a union of literals, `map` a pattern-property record.\n\nimport {\n\tarr as arrSchema,\n\tbool as boolSchema,\n\tbytes as bytesSchema,\n\tint as intSchema,\n\tnul as nulSchema,\n\tnum as numSchema,\n\tOptional,\n\tobj as objSchema,\n\ttype Properties,\n\ttype Schema,\n\ttype Static,\n\ttype StaticObject,\n\tstr as strSchema,\n\tunion as unionSchema,\n\tunknown as unknownSchema,\n} from \"@earendil-works/pi-schema\";\n\nexport { Optional, opt, type Schema, type Static } from \"@earendil-works/pi-schema\";\n\n/** Bounds of a string length, a number or an array length. */\nexport type Bounds = { readonly min?: number; readonly max?: number };\n\n/** A declared default value: a table column with one may be left out of a `put` (slice 6a §5). */\nexport type Defaulted<T> = { readonly default: T };\n\n// Interfaces, not intersections: declarations of apps' exported contracts and tables name them (an intersection with\n// `Schema<T>` would print pi-schema's private brand, which declaration files cannot name).\n\n/** A string schema (`str()`), told apart from the other scalars by its `type`. */\nexport interface StringSchema extends Schema<string> {\n\treadonly type: \"string\";\n}\n\n/** A number schema (`num()`). */\nexport interface NumberSchema extends Schema<number> {\n\treadonly type: \"number\";\n}\n\n/** An integer schema (`int()`). */\nexport interface IntegerSchema extends Schema<number> {\n\treadonly type: \"integer\";\n}\n\n/** A boolean schema (`bool()`). */\nexport interface BooleanSchema extends Schema<boolean> {\n\treadonly type: \"boolean\";\n}\n\n/** The `null` schema (`nul()`): also the omitted side of a method. */\nexport interface NullSchema extends Schema<null> {\n\treadonly type: \"null\";\n}\n\n/** A union of literals (`oneOf(...)`). */\nexport interface LiteralsSchema<V extends Literal> extends Schema<V> {\n\treadonly anyOf: readonly Schema<V>[];\n}\n\n/** A string, with optional length bounds, pattern and default. */\nexport function str(\n\toptions: Bounds & { readonly pattern?: string; readonly default: string },\n): StringSchema & Defaulted<string>;\nexport function str(options?: Bounds & { readonly pattern?: string }): StringSchema;\nexport function str(options: Bounds & { readonly pattern?: string; readonly default?: string } = {}): StringSchema {\n\tconst pattern = options.pattern === undefined ? {} : { pattern: options.pattern };\n\treturn strSchema({\n\t\t...limits(options, \"minLength\", \"maxLength\"),\n\t\t...pattern,\n\t\t...defaultOf(options),\n\t}) as StringSchema;\n}\n\n/** A finite number within optional bounds, with an optional default. */\nexport function num(options: Bounds & { readonly default: number }): NumberSchema & Defaulted<number>;\nexport function num(options?: Bounds): NumberSchema;\nexport function num(options: Bounds & { readonly default?: number } = {}): NumberSchema {\n\treturn numSchema({ ...limits(options, \"minimum\", \"maximum\"), ...defaultOf(options) }) as NumberSchema;\n}\n\n/** An integer within optional bounds, with an optional default. */\nexport function int(options: Bounds & { readonly default: number }): IntegerSchema & Defaulted<number>;\nexport function int(options?: Bounds): IntegerSchema;\nexport function int(options: Bounds & { readonly default?: number } = {}): IntegerSchema {\n\treturn intSchema({ ...limits(options, \"minimum\", \"maximum\"), ...defaultOf(options) }) as IntegerSchema;\n}\n\n/** A boolean, with an optional default. */\nexport function bool(options: { readonly default: boolean }): BooleanSchema & Defaulted<boolean>;\nexport function bool(options?: Record<never, never>): BooleanSchema;\nexport function bool(options: { readonly default?: boolean } = {}): BooleanSchema {\n\treturn boolSchema(defaultOf(options)) as BooleanSchema;\n}\n\n/** The `default` keyword of `options`, left out when absent (snapshots refuse `undefined`). */\nfunction defaultOf<T extends string | number | boolean>(options: { readonly default?: T }): { default?: T } {\n\treturn options.default === undefined ? {} : { default: options.default };\n}\n\n/** `null`; also the omitted side of a method. */\nexport function nul(): NullSchema {\n\t// The builder's `type: \"null\"`, typed as such.\n\treturn nulSchema() as NullSchema;\n}\n\n/** Exactly the given value, with its JSON type (`{ type: \"string\", const: \"a\" }`). */\nexport function lit<const V extends Literal>(value: V): Schema<V> {\n\treturn { type: typeof value, const: value };\n}\n\n/** A value `lit(...)` and `oneOf(...)` take. */\nexport type Literal = string | number | boolean;\n\n/** One of the given literals: a union of `lit(...)` schemas, in order. */\nexport function oneOf<const V extends Literal[]>(...values: V): LiteralsSchema<V[number]> {\n\treturn { anyOf: values.map((value) => lit(value)) };\n}\n\n/** Any of the given schemas. */\nexport function union<const S extends readonly Schema[]>(schemas: S): Schema<Static<S[number]>> {\n\treturn unionSchema(schemas);\n}\n\n/** A closed object: unknown fields are refused; `opt(...)` marks an optional field. */\nexport function obj<const P extends Properties>(properties: P): Schema<StaticObject<P>> {\n\treturn objSchema(properties);\n}\n\n/** An array, with optional length bounds. */\nexport function arr<T>(items: Schema<T>, options: Bounds = {}): Schema<T[]> {\n\treturn arrSchema(items, limits(options, \"minItems\", \"maxItems\"));\n}\n\n/** A string-keyed record: one pattern property matching every key. */\nexport function map<T>(value: Schema<T>): Schema<Record<string, T>> {\n\treturn { type: \"object\", patternProperties: { \"^.*$\": value } };\n}\n\n/** Any value. */\nexport function unknown(): Schema<unknown> {\n\treturn unknownSchema();\n}\n\n/**\n * A `Uint8Array` leaf, checked by `instanceof` and length, never enumerated: `{ type: \"bytes\", minLength?, maxLength? }`\n * (pi-schema's extension of JSON Schema for values that never pass through JSON).\n */\nexport function bytes(options: Bounds = {}): Schema<Uint8Array> {\n\treturn bytesSchema(limits(options, \"minLength\", \"maxLength\"));\n}\n\n/** Builder options for the given bounds; an absent bound is left out, since snapshots refuse `undefined`. */\nfunction limits(options: Bounds, min: string, max: string): { [keyword: string]: number } {\n\tconst result: { [keyword: string]: number } = {};\n\tif (options.min !== undefined) result[min] = options.min;\n\tif (options.max !== undefined) result[max] = options.max;\n\treturn result;\n}\n\n/** Whether a declared object field is `opt(...)`. */\nexport function isOptional(value: unknown): value is Optional {\n\treturn value instanceof Optional;\n}\n\n/** A method declaration: its argument and result schemas; an omitted side is `null` on the wire. */\nexport class Method<A extends Schema = Schema, R extends Schema = Schema> {\n\treadonly args: A;\n\treadonly result: R;\n\n\tconstructor(args: A, result: R) {\n\t\tthis.args = args;\n\t\tthis.result = result;\n\t}\n}\n\n/** A keyed state member's declaration (slice 6a §12): documents of `schema` by string key; only in `local` contracts. */\nexport class KeyedMember<S extends Schema = Schema> {\n\treadonly schema: S;\n\n\tconstructor(schema: S) {\n\t\tthis.schema = schema;\n\t}\n}\n\n/** Declares a keyed state member of a `local` contract: documents of `schema` by string key, each watchable. */\nexport function keyed<S extends Schema>(schema: S): KeyedMember<S> {\n\treturn new KeyedMember(schema);\n}\n\n/** Declares a method: `method()`, `method(args)`, `method(args, result)` or `method(undefined, result)`. */\nexport function method(): Method<NullSchema, NullSchema>;\nexport function method<A extends Schema>(args: A): Method<A, NullSchema>;\nexport function method<R extends Schema>(args: undefined, result: R): Method<NullSchema, R>;\nexport function method<A extends Schema, R extends Schema>(args: A, result: R): Method<A, R>;\nexport function method(args?: Schema, result?: Schema): Method {\n\treturn new Method(args ?? nul(), result ?? nul());\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import type { JsonSchema } from "@earendil-works/pi-schema";
2
+ import { type JsonValue } from "../json.ts";
3
+ /**
4
+ * A Chord-owned copy of an app schema, its normal form, and whether it has a `bytes()` leaf (values crossing a link
5
+ * then carry raw byte segments); immutable by convention.
6
+ */
7
+ export type Snapshot = {
8
+ readonly schema: JsonSchema;
9
+ readonly normal: JsonValue;
10
+ readonly bytes: boolean;
11
+ };
12
+ /** Snapshot of a state, result or params schema. Throws an Error naming `path` for anything outside the vocabulary. */
13
+ export declare function snapshotSchema(source: unknown, path: string): Snapshot;
14
+ /** Snapshot of a method's arguments: every object schema inside must also be closed (records allowed). */
15
+ export declare function snapshotArguments(source: unknown, path: string): Snapshot;
16
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/contracts/snapshot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5G,uHAAuH;AACvH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEtE;AAED,0GAA0G;AAC1G,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEzE"}
@@ -0,0 +1,167 @@
1
+ // Schema snapshots: one schema-aware walk checks an app schema against Chord's vocabulary and produces a
2
+ // Chord-owned copy and its normal form (the fingerprint input).
3
+ import { isJsonValue } from "../json.js";
4
+ /** Snapshot of a state, result or params schema. Throws an Error naming `path` for anything outside the vocabulary. */
5
+ export function snapshotSchema(source, path) {
6
+ return walk(source, path, "open", new Set());
7
+ }
8
+ /** Snapshot of a method's arguments: every object schema inside must also be closed (records allowed). */
9
+ export function snapshotArguments(source, path) {
10
+ return walk(source, path, "closed", new Set());
11
+ }
12
+ /** Every supported keyword, grouped by how its value is walked. */
13
+ const KEYWORD_GROUPS = {
14
+ schema: "additionalProperties additionalItems",
15
+ schemas: "anyOf allOf prefixItems",
16
+ items: "items",
17
+ schemaMap: "properties patternProperties $defs",
18
+ type: "type",
19
+ required: "required",
20
+ enum: "enum",
21
+ data: "const default $ref $id pattern format minLength maxLength minimum maximum exclusiveMinimum exclusiveMaximum " +
22
+ "multipleOf minItems maxItems uniqueItems minProperties maxProperties readOnly writeOnly",
23
+ annotation: "title description examples $comment deprecated",
24
+ };
25
+ const KEYWORDS = new Map(Object.entries(KEYWORD_GROUPS).flatMap(([keyword, names]) => names.split(" ").map((name) => [name, keyword])));
26
+ const TYPES = new Set(["null", "boolean", "number", "integer", "string", "array", "object", "bytes"]);
27
+ const BYTES_KEYWORDS = new Set(["type", "minLength", "maxLength"]);
28
+ function walk(source, path, objects, ancestors) {
29
+ if (typeof source === "boolean")
30
+ return { schema: source, normal: source, bytes: false };
31
+ if (!isPlainObject(source))
32
+ throw new Error(`${path}: expected a schema`);
33
+ if (ancestors.has(source))
34
+ throw new Error(`${path}: cyclic schema; use $defs and $ref for recursion`);
35
+ const isBytes = source.type === "bytes";
36
+ ancestors.add(source);
37
+ const schema = [];
38
+ const normal = [];
39
+ let bytes = isBytes;
40
+ for (const [key, value] of ownEntries(source, path)) {
41
+ const keyword = KEYWORDS.get(key);
42
+ if (keyword === undefined || (isBytes && keyword !== "annotation" && !BYTES_KEYWORDS.has(key))) {
43
+ throw new Error(`${path}: unsupported keyword "${key}"`);
44
+ }
45
+ const copy = walkKeyword(keyword, value, `${path}.${key}`, objects, ancestors);
46
+ bytes ||= copy.bytes;
47
+ schema.push([key, copy.schema]);
48
+ // Annotations are dropped on schema nodes only; inside data they are ordinary keys.
49
+ if (keyword !== "annotation")
50
+ normal.push([key, copy.normal]);
51
+ }
52
+ ancestors.delete(source);
53
+ const node = Object.fromEntries(schema);
54
+ if (objects === "closed" && isOpenObject(node)) {
55
+ throw new Error(`${path}: argument objects must be closed (additionalProperties: false)`);
56
+ }
57
+ if (isBytes)
58
+ checkBytesBounds(node, path);
59
+ return { schema: node, normal: Object.fromEntries(normal), bytes };
60
+ }
61
+ function walkKeyword(keyword, value, path, objects, ancestors) {
62
+ switch (keyword) {
63
+ case "schema":
64
+ return walk(value, path, objects, ancestors);
65
+ case "schemas":
66
+ return walkList(value, path, objects, ancestors);
67
+ case "items":
68
+ return Array.isArray(value)
69
+ ? walkList(value, path, objects, ancestors)
70
+ : walk(value, path, objects, ancestors);
71
+ case "schemaMap": {
72
+ if (!isPlainObject(value))
73
+ throw new Error(`${path}: expected an object of schemas`);
74
+ const entries = ownEntries(value, path).map(([key, item]) => [key, walk(item, `${path}.${key}`, objects, ancestors)]);
75
+ return {
76
+ schema: Object.fromEntries(entries.map(([key, item]) => [key, item.schema])),
77
+ normal: Object.fromEntries(entries.map(([key, item]) => [key, item.normal])),
78
+ bytes: entries.some(([, item]) => item.bytes),
79
+ };
80
+ }
81
+ case "type":
82
+ if (typeof value !== "string" || !TYPES.has(value)) {
83
+ throw new Error(`${path}: unsupported type ${JSON.stringify(value)}`);
84
+ }
85
+ return { schema: value, normal: value, bytes: false };
86
+ case "required": {
87
+ if (!Array.isArray(value) || !value.every((name) => typeof name === "string")) {
88
+ throw new Error(`${path}: expected an array of strings`);
89
+ }
90
+ const names = [...value].sort();
91
+ return { schema: names, normal: names, bytes: false };
92
+ }
93
+ case "enum": {
94
+ const values = data(value, path).normal;
95
+ if (!Array.isArray(values))
96
+ throw new Error(`${path}: expected an array`);
97
+ const sorted = [...values].sort((a, b) => compare(JSON.stringify(a), JSON.stringify(b)));
98
+ return { schema: sorted, normal: sorted, bytes: false };
99
+ }
100
+ case "data":
101
+ case "annotation":
102
+ return data(value, path);
103
+ }
104
+ }
105
+ function walkList(value, path, objects, ancestors) {
106
+ if (!Array.isArray(value))
107
+ throw new Error(`${path}: expected an array of schemas`);
108
+ const items = Array.from(value, (item, index) => walk(item, `${path}[${index}]`, objects, ancestors));
109
+ return {
110
+ schema: items.map((item) => item.schema),
111
+ normal: items.map((item) => item.normal),
112
+ bytes: items.some((item) => item.bytes),
113
+ };
114
+ }
115
+ /** A JSON value as a copy with sorted keys; the same copy serves as snapshot and normal form. */
116
+ function data(value, path) {
117
+ if (!isJsonValue(value))
118
+ throw new Error(`${path}: expected JSON data (finite numbers, plain objects and arrays)`);
119
+ const copy = sortedCopy(value);
120
+ return { schema: copy, normal: copy, bytes: false };
121
+ }
122
+ function sortedCopy(value) {
123
+ if (value === null || typeof value !== "object")
124
+ return value;
125
+ if (Array.isArray(value))
126
+ return value.map(sortedCopy);
127
+ const keys = Object.keys(value).sort();
128
+ return Object.fromEntries(keys.map((key) => [key, sortedCopy(value[key])]));
129
+ }
130
+ /** Data entries sorted by key; symbol keys, accessors and non-enumerable keys (not data) are refused. */
131
+ function ownEntries(source, path) {
132
+ const entries = [];
133
+ for (const key of Reflect.ownKeys(source)) {
134
+ if (typeof key === "symbol")
135
+ throw new Error(`${path}: symbol keys are not supported`);
136
+ const descriptor = Object.getOwnPropertyDescriptor(source, key);
137
+ if (!("value" in descriptor))
138
+ throw new Error(`${path}.${key}: accessors are not supported`);
139
+ if (!descriptor.enumerable)
140
+ throw new Error(`${path}.${key}: non-enumerable keys are not supported`);
141
+ entries.push([key, descriptor.value]);
142
+ }
143
+ return entries.sort(([a], [b]) => compare(a, b));
144
+ }
145
+ function isPlainObject(value) {
146
+ if (typeof value !== "object" || value === null || Array.isArray(value))
147
+ return false;
148
+ const prototype = Object.getPrototypeOf(value);
149
+ return prototype === Object.prototype || prototype === null;
150
+ }
151
+ /** An object schema that admits unknown fields. A record (pattern properties only) is allowed. */
152
+ function isOpenObject(node) {
153
+ const isRecord = "patternProperties" in node && !("properties" in node);
154
+ const isObject = node.type === "object" || "properties" in node;
155
+ return isObject && !isRecord && node.additionalProperties !== false;
156
+ }
157
+ function checkBytesBounds(node, path) {
158
+ for (const bound of [node.minLength, node.maxLength]) {
159
+ if (bound !== undefined && !(Number.isSafeInteger(bound) && bound >= 0)) {
160
+ throw new Error(`${path}: bytes bounds must be non-negative integers`);
161
+ }
162
+ }
163
+ }
164
+ function compare(a, b) {
165
+ return a < b ? -1 : a > b ? 1 : 0;
166
+ }
167
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/contracts/snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["// Schema snapshots: one schema-aware walk checks an app schema against Chord's vocabulary and produces a\n// Chord-owned copy and its normal form (the fingerprint input).\n\nimport type { JsonSchema } from \"@earendil-works/pi-schema\";\nimport { isJsonValue, type JsonValue } from \"../json.ts\";\n\n/**\n * A Chord-owned copy of an app schema, its normal form, and whether it has a `bytes()` leaf (values crossing a link\n * then carry raw byte segments); immutable by convention.\n */\nexport type Snapshot = { readonly schema: JsonSchema; readonly normal: JsonValue; readonly bytes: boolean };\n\n/** Snapshot of a state, result or params schema. Throws an Error naming `path` for anything outside the vocabulary. */\nexport function snapshotSchema(source: unknown, path: string): Snapshot {\n\treturn walk(source, path, \"open\", new Set());\n}\n\n/** Snapshot of a method's arguments: every object schema inside must also be closed (records allowed). */\nexport function snapshotArguments(source: unknown, path: string): Snapshot {\n\treturn walk(source, path, \"closed\", new Set());\n}\n\n/** Whether object schemas must set `additionalProperties: false`. */\ntype Objects = \"open\" | \"closed\";\n\n/** A copied keyword value, its normal form, and whether a schema inside it is a bytes leaf. */\ntype Copy = { readonly schema: unknown; readonly normal: JsonValue; readonly bytes: boolean };\n\n/** Every supported keyword, grouped by how its value is walked. */\nconst KEYWORD_GROUPS = {\n\tschema: \"additionalProperties additionalItems\",\n\tschemas: \"anyOf allOf prefixItems\",\n\titems: \"items\",\n\tschemaMap: \"properties patternProperties $defs\",\n\ttype: \"type\",\n\trequired: \"required\",\n\tenum: \"enum\",\n\tdata:\n\t\t\"const default $ref $id pattern format minLength maxLength minimum maximum exclusiveMinimum exclusiveMaximum \" +\n\t\t\"multipleOf minItems maxItems uniqueItems minProperties maxProperties readOnly writeOnly\",\n\tannotation: \"title description examples $comment deprecated\",\n};\n\ntype Keyword = keyof typeof KEYWORD_GROUPS;\n\nconst KEYWORDS = new Map(\n\tObject.entries(KEYWORD_GROUPS).flatMap(([keyword, names]) =>\n\t\tnames.split(\" \").map((name) => [name, keyword as Keyword]),\n\t),\n);\n\nconst TYPES = new Set([\"null\", \"boolean\", \"number\", \"integer\", \"string\", \"array\", \"object\", \"bytes\"]);\n\nconst BYTES_KEYWORDS = new Set([\"type\", \"minLength\", \"maxLength\"]);\n\nfunction walk(source: unknown, path: string, objects: Objects, ancestors: Set<object>): Snapshot {\n\tif (typeof source === \"boolean\") return { schema: source, normal: source, bytes: false };\n\tif (!isPlainObject(source)) throw new Error(`${path}: expected a schema`);\n\tif (ancestors.has(source)) throw new Error(`${path}: cyclic schema; use $defs and $ref for recursion`);\n\tconst isBytes = source.type === \"bytes\";\n\tancestors.add(source);\n\tconst schema: [string, unknown][] = [];\n\tconst normal: [string, JsonValue][] = [];\n\tlet bytes = isBytes;\n\tfor (const [key, value] of ownEntries(source, path)) {\n\t\tconst keyword = KEYWORDS.get(key);\n\t\tif (keyword === undefined || (isBytes && keyword !== \"annotation\" && !BYTES_KEYWORDS.has(key))) {\n\t\t\tthrow new Error(`${path}: unsupported keyword \"${key}\"`);\n\t\t}\n\t\tconst copy = walkKeyword(keyword, value, `${path}.${key}`, objects, ancestors);\n\t\tbytes ||= copy.bytes;\n\t\tschema.push([key, copy.schema]);\n\t\t// Annotations are dropped on schema nodes only; inside data they are ordinary keys.\n\t\tif (keyword !== \"annotation\") normal.push([key, copy.normal]);\n\t}\n\tancestors.delete(source);\n\tconst node = Object.fromEntries(schema);\n\tif (objects === \"closed\" && isOpenObject(node)) {\n\t\tthrow new Error(`${path}: argument objects must be closed (additionalProperties: false)`);\n\t}\n\tif (isBytes) checkBytesBounds(node, path);\n\treturn { schema: node, normal: Object.fromEntries(normal), bytes };\n}\n\nfunction walkKeyword(keyword: Keyword, value: unknown, path: string, objects: Objects, ancestors: Set<object>): Copy {\n\tswitch (keyword) {\n\t\tcase \"schema\":\n\t\t\treturn walk(value, path, objects, ancestors);\n\t\tcase \"schemas\":\n\t\t\treturn walkList(value, path, objects, ancestors);\n\t\tcase \"items\":\n\t\t\treturn Array.isArray(value)\n\t\t\t\t? walkList(value, path, objects, ancestors)\n\t\t\t\t: walk(value, path, objects, ancestors);\n\t\tcase \"schemaMap\": {\n\t\t\tif (!isPlainObject(value)) throw new Error(`${path}: expected an object of schemas`);\n\t\t\tconst entries = ownEntries(value, path).map(\n\t\t\t\t([key, item]) => [key, walk(item, `${path}.${key}`, objects, ancestors)] as const,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tschema: Object.fromEntries(entries.map(([key, item]) => [key, item.schema])),\n\t\t\t\tnormal: Object.fromEntries(entries.map(([key, item]) => [key, item.normal])),\n\t\t\t\tbytes: entries.some(([, item]) => item.bytes),\n\t\t\t};\n\t\t}\n\t\tcase \"type\":\n\t\t\tif (typeof value !== \"string\" || !TYPES.has(value)) {\n\t\t\t\tthrow new Error(`${path}: unsupported type ${JSON.stringify(value)}`);\n\t\t\t}\n\t\t\treturn { schema: value, normal: value, bytes: false };\n\t\tcase \"required\": {\n\t\t\tif (!Array.isArray(value) || !value.every((name) => typeof name === \"string\")) {\n\t\t\t\tthrow new Error(`${path}: expected an array of strings`);\n\t\t\t}\n\t\t\tconst names = [...value].sort();\n\t\t\treturn { schema: names, normal: names, bytes: false };\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst values = data(value, path).normal;\n\t\t\tif (!Array.isArray(values)) throw new Error(`${path}: expected an array`);\n\t\t\tconst sorted = [...values].sort((a, b) => compare(JSON.stringify(a), JSON.stringify(b)));\n\t\t\treturn { schema: sorted, normal: sorted, bytes: false };\n\t\t}\n\t\tcase \"data\":\n\t\tcase \"annotation\":\n\t\t\treturn data(value, path);\n\t}\n}\n\nfunction walkList(value: unknown, path: string, objects: Objects, ancestors: Set<object>): Copy {\n\tif (!Array.isArray(value)) throw new Error(`${path}: expected an array of schemas`);\n\tconst items = Array.from(value, (item, index) => walk(item, `${path}[${index}]`, objects, ancestors));\n\treturn {\n\t\tschema: items.map((item) => item.schema),\n\t\tnormal: items.map((item) => item.normal),\n\t\tbytes: items.some((item) => item.bytes),\n\t};\n}\n\n/** A JSON value as a copy with sorted keys; the same copy serves as snapshot and normal form. */\nfunction data(value: unknown, path: string): Copy {\n\tif (!isJsonValue(value)) throw new Error(`${path}: expected JSON data (finite numbers, plain objects and arrays)`);\n\tconst copy = sortedCopy(value);\n\treturn { schema: copy, normal: copy, bytes: false };\n}\n\nfunction sortedCopy(value: JsonValue): JsonValue {\n\tif (value === null || typeof value !== \"object\") return value;\n\tif (Array.isArray(value)) return value.map(sortedCopy);\n\tconst keys = Object.keys(value).sort();\n\treturn Object.fromEntries(keys.map((key) => [key, sortedCopy(value[key]!)]));\n}\n\n/** Data entries sorted by key; symbol keys, accessors and non-enumerable keys (not data) are refused. */\nfunction ownEntries(source: object, path: string): [string, unknown][] {\n\tconst entries: [string, unknown][] = [];\n\tfor (const key of Reflect.ownKeys(source)) {\n\t\tif (typeof key === \"symbol\") throw new Error(`${path}: symbol keys are not supported`);\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(source, key)!;\n\t\tif (!(\"value\" in descriptor)) throw new Error(`${path}.${key}: accessors are not supported`);\n\t\tif (!descriptor.enumerable) throw new Error(`${path}.${key}: non-enumerable keys are not supported`);\n\t\tentries.push([key, descriptor.value]);\n\t}\n\treturn entries.sort(([a], [b]) => compare(a, b));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n\n/** An object schema that admits unknown fields. A record (pattern properties only) is allowed. */\nfunction isOpenObject(node: Record<string, unknown>): boolean {\n\tconst isRecord = \"patternProperties\" in node && !(\"properties\" in node);\n\tconst isObject = node.type === \"object\" || \"properties\" in node;\n\treturn isObject && !isRecord && node.additionalProperties !== false;\n}\n\nfunction checkBytesBounds(node: Record<string, unknown>, path: string): void {\n\tfor (const bound of [node.minLength, node.maxLength]) {\n\t\tif (bound !== undefined && !(Number.isSafeInteger(bound) && (bound as number) >= 0)) {\n\t\t\tthrow new Error(`${path}: bytes bounds must be non-negative integers`);\n\t\t}\n\t}\n}\n\nfunction compare(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\n}\n"]}
@@ -0,0 +1,50 @@
1
+ import type { Context } from "../context/index.ts";
2
+ import { type AcceptedVersion, type AcceptsTable } from "../contracts/accepts.ts";
3
+ import { type Contract, type CurrentVariants } from "../contracts/contract.ts";
4
+ import type { MemberNames, MethodAt } from "../contracts/history.ts";
5
+ import type { Static } from "../contracts/schema.ts";
6
+ /** JSON plus byte leaves. Same-host values are plain data and immutable once handed over, by convention. */
7
+ export type Value = null | boolean | number | string | Uint8Array | Value[] | {
8
+ [key: string]: Value;
9
+ };
10
+ /**
11
+ * A provider's binding of a contract with the older versions it accepts and their mappings (the table as checked, for
12
+ * the state mappings of an older consumer's binding).
13
+ */
14
+ export type Provider<C extends Contract> = {
15
+ readonly contract: C;
16
+ readonly accepted: readonly AcceptedVersion[];
17
+ readonly accepts: AcceptsTable<C>;
18
+ };
19
+ /**
20
+ * Checked arguments: a method's arguments in the current shape with the result mapping back to the caller's version,
21
+ * or the old arguments for the provider's own `call` replacement (L4 dispatches it).
22
+ */
23
+ export type CheckedArgs<C extends Contract, M extends string> = {
24
+ readonly kind: "method";
25
+ readonly args: ArgsOf<C, M>;
26
+ readonly result?: (current: Value) => Value;
27
+ } | {
28
+ readonly kind: "call";
29
+ readonly args: Value;
30
+ readonly call: (args: Value, context: Context) => Promise<Value>;
31
+ };
32
+ type ArgsOf<C extends Contract, M extends string> = M extends MemberNames<CurrentVariants<C>, "methods"> ? Static<MethodAt<CurrentVariants<C>, M>["args"]> : Value;
33
+ /**
34
+ * Binds a contract and the app's accepts table (validated once, kept as it is) into a provider. Builds the dispatch
35
+ * table: accepted version -> method -> schema and mapping; nothing is compiled yet.
36
+ */
37
+ export declare function bindProvider<C extends Contract>(contract: C, accepts: AcceptsTable<C>): Provider<C>;
38
+ /**
39
+ * Whether `provider` binds a consumer of `version` with `fingerprint`: its current version and fingerprint, or a
40
+ * version it accepts with the fingerprint its own history computes (R6, Q10).
41
+ */
42
+ export declare function binds(provider: Provider<Contract>, version: number, fingerprint: string): boolean;
43
+ /**
44
+ * Checks a call's arguments against the provider's schema for the caller's bound version: three map lookups, one
45
+ * compiled check, at most one direct mapping old -> current (never for current-version calls). A method without
46
+ * arguments gets `null` (its internal and wire form). Unknown method: `invalid/member`; version not accepted or refused: `contract_mismatch`.
47
+ */
48
+ export declare function checkArgs<C extends Contract, M extends string>(provider: Provider<C>, method: M, raw: unknown, boundVersion: number, context: Context): CheckedArgs<C, M>;
49
+ export {};
50
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/data/args.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAgB,MAAM,yBAAyB,CAAC;AAChG,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,eAAe,EAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKrD,4GAA4G;AAC5G,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,CAAC;AAEvG;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,MAAM,IACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,CAAA;CAAE,GACrG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAErH,KAAK,MAAM,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GACrG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAC/C,KAAK,CAAC;AAET;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAcnG;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAIjG;AAuDD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,MAAM,EAC7D,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACd,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAqBnB"}
@@ -0,0 +1,83 @@
1
+ // Arguments: a provider's binding (its dispatch table per accepted version) and the per-call argument check.
2
+ import { checkAccepts } from "../contracts/accepts.js";
3
+ import { contractData, } from "../contracts/contract.js";
4
+ import { ChordError, invalid } from "./errors.js";
5
+ import { check, validatorFor } from "./validator.js";
6
+ /**
7
+ * Binds a contract and the app's accepts table (validated once, kept as it is) into a provider. Builds the dispatch
8
+ * table: accepted version -> method -> schema and mapping; nothing is compiled yet.
9
+ */
10
+ export function bindProvider(contract, accepts) {
11
+ const { versions: accepted } = checkAccepts(contract, accepts);
12
+ const { versions } = contractData(contract);
13
+ const current = versions.at(-1);
14
+ // checkAccepts established this shape.
15
+ const mappings = accepts;
16
+ const table = new Map([[current.version, dispatchEntries(current, undefined)]]);
17
+ for (const { version } of accepted) {
18
+ const data = versions.find((candidate) => candidate.version === version);
19
+ table.set(version, dispatchEntries(data, mappings[version]?.methods));
20
+ }
21
+ const provider = { contract, accepted, accepts };
22
+ dispatchTables.set(provider, table);
23
+ return provider;
24
+ }
25
+ /**
26
+ * Whether `provider` binds a consumer of `version` with `fingerprint`: its current version and fingerprint, or a
27
+ * version it accepts with the fingerprint its own history computes (R6, Q10).
28
+ */
29
+ export function binds(provider, version, fingerprint) {
30
+ const { contract } = provider;
31
+ if (version === contract.version)
32
+ return fingerprint === contract.fingerprint;
33
+ return provider.accepted.some((accepted) => accepted.version === version && accepted.fingerprint === fingerprint);
34
+ }
35
+ const dispatchTables = new WeakMap();
36
+ function dispatchEntries(version, mappings) {
37
+ const entries = new Map();
38
+ // A method has one signature in every variant that has it.
39
+ const methods = new Map([...version.variants.values()].flatMap(({ methods }) => [...methods]));
40
+ for (const [member, { args }] of methods) {
41
+ const mapping = mappings !== undefined && Object.hasOwn(mappings, member) ? mappings[member] : undefined;
42
+ entries.set(member, dispatchEntry(args, mapping));
43
+ }
44
+ return entries;
45
+ }
46
+ function dispatchEntry(args, mapping) {
47
+ if (mapping === "refuse")
48
+ return { kind: "refuse" };
49
+ if (mapping !== undefined && "call" in mapping) {
50
+ return { kind: "call", args, call: mapping.call, validator: undefined };
51
+ }
52
+ return { kind: "method", args, mapArgs: mapping?.args, mapResult: mapping?.result, validator: undefined };
53
+ }
54
+ /**
55
+ * Checks a call's arguments against the provider's schema for the caller's bound version: three map lookups, one
56
+ * compiled check, at most one direct mapping old -> current (never for current-version calls). A method without
57
+ * arguments gets `null` (its internal and wire form). Unknown method: `invalid/member`; version not accepted or refused: `contract_mismatch`.
58
+ */
59
+ export function checkArgs(provider, method, raw, boundVersion, context) {
60
+ const name = provider.contract.name;
61
+ const methods = dispatchTables.get(provider).get(boundVersion);
62
+ if (methods === undefined) {
63
+ throw new ChordError({ code: "contract_mismatch", message: `${name} v${boundVersion} is not accepted` });
64
+ }
65
+ const entry = methods.get(method);
66
+ if (entry === undefined)
67
+ throw invalid("member", `${name} v${boundVersion} has no method "${method}"`);
68
+ if (entry.kind === "refuse") {
69
+ throw new ChordError({ code: "contract_mismatch", message: `${name} v${boundVersion} refuses "${method}"` });
70
+ }
71
+ entry.validator ??= validatorFor(entry.args, context);
72
+ check(entry.validator, raw, "args", context);
73
+ // The check above establishes the argument type; mapping output is trusted.
74
+ const args = raw;
75
+ if (entry.kind === "call")
76
+ return { kind: "call", args, call: entry.call };
77
+ return {
78
+ kind: "method",
79
+ args: (entry.mapArgs === undefined ? args : entry.mapArgs(args)),
80
+ result: entry.mapResult,
81
+ };
82
+ }
83
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/data/args.ts"],"names":[],"mappings":"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","sourcesContent":["// Arguments: a provider's binding (its dispatch table per accepted version) and the per-call argument check.\n\nimport type { Validator } from \"@earendil-works/pi-schema\";\nimport type { Context } from \"../context/index.ts\";\nimport { type AcceptedVersion, type AcceptsTable, checkAccepts } from \"../contracts/accepts.ts\";\nimport {\n\ttype Contract,\n\ttype CurrentVariants,\n\tcontractData,\n\ttype MethodData,\n\ttype VersionData,\n} from \"../contracts/contract.ts\";\nimport type { MemberNames, MethodAt } from \"../contracts/history.ts\";\nimport type { Static } from \"../contracts/schema.ts\";\nimport type { Snapshot } from \"../contracts/snapshot.ts\";\nimport { ChordError, invalid } from \"./errors.ts\";\nimport { check, validatorFor } from \"./validator.ts\";\n\n/** JSON plus byte leaves. Same-host values are plain data and immutable once handed over, by convention. */\nexport type Value = null | boolean | number | string | Uint8Array | Value[] | { [key: string]: Value };\n\n/**\n * A provider's binding of a contract with the older versions it accepts and their mappings (the table as checked, for\n * the state mappings of an older consumer's binding).\n */\nexport type Provider<C extends Contract> = {\n\treadonly contract: C;\n\treadonly accepted: readonly AcceptedVersion[];\n\treadonly accepts: AcceptsTable<C>;\n};\n\n/**\n * Checked arguments: a method's arguments in the current shape with the result mapping back to the caller's version,\n * or the old arguments for the provider's own `call` replacement (L4 dispatches it).\n */\nexport type CheckedArgs<C extends Contract, M extends string> =\n\t| { readonly kind: \"method\"; readonly args: ArgsOf<C, M>; readonly result?: (current: Value) => Value }\n\t| { readonly kind: \"call\"; readonly args: Value; readonly call: (args: Value, context: Context) => Promise<Value> };\n\ntype ArgsOf<C extends Contract, M extends string> = M extends MemberNames<CurrentVariants<C>, \"methods\">\n\t? Static<MethodAt<CurrentVariants<C>, M>[\"args\"]>\n\t: Value;\n\n/**\n * Binds a contract and the app's accepts table (validated once, kept as it is) into a provider. Builds the dispatch\n * table: accepted version -> method -> schema and mapping; nothing is compiled yet.\n */\nexport function bindProvider<C extends Contract>(contract: C, accepts: AcceptsTable<C>): Provider<C> {\n\tconst { versions: accepted } = checkAccepts(contract, accepts);\n\tconst { versions } = contractData(contract);\n\tconst current = versions.at(-1)!;\n\t// checkAccepts established this shape.\n\tconst mappings = accepts as CheckedAccepts;\n\tconst table: Dispatch = new Map([[current.version, dispatchEntries(current, undefined)]]);\n\tfor (const { version } of accepted) {\n\t\tconst data = versions.find((candidate) => candidate.version === version)!;\n\t\ttable.set(version, dispatchEntries(data, mappings[version]?.methods));\n\t}\n\tconst provider = { contract, accepted, accepts };\n\tdispatchTables.set(provider, table);\n\treturn provider;\n}\n\n/**\n * Whether `provider` binds a consumer of `version` with `fingerprint`: its current version and fingerprint, or a\n * version it accepts with the fingerprint its own history computes (R6, Q10).\n */\nexport function binds(provider: Provider<Contract>, version: number, fingerprint: string): boolean {\n\tconst { contract } = provider;\n\tif (version === contract.version) return fingerprint === contract.fingerprint;\n\treturn provider.accepted.some((accepted) => accepted.version === version && accepted.fingerprint === fingerprint);\n}\n\n/** An accepts table after `checkAccepts`, as the binding reads it. */\ntype CheckedAccepts = {\n\treadonly [version: string]: { readonly methods?: { readonly [member: string]: CheckedMethodMapping } };\n};\n\ntype CheckedMethodMapping =\n\t| \"refuse\"\n\t| { readonly call: (args: Value, context: Context) => Promise<Value> }\n\t| { readonly args?: (old: Value) => Value; readonly result?: (current: Value) => Value };\n\n/** Accepted version -> method -> entry. */\ntype Dispatch = Map<number, Map<string, DispatchEntry>>;\n\ntype DispatchEntry =\n\t| { readonly kind: \"refuse\" }\n\t| {\n\t\t\treadonly kind: \"call\";\n\t\t\treadonly args: Snapshot;\n\t\t\treadonly call: (args: Value, context: Context) => Promise<Value>;\n\t\t\tvalidator: Validator | undefined;\n\t }\n\t| {\n\t\t\treadonly kind: \"method\";\n\t\t\treadonly args: Snapshot;\n\t\t\treadonly mapArgs: ((old: Value) => Value) | undefined;\n\t\t\treadonly mapResult: ((current: Value) => Value) | undefined;\n\t\t\tvalidator: Validator | undefined;\n\t };\n\nconst dispatchTables = new WeakMap<Provider<Contract>, Dispatch>();\n\nfunction dispatchEntries(\n\tversion: VersionData,\n\tmappings: { readonly [member: string]: CheckedMethodMapping } | undefined,\n): Map<string, DispatchEntry> {\n\tconst entries = new Map<string, DispatchEntry>();\n\t// A method has one signature in every variant that has it.\n\tconst methods = new Map<string, MethodData>([...version.variants.values()].flatMap(({ methods }) => [...methods]));\n\tfor (const [member, { args }] of methods) {\n\t\tconst mapping = mappings !== undefined && Object.hasOwn(mappings, member) ? mappings[member] : undefined;\n\t\tentries.set(member, dispatchEntry(args, mapping));\n\t}\n\treturn entries;\n}\n\nfunction dispatchEntry(args: Snapshot, mapping: CheckedMethodMapping | undefined): DispatchEntry {\n\tif (mapping === \"refuse\") return { kind: \"refuse\" };\n\tif (mapping !== undefined && \"call\" in mapping) {\n\t\treturn { kind: \"call\", args, call: mapping.call, validator: undefined };\n\t}\n\treturn { kind: \"method\", args, mapArgs: mapping?.args, mapResult: mapping?.result, validator: undefined };\n}\n\n/**\n * Checks a call's arguments against the provider's schema for the caller's bound version: three map lookups, one\n * compiled check, at most one direct mapping old -> current (never for current-version calls). A method without\n * arguments gets `null` (its internal and wire form). Unknown method: `invalid/member`; version not accepted or refused: `contract_mismatch`.\n */\nexport function checkArgs<C extends Contract, M extends string>(\n\tprovider: Provider<C>,\n\tmethod: M,\n\traw: unknown,\n\tboundVersion: number,\n\tcontext: Context,\n): CheckedArgs<C, M> {\n\tconst name = provider.contract.name;\n\tconst methods = dispatchTables.get(provider)!.get(boundVersion);\n\tif (methods === undefined) {\n\t\tthrow new ChordError({ code: \"contract_mismatch\", message: `${name} v${boundVersion} is not accepted` });\n\t}\n\tconst entry = methods.get(method);\n\tif (entry === undefined) throw invalid(\"member\", `${name} v${boundVersion} has no method \"${method}\"`);\n\tif (entry.kind === \"refuse\") {\n\t\tthrow new ChordError({ code: \"contract_mismatch\", message: `${name} v${boundVersion} refuses \"${method}\"` });\n\t}\n\tentry.validator ??= validatorFor(entry.args, context);\n\tcheck(entry.validator, raw, \"args\", context);\n\t// The check above establishes the argument type; mapping output is trusted.\n\tconst args = raw as Value;\n\tif (entry.kind === \"call\") return { kind: \"call\", args, call: entry.call };\n\treturn {\n\t\tkind: \"method\",\n\t\targs: (entry.mapArgs === undefined ? args : entry.mapArgs(args)) as ArgsOf<C, M>,\n\t\tresult: entry.mapResult,\n\t};\n}\n"]}
@@ -0,0 +1,80 @@
1
+ import type { JsonValue } from "../json.ts";
2
+ /** Version of the error table below on links; adding or moving a code or reason bumps it. */
3
+ export declare const PROTOCOL_VERSION = 1;
4
+ /** Every code with the reasons it may carry. `invalid` requires a reason; every other code may omit it. */
5
+ export declare const CHORD_ERROR_REASONS: {
6
+ readonly invalid: readonly ["args", "params", "member", "host_address", "reentrant", "read_after_bulk", "cycle"];
7
+ readonly contract_mismatch: readonly ["updating"];
8
+ readonly forbidden: readonly ["revoked"];
9
+ readonly gone: readonly [];
10
+ readonly not_ready: readonly [];
11
+ readonly released: readonly ["ended", "closed", "settled", "version", "discarded"];
12
+ readonly too_large: readonly ["part"];
13
+ readonly unavailable: readonly ["locked", "park_timeout", "busy", "storage_failed", "undeclared", "version", "reload_cycle"];
14
+ readonly aborted: readonly [];
15
+ };
16
+ export type ChordErrorCode = keyof typeof CHORD_ERROR_REASONS;
17
+ export type ChordErrorReason<C extends ChordErrorCode = ChordErrorCode> = (typeof CHORD_ERROR_REASONS)[C][number];
18
+ /** The wire form of a ChordError and its constructor argument: one member per code, so wrong pairings fail to type. */
19
+ type ChordErrorJson = {
20
+ [C in ChordErrorCode]: ErrorFields<C>;
21
+ }[ChordErrorCode];
22
+ type ErrorFields<C extends ChordErrorCode> = {
23
+ readonly code: C;
24
+ readonly message: string;
25
+ readonly details?: JsonValue;
26
+ } & (C extends "invalid" ? {
27
+ readonly reason: ChordErrorReason<C>;
28
+ } : [ChordErrorReason<C>] extends [never] ? {
29
+ readonly reason?: undefined;
30
+ } : {
31
+ readonly reason?: ChordErrorReason<C>;
32
+ });
33
+ declare class ChordErrorClass extends Error {
34
+ readonly code: ChordErrorCode;
35
+ readonly reason: ChordErrorReason | undefined;
36
+ readonly details: JsonValue | undefined;
37
+ constructor(init: ChordErrorJson, options?: ErrorOptions);
38
+ /** The wire form; stack and cause never cross a link. */
39
+ toJSON(): ChordErrorJson;
40
+ }
41
+ /** A Chord failure. Narrowing on `code` narrows `reason`. */
42
+ export type ChordError = ChordErrorClass & ChordErrorJson;
43
+ /**
44
+ * Creates a ChordError: `new ChordError({ code: "invalid", reason: "args", message })`. A class cannot declare its
45
+ * instances as a tagged union; this constructor signature does.
46
+ */
47
+ export declare const ChordError: new (init: ChordErrorJson, options?: ErrorOptions) => ChordError;
48
+ /** Whether `error` is a ChordError, optionally with the given code. */
49
+ export declare function isChordError<C extends ChordErrorCode = ChordErrorCode>(error: unknown, code?: C): error is Extract<ChordError, {
50
+ readonly code: C;
51
+ }>;
52
+ /**
53
+ * An error a plugin throws for its callers: its own `code`, a message and JSON `details`. Only these cross a link
54
+ * (never a stack or a cause); a consumer rethrows it as a PluginError.
55
+ */
56
+ export declare class PluginError extends Error {
57
+ readonly code: string;
58
+ readonly details: JsonValue | undefined;
59
+ constructor(code: string, message: string, details?: JsonValue);
60
+ }
61
+ /** An `invalid` error with the given reason: a plugin throws it for arguments or params it refuses. */
62
+ export declare function invalid(reason: ChordErrorReason<"invalid">, message: string, details?: JsonValue): Extract<ChordError, {
63
+ readonly code: "invalid";
64
+ }>;
65
+ /**
66
+ * A `forbidden` error without a reason: what a plugin or an `authorize` throws for a principal it refuses (`revoked` is
67
+ * Chord's own, for a revoked authority).
68
+ */
69
+ export declare function forbidden(message: string, details?: JsonValue): Extract<ChordError, {
70
+ readonly code: "forbidden";
71
+ }>;
72
+ /** `error` itself when it is a ChordError, otherwise an `unavailable` error naming `label`, with `error` as cause. */
73
+ export declare function asChordError(error: unknown, label: string): ChordError;
74
+ /**
75
+ * Rebuilds a ChordError from a link. Checks the envelope only: a known code, a reason allowed for it (required for
76
+ * `invalid`), a string message, no other keys. `details` is kept by reference.
77
+ */
78
+ export declare function chordErrorFromJson(raw: unknown): ChordError;
79
+ export {};
80
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/data/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ // ChordError: Chord's one error type, its codes and reasons (link protocol) and its wire form; and PluginError, what a
2
+ // plugin throws to give its callers a code of its own.
3
+ /** Version of the error table below on links; adding or moving a code or reason bumps it. */
4
+ export const PROTOCOL_VERSION = 1;
5
+ /** Every code with the reasons it may carry. `invalid` requires a reason; every other code may omit it. */
6
+ export const CHORD_ERROR_REASONS = {
7
+ invalid: ["args", "params", "member", "host_address", "reentrant", "read_after_bulk", "cycle"],
8
+ contract_mismatch: ["updating"],
9
+ forbidden: ["revoked"],
10
+ gone: [],
11
+ not_ready: [],
12
+ // No reason: released by its holder. `ended`: its object ended; `closed`: its host, store or native closed;
13
+ // `settled`: used after the call or run it belonged to settled; `version`: an old handle after a migration;
14
+ // `discarded`: a transaction cut at the seal.
15
+ released: ["ended", "closed", "settled", "version", "discarded"],
16
+ too_large: ["part"],
17
+ // `undeclared`: a registry no plugin serves on this host; `version`: waiting for a dependency refused for its version
18
+ // (it heals with another host's reload); `reload_cycle`: old work waiting on its own drain during a reload.
19
+ unavailable: ["locked", "park_timeout", "busy", "storage_failed", "undeclared", "version", "reload_cycle"],
20
+ aborted: [],
21
+ };
22
+ class ChordErrorClass extends Error {
23
+ code;
24
+ reason;
25
+ details;
26
+ constructor(init, options) {
27
+ super(init.message, options);
28
+ this.name = "ChordError";
29
+ this.code = init.code;
30
+ this.reason = init.reason;
31
+ this.details = init.details;
32
+ }
33
+ /** The wire form; stack and cause never cross a link. */
34
+ toJSON() {
35
+ const { code, reason, message, details } = this;
36
+ // The fields were copied from a ChordErrorJson, so the pairing holds.
37
+ return {
38
+ code,
39
+ ...(reason === undefined ? {} : { reason }),
40
+ message,
41
+ ...(details === undefined ? {} : { details }),
42
+ };
43
+ }
44
+ }
45
+ /**
46
+ * Creates a ChordError: `new ChordError({ code: "invalid", reason: "args", message })`. A class cannot declare its
47
+ * instances as a tagged union; this constructor signature does.
48
+ */
49
+ export const ChordError = ChordErrorClass;
50
+ /** Whether `error` is a ChordError, optionally with the given code. */
51
+ export function isChordError(error, code) {
52
+ return error instanceof ChordError && (code === undefined || error.code === code);
53
+ }
54
+ /**
55
+ * An error a plugin throws for its callers: its own `code`, a message and JSON `details`. Only these cross a link
56
+ * (never a stack or a cause); a consumer rethrows it as a PluginError.
57
+ */
58
+ export class PluginError extends Error {
59
+ code;
60
+ details;
61
+ constructor(code, message, details) {
62
+ super(message);
63
+ this.name = "PluginError";
64
+ this.code = code;
65
+ this.details = details;
66
+ }
67
+ }
68
+ /** An `invalid` error with the given reason: a plugin throws it for arguments or params it refuses. */
69
+ export function invalid(reason, message, details) {
70
+ // The constructor's return type cannot narrow on its argument.
71
+ return new ChordError({ code: "invalid", reason, message, details });
72
+ }
73
+ /**
74
+ * A `forbidden` error without a reason: what a plugin or an `authorize` throws for a principal it refuses (`revoked` is
75
+ * Chord's own, for a revoked authority).
76
+ */
77
+ export function forbidden(message, details) {
78
+ // The constructor's return type cannot narrow on its argument.
79
+ return new ChordError({ code: "forbidden", message, details });
80
+ }
81
+ /** `error` itself when it is a ChordError, otherwise an `unavailable` error naming `label`, with `error` as cause. */
82
+ export function asChordError(error, label) {
83
+ if (isChordError(error))
84
+ return error;
85
+ const message = error instanceof Error ? error.message : String(error);
86
+ return new ChordError({ code: "unavailable", message: `${label}: ${message}` }, { cause: error });
87
+ }
88
+ /**
89
+ * Rebuilds a ChordError from a link. Checks the envelope only: a known code, a reason allowed for it (required for
90
+ * `invalid`), a string message, no other keys. `details` is kept by reference.
91
+ */
92
+ export function chordErrorFromJson(raw) {
93
+ // Trust boundary: `raw` is fresh JSON from the link decoder.
94
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
95
+ throw envelopeError("not an object");
96
+ const json = raw;
97
+ for (const key of Object.keys(json))
98
+ if (!ENVELOPE_KEYS.has(key))
99
+ throw envelopeError(`unknown key "${key}"`);
100
+ const { code, reason, message } = json;
101
+ if (typeof code !== "string" || !Object.hasOwn(CHORD_ERROR_REASONS, code))
102
+ throw envelopeError("unknown code");
103
+ const reasons = CHORD_ERROR_REASONS[code];
104
+ if (reason === undefined ? code === "invalid" : !reasons.includes(reason)) {
105
+ throw envelopeError(`reason not allowed for ${code}`);
106
+ }
107
+ if (typeof message !== "string")
108
+ throw envelopeError("message is not a string");
109
+ // The checks above establish the pairing.
110
+ return new ChordError(json);
111
+ }
112
+ const ENVELOPE_KEYS = new Set(["code", "reason", "message", "details"]);
113
+ function envelopeError(problem) {
114
+ return new Error(`Invalid ChordError JSON: ${problem}`);
115
+ }
116
+ //# sourceMappingURL=errors.js.map