@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,92 @@
1
+ // / <reference lib="dom" /> `startPage` (slice 11 §2, decisions "Slice 11, P4" to "P6"): a page's client host, in the
2
+ // app's web entry (the base bundle). It takes the plugin scripts the page's combined file registered, loads them with
3
+ // the app's core facets and the kit's themes and translations, follows the theme and the language, keeps its link to
4
+ // the server (the connection loop), follows `WebScripts` to apply new plugin scripts in place, reloads the page when
5
+ // the server's base bundle changed, records its telemetry when asked (sent to the server's `PageTelemetry`), and hands
6
+ // the host to the app's render.
7
+ import { BACKGROUND_CONTEXT } from "../context/index.js";
8
+ import { webSocketLink } from "../link/index.js";
9
+ import { startClient, themesFacet, translationsFacet, WebScripts, } from "../surfaces/index.js";
10
+ import { sendPageTelemetry, TelemetryRecorder } from "../telemetry-ingest/index.js";
11
+ import { pageEnvironment } from "./environment.js";
12
+ import { followLanguage } from "./language.js";
13
+ import { PageScripts } from "./scripts.js";
14
+ import { PageStyles } from "./styles.js";
15
+ import { followThemes } from "./themes.js";
16
+ /** Where the web surface's files live (the server's `WEB_PREFIX`). */
17
+ const PREFIX = "/_chord/web/";
18
+ /** Starts the page; resolves with its client once rendered. */
19
+ export async function startPage(options) {
20
+ // Written by the page's inline bootstrap (the server's `PageAssets.bootstrap`).
21
+ const bootstrap = globalThis.chordPage;
22
+ if (bootstrap === undefined)
23
+ throw new Error("startPage: the page has no Chord bootstrap (PageAssets.bootstrap)");
24
+ const scripts = new PageScripts(bootstrap);
25
+ // From here on `PageStyles` follows the stylesheets' loads itself.
26
+ document.removeEventListener("load", bootstrap.watching, true);
27
+ document.removeEventListener("error", bootstrap.watching, true);
28
+ const core = [
29
+ { name: "chord.themes", facet: themesFacet() },
30
+ { name: "chord.translations", facet: translationsFacet() },
31
+ ...(options.core ?? []),
32
+ ];
33
+ const onError = options.onError ?? ((error) => console.error("chord page:", error));
34
+ let recorder;
35
+ const telemetry = options.telemetry === true
36
+ ? (incarnation) => {
37
+ recorder = new TelemetryRecorder(() => `browser:${incarnation()}`, PAGE_QUEUE);
38
+ return recorder;
39
+ }
40
+ : undefined;
41
+ const client = await startClient({
42
+ scripts: WebScripts,
43
+ base: scripts.base,
44
+ initial: scripts.initial,
45
+ modules: options.modules,
46
+ core,
47
+ open: (events) => {
48
+ const socket = options.connect();
49
+ socket.addEventListener("open", () => events.opened());
50
+ socket.addEventListener("message", () => events.received());
51
+ return webSocketLink(socket);
52
+ },
53
+ fetchScript: (entry) => scripts.fetch(entry),
54
+ serverBase,
55
+ outdated: () => location.reload(),
56
+ ...(options.canRetry === undefined ? {} : { canRetry: options.canRetry }),
57
+ ...(options.onConnection === undefined ? {} : { onConnection: options.onConnection }),
58
+ styles: new PageStyles(bootstrap.styles, bootstrap.links, onError),
59
+ environment: pageEnvironment(),
60
+ ...(telemetry === undefined ? {} : { telemetry }),
61
+ onError,
62
+ });
63
+ if (recorder !== undefined)
64
+ sendEvery(sendPageTelemetry(client.host, recorder, BACKGROUND_CONTEXT));
65
+ await followThemes(client.host, BACKGROUND_CONTEXT);
66
+ await followLanguage(client.host, (report) => onError({ kind: "messages", report }), BACKGROUND_CONTEXT);
67
+ options.render(client.host);
68
+ return client;
69
+ }
70
+ /** How many finished spans a page keeps while it cannot send (past it new ones are dropped). */
71
+ const PAGE_QUEUE = 1000;
72
+ /** How often a page sends its finished spans. */
73
+ const PAGE_SEND_MS = 3000;
74
+ /** Sends with `sender` every `PAGE_SEND_MS` and at once when the page is hidden (it may not come back). */
75
+ function sendEvery(sender) {
76
+ setInterval(() => void sender.send(false), PAGE_SEND_MS);
77
+ document.addEventListener("visibilitychange", () => {
78
+ if (document.visibilityState === "hidden")
79
+ void sender.send(true);
80
+ });
81
+ }
82
+ /** The server's current base bundle hash (`undefined` when it cannot be asked: offline, restarting). */
83
+ async function serverBase() {
84
+ try {
85
+ const response = await fetch(`${PREFIX}base`, { cache: "no-store", credentials: "same-origin" });
86
+ return response.ok ? (await response.json()) : undefined;
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/web/page.ts"],"names":[],"mappings":"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","sourcesContent":["// / <reference lib=\"dom\" /> `startPage` (slice 11 §2, decisions \"Slice 11, P4\" to \"P6\"): a page's client host, in the\n// app's web entry (the base bundle). It takes the plugin scripts the page's combined file registered, loads them with\n// the app's core facets and the kit's themes and translations, follows the theme and the language, keeps its link to\n// the server (the connection loop), follows `WebScripts` to apply new plugin scripts in place, reloads the page when\n// the server's base bundle changed, records its telemetry when asked (sent to the server's `PageTelemetry`), and hands\n// the host to the app's render.\n\nimport { BACKGROUND_CONTEXT } from \"../context/index.ts\";\nimport type { Principal } from \"../data/index.ts\";\nimport type { PluginFacet } from \"../host/index.ts\";\nimport { type WebSocketLike, webSocketLink } from \"../link/index.ts\";\nimport {\n\ttype Client,\n\ttype ClientError,\n\ttype ClientModules,\n\ttype ConnectionState,\n\tstartClient,\n\tthemesFacet,\n\ttranslationsFacet,\n\tWebScripts,\n} from \"../surfaces/index.ts\";\nimport { sendPageTelemetry, TelemetryRecorder, type TelemetrySender } from \"../telemetry-ingest/index.ts\";\nimport { pageEnvironment } from \"./environment.ts\";\nimport { followLanguage } from \"./language.ts\";\nimport { type PageBootstrap, PageScripts } from \"./scripts.ts\";\nimport { PageStyles } from \"./styles.ts\";\nimport { followThemes } from \"./themes.ts\";\n\n/** What `startPage` takes. */\nexport type PageOptions<P extends Principal> = {\n\t/** Opens the page's socket to the server's links endpoint (`/chord`). */\n\treadonly connect: () => WebSocketLike;\n\t/** The modules the web plugins import, by specifier: the app's API modules for the web kind, React, ... */\n\treadonly modules: ClientModules;\n\t/** The app's own web facets. */\n\treadonly core?: readonly PluginFacet<P>[];\n\t/** Asked before each reconnect; `false` stops reconnecting (a guest's ended share). */\n\treadonly canRetry?: () => Promise<boolean>;\n\treadonly onConnection?: (state: ConnectionState) => void;\n\t/** Renders the app with its host, once the plugins are loaded. */\n\treadonly render: (host: Client<P>[\"host\"]) => void;\n\t/**\n\t * Records the page's telemetry (decision \"Telemetry from browser pages\"): its spans (a click started with\n\t * `host.root(fn, ctx, { trace })`, the calls under it, carriers on its calls) are kept in memory and sent to the\n\t * server's telemetry object every few seconds and when the page is hidden. Off by default.\n\t */\n\treadonly telemetry?: boolean;\n\t/** Plugins left out or kept old, a failed update, the host's errors, messages' reports: the console by default. */\n\treadonly onError?: (error: ClientError) => void;\n};\n\n/** Where the web surface's files live (the server's `WEB_PREFIX`). */\nconst PREFIX = \"/_chord/web/\";\n\n/** Starts the page; resolves with its client once rendered. */\nexport async function startPage<P extends Principal>(options: PageOptions<P>): Promise<Client<P>> {\n\t// Written by the page's inline bootstrap (the server's `PageAssets.bootstrap`).\n\tconst bootstrap = (globalThis as { readonly chordPage?: PageBootstrap }).chordPage;\n\tif (bootstrap === undefined) throw new Error(\"startPage: the page has no Chord bootstrap (PageAssets.bootstrap)\");\n\tconst scripts = new PageScripts(bootstrap);\n\t// From here on `PageStyles` follows the stylesheets' loads itself.\n\tdocument.removeEventListener(\"load\", bootstrap.watching, true);\n\tdocument.removeEventListener(\"error\", bootstrap.watching, true);\n\tconst core: PluginFacet<P>[] = [\n\t\t{ name: \"chord.themes\", facet: themesFacet<P>() },\n\t\t{ name: \"chord.translations\", facet: translationsFacet<P>() },\n\t\t...(options.core ?? []),\n\t];\n\tconst onError = options.onError ?? ((error: ClientError) => console.error(\"chord page:\", error));\n\tlet recorder: TelemetryRecorder | undefined;\n\tconst telemetry =\n\t\toptions.telemetry === true\n\t\t\t? (incarnation: () => string) => {\n\t\t\t\t\trecorder = new TelemetryRecorder(() => `browser:${incarnation()}`, PAGE_QUEUE);\n\t\t\t\t\treturn recorder;\n\t\t\t\t}\n\t\t\t: undefined;\n\tconst client = await startClient<P>({\n\t\tscripts: WebScripts,\n\t\tbase: scripts.base,\n\t\tinitial: scripts.initial,\n\t\tmodules: options.modules,\n\t\tcore,\n\t\topen: (events) => {\n\t\t\tconst socket = options.connect();\n\t\t\tsocket.addEventListener(\"open\", () => events.opened());\n\t\t\tsocket.addEventListener(\"message\", () => events.received());\n\t\t\treturn webSocketLink(socket);\n\t\t},\n\t\tfetchScript: (entry) => scripts.fetch(entry),\n\t\tserverBase,\n\t\toutdated: () => location.reload(),\n\t\t...(options.canRetry === undefined ? {} : { canRetry: options.canRetry }),\n\t\t...(options.onConnection === undefined ? {} : { onConnection: options.onConnection }),\n\t\tstyles: new PageStyles(bootstrap.styles, bootstrap.links, onError),\n\t\tenvironment: pageEnvironment(),\n\t\t...(telemetry === undefined ? {} : { telemetry }),\n\t\tonError,\n\t});\n\tif (recorder !== undefined) sendEvery(sendPageTelemetry(client.host, recorder, BACKGROUND_CONTEXT));\n\tawait followThemes(client.host, BACKGROUND_CONTEXT);\n\tawait followLanguage(client.host, (report) => onError({ kind: \"messages\", report }), BACKGROUND_CONTEXT);\n\toptions.render(client.host);\n\treturn client;\n}\n\n/** How many finished spans a page keeps while it cannot send (past it new ones are dropped). */\nconst PAGE_QUEUE = 1000;\n\n/** How often a page sends its finished spans. */\nconst PAGE_SEND_MS = 3000;\n\n/** Sends with `sender` every `PAGE_SEND_MS` and at once when the page is hidden (it may not come back). */\nfunction sendEvery(sender: TelemetrySender): void {\n\tsetInterval(() => void sender.send(false), PAGE_SEND_MS);\n\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\tif (document.visibilityState === \"hidden\") void sender.send(true);\n\t});\n}\n\n/** The server's current base bundle hash (`undefined` when it cannot be asked: offline, restarting). */\nasync function serverBase(): Promise<string | undefined> {\n\ttry {\n\t\tconst response = await fetch(`${PREFIX}base`, { cache: \"no-store\", credentials: \"same-origin\" });\n\t\treturn response.ok ? ((await response.json()) as string) : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { FacetFunction, RegisteredScript, ScriptEntry } from "../surfaces/index.ts";
2
+ /**
3
+ * What the page's bootstrap left: the base bundle's hash, the stylesheet of each plugin's script in the combined file
4
+ * (by plugin), how each stylesheet's load ended so far (by `href`) and the listener recording it, and the scripts the
5
+ * combined file registered.
6
+ */
7
+ export type PageBootstrap = {
8
+ readonly base: string;
9
+ readonly styles: Readonly<Record<string, string>>;
10
+ readonly links: Readonly<Record<string, "load" | "error">>;
11
+ readonly watching: (event: Event) => void;
12
+ readonly queued: readonly (readonly [string, string, FacetFunction])[];
13
+ };
14
+ /** The page's plugin scripts: those the page started with, and fetches of later ones. */
15
+ export declare class PageScripts {
16
+ #private;
17
+ readonly initial: readonly RegisteredScript[];
18
+ readonly base: string;
19
+ constructor(bootstrap: PageBootstrap);
20
+ /** Loads `entry`'s script with a `<script src>`; resolves once it registered, rejects when it does not load. */
21
+ fetch(entry: ScriptEntry): Promise<RegisteredScript>;
22
+ }
23
+ //# sourceMappingURL=scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/web/scripts.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGzF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;CACvE,CAAC;AAEF,yFAAyF;AACzF,qBAAa,WAAW;;IAGvB,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,SAAS,EAAE,aAAa,EAOnC;IAED,gHAAgH;IAChH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyBnD;CACD"}
@@ -0,0 +1,50 @@
1
+ /// <reference lib="dom" />
2
+ // A page's plugin scripts (slice 11 §2, decision "Slice 11's points" (P2)): scripts that register themselves through
3
+ // `chordFacet`, loaded with `<script src>` (no `eval` under the page's CSP). The combined file's scripts ran before the
4
+ // base bundle and queued (the page's bootstrap); later ones are fetched one each and resolve the fetch that asked for
5
+ // them. The plugins' stylesheets are `styles.ts`'s.
6
+ import { REGISTER } from "../surfaces/index.js";
7
+ /** The page's plugin scripts: those the page started with, and fetches of later ones. */
8
+ export class PageScripts {
9
+ /** Fetches waiting for their script to register, by plugin and digest. */
10
+ #waiting = new Map();
11
+ initial;
12
+ base;
13
+ constructor(bootstrap) {
14
+ this.base = bootstrap.base;
15
+ this.initial = bootstrap.queued.map(([plugin, digest, run]) => ({ plugin, digest, run }));
16
+ // From now on a script that registers resolves its fetch.
17
+ globalThis[REGISTER] = (plugin, digest, run) => {
18
+ this.#waiting.get(`${plugin}\0${digest}`)?.({ plugin, digest, run });
19
+ };
20
+ }
21
+ /** Loads `entry`'s script with a `<script src>`; resolves once it registered, rejects when it does not load. */
22
+ fetch(entry) {
23
+ const key = `${entry.name}\0${entry.digest}`;
24
+ return new Promise((resolve, reject) => {
25
+ const element = document.createElement("script");
26
+ const done = () => {
27
+ this.#waiting.delete(key);
28
+ element.remove();
29
+ };
30
+ this.#waiting.set(key, (script) => {
31
+ done();
32
+ resolve(script);
33
+ });
34
+ element.addEventListener("error", () => {
35
+ done();
36
+ reject(new Error(`plugin "${entry.name}": its script ${entry.url} did not load`));
37
+ });
38
+ // A script that loaded without registering (a wrong file) never resolves its own key: refused on load.
39
+ element.addEventListener("load", () => {
40
+ if (!this.#waiting.has(key))
41
+ return;
42
+ done();
43
+ reject(new Error(`plugin "${entry.name}": ${entry.url} did not register ${entry.digest}`));
44
+ });
45
+ element.src = entry.url;
46
+ document.head.append(element);
47
+ });
48
+ }
49
+ }
50
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/web/scripts.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,qHAAqH;AACrH,wHAAwH;AACxH,sHAAsH;AACtH,oDAAoD;AAGpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAehD,yFAAyF;AACzF,MAAM,OAAO,WAAW;IACvB,0EAA0E;IACjE,QAAQ,GAAG,IAAI,GAAG,EAA8C,CAAC;IACjE,OAAO,CAA8B;IACrC,IAAI,CAAS;IAEtB,YAAY,SAAwB;QACnC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1F,0DAA0D;QACzD,UAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,GAAkB,EAAE,EAAE;YAC1G,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC;IACH,CAAC;IAED,gHAAgH;IAChH,KAAK,CAAC,KAAkB;QACvB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,GAAS,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjC,IAAI,EAAE,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtC,IAAI,EAAE,CAAC;gBACP,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC;YACH,uGAAuG;YACvG,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;gBACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACpC,IAAI,EAAE,CAAC;gBACP,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,qBAAqB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACJ,CAAC;CACD","sourcesContent":["/// <reference lib=\"dom\" />\n// A page's plugin scripts (slice 11 §2, decision \"Slice 11's points\" (P2)): scripts that register themselves through\n// `chordFacet`, loaded with `<script src>` (no `eval` under the page's CSP). The combined file's scripts ran before the\n// base bundle and queued (the page's bootstrap); later ones are fetched one each and resolve the fetch that asked for\n// them. The plugins' stylesheets are `styles.ts`'s.\n\nimport type { FacetFunction, RegisteredScript, ScriptEntry } from \"../surfaces/index.ts\";\nimport { REGISTER } from \"../surfaces/index.ts\";\n\n/**\n * What the page's bootstrap left: the base bundle's hash, the stylesheet of each plugin's script in the combined file\n * (by plugin), how each stylesheet's load ended so far (by `href`) and the listener recording it, and the scripts the\n * combined file registered.\n */\nexport type PageBootstrap = {\n\treadonly base: string;\n\treadonly styles: Readonly<Record<string, string>>;\n\treadonly links: Readonly<Record<string, \"load\" | \"error\">>;\n\treadonly watching: (event: Event) => void;\n\treadonly queued: readonly (readonly [string, string, FacetFunction])[];\n};\n\n/** The page's plugin scripts: those the page started with, and fetches of later ones. */\nexport class PageScripts {\n\t/** Fetches waiting for their script to register, by plugin and digest. */\n\treadonly #waiting = new Map<string, (script: RegisteredScript) => void>();\n\treadonly initial: readonly RegisteredScript[];\n\treadonly base: string;\n\n\tconstructor(bootstrap: PageBootstrap) {\n\t\tthis.base = bootstrap.base;\n\t\tthis.initial = bootstrap.queued.map(([plugin, digest, run]) => ({ plugin, digest, run }));\n\t\t// From now on a script that registers resolves its fetch.\n\t\t(globalThis as Record<string, unknown>)[REGISTER] = (plugin: string, digest: string, run: FacetFunction) => {\n\t\t\tthis.#waiting.get(`${plugin}\\0${digest}`)?.({ plugin, digest, run });\n\t\t};\n\t}\n\n\t/** Loads `entry`'s script with a `<script src>`; resolves once it registered, rejects when it does not load. */\n\tfetch(entry: ScriptEntry): Promise<RegisteredScript> {\n\t\tconst key = `${entry.name}\\0${entry.digest}`;\n\t\treturn new Promise<RegisteredScript>((resolve, reject) => {\n\t\t\tconst element = document.createElement(\"script\");\n\t\t\tconst done = (): void => {\n\t\t\t\tthis.#waiting.delete(key);\n\t\t\t\telement.remove();\n\t\t\t};\n\t\t\tthis.#waiting.set(key, (script) => {\n\t\t\t\tdone();\n\t\t\t\tresolve(script);\n\t\t\t});\n\t\t\telement.addEventListener(\"error\", () => {\n\t\t\t\tdone();\n\t\t\t\treject(new Error(`plugin \"${entry.name}\": its script ${entry.url} did not load`));\n\t\t\t});\n\t\t\t// A script that loaded without registering (a wrong file) never resolves its own key: refused on load.\n\t\t\telement.addEventListener(\"load\", () => {\n\t\t\t\tif (!this.#waiting.has(key)) return;\n\t\t\t\tdone();\n\t\t\t\treject(new Error(`plugin \"${entry.name}\": ${entry.url} did not register ${entry.digest}`));\n\t\t\t});\n\t\t\telement.src = entry.url;\n\t\t\tdocument.head.append(element);\n\t\t});\n\t}\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { ClientError, ClientStyles, ScriptSet } from "../surfaces/index.ts";
2
+ /**
3
+ * The page's plugin stylesheets (`ClientStyles`). A plugin new to the page gets its stylesheet at its place in the set's
4
+ * order, so the cascade between plugins stays. UI an object contributes and keeps until its successor is live (design
5
+ * §21) may outlast the old stylesheet: it can show unstyled while that object restarts.
6
+ */
7
+ export declare class PageStyles implements ClientStyles {
8
+ #private;
9
+ /**
10
+ * Takes the page's own links of the plugins' stylesheets (`initial`, by plugin) with how their loads ended so far
11
+ * (`ended`, by `href`, as the bootstrap recorded them).
12
+ */
13
+ constructor(initial: Readonly<Record<string, string>>, ended: Readonly<Record<string, "load" | "error">>, report: (error: ClientError) => void);
14
+ prepare(set: ScriptSet, signal: AbortSignal): Promise<void>;
15
+ settle(set: ScriptSet, kept: ReadonlySet<string>): void;
16
+ }
17
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/web/styles.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAe,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE9F;;;;GAIG;AACH,qBAAa,UAAW,YAAW,YAAY;;IAO9C;;;OAGG;IACH,YACC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACzC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EACjD,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EASpC;IAEK,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE;IAED,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CA+BtD;CA0BD"}
@@ -0,0 +1,218 @@
1
+ /// <reference lib="dom" />
2
+ // A page's plugin stylesheets (p3 step 0a; design §21, "UI on client hosts"): each plugin's `<link>` paired with the
3
+ // code it runs, the bootstrap's at first. An update fetches a plugin's new stylesheet inactive (`media="not all"`:
4
+ // loaded, not applied) right after the plugin's own before the reload, and applies it only when the plugin's new code
5
+ // was adopted; the old one goes once the page has drawn a frame after the reload. A stylesheet that did not load (or not
6
+ // in time) is loaded again by the next update; a stopped update removes what it prepared.
7
+ /**
8
+ * The page's plugin stylesheets (`ClientStyles`). A plugin new to the page gets its stylesheet at its place in the set's
9
+ * order, so the cascade between plugins stays. UI an object contributes and keeps until its successor is live (design
10
+ * §21) may outlast the old stylesheet: it can show unstyled while that object restarts.
11
+ */
12
+ export class PageStyles {
13
+ /** The stylesheet of the code each plugin runs, by plugin. */
14
+ #current = new Map();
15
+ /** The stylesheets fetched inactive for the update under way, by plugin. */
16
+ #prepared = new Map();
17
+ #report;
18
+ /**
19
+ * Takes the page's own links of the plugins' stylesheets (`initial`, by plugin) with how their loads ended so far
20
+ * (`ended`, by `href`, as the bootstrap recorded them).
21
+ */
22
+ constructor(initial, ended, report) {
23
+ this.#report = report;
24
+ const plugins = new Map(Object.entries(initial).map(([plugin, href]) => [href, plugin]));
25
+ for (const link of document.querySelectorAll('link[rel="stylesheet"]')) {
26
+ const href = link.getAttribute("href") ?? "";
27
+ const plugin = plugins.get(href);
28
+ if (plugin !== undefined)
29
+ this.#current.set(plugin, Sheet.present(link, href, ended[href]));
30
+ }
31
+ }
32
+ async prepare(set, signal) {
33
+ const waits = [];
34
+ for (const [index, { name, css }] of set.plugins.entries()) {
35
+ if (css === undefined || this.#current.get(name)?.loadedFrom(css) === true) {
36
+ this.#drop(name);
37
+ continue;
38
+ }
39
+ let sheet = this.#prepared.get(name);
40
+ if (sheet === undefined || !sheet.usableFor(css)) {
41
+ this.#drop(name);
42
+ sheet = Sheet.inactive(css);
43
+ this.#insert(sheet.link, name, set.plugins.slice(0, index), set.plugins.slice(index + 1));
44
+ this.#prepared.set(name, sheet);
45
+ }
46
+ waits.push(sheet.wait(signal).then((outcome) => {
47
+ if (outcome.kind === "failed") {
48
+ this.#report({ kind: "stylesheet_failed", plugin: name, url: css, reason: outcome.reason });
49
+ }
50
+ }));
51
+ }
52
+ await Promise.all(waits);
53
+ // Stopped: nothing it prepared will be adopted, and a request finishing later must change nothing.
54
+ if (signal.aborted)
55
+ for (const name of [...this.#prepared.keys()])
56
+ this.#drop(name);
57
+ }
58
+ settle(set, kept) {
59
+ const retired = [];
60
+ const names = new Set(set.plugins.map(({ name }) => name));
61
+ for (const { name, css } of set.plugins) {
62
+ const prepared = this.#prepared.get(name);
63
+ this.#prepared.delete(name);
64
+ const current = this.#current.get(name);
65
+ if (kept.has(name))
66
+ prepared?.remove();
67
+ else if (prepared !== undefined) {
68
+ prepared.activate();
69
+ if (current !== undefined)
70
+ retired.push(current);
71
+ this.#current.set(name, prepared);
72
+ }
73
+ else if (css === undefined && current !== undefined) {
74
+ retired.push(current);
75
+ this.#current.delete(name);
76
+ }
77
+ }
78
+ for (const sheet of this.#prepared.values())
79
+ sheet.remove();
80
+ this.#prepared.clear();
81
+ for (const [name, sheet] of this.#current) {
82
+ if (names.has(name))
83
+ continue;
84
+ retired.push(sheet);
85
+ this.#current.delete(name);
86
+ }
87
+ // The new code renders after the reload resolved (its registries notify, React commits): the old rules stay
88
+ // until the page drew a frame after the reload (UI an object keeps until its successor is live may outlast them).
89
+ if (retired.length > 0) {
90
+ afterDrawn(() => {
91
+ for (const sheet of retired)
92
+ sheet.remove();
93
+ });
94
+ }
95
+ }
96
+ /** Removes plugin `name`'s prepared stylesheet, if it has one. */
97
+ #drop(name) {
98
+ this.#prepared.get(name)?.remove();
99
+ this.#prepared.delete(name);
100
+ }
101
+ /**
102
+ * Inserts `link` of `plugin` right after the plugin's own link, else after the last link of the nearest plugin
103
+ * `before` it in the set's order, else before the first link of a plugin `after` it, else at the end of the head.
104
+ */
105
+ #insert(link, plugin, before, after) {
106
+ const own = this.#current.get(plugin)?.link;
107
+ const previous = [...before]
108
+ .reverse()
109
+ .map(({ name }) => (this.#prepared.get(name) ?? this.#current.get(name))?.link)
110
+ .find((each) => each !== undefined);
111
+ const next = after
112
+ .map(({ name }) => (this.#current.get(name) ?? this.#prepared.get(name))?.link)
113
+ .find((each) => each !== undefined);
114
+ if (own !== undefined)
115
+ own.after(link);
116
+ else if (previous !== undefined)
117
+ previous.after(link);
118
+ else if (next !== undefined)
119
+ next.before(link);
120
+ else
121
+ document.head.append(link);
122
+ }
123
+ }
124
+ /** How long an update waits for a new stylesheet before it reloads its plugin anyway: 10 s. */
125
+ const STYLESHEET_WAIT_MS = 10_000;
126
+ /**
127
+ * One plugin stylesheet's `<link>` and its load's state, followed while the link is in the page: a load finishing after a
128
+ * wait gave up still counts.
129
+ */
130
+ class Sheet {
131
+ link;
132
+ href;
133
+ #state;
134
+ /** Waits listening for the load's end (or the link's removal). */
135
+ #waiting = new Set();
136
+ /** Ends the link's listeners when it is removed. */
137
+ #listening = new AbortController();
138
+ constructor(link, href, state) {
139
+ this.link = link;
140
+ this.href = href;
141
+ this.#state = state;
142
+ if (state !== "loading")
143
+ return;
144
+ const settle = (next) => {
145
+ this.#state = next;
146
+ this.#wake(next === "loaded" ? { kind: "loaded" } : { kind: "failed", reason: "error" });
147
+ };
148
+ link.addEventListener("load", () => settle("loaded"), { signal: this.#listening.signal });
149
+ link.addEventListener("error", () => settle("failed"), { signal: this.#listening.signal });
150
+ }
151
+ /** A new `<link>` for `href`, fetched but not applied (`media="not all"`) until `activate`; not inserted yet. */
152
+ static inactive(href) {
153
+ const link = document.createElement("link");
154
+ link.rel = "stylesheet";
155
+ link.media = "not all";
156
+ const sheet = new Sheet(link, href, "loading");
157
+ link.href = href;
158
+ return sheet;
159
+ }
160
+ /**
161
+ * A `<link>` the page came with, at `href`, its load `ended` as the bootstrap saw it (`undefined`: still under way,
162
+ * followed from now). Not its `sheet`: a failed load (an HTTP error) still has one, empty.
163
+ */
164
+ static present(link, href, ended) {
165
+ return new Sheet(link, href, ended === "load" ? "loaded" : ended === "error" ? "failed" : "loading");
166
+ }
167
+ /** Whether it loaded from `href`: an update with that stylesheet has nothing to load. */
168
+ loadedFrom(href) {
169
+ return this.href === href && this.#state === "loaded";
170
+ }
171
+ /** Whether an update with stylesheet `href` can wait for it rather than fetch again: the same, and not failed. */
172
+ usableFor(href) {
173
+ return this.href === href && this.#state !== "failed";
174
+ }
175
+ /** Its load's outcome: at once when it ended, else when it ends, after 10 s (`timeout`), or when `signal` aborts. */
176
+ wait(signal) {
177
+ return new Promise((resolve) => {
178
+ const done = (outcome) => {
179
+ clearTimeout(timer);
180
+ signal.removeEventListener("abort", aborted);
181
+ this.#waiting.delete(done);
182
+ resolve(outcome);
183
+ };
184
+ const aborted = () => done({ kind: "cancelled" });
185
+ const timer = setTimeout(() => done({ kind: "failed", reason: "timeout" }), STYLESHEET_WAIT_MS);
186
+ if (signal.aborted)
187
+ aborted();
188
+ else if (this.#state === "loaded")
189
+ done({ kind: "loaded" });
190
+ else if (this.#state === "failed")
191
+ done({ kind: "failed", reason: "error" });
192
+ else {
193
+ this.#waiting.add(done);
194
+ signal.addEventListener("abort", aborted, { once: true });
195
+ }
196
+ });
197
+ }
198
+ /** Applies it (it was fetched inactive). */
199
+ activate() {
200
+ this.link.removeAttribute("media");
201
+ }
202
+ /** Takes it out of the page and stops following its load (its waits end `cancelled`). */
203
+ remove() {
204
+ this.#listening.abort();
205
+ this.#wake({ kind: "cancelled" });
206
+ this.link.remove();
207
+ }
208
+ /** Ends every wait with `outcome`. */
209
+ #wake(outcome) {
210
+ for (const done of [...this.#waiting])
211
+ done(outcome);
212
+ }
213
+ }
214
+ /** Runs `fn` once the page has drawn a frame after the current task (the next frame's callbacks run before it paints). */
215
+ function afterDrawn(fn) {
216
+ setTimeout(() => requestAnimationFrame(() => requestAnimationFrame(fn)), 0);
217
+ }
218
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/web/styles.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference lib=\"dom\" />\n// A page's plugin stylesheets (p3 step 0a; design §21, \"UI on client hosts\"): each plugin's `<link>` paired with the\n// code it runs, the bootstrap's at first. An update fetches a plugin's new stylesheet inactive (`media=\"not all\"`:\n// loaded, not applied) right after the plugin's own before the reload, and applies it only when the plugin's new code\n// was adopted; the old one goes once the page has drawn a frame after the reload. A stylesheet that did not load (or not\n// in time) is loaded again by the next update; a stopped update removes what it prepared.\n\nimport type { ClientError, ClientStyles, ScriptEntry, ScriptSet } from \"../surfaces/index.ts\";\n\n/**\n * The page's plugin stylesheets (`ClientStyles`). A plugin new to the page gets its stylesheet at its place in the set's\n * order, so the cascade between plugins stays. UI an object contributes and keeps until its successor is live (design\n * §21) may outlast the old stylesheet: it can show unstyled while that object restarts.\n */\nexport class PageStyles implements ClientStyles {\n\t/** The stylesheet of the code each plugin runs, by plugin. */\n\treadonly #current = new Map<string, Sheet>();\n\t/** The stylesheets fetched inactive for the update under way, by plugin. */\n\treadonly #prepared = new Map<string, Sheet>();\n\treadonly #report: (error: ClientError) => void;\n\n\t/**\n\t * Takes the page's own links of the plugins' stylesheets (`initial`, by plugin) with how their loads ended so far\n\t * (`ended`, by `href`, as the bootstrap recorded them).\n\t */\n\tconstructor(\n\t\tinitial: Readonly<Record<string, string>>,\n\t\tended: Readonly<Record<string, \"load\" | \"error\">>,\n\t\treport: (error: ClientError) => void,\n\t) {\n\t\tthis.#report = report;\n\t\tconst plugins = new Map(Object.entries(initial).map(([plugin, href]) => [href, plugin]));\n\t\tfor (const link of document.querySelectorAll<HTMLLinkElement>('link[rel=\"stylesheet\"]')) {\n\t\t\tconst href = link.getAttribute(\"href\") ?? \"\";\n\t\t\tconst plugin = plugins.get(href);\n\t\t\tif (plugin !== undefined) this.#current.set(plugin, Sheet.present(link, href, ended[href]));\n\t\t}\n\t}\n\n\tasync prepare(set: ScriptSet, signal: AbortSignal): Promise<void> {\n\t\tconst waits: Promise<void>[] = [];\n\t\tfor (const [index, { name, css }] of set.plugins.entries()) {\n\t\t\tif (css === undefined || this.#current.get(name)?.loadedFrom(css) === true) {\n\t\t\t\tthis.#drop(name);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet sheet = this.#prepared.get(name);\n\t\t\tif (sheet === undefined || !sheet.usableFor(css)) {\n\t\t\t\tthis.#drop(name);\n\t\t\t\tsheet = Sheet.inactive(css);\n\t\t\t\tthis.#insert(sheet.link, name, set.plugins.slice(0, index), set.plugins.slice(index + 1));\n\t\t\t\tthis.#prepared.set(name, sheet);\n\t\t\t}\n\t\t\twaits.push(\n\t\t\t\tsheet.wait(signal).then((outcome) => {\n\t\t\t\t\tif (outcome.kind === \"failed\") {\n\t\t\t\t\t\tthis.#report({ kind: \"stylesheet_failed\", plugin: name, url: css, reason: outcome.reason });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tawait Promise.all(waits);\n\t\t// Stopped: nothing it prepared will be adopted, and a request finishing later must change nothing.\n\t\tif (signal.aborted) for (const name of [...this.#prepared.keys()]) this.#drop(name);\n\t}\n\n\tsettle(set: ScriptSet, kept: ReadonlySet<string>): void {\n\t\tconst retired: Sheet[] = [];\n\t\tconst names = new Set(set.plugins.map(({ name }) => name));\n\t\tfor (const { name, css } of set.plugins) {\n\t\t\tconst prepared = this.#prepared.get(name);\n\t\t\tthis.#prepared.delete(name);\n\t\t\tconst current = this.#current.get(name);\n\t\t\tif (kept.has(name)) prepared?.remove();\n\t\t\telse if (prepared !== undefined) {\n\t\t\t\tprepared.activate();\n\t\t\t\tif (current !== undefined) retired.push(current);\n\t\t\t\tthis.#current.set(name, prepared);\n\t\t\t} else if (css === undefined && current !== undefined) {\n\t\t\t\tretired.push(current);\n\t\t\t\tthis.#current.delete(name);\n\t\t\t}\n\t\t}\n\t\tfor (const sheet of this.#prepared.values()) sheet.remove();\n\t\tthis.#prepared.clear();\n\t\tfor (const [name, sheet] of this.#current) {\n\t\t\tif (names.has(name)) continue;\n\t\t\tretired.push(sheet);\n\t\t\tthis.#current.delete(name);\n\t\t}\n\t\t// The new code renders after the reload resolved (its registries notify, React commits): the old rules stay\n\t\t// until the page drew a frame after the reload (UI an object keeps until its successor is live may outlast them).\n\t\tif (retired.length > 0) {\n\t\t\tafterDrawn(() => {\n\t\t\t\tfor (const sheet of retired) sheet.remove();\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Removes plugin `name`'s prepared stylesheet, if it has one. */\n\t#drop(name: string): void {\n\t\tthis.#prepared.get(name)?.remove();\n\t\tthis.#prepared.delete(name);\n\t}\n\n\t/**\n\t * Inserts `link` of `plugin` right after the plugin's own link, else after the last link of the nearest plugin\n\t * `before` it in the set's order, else before the first link of a plugin `after` it, else at the end of the head.\n\t */\n\t#insert(link: HTMLLinkElement, plugin: string, before: readonly ScriptEntry[], after: readonly ScriptEntry[]): void {\n\t\tconst own = this.#current.get(plugin)?.link;\n\t\tconst previous = [...before]\n\t\t\t.reverse()\n\t\t\t.map(({ name }) => (this.#prepared.get(name) ?? this.#current.get(name))?.link)\n\t\t\t.find((each) => each !== undefined);\n\t\tconst next = after\n\t\t\t.map(({ name }) => (this.#current.get(name) ?? this.#prepared.get(name))?.link)\n\t\t\t.find((each) => each !== undefined);\n\t\tif (own !== undefined) own.after(link);\n\t\telse if (previous !== undefined) previous.after(link);\n\t\telse if (next !== undefined) next.before(link);\n\t\telse document.head.append(link);\n\t}\n}\n\n/** How long an update waits for a new stylesheet before it reloads its plugin anyway: 10 s. */\nconst STYLESHEET_WAIT_MS = 10_000;\n\n/** What became of a stylesheet's load within an update's wait. */\ntype LoadOutcome =\n\t| { readonly kind: \"loaded\" }\n\t| { readonly kind: \"failed\"; readonly reason: \"error\" | \"timeout\" }\n\t| { readonly kind: \"cancelled\" };\n\n/** Where a stylesheet's load is: under way (also past a wait's 10 s), loaded, or failed. */\ntype LoadState = \"loading\" | \"loaded\" | \"failed\";\n\n/**\n * One plugin stylesheet's `<link>` and its load's state, followed while the link is in the page: a load finishing after a\n * wait gave up still counts.\n */\nclass Sheet {\n\treadonly link: HTMLLinkElement;\n\treadonly href: string;\n\t#state: LoadState;\n\t/** Waits listening for the load's end (or the link's removal). */\n\treadonly #waiting = new Set<(outcome: LoadOutcome) => void>();\n\t/** Ends the link's listeners when it is removed. */\n\treadonly #listening = new AbortController();\n\n\tprivate constructor(link: HTMLLinkElement, href: string, state: LoadState) {\n\t\tthis.link = link;\n\t\tthis.href = href;\n\t\tthis.#state = state;\n\t\tif (state !== \"loading\") return;\n\t\tconst settle = (next: \"loaded\" | \"failed\"): void => {\n\t\t\tthis.#state = next;\n\t\t\tthis.#wake(next === \"loaded\" ? { kind: \"loaded\" } : { kind: \"failed\", reason: \"error\" });\n\t\t};\n\t\tlink.addEventListener(\"load\", () => settle(\"loaded\"), { signal: this.#listening.signal });\n\t\tlink.addEventListener(\"error\", () => settle(\"failed\"), { signal: this.#listening.signal });\n\t}\n\n\t/** A new `<link>` for `href`, fetched but not applied (`media=\"not all\"`) until `activate`; not inserted yet. */\n\tstatic inactive(href: string): Sheet {\n\t\tconst link = document.createElement(\"link\");\n\t\tlink.rel = \"stylesheet\";\n\t\tlink.media = \"not all\";\n\t\tconst sheet = new Sheet(link, href, \"loading\");\n\t\tlink.href = href;\n\t\treturn sheet;\n\t}\n\n\t/**\n\t * A `<link>` the page came with, at `href`, its load `ended` as the bootstrap saw it (`undefined`: still under way,\n\t * followed from now). Not its `sheet`: a failed load (an HTTP error) still has one, empty.\n\t */\n\tstatic present(link: HTMLLinkElement, href: string, ended: \"load\" | \"error\" | undefined): Sheet {\n\t\treturn new Sheet(link, href, ended === \"load\" ? \"loaded\" : ended === \"error\" ? \"failed\" : \"loading\");\n\t}\n\n\t/** Whether it loaded from `href`: an update with that stylesheet has nothing to load. */\n\tloadedFrom(href: string): boolean {\n\t\treturn this.href === href && this.#state === \"loaded\";\n\t}\n\n\t/** Whether an update with stylesheet `href` can wait for it rather than fetch again: the same, and not failed. */\n\tusableFor(href: string): boolean {\n\t\treturn this.href === href && this.#state !== \"failed\";\n\t}\n\n\t/** Its load's outcome: at once when it ended, else when it ends, after 10 s (`timeout`), or when `signal` aborts. */\n\twait(signal: AbortSignal): Promise<LoadOutcome> {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst done = (outcome: LoadOutcome): void => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tsignal.removeEventListener(\"abort\", aborted);\n\t\t\t\tthis.#waiting.delete(done);\n\t\t\t\tresolve(outcome);\n\t\t\t};\n\t\t\tconst aborted = (): void => done({ kind: \"cancelled\" });\n\t\t\tconst timer = setTimeout(() => done({ kind: \"failed\", reason: \"timeout\" }), STYLESHEET_WAIT_MS);\n\t\t\tif (signal.aborted) aborted();\n\t\t\telse if (this.#state === \"loaded\") done({ kind: \"loaded\" });\n\t\t\telse if (this.#state === \"failed\") done({ kind: \"failed\", reason: \"error\" });\n\t\t\telse {\n\t\t\t\tthis.#waiting.add(done);\n\t\t\t\tsignal.addEventListener(\"abort\", aborted, { once: true });\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Applies it (it was fetched inactive). */\n\tactivate(): void {\n\t\tthis.link.removeAttribute(\"media\");\n\t}\n\n\t/** Takes it out of the page and stops following its load (its waits end `cancelled`). */\n\tremove(): void {\n\t\tthis.#listening.abort();\n\t\tthis.#wake({ kind: \"cancelled\" });\n\t\tthis.link.remove();\n\t}\n\n\t/** Ends every wait with `outcome`. */\n\t#wake(outcome: LoadOutcome): void {\n\t\tfor (const done of [...this.#waiting]) done(outcome);\n\t}\n}\n\n/** Runs `fn` once the page has drawn a frame after the current task (the next frame's callbacks run before it paints). */\nfunction afterDrawn(fn: () => void): void {\n\tsetTimeout(() => requestAnimationFrame(() => requestAnimationFrame(fn)), 0);\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Context } from "../context/index.ts";
2
+ import type { Principal } from "../data/index.ts";
3
+ import type { Host } from "../host/index.ts";
4
+ /** Follows the themes on `host` and writes the active one on `:root` until the returned stop. */
5
+ export declare function followThemes<P extends Principal>(host: Host<P>, context: Context): Promise<() => void>;
6
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/web/themes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,iGAAiG;AACjG,wBAAsB,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAkB5G"}
@@ -0,0 +1,31 @@
1
+ /// <reference lib="dom" />
2
+ // The page's themes (slice 11 §4b, decision "Looks and themes"): the active theme written as CSS custom properties on
3
+ // `:root` (and `color-scheme`), following the registry, the user's pick and the system's colour scheme; no reload. The
4
+ // app's stylesheet and the plugins' CSS read the variables.
5
+ import { followActiveTheme, themeVariables } from "../surfaces/index.js";
6
+ /** Follows the themes on `host` and writes the active one on `:root` until the returned stop. */
7
+ export async function followThemes(host, context) {
8
+ const scheme = matchMedia("(prefers-color-scheme: dark)");
9
+ let written = [];
10
+ const follower = await followActiveTheme(host, scheme.matches ? "dark" : "light", (theme) => {
11
+ written = writeVariables(themeVariables(theme), written);
12
+ document.documentElement.style.colorScheme = theme.mode;
13
+ }, context);
14
+ const schemeChanged = () => follower.setMode(scheme.matches ? "dark" : "light");
15
+ scheme.addEventListener("change", schemeChanged);
16
+ return () => {
17
+ follower.stop();
18
+ scheme.removeEventListener("change", schemeChanged);
19
+ };
20
+ }
21
+ /** Sets `variables` on `:root`, removing those of `before` it no longer has; the names it set. */
22
+ function writeVariables(variables, before) {
23
+ const style = document.documentElement.style;
24
+ for (const name of before)
25
+ if (!Object.hasOwn(variables, name))
26
+ style.removeProperty(name);
27
+ for (const [name, value] of Object.entries(variables))
28
+ style.setProperty(name, value);
29
+ return Object.keys(variables);
30
+ }
31
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/web/themes.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,sHAAsH;AACtH,uHAAuH;AACvH,4DAA4D;AAK5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAsB,IAAa,EAAE,OAAgB;IACtF,MAAM,MAAM,GAAG,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAC1D,IAAI,OAAO,GAAsB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACvC,IAAI,EACJ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACjC,CAAC,KAAK,EAAE,EAAE;QACT,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IACzD,CAAC,EACD,OAAO,CACP,CAAC;IACF,MAAM,aAAa,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE;QACX,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC;AACH,CAAC;AAED,kGAAkG;AAClG,SAAS,cAAc,CAAC,SAA2C,EAAE,MAAyB;IAC7F,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,MAAM;QAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3F,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["/// <reference lib=\"dom\" />\n// The page's themes (slice 11 §4b, decision \"Looks and themes\"): the active theme written as CSS custom properties on\n// `:root` (and `color-scheme`), following the registry, the user's pick and the system's colour scheme; no reload. The\n// app's stylesheet and the plugins' CSS read the variables.\n\nimport type { Context } from \"../context/index.ts\";\nimport type { Principal } from \"../data/index.ts\";\nimport type { Host } from \"../host/index.ts\";\nimport { followActiveTheme, themeVariables } from \"../surfaces/index.ts\";\n\n/** Follows the themes on `host` and writes the active one on `:root` until the returned stop. */\nexport async function followThemes<P extends Principal>(host: Host<P>, context: Context): Promise<() => void> {\n\tconst scheme = matchMedia(\"(prefers-color-scheme: dark)\");\n\tlet written: readonly string[] = [];\n\tconst follower = await followActiveTheme(\n\t\thost,\n\t\tscheme.matches ? \"dark\" : \"light\",\n\t\t(theme) => {\n\t\t\twritten = writeVariables(themeVariables(theme), written);\n\t\t\tdocument.documentElement.style.colorScheme = theme.mode;\n\t\t},\n\t\tcontext,\n\t);\n\tconst schemeChanged = (): void => follower.setMode(scheme.matches ? \"dark\" : \"light\");\n\tscheme.addEventListener(\"change\", schemeChanged);\n\treturn () => {\n\t\tfollower.stop();\n\t\tscheme.removeEventListener(\"change\", schemeChanged);\n\t};\n}\n\n/** Sets `variables` on `:root`, removing those of `before` it no longer has; the names it set. */\nfunction writeVariables(variables: Readonly<Record<string, string>>, before: readonly string[]): readonly string[] {\n\tconst style = document.documentElement.style;\n\tfor (const name of before) if (!Object.hasOwn(variables, name)) style.removeProperty(name);\n\tfor (const [name, value] of Object.entries(variables)) style.setProperty(name, value);\n\treturn Object.keys(variables);\n}\n"]}