@crvouga/atlas 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +178 -617
  3. package/dist/bun/src/driver.d.ts +41 -7
  4. package/dist/bun/src/driver.js +47 -6
  5. package/dist/bun/src/index.d.ts +8 -0
  6. package/dist/bun/src/index.js +8 -0
  7. package/dist/core/src/cli.d.ts +14 -1
  8. package/dist/core/src/cli.js +30 -1
  9. package/dist/core/src/config.d.ts +70 -4
  10. package/dist/core/src/config.js +62 -3
  11. package/dist/core/src/events/cloudevents.d.ts +54 -9
  12. package/dist/core/src/events/cloudevents.js +60 -9
  13. package/dist/core/src/graph.d.ts +21 -0
  14. package/dist/core/src/graph.js +26 -0
  15. package/dist/core/src/index.d.ts +11 -0
  16. package/dist/core/src/index.js +11 -0
  17. package/dist/core/src/lint.d.ts +30 -0
  18. package/dist/core/src/lint.js +13 -0
  19. package/dist/core/src/plan.d.ts +39 -1
  20. package/dist/core/src/plan.js +28 -1
  21. package/dist/core/src/privacy.d.ts +29 -2
  22. package/dist/core/src/privacy.js +19 -2
  23. package/dist/core/src/report/formats.d.ts +34 -4
  24. package/dist/core/src/report/formats.js +24 -4
  25. package/dist/core/src/report/markdown.d.ts +15 -0
  26. package/dist/core/src/report/markdown.js +8 -0
  27. package/dist/core/src/run/clients.d.ts +44 -5
  28. package/dist/core/src/run/clients.js +46 -2
  29. package/dist/core/src/run/execute.d.ts +69 -16
  30. package/dist/core/src/run/execute.js +67 -16
  31. package/dist/core/src/run/frames.d.ts +13 -4
  32. package/dist/core/src/run/frames.js +19 -4
  33. package/dist/core/src/run/http.d.ts +34 -1
  34. package/dist/core/src/run/http.js +14 -1
  35. package/dist/core/src/run/types.d.ts +76 -3
  36. package/dist/core/src/run/types.js +19 -3
  37. package/dist/core/src/signals.d.ts +49 -5
  38. package/dist/core/src/signals.js +22 -5
  39. package/dist/core/src/spec/compose.d.ts +23 -1
  40. package/dist/core/src/spec/compose.js +10 -1
  41. package/dist/core/src/spec/index.d.ts +9 -1
  42. package/dist/core/src/spec/index.js +9 -1
  43. package/dist/core/src/spec/load.d.ts +22 -1
  44. package/dist/core/src/spec/load.js +31 -1
  45. package/dist/core/src/spec/parse.d.ts +16 -2
  46. package/dist/core/src/spec/parse.js +25 -2
  47. package/dist/core/src/spec/scxml.d.ts +25 -4
  48. package/dist/core/src/spec/scxml.js +36 -4
  49. package/dist/core/src/spec/types.d.ts +52 -1
  50. package/dist/core/src/spec/types.js +24 -0
  51. package/dist/detox/src/index.d.ts +54 -11
  52. package/dist/detox/src/index.js +45 -7
  53. package/dist/playwright/src/driver.d.ts +39 -3
  54. package/dist/playwright/src/driver.js +27 -3
  55. package/dist/playwright/src/index.d.ts +10 -0
  56. package/dist/playwright/src/index.js +10 -0
  57. package/dist/playwright/src/media.d.ts +50 -4
  58. package/dist/playwright/src/media.js +55 -4
  59. package/dist/playwright/src/signals.d.ts +44 -5
  60. package/dist/playwright/src/signals.js +29 -5
  61. package/dist/reports/src/attachment-files.d.ts +44 -0
  62. package/dist/reports/src/attachment-files.js +121 -0
  63. package/dist/reports/src/attachment-response.d.ts +31 -0
  64. package/dist/reports/src/attachment-response.js +55 -0
  65. package/dist/reports/src/aws-credentials.d.ts +48 -0
  66. package/dist/reports/src/aws-credentials.js +221 -0
  67. package/dist/reports/src/browser-navigation.d.ts +14 -0
  68. package/dist/reports/src/browser-navigation.js +7 -0
  69. package/dist/reports/src/bundle.d.ts +34 -2
  70. package/dist/reports/src/bundle.js +38 -2
  71. package/dist/reports/src/catalog.d.ts +34 -3
  72. package/dist/reports/src/catalog.js +17 -3
  73. package/dist/reports/src/cli-stores.d.ts +36 -0
  74. package/dist/reports/src/cli-stores.js +73 -0
  75. package/dist/reports/src/clock.d.ts +7 -2
  76. package/dist/reports/src/clock.js +5 -2
  77. package/dist/reports/src/completion-order.d.ts +18 -5
  78. package/dist/reports/src/completion-order.js +18 -5
  79. package/dist/reports/src/compose.d.ts +80 -0
  80. package/dist/reports/src/compose.js +117 -0
  81. package/dist/reports/src/copy-store.d.ts +29 -0
  82. package/dist/reports/src/copy-store.js +52 -0
  83. package/dist/reports/src/directory-outline.d.ts +38 -0
  84. package/dist/reports/src/directory-outline.js +103 -0
  85. package/dist/reports/src/directory-store.d.ts +20 -0
  86. package/dist/reports/src/directory-store.js +166 -0
  87. package/dist/reports/src/doctor.d.ts +29 -0
  88. package/dist/reports/src/doctor.js +83 -0
  89. package/dist/reports/src/effective-delta.d.ts +34 -0
  90. package/dist/reports/src/effective-delta.js +25 -0
  91. package/dist/reports/src/evidence-detail.d.ts +64 -0
  92. package/dist/reports/src/evidence-detail.js +92 -0
  93. package/dist/reports/src/evidence-live.d.ts +35 -5
  94. package/dist/reports/src/evidence-live.js +18 -2
  95. package/dist/reports/src/evidence-types.d.ts +68 -1
  96. package/dist/reports/src/evidence-types.js +5 -1
  97. package/dist/reports/src/evidence-view.d.ts +43 -4
  98. package/dist/reports/src/evidence-view.js +13 -2
  99. package/dist/reports/src/explorer-types.d.ts +40 -3
  100. package/dist/reports/src/explorer-types.js +8 -0
  101. package/dist/reports/src/explorer-versions.d.ts +9 -1
  102. package/dist/reports/src/explorer-versions.js +18 -1
  103. package/dist/reports/src/export-evidence.d.ts +16 -1
  104. package/dist/reports/src/export-evidence.js +52 -1
  105. package/dist/reports/src/fetcher.d.ts +27 -3
  106. package/dist/reports/src/fetcher.js +11 -3
  107. package/dist/reports/src/format-date.d.ts +6 -0
  108. package/dist/reports/src/format-date.js +6 -0
  109. package/dist/reports/src/format.d.ts +16 -0
  110. package/dist/reports/src/format.js +10 -0
  111. package/dist/reports/src/frames.d.ts +36 -3
  112. package/dist/reports/src/frames.js +22 -3
  113. package/dist/reports/src/hash.d.ts +18 -0
  114. package/dist/reports/src/hash.js +13 -0
  115. package/dist/reports/src/host.d.ts +29 -0
  116. package/dist/reports/src/host.js +64 -0
  117. package/dist/reports/src/html-frame.d.ts +5 -6
  118. package/dist/reports/src/html-frame.js +12 -1
  119. package/dist/reports/src/http-store.d.ts +52 -0
  120. package/dist/reports/src/http-store.js +145 -0
  121. package/dist/reports/src/http.d.ts +7 -0
  122. package/dist/reports/src/http.js +6 -0
  123. package/dist/reports/src/ingest.d.ts +54 -0
  124. package/dist/reports/src/ingest.js +210 -0
  125. package/dist/reports/src/init.d.ts +40 -0
  126. package/dist/reports/src/init.js +364 -0
  127. package/dist/reports/src/junit.d.ts +33 -6
  128. package/dist/reports/src/junit.js +87 -21
  129. package/dist/reports/src/keyboard.d.ts +20 -0
  130. package/dist/reports/src/keyboard.js +11 -0
  131. package/dist/reports/src/keys.d.ts +21 -3
  132. package/dist/reports/src/keys.js +21 -3
  133. package/dist/reports/src/layer-axes.d.ts +35 -5
  134. package/dist/reports/src/layer-axes.js +25 -5
  135. package/dist/reports/src/layer-catalog.d.ts +28 -1
  136. package/dist/reports/src/layer-catalog.js +18 -1
  137. package/dist/reports/src/layer-merge.d.ts +98 -9
  138. package/dist/reports/src/layer-merge.js +147 -31
  139. package/dist/reports/src/layer-source.d.ts +18 -0
  140. package/dist/reports/src/layer-source.js +11 -0
  141. package/dist/reports/src/layer-store.d.ts +42 -0
  142. package/dist/reports/src/layer-store.js +63 -5
  143. package/dist/reports/src/layer-types.d.ts +32 -1
  144. package/dist/reports/src/layers-route.d.ts +47 -4
  145. package/dist/reports/src/layers-route.js +86 -7
  146. package/dist/reports/src/media-types.d.ts +11 -0
  147. package/dist/reports/src/media-types.js +22 -0
  148. package/dist/reports/src/namespace-guard.d.ts +10 -1
  149. package/dist/reports/src/namespace-guard.js +10 -1
  150. package/dist/reports/src/navigation.d.ts +12 -0
  151. package/dist/reports/src/navigation.js +7 -0
  152. package/dist/reports/src/object-io.d.ts +11 -4
  153. package/dist/reports/src/object-io.js +4 -4
  154. package/dist/reports/src/object-store-conformance.d.ts +27 -0
  155. package/dist/reports/src/object-store-conformance.js +87 -0
  156. package/dist/reports/src/object-store.d.ts +33 -24
  157. package/dist/reports/src/object-store.js +17 -24
  158. package/dist/reports/src/parse-with.d.ts +16 -0
  159. package/dist/reports/src/parse-with.js +14 -0
  160. package/dist/reports/src/performance-part.d.ts +25 -1
  161. package/dist/reports/src/performance-part.js +15 -1
  162. package/dist/reports/src/performance.d.ts +22 -2
  163. package/dist/reports/src/performance.js +12 -2
  164. package/dist/reports/src/persist.d.ts +12 -3
  165. package/dist/reports/src/persist.js +12 -3
  166. package/dist/reports/src/phone.d.ts +18 -1
  167. package/dist/reports/src/phone.js +18 -1
  168. package/dist/reports/src/protocol.d.ts +26 -4
  169. package/dist/reports/src/protocol.js +15 -4
  170. package/dist/reports/src/publication.d.ts +21 -1
  171. package/dist/reports/src/publication.js +21 -1
  172. package/dist/reports/src/publish-checks.d.ts +35 -0
  173. package/dist/reports/src/publish-checks.js +122 -0
  174. package/dist/reports/src/publish.d.ts +42 -9
  175. package/dist/reports/src/publish.js +36 -7
  176. package/dist/reports/src/read.d.ts +46 -16
  177. package/dist/reports/src/read.js +38 -14
  178. package/dist/reports/src/recording-bundle.d.ts +13 -2
  179. package/dist/reports/src/recording-bundle.js +4 -2
  180. package/dist/reports/src/recording-keys.d.ts +15 -1
  181. package/dist/reports/src/recording-keys.js +15 -1
  182. package/dist/reports/src/remote-report.d.ts +28 -7
  183. package/dist/reports/src/remote-report.js +15 -7
  184. package/dist/reports/src/report-cli.d.ts +51 -0
  185. package/dist/reports/src/report-cli.js +485 -0
  186. package/dist/reports/src/report-index.d.ts +99 -0
  187. package/dist/reports/src/report-index.js +337 -0
  188. package/dist/reports/src/report-loader.d.ts +10 -0
  189. package/dist/reports/src/report-loader.js +6 -0
  190. package/dist/reports/src/report-parts.d.ts +29 -3
  191. package/dist/reports/src/report-parts.js +37 -3
  192. package/dist/reports/src/report-status.d.ts +48 -0
  193. package/dist/reports/src/report-status.js +156 -0
  194. package/dist/reports/src/report-types.d.ts +73 -0
  195. package/dist/reports/src/report-types.js +3 -0
  196. package/dist/reports/src/reporter.d.ts +67 -0
  197. package/dist/reports/src/reporter.js +128 -0
  198. package/dist/reports/src/reports-explorer-route.d.ts +541 -0
  199. package/dist/reports/src/reports-explorer-route.js +11 -0
  200. package/dist/reports/src/reports-list-route.d.ts +9 -0
  201. package/dist/reports/src/reports-list-route.js +9 -0
  202. package/dist/reports/src/reports-route.d.ts +561 -22
  203. package/dist/reports/src/reports-route.js +11 -3
  204. package/dist/reports/src/reports-store.d.ts +19 -2
  205. package/dist/reports/src/reports-store.js +10 -2
  206. package/dist/reports/src/resilient-cache.d.ts +14 -1
  207. package/dist/reports/src/resilient-cache.js +8 -1
  208. package/dist/reports/src/retention.d.ts +17 -1
  209. package/dist/reports/src/retention.js +5 -1
  210. package/dist/reports/src/run-bundle.d.ts +63 -0
  211. package/dist/reports/src/run-bundle.js +159 -0
  212. package/dist/reports/src/s3-store.d.ts +79 -0
  213. package/dist/reports/src/s3-store.js +295 -0
  214. package/dist/reports/src/scenario.d.ts +14 -4
  215. package/dist/reports/src/scenario.js +5 -4
  216. package/dist/reports/src/sigv4.d.ts +72 -0
  217. package/dist/reports/src/sigv4.js +96 -0
  218. package/dist/reports/src/snapshot-bundle.d.ts +24 -1
  219. package/dist/reports/src/snapshot-bundle.js +27 -2
  220. package/dist/reports/src/snapshot-surface.d.ts +20 -9
  221. package/dist/reports/src/snapshot-surface.js +32 -19
  222. package/dist/reports/src/source-content.d.ts +23 -0
  223. package/dist/reports/src/source-content.js +30 -1
  224. package/dist/reports/src/source-entries.d.ts +13 -0
  225. package/dist/reports/src/source-entries.js +6 -0
  226. package/dist/reports/src/source-part.d.ts +15 -0
  227. package/dist/reports/src/source-part.js +8 -0
  228. package/dist/reports/src/source-reader.d.ts +11 -0
  229. package/dist/reports/src/source-reader.js +5 -0
  230. package/dist/reports/src/spec-evidence.d.ts +12 -2
  231. package/dist/reports/src/spec-evidence.js +6 -2
  232. package/dist/reports/src/spec-inventory.d.ts +15 -1
  233. package/dist/reports/src/spec-inventory.js +22 -1
  234. package/dist/reports/src/spec-link.d.ts +28 -0
  235. package/dist/reports/src/spec-link.js +70 -0
  236. package/dist/reports/src/spec-set.d.ts +63 -0
  237. package/dist/reports/src/spec-set.js +177 -0
  238. package/dist/reports/src/status.d.ts +10 -0
  239. package/dist/reports/src/status.js +5 -0
  240. package/dist/reports/src/store-prefix.d.ts +28 -0
  241. package/dist/reports/src/store-prefix.js +22 -0
  242. package/dist/reports/src/store-url.d.ts +89 -0
  243. package/dist/reports/src/store-url.js +160 -0
  244. package/dist/reports/src/test-catalog-entity.d.ts +11 -0
  245. package/dist/reports/src/test-catalog-entity.js +6 -0
  246. package/dist/reports/src/types.d.ts +6 -1
  247. package/dist/reports/src/use-report-nav.d.ts +35 -0
  248. package/dist/reports/src/use-report-nav.js +12 -0
  249. package/dist/schema/src/api.d.ts +799 -0
  250. package/dist/schema/src/api.js +201 -0
  251. package/dist/schema/src/cli-results.d.ts +210 -0
  252. package/dist/schema/src/cli-results.js +124 -0
  253. package/dist/schema/src/common.d.ts +53 -0
  254. package/dist/schema/src/common.js +42 -0
  255. package/dist/schema/src/index.d.ts +14 -0
  256. package/dist/schema/src/index.js +14 -0
  257. package/dist/schema/src/layer.d.ts +2273 -0
  258. package/dist/schema/src/layer.js +462 -0
  259. package/dist/schema/src/manifest.d.ts +95 -0
  260. package/dist/schema/src/manifest.js +84 -0
  261. package/dist/schema/src/report-sources.d.ts +28 -0
  262. package/dist/schema/src/report-sources.js +25 -0
  263. package/dist/schema/src/runs-index.d.ts +16 -0
  264. package/dist/schema/src/runs-index.js +15 -0
  265. package/dist/schema/src/server-config.d.ts +93 -0
  266. package/dist/schema/src/server-config.js +73 -0
  267. package/dist/schema/src/spec.d.ts +69 -0
  268. package/dist/schema/src/spec.js +58 -0
  269. package/dist/server/src/app.d.ts +62 -0
  270. package/dist/server/src/app.js +419 -0
  271. package/dist/server/src/auth.d.ts +41 -0
  272. package/dist/server/src/auth.js +59 -0
  273. package/dist/server/src/config.d.ts +83 -0
  274. package/dist/server/src/config.js +187 -0
  275. package/dist/server/src/dev.d.ts +12 -0
  276. package/dist/server/src/dev.js +80 -0
  277. package/dist/server/src/events.d.ts +29 -0
  278. package/dist/server/src/events.js +101 -0
  279. package/dist/server/src/host.d.ts +30 -0
  280. package/dist/server/src/host.js +115 -0
  281. package/dist/server/src/index.d.ts +16 -0
  282. package/dist/server/src/index.js +16 -0
  283. package/dist/server/src/llms.d.ts +19 -0
  284. package/dist/server/src/llms.js +63 -0
  285. package/dist/server/src/main.d.ts +30 -0
  286. package/dist/server/src/main.js +112 -0
  287. package/dist/server/src/openapi.d.ts +59 -0
  288. package/dist/server/src/openapi.js +374 -0
  289. package/dist/server/src/problem.d.ts +8 -0
  290. package/dist/server/src/problem.js +39 -0
  291. package/dist/server/src/site.d.ts +13 -0
  292. package/dist/server/src/site.js +43 -0
  293. package/dist/server/src/store-api.d.ts +28 -0
  294. package/dist/server/src/store-api.js +159 -0
  295. package/dist/server/src/validate.d.ts +71 -0
  296. package/dist/server/src/validate.js +197 -0
  297. package/dist/vitest/src/index.d.ts +27 -5
  298. package/dist/vitest/src/index.js +18 -5
  299. package/dist/webdriver/src/driver.d.ts +63 -11
  300. package/dist/webdriver/src/driver.js +57 -6
  301. package/dist/webdriver/src/index.d.ts +8 -0
  302. package/dist/webdriver/src/index.js +1 -0
  303. package/dist/webdriver/src/protocol.d.ts +75 -6
  304. package/dist/webdriver/src/protocol.js +79 -6
  305. package/docs/agents.md +137 -0
  306. package/docs/deploying.md +345 -0
  307. package/docs/dogfooding.md +175 -0
  308. package/docs/extending.md +242 -0
  309. package/docs/integrating.md +485 -0
  310. package/docs/reference/bun.md +141 -0
  311. package/docs/reference/cli.md +146 -0
  312. package/docs/reference/core.md +2426 -0
  313. package/docs/reference/detox.md +150 -0
  314. package/docs/reference/http-api.md +303 -0
  315. package/docs/reference/playwright.md +303 -0
  316. package/docs/reference/reports.md +7098 -0
  317. package/docs/reference/schema.md +1651 -0
  318. package/docs/reference/server.md +685 -0
  319. package/docs/reference/vitest.md +45 -0
  320. package/docs/reference/webdriver.md +330 -0
  321. package/docs/report-backends.md +144 -0
  322. package/docs/report-contract.md +400 -0
  323. package/docs/reporting-issues.md +160 -0
  324. package/docs/server.md +285 -0
  325. package/docs/statecharts.md +641 -0
  326. package/llms-full.txt +3506 -0
  327. package/llms.txt +47 -0
  328. package/package.json +32 -4
  329. package/packages/core/README.md +2 -1
  330. package/packages/reports/README.md +65 -0
  331. package/packages/reports/STORAGE.md +4 -0
  332. package/packages/schema/README.md +14 -0
  333. package/packages/schema/schemas/check-detail.schema.json +1032 -0
  334. package/packages/schema/schemas/checks-result.schema.json +26 -0
  335. package/packages/schema/schemas/command-error.schema.json +35 -0
  336. package/packages/schema/schemas/doctor-result.schema.json +60 -0
  337. package/packages/schema/schemas/effective-delta.schema.json +490 -0
  338. package/packages/schema/schemas/effective-evidence.schema.json +471 -0
  339. package/packages/schema/schemas/evidence-page.schema.json +271 -0
  340. package/packages/schema/schemas/hello-event.schema.json +22 -0
  341. package/packages/schema/schemas/init-plan.schema.json +347 -0
  342. package/packages/schema/schemas/layer-rows.schema.json +199 -0
  343. package/packages/schema/schemas/layer.schema.json +2888 -0
  344. package/packages/schema/schemas/merge-result.schema.json +40 -0
  345. package/packages/schema/schemas/outline.schema.json +62 -0
  346. package/packages/schema/schemas/problem.schema.json +37 -0
  347. package/packages/schema/schemas/publish-checks.schema.json +1413 -0
  348. package/packages/schema/schemas/publish-result.schema.json +168 -0
  349. package/packages/schema/schemas/ready.schema.json +68 -0
  350. package/packages/schema/schemas/report-event.schema.json +100 -0
  351. package/packages/schema/schemas/report-status.schema.json +370 -0
  352. package/packages/schema/schemas/server-config.schema.json +194 -0
  353. package/packages/schema/schemas/server-info.schema.json +114 -0
  354. package/packages/schema/schemas/spec-set.schema.json +103 -0
  355. package/packages/schema/schemas/store-listing.schema.json +29 -0
  356. package/packages/schema/schemas/store-write-result.schema.json +28 -0
  357. package/packages/schema/schemas/stream-result.schema.json +59 -0
  358. package/packages/server/README.md +43 -0
  359. package/packages/server/openapi.json +6699 -0
  360. package/packages/visualizer/README.md +21 -0
  361. package/packages/visualizer/src/app/AppShell.tsx +9 -2
  362. package/packages/visualizer/src/app/report-sources.tsx +6 -4
  363. package/packages/visualizer/src/app/router.tsx +3 -3
  364. package/packages/visualizer/src/components/Header.module.css +35 -0
  365. package/packages/visualizer/src/components/Header.tsx +40 -3
  366. package/packages/visualizer/src/data/adapters/adapter.ts +5 -17
  367. package/packages/visualizer/src/data/adapters/index.ts +10 -1
  368. package/packages/visualizer/src/evidence/api.ts +14 -2
  369. package/packages/visualizer/src/evidence/artifacts.module.css +213 -0
  370. package/packages/visualizer/src/evidence/artifacts.tsx +272 -0
  371. package/packages/visualizer/src/evidence/check-detail.tsx +3 -1
  372. package/packages/visualizer/src/evidence/evidence-context.tsx +74 -12
  373. package/packages/visualizer/src/evidence/spec-page.tsx +23 -16
  374. package/packages/visualizer/src/find/Finder.tsx +1 -7
  375. package/packages/visualizer/src/find/open.ts +4 -0
  376. package/packages/visualizer/src/live/live-stream.ts +204 -0
  377. package/packages/visualizer/src/runtime.ts +19 -0
  378. package/packages/visualizer/vite/atlas-server-proxy.ts +36 -0
  379. package/packages/visualizer/vite.config.ts +11 -3
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @module Server configuration schema
3
+ *
4
+ * The schema of `atlas.server.json`, the file that configures `atlas serve` and `atlas dev`: where to listen, which
5
+ * folder and further backends hold the data, which bearer tokens may read, publish or administer, and limits. Every
6
+ * field has a default, so an empty file is a working server. Unlike the report format, unknown keys are an error, so
7
+ * a typo is reported instead of ignored. Flags and environment variables override the file.
8
+ *
9
+ * @see docs/deploying.md
10
+ * @see docs/server.md
11
+ */
12
+ import { z } from 'zod/v4';
13
+ /** What a bearer token may do: `read` (look), `publish` (also upload) or `admin` (also remove scratch objects). */
14
+ export declare const ServerRoleSchema: z.ZodEnum<{
15
+ read: "read";
16
+ publish: "publish";
17
+ admin: "admin";
18
+ }>;
19
+ /** One of the roles of `ServerRoleSchema`. */
20
+ export type ServerRole = z.infer<typeof ServerRoleSchema>;
21
+ /**
22
+ * A further store the server reads together with its data folder, and optionally writes to: an id, a label and a
23
+ * location URL.
24
+ */
25
+ export declare const ServerBackendSchema: z.ZodObject<{
26
+ id: z.ZodString;
27
+ label: z.ZodOptional<z.ZodString>;
28
+ url: z.ZodString;
29
+ write: z.ZodOptional<z.ZodBoolean>;
30
+ }, z.core.$strict>;
31
+ /**
32
+ * A bearer token: a name for logs, a role, and the token itself or the name of the environment variable that holds it
33
+ * (exactly one of the two).
34
+ */
35
+ export declare const ServerTokenSchema: z.ZodObject<{
36
+ name: z.ZodString;
37
+ role: z.ZodEnum<{
38
+ read: "read";
39
+ publish: "publish";
40
+ admin: "admin";
41
+ }>;
42
+ token: z.ZodOptional<z.ZodString>;
43
+ tokenEnv: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$strict>;
45
+ /**
46
+ * The whole `atlas.server.json`: listening address, data folder, backends and write target, authentication, the
47
+ * viewer to serve, which layers take part in the report, refresh and heartbeat intervals, request limits and logging.
48
+ */
49
+ export declare const ServerConfigSchema: z.ZodObject<{
50
+ $schema: z.ZodOptional<z.ZodString>;
51
+ host: z.ZodDefault<z.ZodString>;
52
+ port: z.ZodDefault<z.ZodNumber>;
53
+ data: z.ZodDefault<z.ZodString>;
54
+ backends: z.ZodDefault<z.ZodArray<z.ZodObject<{
55
+ id: z.ZodString;
56
+ label: z.ZodOptional<z.ZodString>;
57
+ url: z.ZodString;
58
+ write: z.ZodOptional<z.ZodBoolean>;
59
+ }, z.core.$strict>>>;
60
+ write: z.ZodOptional<z.ZodString>;
61
+ auth: z.ZodDefault<z.ZodObject<{
62
+ tokens: z.ZodDefault<z.ZodArray<z.ZodObject<{
63
+ name: z.ZodString;
64
+ role: z.ZodEnum<{
65
+ read: "read";
66
+ publish: "publish";
67
+ admin: "admin";
68
+ }>;
69
+ token: z.ZodOptional<z.ZodString>;
70
+ tokenEnv: z.ZodOptional<z.ZodString>;
71
+ }, z.core.$strict>>>;
72
+ anonymousRead: z.ZodDefault<z.ZodBoolean>;
73
+ insecure: z.ZodDefault<z.ZodBoolean>;
74
+ }, z.core.$strict>>;
75
+ site: z.ZodOptional<z.ZodString>;
76
+ outlineBranch: z.ZodOptional<z.ZodString>;
77
+ include: z.ZodDefault<z.ZodObject<{
78
+ branches: z.ZodOptional<z.ZodArray<z.ZodString>>;
79
+ ignoreModified: z.ZodOptional<z.ZodBoolean>;
80
+ }, z.core.$strict>>;
81
+ refreshSeconds: z.ZodDefault<z.ZodNumber>;
82
+ limits: z.ZodDefault<z.ZodObject<{
83
+ maxObjectMiB: z.ZodDefault<z.ZodNumber>;
84
+ maxJsonMiB: z.ZodDefault<z.ZodNumber>;
85
+ maxStreams: z.ZodDefault<z.ZodNumber>;
86
+ }, z.core.$strict>>;
87
+ heartbeatSeconds: z.ZodDefault<z.ZodNumber>;
88
+ log: z.ZodDefault<z.ZodBoolean>;
89
+ }, z.core.$strict>;
90
+ /** A server configuration after parsing, with every default applied. */
91
+ export type ServerConfig = z.output<typeof ServerConfigSchema>;
92
+ /** A server configuration as written, before defaults are applied. */
93
+ export type ServerConfigInput = z.input<typeof ServerConfigSchema>;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @module Server configuration schema
3
+ *
4
+ * The schema of `atlas.server.json`, the file that configures `atlas serve` and `atlas dev`: where to listen, which
5
+ * folder and further backends hold the data, which bearer tokens may read, publish or administer, and limits. Every
6
+ * field has a default, so an empty file is a working server. Unlike the report format, unknown keys are an error, so
7
+ * a typo is reported instead of ignored. Flags and environment variables override the file.
8
+ *
9
+ * @see docs/deploying.md
10
+ * @see docs/server.md
11
+ */
12
+ import { z } from 'zod/v4';
13
+ /** What a bearer token may do: `read` (look), `publish` (also upload) or `admin` (also remove scratch objects). */
14
+ export const ServerRoleSchema = z.enum(['read', 'publish', 'admin']);
15
+ /**
16
+ * A further store the server reads together with its data folder, and optionally writes to: an id, a label and a
17
+ * location URL.
18
+ */
19
+ export const ServerBackendSchema = z.strictObject({
20
+ id: z.string().regex(/^[a-z0-9-]+$/).describe('Lowercase letters, digits and hyphens. Names where a result came from'),
21
+ label: z.string().optional(),
22
+ url: z.string().min(1).describe('A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)'),
23
+ write: z.boolean().optional().describe('Uploads go here instead of the data folder. At most one backend is the write target')
24
+ });
25
+ /**
26
+ * A bearer token: a name for logs, a role, and the token itself or the name of the environment variable that holds it
27
+ * (exactly one of the two).
28
+ */
29
+ export const ServerTokenSchema = z
30
+ .strictObject({
31
+ name: z.string().min(1).describe('Shown in logs, never the token itself'),
32
+ role: ServerRoleSchema.describe('`read` may look. `publish` may also upload. `admin` may also remove scratch objects'),
33
+ token: z.string().min(12).optional().describe('The token. Prefer `tokenEnv`, so the file holds no secret'),
34
+ tokenEnv: z.string().optional().describe('The name of the environment variable that holds the token')
35
+ })
36
+ .refine((value) => (value.token === undefined) !== (value.tokenEnv === undefined), { message: 'Give exactly one of token or tokenEnv' });
37
+ /**
38
+ * The whole `atlas.server.json`: listening address, data folder, backends and write target, authentication, the
39
+ * viewer to serve, which layers take part in the report, refresh and heartbeat intervals, request limits and logging.
40
+ */
41
+ export const ServerConfigSchema = z.strictObject({
42
+ $schema: z.string().optional(),
43
+ host: z.string().default('127.0.0.1').describe('Where to listen. 127.0.0.1 keeps it on this machine; 0.0.0.0 is every interface and needs tokens (or `auth.insecure`)'),
44
+ port: z.number().int().min(0).max(65535).default(8080),
45
+ data: z.string().default('./atlas-data').describe('The folder that is the default backend and the default write target: layers, specs and runs live here'),
46
+ backends: z.array(ServerBackendSchema).default([]).describe('Further backends, read together with the data folder: S3, another server, a device lab'),
47
+ write: z.string().optional().describe('The id of the backend uploads go to. Default: the data folder'),
48
+ auth: z
49
+ .strictObject({
50
+ tokens: z.array(ServerTokenSchema).default([]),
51
+ anonymousRead: z.boolean().default(false).describe('Let anyone look without a token. Uploading still needs one'),
52
+ insecure: z.boolean().default(false).describe('Allow listening on every interface with no tokens at all')
53
+ })
54
+ .default({ tokens: [], anonymousRead: false, insecure: false }),
55
+ site: z.string().optional().describe('The built viewer. Default: the one shipped with Atlas, built on first start'),
56
+ outlineBranch: z.string().optional().describe('Which branch\'s specs the report is laid over. Default main, then master, then the newest'),
57
+ include: z
58
+ .strictObject({
59
+ branches: z.array(z.string()).optional().describe('Only layers recorded on these branches take part'),
60
+ ignoreModified: z.boolean().optional().describe('Leave out layers from modified checkouts and unknown origins')
61
+ })
62
+ .default({}),
63
+ refreshSeconds: z.number().min(1).default(10).describe('How often the backends are looked at for layers written by something other than this server'),
64
+ limits: z
65
+ .strictObject({
66
+ maxObjectMiB: z.number().positive().default(256).describe('The largest object an upload may be'),
67
+ maxJsonMiB: z.number().positive().default(32).describe('The largest JSON body (a manifest, a checks request)'),
68
+ maxStreams: z.number().int().positive().default(500).describe('Viewers that may be connected for live updates at once')
69
+ })
70
+ .default({ maxObjectMiB: 256, maxJsonMiB: 32, maxStreams: 500 }),
71
+ heartbeatSeconds: z.number().min(1).default(15).describe('How often a live connection is touched, so proxies keep it open'),
72
+ log: z.boolean().default(true).describe('One JSON line per request')
73
+ });
@@ -1,17 +1,42 @@
1
+ /**
2
+ * @module Statechart spec schemas
3
+ *
4
+ * Zod schemas for the files in a specs directory: the `meta` a chart's states carry, XState-style machine configs,
5
+ * `journeys.yaml`, the optional product map `atlas.yaml`, `<chart>.layout.json` and `specs/index.json`, plus the
6
+ * filename patterns that identify statechart files. They describe what a person writes, so readers validate each
7
+ * piece on its own and report problems rather than rejecting the whole spec (the visualizer's `parse/spec.ts` does).
8
+ * The pure subset of statecharts that Atlas executes is documented in `docs/statecharts.md`.
9
+ *
10
+ * @see docs/statecharts.md
11
+ */
1
12
  import { z } from 'zod/v4';
13
+ /**
14
+ * Version of the spec file formats, currently 1. `LayoutFileSchema` and `SpecIndexSchema` accept only `schemaVersion:
15
+ * 1`.
16
+ */
2
17
  export declare const SPEC_SCHEMA_VERSION = 1;
18
+ /**
19
+ * A state's link to its design: an image (URL or spec-relative path), and optionally where the design lives, such as
20
+ * a Figma frame.
21
+ */
3
22
  export declare const DesignLinkSchema: z.ZodObject<{
4
23
  image: z.ZodString;
5
24
  url: z.ZodOptional<z.ZodString>;
6
25
  label: z.ZodOptional<z.ZodString>;
7
26
  }, z.core.$strip>;
27
+ /** A parsed `DesignLinkSchema` value. */
8
28
  export type DesignLink = z.infer<typeof DesignLinkSchema>;
29
+ /** One Given/When/Then line of a business contract: the keyword, its text, and an optional data table or doc string. */
9
30
  export declare const ContractStepSchema: z.ZodObject<{
10
31
  keyword: z.ZodString;
11
32
  text: z.ZodString;
12
33
  table: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
13
34
  docString: z.ZodOptional<z.ZodString>;
14
35
  }, z.core.$strip>;
36
+ /**
37
+ * A business rule copied from its authoritative `source` as exact Given/When/Then steps, carried in a state's
38
+ * `meta.contracts`.
39
+ */
15
40
  export declare const BusinessContractSchema: z.ZodObject<{
16
41
  id: z.ZodString;
17
42
  name: z.ZodString;
@@ -24,6 +49,7 @@ export declare const BusinessContractSchema: z.ZodObject<{
24
49
  docString: z.ZodOptional<z.ZodString>;
25
50
  }, z.core.$strip>>;
26
51
  }, z.core.$strip>;
52
+ /** A parsed `BusinessContractSchema` value. */
27
53
  export type BusinessContract = z.infer<typeof BusinessContractSchema>;
28
54
  /**
29
55
  * Every field a state's `meta` may carry. Each one is optional on its own: the visualizer keeps
@@ -72,6 +98,7 @@ export declare const StateMetaShape: {
72
98
  }>>>;
73
99
  readonly timeEvents: z.ZodRecord<z.ZodString, z.ZodString>;
74
100
  };
101
+ /** `StateMetaShape` with every field optional: the `meta` of a state or of a whole chart. */
75
102
  export declare const StateMetaSchema: z.ZodObject<{
76
103
  description: z.ZodOptional<z.ZodString>;
77
104
  snapshot: z.ZodOptional<z.ZodString>;
@@ -115,12 +142,20 @@ export declare const StateMetaSchema: z.ZodObject<{
115
142
  }>>>>;
116
143
  timeEvents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
117
144
  }, z.core.$strip>;
145
+ /** A parsed `StateMetaSchema` value. */
118
146
  export type StateMeta = z.infer<typeof StateMetaSchema>;
147
+ /** The target of an event transition: a state name (or `#id`) written as a string, or an object with `target`. */
119
148
  export declare const TransitionTargetSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
120
149
  target: z.ZodString;
121
150
  }, z.core.$strip>]>;
