@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,369 @@
1
+ // Discovery (slice 7c §1, slice 12 §2, §4): the plugins under the app's roots, found by listing each root and reading
2
+ // only `package.json` files. Each directory at a root's top is a package: the plugins its `chord.plugins` manifest
3
+ // lists (decision "`chord.plugins` is a package's manifest of plugins"), else by convention itself when its top has
4
+ // facet files, else its subfolders with a `package.json` (a checkout of several), else itself (contracts only). Files
5
+ // named `<name>.<kind>.<ext>` at a root's top are single-file plugins grouped by name. Facet files are the ones named
6
+ // after the app's facet kinds. Nothing parses or runs plugin code.
7
+ import { readdir, readFile, realpath, stat } from "node:fs/promises";
8
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
9
+ import { isPluginName } from "../../host/staging.js";
10
+ /**
11
+ * Lists every root: its packages' plugins (by their manifests or by convention) and its single-file plugins. Reported,
12
+ * not plugins: a directory without any `package.json`, an invalid one, name or manifest, two files of one facet kind,
13
+ * a name an earlier root (or an earlier entry of the same root) has already; a single-file plugin named like a
14
+ * directory plugin of its root loses to it; a required root that does not exist. A missing root that is not required
15
+ * is empty. Plugins sorted by name.
16
+ */
17
+ export async function discoverPlugins(roots, options, context) {
18
+ const plugins = new Map();
19
+ const problems = [];
20
+ for (const each of roots) {
21
+ const { path, required } = typeof each === "string" ? { path: each, required: false } : each;
22
+ const listed = await listRoot(path, required === true, options.kinds, context);
23
+ problems.push(...listed.problems);
24
+ for (const plugin of listed.plugins) {
25
+ const other = plugins.get(plugin.name);
26
+ if (other !== undefined) {
27
+ const error = `plugin "${plugin.name}" is in ${other.dir} already`;
28
+ problems.push({ path: pathOf(plugin), error, root: plugin.root, required: plugin.required });
29
+ continue;
30
+ }
31
+ plugins.set(plugin.name, plugin);
32
+ }
33
+ }
34
+ const sorted = [...plugins.values()].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
35
+ return { plugins: sorted, problems };
36
+ }
37
+ /**
38
+ * The plugins of the package in `dir` (its manifest's folders, or by convention) and its problems, recorded as of
39
+ * `at.root`: what `installPlugin` checks a package with before it moves it into a root.
40
+ */
41
+ export async function discoverPackage(dir, at, context) {
42
+ context.abortSignal?.throwIfAborted();
43
+ const plugins = [];
44
+ const problems = [];
45
+ for (const each of await packageAt(await realpath(dir), at)) {
46
+ if (each.kind === "plugin")
47
+ plugins.push(each.plugin);
48
+ else
49
+ problems.push({ path: each.path, error: each.error, root: at.root, required: at.required });
50
+ }
51
+ return { plugins, problems };
52
+ }
53
+ /** Whether two records of one plugin name the same directory, layout and facet files (else its code moved). */
54
+ export function sameFiles(before, after) {
55
+ const files = (plugin) => JSON.stringify(Object.entries(plugin.facets).sort());
56
+ return before.dir === after.dir && before.layout === after.layout && files(before) === files(after);
57
+ }
58
+ /** The facet files' extensions, in no order of preference: two files of one kind are reported. */
59
+ export const FACET_EXTENSIONS = [".ts", ".tsx", ".js", ".mjs"];
60
+ /** The plugins of one root, directory plugins first, and its problems. */
61
+ async function listRoot(path, required, kinds, context) {
62
+ const entries = await entriesOf(path);
63
+ if (entries === undefined) {
64
+ if (!required)
65
+ return { plugins: [], problems: [] };
66
+ return { plugins: [], problems: [{ path, error: "the required root does not exist", root: path, required }] };
67
+ }
68
+ const root = await realpath(path);
69
+ const at = { root, required, kinds };
70
+ const plugins = [];
71
+ const problems = [];
72
+ for (const dir of entries.dirs) {
73
+ const found = await discoverPackage(dir, at, context);
74
+ plugins.push(...found.plugins);
75
+ problems.push(...found.problems);
76
+ }
77
+ const files = singleFilePlugins(entries.files, at);
78
+ problems.push(...files.problems);
79
+ for (const plugin of files.plugins) {
80
+ const directory = plugins.find((each) => each.name === plugin.name);
81
+ if (directory === undefined)
82
+ plugins.push(plugin);
83
+ else {
84
+ const error = `plugin "${plugin.name}" is in ${directory.dir} already`;
85
+ problems.push({ path: pathOf(plugin), error, root, required });
86
+ }
87
+ }
88
+ return { plugins, problems };
89
+ }
90
+ /** The plugin's path to report: its directory, or a single-file plugin's first facet file. */
91
+ function pathOf(plugin) {
92
+ return plugin.layout === "directory" ? plugin.dir : Object.values(plugin.facets)[0];
93
+ }
94
+ /**
95
+ * The directories (by real path) and plain files directly under `path`, in name order; `undefined` when it does not
96
+ * exist. Hidden entries and `node_modules` are not plugins.
97
+ */
98
+ async function entriesOf(path) {
99
+ let names;
100
+ try {
101
+ names = (await readdir(path)).sort();
102
+ }
103
+ catch (error) {
104
+ if (error.code === "ENOENT")
105
+ return undefined;
106
+ throw error;
107
+ }
108
+ const dirs = [];
109
+ const files = [];
110
+ for (const name of names) {
111
+ if (name.startsWith(".") || name === "node_modules")
112
+ continue;
113
+ const entry = join(path, name);
114
+ // `stat` follows a symlink: a linked plugin directory is listed by its real path.
115
+ const info = await stat(entry).catch(() => undefined);
116
+ if (info?.isDirectory() === true)
117
+ dirs.push(await realpath(entry));
118
+ else if (info?.isFile() === true)
119
+ files.push(name);
120
+ }
121
+ return { dirs, files };
122
+ }
123
+ /** The `package.json` of `dir`. */
124
+ async function manifestOf(dir) {
125
+ try {
126
+ return { kind: "read", value: JSON.parse(await readFile(join(dir, "package.json"), "utf8")) };
127
+ }
128
+ catch (error) {
129
+ if (error.code === "ENOENT")
130
+ return { kind: "missing" };
131
+ return { kind: "invalid", error: `package.json: ${error.message}` };
132
+ }
133
+ }
134
+ /**
135
+ * The plugins of the package in `dir` (a real path): its manifest's folders; without a manifest itself when its top
136
+ * has facet files, else its subfolders with a `package.json`, else itself; without a `package.json` its subfolders
137
+ * with one (a checkout of several), else a problem.
138
+ */
139
+ async function packageAt(dir, at) {
140
+ const manifest = await manifestOf(dir);
141
+ if (manifest.kind === "invalid")
142
+ return [{ kind: "problem", path: dir, error: manifest.error }];
143
+ const value = manifest.kind === "read" ? manifest.value : null;
144
+ const listed = value?.chord?.plugins;
145
+ if (listed !== undefined)
146
+ return manifestPlugins(dir, listed, at);
147
+ if (manifest.kind === "read" && (await hasFacetFile(dir, at.kinds)))
148
+ return [await pluginAt(dir, manifest, at)];
149
+ const inner = [];
150
+ for (const sub of (await entriesOf(dir))?.dirs ?? []) {
151
+ const found = await manifestOf(sub);
152
+ if (found.kind !== "missing")
153
+ inner.push(await pluginAt(sub, found, at));
154
+ }
155
+ if (inner.length > 0)
156
+ return inner;
157
+ if (manifest.kind === "read")
158
+ return [await pluginAt(dir, manifest, at)];
159
+ return [{ kind: "problem", path: dir, error: "no package.json" }];
160
+ }
161
+ /** Whether `dir`'s top has a facet file of one of `kinds`. */
162
+ async function hasFacetFile(dir, kinds) {
163
+ const files = new Set(await readdir(dir));
164
+ return kinds.some((kind) => FACET_EXTENSIONS.some((extension) => files.has(`${kind}${extension}`)));
165
+ }
166
+ /**
167
+ * The plugins `chord.plugins` (`listed`: folders of the package, as paths, globs and `!` exclusions, as pi's
168
+ * `pi.extensions`) of the package in `dir` names: each a folder with a `package.json` (the package itself when listed
169
+ * as `.`). A manifest that is no list of strings, an entry or a link leaving the package, a listed path that is no
170
+ * directory, and a listing of nothing are problems.
171
+ */
172
+ async function manifestPlugins(dir, listed, at) {
173
+ const problem = (error) => [
174
+ { kind: "problem", path: dir, error: `package.json: chord.plugins ${error}` },
175
+ ];
176
+ if (!Array.isArray(listed) || !listed.every((each) => typeof each === "string")) {
177
+ return problem("is not a list of plugin folders");
178
+ }
179
+ const entries = listed;
180
+ const excludes = entries.filter((each) => each.startsWith("!")).map((each) => posix(each.slice(1)));
181
+ const folders = new Set();
182
+ for (const entry of entries.filter((each) => !each.startsWith("!"))) {
183
+ const matched = /[*?]/.test(entry) ? await globFolders(dir, posix(entry)) : [resolve(dir, entry)];
184
+ for (const folder of matched) {
185
+ const rest = relative(dir, folder);
186
+ if (rest.startsWith("..") || isAbsolute(rest))
187
+ return problem(`"${entry}" leaves the package`);
188
+ if (!excludes.some((exclude) => matchesGlob(posix(rest) || ".", exclude)))
189
+ folders.add(folder);
190
+ }
191
+ }
192
+ // One plugin inside another's directory would make the outer one's imports of it its own files, not copies.
193
+ const sorted = [...folders].sort();
194
+ for (const inner of sorted) {
195
+ const outer = sorted.find((folder) => insideDir(folder, inner));
196
+ if (outer !== undefined) {
197
+ const listed = (folder) => posix(relative(dir, folder)) || ".";
198
+ return problem(`lists "${listed(inner)}" inside the listed "${listed(outer)}"`);
199
+ }
200
+ }
201
+ if (folders.size === 0)
202
+ return problem("lists no plugin folder");
203
+ const found = [];
204
+ for (const folder of sorted) {
205
+ const info = await stat(folder).catch(() => undefined);
206
+ if (info?.isDirectory() !== true) {
207
+ found.push({ kind: "problem", path: folder, error: "listed in chord.plugins, not a directory" });
208
+ continue;
209
+ }
210
+ const real = await realpath(folder);
211
+ const rest = relative(dir, real);
212
+ if (rest.startsWith("..") || isAbsolute(rest)) {
213
+ found.push({ kind: "problem", path: folder, error: "listed in chord.plugins, links out of the package" });
214
+ continue;
215
+ }
216
+ found.push(await pluginAt(real, await manifestOf(real), at));
217
+ }
218
+ return found;
219
+ }
220
+ /** `path` with `/` separators and no leading `./` (as manifests and globs write paths). */
221
+ function posix(path) {
222
+ return path.split(sep).join("/").replace(/^\.\//, "");
223
+ }
224
+ /** Whether `path` lies inside directory `dir` (both absolute). */
225
+ function insideDir(dir, path) {
226
+ const rest = relative(dir, path);
227
+ return rest !== "" && !rest.startsWith("..") && !isAbsolute(rest);
228
+ }
229
+ /**
230
+ * Whether the `/`-separated `path` matches the glob `pattern`: `*` and `?` within one segment, `**` across segments
231
+ * (`node:path`'s `matchesGlob` is experimental in Node 22, Chord's floor); anything else literal.
232
+ */
233
+ function matchesGlob(path, pattern) {
234
+ let source = "";
235
+ for (let at = 0; at < pattern.length; at++) {
236
+ const char = pattern[at];
237
+ if (pattern.startsWith("**/", at)) {
238
+ source += "(?:.*/)?";
239
+ at += 2;
240
+ }
241
+ else if (pattern.startsWith("**", at)) {
242
+ source += ".*";
243
+ at += 1;
244
+ }
245
+ else if (char === "*")
246
+ source += "[^/]*";
247
+ else if (char === "?")
248
+ source += "[^/]";
249
+ else
250
+ source += char.replace(/[.+^${}()|[\]\\]/g, "\\$&");
251
+ }
252
+ return new RegExp(`^${source}$`).test(path);
253
+ }
254
+ /** How deep a glob of `chord.plugins` looks for folders. */
255
+ const GLOB_DEPTH = 6;
256
+ /** The folders under `dir` (hidden ones and `node_modules` skipped, `GLOB_DEPTH` deep) whose path matches `pattern`. */
257
+ async function globFolders(dir, pattern) {
258
+ const found = [];
259
+ const walk = async (at, depth) => {
260
+ if (depth > GLOB_DEPTH)
261
+ return;
262
+ let entries;
263
+ try {
264
+ entries = await readdir(at, { withFileTypes: true });
265
+ }
266
+ catch {
267
+ return;
268
+ }
269
+ for (const entry of entries) {
270
+ if (!entry.isDirectory() || entry.name.startsWith(".") || entry.name === "node_modules")
271
+ continue;
272
+ const path = join(at, entry.name);
273
+ if (matchesGlob(posix(relative(dir, path)), pattern))
274
+ found.push(path);
275
+ await walk(path, depth + 1);
276
+ }
277
+ };
278
+ await walk(dir, 1);
279
+ return found;
280
+ }
281
+ /** The plugin in `dir` (its real path) with its `package.json` read as `manifest`, or why it is none. */
282
+ async function pluginAt(dir, manifest, at) {
283
+ const problem = (error) => ({ kind: "problem", path: dir, error });
284
+ if (manifest.kind === "missing")
285
+ return problem("no package.json");
286
+ if (manifest.kind === "invalid")
287
+ return problem(manifest.error);
288
+ // A trust boundary: a plugin's own `package.json`.
289
+ const { name, dependencies, chord } = (manifest.value ?? {});
290
+ if (typeof name !== "string" || !isPluginName(name)) {
291
+ return problem(`package.json: ${JSON.stringify(name)} is not a valid plugin name`);
292
+ }
293
+ const external = chord?.external ?? [];
294
+ if (!Array.isArray(external) || !external.every((each) => typeof each === "string")) {
295
+ return problem("package.json: chord.external is not a list of package names");
296
+ }
297
+ const files = new Set(await readdir(dir));
298
+ const facets = {};
299
+ for (const kind of at.kinds) {
300
+ const named = FACET_EXTENSIONS.map((extension) => `${kind}${extension}`).filter((file) => files.has(file));
301
+ if (named.length > 1)
302
+ return problem(`two ${kind} facets: ${named.join(", ")}`);
303
+ if (named.length === 1)
304
+ facets[kind] = join(dir, named[0]);
305
+ }
306
+ const packages = typeof dependencies === "object" && dependencies !== null ? Object.keys(dependencies) : [];
307
+ const plugin = {
308
+ name,
309
+ dir,
310
+ root: at.root,
311
+ required: at.required,
312
+ layout: "directory",
313
+ facets,
314
+ dependencies: packages,
315
+ external,
316
+ };
317
+ return { kind: "plugin", plugin };
318
+ }
319
+ /**
320
+ * The single-file plugins among a root's top files: `<name>.<kind>.<ext>` with `<kind>` one of the app's kinds and
321
+ * `<ext>` a facet extension, grouped by `<name>` (an unscoped plugin name, else reported; two files of one kind
322
+ * reported). Other files are not plugins.
323
+ */
324
+ function singleFilePlugins(files, at) {
325
+ const groups = new Map();
326
+ for (const file of files) {
327
+ const parsed = singleFileName(file, at.kinds);
328
+ if (parsed === undefined)
329
+ continue;
330
+ const kinds = groups.get(parsed.name) ?? new Map();
331
+ groups.set(parsed.name, kinds);
332
+ kinds.set(parsed.kind, [...(kinds.get(parsed.kind) ?? []), file]);
333
+ }
334
+ const plugins = [];
335
+ const problems = [];
336
+ for (const [name, kinds] of groups) {
337
+ const first = join(at.root, [...kinds.values()][0][0]);
338
+ if (!isPluginName(name) || name.startsWith("@")) {
339
+ problems.push({ path: first, error: `"${name}" is not a valid unscoped plugin name`, ...rootOf(at) });
340
+ continue;
341
+ }
342
+ const twice = [...kinds].find(([, named]) => named.length > 1);
343
+ if (twice !== undefined) {
344
+ problems.push({ path: first, error: `two ${twice[0]} facets: ${twice[1].join(", ")}`, ...rootOf(at) });
345
+ continue;
346
+ }
347
+ const facets = Object.fromEntries([...kinds].map(([kind, [file]]) => [kind, join(at.root, file)]));
348
+ const record = { root: at.root, required: at.required, dependencies: [], external: [] };
349
+ plugins.push({ name, dir: at.root, layout: "file", facets, ...record });
350
+ }
351
+ return { plugins, problems };
352
+ }
353
+ /** The plugin name and kind of a single-file plugin's file name (`hello.server.ts`), or `undefined` for another file. */
354
+ function singleFileName(file, kinds) {
355
+ const extension = FACET_EXTENSIONS.find((each) => file.endsWith(each));
356
+ if (extension === undefined)
357
+ return undefined;
358
+ const stem = file.slice(0, -extension.length);
359
+ const dot = stem.lastIndexOf(".");
360
+ if (dot <= 0)
361
+ return undefined;
362
+ const kind = stem.slice(dot + 1);
363
+ return kinds.includes(kind) ? { name: stem.slice(0, dot), kind } : undefined;
364
+ }
365
+ /** A problem's root fields for a root's context. */
366
+ function rootOf(at) {
367
+ return { root: at.root, required: at.required };
368
+ }
369
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/node/plugins/discover.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,mHAAmH;AACnH,oHAAoH;AACpH,sHAAsH;AACtH,sHAAsH;AACtH,mEAAmE;AAGnE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAyCrD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,KAA4B,EAC5B,OAAyB,EACzB,OAAgB;IAEhB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/E,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,WAAW,MAAM,CAAC,IAAI,WAAW,KAAK,CAAC,GAAG,UAAU,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7F,SAAS;YACV,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,EAAe,EAAE,OAAgB;IACnF,OAAO,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,MAAM,SAAS,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;YACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAKD,+GAA+G;AAC/G,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa;IACtD,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAElF,0EAA0E;AAC1E,KAAK,UAAU,QAAQ,CACtB,IAAY,EACZ,QAAiB,EACjB,KAAwB,EACxB,OAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACpD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,kCAAkC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC/G,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC7C,CAAC;YACL,MAAM,KAAK,GAAG,WAAW,MAAM,CAAC,IAAI,WAAW,SAAS,CAAC,GAAG,UAAU,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAOD,8FAA8F;AAC9F,SAAS,MAAM,CAAC,MAAc;IAC7B,OAAO,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC;AACtF,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACJ,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzE,MAAM,KAAK,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,cAAc;YAAE,SAAS;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,kFAAkF;QAClF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;aAC9D,IAAI,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAQD,mCAAmC;AACnC,KAAK,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC;QACJ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC/F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAkB,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;IAChF,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,EAAe;IACpD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAChG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAkD,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7G,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAChH,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,8DAA8D;AAC9D,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,KAAwB;IAChE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,MAAe,EAAE,EAAe;IAC3E,MAAM,OAAO,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC;QAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,+BAA+B,KAAK,EAAE,EAAE;KAC7E,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjF,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,OAAO,GAAG,MAA2B,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAClG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,OAAO,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC;YAC/F,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChG,CAAC;IACF,CAAC;IACD,4GAA4G;IAC5G,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC;YACvE,OAAO,OAAO,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;IACF,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACjE,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,CAAC;YACjG,SAAS;QACV,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC,CAAC;YAC1G,SAAS;QACV,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,SAAS,KAAK,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,kEAAkE;AAClE,SAAS,SAAS,CAAC,GAAW,EAAE,IAAY;IAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,UAAU,CAAC;YACrB,EAAE,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,IAAI,CAAC;YACf,EAAE,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG;YAAE,MAAM,IAAI,OAAO,CAAC;aACtC,IAAI,IAAI,KAAK,GAAG;YAAE,MAAM,IAAI,MAAM,CAAC;;YACnC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,wHAAwH;AACxH,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAe;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,EAAE,EAAU,EAAE,KAAa,EAAiB,EAAE;QAC/D,IAAI,KAAK,GAAG,UAAU;YAAE,OAAO;QAC/B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACJ,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO;QACR,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,SAAS;YAClG,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC;AACd,CAAC;AAED,yGAAyG;AACzG,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAkB,EAAE,EAAe;IACvE,MAAM,OAAO,GAAG,CAAC,KAAa,EAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnE,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,mDAAmD;IACnD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAI1D,CAAC;IACF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACrF,OAAO,OAAO,CAAC,6DAA6D,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5G,MAAM,MAAM,GAAW;QACtB,IAAI;QACJ,GAAG;QACH,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,MAAM,EAAE,WAAW;QACnB,MAAM;QACN,YAAY,EAAE,QAAQ;QACtB,QAAQ;KACR,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACzB,KAAwB,EACxB,EAAe;IAEf,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,uCAAuC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACtG,SAAS;QACV,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACvG,SAAS;QACV,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,yHAAyH;AACzH,SAAS,cAAc,CACtB,IAAY,EACZ,KAAwB;IAExB,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,oDAAoD;AACpD,SAAS,MAAM,CAAC,EAAe;IAC9B,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;AACjD,CAAC","sourcesContent":["// Discovery (slice 7c §1, slice 12 §2, §4): the plugins under the app's roots, found by listing each root and reading\n// only `package.json` files. Each directory at a root's top is a package: the plugins its `chord.plugins` manifest\n// lists (decision \"`chord.plugins` is a package's manifest of plugins\"), else by convention itself when its top has\n// facet files, else its subfolders with a `package.json` (a checkout of several), else itself (contracts only). Files\n// named `<name>.<kind>.<ext>` at a root's top are single-file plugins grouped by name. Facet files are the ones named\n// after the app's facet kinds. Nothing parses or runs plugin code.\n\nimport type { Dirent } from \"node:fs\";\nimport { readdir, readFile, realpath, stat } from \"node:fs/promises\";\nimport { isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport type { Context } from \"../../context/index.ts\";\nimport { isPluginName } from \"../../host/staging.ts\";\n\n/** A root plugins are listed in: a path, or a path marked `required` (a plugin of it failing at `load` is fatal). */\nexport type PluginRoot = string | { readonly path: string; readonly required?: boolean };\n\n/** A plugin on disk: its name, its real directory, its root, its facet files and npm packages. Plain data. */\nexport type Plugin = {\n\treadonly name: string;\n\t/** Its directory's real path (symlinks followed); a single-file plugin's is its root's. */\n\treadonly dir: string;\n\t/** The real path of the root it was found in: relative imports between plugins stay within it. */\n\treadonly root: string;\n\t/** Whether its root is required: its build, evaluation or setup failing at `load` rejects the load. */\n\treadonly required: boolean;\n\t/** A directory with a `package.json`, or files at a root's top (`hello.server.ts`): host packages only, no files. */\n\treadonly layout: \"directory\" | \"file\";\n\t/** Its facet files by kind, absolute paths; none for a contracts-only plugin. */\n\treadonly facets: Readonly<Record<string, string>>;\n\t/** The packages in its `dependencies`: bundled into the facets that import them. */\n\treadonly dependencies: readonly string[];\n\t/** The packages in its `chord.external`: kept external in Node builds, loaded from its `node_modules`. */\n\treadonly external: readonly string[];\n};\n\n/**\n * A root, directory or file that is not a plugin, a plugin left out, or a required root missing, and why; with the\n * root it is in (a required root's problems make `plugins.load` reject).\n */\nexport type DiscoveryProblem = {\n\treadonly path: string;\n\treadonly error: string;\n\treadonly root: string;\n\treadonly required: boolean;\n};\n\n/** What discovery found: the plugins by name, and the paths it reported. */\nexport type Discovery = { readonly plugins: readonly Plugin[]; readonly problems: readonly DiscoveryProblem[] };\n\n/** What discovery takes besides the roots: the app's facet kinds (`[\"server\", \"worker\", \"web\", \"tui\"]`). */\nexport type DiscoveryOptions = { readonly kinds: readonly string[] };\n\n/**\n * Lists every root: its packages' plugins (by their manifests or by convention) and its single-file plugins. Reported,\n * not plugins: a directory without any `package.json`, an invalid one, name or manifest, two files of one facet kind,\n * a name an earlier root (or an earlier entry of the same root) has already; a single-file plugin named like a\n * directory plugin of its root loses to it; a required root that does not exist. A missing root that is not required\n * is empty. Plugins sorted by name.\n */\nexport async function discoverPlugins(\n\troots: readonly PluginRoot[],\n\toptions: DiscoveryOptions,\n\tcontext: Context,\n): Promise<Discovery> {\n\tconst plugins = new Map<string, Plugin>();\n\tconst problems: DiscoveryProblem[] = [];\n\tfor (const each of roots) {\n\t\tconst { path, required } = typeof each === \"string\" ? { path: each, required: false } : each;\n\t\tconst listed = await listRoot(path, required === true, options.kinds, context);\n\t\tproblems.push(...listed.problems);\n\t\tfor (const plugin of listed.plugins) {\n\t\t\tconst other = plugins.get(plugin.name);\n\t\t\tif (other !== undefined) {\n\t\t\t\tconst error = `plugin \"${plugin.name}\" is in ${other.dir} already`;\n\t\t\t\tproblems.push({ path: pathOf(plugin), error, root: plugin.root, required: plugin.required });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tplugins.set(plugin.name, plugin);\n\t\t}\n\t}\n\tconst sorted = [...plugins.values()].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));\n\treturn { plugins: sorted, problems };\n}\n\n/**\n * The plugins of the package in `dir` (its manifest's folders, or by convention) and its problems, recorded as of\n * `at.root`: what `installPlugin` checks a package with before it moves it into a root.\n */\nexport async function discoverPackage(dir: string, at: RootContext, context: Context): Promise<Discovery> {\n\tcontext.abortSignal?.throwIfAborted();\n\tconst plugins: Plugin[] = [];\n\tconst problems: DiscoveryProblem[] = [];\n\tfor (const each of await packageAt(await realpath(dir), at)) {\n\t\tif (each.kind === \"plugin\") plugins.push(each.plugin);\n\t\telse problems.push({ path: each.path, error: each.error, root: at.root, required: at.required });\n\t}\n\treturn { plugins, problems };\n}\n\n/** Where a root's plugins are listed from, and what each records: its root's real path, requiredness, the kinds. */\nexport type RootContext = { readonly root: string; readonly required: boolean; readonly kinds: readonly string[] };\n\n/** Whether two records of one plugin name the same directory, layout and facet files (else its code moved). */\nexport function sameFiles(before: Plugin, after: Plugin): boolean {\n\tconst files = (plugin: Plugin) => JSON.stringify(Object.entries(plugin.facets).sort());\n\treturn before.dir === after.dir && before.layout === after.layout && files(before) === files(after);\n}\n\n/** The facet files' extensions, in no order of preference: two files of one kind are reported. */\nexport const FACET_EXTENSIONS: readonly string[] = [\".ts\", \".tsx\", \".js\", \".mjs\"];\n\n/** The plugins of one root, directory plugins first, and its problems. */\nasync function listRoot(\n\tpath: string,\n\trequired: boolean,\n\tkinds: readonly string[],\n\tcontext: Context,\n): Promise<Discovery> {\n\tconst entries = await entriesOf(path);\n\tif (entries === undefined) {\n\t\tif (!required) return { plugins: [], problems: [] };\n\t\treturn { plugins: [], problems: [{ path, error: \"the required root does not exist\", root: path, required }] };\n\t}\n\tconst root = await realpath(path);\n\tconst at = { root, required, kinds };\n\tconst plugins: Plugin[] = [];\n\tconst problems: DiscoveryProblem[] = [];\n\tfor (const dir of entries.dirs) {\n\t\tconst found = await discoverPackage(dir, at, context);\n\t\tplugins.push(...found.plugins);\n\t\tproblems.push(...found.problems);\n\t}\n\tconst files = singleFilePlugins(entries.files, at);\n\tproblems.push(...files.problems);\n\tfor (const plugin of files.plugins) {\n\t\tconst directory = plugins.find((each) => each.name === plugin.name);\n\t\tif (directory === undefined) plugins.push(plugin);\n\t\telse {\n\t\t\tconst error = `plugin \"${plugin.name}\" is in ${directory.dir} already`;\n\t\t\tproblems.push({ path: pathOf(plugin), error, root, required });\n\t\t}\n\t}\n\treturn { plugins, problems };\n}\n\n/** A plugin found, or why a directory is none. */\ntype Found =\n\t| { readonly kind: \"plugin\"; readonly plugin: Plugin }\n\t| { readonly kind: \"problem\"; readonly path: string; readonly error: string };\n\n/** The plugin's path to report: its directory, or a single-file plugin's first facet file. */\nfunction pathOf(plugin: Plugin): string {\n\treturn plugin.layout === \"directory\" ? plugin.dir : Object.values(plugin.facets)[0]!;\n}\n\n/**\n * The directories (by real path) and plain files directly under `path`, in name order; `undefined` when it does not\n * exist. Hidden entries and `node_modules` are not plugins.\n */\nasync function entriesOf(path: string): Promise<{ dirs: string[]; files: string[] } | undefined> {\n\tlet names: string[];\n\ttry {\n\t\tnames = (await readdir(path)).sort();\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n\t\tthrow error;\n\t}\n\tconst dirs: string[] = [];\n\tconst files: string[] = [];\n\tfor (const name of names) {\n\t\tif (name.startsWith(\".\") || name === \"node_modules\") continue;\n\t\tconst entry = join(path, name);\n\t\t// `stat` follows a symlink: a linked plugin directory is listed by its real path.\n\t\tconst info = await stat(entry).catch(() => undefined);\n\t\tif (info?.isDirectory() === true) dirs.push(await realpath(entry));\n\t\telse if (info?.isFile() === true) files.push(name);\n\t}\n\treturn { dirs, files };\n}\n\n/** A package's `package.json`: missing, unreadable (why), or its value (a trust boundary, checked where it is read). */\ntype Manifest =\n\t| { readonly kind: \"missing\" }\n\t| { readonly kind: \"invalid\"; readonly error: string }\n\t| { readonly kind: \"read\"; readonly value: unknown };\n\n/** The `package.json` of `dir`. */\nasync function manifestOf(dir: string): Promise<Manifest> {\n\ttry {\n\t\treturn { kind: \"read\", value: JSON.parse(await readFile(join(dir, \"package.json\"), \"utf8\")) };\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return { kind: \"missing\" };\n\t\treturn { kind: \"invalid\", error: `package.json: ${(error as Error).message}` };\n\t}\n}\n\n/**\n * The plugins of the package in `dir` (a real path): its manifest's folders; without a manifest itself when its top\n * has facet files, else its subfolders with a `package.json`, else itself; without a `package.json` its subfolders\n * with one (a checkout of several), else a problem.\n */\nasync function packageAt(dir: string, at: RootContext): Promise<Found[]> {\n\tconst manifest = await manifestOf(dir);\n\tif (manifest.kind === \"invalid\") return [{ kind: \"problem\", path: dir, error: manifest.error }];\n\tconst value = manifest.kind === \"read\" ? (manifest.value as { chord?: { plugins?: unknown } } | null) : null;\n\tconst listed = value?.chord?.plugins;\n\tif (listed !== undefined) return manifestPlugins(dir, listed, at);\n\tif (manifest.kind === \"read\" && (await hasFacetFile(dir, at.kinds))) return [await pluginAt(dir, manifest, at)];\n\tconst inner: Found[] = [];\n\tfor (const sub of (await entriesOf(dir))?.dirs ?? []) {\n\t\tconst found = await manifestOf(sub);\n\t\tif (found.kind !== \"missing\") inner.push(await pluginAt(sub, found, at));\n\t}\n\tif (inner.length > 0) return inner;\n\tif (manifest.kind === \"read\") return [await pluginAt(dir, manifest, at)];\n\treturn [{ kind: \"problem\", path: dir, error: \"no package.json\" }];\n}\n\n/** Whether `dir`'s top has a facet file of one of `kinds`. */\nasync function hasFacetFile(dir: string, kinds: readonly string[]): Promise<boolean> {\n\tconst files = new Set(await readdir(dir));\n\treturn kinds.some((kind) => FACET_EXTENSIONS.some((extension) => files.has(`${kind}${extension}`)));\n}\n\n/**\n * The plugins `chord.plugins` (`listed`: folders of the package, as paths, globs and `!` exclusions, as pi's\n * `pi.extensions`) of the package in `dir` names: each a folder with a `package.json` (the package itself when listed\n * as `.`). A manifest that is no list of strings, an entry or a link leaving the package, a listed path that is no\n * directory, and a listing of nothing are problems.\n */\nasync function manifestPlugins(dir: string, listed: unknown, at: RootContext): Promise<Found[]> {\n\tconst problem = (error: string): Found[] => [\n\t\t{ kind: \"problem\", path: dir, error: `package.json: chord.plugins ${error}` },\n\t];\n\tif (!Array.isArray(listed) || !listed.every((each) => typeof each === \"string\")) {\n\t\treturn problem(\"is not a list of plugin folders\");\n\t}\n\tconst entries = listed as readonly string[];\n\tconst excludes = entries.filter((each) => each.startsWith(\"!\")).map((each) => posix(each.slice(1)));\n\tconst folders = new Set<string>();\n\tfor (const entry of entries.filter((each) => !each.startsWith(\"!\"))) {\n\t\tconst matched = /[*?]/.test(entry) ? await globFolders(dir, posix(entry)) : [resolve(dir, entry)];\n\t\tfor (const folder of matched) {\n\t\t\tconst rest = relative(dir, folder);\n\t\t\tif (rest.startsWith(\"..\") || isAbsolute(rest)) return problem(`\"${entry}\" leaves the package`);\n\t\t\tif (!excludes.some((exclude) => matchesGlob(posix(rest) || \".\", exclude))) folders.add(folder);\n\t\t}\n\t}\n\t// One plugin inside another's directory would make the outer one's imports of it its own files, not copies.\n\tconst sorted = [...folders].sort();\n\tfor (const inner of sorted) {\n\t\tconst outer = sorted.find((folder) => insideDir(folder, inner));\n\t\tif (outer !== undefined) {\n\t\t\tconst listed = (folder: string) => posix(relative(dir, folder)) || \".\";\n\t\t\treturn problem(`lists \"${listed(inner)}\" inside the listed \"${listed(outer)}\"`);\n\t\t}\n\t}\n\tif (folders.size === 0) return problem(\"lists no plugin folder\");\n\tconst found: Found[] = [];\n\tfor (const folder of sorted) {\n\t\tconst info = await stat(folder).catch(() => undefined);\n\t\tif (info?.isDirectory() !== true) {\n\t\t\tfound.push({ kind: \"problem\", path: folder, error: \"listed in chord.plugins, not a directory\" });\n\t\t\tcontinue;\n\t\t}\n\t\tconst real = await realpath(folder);\n\t\tconst rest = relative(dir, real);\n\t\tif (rest.startsWith(\"..\") || isAbsolute(rest)) {\n\t\t\tfound.push({ kind: \"problem\", path: folder, error: \"listed in chord.plugins, links out of the package\" });\n\t\t\tcontinue;\n\t\t}\n\t\tfound.push(await pluginAt(real, await manifestOf(real), at));\n\t}\n\treturn found;\n}\n\n/** `path` with `/` separators and no leading `./` (as manifests and globs write paths). */\nfunction posix(path: string): string {\n\treturn path.split(sep).join(\"/\").replace(/^\\.\\//, \"\");\n}\n\n/** Whether `path` lies inside directory `dir` (both absolute). */\nfunction insideDir(dir: string, path: string): boolean {\n\tconst rest = relative(dir, path);\n\treturn rest !== \"\" && !rest.startsWith(\"..\") && !isAbsolute(rest);\n}\n\n/**\n * Whether the `/`-separated `path` matches the glob `pattern`: `*` and `?` within one segment, `**` across segments\n * (`node:path`'s `matchesGlob` is experimental in Node 22, Chord's floor); anything else literal.\n */\nfunction matchesGlob(path: string, pattern: string): boolean {\n\tlet source = \"\";\n\tfor (let at = 0; at < pattern.length; at++) {\n\t\tconst char = pattern[at]!;\n\t\tif (pattern.startsWith(\"**/\", at)) {\n\t\t\tsource += \"(?:.*/)?\";\n\t\t\tat += 2;\n\t\t} else if (pattern.startsWith(\"**\", at)) {\n\t\t\tsource += \".*\";\n\t\t\tat += 1;\n\t\t} else if (char === \"*\") source += \"[^/]*\";\n\t\telse if (char === \"?\") source += \"[^/]\";\n\t\telse source += char.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t}\n\treturn new RegExp(`^${source}$`).test(path);\n}\n\n/** How deep a glob of `chord.plugins` looks for folders. */\nconst GLOB_DEPTH = 6;\n\n/** The folders under `dir` (hidden ones and `node_modules` skipped, `GLOB_DEPTH` deep) whose path matches `pattern`. */\nasync function globFolders(dir: string, pattern: string): Promise<string[]> {\n\tconst found: string[] = [];\n\tconst walk = async (at: string, depth: number): Promise<void> => {\n\t\tif (depth > GLOB_DEPTH) return;\n\t\tlet entries: Dirent[];\n\t\ttry {\n\t\t\tentries = await readdir(at, { withFileTypes: true });\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isDirectory() || entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\t\t\tconst path = join(at, entry.name);\n\t\t\tif (matchesGlob(posix(relative(dir, path)), pattern)) found.push(path);\n\t\t\tawait walk(path, depth + 1);\n\t\t}\n\t};\n\tawait walk(dir, 1);\n\treturn found;\n}\n\n/** The plugin in `dir` (its real path) with its `package.json` read as `manifest`, or why it is none. */\nasync function pluginAt(dir: string, manifest: Manifest, at: RootContext): Promise<Found> {\n\tconst problem = (error: string): Found => ({ kind: \"problem\", path: dir, error });\n\tif (manifest.kind === \"missing\") return problem(\"no package.json\");\n\tif (manifest.kind === \"invalid\") return problem(manifest.error);\n\t// A trust boundary: a plugin's own `package.json`.\n\tconst { name, dependencies, chord } = (manifest.value ?? {}) as {\n\t\treadonly name?: unknown;\n\t\treadonly dependencies?: unknown;\n\t\treadonly chord?: { readonly external?: unknown };\n\t};\n\tif (typeof name !== \"string\" || !isPluginName(name)) {\n\t\treturn problem(`package.json: ${JSON.stringify(name)} is not a valid plugin name`);\n\t}\n\tconst external = chord?.external ?? [];\n\tif (!Array.isArray(external) || !external.every((each) => typeof each === \"string\")) {\n\t\treturn problem(\"package.json: chord.external is not a list of package names\");\n\t}\n\tconst files = new Set(await readdir(dir));\n\tconst facets: Record<string, string> = {};\n\tfor (const kind of at.kinds) {\n\t\tconst named = FACET_EXTENSIONS.map((extension) => `${kind}${extension}`).filter((file) => files.has(file));\n\t\tif (named.length > 1) return problem(`two ${kind} facets: ${named.join(\", \")}`);\n\t\tif (named.length === 1) facets[kind] = join(dir, named[0]!);\n\t}\n\tconst packages = typeof dependencies === \"object\" && dependencies !== null ? Object.keys(dependencies) : [];\n\tconst plugin: Plugin = {\n\t\tname,\n\t\tdir,\n\t\troot: at.root,\n\t\trequired: at.required,\n\t\tlayout: \"directory\",\n\t\tfacets,\n\t\tdependencies: packages,\n\t\texternal,\n\t};\n\treturn { kind: \"plugin\", plugin };\n}\n\n/**\n * The single-file plugins among a root's top files: `<name>.<kind>.<ext>` with `<kind>` one of the app's kinds and\n * `<ext>` a facet extension, grouped by `<name>` (an unscoped plugin name, else reported; two files of one kind\n * reported). Other files are not plugins.\n */\nfunction singleFilePlugins(\n\tfiles: readonly string[],\n\tat: RootContext,\n): { readonly plugins: readonly Plugin[]; readonly problems: readonly DiscoveryProblem[] } {\n\tconst groups = new Map<string, Map<string, string[]>>();\n\tfor (const file of files) {\n\t\tconst parsed = singleFileName(file, at.kinds);\n\t\tif (parsed === undefined) continue;\n\t\tconst kinds = groups.get(parsed.name) ?? new Map<string, string[]>();\n\t\tgroups.set(parsed.name, kinds);\n\t\tkinds.set(parsed.kind, [...(kinds.get(parsed.kind) ?? []), file]);\n\t}\n\tconst plugins: Plugin[] = [];\n\tconst problems: DiscoveryProblem[] = [];\n\tfor (const [name, kinds] of groups) {\n\t\tconst first = join(at.root, [...kinds.values()][0]![0]!);\n\t\tif (!isPluginName(name) || name.startsWith(\"@\")) {\n\t\t\tproblems.push({ path: first, error: `\"${name}\" is not a valid unscoped plugin name`, ...rootOf(at) });\n\t\t\tcontinue;\n\t\t}\n\t\tconst twice = [...kinds].find(([, named]) => named.length > 1);\n\t\tif (twice !== undefined) {\n\t\t\tproblems.push({ path: first, error: `two ${twice[0]} facets: ${twice[1].join(\", \")}`, ...rootOf(at) });\n\t\t\tcontinue;\n\t\t}\n\t\tconst facets = Object.fromEntries([...kinds].map(([kind, [file]]) => [kind, join(at.root, file!)]));\n\t\tconst record = { root: at.root, required: at.required, dependencies: [], external: [] };\n\t\tplugins.push({ name, dir: at.root, layout: \"file\", facets, ...record });\n\t}\n\treturn { plugins, problems };\n}\n\n/** The plugin name and kind of a single-file plugin's file name (`hello.server.ts`), or `undefined` for another file. */\nfunction singleFileName(\n\tfile: string,\n\tkinds: readonly string[],\n): { readonly name: string; readonly kind: string } | undefined {\n\tconst extension = FACET_EXTENSIONS.find((each) => file.endsWith(each));\n\tif (extension === undefined) return undefined;\n\tconst stem = file.slice(0, -extension.length);\n\tconst dot = stem.lastIndexOf(\".\");\n\tif (dot <= 0) return undefined;\n\tconst kind = stem.slice(dot + 1);\n\treturn kinds.includes(kind) ? { name: stem.slice(0, dot), kind } : undefined;\n}\n\n/** A problem's root fields for a root's context. */\nfunction rootOf(at: RootContext): { readonly root: string; readonly required: boolean } {\n\treturn { root: at.root, required: at.required };\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import type { Principal } from "../../data/index.ts";
2
+ import type { Facet } from "../../host/index.ts";
3
+ import type { BuiltFacet } from "./build.ts";
4
+ import type { Plugin } from "./discover.ts";
5
+ /**
6
+ * The host packages by specifier, each what Node's `require` would give: a CommonJS package's exports, an ESM
7
+ * package's namespace (`import * as`), wrapped once so default and named imports both work.
8
+ */
9
+ export type HostPackages = Readonly<Record<string, unknown>>;
10
+ /** What `evaluateFacet` takes besides the script: the host packages and the plugin it was built from. */
11
+ export type EvaluateOptions = {
12
+ readonly hostPackages: HostPackages;
13
+ readonly plugin: Plugin;
14
+ };
15
+ /** A built script, as evaluation takes it. */
16
+ export type BuiltScript = Extract<BuiltFacet, {
17
+ readonly kind: "script";
18
+ }>;
19
+ /**
20
+ * Evaluates `built` and returns its facet (its default export). Throws what the script throws while it is evaluated,
21
+ * an import its `require` does not answer, or a declaration error when its default export is not a facet.
22
+ */
23
+ export declare function evaluateFacet<P extends Principal = Principal>(built: BuiltScript, options: EvaluateOptions): Facet<P>;
24
+ /**
25
+ * Inside a facet script, the absolute path of `path`, a file of the facet's own plugin (`..` out of its directory
26
+ * refused); evaluation gives each facet its own. Imported anywhere else, it throws.
27
+ */
28
+ export declare function pluginFile(path: string): string;
29
+ /** The one specifier of this component a script imports (`pluginFile`): external always, answered per facet. */
30
+ export declare const PLUGINS_SPECIFIER = "@earendil-works/chord/plugins";
31
+ /** The package a bare specifier names: `@scope/name` or `name`, without a subpath. */
32
+ export declare function packageName(specifier: string): string;
33
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/node/plugins/evaluate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7D,yGAAyG;AACzG,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/F,8CAA8C;AAC9C,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CA2BrH;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,gHAAgH;AAChH,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AA4DjE,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGrD"}
@@ -0,0 +1,121 @@
1
+ // Evaluating (slice 7c §3): a built script run with `vm.Script` in this context under a stable filename per (plugin,
2
+ // kind, digest), given the `require` that answers its external imports: the host packages (one instance per process),
3
+ // this component's `pluginFile` bound to the plugin's directory, and `chord.external` packages and Node builtins from
4
+ // the plugin's own `node_modules`. No module map and no cache: an old facet's closures are collected once nothing holds
5
+ // them.
6
+ import { createRequire, isBuiltin } from "node:module";
7
+ import { basename, isAbsolute, join, relative, resolve } from "node:path";
8
+ import { Script } from "node:vm";
9
+ import { interop } from "../../surfaces/registered.js";
10
+ import { registerScript } from "./stack.js";
11
+ /**
12
+ * Evaluates `built` and returns its facet (its default export). Throws what the script throws while it is evaluated,
13
+ * an import its `require` does not answer, or a declaration error when its default export is not a facet.
14
+ */
15
+ export function evaluateFacet(built, options) {
16
+ const { plugin, hostPackages } = options;
17
+ const where = `plugin "${plugin.name}" (${built.facet})`;
18
+ const file = plugin.facets[built.facet] ?? `${built.facet}.js`;
19
+ const filename = `/chord-plugins/${plugin.name}/${basename(file)}?${built.digest}`;
20
+ // The script is one function expression: its value when run.
21
+ const wrapper = new Script(built.source, { filename }).runInThisContext();
22
+ const module = { exports: {} };
23
+ let facet;
24
+ try {
25
+ wrapper(requireFor(plugin, built, hostPackages, where), module, module.exports);
26
+ // A trust boundary: plugin code; its default export is checked to be a facet (a getter of it may throw too).
27
+ facet = module.exports?.default;
28
+ if (typeof facet !== "object" || facet === null || typeof facet.setup !== "function") {
29
+ throw new Error(`${where}: its default export is not a facet (defineFacet)`);
30
+ }
31
+ }
32
+ catch (error) {
33
+ // Its stack maps while the error lives (an import-time throw names the plugin's line).
34
+ if (typeof error === "object" && error !== null)
35
+ registerScript(filename, built.source, plugin.dir, error);
36
+ throw error;
37
+ }
38
+ registerScript(filename, built.source, plugin.dir, facet);
39
+ return facet;
40
+ }
41
+ /**
42
+ * Inside a facet script, the absolute path of `path`, a file of the facet's own plugin (`..` out of its directory
43
+ * refused); evaluation gives each facet its own. Imported anywhere else, it throws.
44
+ */
45
+ export function pluginFile(path) {
46
+ throw new Error(`pluginFile("${path}"): only a plugin's facet script, evaluated by the plugins component, has one`);
47
+ }
48
+ /** The one specifier of this component a script imports (`pluginFile`): external always, answered per facet. */
49
+ export const PLUGINS_SPECIFIER = "@earendil-works/chord/plugins";
50
+ /**
51
+ * The `require` a facet script of `plugin` takes (`where` names the facet in its errors). A computed `require(x)`
52
+ * cannot be seen at build, so it refuses here what the build refuses to imports: another version of the app's API than
53
+ * the script imports (or, when it imports none, than the first one it requires), Chord itself under an app's API, and
54
+ * for a single-file plugin anything but host packages.
55
+ */
56
+ function requireFor(plugin, built, hostPackages, where) {
57
+ let fromPlugin;
58
+ let plugins;
59
+ // The facet's API version: the one its build saw, else the first one required (one facet, one version).
60
+ let version = built.api?.version;
61
+ return (specifier) => {
62
+ const refused = refusedAtRun(built, version, specifier);
63
+ if (refused !== undefined)
64
+ throw new Error(`${where}: "${specifier}": ${refused}`);
65
+ version ??= versionOf(built, specifier);
66
+ if (Object.hasOwn(hostPackages, specifier))
67
+ return interop(hostPackages[specifier]);
68
+ if (specifier === PLUGINS_SPECIFIER) {
69
+ plugins ??= { pluginFile: (path) => fileOf(plugin, path) };
70
+ return plugins;
71
+ }
72
+ if (plugin.layout === "file") {
73
+ throw new Error(`${where}: "${specifier}": a single-file plugin requires only host packages`);
74
+ }
75
+ if (isBuiltin(specifier) || plugin.external.includes(packageName(specifier))) {
76
+ fromPlugin ??= createRequire(join(plugin.dir, "package.json"));
77
+ return fromPlugin(specifier);
78
+ }
79
+ throw new Error(`${where}: "${specifier}" is not a host package, a Node builtin or one of its chord.external packages`);
80
+ };
81
+ }
82
+ /**
83
+ * Why a script built against the app's API, using API `version` so far, may not require `specifier` (the build's API
84
+ * rules), or `undefined`.
85
+ */
86
+ function refusedAtRun(built, version, specifier) {
87
+ const { api } = built;
88
+ if (api === undefined || specifier === PLUGINS_SPECIFIER)
89
+ return undefined;
90
+ if (packageName(specifier) === "@earendil-works/chord")
91
+ return "plugins import Chord through the app's API";
92
+ const required = versionOf(built, specifier);
93
+ if (required === undefined || version === undefined || required === version)
94
+ return undefined;
95
+ return `this script uses ${api.name}/${version}: one facet uses one version of the API`;
96
+ }
97
+ /** The API version `specifier` names (`v3` of `@acme/app/v3/web`), when the script was built against an API. */
98
+ function versionOf(built, specifier) {
99
+ const { api } = built;
100
+ if (api === undefined || (specifier !== api.name && !specifier.startsWith(`${api.name}/`)))
101
+ return undefined;
102
+ return specifier.slice(api.name.length + 1).split("/")[0];
103
+ }
104
+ /** The package a bare specifier names: `@scope/name` or `name`, without a subpath. */
105
+ export function packageName(specifier) {
106
+ const parts = specifier.split("/");
107
+ return specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
108
+ }
109
+ /** The absolute path of `path` inside `plugin`'s directory; one out of it is refused, and so is every one of a single-file plugin. */
110
+ function fileOf(plugin, path) {
111
+ if (plugin.layout === "file") {
112
+ throw new Error(`pluginFile("${path}"): single-file plugin "${plugin.name}" has no directory of its own`);
113
+ }
114
+ const file = resolve(plugin.dir, path);
115
+ const rest = relative(plugin.dir, file);
116
+ if (rest.startsWith("..") || isAbsolute(rest)) {
117
+ throw new Error(`pluginFile("${path}"): outside the directory of plugin "${plugin.name}"`);
118
+ }
119
+ return file;
120
+ }
121
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/node/plugins/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["// Evaluating (slice 7c §3): a built script run with `vm.Script` in this context under a stable filename per (plugin,\n// kind, digest), given the `require` that answers its external imports: the host packages (one instance per process),\n// this component's `pluginFile` bound to the plugin's directory, and `chord.external` packages and Node builtins from\n// the plugin's own `node_modules`. No module map and no cache: an old facet's closures are collected once nothing holds\n// them.\n\nimport { createRequire, isBuiltin } from \"node:module\";\nimport { basename, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { Script } from \"node:vm\";\nimport type { Principal } from \"../../data/index.ts\";\nimport type { Facet } from \"../../host/index.ts\";\nimport { interop } from \"../../surfaces/registered.ts\";\nimport type { BuiltFacet } from \"./build.ts\";\nimport type { Plugin } from \"./discover.ts\";\nimport { registerScript } from \"./stack.ts\";\n\n/**\n * The host packages by specifier, each what Node's `require` would give: a CommonJS package's exports, an ESM\n * package's namespace (`import * as`), wrapped once so default and named imports both work.\n */\nexport type HostPackages = Readonly<Record<string, unknown>>;\n\n/** What `evaluateFacet` takes besides the script: the host packages and the plugin it was built from. */\nexport type EvaluateOptions = { readonly hostPackages: HostPackages; readonly plugin: Plugin };\n\n/** A built script, as evaluation takes it. */\nexport type BuiltScript = Extract<BuiltFacet, { readonly kind: \"script\" }>;\n\n/**\n * Evaluates `built` and returns its facet (its default export). Throws what the script throws while it is evaluated,\n * an import its `require` does not answer, or a declaration error when its default export is not a facet.\n */\nexport function evaluateFacet<P extends Principal = Principal>(built: BuiltScript, options: EvaluateOptions): Facet<P> {\n\tconst { plugin, hostPackages } = options;\n\tconst where = `plugin \"${plugin.name}\" (${built.facet})`;\n\tconst file = plugin.facets[built.facet] ?? `${built.facet}.js`;\n\tconst filename = `/chord-plugins/${plugin.name}/${basename(file)}?${built.digest}`;\n\t// The script is one function expression: its value when run.\n\tconst wrapper = new Script(built.source, { filename }).runInThisContext() as (\n\t\trequire: (specifier: string) => unknown,\n\t\tmodule: { exports: unknown },\n\t\texports: unknown,\n\t) => void;\n\tconst module = { exports: {} as unknown };\n\tlet facet: unknown;\n\ttry {\n\t\twrapper(requireFor(plugin, built, hostPackages, where), module, module.exports);\n\t\t// A trust boundary: plugin code; its default export is checked to be a facet (a getter of it may throw too).\n\t\tfacet = (module.exports as { readonly default?: unknown } | null)?.default;\n\t\tif (typeof facet !== \"object\" || facet === null || typeof (facet as { setup?: unknown }).setup !== \"function\") {\n\t\t\tthrow new Error(`${where}: its default export is not a facet (defineFacet)`);\n\t\t}\n\t} catch (error) {\n\t\t// Its stack maps while the error lives (an import-time throw names the plugin's line).\n\t\tif (typeof error === \"object\" && error !== null) registerScript(filename, built.source, plugin.dir, error);\n\t\tthrow error;\n\t}\n\tregisterScript(filename, built.source, plugin.dir, facet);\n\treturn facet as Facet<P>;\n}\n\n/**\n * Inside a facet script, the absolute path of `path`, a file of the facet's own plugin (`..` out of its directory\n * refused); evaluation gives each facet its own. Imported anywhere else, it throws.\n */\nexport function pluginFile(path: string): string {\n\tthrow new Error(`pluginFile(\"${path}\"): only a plugin's facet script, evaluated by the plugins component, has one`);\n}\n\n/** The one specifier of this component a script imports (`pluginFile`): external always, answered per facet. */\nexport const PLUGINS_SPECIFIER = \"@earendil-works/chord/plugins\";\n\n/**\n * The `require` a facet script of `plugin` takes (`where` names the facet in its errors). A computed `require(x)`\n * cannot be seen at build, so it refuses here what the build refuses to imports: another version of the app's API than\n * the script imports (or, when it imports none, than the first one it requires), Chord itself under an app's API, and\n * for a single-file plugin anything but host packages.\n */\nfunction requireFor(\n\tplugin: Plugin,\n\tbuilt: BuiltScript,\n\thostPackages: HostPackages,\n\twhere: string,\n): (specifier: string) => unknown {\n\tlet fromPlugin: NodeJS.Require | undefined;\n\tlet plugins: { readonly pluginFile: (path: string) => string } | undefined;\n\t// The facet's API version: the one its build saw, else the first one required (one facet, one version).\n\tlet version = built.api?.version;\n\treturn (specifier) => {\n\t\tconst refused = refusedAtRun(built, version, specifier);\n\t\tif (refused !== undefined) throw new Error(`${where}: \"${specifier}\": ${refused}`);\n\t\tversion ??= versionOf(built, specifier);\n\t\tif (Object.hasOwn(hostPackages, specifier)) return interop(hostPackages[specifier]);\n\t\tif (specifier === PLUGINS_SPECIFIER) {\n\t\t\tplugins ??= { pluginFile: (path) => fileOf(plugin, path) };\n\t\t\treturn plugins;\n\t\t}\n\t\tif (plugin.layout === \"file\") {\n\t\t\tthrow new Error(`${where}: \"${specifier}\": a single-file plugin requires only host packages`);\n\t\t}\n\t\tif (isBuiltin(specifier) || plugin.external.includes(packageName(specifier))) {\n\t\t\tfromPlugin ??= createRequire(join(plugin.dir, \"package.json\"));\n\t\t\treturn fromPlugin(specifier);\n\t\t}\n\t\tthrow new Error(\n\t\t\t`${where}: \"${specifier}\" is not a host package, a Node builtin or one of its chord.external packages`,\n\t\t);\n\t};\n}\n\n/**\n * Why a script built against the app's API, using API `version` so far, may not require `specifier` (the build's API\n * rules), or `undefined`.\n */\nfunction refusedAtRun(built: BuiltScript, version: string | undefined, specifier: string): string | undefined {\n\tconst { api } = built;\n\tif (api === undefined || specifier === PLUGINS_SPECIFIER) return undefined;\n\tif (packageName(specifier) === \"@earendil-works/chord\") return \"plugins import Chord through the app's API\";\n\tconst required = versionOf(built, specifier);\n\tif (required === undefined || version === undefined || required === version) return undefined;\n\treturn `this script uses ${api.name}/${version}: one facet uses one version of the API`;\n}\n\n/** The API version `specifier` names (`v3` of `@acme/app/v3/web`), when the script was built against an API. */\nfunction versionOf(built: BuiltScript, specifier: string): string | undefined {\n\tconst { api } = built;\n\tif (api === undefined || (specifier !== api.name && !specifier.startsWith(`${api.name}/`))) return undefined;\n\treturn specifier.slice(api.name.length + 1).split(\"/\")[0];\n}\n\n/** The package a bare specifier names: `@scope/name` or `name`, without a subpath. */\nexport function packageName(specifier: string): string {\n\tconst parts = specifier.split(\"/\");\n\treturn specifier.startsWith(\"@\") ? parts.slice(0, 2).join(\"/\") : parts[0]!;\n}\n\n/** The absolute path of `path` inside `plugin`'s directory; one out of it is refused, and so is every one of a single-file plugin. */\nfunction fileOf(plugin: Plugin, path: string): string {\n\tif (plugin.layout === \"file\") {\n\t\tthrow new Error(`pluginFile(\"${path}\"): single-file plugin \"${plugin.name}\" has no directory of its own`);\n\t}\n\tconst file = resolve(plugin.dir, path);\n\tconst rest = relative(plugin.dir, file);\n\tif (rest.startsWith(\"..\") || isAbsolute(rest)) {\n\t\tthrow new Error(`pluginFile(\"${path}\"): outside the directory of plugin \"${plugin.name}\"`);\n\t}\n\treturn file;\n}\n"]}