@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,244 @@
1
+ // The plugins component (slice 7c §4, §5; decision "Slice 7c's points"; slice 10 D11, D12; slice 12 §1, §5): discovery,
2
+ // builds checked against the app's API, installs and the watcher, and per kind the complete current set of scripts
3
+ // (built on first use, updated by every rollout that ships the kind), which its plugin runtime loads and reloads hosts
4
+ // with: unchanged plugins as the same facet objects, removed ones left out, a failed build or evaluation keeping the
5
+ // plugin's loaded facet. `rollout` runs the app's steps in order (one result per host) and clears the marks of plugins
6
+ // applied on every host of every step.
7
+ import { Batch } from "../../state/internal.js";
8
+ import { buildFacet } from "./build.js";
9
+ import { discoverPlugins, sameFiles } from "./discover.js";
10
+ import { installDependencies, installPlugin } from "./install.js";
11
+ import { createPluginRuntime, PluginError } from "./runtime.js";
12
+ import { PluginWatcher } from "./watcher.js";
13
+ /** Creates the plugins component (and its plugin runtime) and starts the watcher. Discovery runs at first use. */
14
+ export function createPlugins(options, _context) {
15
+ return new PluginsComponent(options);
16
+ }
17
+ class PluginsComponent {
18
+ #options;
19
+ #watcher;
20
+ #runtime;
21
+ #discovery = { plugins: [], problems: [] };
22
+ #discovered = false;
23
+ /** The latest build of every (plugin, kind) built so far, by `plugin\u0000kind`. */
24
+ #built = new Map();
25
+ /** The current set of each kind used so far, by plugin name. */
26
+ #current = new Map();
27
+ /** The kind each loaded host was loaded with, held as long as the host is. */
28
+ #kinds = new WeakMap();
29
+ /** The marks each build started from, held as long as its result is (a rollout given a copy clears none). */
30
+ #snapshots = new WeakMap();
31
+ constructor(options) {
32
+ this.#options = options;
33
+ this.#runtime = createPluginRuntime();
34
+ const batch = new Batch((error) => options.onError(error), undefined);
35
+ this.#watcher = new PluginWatcher({
36
+ roots: options.roots.map((root) => (typeof root === "string" ? root : root.path)),
37
+ base: options.base ?? [],
38
+ kinds: Object.keys(options.kinds),
39
+ failed: (error) => options.onError({ kind: "watch_failed", error }),
40
+ }, batch);
41
+ }
42
+ get state() {
43
+ // Its value is a `PluginsState`.
44
+ return this.#watcher;
45
+ }
46
+ get discovery() {
47
+ return this.#discovery;
48
+ }
49
+ async build(names, context) {
50
+ const before = new Map(this.#discovery.plugins.map((plugin) => [plugin.name, plugin]));
51
+ if (!this.#discovered || this.#watcher.needsDiscovery)
52
+ await this.#discover(context);
53
+ const now = this.#discovery.plugins;
54
+ const removed = [...before.keys()].filter((name) => !now.some((plugin) => plugin.name === name));
55
+ // A plugin whose files moved (a single file became a directory, a facet file came or went) is built again too.
56
+ const wanted = now.filter((plugin) => {
57
+ const previous = before.get(plugin.name);
58
+ return names.includes(plugin.name) || previous === undefined || !sameFiles(previous, plugin);
59
+ });
60
+ const snapshot = this.#watcher.snapshot([...wanted.map(({ name }) => name), ...removed]);
61
+ const facets = await Promise.all(wanted.flatMap((plugin) => Object.keys(plugin.facets).map((kind) => this.#buildOne(plugin, kind, context))));
62
+ const plugins = Object.fromEntries(wanted.map((plugin) => [plugin.name, plugin]));
63
+ const built = { facets, plugins, removed };
64
+ this.#snapshots.set(built, snapshot);
65
+ return built;
66
+ }
67
+ async scripts(kind, context) {
68
+ return [...(await this.#set(kind, context)).values()];
69
+ }
70
+ current(kind) {
71
+ const set = this.#current.get(kind);
72
+ return set === undefined ? undefined : [...set.values()];
73
+ }
74
+ async load(host, options, context) {
75
+ const { kind, core, modules } = options;
76
+ const scripts = await this.scripts(kind, context);
77
+ this.#kinds.set(host, kind);
78
+ // A required root guarantees its plugins: what discovery reported in one is as fatal as a plugin that failed.
79
+ const problems = this.#discovery.problems.filter(({ required }) => required);
80
+ let report;
81
+ try {
82
+ report = await this.#runtime.load(host, { kind, core, scripts, modules }, context);
83
+ }
84
+ catch (error) {
85
+ if (!(error instanceof PluginError) || problems.length === 0)
86
+ throw error;
87
+ throw new PluginError(error.required, error.failed, problems);
88
+ }
89
+ if (problems.length > 0)
90
+ throw new PluginError([], report.failed, problems);
91
+ return report;
92
+ }
93
+ async reload(host, built, context) {
94
+ const kind = this.#kinds.get(host);
95
+ if (kind === undefined)
96
+ throw new Error("plugins.reload: the host was not loaded by this component");
97
+ const set = await this.#set(kind, context);
98
+ // Applied and read in one step: two reloads started together each pass the set their own build made.
99
+ ship(set, kind, built);
100
+ return this.#runtime.reload(host, [...set.values()], context);
101
+ }
102
+ step(name, host) {
103
+ const kind = this.#kinds.get(host);
104
+ if (kind === undefined)
105
+ throw new Error("plugins.step: the host was not loaded by this component");
106
+ return {
107
+ name,
108
+ kinds: [kind],
109
+ reload: async (built, context) => ({
110
+ hosts: [{ host: name, report: await this.reload(host, built, context) }],
111
+ }),
112
+ };
113
+ }
114
+ async rollout(steps, built, context) {
115
+ const done = [];
116
+ const failed = new Set();
117
+ const shipped = new Set();
118
+ for (const step of steps) {
119
+ let hosts;
120
+ try {
121
+ for (const kind of step.kinds)
122
+ ship(await this.#set(kind, context), kind, built);
123
+ hosts = (await step.reload(built, context)).hosts;
124
+ }
125
+ catch (error) {
126
+ return { steps: done, stopped: { step: step.name, error } };
127
+ }
128
+ for (const kind of step.kinds)
129
+ shipped.add(kind);
130
+ for (const entry of hosts) {
131
+ if ("report" in entry)
132
+ for (const { plugin } of entry.report.failed)
133
+ failed.add(plugin);
134
+ else if ("error" in entry)
135
+ for (const plugin of builtOf(built, step.kinds))
136
+ failed.add(plugin);
137
+ }
138
+ done.push({ name: step.name, hosts });
139
+ }
140
+ // A plugin with a built kind no step shipped is not applied everywhere it runs: it stays dirty.
141
+ for (const { plugin, facet } of built.facets)
142
+ if (!shipped.has(facet))
143
+ failed.add(plugin);
144
+ const snapshot = this.#snapshots.get(built);
145
+ if (snapshot !== undefined) {
146
+ this.#watcher.applied([...snapshot.plugins.keys()].filter((name) => !failed.has(name)), snapshot);
147
+ }
148
+ return { steps: done, stopped: undefined };
149
+ }
150
+ watchBase(inputs) {
151
+ return this.#watcher.recordBase(inputs);
152
+ }
153
+ async installDependencies(name, context) {
154
+ if (!this.#discovered)
155
+ await this.#discover(context);
156
+ const plugin = this.#discovery.plugins.find((each) => each.name === name);
157
+ if (plugin === undefined)
158
+ throw new Error(`plugins.installDependencies: no plugin "${name}"`);
159
+ await installDependencies(plugin, context, this.#options.install);
160
+ this.#watcher.installed(name);
161
+ }
162
+ async installPlugin(source, root, context) {
163
+ const roots = this.#options.roots.map((each) => (typeof each === "string" ? each : each.path));
164
+ if (!roots.includes(root))
165
+ throw new Error(`plugins.installPlugin: ${root} is not one of the roots`);
166
+ const options = { ...this.#options.install, kinds: Object.keys(this.#options.kinds), roots: this.#options.roots };
167
+ const names = await installPlugin(source, root, context, options);
168
+ this.#watcher.added();
169
+ return names;
170
+ }
171
+ close() {
172
+ this.#watcher.close();
173
+ }
174
+ /** Discovers the plugins again; the changes of the plugin set and of `package.json`s seen until now clear. */
175
+ async #discover(context) {
176
+ const seen = this.#watcher.discoverySnapshot();
177
+ this.#discovery = await discoverPlugins(this.#options.roots, { kinds: Object.keys(this.#options.kinds) }, context);
178
+ this.#discovered = true;
179
+ // A plugin no longer discovered loses its builds: a name added again is built anew, never served an old build.
180
+ for (const key of this.#built.keys()) {
181
+ const name = key.slice(0, key.indexOf("\u0000"));
182
+ if (!this.#discovery.plugins.some((plugin) => plugin.name === name))
183
+ this.#built.delete(key);
184
+ }
185
+ this.#watcher.know(this.#discovery, seen);
186
+ }
187
+ /** `kind`'s current set, made at its first use from every discovered plugin's facet of it (built if needed). */
188
+ async #set(kind, context) {
189
+ let set = this.#current.get(kind);
190
+ if (set !== undefined)
191
+ return set;
192
+ if (!this.#discovered)
193
+ await this.#discover(context);
194
+ const plugins = this.#discovery.plugins.filter((plugin) => plugin.facets[kind] !== undefined);
195
+ const scripts = await Promise.all(plugins.map(async (plugin) => {
196
+ const built = this.#built.get(`${plugin.name}\u0000${kind}`) ?? (await this.#buildOne(plugin, kind, context));
197
+ return { plugin, built };
198
+ }));
199
+ // Built concurrently: a set made meanwhile (by a concurrent first use) wins.
200
+ set = this.#current.get(kind) ?? new Map(scripts.map((script) => [script.plugin.name, script]));
201
+ this.#current.set(kind, set);
202
+ return set;
203
+ }
204
+ /** Builds `plugin`'s facet of `kind` and keeps it as the latest; the watcher learns what it read. */
205
+ async #buildOne(plugin, kind, context) {
206
+ const { kinds, publicPath, api } = this.#options;
207
+ // Discovery finds facet files of the app's kinds only.
208
+ const { platform, hostPackages } = kinds[kind];
209
+ const options = {
210
+ hostPackages,
211
+ platform,
212
+ kinds: Object.keys(kinds),
213
+ plugins: this.#discovery.plugins,
214
+ ...(api === undefined ? {} : { api }),
215
+ ...(publicPath === undefined ? {} : { publicPath }),
216
+ };
217
+ const built = await buildFacet(plugin, kind, options, context);
218
+ this.#built.set(`${plugin.name}\u0000${kind}`, built);
219
+ this.#watcher.used([built]);
220
+ return built;
221
+ }
222
+ }
223
+ /**
224
+ * Applies `built` to `set`, `kind`'s current set: its removed plugins and those rebuilt without a facet of `kind` leave
225
+ * it, its facets of `kind` replace theirs.
226
+ */
227
+ function ship(set, kind, built) {
228
+ for (const name of built.removed)
229
+ set.delete(name);
230
+ for (const [name, plugin] of Object.entries(built.plugins))
231
+ if (plugin.facets[kind] === undefined)
232
+ set.delete(name);
233
+ for (const facet of built.facets) {
234
+ // Own properties only: a plugin may be named like one of `Object.prototype`'s (`constructor`).
235
+ if (facet.facet === kind && Object.hasOwn(built.plugins, facet.plugin)) {
236
+ set.set(facet.plugin, { plugin: built.plugins[facet.plugin], built: facet });
237
+ }
238
+ }
239
+ }
240
+ /** The plugins of `built` with a facet of one of `kinds`. */
241
+ function builtOf(built, kinds) {
242
+ return built.facets.filter(({ facet }) => kinds.includes(facet)).map(({ plugin }) => plugin);
243
+ }
244
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/node/plugins/plugins.ts"],"names":[],"mappings":"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","sourcesContent":["// The plugins component (slice 7c §4, §5; decision \"Slice 7c's points\"; slice 10 D11, D12; slice 12 §1, §5): discovery,\n// builds checked against the app's API, installs and the watcher, and per kind the complete current set of scripts\n// (built on first use, updated by every rollout that ships the kind), which its plugin runtime loads and reloads hosts\n// with: unchanged plugins as the same facet objects, removed ones left out, a failed build or evaluation keeping the\n// plugin's loaded facet. `rollout` runs the app's steps in order (one result per host) and clears the marks of plugins\n// applied on every host of every step.\n\nimport type { Context } from \"../../context/index.ts\";\nimport type { Principal } from \"../../data/index.ts\";\nimport type { Host, LoadReport, PluginFacet, ReloadReport } from \"../../host/index.ts\";\nimport { Batch, type BatchError } from \"../../state/internal.ts\";\nimport type { Watchable } from \"../../watch.ts\";\nimport type { BaseInputs } from \"./base-inputs.ts\";\nimport { type AppApi, type BuiltFacet, buildFacet } from \"./build.ts\";\nimport { type Discovery, discoverPlugins, type Plugin, type PluginRoot, sameFiles } from \"./discover.ts\";\nimport type { HostPackages } from \"./evaluate.ts\";\nimport { type InstallOptions, installDependencies, installPlugin, type PluginSource } from \"./install.ts\";\nimport { createPluginRuntime, PluginError, type PluginRuntime, type PluginScript } from \"./runtime.ts\";\nimport { type MarkSnapshot, type PluginsState, PluginWatcher } from \"./watcher.ts\";\n\n/** What `createPlugins` takes. */\nexport type PluginsOptions = {\n\t/**\n\t * The directories plugins are listed in, in order: the first root's plugin wins a duplicate name. A root marked\n\t * `required` (`{ path, required: true }`, the app's own) makes `load` reject when one of its plugins fails.\n\t */\n\treadonly roots: readonly PluginRoot[];\n\t/**\n\t * The app's API (`{ name: \"@acme/app\", versions: [\"v3\", \"v2\"] }`, newest first): plugins import it at a listed\n\t * version, its per-kind modules from their kind only, one version per facet, and never Chord directly. Without one,\n\t * plugins import the host packages as listed.\n\t */\n\treadonly api?: AppApi;\n\t/**\n\t * The app's facet kinds (one file per kind in a plugin), each with where its builds run and the host packages they\n\t * keep external: `{ server: { platform: \"node\", hostPackages: [\"@earendil-works/chord\", \"@app/core\"] }, … }`.\n\t */\n\treadonly kinds: Readonly<Record<string, KindDefinition>>;\n\t/**\n\t * The server's own base code, files and directories, hashed when the component is created: `base` is set while one\n\t * differs from it or a source file is new in one of the directories (the app restarts its hosts; Chord restarts\n\t * nothing).\n\t */\n\treadonly base?: readonly string[];\n\t/** Where the app serves browser builds' assets: the URL prefix their imports evaluate to. */\n\treadonly publicPath?: string;\n\t/** How `installDependencies` runs npm. */\n\treadonly install?: InstallOptions;\n\t/** The watcher cannot watch (reported once), and the marks' watch listeners that threw. */\n\treadonly onError: (error: PluginsError) => void;\n};\n\n/** One facet kind: Node or browser builds, and the host packages (by specifier) its builds keep external. */\nexport type KindDefinition = { readonly platform: \"node\" | \"browser\"; readonly hostPackages: readonly string[] };\n\n/** What the component reports. */\nexport type PluginsError = BatchError | { readonly kind: \"watch_failed\"; readonly error: unknown };\n\n/**\n * A build of some plugins, plain data (a clone of it reloads the same): every facet of each, the plugins as its\n * discovery saw them by name (what a reload evaluates with), and the plugins no longer discovered.\n */\nexport type Built = {\n\treadonly facets: readonly BuiltFacet[];\n\treadonly plugins: Readonly<Record<string, Plugin>>;\n\treadonly removed: readonly string[];\n};\n\n/**\n * What a rollout step did on one of its hosts (`host` named by the step): its reload's report; `stopped` when the host\n * stopped cleanly during the step (it gets the current set at its next start); `error` when it crashed or its reload\n * failed (every plugin of the step's kinds in the build counts as failed there).\n */\nexport type RolloutHost =\n\t| { readonly host: string; readonly report: ReloadReport }\n\t| { readonly host: string; readonly stopped: true }\n\t| { readonly host: string; readonly error: unknown };\n\n/** What a rollout step does: reloads its hosts with the facets of its kinds, one result per host (D12). */\nexport type RolloutStep = {\n\treadonly name: string;\n\treadonly kinds: readonly string[];\n\treload(built: Built, context: Context): Promise<{ readonly hosts: readonly RolloutHost[] }>;\n};\n\n/** What a rollout did: each step's hosts in order, and the step it stopped at (rejected), if it stopped. */\nexport type RolloutResult = {\n\treadonly steps: readonly { readonly name: string; readonly hosts: readonly RolloutHost[] }[];\n\treadonly stopped: { readonly step: string; readonly error: unknown } | undefined;\n};\n\n/** The plugins component. */\nexport interface Plugins {\n\t/** The marks: `{ dirty, install, set, base }`, a JSON watchable. */\n\treadonly state: Watchable<PluginsState>;\n\t/** The plugins of the last discovery. */\n\treadonly discovery: Discovery;\n\t/**\n\t * Builds every facet of `names` (and of plugins discovered since the last build; discovery runs again first when\n\t * the plugin set changed): plain data. It changes no current set: a rollout ships it.\n\t */\n\tbuild(names: readonly string[], context: Context): Promise<Built>;\n\t/**\n\t * The complete current set of `kind`: every discovered plugin's facet of it (built on first use), as the last\n\t * rollout or reload shipping `kind` left it; what a worker starts with.\n\t */\n\tscripts(kind: string, context: Context): Promise<readonly PluginScript[]>;\n\t/**\n\t * `kind`'s current set now, synchronously (`undefined` before its first use): a rollout step reads it as the rollout\n\t * applied its build, before another rollout can change it.\n\t */\n\tcurrent(kind: string): readonly PluginScript[] | undefined;\n\t/**\n\t * Loads `host` with `kind`'s current set, evaluated with `modules` (the host packages, this process's instances, by\n\t * specifier; kept for the host's reloads), and `core` (the app's own facets): a plugin whose build or evaluation\n\t * fails is left out and reported with the host's report. A required root's plugin failing, and a problem discovery\n\t * reported in a required root (missing, an invalid package, a name another root has), reject the load with a\n\t * `PluginError` once the host's load settled.\n\t */\n\tload<P extends Principal>(\n\t\thost: Host<P>,\n\t\toptions: { readonly kind: string; readonly core: readonly PluginFacet<P>[]; readonly modules: HostPackages },\n\t\tcontext: Context,\n\t): Promise<LoadReport>;\n\t/**\n\t * Applies `built` to the current set of `host`'s kind (loaded by `load`) and reloads `host` with that complete set,\n\t * after its earlier reloads (`PluginRuntime.reload`). The host's report.\n\t */\n\treload<P extends Principal>(host: Host<P>, built: Built, context: Context): Promise<ReloadReport>;\n\t/** An in-process rollout step named `name`: `reload(host, built)`, one host named `name`. */\n\tstep<P extends Principal>(name: string, host: Host<P>): RolloutStep;\n\t/**\n\t * Runs `steps` in order with `built`, applying it to the current set of each step's kinds right before that step,\n\t * and stops at one that rejects; failed plugins and hosts do not stop it. Clears the dirty marks of the built\n\t * plugins applied on every host of every step (not failed on any, every built kind of theirs shipped by a step)\n\t * that did not change since the build.\n\t */\n\trollout(steps: readonly RolloutStep[], built: Built, context: Context): Promise<RolloutResult>;\n\t/** Installs plugin `name`'s dependencies (`installDependencies`): its install mark clears, and it is dirty. */\n\tinstallDependencies(name: string, context: Context): Promise<void>;\n\t/**\n\t * Adds a running base artifact's record (a base bundle's `inputs`, beside `base`): `base` is set while one of its\n\t * files differs from the bytes it read or is gone; each is compared once now (settles once those comparisons did).\n\t * Files under `node_modules` are never watched.\n\t */\n\twatchBase(inputs: BaseInputs): Promise<void>;\n\t/**\n\t * Installs new plugins from git or npm into `root`, one of the roots (`installPlugin`), and marks `set`: the next\n\t * build discovers and builds them. Returns their names.\n\t */\n\tinstallPlugin(source: PluginSource, root: string, context: Context): Promise<readonly string[]>;\n\t/** Stops the watcher. */\n\tclose(): void;\n}\n\n/** Creates the plugins component (and its plugin runtime) and starts the watcher. Discovery runs at first use. */\nexport function createPlugins(options: PluginsOptions, _context: Context): Plugins {\n\treturn new PluginsComponent(options);\n}\n\nclass PluginsComponent implements Plugins {\n\treadonly #options: PluginsOptions;\n\treadonly #watcher: PluginWatcher;\n\treadonly #runtime: PluginRuntime;\n\t#discovery: Discovery = { plugins: [], problems: [] };\n\t#discovered = false;\n\t/** The latest build of every (plugin, kind) built so far, by `plugin\\u0000kind`. */\n\treadonly #built = new Map<string, BuiltFacet>();\n\t/** The current set of each kind used so far, by plugin name. */\n\treadonly #current = new Map<string, Map<string, PluginScript>>();\n\t/** The kind each loaded host was loaded with, held as long as the host is. */\n\treadonly #kinds = new WeakMap<object, string>();\n\t/** The marks each build started from, held as long as its result is (a rollout given a copy clears none). */\n\treadonly #snapshots = new WeakMap<Built, MarkSnapshot>();\n\n\tconstructor(options: PluginsOptions) {\n\t\tthis.#options = options;\n\t\tthis.#runtime = createPluginRuntime();\n\t\tconst batch = new Batch((error) => options.onError(error), undefined);\n\t\tthis.#watcher = new PluginWatcher(\n\t\t\t{\n\t\t\t\troots: options.roots.map((root) => (typeof root === \"string\" ? root : root.path)),\n\t\t\t\tbase: options.base ?? [],\n\t\t\t\tkinds: Object.keys(options.kinds),\n\t\t\t\tfailed: (error) => options.onError({ kind: \"watch_failed\", error }),\n\t\t\t},\n\t\t\tbatch,\n\t\t);\n\t}\n\n\tget state(): Watchable<PluginsState> {\n\t\t// Its value is a `PluginsState`.\n\t\treturn this.#watcher as unknown as Watchable<PluginsState>;\n\t}\n\n\tget discovery(): Discovery {\n\t\treturn this.#discovery;\n\t}\n\n\tasync build(names: readonly string[], context: Context): Promise<Built> {\n\t\tconst before = new Map(this.#discovery.plugins.map((plugin) => [plugin.name, plugin]));\n\t\tif (!this.#discovered || this.#watcher.needsDiscovery) await this.#discover(context);\n\t\tconst now = this.#discovery.plugins;\n\t\tconst removed = [...before.keys()].filter((name) => !now.some((plugin) => plugin.name === name));\n\t\t// A plugin whose files moved (a single file became a directory, a facet file came or went) is built again too.\n\t\tconst wanted = now.filter((plugin) => {\n\t\t\tconst previous = before.get(plugin.name);\n\t\t\treturn names.includes(plugin.name) || previous === undefined || !sameFiles(previous, plugin);\n\t\t});\n\t\tconst snapshot = this.#watcher.snapshot([...wanted.map(({ name }) => name), ...removed]);\n\t\tconst facets = await Promise.all(\n\t\t\twanted.flatMap((plugin) => Object.keys(plugin.facets).map((kind) => this.#buildOne(plugin, kind, context))),\n\t\t);\n\t\tconst plugins = Object.fromEntries(wanted.map((plugin) => [plugin.name, plugin]));\n\t\tconst built: Built = { facets, plugins, removed };\n\t\tthis.#snapshots.set(built, snapshot);\n\t\treturn built;\n\t}\n\n\tasync scripts(kind: string, context: Context): Promise<readonly PluginScript[]> {\n\t\treturn [...(await this.#set(kind, context)).values()];\n\t}\n\n\tcurrent(kind: string): readonly PluginScript[] | undefined {\n\t\tconst set = this.#current.get(kind);\n\t\treturn set === undefined ? undefined : [...set.values()];\n\t}\n\n\tasync load<P extends Principal>(\n\t\thost: Host<P>,\n\t\toptions: { readonly kind: string; readonly core: readonly PluginFacet<P>[]; readonly modules: HostPackages },\n\t\tcontext: Context,\n\t): Promise<LoadReport> {\n\t\tconst { kind, core, modules } = options;\n\t\tconst scripts = await this.scripts(kind, context);\n\t\tthis.#kinds.set(host, kind);\n\t\t// A required root guarantees its plugins: what discovery reported in one is as fatal as a plugin that failed.\n\t\tconst problems = this.#discovery.problems.filter(({ required }) => required);\n\t\tlet report: LoadReport;\n\t\ttry {\n\t\t\treport = await this.#runtime.load(host, { kind, core, scripts, modules }, context);\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof PluginError) || problems.length === 0) throw error;\n\t\t\tthrow new PluginError(error.required, error.failed, problems);\n\t\t}\n\t\tif (problems.length > 0) throw new PluginError([], report.failed, problems);\n\t\treturn report;\n\t}\n\n\tasync reload<P extends Principal>(host: Host<P>, built: Built, context: Context): Promise<ReloadReport> {\n\t\tconst kind = this.#kinds.get(host);\n\t\tif (kind === undefined) throw new Error(\"plugins.reload: the host was not loaded by this component\");\n\t\tconst set = await this.#set(kind, context);\n\t\t// Applied and read in one step: two reloads started together each pass the set their own build made.\n\t\tship(set, kind, built);\n\t\treturn this.#runtime.reload(host, [...set.values()], context);\n\t}\n\n\tstep<P extends Principal>(name: string, host: Host<P>): RolloutStep {\n\t\tconst kind = this.#kinds.get(host);\n\t\tif (kind === undefined) throw new Error(\"plugins.step: the host was not loaded by this component\");\n\t\treturn {\n\t\t\tname,\n\t\t\tkinds: [kind],\n\t\t\treload: async (built, context) => ({\n\t\t\t\thosts: [{ host: name, report: await this.reload(host, built, context) }],\n\t\t\t}),\n\t\t};\n\t}\n\n\tasync rollout(steps: readonly RolloutStep[], built: Built, context: Context): Promise<RolloutResult> {\n\t\tconst done: { readonly name: string; readonly hosts: readonly RolloutHost[] }[] = [];\n\t\tconst failed = new Set<string>();\n\t\tconst shipped = new Set<string>();\n\t\tfor (const step of steps) {\n\t\t\tlet hosts: readonly RolloutHost[];\n\t\t\ttry {\n\t\t\t\tfor (const kind of step.kinds) ship(await this.#set(kind, context), kind, built);\n\t\t\t\thosts = (await step.reload(built, context)).hosts;\n\t\t\t} catch (error) {\n\t\t\t\treturn { steps: done, stopped: { step: step.name, error } };\n\t\t\t}\n\t\t\tfor (const kind of step.kinds) shipped.add(kind);\n\t\t\tfor (const entry of hosts) {\n\t\t\t\tif (\"report\" in entry) for (const { plugin } of entry.report.failed) failed.add(plugin);\n\t\t\t\telse if (\"error\" in entry) for (const plugin of builtOf(built, step.kinds)) failed.add(plugin);\n\t\t\t}\n\t\t\tdone.push({ name: step.name, hosts });\n\t\t}\n\t\t// A plugin with a built kind no step shipped is not applied everywhere it runs: it stays dirty.\n\t\tfor (const { plugin, facet } of built.facets) if (!shipped.has(facet)) failed.add(plugin);\n\t\tconst snapshot = this.#snapshots.get(built);\n\t\tif (snapshot !== undefined) {\n\t\t\tthis.#watcher.applied(\n\t\t\t\t[...snapshot.plugins.keys()].filter((name) => !failed.has(name)),\n\t\t\t\tsnapshot,\n\t\t\t);\n\t\t}\n\t\treturn { steps: done, stopped: undefined };\n\t}\n\n\twatchBase(inputs: BaseInputs): Promise<void> {\n\t\treturn this.#watcher.recordBase(inputs);\n\t}\n\n\tasync installDependencies(name: string, context: Context): Promise<void> {\n\t\tif (!this.#discovered) await this.#discover(context);\n\t\tconst plugin = this.#discovery.plugins.find((each) => each.name === name);\n\t\tif (plugin === undefined) throw new Error(`plugins.installDependencies: no plugin \"${name}\"`);\n\t\tawait installDependencies(plugin, context, this.#options.install);\n\t\tthis.#watcher.installed(name);\n\t}\n\n\tasync installPlugin(source: PluginSource, root: string, context: Context): Promise<readonly string[]> {\n\t\tconst roots = this.#options.roots.map((each) => (typeof each === \"string\" ? each : each.path));\n\t\tif (!roots.includes(root)) throw new Error(`plugins.installPlugin: ${root} is not one of the roots`);\n\t\tconst options = { ...this.#options.install, kinds: Object.keys(this.#options.kinds), roots: this.#options.roots };\n\t\tconst names = await installPlugin(source, root, context, options);\n\t\tthis.#watcher.added();\n\t\treturn names;\n\t}\n\n\tclose(): void {\n\t\tthis.#watcher.close();\n\t}\n\n\t/** Discovers the plugins again; the changes of the plugin set and of `package.json`s seen until now clear. */\n\tasync #discover(context: Context): Promise<void> {\n\t\tconst seen = this.#watcher.discoverySnapshot();\n\t\tthis.#discovery = await discoverPlugins(\n\t\t\tthis.#options.roots,\n\t\t\t{ kinds: Object.keys(this.#options.kinds) },\n\t\t\tcontext,\n\t\t);\n\t\tthis.#discovered = true;\n\t\t// A plugin no longer discovered loses its builds: a name added again is built anew, never served an old build.\n\t\tfor (const key of this.#built.keys()) {\n\t\t\tconst name = key.slice(0, key.indexOf(\"\\u0000\"));\n\t\t\tif (!this.#discovery.plugins.some((plugin) => plugin.name === name)) this.#built.delete(key);\n\t\t}\n\t\tthis.#watcher.know(this.#discovery, seen);\n\t}\n\n\t/** `kind`'s current set, made at its first use from every discovered plugin's facet of it (built if needed). */\n\tasync #set(kind: string, context: Context): Promise<Map<string, PluginScript>> {\n\t\tlet set = this.#current.get(kind);\n\t\tif (set !== undefined) return set;\n\t\tif (!this.#discovered) await this.#discover(context);\n\t\tconst plugins = this.#discovery.plugins.filter((plugin) => plugin.facets[kind] !== undefined);\n\t\tconst scripts = await Promise.all(\n\t\t\tplugins.map(async (plugin): Promise<PluginScript> => {\n\t\t\t\tconst built =\n\t\t\t\t\tthis.#built.get(`${plugin.name}\\u0000${kind}`) ?? (await this.#buildOne(plugin, kind, context));\n\t\t\t\treturn { plugin, built };\n\t\t\t}),\n\t\t);\n\t\t// Built concurrently: a set made meanwhile (by a concurrent first use) wins.\n\t\tset = this.#current.get(kind) ?? new Map(scripts.map((script) => [script.plugin.name, script]));\n\t\tthis.#current.set(kind, set);\n\t\treturn set;\n\t}\n\n\t/** Builds `plugin`'s facet of `kind` and keeps it as the latest; the watcher learns what it read. */\n\tasync #buildOne(plugin: Plugin, kind: string, context: Context): Promise<BuiltFacet> {\n\t\tconst { kinds, publicPath, api } = this.#options;\n\t\t// Discovery finds facet files of the app's kinds only.\n\t\tconst { platform, hostPackages } = kinds[kind]!;\n\t\tconst options = {\n\t\t\thostPackages,\n\t\t\tplatform,\n\t\t\tkinds: Object.keys(kinds),\n\t\t\tplugins: this.#discovery.plugins,\n\t\t\t...(api === undefined ? {} : { api }),\n\t\t\t...(publicPath === undefined ? {} : { publicPath }),\n\t\t} as const;\n\t\tconst built = await buildFacet(plugin, kind, options, context);\n\t\tthis.#built.set(`${plugin.name}\\u0000${kind}`, built);\n\t\tthis.#watcher.used([built]);\n\t\treturn built;\n\t}\n}\n\n/**\n * Applies `built` to `set`, `kind`'s current set: its removed plugins and those rebuilt without a facet of `kind` leave\n * it, its facets of `kind` replace theirs.\n */\nfunction ship(set: Map<string, PluginScript>, kind: string, built: Built): void {\n\tfor (const name of built.removed) set.delete(name);\n\tfor (const [name, plugin] of Object.entries(built.plugins)) if (plugin.facets[kind] === undefined) set.delete(name);\n\tfor (const facet of built.facets) {\n\t\t// Own properties only: a plugin may be named like one of `Object.prototype`'s (`constructor`).\n\t\tif (facet.facet === kind && Object.hasOwn(built.plugins, facet.plugin)) {\n\t\t\tset.set(facet.plugin, { plugin: built.plugins[facet.plugin]!, built: facet });\n\t\t}\n\t}\n}\n\n/** The plugins of `built` with a facet of one of `kinds`. */\nfunction builtOf(built: Built, kinds: readonly string[]): string[] {\n\treturn built.facets.filter(({ facet }) => kinds.includes(facet)).map(({ plugin }) => plugin);\n}\n"]}
@@ -0,0 +1,57 @@
1
+ import type { Context } from "../../context/index.ts";
2
+ import type { Principal } from "../../data/index.ts";
3
+ import type { Host, LoadReport, PluginFacet, PluginFailure, ReloadReport } from "../../host/index.ts";
4
+ import type { BuiltFacet } from "./build.ts";
5
+ import type { DiscoveryProblem, Plugin } from "./discover.ts";
6
+ import { type HostPackages } from "./evaluate.ts";
7
+ /** One plugin's facet of a kind as shipped to a host (plain data): its build and its plugin record. */
8
+ export type PluginScript = {
9
+ readonly plugin: Plugin;
10
+ readonly built: BuiltFacet;
11
+ };
12
+ /**
13
+ * `load`'s rejection when a required root did not deliver its plugins: some failed (their build, evaluation or setup),
14
+ * or discovery reported problems in it (a missing root, an invalid `package.json`, a name another root has). The host's
15
+ * load settled (the others are loaded); the app decides what follows (stopping, mostly). `failed` is the whole
16
+ * report's list.
17
+ */
18
+ export declare class PluginError extends Error {
19
+ /** The required plugins that failed, and why. */
20
+ readonly required: readonly PluginFailure[];
21
+ /** Every plugin the load left out, required or not. */
22
+ readonly failed: readonly PluginFailure[];
23
+ /** What discovery reported in required roots. */
24
+ readonly problems: readonly DiscoveryProblem[];
25
+ constructor(required: readonly PluginFailure[], failed: readonly PluginFailure[], problems?: readonly DiscoveryProblem[]);
26
+ }
27
+ /** What `PluginRuntime.load` takes besides the host. */
28
+ export type RuntimeLoad<P extends Principal> = {
29
+ readonly kind: string;
30
+ readonly core: readonly PluginFacet<P>[];
31
+ readonly scripts: readonly PluginScript[];
32
+ readonly modules: HostPackages;
33
+ };
34
+ /** The plugin runtime: loads and reloads hosts with complete sets of shipped scripts. */
35
+ export interface PluginRuntime {
36
+ /**
37
+ * Evaluates `scripts` (the complete set of `kind`) with `modules` (the host packages their `require` answers: this
38
+ * process's instances, kept for the host's reloads) and loads them on `host` with `core` (the app's own facets): a
39
+ * plugin whose build or evaluation failed is left out and reported with the host's report. When plugins of a
40
+ * required root are among the failed, it rejects with a `PluginError` naming them after the host's load settled.
41
+ */
42
+ load<P extends Principal>(host: Host<P>, options: RuntimeLoad<P>, context: Context): Promise<LoadReport>;
43
+ /**
44
+ * Reloads `host` (loaded by `load`) with `scripts`, the complete set now, after its earlier reloads: its core facets
45
+ * and unchanged plugins (the same digest) as the same objects, new scripts evaluated, a plugin whose build or
46
+ * evaluation failed passed as its loaded facet (an added one left out; both given to the host's closure rule),
47
+ * loaded plugins not in `scripts` left out. What the host committed is the loaded set, also when the reload rejects
48
+ * `aborted` after its commit.
49
+ */
50
+ reload<P extends Principal>(host: Host<P>, scripts: readonly PluginScript[], context: Context): Promise<ReloadReport>;
51
+ }
52
+ /**
53
+ * Creates a plugin runtime: turns V8's compilation cache off (once per process: each distinct evaluated script would
54
+ * stay cached).
55
+ */
56
+ export declare function createPluginRuntime(): PluginRuntime;
57
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/node/plugins/runtime.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE,uGAAuG;AACvG,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEnF;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACrC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAE/C,YACC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,GAAE,SAAS,gBAAgB,EAAO,EAa1C;CACD;AAED,wDAAwD;AACxD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,IAAI;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzG;;;;;;OAMG;IACH,MAAM,CAAC,CAAC,SAAS,SAAS,EACzB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACb,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAMnD"}
@@ -0,0 +1,92 @@
1
+ // The plugin runtime (slice 10 §3, D11): loading and reloading hosts with shipped scripts, without building (no
2
+ // esbuild, no watcher), so a worker evaluates what the server built. Per host it keeps the facet loaded for every plugin
3
+ // and passes the host its complete set at each reload: unchanged plugins (the same digest) as the same facet objects,
4
+ // removed ones (loaded, not shipped) left out; a plugin whose build or evaluation failed keeps its loaded facet (left
5
+ // out at startup) and is reported with the host's report; at startup one of a required root (the app's own) rejects the
6
+ // load once the host's load settled. The plugins component (`createPlugins`) uses one.
7
+ import { setFlagsFromString } from "node:v8";
8
+ import { LoadedFacets } from "../../surfaces/loaded.js";
9
+ import { evaluateFacet } from "./evaluate.js";
10
+ /**
11
+ * `load`'s rejection when a required root did not deliver its plugins: some failed (their build, evaluation or setup),
12
+ * or discovery reported problems in it (a missing root, an invalid `package.json`, a name another root has). The host's
13
+ * load settled (the others are loaded); the app decides what follows (stopping, mostly). `failed` is the whole
14
+ * report's list.
15
+ */
16
+ export class PluginError extends Error {
17
+ /** The required plugins that failed, and why. */
18
+ required;
19
+ /** Every plugin the load left out, required or not. */
20
+ failed;
21
+ /** What discovery reported in required roots. */
22
+ problems;
23
+ constructor(required, failed, problems = []) {
24
+ const named = [
25
+ ...required.map(({ plugin, error }) => `"${plugin}": ${error instanceof Error ? error.message : String(error)}`),
26
+ ...problems.map(({ path, error }) => `${path}: ${error}`),
27
+ ];
28
+ super(`required plugin failed at load: ${named.join("; ")}`);
29
+ this.name = "PluginError";
30
+ this.required = required;
31
+ this.failed = failed;
32
+ this.problems = problems;
33
+ }
34
+ }
35
+ /**
36
+ * Creates a plugin runtime: turns V8's compilation cache off (once per process: each distinct evaluated script would
37
+ * stay cached).
38
+ */
39
+ export function createPluginRuntime() {
40
+ if (!cacheOff) {
41
+ setFlagsFromString("--no-compilation-cache");
42
+ cacheOff = true;
43
+ }
44
+ return new Runtime();
45
+ }
46
+ /** Whether this process turned V8's compilation cache off already. */
47
+ let cacheOff = false;
48
+ class Runtime {
49
+ /** Each loaded host's plugins and modules, held as long as the host is. */
50
+ #hosts = new WeakMap();
51
+ async load(host, options, context) {
52
+ const { modules, scripts } = options;
53
+ const entries = scripts.map((script) => entryOf(script, modules));
54
+ const { loaded, report } = await LoadedFacets.load(host, options.core, entries, context);
55
+ this.#hosts.set(host, { loaded, modules });
56
+ const required = new Set(scripts.filter(({ plugin }) => plugin.required).map(({ plugin }) => plugin.name));
57
+ const fatal = report.failed.filter(({ plugin }) => required.has(plugin));
58
+ if (fatal.length > 0)
59
+ throw new PluginError(fatal, report.failed);
60
+ return report;
61
+ }
62
+ reload(host, scripts, context) {
63
+ const state = this.#hosts.get(host);
64
+ if (state === undefined)
65
+ throw new Error("plugins.reload: the host was not loaded by this runtime");
66
+ const entries = scripts.map((script) => entryOf(script, state.modules));
67
+ return state.loaded.reload(host, entries, context);
68
+ }
69
+ }
70
+ /** `script` as one plugin of a complete set: its digest, and its evaluation with `modules` when it is new. */
71
+ function entryOf({ plugin, built }, modules) {
72
+ return {
73
+ name: plugin.name,
74
+ digest: built.kind === "script" ? built.digest : undefined,
75
+ prepare: () => prepare(plugin, built, modules),
76
+ };
77
+ }
78
+ /** `built` evaluated for `plugin` with `modules`, or why not: its build failed, or its evaluation threw. */
79
+ function prepare(plugin, built, modules) {
80
+ if (built.kind === "failed") {
81
+ const message = `plugin "${plugin.name}": its ${built.facet} facet failed to build:\n${built.errors.join("\n")}`;
82
+ return { kind: "failed", error: new Error(message) };
83
+ }
84
+ try {
85
+ const facet = evaluateFacet(built, { hostPackages: modules, plugin });
86
+ return { kind: "facet", facet, digest: built.digest };
87
+ }
88
+ catch (error) {
89
+ return { kind: "failed", error };
90
+ }
91
+ }
92
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/node/plugins/runtime.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,yHAAyH;AACzH,sHAAsH;AACtH,sHAAsH;AACtH,wHAAwH;AACxH,uFAAuF;AAEvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAI7C,OAAO,EAAE,YAAY,EAAgC,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAE,aAAa,EAAqB,MAAM,eAAe,CAAC;AAKjE;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACrC,iDAAiD;IACxC,QAAQ,CAA2B;IAC5C,uDAAuD;IAC9C,MAAM,CAA2B;IAC1C,iDAAiD;IACxC,QAAQ,CAA8B;IAE/C,YACC,QAAkC,EAClC,MAAgC,EAChC,QAAQ,GAAgC,EAAE;QAE1C,MAAM,KAAK,GAAG;YACb,GAAG,QAAQ,CAAC,GAAG,CACd,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/F;YACD,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC;SACzD,CAAC;QACF,KAAK,CAAC,mCAAmC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;CACD;AAiCD;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;QAC7C,QAAQ,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,OAAO,EAAE,CAAC;AACtB,CAAC;AAED,sEAAsE;AACtE,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,MAAM,OAAO;IACZ,2EAA2E;IAClE,MAAM,GAAG,IAAI,OAAO,EAA6E,CAAC;IAE3G,KAAK,CAAC,IAAI,CAAsB,IAAa,EAAE,OAAuB,EAAE,OAAgB;QACvF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,CACL,IAAa,EACb,OAAgC,EAChC,OAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACpG,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACD;AAED,8GAA8G;AAC9G,SAAS,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAgB,EAAE,OAAqB;IACtE,OAAO;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC1D,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;KAC9C,CAAC;AACH,CAAC;AAED,4GAA4G;AAC5G,SAAS,OAAO,CAAC,MAAc,EAAE,KAAiB,EAAE,OAAqB;IACxE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,WAAW,MAAM,CAAC,IAAI,UAAU,KAAK,CAAC,KAAK,4BAA4B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;AACF,CAAC","sourcesContent":["// The plugin runtime (slice 10 §3, D11): loading and reloading hosts with shipped scripts, without building (no\n// esbuild, no watcher), so a worker evaluates what the server built. Per host it keeps the facet loaded for every plugin\n// and passes the host its complete set at each reload: unchanged plugins (the same digest) as the same facet objects,\n// removed ones (loaded, not shipped) left out; a plugin whose build or evaluation failed keeps its loaded facet (left\n// out at startup) and is reported with the host's report; at startup one of a required root (the app's own) rejects the\n// load once the host's load settled. The plugins component (`createPlugins`) uses one.\n\nimport { setFlagsFromString } from \"node:v8\";\nimport type { Context } from \"../../context/index.ts\";\nimport type { Principal } from \"../../data/index.ts\";\nimport type { Host, LoadReport, PluginFacet, PluginFailure, ReloadReport } from \"../../host/index.ts\";\nimport { LoadedFacets, type Prepared, type SetEntry } from \"../../surfaces/loaded.ts\";\nimport type { BuiltFacet } from \"./build.ts\";\nimport type { DiscoveryProblem, Plugin } from \"./discover.ts\";\nimport { evaluateFacet, type HostPackages } from \"./evaluate.ts\";\n\n/** One plugin's facet of a kind as shipped to a host (plain data): its build and its plugin record. */\nexport type PluginScript = { readonly plugin: Plugin; readonly built: BuiltFacet };\n\n/**\n * `load`'s rejection when a required root did not deliver its plugins: some failed (their build, evaluation or setup),\n * or discovery reported problems in it (a missing root, an invalid `package.json`, a name another root has). The host's\n * load settled (the others are loaded); the app decides what follows (stopping, mostly). `failed` is the whole\n * report's list.\n */\nexport class PluginError extends Error {\n\t/** The required plugins that failed, and why. */\n\treadonly required: readonly PluginFailure[];\n\t/** Every plugin the load left out, required or not. */\n\treadonly failed: readonly PluginFailure[];\n\t/** What discovery reported in required roots. */\n\treadonly problems: readonly DiscoveryProblem[];\n\n\tconstructor(\n\t\trequired: readonly PluginFailure[],\n\t\tfailed: readonly PluginFailure[],\n\t\tproblems: readonly DiscoveryProblem[] = [],\n\t) {\n\t\tconst named = [\n\t\t\t...required.map(\n\t\t\t\t({ plugin, error }) => `\"${plugin}\": ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t),\n\t\t\t...problems.map(({ path, error }) => `${path}: ${error}`),\n\t\t];\n\t\tsuper(`required plugin failed at load: ${named.join(\"; \")}`);\n\t\tthis.name = \"PluginError\";\n\t\tthis.required = required;\n\t\tthis.failed = failed;\n\t\tthis.problems = problems;\n\t}\n}\n\n/** What `PluginRuntime.load` takes besides the host. */\nexport type RuntimeLoad<P extends Principal> = {\n\treadonly kind: string;\n\treadonly core: readonly PluginFacet<P>[];\n\treadonly scripts: readonly PluginScript[];\n\treadonly modules: HostPackages;\n};\n\n/** The plugin runtime: loads and reloads hosts with complete sets of shipped scripts. */\nexport interface PluginRuntime {\n\t/**\n\t * Evaluates `scripts` (the complete set of `kind`) with `modules` (the host packages their `require` answers: this\n\t * process's instances, kept for the host's reloads) and loads them on `host` with `core` (the app's own facets): a\n\t * plugin whose build or evaluation failed is left out and reported with the host's report. When plugins of a\n\t * required root are among the failed, it rejects with a `PluginError` naming them after the host's load settled.\n\t */\n\tload<P extends Principal>(host: Host<P>, options: RuntimeLoad<P>, context: Context): Promise<LoadReport>;\n\t/**\n\t * Reloads `host` (loaded by `load`) with `scripts`, the complete set now, after its earlier reloads: its core facets\n\t * and unchanged plugins (the same digest) as the same objects, new scripts evaluated, a plugin whose build or\n\t * evaluation failed passed as its loaded facet (an added one left out; both given to the host's closure rule),\n\t * loaded plugins not in `scripts` left out. What the host committed is the loaded set, also when the reload rejects\n\t * `aborted` after its commit.\n\t */\n\treload<P extends Principal>(\n\t\thost: Host<P>,\n\t\tscripts: readonly PluginScript[],\n\t\tcontext: Context,\n\t): Promise<ReloadReport>;\n}\n\n/**\n * Creates a plugin runtime: turns V8's compilation cache off (once per process: each distinct evaluated script would\n * stay cached).\n */\nexport function createPluginRuntime(): PluginRuntime {\n\tif (!cacheOff) {\n\t\tsetFlagsFromString(\"--no-compilation-cache\");\n\t\tcacheOff = true;\n\t}\n\treturn new Runtime();\n}\n\n/** Whether this process turned V8's compilation cache off already. */\nlet cacheOff = false;\n\nclass Runtime implements PluginRuntime {\n\t/** Each loaded host's plugins and modules, held as long as the host is. */\n\treadonly #hosts = new WeakMap<object, { readonly loaded: LoadedFacets; readonly modules: HostPackages }>();\n\n\tasync load<P extends Principal>(host: Host<P>, options: RuntimeLoad<P>, context: Context): Promise<LoadReport> {\n\t\tconst { modules, scripts } = options;\n\t\tconst entries = scripts.map((script) => entryOf(script, modules));\n\t\tconst { loaded, report } = await LoadedFacets.load(host, options.core, entries, context);\n\t\tthis.#hosts.set(host, { loaded, modules });\n\t\tconst required = new Set(scripts.filter(({ plugin }) => plugin.required).map(({ plugin }) => plugin.name));\n\t\tconst fatal = report.failed.filter(({ plugin }) => required.has(plugin));\n\t\tif (fatal.length > 0) throw new PluginError(fatal, report.failed);\n\t\treturn report;\n\t}\n\n\treload<P extends Principal>(\n\t\thost: Host<P>,\n\t\tscripts: readonly PluginScript[],\n\t\tcontext: Context,\n\t): Promise<ReloadReport> {\n\t\tconst state = this.#hosts.get(host);\n\t\tif (state === undefined) throw new Error(\"plugins.reload: the host was not loaded by this runtime\");\n\t\tconst entries = scripts.map((script) => entryOf(script, state.modules));\n\t\treturn state.loaded.reload(host, entries, context);\n\t}\n}\n\n/** `script` as one plugin of a complete set: its digest, and its evaluation with `modules` when it is new. */\nfunction entryOf({ plugin, built }: PluginScript, modules: HostPackages): SetEntry {\n\treturn {\n\t\tname: plugin.name,\n\t\tdigest: built.kind === \"script\" ? built.digest : undefined,\n\t\tprepare: () => prepare(plugin, built, modules),\n\t};\n}\n\n/** `built` evaluated for `plugin` with `modules`, or why not: its build failed, or its evaluation threw. */\nfunction prepare(plugin: Plugin, built: BuiltFacet, modules: HostPackages): Prepared {\n\tif (built.kind === \"failed\") {\n\t\tconst message = `plugin \"${plugin.name}\": its ${built.facet} facet failed to build:\\n${built.errors.join(\"\\n\")}`;\n\t\treturn { kind: \"failed\", error: new Error(message) };\n\t}\n\ttry {\n\t\tconst facet = evaluateFacet(built, { hostPackages: modules, plugin });\n\t\treturn { kind: \"facet\", facet, digest: built.digest };\n\t} catch (error) {\n\t\treturn { kind: \"failed\", error };\n\t}\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { SourceMap } from "node:module";
2
+ /**
3
+ * Registers the script `source` evaluated under `filename` for plugin directory `dir` while `owner` (its facet, or the
4
+ * error its evaluation threw) lives: its inline source map, whose sources are relative to the plugin's directory. Two
5
+ * evaluations of one script (two hosts) share the entry.
6
+ */
7
+ export declare function registerScript(filename: string, source: string, dir: string, owner: object): void;
8
+ /** The inline source map esbuild appended to a built script, if it has one. */
9
+ export declare function inlineSourceMap(source: string): SourceMap | undefined;
10
+ /**
11
+ * `error`'s stack with every position in a registered plugin script mapped through its source map to the plugin's file
12
+ * and line (`notes/worker.ts:12:3`: the plugin's directory name and the file's path inside it); other lines as they
13
+ * are. A value that is no error with a stack gives its string.
14
+ */
15
+ export declare function mapStack(error: unknown): string;
16
+ //# sourceMappingURL=stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/node/plugins/stack.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAexC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAUjG;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAGrE;AAKD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU/C"}
@@ -0,0 +1,61 @@
1
+ // Stack traces of plugin scripts (slice 7c §3, decision Q1 (b)): `vm.Script` maps no positions through a source map, so
2
+ // every evaluated script registers its map under its filename while something of its evaluation lives (its facet, or
3
+ // the error it threw while evaluated), and `mapStack` rewrites an error's stack through them, for the app's reporters.
4
+ // Nothing global: no `Error.prepareStackTrace`, no process-wide source-map switch. The registry is a module-level `Map`
5
+ // keyed by filename, not a `WeakMap` keyed by an owner: `mapStack` starts from a stack's text, which names only the
6
+ // filename. Its entries go with the last evaluation of their script (a `FinalizationRegistry` counts them down).
7
+ import { SourceMap } from "node:module";
8
+ import { basename, join } from "node:path";
9
+ /** The evaluated scripts by filename, while an evaluation of each lives. */
10
+ const scripts = new Map();
11
+ /** Counts down an evaluation that was collected; its script's entry goes with the last one. */
12
+ const collected = new FinalizationRegistry((filename) => {
13
+ const script = scripts.get(filename);
14
+ if (script !== undefined && --script.live === 0)
15
+ scripts.delete(filename);
16
+ });
17
+ /**
18
+ * Registers the script `source` evaluated under `filename` for plugin directory `dir` while `owner` (its facet, or the
19
+ * error its evaluation threw) lives: its inline source map, whose sources are relative to the plugin's directory. Two
20
+ * evaluations of one script (two hosts) share the entry.
21
+ */
22
+ export function registerScript(filename, source, dir, owner) {
23
+ let script = scripts.get(filename);
24
+ if (script === undefined) {
25
+ const map = inlineSourceMap(source);
26
+ if (map === undefined)
27
+ return;
28
+ script = { map, dir, live: 0 };
29
+ scripts.set(filename, script);
30
+ }
31
+ script.live++;
32
+ collected.register(owner, filename);
33
+ }
34
+ /** The inline source map esbuild appended to a built script, if it has one. */
35
+ export function inlineSourceMap(source) {
36
+ const inline = SOURCE_MAP.exec(source);
37
+ return inline === null ? undefined : new SourceMap(JSON.parse(Buffer.from(inline[1], "base64").toString("utf8")));
38
+ }
39
+ /** The inline source map esbuild appends to a script. */
40
+ const SOURCE_MAP = /\/\/# sourceMappingURL=data:application\/json;base64,([A-Za-z0-9+/=]+)\s*$/;
41
+ /**
42
+ * `error`'s stack with every position in a registered plugin script mapped through its source map to the plugin's file
43
+ * and line (`notes/worker.ts:12:3`: the plugin's directory name and the file's path inside it); other lines as they
44
+ * are. A value that is no error with a stack gives its string.
45
+ */
46
+ export function mapStack(error) {
47
+ const stack = error instanceof Error ? error.stack : undefined;
48
+ if (stack === undefined)
49
+ return String(error);
50
+ return stack.replace(POSITION, (whole, filename, line, column) => {
51
+ const script = scripts.get(filename);
52
+ const entry = script?.map.findEntry(Number(line) - 1, Number(column) - 1);
53
+ if (script === undefined || entry === undefined || !("originalSource" in entry))
54
+ return whole;
55
+ const file = join(basename(script.dir), entry.originalSource).split("\\").join("/");
56
+ return `${file}:${entry.originalLine + 1}:${entry.originalColumn + 1}`;
57
+ });
58
+ }
59
+ /** A position in a stack line: `filename:line:column`, the filename being anything up to it (spaces included). */
60
+ const POSITION = /([^\s()]+):(\d+):(\d+)/g;
61
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/node/plugins/stack.ts"],"names":[],"mappings":"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","sourcesContent":["// Stack traces of plugin scripts (slice 7c §3, decision Q1 (b)): `vm.Script` maps no positions through a source map, so\n// every evaluated script registers its map under its filename while something of its evaluation lives (its facet, or\n// the error it threw while evaluated), and `mapStack` rewrites an error's stack through them, for the app's reporters.\n// Nothing global: no `Error.prepareStackTrace`, no process-wide source-map switch. The registry is a module-level `Map`\n// keyed by filename, not a `WeakMap` keyed by an owner: `mapStack` starts from a stack's text, which names only the\n// filename. Its entries go with the last evaluation of their script (a `FinalizationRegistry` counts them down).\n\nimport { SourceMap } from \"node:module\";\nimport { basename, join } from \"node:path\";\n\n/** A registered script: how its positions map, its plugin's directory, and how many of its evaluations live. */\ntype Registered = { readonly map: SourceMap; readonly dir: string; live: number };\n\n/** The evaluated scripts by filename, while an evaluation of each lives. */\nconst scripts = new Map<string, Registered>();\n\n/** Counts down an evaluation that was collected; its script's entry goes with the last one. */\nconst collected = new FinalizationRegistry<string>((filename) => {\n\tconst script = scripts.get(filename);\n\tif (script !== undefined && --script.live === 0) scripts.delete(filename);\n});\n\n/**\n * Registers the script `source` evaluated under `filename` for plugin directory `dir` while `owner` (its facet, or the\n * error its evaluation threw) lives: its inline source map, whose sources are relative to the plugin's directory. Two\n * evaluations of one script (two hosts) share the entry.\n */\nexport function registerScript(filename: string, source: string, dir: string, owner: object): void {\n\tlet script = scripts.get(filename);\n\tif (script === undefined) {\n\t\tconst map = inlineSourceMap(source);\n\t\tif (map === undefined) return;\n\t\tscript = { map, dir, live: 0 };\n\t\tscripts.set(filename, script);\n\t}\n\tscript.live++;\n\tcollected.register(owner, filename);\n}\n\n/** The inline source map esbuild appended to a built script, if it has one. */\nexport function inlineSourceMap(source: string): SourceMap | undefined {\n\tconst inline = SOURCE_MAP.exec(source);\n\treturn inline === null ? undefined : new SourceMap(JSON.parse(Buffer.from(inline[1]!, \"base64\").toString(\"utf8\")));\n}\n\n/** The inline source map esbuild appends to a script. */\nconst SOURCE_MAP = /\\/\\/# sourceMappingURL=data:application\\/json;base64,([A-Za-z0-9+/=]+)\\s*$/;\n\n/**\n * `error`'s stack with every position in a registered plugin script mapped through its source map to the plugin's file\n * and line (`notes/worker.ts:12:3`: the plugin's directory name and the file's path inside it); other lines as they\n * are. A value that is no error with a stack gives its string.\n */\nexport function mapStack(error: unknown): string {\n\tconst stack = error instanceof Error ? error.stack : undefined;\n\tif (stack === undefined) return String(error);\n\treturn stack.replace(POSITION, (whole, filename: string, line: string, column: string) => {\n\t\tconst script = scripts.get(filename);\n\t\tconst entry = script?.map.findEntry(Number(line) - 1, Number(column) - 1);\n\t\tif (script === undefined || entry === undefined || !(\"originalSource\" in entry)) return whole;\n\t\tconst file = join(basename(script.dir), entry.originalSource).split(\"\\\\\").join(\"/\");\n\t\treturn `${file}:${entry.originalLine + 1}:${entry.originalColumn + 1}`;\n\t});\n}\n\n/** A position in a stack line: `filename:line:column`, the filename being anything up to it (spaces included). */\nconst POSITION = /([^\\s()]+):(\\d+):(\\d+)/g;\n"]}