151
+ /** Kinds of state in the composed map: `atomic`, `compound`, `parallel`, `final`. */
122
152
  export declare const STATE_TYPES: readonly ["atomic", "compound", "parallel", "final"];
153
+ /** One of `STATE_TYPES`. */
123
154
  export type StateType = (typeof STATE_TYPES)[number];
155
+ /**
156
+ * TypeScript shape of one state of a machine config, matching `StateNodeSchema`: optional `id`, `initial`, `type`
157
+ * (`parallel` or `final`), `meta`, nested `states` and `on` transitions.
158
+ */
124
159
  export type StateNodeConfig = {
125
160
  id?: string | undefined;
126
161
  initial?: string | undefined;
@@ -129,7 +164,16 @@ export type StateNodeConfig = {
129
164
  states?: Record<string, StateNodeConfig> | undefined;
130
165
  on?: Record<string, z.infer<typeof TransitionTargetSchema>> | undefined;
131
166
  };
167
+ /**
168
+ * One state of an XState machine config, recursively, restricted to what Atlas reads: nesting, `parallel` and `final`
169
+ * types, event transitions and `meta`. Guards, actions and the rest of XState are rejected by `atlas lint`, not by
170
+ * this schema. Emitted as `state-node.schema.json`.
171
+ */
132
172
  export declare const StateNodeSchema: z.ZodType<StateNodeConfig>;
173
+ /**
174
+ * A whole chart: its `id`, optional `initial`, `type` and `meta`, and its `states`. The states are `unknown` here;
175
+ * validate each with `StateNodeSchema`.
176
+ */
133
177
  export declare const MachineSchema: z.ZodObject<{
134
178
  id: z.ZodString;
135
179
  initial: z.ZodOptional<z.ZodString>;
@@ -181,6 +225,11 @@ export declare const MachineSchema: z.ZodObject<{
181
225
  }, z.core.$strip>>;
182
226
  states: z.ZodRecord<z.ZodString, z.ZodUnknown>;
183
227
  }, z.core.$strip>;
228
+ /**
229
+ * One curated journey in `journeys.yaml`: the business events replayed in order from the initial state, the states it
230
+ * must end in, and an optional owner and tour flag. `atlas lint` replays every journey, and `atlas run` runs each as
231
+ * its own path.
232
+ */
184
233
  export declare const JourneySchema: z.ZodObject<{
185
234
  description: z.ZodOptional<z.ZodString>;
186
235
  events: z.ZodArray<z.ZodString>;
@@ -188,10 +237,19 @@ export declare const JourneySchema: z.ZodObject<{
188
237
  owner: z.ZodOptional<z.ZodString>;
189
238
  tour: z.ZodOptional<z.ZodBoolean>;
190
239
  }, z.core.$strip>;
240
+ /** A parsed `JourneySchema` value. */
191
241
  export type JourneyConfig = z.infer<typeof JourneySchema>;
242
+ /**
243
+ * `journeys.yaml`: a `journeys` map from journey name to journey. The entries are `unknown` here; validate each with
244
+ * `JourneySchema`.
245
+ */
192
246
  export declare const JourneysFileSchema: z.ZodObject<{
193
247
  journeys: z.ZodRecord<z.ZodString, z.ZodUnknown>;
194
248
  }, z.core.$strip>;
249
+ /**
250
+ * A product area declared in `atlas.yaml`: its id, display name, description, owner and the spec-relative directories
251
+ * whose charts belong to it.
252
+ */
195
253
  export declare const AtlasContextSchema: z.ZodObject<{
196
254
  id: z.ZodString;
197
255
  name: z.ZodOptional<z.ZodString>;
@@ -199,6 +257,10 @@ export declare const AtlasContextSchema: z.ZodObject<{
199
257
  owner: z.ZodOptional<z.ZodString>;
200
258
  directories: z.ZodOptional<z.ZodArray<z.ZodString>>;
201
259
  }, z.core.$strip>;
260
+ /**
261
+ * A hand-off declared in `atlas.yaml` between two product areas: the ids of the area it `from` and `to`, and the
262
+ * event that passes control.
263
+ */
202
264
  export declare const AtlasHandOffSchema: z.ZodObject<{
203
265
  from: z.ZodString;
204
266
  to: z.ZodString;
@@ -229,6 +291,7 @@ export declare const LayoutFileSchema: z.ZodObject<{
229
291
  height: z.ZodNumber;
230
292
  }, z.core.$strip>>>;
231
293
  }, z.core.$strip>;
294
+ /** A parsed `LayoutFileSchema` value. */
232
295
  export type LayoutFile = z.infer<typeof LayoutFileSchema>;
233
296
  /**
234
297
  * `specs/index.json`: the statechart files under the specs root, so a static host can serve the
@@ -240,6 +303,12 @@ export declare const SpecIndexSchema: z.ZodObject<{
240
303
  ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
241
304
  files: z.ZodArray<z.ZodString>;
242
305
  }, z.core.$strip>;
306
+ /** A parsed `SpecIndexSchema` value. */
243
307
  export type SpecIndex = z.infer<typeof SpecIndexSchema>;
308
+ /**
309
+ * Patterns for the paths of statechart spec files: `atlas.yaml`, `machine.yaml|json` and `*.machine.yaml|json`,
310
+ * `*.scxml`, `journeys.yaml`, `known-issues.md`, `open-questions.md` and `*.layout.json`, in any directory.
311
+ */
244
312
  export declare const STATECHART_FILE_PATTERNS: RegExp[];
313
+ /** Whether a spec-relative path (using `/`) matches `STATECHART_FILE_PATTERNS`. */
245
314
  export declare function isStatechartFile(path: string): boolean;
@@ -1,17 +1,41 @@
1
+ /**
2
+ * @module Statechart spec schemas
3
+ *
4
+ * Zod schemas for the files in a specs directory: the `meta` a chart's states carry, XState-style machine configs,
5
+ * `journeys.yaml`, the optional product map `atlas.yaml`, `<chart>.layout.json` and `specs/index.json`, plus the
6
+ * filename patterns that identify statechart files. They describe what a person writes, so readers validate each
7
+ * piece on its own and report problems rather than rejecting the whole spec (the visualizer's `parse/spec.ts` does).
8
+ * The pure subset of statecharts that Atlas executes is documented in `docs/statecharts.md`.
9
+ *
10
+ * @see docs/statecharts.md
11
+ */
1
12
  import { z } from 'zod/v4';
2
13
  import { ConfidenceSchema, EventKindSchema } from './common.js';
14
+ /**
15
+ * Version of the spec file formats, currently 1. `LayoutFileSchema` and `SpecIndexSchema` accept only `schemaVersion:
16
+ * 1`.
17
+ */
3
18
  export const SPEC_SCHEMA_VERSION = 1;
19
+ /**
20
+ * A state's link to its design: an image (URL or spec-relative path), and optionally where the design lives, such as
21
+ * a Figma frame.
22
+ */
4
23
  export const DesignLinkSchema = z.object({
5
24
  image: z.string().min(1).describe('URL or spec-relative path of a design frame'),
6
25
  url: z.string().optional().describe('Where the design lives, for example a Figma frame link'),
7
26
  label: z.string().optional()
8
27
  });
28
+ /** One Given/When/Then line of a business contract: the keyword, its text, and an optional data table or doc string. */
9
29
  export const ContractStepSchema = z.object({
10
30
  keyword: z.string().min(1),
11
31
  text: z.string(),
12
32
  table: z.array(z.array(z.string())).optional(),
13
33
  docString: z.string().optional()
14
34
  });
35
+ /**
36
+ * A business rule copied from its authoritative `source` as exact Given/When/Then steps, carried in a state's
37
+ * `meta.contracts`.
38
+ */
15
39
  export const BusinessContractSchema = z.object({
16
40
  id: z.string().min(1),
17
41
  name: z.string().min(1),
@@ -47,12 +71,20 @@ export const StateMetaShape = {
47
71
  .record(z.string(), z.string())
48
72
  .describe('Chart-level: time events and the span each one jumps, for example "5 minutes"')
49
73
  };
74
+ /** `StateMetaShape` with every field optional: the `meta` of a state or of a whole chart. */
50
75
  export const StateMetaSchema = z.object(StateMetaShape).partial();
76
+ /** The target of an event transition: a state name (or `#id`) written as a string, or an object with `target`. */
51
77
  export const TransitionTargetSchema = z.union([
52
78
  z.string().min(1),
53
79
  z.object({ target: z.string().min(1) })
54
80
  ]);
81
+ /** Kinds of state in the composed map: `atomic`, `compound`, `parallel`, `final`. */
55
82
  export const STATE_TYPES = ['atomic', 'compound', 'parallel', 'final'];
83
+ /**
84
+ * One state of an XState machine config, recursively, restricted to what Atlas reads: nesting, `parallel` and `final`
85
+ * types, event transitions and `meta`. Guards, actions and the rest of XState are rejected by `atlas lint`, not by
86
+ * this schema. Emitted as `state-node.schema.json`.
87
+ */
56
88
  export const StateNodeSchema = z.lazy(() => z.object({
57
89
  id: z.string().optional(),
58
90
  initial: z.string().optional(),
@@ -61,6 +93,10 @@ export const StateNodeSchema = z.lazy(() => z.object({
61
93
  states: z.record(z.string(), StateNodeSchema).optional(),
62
94
  on: z.record(z.string(), TransitionTargetSchema).optional()
63
95
  }));
96
+ /**
97
+ * A whole chart: its `id`, optional `initial`, `type` and `meta`, and its `states`. The states are `unknown` here;
98
+ * validate each with `StateNodeSchema`.
99
+ */
64
100
  export const MachineSchema = z.object({
65
101
  id: z.string().min(1),
66
102
  initial: z.string().optional(),
@@ -68,6 +104,11 @@ export const MachineSchema = z.object({
68
104
  meta: StateMetaSchema.optional(),
69
105
  states: z.record(z.string(), z.unknown())
70
106
  });
107
+ /**
108
+ * One curated journey in `journeys.yaml`: the business events replayed in order from the initial state, the states it
109
+ * must end in, and an optional owner and tour flag. `atlas lint` replays every journey, and `atlas run` runs each as
110
+ * its own path.
111
+ */
71
112
  export const JourneySchema = z.object({
72
113
  description: z.string().optional(),
73
114
  events: z.array(z.string()),
@@ -75,9 +116,17 @@ export const JourneySchema = z.object({
75
116
  owner: z.string().optional(),
76
117
  tour: z.boolean().optional().describe('Include in the guided tour')
77
118
  });
119
+ /**
120
+ * `journeys.yaml`: a `journeys` map from journey name to journey. The entries are `unknown` here; validate each with
121
+ * `JourneySchema`.
122
+ */
78
123
  export const JourneysFileSchema = z.object({
79
124
  journeys: z.record(z.string(), z.unknown())
80
125
  });
126
+ /**
127
+ * A product area declared in `atlas.yaml`: its id, display name, description, owner and the spec-relative directories
128
+ * whose charts belong to it.
129
+ */
81
130
  export const AtlasContextSchema = z.object({
82
131
  id: z.string().min(1),
83
132
  name: z.string().optional(),
@@ -85,6 +134,10 @@ export const AtlasContextSchema = z.object({
85
134
  owner: z.string().optional(),
86
135
  directories: z.array(z.string()).optional().describe('Spec-relative directories holding its charts')
87
136
  });
137
+ /**
138
+ * A hand-off declared in `atlas.yaml` between two product areas: the ids of the area it `from` and `to`, and the
139
+ * event that passes control.
140
+ */
88
141
  export const AtlasHandOffSchema = z.object({
89
142
  from: z.string().min(1),
90
143
  to: z.string().min(1),
@@ -119,6 +172,10 @@ export const SpecIndexSchema = z.object({
119
172
  ref: z.string().nullable().optional(),
120
173
  files: z.array(z.string())
121
174
  });
175
+ /**
176
+ * Patterns for the paths of statechart spec files: `atlas.yaml`, `machine.yaml|json` and `*.machine.yaml|json`,
177
+ * `*.scxml`, `journeys.yaml`, `known-issues.md`, `open-questions.md` and `*.layout.json`, in any directory.
178
+ */
122
179
  export const STATECHART_FILE_PATTERNS = [
123
180
  /(^|\/)atlas\.ya?ml$/,
124
181
  /(^|\/)([\w.-]+\.)?machine\.(ya?ml|json)$/,
@@ -128,6 +185,7 @@ export const STATECHART_FILE_PATTERNS = [
128
185
  /(^|\/)open-questions\.md$/,
129
186
  /(^|\/)[\w.-]+\.layout\.json$/
130
187
  ];
188
+ /** Whether a spec-relative path (using `/`) matches `STATECHART_FILE_PATTERNS`. */
131
189
  export function isStatechartFile(path) {
132
190
  return STATECHART_FILE_PATTERNS.some((pattern) => pattern.test(path));
133
191
  }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @module The Atlas server application
3
+ *
4
+ * `createAtlasServer` is the whole of a project's Atlas as one `fetch` handler: the API results are uploaded to, the live
5
+ * report every viewer is shown, the gate, the server-sent event stream, the specs and runs the viewer reads, the viewer
6
+ * itself, and the server's own description (`/api/openapi.json`, `/llms.txt`). What it knows lives in its backends (by
7
+ * default a folder on its own disk), so replacing it loses nothing. Every error leaves as an RFC 9457 problem document; every
8
+ * route is described in `openapi.ts` (a test holds the two together).
9
+ *
10
+ * @see docs/server.md
11
+ */
12
+ import { type BackendInput } from '../../reports/src/compose.js';
13
+ import type { LayerHeader } from '../../reports/src/evidence-types.js';
14
+ import { ReportIndex } from '../../reports/src/report-index.js';
15
+ import type { ResolvedToken } from './config.js';
16
+ import { EventHub } from './events.js';
17
+ /** What the server is built from: its `backends` (read together) and which one takes uploads (`write`), `tokens`, the built `site`, the report's filters (`include`, `outlineBranch`), `limits`, timings, `log`, and `now` for tests. */
18
+ export type AtlasServerOptions = {
19
+ /** Every backend, read together. */
20
+ readonly backends: readonly BackendInput[];
21
+ /** The id of the backend uploads go to. */
22
+ readonly write: string;
23
+ readonly tokens?: readonly ResolvedToken[];
24
+ readonly anonymousRead?: boolean;
25
+ /** The built viewer. Without it, only the API is served. */
26
+ readonly site?: string;
27
+ readonly outlineBranch?: string;
28
+ readonly include?: (layer: LayerHeader) => boolean;
29
+ readonly refreshMs?: number;
30
+ readonly limits?: {
31
+ readonly maxObjectMiB?: number;
32
+ readonly maxJsonMiB?: number;
33
+ readonly maxStreams?: number;
34
+ };
35
+ readonly heartbeatMs?: number;
36
+ readonly log?: (line: Record<string, unknown>) => void;
37
+ readonly now?: () => number;
38
+ readonly version?: string;
39
+ /** Extra runtime configuration written into the page. */
40
+ readonly page?: Record<string, unknown>;
41
+ };
42
+ /** A running server application: `fetch` (serve requests), `index` (the live report), `events` (the viewers), `routes` (what it answers), `ready` (the first pass over the backends is done) and `close`. */
43
+ export type AtlasServer = {
44
+ readonly fetch: (request: Request) => Promise<Response>;
45
+ readonly index: ReportIndex;
46
+ readonly events: EventHub;
47
+ /** The routes the server answers, as registered: what the OpenAPI document must describe (a test holds the two together). */
48
+ readonly routes: readonly {
49
+ readonly method: string;
50
+ readonly path: string;
51
+ }[];
52
+ /** Resolves when the first pass over the backends is done. */
53
+ readonly ready: Promise<void>;
54
+ /** Stop refreshing and end every live connection. */
55
+ close(): void;
56
+ };
57
+ /**
58
+ * The whole of a project's Atlas on one process: the API that results are uploaded to, the live report every
59
+ * viewer is shown, and the viewer itself. All of it is under one host, `/api` for the API and `/` for the page.
60
+ * What it knows lives in its backends (by default a folder on its own disk), so replacing it loses nothing.
61
+ */
62
+ export declare function createAtlasServer(options: AtlasServerOptions): AtlasServer;