blume 2.1.0 → 2.1.2

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 (450) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/dist/cli/{chunk-ga0pf4aj.js → chunk-0n9xkp3d.js} +12 -3
  3. package/dist/cli/{chunk-ga0pf4aj.js.map → chunk-0n9xkp3d.js.map} +3 -3
  4. package/dist/cli/{chunk-43zcf4gz.js → chunk-0pmb4tr4.js} +541 -368
  5. package/dist/cli/chunk-0pmb4tr4.js.map +35 -0
  6. package/dist/cli/{chunk-9geymqns.js → chunk-0w6hs479.js} +15 -15
  7. package/dist/cli/{chunk-xkz5xbtv.js → chunk-124fvmzq.js} +2802 -1422
  8. package/dist/cli/chunk-124fvmzq.js.map +220 -0
  9. package/dist/cli/chunk-150jk7km.js +52 -0
  10. package/dist/cli/chunk-150jk7km.js.map +10 -0
  11. package/dist/cli/{chunk-y4ykbark.js → chunk-1f882900.js} +2 -2
  12. package/dist/cli/{chunk-5ffywsmb.js → chunk-297ajdcv.js} +8 -6
  13. package/dist/cli/{chunk-5ffywsmb.js.map → chunk-297ajdcv.js.map} +3 -3
  14. package/dist/cli/{chunk-h2a48yhd.js → chunk-32khwcb6.js} +120 -16
  15. package/dist/cli/{chunk-h2a48yhd.js.map → chunk-32khwcb6.js.map} +10 -10
  16. package/dist/cli/{chunk-5cg2rzgf.js → chunk-36bxs9c7.js} +20 -49
  17. package/dist/cli/{chunk-5cg2rzgf.js.map → chunk-36bxs9c7.js.map} +4 -5
  18. package/dist/cli/{chunk-py62fewh.js → chunk-53jqw8z0.js} +3 -3
  19. package/dist/cli/{chunk-5wj2qwn2.js → chunk-58bt3hag.js} +4 -4
  20. package/dist/cli/{chunk-e7vvk5ya.js → chunk-5cmts6dv.js} +3 -3
  21. package/dist/cli/{chunk-y5h4r2y0.js → chunk-60hz265r.js} +15 -5
  22. package/dist/cli/chunk-60hz265r.js.map +10 -0
  23. package/dist/cli/chunk-74wfhv79.js +65 -0
  24. package/dist/cli/chunk-74wfhv79.js.map +10 -0
  25. package/dist/cli/{chunk-g2z9x01v.js → chunk-9qzgg6mj.js} +3 -3
  26. package/dist/cli/{chunk-q3wxxq39.js → chunk-a57yh0h9.js} +5 -5
  27. package/dist/cli/{chunk-713mngdq.js → chunk-ave1wcbr.js} +76 -10
  28. package/dist/cli/chunk-ave1wcbr.js.map +14 -0
  29. package/dist/cli/{chunk-2n4ps1b3.js → chunk-bqxaqn5p.js} +40 -22
  30. package/dist/cli/chunk-bqxaqn5p.js.map +15 -0
  31. package/dist/cli/{chunk-jnwj5kjj.js → chunk-bxwhtvw8.js} +20 -7
  32. package/dist/cli/{chunk-jnwj5kjj.js.map → chunk-bxwhtvw8.js.map} +3 -3
  33. package/dist/cli/chunk-ckrcm08h.js +324 -0
  34. package/dist/cli/chunk-ckrcm08h.js.map +14 -0
  35. package/dist/cli/{chunk-2f3ndkpw.js → chunk-desvm72z.js} +3 -3
  36. package/dist/cli/{chunk-gp84za0h.js → chunk-dhwtqnnd.js} +2 -2
  37. package/dist/cli/{chunk-4h8z9vv5.js → chunk-dpy8qdjf.js} +93 -47
  38. package/dist/cli/chunk-dpy8qdjf.js.map +17 -0
  39. package/dist/cli/{chunk-2f7n4qzt.js → chunk-dqhg54mr.js} +1 -1
  40. package/dist/cli/{chunk-0gz36akr.js → chunk-dv2z0rzf.js} +21 -5
  41. package/dist/cli/chunk-dv2z0rzf.js.map +12 -0
  42. package/dist/cli/{chunk-cm89scdv.js → chunk-es8h0v3j.js} +9 -11
  43. package/dist/cli/{chunk-cm89scdv.js.map → chunk-es8h0v3j.js.map} +3 -3
  44. package/dist/cli/{chunk-zhvd6adm.js → chunk-gfc5fqvf.js} +14 -14
  45. package/dist/cli/{chunk-nd1821sk.js → chunk-gxtg6ed2.js} +33 -19
  46. package/dist/cli/chunk-gxtg6ed2.js.map +10 -0
  47. package/dist/cli/{chunk-p804f3pe.js → chunk-hvcxng5f.js} +6 -6
  48. package/dist/cli/{chunk-ta27feev.js → chunk-j1x92mx9.js} +21 -2
  49. package/dist/cli/chunk-j1x92mx9.js.map +10 -0
  50. package/dist/cli/{chunk-rekqz4qg.js → chunk-k3gr1nm9.js} +19 -16
  51. package/dist/cli/chunk-k3gr1nm9.js.map +10 -0
  52. package/dist/cli/{chunk-1n228xqb.js → chunk-kdpzw38a.js} +2 -2
  53. package/dist/cli/{chunk-cy5bm0j0.js → chunk-ms9z66nz.js} +2 -2
  54. package/dist/cli/{chunk-cy5bm0j0.js.map → chunk-ms9z66nz.js.map} +2 -2
  55. package/dist/cli/{chunk-zf748avv.js → chunk-nbyvgnnm.js} +193 -286
  56. package/dist/cli/chunk-nbyvgnnm.js.map +36 -0
  57. package/dist/cli/{chunk-6bm0xpgd.js → chunk-s0bdnc7v.js} +2 -2
  58. package/dist/cli/{chunk-yxmk4pec.js → chunk-sc93apfs.js} +17 -16
  59. package/dist/cli/{chunk-yxmk4pec.js.map → chunk-sc93apfs.js.map} +3 -3
  60. package/dist/cli/{chunk-cmtcnh9f.js → chunk-tfycddbt.js} +2 -2
  61. package/dist/cli/{chunk-9xr4dgee.js → chunk-twy7psdz.js} +29 -16
  62. package/dist/cli/chunk-twy7psdz.js.map +10 -0
  63. package/dist/cli/{chunk-ntv4qrt7.js → chunk-y4msrwm9.js} +15 -15
  64. package/dist/cli/{chunk-yj17vs39.js → chunk-ydp3065p.js} +5 -5
  65. package/dist/cli/index.js +24 -19
  66. package/dist/cli/index.js.map +3 -3
  67. package/dist/types/ai/ask-context.d.ts +6 -2
  68. package/dist/types/ai/ask.d.ts +24 -5
  69. package/dist/types/ai/component-markdown.d.ts +2 -0
  70. package/dist/types/ai/openapi-components.d.ts +4 -1
  71. package/dist/types/analytics/clics.d.ts +37 -0
  72. package/dist/types/analytics/index.d.ts +2 -0
  73. package/dist/types/analytics/schema.d.ts +18 -0
  74. package/dist/types/astro/integration.d.ts +11 -4
  75. package/dist/types/astro/markdown-negotiation.d.ts +3 -0
  76. package/dist/types/astro/pages.d.ts +10 -0
  77. package/dist/types/cli/init/scaffold.d.ts +1 -1
  78. package/dist/types/components/content/api-field.d.ts +4 -1
  79. package/dist/types/components/content/api-page.d.ts +6 -1
  80. package/dist/types/components/openapi/code-samples.d.ts +29 -0
  81. package/dist/types/components/openapi/helpers.d.ts +22 -1
  82. package/dist/types/components/openapi/security.d.ts +10 -0
  83. package/dist/types/components/openapi/snippets.d.ts +60 -0
  84. package/dist/types/core/changelog-index.d.ts +8 -0
  85. package/dist/types/core/config-input.d.ts +37 -6
  86. package/dist/types/core/data.d.ts +4 -0
  87. package/dist/types/core/i18n-ui.d.ts +2 -0
  88. package/dist/types/core/links.d.ts +8 -0
  89. package/dist/types/core/powered-by.d.ts +12 -0
  90. package/dist/types/core/probe.d.ts +2 -0
  91. package/dist/types/core/project-graph.d.ts +6 -0
  92. package/dist/types/core/redirect-patterns.d.ts +11 -3
  93. package/dist/types/core/schema.d.ts +228 -3
  94. package/dist/types/core/sources/cache.d.ts +3 -0
  95. package/dist/types/core/sources/contentful-rich-text.d.ts +11 -2
  96. package/dist/types/core/sources/contentful.d.ts +17 -1
  97. package/dist/types/core/sources/lexical.d.ts +5 -0
  98. package/dist/types/core/sources/lower.d.ts +10 -2
  99. package/dist/types/core/sources/normalize.d.ts +20 -1
  100. package/dist/types/core/sources/notion.d.ts +8 -0
  101. package/dist/types/core/sources/remote.d.ts +37 -10
  102. package/dist/types/core/sources/sanity.d.ts +1 -1
  103. package/dist/types/core/types.d.ts +17 -0
  104. package/dist/types/deploy/adapter-output.d.ts +2 -1
  105. package/dist/types/deploy/adapters/cloudflare.d.ts +7 -5
  106. package/dist/types/deploy/adapters/node.d.ts +58 -23
  107. package/dist/types/deploy/adapters/registry.d.ts +10 -0
  108. package/dist/types/deploy/adapters/types.d.ts +3 -2
  109. package/dist/types/deploy/cloudflare-negotiation.d.ts +5 -2
  110. package/dist/types/deploy/node-headers.d.ts +12 -4
  111. package/dist/types/deploy/platforms/cloudflare.d.ts +10 -7
  112. package/dist/types/deploy/platforms/node.d.ts +3 -1
  113. package/dist/types/deploy/platforms/types.d.ts +18 -7
  114. package/dist/types/deploy/platforms/vercel.d.ts +21 -2
  115. package/dist/types/deploy/redirects.d.ts +17 -1
  116. package/dist/types/deploy/sitemap.d.ts +2 -1
  117. package/dist/types/deploy/vercel-negotiation.d.ts +44 -21
  118. package/dist/types/narration/build.d.ts +34 -12
  119. package/dist/types/narration/provider.d.ts +96 -8
  120. package/dist/types/openapi/checks.d.ts +27 -0
  121. package/dist/types/openapi/graphql.d.ts +6 -0
  122. package/dist/types/openapi/model.d.ts +15 -4
  123. package/dist/types/openapi/parse.d.ts +3 -0
  124. package/dist/types/openapi/references.d.ts +16 -0
  125. package/dist/types/openapi/sentence.d.ts +11 -1
  126. package/dist/types/ratelimit/index.d.ts +1 -1
  127. package/dist/types/ratelimit/schema.d.ts +8 -0
  128. package/dist/types/ratelimit/upstash.d.ts +39 -14
  129. package/dist/types/reference/graphql.d.ts +76 -1
  130. package/dist/types/reference/index.d.ts +1 -1
  131. package/dist/types/reference/openapi.d.ts +2 -2
  132. package/dist/types/reference/options.d.ts +37 -1
  133. package/dist/types/reference/schema.d.ts +84 -0
  134. package/dist/types/search/adapters/registry.d.ts +3 -0
  135. package/dist/types/search/adapters/typesense.d.ts +14 -4
  136. package/dist/types/search/build.d.ts +3 -1
  137. package/dist/types/search/orama-index.d.ts +9 -9
  138. package/dist/types/search/sync/algolia.d.ts +5 -2
  139. package/dist/types/search/sync/index.d.ts +3 -1
  140. package/dist/types/search/sync/typesense.d.ts +11 -7
  141. package/dist/types/seo/jsonld.d.ts +11 -6
  142. package/dist/types/sources/contentful.d.ts +16 -0
  143. package/dist/types/sources/github-releases.d.ts +8 -1
  144. package/dist/types/sources/notion.d.ts +8 -0
  145. package/dist/types/sources/payload.d.ts +2 -0
  146. package/dist/types/sources/registry.d.ts +63 -0
  147. package/dist/types/sources/shared.d.ts +3 -0
  148. package/dist/types/sources/strapi.d.ts +2 -0
  149. package/docs/01-quickstart.mdx +4 -2
  150. package/docs/02-deployment.mdx +59 -13
  151. package/docs/03-upgrading.mdx +2 -1
  152. package/docs/04-migrating.mdx +9 -9
  153. package/docs/08-faq.mdx +12 -12
  154. package/docs/advanced/changelog.mdx +30 -2
  155. package/docs/advanced/custom-pages.mdx +1 -1
  156. package/docs/advanced/skills.mdx +1 -1
  157. package/docs/cli/audit.mdx +30 -7
  158. package/docs/cli/doctor.mdx +6 -2
  159. package/docs/cli/evals.mdx +4 -4
  160. package/docs/cli/translate.mdx +1 -0
  161. package/docs/cli/validate.mdx +4 -3
  162. package/docs/configuration/analytics.mdx +19 -1
  163. package/docs/configuration/assistant.mdx +6 -2
  164. package/docs/configuration/customization.mdx +4 -2
  165. package/docs/configuration/export.mdx +5 -3
  166. package/docs/configuration/index.mdx +4 -2
  167. package/docs/configuration/narration.mdx +43 -6
  168. package/docs/configuration/rate-limiting.mdx +23 -2
  169. package/docs/configuration/search.mdx +37 -14
  170. package/docs/content/components.mdx +2 -2
  171. package/docs/content/frontmatter.mdx +5 -3
  172. package/docs/content/i18n.mdx +2 -2
  173. package/docs/content/includes.mdx +1 -1
  174. package/docs/content/navigation.mdx +8 -6
  175. package/docs/content/sources/contentful.mdx +9 -4
  176. package/docs/content/sources/custom.mdx +7 -3
  177. package/docs/content/sources/github-releases.mdx +12 -2
  178. package/docs/content/sources/index.mdx +3 -3
  179. package/docs/content/sources/notion.mdx +17 -2
  180. package/docs/content/sources/obsidian.mdx +3 -1
  181. package/docs/content/sources/payload.mdx +5 -2
  182. package/docs/content/sources/remote-mdx.mdx +6 -0
  183. package/docs/content/sources/sanity.mdx +4 -2
  184. package/docs/content/sources/strapi.mdx +5 -2
  185. package/docs/content/syntax.mdx +2 -2
  186. package/docs/discoverability/agent-discovery.mdx +1 -1
  187. package/docs/discoverability/index.mdx +1 -1
  188. package/docs/discoverability/json-api.mdx +2 -0
  189. package/docs/discoverability/llms-txt.mdx +1 -1
  190. package/docs/discoverability/markdown.mdx +3 -1
  191. package/docs/discoverability/mcp.mdx +6 -0
  192. package/docs/discoverability/sitemap-and-robots.mdx +1 -1
  193. package/docs/discoverability/structured-data.mdx +8 -6
  194. package/docs/references/api-pages.mdx +1 -1
  195. package/docs/references/asyncapi.mdx +5 -1
  196. package/docs/references/graphql.mdx +15 -1
  197. package/docs/references/openapi.mdx +64 -8
  198. package/package.json +9 -9
  199. package/skills/blume/SKILL.md +1 -1
  200. package/skills/blume-migrate/SKILL.md +2 -2
  201. package/skills/blume-migrate/assets/{oxfmt@0.67.0.patch → oxfmt@0.71.0.patch} +7 -7
  202. package/skills/blume-migrate/references/docusaurus.md +4 -4
  203. package/skills/blume-migrate/references/fumadocs.md +17 -13
  204. package/skills/blume-migrate/references/monorepo.md +5 -5
  205. package/skills/blume-migrate/references/nextra.md +8 -5
  206. package/skills/blume-migrate/references/starlight.md +9 -7
  207. package/src/ai/ask-context.ts +33 -3
  208. package/src/ai/ask-limits.ts +13 -0
  209. package/src/ai/ask.ts +24 -6
  210. package/src/ai/changelog-markdown.ts +11 -6
  211. package/src/ai/component-markdown.ts +1 -1
  212. package/src/ai/cors.ts +12 -3
  213. package/src/ai/mcp/query.ts +14 -6
  214. package/src/ai/openapi-components.ts +28 -4
  215. package/src/ai/relative-links.ts +4 -38
  216. package/src/analytics/clics.ts +58 -0
  217. package/src/analytics/head.ts +5 -0
  218. package/src/analytics/index.ts +2 -0
  219. package/src/analytics/schema.ts +2 -0
  220. package/src/astro/generate.ts +91 -56
  221. package/src/astro/integration.ts +72 -22
  222. package/src/astro/markdown-negotiation.ts +3 -0
  223. package/src/astro/module-types.ts +3 -1
  224. package/src/astro/pages.ts +23 -0
  225. package/src/astro/render-deps.ts +10 -5
  226. package/src/astro/runtime-deps.ts +23 -2
  227. package/src/astro/templates.ts +129 -81
  228. package/src/audit/catalog.ts +19 -3
  229. package/src/audit/checks/links.ts +14 -1
  230. package/src/audit/checks/network.ts +110 -6
  231. package/src/audit/checks/redirects.ts +6 -4
  232. package/src/audit/checks/robots.ts +58 -2
  233. package/src/audit/run.ts +3 -0
  234. package/src/audit/types.ts +2 -0
  235. package/src/audit/url.ts +14 -5
  236. package/src/blume-modules.d.ts +5 -1
  237. package/src/cli/args.ts +51 -0
  238. package/src/cli/build-failure.ts +23 -0
  239. package/src/cli/commands/audit.ts +10 -1
  240. package/src/cli/commands/dev.ts +18 -2
  241. package/src/cli/commands/doctor.ts +45 -12
  242. package/src/cli/commands/eval.ts +36 -4
  243. package/src/cli/commands/init.ts +6 -4
  244. package/src/cli/commands/validate.ts +10 -1
  245. package/src/cli/init/scaffold.ts +9 -6
  246. package/src/cli/prepare.ts +6 -3
  247. package/src/cli/required-secrets.ts +3 -2
  248. package/src/components/content/ApiPlayground.astro +6 -2
  249. package/src/components/content/api-field.ts +4 -1
  250. package/src/components/content/api-page.ts +31 -7
  251. package/src/components/content/mermaid-element.ts +15 -1
  252. package/src/components/content/view-switcher.ts +7 -4
  253. package/src/components/islands/hooks.ts +27 -1
  254. package/src/components/layout/NavTree.astro +49 -5
  255. package/src/components/layout/NavTreeScript.astro +18 -0
  256. package/src/components/layout/PageActions.astro +139 -24
  257. package/src/components/layout/PageLayout.astro +13 -3
  258. package/src/components/layout/RootLayout.astro +27 -14
  259. package/src/components/layout/Search.astro +17 -3
  260. package/src/components/layout/TableOfContents.astro +24 -17
  261. package/src/components/layout/analytics-client.ts +8 -8
  262. package/src/components/layout/head-scripts.ts +6 -1
  263. package/src/components/layout/search/algolia.ts +10 -1
  264. package/src/components/layout/search/analytics.ts +42 -14
  265. package/src/components/layout/search/endpoint.ts +48 -5
  266. package/src/components/layout/search/pagefind.ts +114 -5
  267. package/src/components/layout/search/types.ts +12 -0
  268. package/src/components/layout/search/typesense.ts +18 -6
  269. package/src/components/openapi/AsyncApiOperation.astro +14 -7
  270. package/src/components/openapi/Authorization.astro +10 -0
  271. package/src/components/openapi/GraphqlOperation.astro +5 -0
  272. package/src/components/openapi/Operation.astro +24 -1
  273. package/src/components/openapi/ParametersTable.astro +8 -4
  274. package/src/components/openapi/Playground.astro +7 -1
  275. package/src/components/openapi/RequestBody.astro +19 -2
  276. package/src/components/openapi/Responses.astro +1 -0
  277. package/src/components/openapi/SchemaTable.astro +15 -3
  278. package/src/components/openapi/async-snippets.ts +61 -5
  279. package/src/components/openapi/async.ts +123 -29
  280. package/src/components/openapi/graphql-helpers.ts +35 -12
  281. package/src/components/openapi/helpers.ts +36 -2
  282. package/src/components/openapi/message-model.ts +54 -11
  283. package/src/components/openapi/message.ts +14 -4
  284. package/src/components/openapi/operation-model.ts +16 -7
  285. package/src/components/openapi/playground-client.ts +77 -58
  286. package/src/components/openapi/playground-schema.ts +1 -1
  287. package/src/components/openapi/schema-tree.ts +44 -14
  288. package/src/components/openapi/security.ts +10 -0
  289. package/src/components/openapi/snippets.ts +5 -3
  290. package/src/components/openapi/validate-json.ts +4 -3
  291. package/src/components/powered-by-middleware.ts +33 -0
  292. package/src/core/changelog-index.ts +31 -1
  293. package/src/core/component-diagnostics.ts +53 -0
  294. package/src/core/component-overrides.ts +32 -0
  295. package/src/core/config-input.ts +42 -6
  296. package/src/core/data.ts +2 -0
  297. package/src/core/diagnostics.ts +5 -0
  298. package/src/core/i18n-ui.ts +2 -0
  299. package/src/core/includes.ts +1 -1
  300. package/src/core/links.ts +47 -17
  301. package/src/core/powered-by.ts +12 -0
  302. package/src/core/probe.ts +26 -6
  303. package/src/core/project-graph.ts +59 -18
  304. package/src/core/redirect-patterns.ts +36 -7
  305. package/src/core/schema.ts +26 -6
  306. package/src/core/sources/cache.ts +6 -0
  307. package/src/core/sources/contentful-rich-text.ts +29 -6
  308. package/src/core/sources/contentful.ts +135 -25
  309. package/src/core/sources/filesystem.ts +26 -4
  310. package/src/core/sources/github-releases.ts +12 -1
  311. package/src/core/sources/lexical.ts +15 -10
  312. package/src/core/sources/lower.ts +19 -3
  313. package/src/core/sources/mdx-remote.ts +62 -10
  314. package/src/core/sources/normalize.ts +227 -41
  315. package/src/core/sources/notion.ts +34 -10
  316. package/src/core/sources/obsidian.ts +16 -3
  317. package/src/core/sources/payload.ts +38 -15
  318. package/src/core/sources/remote.ts +72 -15
  319. package/src/core/sources/resolve.ts +11 -1
  320. package/src/core/sources/sanity.ts +43 -25
  321. package/src/core/sources/strapi.ts +2 -2
  322. package/src/core/types.ts +18 -0
  323. package/src/core/ui-packs/ar.ts +1 -0
  324. package/src/core/ui-packs/bg.ts +1 -0
  325. package/src/core/ui-packs/bn.ts +1 -0
  326. package/src/core/ui-packs/ca.ts +1 -0
  327. package/src/core/ui-packs/cs.ts +1 -0
  328. package/src/core/ui-packs/da.ts +1 -0
  329. package/src/core/ui-packs/de.ts +1 -0
  330. package/src/core/ui-packs/el.ts +1 -0
  331. package/src/core/ui-packs/es.ts +1 -0
  332. package/src/core/ui-packs/fa.ts +1 -0
  333. package/src/core/ui-packs/fi.ts +1 -0
  334. package/src/core/ui-packs/fr.ts +1 -0
  335. package/src/core/ui-packs/he.ts +1 -0
  336. package/src/core/ui-packs/hi.ts +1 -0
  337. package/src/core/ui-packs/hr.ts +1 -0
  338. package/src/core/ui-packs/hu.ts +1 -0
  339. package/src/core/ui-packs/id.ts +1 -0
  340. package/src/core/ui-packs/it.ts +1 -0
  341. package/src/core/ui-packs/ja.ts +1 -0
  342. package/src/core/ui-packs/ko.ts +1 -0
  343. package/src/core/ui-packs/nl.ts +1 -0
  344. package/src/core/ui-packs/no.ts +1 -0
  345. package/src/core/ui-packs/pl.ts +1 -0
  346. package/src/core/ui-packs/pt-br.ts +1 -0
  347. package/src/core/ui-packs/pt.ts +1 -0
  348. package/src/core/ui-packs/ro.ts +1 -0
  349. package/src/core/ui-packs/ru.ts +1 -0
  350. package/src/core/ui-packs/sk.ts +1 -0
  351. package/src/core/ui-packs/sr.ts +1 -0
  352. package/src/core/ui-packs/sv.ts +1 -0
  353. package/src/core/ui-packs/th.ts +1 -0
  354. package/src/core/ui-packs/tr.ts +1 -0
  355. package/src/core/ui-packs/uk.ts +1 -0
  356. package/src/core/ui-packs/vi.ts +1 -0
  357. package/src/core/ui-packs/zh-tw.ts +1 -0
  358. package/src/core/ui-packs/zh.ts +1 -0
  359. package/src/deploy/adapter-output.ts +7 -2
  360. package/src/deploy/adapters/cloudflare.ts +7 -5
  361. package/src/deploy/adapters/node.ts +47 -9
  362. package/src/deploy/adapters/types.ts +7 -3
  363. package/src/deploy/artifacts.ts +2 -1
  364. package/src/deploy/cloudflare-negotiation.ts +36 -7
  365. package/src/deploy/headers.ts +15 -1
  366. package/src/deploy/node-headers.ts +32 -20
  367. package/src/deploy/platforms/cloudflare.ts +14 -9
  368. package/src/deploy/platforms/netlify.ts +2 -1
  369. package/src/deploy/platforms/node.ts +12 -2
  370. package/src/deploy/platforms/types.ts +21 -7
  371. package/src/deploy/platforms/vercel.ts +115 -17
  372. package/src/deploy/redirects.ts +66 -6
  373. package/src/deploy/rss.ts +3 -1
  374. package/src/deploy/sitemap.ts +39 -5
  375. package/src/deploy/vercel-negotiation.ts +325 -103
  376. package/src/eval/agents.ts +18 -1
  377. package/src/eval/prompts.ts +6 -3
  378. package/src/eval/report.ts +34 -13
  379. package/src/eval/run.ts +5 -0
  380. package/src/markdown/base-links.ts +15 -14
  381. package/src/markdown/package-commands.ts +9 -8
  382. package/src/markdown/relative-links.ts +3 -2
  383. package/src/narration/build.ts +218 -40
  384. package/src/narration/provider.ts +89 -9
  385. package/src/openapi/checks.ts +273 -0
  386. package/src/openapi/graphql-build.ts +21 -0
  387. package/src/openapi/graphql.ts +11 -0
  388. package/src/openapi/model.ts +15 -3
  389. package/src/openapi/parse.ts +127 -2
  390. package/src/openapi/references.ts +43 -3
  391. package/src/openapi/render-mdx.ts +68 -8
  392. package/src/openapi/sentence.ts +29 -2
  393. package/src/openapi/source.ts +39 -14
  394. package/src/ratelimit/index.ts +1 -1
  395. package/src/ratelimit/runtime.ts +37 -19
  396. package/src/ratelimit/upstash.ts +40 -10
  397. package/src/reference/graphql.ts +15 -1
  398. package/src/reference/index.ts +1 -0
  399. package/src/reference/openapi.ts +2 -2
  400. package/src/reference/options.ts +29 -1
  401. package/src/registry/eject.ts +8 -2
  402. package/src/search/adapters/locale-scope.ts +30 -0
  403. package/src/search/adapters/typesense.ts +14 -4
  404. package/src/search/build.ts +21 -3
  405. package/src/search/orama-index.ts +163 -31
  406. package/src/search/source-pages.ts +29 -0
  407. package/src/search/sync/algolia.ts +99 -9
  408. package/src/search/sync/index.ts +52 -13
  409. package/src/search/sync/typesense.ts +72 -27
  410. package/src/seo/jsonld.ts +38 -20
  411. package/src/sources/contentful.ts +12 -0
  412. package/src/sources/github-releases.ts +7 -1
  413. package/src/sources/notion.ts +7 -0
  414. package/src/sources/shared.ts +3 -0
  415. package/src/theme/color.ts +9 -10
  416. package/src/theme/entry.ts +43 -6
  417. package/src/translate/validate.ts +23 -1
  418. package/dist/cli/chunk-0gz36akr.js.map +0 -12
  419. package/dist/cli/chunk-2n4ps1b3.js.map +0 -15
  420. package/dist/cli/chunk-43zcf4gz.js.map +0 -36
  421. package/dist/cli/chunk-4ejxbzee.js +0 -39
  422. package/dist/cli/chunk-4ejxbzee.js.map +0 -10
  423. package/dist/cli/chunk-4h8z9vv5.js.map +0 -16
  424. package/dist/cli/chunk-713mngdq.js.map +0 -14
  425. package/dist/cli/chunk-9xr4dgee.js.map +0 -10
  426. package/dist/cli/chunk-amrb6hgh.js +0 -145
  427. package/dist/cli/chunk-amrb6hgh.js.map +0 -11
  428. package/dist/cli/chunk-nd1821sk.js.map +0 -10
  429. package/dist/cli/chunk-rekqz4qg.js.map +0 -10
  430. package/dist/cli/chunk-ta27feev.js.map +0 -10
  431. package/dist/cli/chunk-xkz5xbtv.js.map +0 -213
  432. package/dist/cli/chunk-y5h4r2y0.js.map +0 -10
  433. package/dist/cli/chunk-zf748avv.js.map +0 -37
  434. /package/dist/cli/{chunk-9geymqns.js.map → chunk-0w6hs479.js.map} +0 -0
  435. /package/dist/cli/{chunk-y4ykbark.js.map → chunk-1f882900.js.map} +0 -0
  436. /package/dist/cli/{chunk-py62fewh.js.map → chunk-53jqw8z0.js.map} +0 -0
  437. /package/dist/cli/{chunk-5wj2qwn2.js.map → chunk-58bt3hag.js.map} +0 -0
  438. /package/dist/cli/{chunk-e7vvk5ya.js.map → chunk-5cmts6dv.js.map} +0 -0
  439. /package/dist/cli/{chunk-g2z9x01v.js.map → chunk-9qzgg6mj.js.map} +0 -0
  440. /package/dist/cli/{chunk-q3wxxq39.js.map → chunk-a57yh0h9.js.map} +0 -0
  441. /package/dist/cli/{chunk-2f3ndkpw.js.map → chunk-desvm72z.js.map} +0 -0
  442. /package/dist/cli/{chunk-gp84za0h.js.map → chunk-dhwtqnnd.js.map} +0 -0
  443. /package/dist/cli/{chunk-2f7n4qzt.js.map → chunk-dqhg54mr.js.map} +0 -0
  444. /package/dist/cli/{chunk-zhvd6adm.js.map → chunk-gfc5fqvf.js.map} +0 -0
  445. /package/dist/cli/{chunk-p804f3pe.js.map → chunk-hvcxng5f.js.map} +0 -0
  446. /package/dist/cli/{chunk-1n228xqb.js.map → chunk-kdpzw38a.js.map} +0 -0
  447. /package/dist/cli/{chunk-6bm0xpgd.js.map → chunk-s0bdnc7v.js.map} +0 -0
  448. /package/dist/cli/{chunk-cmtcnh9f.js.map → chunk-tfycddbt.js.map} +0 -0
  449. /package/dist/cli/{chunk-ntv4qrt7.js.map → chunk-y4msrwm9.js.map} +0 -0
  450. /package/dist/cli/{chunk-yj17vs39.js.map → chunk-ydp3065p.js.map} +0 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/commands/eval.ts", "../src/eval/prompts.ts", "../src/eval/report.ts", "../src/eval/run.ts", "../src/eval/schema.ts", "../src/eval/findings.ts"],
4
+ "sourcesContent": [
5
+ "import { existsSync } from \"node:fs\";\n\nimport { defineCommand } from \"citty\";\nimport { resolve } from \"pathe\";\n\nimport { AGENTS, launchAgent } from \"../../audit/agent.ts\";\nimport type { AgentKind } from \"../../audit/agent.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport { evalFixPrompt, initPrompt } from \"../../eval/prompts.ts\";\nimport {\n evalReportJson,\n fixLines,\n headerLine,\n questionDetails,\n questionLine,\n startLine,\n summaryLine,\n warningLines,\n writeEvalReport,\n} from \"../../eval/report.ts\";\nimport { passFraction, runEval } from \"../../eval/run.ts\";\nimport type { EvalResult } from \"../../eval/run.ts\";\nimport { EvalsFileError, loadEvalsFile } from \"../../eval/schema.ts\";\nimport { parseTimeoutSeconds } from \"../args.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport { flushStdout, logger, reportDiagnostics } from \"../log.ts\";\n\nconst DEFAULT_FILE = \"evals.yaml\";\n\n/** Reader wall-clock ceiling per question, in seconds. */\nconst DEFAULT_TIMEOUT_S = 180;\n\nconst isAgentKind = (value: string): value is AgentKind => value in AGENTS;\n\n/**\n * Launch the interactive agent CLI, turning a missing executable into the\n * install hint. Only `ENOENT` means \"not installed\" — any other spawn failure\n * (`EACCES`, `EMFILE`, …) must surface as itself.\n */\nconst notInstalled = (agent: AgentKind): never => {\n const cli = AGENTS[agent];\n logger.error(\n `${cli.name} (\\`${cli.bin}\\`) was not found on PATH. Install it with \\`${cli.install}\\`.`\n );\n return process.exit(1);\n};\n\nconst launchAgentCode = async (\n agent: AgentKind,\n prompt: string\n): Promise<number> => {\n try {\n return await launchAgent(AGENTS[agent].bin, prompt);\n } catch (error) {\n // SAFETY: only the `code` tag is inspected; a spawn failure throws an\n // ErrnoException, and any other thrown value fails the comparison and\n // rethrows unchanged.\n if ((error as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n throw error;\n }\n return notInstalled(agent);\n }\n};\n\ninterface EvalFlags {\n action?: string;\n agent: string;\n file: string;\n fix?: boolean;\n json?: boolean;\n threshold?: string;\n timeout?: string;\n}\n\n/** Validate the flag surface, exiting with a message on the first offense. */\nconst parseFlags = (args: EvalFlags) => {\n if (!isAgentKind(args.agent)) {\n logger.error(`Invalid --agent \"${args.agent}\" (use codex | claude).`);\n process.exit(1);\n }\n if (args.action !== undefined && args.action !== \"init\") {\n logger.error(`Unknown action \"${args.action}\" (did you mean \"init\"?).`);\n process.exit(1);\n }\n if (args.json && args.fix) {\n logger.error(\"--json and --fix are mutually exclusive.\");\n process.exit(1);\n }\n const threshold = args.threshold === undefined ? 1 : Number(args.threshold);\n // A bare `--threshold` (or `--threshold $UNSET_VAR`) arrives as \"\", which\n // `Number` reads as 0 — a gate that passes every run — so it's rejected.\n if (\n args.threshold?.trim() === \"\" ||\n !Number.isFinite(threshold) ||\n threshold < 0 ||\n threshold > 1\n ) {\n logger.error(`Invalid --threshold \"${args.threshold}\" (use 0..1).`);\n process.exit(1);\n }\n const timeoutS = parseTimeoutSeconds(args.timeout, DEFAULT_TIMEOUT_S);\n return { agent: args.agent, threshold, timeoutS };\n};\n\n/** A shell word for the rerun command, single-quoted only when it has to be. */\nconst shellWord = (value: string): string =>\n /^[\\w./:@%+=,-]+$/u.test(value)\n ? value\n : `'${value.replaceAll(\"'\", String.raw`'\\''`)}'`;\n\n/**\n * The command a `--fix` agent reruns to verify its edits. It carries the run's\n * own flags: a bare `blume eval` would fall back to Codex and `evals.yaml`,\n * grading a different file with a different agent than the run it's fixing.\n */\nconst rerunCommand = (\n args: EvalFlags,\n { agent, threshold, timeoutS }: ReturnType<typeof parseFlags>\n): string =>\n [\n `blume eval --agent ${agent}`,\n args.file === DEFAULT_FILE ? \"\" : `--file ${shellWord(args.file)}`,\n args.threshold === undefined ? \"\" : `--threshold ${threshold}`,\n args.timeout === undefined ? \"\" : `--timeout ${timeoutS}`,\n ]\n .filter((part) => part !== \"\")\n .join(\" \");\n\n/** `blume eval --fix`: hand the failing report to the interactive agent. */\nconst runFixHandoff = async (\n agent: AgentKind,\n result: EvalResult,\n root: string,\n threshold: number,\n command: string\n): Promise<void> => {\n const count = result.counts.fail + result.counts.error;\n if (count === 0) {\n return;\n }\n const cli = AGENTS[agent];\n const report = await writeEvalReport(result, root, threshold);\n process.stderr.write(\n ` Handing ${count} failed question${count === 1 ? \"\" : \"s\"} to ${cli.name}…\\n\\n`\n );\n const code = await launchAgentCode(agent, evalFixPrompt(report, command));\n if (code !== 0) {\n process.exit(code);\n }\n};\n\n/** `blume eval init`: draft a starter evals file via the interactive agent. */\nconst runInit = async (agent: AgentKind, file: string): Promise<void> => {\n const path = resolve(process.cwd(), file);\n if (existsSync(path)) {\n logger.error(\n `${file} already exists — edit it directly, or pass --file to draft elsewhere.`\n );\n process.exit(1);\n }\n const code = await launchAgentCode(agent, initPrompt(file));\n if (code !== 0) {\n process.exit(code);\n }\n};\n\nexport const evalCommand = defineCommand({\n args: {\n action: {\n description: 'Optional action: \"init\" drafts a starter evals file.',\n required: false,\n type: \"positional\",\n },\n agent: {\n default: \"codex\",\n description: \"Agent CLI that reads and grades the docs: codex | claude.\",\n type: \"string\",\n },\n file: {\n default: DEFAULT_FILE,\n description: \"The evals file to run.\",\n type: \"string\",\n },\n fix: {\n description:\n \"After a failing run, hand the report to the agent to fix the docs interactively.\",\n type: \"boolean\",\n },\n json: {\n description: \"Emit the report as JSON on stdout (for CI/editors).\",\n type: \"boolean\",\n },\n threshold: {\n description:\n \"Minimum passing fraction (0..1) before the run exits non-zero. Defaults to 1.\",\n type: \"string\",\n },\n timeout: {\n description: `Reader time limit per question, in seconds. Defaults to ${DEFAULT_TIMEOUT_S}.`,\n type: \"string\",\n },\n verbose: {\n description: \"Include the reader's full answer under each failure.\",\n type: \"boolean\",\n },\n },\n meta: commandMeta.eval,\n async run({ args }) {\n const root = process.cwd();\n const flags = parseFlags(args);\n const { agent, threshold, timeoutS } = flags;\n if (args.action === \"init\") {\n await runInit(agent, args.file);\n return;\n }\n\n let result: EvalResult;\n try {\n // `scanProject`, not `prepareProject`: the eval reads the content tree\n // and never regenerates the runtime, so it doesn't contend with a\n // running dev server. Same reasoning as `blume audit`.\n const project = await scanProject(root, { mode: \"build\" });\n // `resolve`, not `join`: an absolute `--file` (`/ci/evals.yaml`) is\n // used as given instead of being nested under the project root.\n const evalsPath = resolve(root, args.file);\n const { evals, raw } = await loadEvalsFile(evalsPath);\n\n process.stderr.write(`${headerLine(evals.questions.length, agent)}\\n\\n`);\n result = await runEval({\n agent,\n evals,\n evalsPath,\n onProgress: (event) => {\n // Straight to stderr, not `logger.info` — consola drops info-level\n // lines in test and CI environments.\n if (event.kind === \"question-start\") {\n process.stderr.write(\n `${startLine(event.id, event.index, event.total)}\\n`\n );\n return;\n }\n const lines = [\n questionLine(event.result),\n ...questionDetails(event.result, Boolean(args.verbose)),\n ];\n process.stderr.write(`${lines.join(\"\\n\")}\\n`);\n },\n project,\n rawEvals: raw,\n readerTimeoutMs: timeoutS * 1000,\n });\n } catch (error) {\n if (error instanceof EvalsFileError) {\n logger.error(error.message);\n process.exit(1);\n }\n if (error instanceof BlumeError) {\n reportDiagnostics([error.diagnostic], root);\n process.exit(1);\n }\n // SAFETY: only the `code` tag is inspected; a spawn failure throws an\n // ErrnoException, and any other thrown value fails the comparison and\n // falls through to the internal-error report.\n if ((error as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n notInstalled(agent);\n }\n reportInternalError(error);\n process.exit(1);\n }\n\n const tail = [\n \"\",\n ...warningLines(result, root),\n ...fixLines(result, root),\n \"\",\n ` ${summaryLine(result)}`,\n \"\",\n ];\n process.stderr.write(tail.join(\"\\n\"));\n\n const failed = passFraction(result) < threshold;\n\n if (args.fix) {\n // The gate is a CI concern; a handoff run succeeds when the agent\n // session does, not when the docs already passed.\n await runFixHandoff(\n agent,\n result,\n root,\n threshold,\n rerunCommand(args, flags)\n );\n return;\n }\n\n if (args.json) {\n process.stdout.write(evalReportJson(result, root, threshold));\n if (failed) {\n // `process.exit` doesn't flush a piped stdout — without this the JSON\n // is truncated mid-write in exactly the CI setups that consume it.\n await flushStdout();\n process.exit(1);\n }\n return;\n }\n\n if (failed) {\n // Set the code and return rather than `process.exit`, which doesn't wait\n // for a piped stderr: a long `--verbose` report was cut off mid-write, in\n // exactly the CI logs that need to show every failure.\n process.exitCode = 1;\n }\n },\n});\n",
6
+ "import type { EvalQuestion } from \"./schema.ts\";\n\n/**\n * The reader's instructions. The agent is spawned in an empty directory with\n * its file/shell/web tools disabled, so the prompt's job is to direct it at\n * the MCP docs tools and forbid the one escape hatch that remains: answering\n * from prior knowledge of the product.\n */\nexport const readerPrompt = (question: EvalQuestion): string =>\n `You are evaluating whether a product's documentation can answer a user's question.\n\nAnswer the question below using ONLY the connected documentation tools (search_docs, get_page, list_pages, get_navigation). Rules:\n- Do not use prior knowledge about the product. Do not guess.\n- Do not read files, run commands, or access the network.\n- Search first, then read the most relevant pages with get_page.\n- If the documentation does not contain the answer, say exactly what information is missing instead of inventing one.\n\nQuestion: ${question.question}\n\nReply with a concise answer containing the specific facts the documentation provides. Plain text only.`;\n\n/** The judge's instructions: grade the answer against the expected facts. */\nexport const judgePrompt = (question: EvalQuestion, answer: string): string => {\n const facts = question.expected.map((fact) => `- ${fact}`).join(\"\\n\");\n return `You are grading an answer against expected facts. Do not use any tools.\n\nQuestion: ${question.question}\n\nExpected facts — each must be present in substance (paraphrase is fine, contradiction is not):\n${facts}\n\nAnswer to grade:\n\"\"\"\n${answer}\n\"\"\"\n\nAn answer that states the documentation lacks the information FAILS.\n\nReply with ONLY this JSON object on a single line, no markdown fences:\n{\"pass\": true|false, \"score\": 0.0-1.0, \"missing\": [\"expected facts absent or contradicted\"], \"notes\": \"one sentence\"}`;\n};\n\n/**\n * The `--fix` handoff prompt: where the report is, the ground rules, and the\n * `blume eval` command that verifies the fixes (the run's own flags).\n */\nexport const evalFixPrompt = (reportPath: string, command: string): string =>\n `Fix the documentation gaps found by \\`blume eval\\` in this project.\n\nThe full report is at ${reportPath}. It is JSON: each entry in \\`eval.results\\` with status \"fail\" is one question the documentation could not answer. Each carries the \\`question\\`, the \\`expected\\` facts, the judge's \\`missing\\` facts, and the reader agent's \\`answer\\` (what the docs currently convey). The matching \\`diagnostics\\` entry names the source \\`file\\` of the page that should answer it.\n\nWork through every failed question:\n1. Read the page named in the finding (or choose the best page when none is named).\n2. Edit the documentation so it states the missing facts explicitly. Add prose, not filler; keep the page's voice.\n3. Never delete questions from the evals file or weaken expected facts.\n\nWhen you are done, run \\`${command}\\` to verify, and repeat until every question passes.`;\n\n/** The `eval init` prompt: draft a starter evals file from the docs. */\nexport const initPrompt = (evalsPath: string): string =>\n `Draft a starter evals file for \\`blume eval\\` in this documentation project.\n\nRead the documentation source pages in this project and write ${evalsPath} with about 10 high-value questions a real user would ask — installation, configuration, deployment, and the project's headline features. For each question, list the expected facts a correct answer must state, grounded in what the documentation actually promises (never invent facts the docs don't state).\n\nThe file format is YAML:\n\nquestions:\n - id: kebab-case-slug\n question: One user question?\n expected:\n - a fact the answer must contain\n - another required fact\n routes:\n - /route/of/the/page/that/answers/it\n\nRules:\n- Every \\`expected\\` fact must be verifiable in the docs today.\n- Prefer questions whose answers live on one page; set \\`routes\\` to that page.\n- Keep ids unique and questions short.\n\nWhen you are done, print the file and suggest running \\`blume eval\\` to try it.`;\n",
7
+ "import { mkdtemp, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\n\nimport { colors } from \"consola/utils\";\nimport type { ColorFunction } from \"consola/utils\";\nimport { join, relative } from \"pathe\";\n\nimport { AGENTS } from \"../audit/agent.ts\";\nimport { duration, money, seconds } from \"../cli/report-format.ts\";\nimport { countBySeverity } from \"../core/diagnostics.ts\";\nimport type { EvalResult, QuestionResult, QuestionStatus } from \"./run.ts\";\n\n/** How a question reads in the report: its status, or `warn` for a warned miss. */\ntype ShownStatus = QuestionStatus | \"warn\";\n\nconst GLYPH = {\n error: \"!\",\n fail: \"✖\",\n pass: \"✔\",\n skip: \"⊘\",\n warn: \"⚠\",\n} satisfies Record<ShownStatus, string>;\n\nconst STATUS_COLOR = {\n error: colors.yellow,\n fail: colors.red,\n pass: colors.green,\n skip: colors.dim,\n warn: colors.yellow,\n} satisfies Record<ShownStatus, ColorFunction>;\n\n/**\n * A failed `severity: warning` question: its miss never counts against the\n * gate, so the report shows and counts it as a warning, not a failure.\n */\nconst warned = (result: QuestionResult): boolean =>\n result.status === \"fail\" && result.severity === \"warning\";\n\n/** Longest id gets the room; everything shorter aligns to it. */\nconst ID_PAD = 28;\n\n/** One question's progress/report line: glyph, id, status, score, time, cost. */\nexport const questionLine = (result: QuestionResult): string => {\n const shown: ShownStatus = warned(result) ? \"warn\" : result.status;\n const color = STATUS_COLOR[shown];\n const glyph = color(GLYPH[shown]);\n const id = result.id.padEnd(ID_PAD);\n if (result.status === \"skip\") {\n return ` ${glyph} ${id} ${colors.dim(\"skipped\")}`;\n }\n const score = result.score === undefined ? \"\" : result.score.toFixed(2);\n const cost = money(result.costUsd);\n const cells = [\n color(shown),\n score,\n colors.dim(seconds(result.durationMs)),\n cost === \"\" ? \"\" : colors.dim(cost),\n ]\n .filter((cell) => cell !== \"\")\n .join(\" \");\n return ` ${glyph} ${id} ${cells}`;\n};\n\n/** Indented context under a question's line: missing facts, error detail. */\nexport const questionDetails = (\n result: QuestionResult,\n verbose: boolean\n): string[] => {\n const lines: string[] = [];\n if (result.status === \"fail\") {\n for (const fact of result.missing) {\n lines.push(` ${colors.dim(`missing: ${fact}`)}`);\n }\n }\n if (result.status === \"error\" && result.detail) {\n lines.push(` ${colors.dim(result.detail)}`);\n }\n if (verbose && result.answer && result.status !== \"pass\") {\n lines.push(\n ...result.answer\n .split(\"\\n\")\n .map((line) => ` ${colors.dim(`> ${line}`)}`)\n );\n }\n return lines;\n};\n\n/** The one-line totals: `9 passed · 2 failed · 1 skipped · 1m 42s · $0.71`. */\nexport const summaryLine = (result: EvalResult): string => {\n const { counts } = result;\n const warnings = result.results.filter(warned).length;\n const failures = counts.fail - warnings;\n const parts = [\n `${counts.pass} passed`,\n failures > 0 ? `${failures} failed` : \"\",\n warnings > 0 ? `${warnings} warned` : \"\",\n counts.error > 0 ? `${counts.error} errored` : \"\",\n counts.skip > 0 ? `${counts.skip} skipped` : \"\",\n duration(result.durationMs),\n money(result.costUsd),\n ].filter((part) => part !== \"\");\n return parts.join(\" · \");\n};\n\n/** The header line the command prints before the first question runs. */\nexport const headerLine = (total: number, agent: EvalResult[\"agent\"]): string =>\n `${colors.bold(\"blume eval\")} ${total} question(s) · ${AGENTS[agent].name}`;\n\n/** The dim announce line while a question's agents run. */\nexport const startLine = (id: string, index: number, total: number): string =>\n ` ${colors.dim(`▸ ${id} (${index + 1}/${total})`)}`;\n\n/**\n * `fix:` pointers for failed questions, naming the file that resolves each. A\n * question whose agent run errored gets a `run failed:` line pointing at the\n * question instead: the run never graded the docs, so there's no page to fix.\n * A `severity: warning` question's miss is a warning line instead.\n */\nexport const fixLines = (result: EvalResult, root: string): string[] =>\n result.diagnostics\n .filter((diagnostic) => diagnostic.severity !== \"warning\")\n .map((finding) => {\n const site = finding.file\n ? `${relative(root, finding.file)}${finding.line ? `:${finding.line}` : \"\"}`\n : \"\";\n const label =\n finding.code === \"BLUME_EVAL_QUESTION_ERROR\"\n ? colors.red(\"run failed:\")\n : colors.cyan(\"fix:\");\n return ` ${label} ${site} ${colors.dim(finding.message)}`;\n });\n\n/**\n * Dim warnings: route hints that no longer match a page, and the misses of\n * `severity: warning` questions.\n */\nexport const warningLines = (result: EvalResult, root: string): string[] =>\n result.diagnostics\n .filter((diagnostic) => diagnostic.severity === \"warning\")\n .map((finding) => {\n const site = finding.file\n ? ` ${relative(root, finding.file)}${finding.line ? `:${finding.line}` : \"\"}`\n : \"\";\n return ` ${colors.yellow(\"⚠\")}${site} ${colors.dim(finding.message)}`;\n });\n\n/** The human report, written to stderr by the command. */\nexport const formatEvalReport = (\n result: EvalResult,\n root: string,\n options: { verbose?: boolean } = {}\n): string => {\n const lines: string[] = [headerLine(result.results.length, result.agent), \"\"];\n\n for (const question of result.results) {\n lines.push(\n questionLine(question),\n ...questionDetails(question, Boolean(options.verbose))\n );\n }\n lines.push(\"\");\n\n // The finding tells the author which file fixes which failure, warnings\n // first, as the command prints them.\n const findings = [...warningLines(result, root), ...fixLines(result, root)];\n lines.push(...findings);\n if (findings.length > 0) {\n lines.push(\"\");\n }\n\n lines.push(` ${summaryLine(result)}`, \"\");\n return lines.join(\"\\n\");\n};\n\n/**\n * The machine-readable report. The `diagnostics` + `summary` shape matches\n * `blume validate --json` and `blume audit --json` exactly — anything parsing\n * those keeps working — with the eval run's own results alongside.\n */\nexport const evalReportJson = (\n result: EvalResult,\n root: string,\n threshold: number\n): string => {\n const diagnostics = result.diagnostics.map((diagnostic) =>\n diagnostic.file\n ? { ...diagnostic, file: relative(root, diagnostic.file) }\n : diagnostic\n );\n return `${JSON.stringify(\n {\n diagnostics,\n eval: {\n agent: result.agent,\n costUsd: result.costUsd,\n counts: result.counts,\n durationMs: result.durationMs,\n results: result.results,\n threshold,\n },\n summary: countBySeverity(result.diagnostics),\n },\n null,\n 2\n )}\\n`;\n};\n\n/**\n * Write the full JSON report where a `--fix` agent can read it — a file\n * rather than inline prompt text, because a long run's answers would exceed\n * the platform's argv limit.\n */\nexport const writeEvalReport = async (\n result: EvalResult,\n root: string,\n threshold: number\n): Promise<string> => {\n const dir = await mkdtemp(join(tmpdir(), \"blume-eval-\"));\n const path = join(dir, \"report.json\");\n await writeFile(path, evalReportJson(result, root, threshold));\n return path;\n};\n",
8
+ "import { mkdir, mkdtemp, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\n\nimport { join } from \"pathe\";\n\nimport { buildMcpData } from \"../ai/mcp/data.ts\";\nimport { AGENTS } from \"../audit/agent.ts\";\nimport type { AgentKind } from \"../audit/agent.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport {\n agentArgs,\n parseVerdict,\n readAgentOutput,\n runAgentHeadless,\n writeMcpConfig,\n} from \"./agents.ts\";\nimport type { HeadlessRunner } from \"./agents.ts\";\nimport { questionFinding, routeFindings } from \"./findings.ts\";\nimport { judgePrompt, readerPrompt } from \"./prompts.ts\";\nimport type { EvalQuestion, EvalsFile } from \"./schema.ts\";\n\n/** Reader runs search and read several pages; the judge grades one answer. */\nconst DEFAULT_READER_TIMEOUT_MS = 180_000;\nconst DEFAULT_JUDGE_TIMEOUT_MS = 60_000;\n\nexport type QuestionStatus = \"error\" | \"fail\" | \"pass\" | \"skip\";\n\n/** One question's outcome, carrying everything the reports print. */\nexport interface QuestionResult {\n answer?: string;\n costUsd?: number;\n /** Why the run errored (timeout, agent failure, unparseable verdict). */\n detail?: string;\n durationMs: number;\n expected: string[];\n id: string;\n missing: string[];\n notes?: string;\n question: string;\n routes: string[];\n score?: number;\n /** The question's severity: a `warning` miss is reported as a warning. */\n severity?: EvalQuestion[\"severity\"];\n status: QuestionStatus;\n}\n\nexport interface EvalResult {\n agent: AgentKind;\n /** Total spend, when the agent CLI reports it (claude does, codex doesn't). */\n costUsd?: number;\n counts: Record<QuestionStatus, number>;\n diagnostics: Diagnostic[];\n durationMs: number;\n results: QuestionResult[];\n}\n\nexport type EvalProgress =\n | {\n kind: \"question-end\";\n index: number;\n result: QuestionResult;\n total: number;\n }\n | { kind: \"question-start\"; id: string; index: number; total: number };\n\nexport interface EvalRunOptions {\n agent: AgentKind;\n evals: EvalsFile;\n /** Where the evals file lives, for findings with no usable route hint. */\n evalsPath: string;\n judgeTimeoutMs?: number;\n onProgress?: (event: EvalProgress) => void;\n project: BlumeProject;\n /** The evals file's raw text, for line-anchoring findings. */\n rawEvals: string;\n readerTimeoutMs?: number;\n /** The spawn function — injectable so tests never launch a real agent. */\n run?: HeadlessRunner;\n}\n\ninterface QuestionContext {\n bin: string;\n dir: string;\n judgeTimeoutMs: number;\n kind: AgentKind;\n mcp: Awaited<ReturnType<typeof writeMcpConfig>>;\n readerTimeoutMs: number;\n run: HeadlessRunner;\n}\n\nconst errored = (\n question: EvalQuestion,\n detail: string,\n durationMs: number\n): QuestionResult => ({\n detail,\n durationMs,\n expected: question.expected,\n id: question.id,\n missing: [],\n question: question.question,\n routes: question.routes,\n severity: question.severity,\n status: \"error\",\n});\n\n/** Run one question: a fresh empty cwd, the reader, then the judge. */\nconst runQuestion = async (\n question: EvalQuestion,\n index: number,\n context: QuestionContext\n): Promise<QuestionResult> => {\n const started = performance.now();\n const elapsed = () => Math.round(performance.now() - started);\n\n // An empty working directory per invocation is the fresh-eyes guardrail:\n // even if a tool restriction slips, there is nothing here to read.\n const workDir = join(context.dir, `work-${index}`);\n await mkdir(workDir, { recursive: true });\n\n const answerPath = join(workDir, \"answer.txt\");\n const reader = await context.run(\n context.bin,\n agentArgs(context.kind, { lastMessagePath: answerPath, mcp: context.mcp }),\n {\n cwd: workDir,\n prompt: readerPrompt(question),\n timeoutMs: context.readerTimeoutMs,\n }\n );\n const answer = await readAgentOutput(context.kind, reader, answerPath);\n if (answer.isError) {\n return {\n ...errored(question, `reader ${answer.detail ?? \"failed\"}`, elapsed()),\n costUsd: answer.costUsd,\n };\n }\n\n const verdictPath = join(workDir, \"verdict.txt\");\n const judge = await context.run(\n context.bin,\n agentArgs(context.kind, { lastMessagePath: verdictPath }),\n {\n cwd: workDir,\n prompt: judgePrompt(question, answer.text),\n timeoutMs: context.judgeTimeoutMs,\n }\n );\n const graded = await readAgentOutput(context.kind, judge, verdictPath);\n const costUsd =\n answer.costUsd === undefined && graded.costUsd === undefined\n ? undefined\n : (answer.costUsd ?? 0) + (graded.costUsd ?? 0);\n if (graded.isError) {\n return {\n ...errored(question, `judge ${graded.detail ?? \"failed\"}`, elapsed()),\n answer: answer.text,\n costUsd,\n };\n }\n\n const verdict = parseVerdict(graded.text);\n if (!verdict) {\n return {\n ...errored(question, \"judge returned no parseable verdict\", elapsed()),\n answer: answer.text,\n costUsd,\n };\n }\n\n return {\n answer: answer.text,\n costUsd,\n durationMs: elapsed(),\n expected: question.expected,\n id: question.id,\n missing: verdict.missing,\n notes: verdict.notes || undefined,\n question: question.question,\n routes: question.routes,\n score: verdict.score,\n severity: question.severity,\n status: verdict.pass ? \"pass\" : \"fail\",\n };\n};\n\n/** The findings a missed question produces: failed, or its agent run errored. */\nconst MISS_CODES: ReadonlySet<string> = new Set([\n \"BLUME_EVAL_QUESTION_ERROR\",\n \"BLUME_EVAL_QUESTION_FAILED\",\n]);\n\n/**\n * The fraction of run (non-skipped) questions that pass the CI gate. A miss on\n * a `severity: warning` question is reported as a warning and never counts\n * against the gate — each miss's finding carries its question's severity, so\n * the gate reads the same findings the JSON summary counts, and the exit code\n * can't disagree with the summary's error total.\n */\nexport const passFraction = (result: EvalResult): number => {\n const ran = result.results.length - result.counts.skip;\n if (ran === 0) {\n return 1;\n }\n const misses = result.diagnostics.filter(\n (diagnostic) =>\n MISS_CODES.has(diagnostic.code) && diagnostic.severity === \"error\"\n ).length;\n return (ran - misses) / ran;\n};\n\n/**\n * Run every question through the reader/judge pair, sequentially: each\n * question is already two agent sessions, and a serial run keeps progress\n * output ordered and cost attribution obvious.\n */\nexport const runEval = async (options: EvalRunOptions): Promise<EvalResult> => {\n const started = performance.now();\n const kind = options.agent;\n const run = options.run ?? runAgentHeadless;\n const anchor = { path: options.evalsPath, raw: options.rawEvals };\n\n const dir = await mkdtemp(join(tmpdir(), \"blume-eval-\"));\n const snapshotPath = join(dir, \"mcp-data.json\");\n await writeFile(\n snapshotPath,\n JSON.stringify(await buildMcpData(options.project))\n );\n const mcp = await writeMcpConfig(dir, snapshotPath);\n\n const context: QuestionContext = {\n bin: AGENTS[kind].bin,\n dir,\n judgeTimeoutMs: options.judgeTimeoutMs ?? DEFAULT_JUDGE_TIMEOUT_MS,\n kind,\n mcp,\n readerTimeoutMs: options.readerTimeoutMs ?? DEFAULT_READER_TIMEOUT_MS,\n run,\n };\n\n const diagnostics: Diagnostic[] = [];\n const results: QuestionResult[] = [];\n const { questions } = options.evals;\n\n for (const [index, question] of questions.entries()) {\n diagnostics.push(...routeFindings(question, options.project, anchor));\n\n if (question.skip) {\n results.push({\n durationMs: 0,\n expected: question.expected,\n id: question.id,\n missing: [],\n question: question.question,\n routes: question.routes,\n severity: question.severity,\n status: \"skip\",\n });\n continue;\n }\n\n options.onProgress?.({\n id: question.id,\n index,\n kind: \"question-start\",\n total: questions.length,\n });\n // Sequential by design: each question is already two agent sessions, and\n // a serial run keeps progress output ordered and cost attribution obvious.\n // oxlint-disable-next-line no-await-in-loop\n const result = await runQuestion(question, index, context);\n results.push(result);\n if (result.status === \"fail\" || result.status === \"error\") {\n diagnostics.push(\n questionFinding(\n question,\n {\n detail: result.detail,\n missing: result.missing,\n status: result.status,\n },\n options.project,\n anchor\n )\n );\n }\n options.onProgress?.({\n index,\n kind: \"question-end\",\n result,\n total: questions.length,\n });\n }\n\n const counts = {\n error: 0,\n fail: 0,\n pass: 0,\n skip: 0,\n } satisfies Record<QuestionStatus, number>;\n for (const result of results) {\n counts[result.status] += 1;\n }\n const costs = results.flatMap((result) =>\n result.costUsd === undefined ? [] : [result.costUsd]\n );\n\n return {\n agent: kind,\n costUsd:\n costs.length > 0\n ? costs.reduce((total, cost) => total + cost, 0)\n : undefined,\n counts,\n diagnostics,\n durationMs: Math.round(performance.now() - started),\n results,\n };\n};\n",
9
+ "import { readFile } from \"node:fs/promises\";\n\nimport { load } from \"js-yaml\";\nimport { z } from \"zod\";\n\nimport { YAML_SCHEMA } from \"../core/yaml.ts\";\n\n/** Question ids are kebab-case slugs so they read well in reports and CI logs. */\nconst ID_PATTERN = /^[a-z0-9][a-z0-9-]*$/u;\n\nconst questionSchema = z.strictObject({\n expected: z\n .array(z.string().min(1))\n .min(1, \"expected must list at least one fact\"),\n id: z\n .string()\n .regex(ID_PATTERN, \"id must be a kebab-case slug (a-z, 0-9, dashes)\"),\n question: z.string().min(1),\n routes: z\n .union([z.string(), z.array(z.string())])\n .default([])\n .transform((value) => (Array.isArray(value) ? value : [value])),\n severity: z.enum([\"error\", \"warning\"]).default(\"error\"),\n skip: z.boolean().default(false),\n});\n\n/** One author-written eval: a question plus the facts a passing answer states. */\nexport type EvalQuestion = z.infer<typeof questionSchema>;\n\nconst fullSchema = z.strictObject({\n questions: z.array(questionSchema).min(1),\n version: z.literal(1).default(1),\n});\n\n/**\n * The evals file schema. A bare top-level list of questions is accepted as\n * shorthand — `loadEvalsFile` wraps it before validating, rather than a\n * `z.union`, so schema errors name the offending field instead of collapsing\n * into an opaque \"invalid union\" issue.\n */\nexport const evalsFileSchema = fullSchema.superRefine((value, context) => {\n const seen = new Set<string>();\n for (const question of value.questions) {\n if (seen.has(question.id)) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n message: `duplicate question id \"${question.id}\"`,\n path: [\"questions\"],\n });\n }\n seen.add(question.id);\n }\n});\n\nexport type EvalsFile = z.infer<typeof evalsFileSchema>;\n\n/** A problem loading or validating the evals file, with the path it names. */\nexport class EvalsFileError extends Error {\n readonly path: string;\n\n constructor(path: string, message: string) {\n super(message);\n this.name = \"EvalsFileError\";\n this.path = path;\n }\n}\n\nconst describeIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const at = issue.path.length > 0 ? ` at ${issue.path.join(\".\")}` : \"\";\n return `${issue.message}${at}`;\n })\n .join(\"; \");\n\n/**\n * Read and validate an evals file. Returns the parsed questions plus the raw\n * text, kept so findings can anchor to the line a question is defined on.\n */\nexport const loadEvalsFile = async (\n path: string\n): Promise<{ evals: EvalsFile; raw: string }> => {\n let raw: string;\n try {\n raw = await readFile(path, \"utf-8\");\n } catch {\n throw new EvalsFileError(\n path,\n `No evals file found at ${path}. Run \\`blume eval init\\` to draft one.`\n );\n }\n\n let parsed: unknown;\n try {\n parsed = load(raw, { schema: YAML_SCHEMA });\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new EvalsFileError(path, `Invalid YAML in ${path}: ${detail}`);\n }\n\n // The bare-list shorthand: a top-level sequence of questions.\n const candidate = Array.isArray(parsed) ? { questions: parsed } : parsed;\n const result = evalsFileSchema.safeParse(candidate);\n if (!result.success) {\n throw new EvalsFileError(\n path,\n `Invalid evals file at ${path}: ${describeIssues(result.error)}`\n );\n }\n return { evals: result.data, raw };\n};\n\n/**\n * The 1-based line where a question's `id:` entry appears in the raw evals\n * file, so a finding with no route hint can still point somewhere editable.\n */\nexport const locateQuestion = (raw: string, id: string): number | undefined => {\n const pattern = new RegExp(`^\\\\s*-?\\\\s*id:\\\\s*[\"']?${id}[\"']?\\\\s*$`, \"u\");\n const lines = raw.split(\"\\n\");\n for (const [index, line] of lines.entries()) {\n if (pattern.test(line)) {\n return index + 1;\n }\n }\n return undefined;\n};\n",
10
+ "import type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport { locateQuestion } from \"./schema.ts\";\nimport type { EvalQuestion } from \"./schema.ts\";\n\nconst DOCS_URL = \"https://useblume.dev/docs/cli/evals\";\n\n/** Where a finding should anchor when no route hint matches a page. */\nexport interface EvalsAnchor {\n path: string;\n raw: string;\n}\n\n/** The manifest route a hint names, if any. */\nconst hintedRoute = (question: EvalQuestion, project: BlumeProject) => {\n for (const hint of question.routes) {\n const route = project.manifest.routes.find(\n (candidate) => candidate.path === hint\n );\n if (route) {\n return route;\n }\n }\n};\n\n/**\n * Warnings for route hints that name no manifest route — docs move, and a\n * finding that silently anchors to the evals file instead of the page it\n * used to name is a debugging session; a warning is a one-line fix.\n */\nexport const routeFindings = (\n question: EvalQuestion,\n project: BlumeProject,\n anchor: EvalsAnchor\n): Diagnostic[] => {\n const known = new Set(project.manifest.routes.map((route) => route.path));\n return question.routes\n .filter((hint) => !known.has(hint))\n .map((hint) => ({\n code: \"BLUME_EVAL_ROUTE_UNKNOWN\",\n docsUrl: DOCS_URL,\n file: anchor.path,\n line: locateQuestion(anchor.raw, question.id),\n message: `Question \"${question.id}\" hints at route \"${hint}\", which matches no page.`,\n severity: \"warning\" as const,\n suggestion:\n \"Update the question's `routes` to the page's current route, or remove the hint.\",\n }));\n};\n\n/** What the finding needs to know about how the question went. */\nexport interface QuestionOutcome {\n /** Why the run errored, when it did. */\n detail?: string;\n /** The expected facts the judge found absent or contradicted. */\n missing: string[];\n status: \"error\" | \"fail\";\n}\n\n/**\n * The diagnostic for a failed or errored question. A failure is anchored to\n * the page that should have answered it (via the first matching route hint)\n * or, failing that, to the question's line in the evals file. An errored run —\n * the agent crashed, timed out, or answered in a shape Blume couldn't read —\n * says nothing about the docs, so it always points at the question instead of\n * a page there's nothing to fix in.\n */\nexport const questionFinding = (\n question: EvalQuestion,\n outcome: QuestionOutcome,\n project: BlumeProject,\n anchor: EvalsAnchor\n): Diagnostic => {\n const questionSite = {\n file: anchor.path,\n line: locateQuestion(anchor.raw, question.id),\n };\n\n if (outcome.status === \"error\") {\n return {\n code: \"BLUME_EVAL_QUESTION_ERROR\",\n docsUrl: DOCS_URL,\n message: `The agent run failed for \"${question.question}\"${\n outcome.detail ? ` — ${outcome.detail}` : \"\"\n }, so the docs weren't graded.`,\n severity: question.severity,\n suggestion:\n \"Rerun `blume eval`; if it persists, check the agent CLI installation and the failure detail.\",\n ...questionSite,\n };\n }\n\n const route = hintedRoute(question, project);\n const site = route\n ? { file: route.sourcePath, url: route.path }\n : questionSite;\n\n const missing =\n outcome.missing.length > 0\n ? ` — missing: ${outcome.missing.join(\"; \")}`\n : \"\";\n return {\n code: \"BLUME_EVAL_QUESTION_FAILED\",\n docsUrl: DOCS_URL,\n message: `Docs could not answer: \"${question.question}\"${missing}`,\n severity: question.severity,\n suggestion:\n \"State the missing facts on this page, then rerun `blume eval`.\",\n ...site,\n };\n};\n"
11
+ ],
12
+ "mappings": "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",
13
+ "debugId": "7E23EC6FFD50900B64756E2164756E21",
14
+ "names": []
15
+ }
@@ -9,7 +9,7 @@ import {
9
9
  } from "./index.js";
10
10
  import {
11
11
  AGENTS
12
- } from "./chunk-0gz36akr.js";
12
+ } from "./chunk-dv2z0rzf.js";
13
13
  import {
14
14
  i18nEnabled,
15
15
  localeCodes,
@@ -18,7 +18,7 @@ import {
18
18
  folderMetaSchema,
19
19
  scanBody,
20
20
  createModuleLoader
21
- } from "./chunk-xkz5xbtv.js";
21
+ } from "./chunk-124fvmzq.js";
22
22
  import {
23
23
  seconds,
24
24
  money,
@@ -27,18 +27,18 @@ import {
27
27
  runAgentHeadless,
28
28
  CODEX_LOCKDOWN,
29
29
  readAgentOutput
30
- } from "./chunk-ga0pf4aj.js";
30
+ } from "./chunk-0n9xkp3d.js";
31
31
  import {
32
32
  writeTextAtomic
33
33
  } from "./chunk-jq5n4avg.js";
34
34
  import {
35
35
  findFolderMetaFiles,
36
36
  scanProject
37
- } from "./chunk-43zcf4gz.js";
37
+ } from "./chunk-0pmb4tr4.js";
38
38
  import"./chunk-zccbjcj0.js";
39
39
  import {
40
40
  parseTimeoutSeconds
41
- } from "./chunk-4ejxbzee.js";
41
+ } from "./chunk-74wfhv79.js";
42
42
 
43
43
  // src/cli/commands/translate.ts
44
44
  import { defineCommand } from "citty";
@@ -574,6 +574,18 @@ var setPath = (data, path, value) => {
574
574
  }
575
575
  parent[path.at(-1)] = value;
576
576
  };
577
+ var dropCanonical = (data) => {
578
+ const { seo } = data;
579
+ if (!isKeyedObject(seo) || !("canonical" in seo)) {
580
+ return;
581
+ }
582
+ const { canonical: _canonical, ...rest } = seo;
583
+ if (Object.keys(rest).length > 0) {
584
+ data.seo = rest;
585
+ } else {
586
+ delete data.seo;
587
+ }
588
+ };
577
589
  var ensureTrailingNewline = (text) => text.endsWith(`
578
590
  `) ? text : `${text}
579
591
  `;
@@ -625,6 +637,7 @@ var validateTranslation = (sourceText, agentText) => {
625
637
  setPath(data, path, translated);
626
638
  }
627
639
  }
640
+ dropCanonical(data);
628
641
  return {
629
642
  ok: true,
630
643
  text: ensureTrailingNewline(frontmatter_default.stringify(body, data))
@@ -1198,5 +1211,5 @@ export {
1198
1211
  translateCommand
1199
1212
  };
1200
1213
 
1201
- //# debugId=8AF42E7E46BE994464756E2164756E21
1202
- //# sourceMappingURL=chunk-jnwj5kjj.js.map
1214
+ //# debugId=7CBDF68DDB18B6AB64756E2164756E21
1215
+ //# sourceMappingURL=chunk-bxwhtvw8.js.map
@@ -10,10 +10,10 @@
10
10
  "import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { dirname, join, relative } from \"pathe\";\n\nimport { localeTargetPath } from \"../core/i18n.ts\";\nimport { createModuleLoader } from \"../core/load-module.ts\";\nimport { findFolderMetaFiles } from \"../core/meta.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { folderMetaSchema } from \"../core/schema.ts\";\nimport type { FolderMeta, ResolvedI18nConfig } from \"../core/schema.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\n/**\n * Folder-nav `meta.ts` titles are translatable under the `dir` parser ONLY:\n * per-locale meta is a whole-file replacement, not a merge (`applyFolderMeta`\n * looks up `<locale>/<group>` and falls back to shared meta, never to the\n * default locale's file), and the `dot` parser has no per-locale meta\n * mechanism at all. So the generated module must copy EVERY source key\n * (order/pages/icon/collapsed) with only the title translated — otherwise the\n * locale's navigation loses its ordering.\n */\n\n/** One default-locale meta file whose title can be translated. */\nexport interface TranslatableMeta {\n /** The parsed meta module; copied wholesale into the generated module. */\n data: FolderMeta;\n /** Directory relative to the owning source's content root (`\"\"` = root). */\n dir: string;\n /** Absolute path of the source meta file. */\n file: string;\n /** The owning source's content root (locale directories live under it). */\n contentRoot: string;\n /** Raw source text at discovery time — what the ledger hashes. */\n raw: string;\n /** POSIX root-relative path of the source meta file — the ledger key. */\n sourceRel: string;\n /** The source title to translate. */\n title: string;\n}\n\n/** A folder's meta module names, in the order a lookup prefers them. */\nconst META_NAMES = [\"meta.ts\", \"meta.js\", \"meta.mjs\"];\n\nconst META_FILES = META_NAMES.map((name) => `**/${name}`);\n\n/**\n * Whether a loaded meta module default-exports a factory function. Generic so\n * it can decode the loader's untyped module value at this boundary.\n */\nconst isFactoryModule = <T>(\n value: T\n): value is T & ((...args: never[]) => FolderMeta) =>\n typeof value === \"function\";\n\n/**\n * Where a locale's meta module lives. The locale folder is resolved the way\n * pages resolve it (`localeTargetPath`): `folders` are the content root's\n * existing top-level folders, and one naming the locale in another casing\n * (`pt-br/` for a configured `pt-BR`) is the locale's folder already. In that\n * folder, a `meta.js`/`meta.mjs` that already exists is the target — the\n * generated module is plain JavaScript, and writing a `meta.ts` beside it\n * would leave the folder with two meta files. Otherwise it's a new `meta.ts`.\n */\nexport const metaTargetPath = (\n meta: TranslatableMeta,\n locale: string,\n i18n: ResolvedI18nConfig,\n folders: readonly string[]\n): string => {\n const dir = join(\n meta.contentRoot,\n dirname(\n localeTargetPath(join(meta.dir, \"meta.ts\"), \".ts\", locale, i18n, folders)\n )\n );\n const existing = META_NAMES.find((name) => existsSync(join(dir, name)));\n return join(dir, existing ?? \"meta.ts\");\n};\n\n/**\n * Discover the default-locale `meta.{ts,js,mjs}` files whose titles a\n * translation run covers. Skips (in order): non-`dir` i18n projects entirely,\n * files the scan's own folder-meta discovery never reads either — those\n * matching the source's `exclude` globs (application code) or in folders its\n * `include` globs don't reach (see `findFolderMetaFiles`) — files inside a\n * configured locale directory (those ARE translations), files inside an\n * archived-version snapshot (frozen, with their own translations — the same\n * folders the navigation's meta lookup hoists as versions), modules that fail\n * to load (the scan already errors on those), factory-form modules (a warning\n * — the generator can't re-emit a function), modules that fail meta\n * validation (the scan already errors on those too), and modules with no\n * `title` (nothing to translate).\n */\nexport const discoverTranslatableMeta = async (\n project: BlumeProject\n): Promise<{ metas: TranslatableMeta[]; diagnostics: Diagnostic[] }> => {\n const { i18n } = project.config;\n if (!i18n || i18n.parser !== \"dir\") {\n return { diagnostics: [], metas: [] };\n }\n const localeDirs = new Set(\n i18n.locales.flatMap((locale) =>\n locale.code === i18n.defaultLocale ? [] : [locale.code.toLowerCase()]\n )\n );\n const versionDirs = new Set(\n project.config.versions?.archived.map((version) => version.id)\n );\n\n const load = createModuleLoader();\n const metas: TranslatableMeta[] = [];\n const diagnostics: Diagnostic[] = [];\n\n const roots = project.sources.flatMap((source) =>\n source.staged || !source.contentRoot\n ? []\n : [\n {\n contentRoot: source.contentRoot,\n exclude: source.exclude,\n include: source.include,\n },\n ]\n );\n for (const { contentRoot, exclude, include } of roots) {\n // The scan's own file set (`discoverFolderMeta`): a `meta.ts` under an\n // excluded folder (`src/lib/meta.ts` beside `exclude: [\"src/**\"]`) is\n // application code, and one in a folder no `include` glob reaches\n // configures no group the build renders.\n // oxlint-disable-next-line no-await-in-loop -- a project has O(1) sources\n const files = await findFolderMetaFiles(\n { exclude, include, root: contentRoot },\n META_FILES\n );\n for (const file of files.toSorted()) {\n const dir = relative(contentRoot, dirname(file));\n const [head] = dir.split(\"/\");\n if (\n head &&\n (localeDirs.has(head.toLowerCase()) || versionDirs.has(head))\n ) {\n continue;\n }\n let mod: Awaited<ReturnType<typeof load>>;\n try {\n // oxlint-disable-next-line no-await-in-loop -- sequential, ordered discovery\n mod = await load(file);\n } catch {\n // Folder meta that fails to load is the scan's BLUME_META_LOAD_FAILED\n // error, not a crash here; either way there's no title to read.\n continue;\n }\n // oxlint-disable-next-line no-await-in-loop -- sequential, ordered discovery\n const raw = await readFile(file, \"utf-8\");\n if (isFactoryModule(mod)) {\n diagnostics.push({\n code: \"BLUME_TRANSLATE_META_FACTORY\",\n file,\n message:\n \"This meta file default-exports a function, so `blume translate` cannot generate per-locale copies of it.\",\n severity: \"warning\",\n suggestion:\n \"Export a plain object, or author the locale's meta file by hand.\",\n });\n continue;\n }\n const parsed = folderMetaSchema.safeParse(mod);\n if (!parsed.success || parsed.data.title === undefined) {\n continue;\n }\n metas.push({\n contentRoot,\n data: parsed.data,\n dir: dir === \".\" ? \"\" : dir,\n file,\n raw,\n sourceRel: relative(project.context.root, file),\n title: parsed.data.title,\n });\n }\n }\n return { diagnostics, metas };\n};\n\n/**\n * Emit the per-locale meta module: every source key copied verbatim, only the\n * title swapped for its translation. Keys alphabetical, values as JSON.\n */\nexport const generateMetaModule = (\n meta: FolderMeta,\n translatedTitle: string\n): string => {\n const data = {\n ...meta,\n title: translatedTitle,\n };\n const lines = Object.entries(data)\n .toSorted(([a], [b]) => (a < b ? -1 : 1))\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => ` ${key}: ${JSON.stringify(value)},`);\n return [\n \"// Generated by `blume translate` — edit the default locale's meta file\",\n \"// and rerun the translation instead of editing this copy.\",\n \"export default {\",\n ...lines,\n \"};\",\n \"\",\n ].join(\"\\n\");\n};\n",
11
11
  "import type { LocaleConfig } from \"../core/schema.ts\";\n\n/**\n * The frontmatter key paths whose *values* an agent may translate. Everything\n * else in the frontmatter is copied from the source verbatim by the validator,\n * so this list is both the prompt's instruction and the reconciliation\n * contract in `validate.ts`.\n */\nexport const TRANSLATABLE_KEY_PATHS: readonly (readonly string[])[] = [\n [\"title\"],\n [\"description\"],\n [\"sidebar\", \"label\"],\n [\"sidebar\", \"badge\"],\n [\"seo\", \"title\"],\n [\"seo\", \"description\"],\n];\n\n/** \"French (fr)\" — the configured display label plus the code. */\nconst localeName = (locale: LocaleConfig): string =>\n `${locale.label} (${locale.code})`;\n\nconst KEY_LIST = TRANSLATABLE_KEY_PATHS.map((path) => path.join(\".\")).join(\n \", \"\n);\n\n/**\n * The page-translation prompt. Delivered over stdin (no argv limits), so the\n * full source file rides along inline. When the page was translated before,\n * the previous translation rides along too: without it, every retranslation\n * is a from-scratch rewrite in which the agent re-decides register, dialect,\n * and terminology (du vs Sie, pt-BR vs pt-PT) and churns the whole page for\n * a one-paragraph source edit.\n */\nexport const pagePrompt = (\n sourceText: string,\n target: LocaleConfig,\n source: LocaleConfig,\n previousTranslation?: string\n): string => {\n const styleRule =\n target.style === undefined\n ? \"\"\n : `\n- Write the translation in this style: ${target.style}`;\n const previousRule =\n previousTranslation === undefined\n ? \"\"\n : `\n- A translation of an earlier revision of this page is included below. Match its register, formality, dialect, and terminology exactly; re-translate only what the changed source requires and keep everything else word-for-word identical.${\n target.style === undefined\n ? \"\"\n : \" Where the previous translation disagrees with the style rule above, the style rule wins.\"\n }`;\n const previousSection =\n previousTranslation === undefined\n ? \"\"\n : `\nThe previous translation begins after this line and ends at the \"page source\" marker.\n${previousTranslation}`;\n return `Translate the following documentation page from ${localeName(\n source\n )} into ${localeName(target)}.\n\nRules:\n- Translate the prose: headings, paragraphs, list items, table cells, admonitions, and image alt text.\n- In the YAML frontmatter, translate ONLY the values of these keys: ${KEY_LIST}. Copy every other frontmatter key and value exactly as written.\n- Keep the frontmatter valid YAML: if a translated value contains a colon followed by a space (\\`: \\`) or a space followed by \\`#\\`, or starts with a quote, a backtick, or another YAML indicator character, write it as a double-quoted string and escape any double quotes inside it.\n- Never translate or alter: code blocks, inline code, import/export statements, JSX/MDX component names and their attributes, URLs, link targets, HTML tags, or frontmatter keys.\n- A heading may end with anchor markers: \\`[#some-id]\\`, \\`{#some-id}\\` (also written \\`\\\\{#some-id\\\\}\\`), \\`[!toc]\\`, or \\`[toc]\\`. Copy every marker exactly as written, in the same position at the end of the translated heading — never translate, reorder, or drop a marker, and never change the id inside \\`[#...]\\` or \\`{#...}\\` (anchors must stay identical across languages).\n\n- Preserve the document structure exactly: the same headings, the same lists and tables, and the same number of code fences.${styleRule}${previousRule}\n- Output ONLY the complete translated file. Do not wrap it in a code fence. Do not add commentary before or after it.\n${previousSection}\nThe page source begins after this line.\n${sourceText}`;\n};\n\n/**\n * The sidebar-titles prompt: a JSON object of `{directory: title}` in, the\n * same keys with translated values out.\n */\nexport const metaPrompt = (\n titles: Record<string, string>,\n target: LocaleConfig,\n source: LocaleConfig\n): string => `Translate the following documentation sidebar section titles from ${localeName(\n source\n)} into ${localeName(target)}.\n\nThe input is a JSON object mapping a directory path to its title. Reply with ONLY a JSON object that has exactly the same keys, where each value is the title translated into ${localeName(\n target\n)}. Do not translate the keys. Do not add commentary.${\n target.style === undefined\n ? \"\"\n : `\\nWrite the titles in this style: ${target.style}`\n}\n\n${JSON.stringify(titles, null, 2)}`;\n",
12
12
  "import { scanBody } from \"../core/sources/normalize.ts\";\n\n/**\n * Keep heading anchors identical across languages. A translated heading slugs\n * to a different id (`## Ordering` → `#ordering`, `## Reihenfolge` →\n * `#reihenfolge`), so a `/guide#ordering` link — which the runtime keeps\n * inside the reader's locale — would land at the top of the translated page.\n * After a translation validates, every heading whose rendered id would differ\n * from its source counterpart gets the source id pinned as a trailing\n * `[#id]` marker, so the anchor index (and every `#fragment` link) agrees in\n * every locale. Headings the translation already pins are left alone: the\n * agent is told to copy markers verbatim, and a hand-authored pin is the\n * translator's choice.\n *\n * Headings pair positionally, so the translation must mirror the source's\n * heading structure (the prompt demands exactly that); when it doesn't, no\n * pins are added and the text is returned unchanged with a reason.\n */\n\nexport interface PinResult {\n /** Number of headings that received a pin. */\n pinned: number;\n /** Why no pins were added, when the structures don't line up. */\n skipped?: string;\n text: string;\n}\n\n/** An ATX heading's optional closing hash run, which a marker must precede. */\nconst ATX_CLOSE = /\\s+#+$/u;\n\nconst structureOf = (headings: readonly { depth: number }[]): string =>\n headings.map((heading) => heading.depth).join(\",\");\n\n/** Append `[#id]` to a heading line, ahead of any closing `##` and line end. */\nconst pinLine = (line: string, id: string): string => {\n const eol = line.endsWith(\"\\r\") ? \"\\r\" : \"\";\n const body = line.slice(0, line.length - eol.length).trimEnd();\n const close = body.match(ATX_CLOSE)?.[0] ?? \"\";\n const head = body.slice(0, body.length - close.length);\n return `${head} [#${id}]${close}${eol}`;\n};\n\nexport const pinHeadingAnchors = (\n sourceText: string,\n translatedText: string\n): PinResult => {\n const source = scanBody(sourceText);\n const translated = scanBody(translatedText);\n if (structureOf(source.headings) !== structureOf(translated.headings)) {\n return {\n pinned: 0,\n skipped: `heading structure differs (source has ${source.headings.length} headings, translation has ${translated.headings.length})`,\n text: translatedText,\n };\n }\n\n const lines = translatedText.split(\"\\n\");\n let pinned = 0;\n for (const [index, heading] of translated.headings.entries()) {\n const site = translated.sites[index];\n const sourceId = source.headings[index]?.slug;\n if (\n !site ||\n site.pinned ||\n sourceId === undefined ||\n heading.slug === sourceId\n ) {\n continue;\n }\n lines[site.line - 1] = pinLine(lines[site.line - 1] ?? \"\", sourceId);\n pinned += 1;\n }\n if (pinned === 0) {\n return { pinned, text: translatedText };\n }\n\n // The pins must reproduce the source ids exactly once rendered; anything\n // else (a heading the line-based rewrite couldn't reach) keeps the text as\n // the agent wrote it rather than shipping a half-pinned page.\n const text = lines.join(\"\\n\");\n const rendered = scanBody(text).headings.map((heading) => heading.slug);\n const expected = source.headings.map((heading) => heading.slug);\n if (rendered.join(\"\\n\") !== expected.join(\"\\n\")) {\n return {\n pinned: 0,\n skipped: \"pinned anchors did not reproduce the source heading ids\",\n text: translatedText,\n };\n }\n return { pinned, text };\n};\n",
13
- "import matter from \"../core/frontmatter.ts\";\nimport { pinHeadingAnchors } from \"./anchors.ts\";\nimport { TRANSLATABLE_KEY_PATHS } from \"./prompts.ts\";\n\n/**\n * Structural validation of agent output. The agent is never trusted for\n * structure: the final frontmatter is *reconstructed* from the source (clone\n * the source data, overlay only the translatable string values), so invented\n * keys are dropped, deleted keys are restored, and slugs/icons/orders/dates\n * stay source-verbatim by construction. Only then is the file written.\n */\n\nexport type ValidationResult =\n | { ok: true; text: string }\n | { ok: false; reason: string };\n\n/**\n * A parsed YAML frontmatter value (agent meta replies parse from JSON into the\n * same shape). js-yaml can also mint Dates and other rich scalars; the\n * traversal below only ever distinguishes \"keyed object\" from \"string\", so\n * they ride along as the object arm.\n */\ntype FrontmatterValue =\n | string\n | number\n | boolean\n | null\n | FrontmatterValue[]\n | FrontmatterData;\n\ninterface FrontmatterData {\n [key: string]: FrontmatterValue;\n}\n\n// gray-matter strips a leading byte order mark before it looks for the fence,\n// so a BOM-prefixed file still has frontmatter — this test must agree, or the\n// reconstruction below writes the body alone and the metadata is lost.\nconst FRONTMATTER_OPEN = /^\uFEFF?---\\r?\\n/u;\nconst FENCE_LINE = /^\\s*(?:```|~~~)/u;\n\n/**\n * Strip exactly one symmetric outer code fence (any info string) — the one\n * wrapper agents add despite being told not to. Anything else (no fence, or a\n * fence that isn't the entire output) is returned trimmed and untouched.\n */\nexport const stripOuterFence = (text: string): string => {\n const trimmed = text.trim();\n const match = trimmed.match(\n /^(?<fence>`{3,}|~{3,})[^\\n]*\\n(?<inner>[\\s\\S]*?)\\n\\k<fence>\\s*$/u\n );\n return match?.groups?.inner ?? trimmed;\n};\n\n/** Lines opening or closing a code fence; their count must survive translation. */\nconst countFenceLines = (text: string): number =>\n text.split(\"\\n\").filter((line) => FENCE_LINE.test(line)).length;\n\nconst isKeyedObject = (\n value: FrontmatterValue | undefined\n): value is FrontmatterData => typeof value === \"object\" && value !== null;\n\nconst isString = (value: FrontmatterValue | undefined): value is string =>\n typeof value === \"string\";\n\nconst getPath = (\n data: FrontmatterValue,\n path: readonly string[]\n): FrontmatterValue | undefined => {\n let value: FrontmatterValue | undefined = data;\n for (const key of path) {\n if (!isKeyedObject(value)) {\n return;\n }\n value = value[key];\n }\n return value;\n};\n\n/** Set `path` on `data`; only called for paths whose parents exist in `data`. */\nconst setPath = (\n data: FrontmatterData,\n path: readonly string[],\n value: string\n): void => {\n let parent = data;\n for (const key of path.slice(0, -1)) {\n // SAFETY: callers only set paths that getPath already resolved to a string\n // on this same (cloned) data, so every intermediate step is a keyed object.\n parent = parent[key] as FrontmatterData;\n }\n // SAFETY: every TRANSLATABLE_KEY_PATHS entry is a non-empty tuple, so the\n // path always has a final key.\n parent[path.at(-1) as string] = value;\n};\n\nconst ensureTrailingNewline = (text: string): string =>\n text.endsWith(\"\\n\") ? text : `${text}\\n`;\n\n/**\n * Validate one translated page against its source and reassemble the file to\n * write. Fails (no write happens) on empty output, unparseable or missing\n * frontmatter, an empty body, or a changed code-fence count.\n */\nexport const validateTranslation = (\n sourceText: string,\n agentText: string\n): ValidationResult => {\n // Only a fence the agent added is stripped. A source that is itself one\n // code block (a frontmatter-less partial holding a single bash block)\n // starts and ends with its own fence, which the translation must keep — so\n // for such a source the reply loses its outer fence only when it has more\n // fence lines than the source.\n const sourceIsFenced = stripOuterFence(sourceText) !== sourceText.trim();\n const candidate =\n sourceIsFenced && countFenceLines(agentText) <= countFenceLines(sourceText)\n ? agentText.trim()\n : stripOuterFence(agentText);\n if (candidate === \"\") {\n return { ok: false, reason: \"agent returned empty output\" };\n }\n\n const sourceHasFrontmatter = FRONTMATTER_OPEN.test(sourceText);\n const source = matter(sourceText);\n\n if (sourceHasFrontmatter && !FRONTMATTER_OPEN.test(candidate)) {\n return {\n ok: false,\n reason: \"translation dropped the frontmatter (must start with ---)\",\n };\n }\n\n let parsed: { content: string; data: FrontmatterData };\n try {\n parsed = matter(candidate);\n } catch (error) {\n // js-yaml's message leads with the problem and its line:column in the\n // file, then a multi-line code frame; the first line is enough to act on.\n const message = error instanceof Error ? error.message : String(error);\n return {\n ok: false,\n reason: `frontmatter does not parse as YAML: ${message.replace(/\\n[\\s\\S]*$/u, \"\")}`,\n };\n }\n\n const rawBody = ensureTrailingNewline(parsed.content.replace(/^\\r?\\n/u, \"\"));\n if (rawBody.trim() === \"\") {\n return { ok: false, reason: \"translation has an empty body\" };\n }\n\n const sourceFences = countFenceLines(source.content);\n const candidateFences = countFenceLines(rawBody);\n if (sourceFences !== candidateFences) {\n return {\n ok: false,\n reason: `code fence count changed (source has ${sourceFences}, translation has ${candidateFences})`,\n };\n }\n\n // Anchors stay identical across languages: each translated heading is\n // pinned to its source heading's id (see `anchors.ts`).\n const body = pinHeadingAnchors(source.content, rawBody).text;\n\n if (!sourceHasFrontmatter) {\n // A frontmatter-less source writes the body alone; any frontmatter the\n // agent invented is dropped with it.\n return { ok: true, text: body };\n }\n\n // Reconciliation by reconstruction: start from the SOURCE data and overlay\n // only the translatable key paths where both sides hold a string and the\n // translation is non-empty.\n const data: FrontmatterData = structuredClone(source.data);\n for (const path of TRANSLATABLE_KEY_PATHS) {\n const original = getPath(source.data, path);\n const translated = getPath(parsed.data, path);\n if (\n isString(original) &&\n isString(translated) &&\n translated.trim() !== \"\"\n ) {\n setPath(data, path, translated);\n }\n }\n\n return {\n ok: true,\n text: ensureTrailingNewline(matter.stringify(body, data)),\n };\n};\n\n/** A meta-batch parse: recovered titles by key, plus the keys still missing. */\nexport interface MetaTitlesResult {\n titles: Record<string, string>;\n missing: string[];\n}\n\n/**\n * Extract translated sidebar titles from a meta reply: tolerant first-`{`\n * to-last-`}` extraction (the eval `parseVerdict` idiom). Keys missing or\n * non-string in the reply land in `missing`, so a batch can partially succeed.\n */\nexport const parseMetaTitles = (\n agentText: string,\n expectedKeys: readonly string[]\n): MetaTitlesResult => {\n const start = agentText.indexOf(\"{\");\n const end = agentText.lastIndexOf(\"}\");\n let parsed: FrontmatterValue | undefined;\n if (start !== -1 && end > start) {\n try {\n parsed = JSON.parse(agentText.slice(start, end + 1));\n } catch {\n parsed = undefined;\n }\n }\n const record: FrontmatterData = isKeyedObject(parsed) ? parsed : {};\n\n const titles: Record<string, string> = {};\n const missing: string[] = [];\n for (const key of expectedKeys) {\n const value = record[key];\n if (isString(value) && value.trim() !== \"\") {\n titles[key] = value;\n } else {\n missing.push(key);\n }\n }\n return { missing, titles };\n};\n",
13
+ "import matter from \"../core/frontmatter.ts\";\nimport { pinHeadingAnchors } from \"./anchors.ts\";\nimport { TRANSLATABLE_KEY_PATHS } from \"./prompts.ts\";\n\n/**\n * Structural validation of agent output. The agent is never trusted for\n * structure: the final frontmatter is *reconstructed* from the source (clone\n * the source data, overlay only the translatable string values), so invented\n * keys are dropped, deleted keys are restored, and slugs/icons/orders/dates\n * stay source-verbatim by construction. The one source key left out is\n * `seo.canonical` (see `dropCanonical`). Only then is the file written.\n */\n\nexport type ValidationResult =\n | { ok: true; text: string }\n | { ok: false; reason: string };\n\n/**\n * A parsed YAML frontmatter value (agent meta replies parse from JSON into the\n * same shape). js-yaml can also mint Dates and other rich scalars; the\n * traversal below only ever distinguishes \"keyed object\" from \"string\", so\n * they ride along as the object arm.\n */\ntype FrontmatterValue =\n | string\n | number\n | boolean\n | null\n | FrontmatterValue[]\n | FrontmatterData;\n\ninterface FrontmatterData {\n [key: string]: FrontmatterValue;\n}\n\n// gray-matter strips a leading byte order mark before it looks for the fence,\n// so a BOM-prefixed file still has frontmatter — this test must agree, or the\n// reconstruction below writes the body alone and the metadata is lost.\nconst FRONTMATTER_OPEN = /^\uFEFF?---\\r?\\n/u;\nconst FENCE_LINE = /^\\s*(?:```|~~~)/u;\n\n/**\n * Strip exactly one symmetric outer code fence (any info string) — the one\n * wrapper agents add despite being told not to. Anything else (no fence, or a\n * fence that isn't the entire output) is returned trimmed and untouched.\n */\nexport const stripOuterFence = (text: string): string => {\n const trimmed = text.trim();\n const match = trimmed.match(\n /^(?<fence>`{3,}|~{3,})[^\\n]*\\n(?<inner>[\\s\\S]*?)\\n\\k<fence>\\s*$/u\n );\n return match?.groups?.inner ?? trimmed;\n};\n\n/** Lines opening or closing a code fence; their count must survive translation. */\nconst countFenceLines = (text: string): number =>\n text.split(\"\\n\").filter((line) => FENCE_LINE.test(line)).length;\n\nconst isKeyedObject = (\n value: FrontmatterValue | undefined\n): value is FrontmatterData => typeof value === \"object\" && value !== null;\n\nconst isString = (value: FrontmatterValue | undefined): value is string =>\n typeof value === \"string\";\n\nconst getPath = (\n data: FrontmatterValue,\n path: readonly string[]\n): FrontmatterValue | undefined => {\n let value: FrontmatterValue | undefined = data;\n for (const key of path) {\n if (!isKeyedObject(value)) {\n return;\n }\n value = value[key];\n }\n return value;\n};\n\n/** Set `path` on `data`; only called for paths whose parents exist in `data`. */\nconst setPath = (\n data: FrontmatterData,\n path: readonly string[],\n value: string\n): void => {\n let parent = data;\n for (const key of path.slice(0, -1)) {\n // SAFETY: callers only set paths that getPath already resolved to a string\n // on this same (cloned) data, so every intermediate step is a keyed object.\n parent = parent[key] as FrontmatterData;\n }\n // SAFETY: every TRANSLATABLE_KEY_PATHS entry is a non-empty tuple, so the\n // path always has a final key.\n parent[path.at(-1) as string] = value;\n};\n\n/**\n * Drop `seo.canonical`, and `seo` with it when nothing else is left. The\n * source's canonical names a page in the source language (most often the\n * source page itself); copied into a translation, it would canonicalize the\n * translation to another language and take it out of search. Without it the\n * translation gets Blume's default canonical: its own URL.\n */\nconst dropCanonical = (data: FrontmatterData): void => {\n const { seo } = data;\n if (!isKeyedObject(seo) || !(\"canonical\" in seo)) {\n return;\n }\n const { canonical: _canonical, ...rest } = seo;\n if (Object.keys(rest).length > 0) {\n data.seo = rest;\n } else {\n delete data.seo;\n }\n};\n\nconst ensureTrailingNewline = (text: string): string =>\n text.endsWith(\"\\n\") ? text : `${text}\\n`;\n\n/**\n * Validate one translated page against its source and reassemble the file to\n * write. Fails (no write happens) on empty output, unparseable or missing\n * frontmatter, an empty body, or a changed code-fence count.\n */\nexport const validateTranslation = (\n sourceText: string,\n agentText: string\n): ValidationResult => {\n // Only a fence the agent added is stripped. A source that is itself one\n // code block (a frontmatter-less partial holding a single bash block)\n // starts and ends with its own fence, which the translation must keep — so\n // for such a source the reply loses its outer fence only when it has more\n // fence lines than the source.\n const sourceIsFenced = stripOuterFence(sourceText) !== sourceText.trim();\n const candidate =\n sourceIsFenced && countFenceLines(agentText) <= countFenceLines(sourceText)\n ? agentText.trim()\n : stripOuterFence(agentText);\n if (candidate === \"\") {\n return { ok: false, reason: \"agent returned empty output\" };\n }\n\n const sourceHasFrontmatter = FRONTMATTER_OPEN.test(sourceText);\n const source = matter(sourceText);\n\n if (sourceHasFrontmatter && !FRONTMATTER_OPEN.test(candidate)) {\n return {\n ok: false,\n reason: \"translation dropped the frontmatter (must start with ---)\",\n };\n }\n\n let parsed: { content: string; data: FrontmatterData };\n try {\n parsed = matter(candidate);\n } catch (error) {\n // js-yaml's message leads with the problem and its line:column in the\n // file, then a multi-line code frame; the first line is enough to act on.\n const message = error instanceof Error ? error.message : String(error);\n return {\n ok: false,\n reason: `frontmatter does not parse as YAML: ${message.replace(/\\n[\\s\\S]*$/u, \"\")}`,\n };\n }\n\n const rawBody = ensureTrailingNewline(parsed.content.replace(/^\\r?\\n/u, \"\"));\n if (rawBody.trim() === \"\") {\n return { ok: false, reason: \"translation has an empty body\" };\n }\n\n const sourceFences = countFenceLines(source.content);\n const candidateFences = countFenceLines(rawBody);\n if (sourceFences !== candidateFences) {\n return {\n ok: false,\n reason: `code fence count changed (source has ${sourceFences}, translation has ${candidateFences})`,\n };\n }\n\n // Anchors stay identical across languages: each translated heading is\n // pinned to its source heading's id (see `anchors.ts`).\n const body = pinHeadingAnchors(source.content, rawBody).text;\n\n if (!sourceHasFrontmatter) {\n // A frontmatter-less source writes the body alone; any frontmatter the\n // agent invented is dropped with it.\n return { ok: true, text: body };\n }\n\n // Reconciliation by reconstruction: start from the SOURCE data and overlay\n // only the translatable key paths where both sides hold a string and the\n // translation is non-empty.\n const data: FrontmatterData = structuredClone(source.data);\n for (const path of TRANSLATABLE_KEY_PATHS) {\n const original = getPath(source.data, path);\n const translated = getPath(parsed.data, path);\n if (\n isString(original) &&\n isString(translated) &&\n translated.trim() !== \"\"\n ) {\n setPath(data, path, translated);\n }\n }\n dropCanonical(data);\n\n return {\n ok: true,\n text: ensureTrailingNewline(matter.stringify(body, data)),\n };\n};\n\n/** A meta-batch parse: recovered titles by key, plus the keys still missing. */\nexport interface MetaTitlesResult {\n titles: Record<string, string>;\n missing: string[];\n}\n\n/**\n * Extract translated sidebar titles from a meta reply: tolerant first-`{`\n * to-last-`}` extraction (the eval `parseVerdict` idiom). Keys missing or\n * non-string in the reply land in `missing`, so a batch can partially succeed.\n */\nexport const parseMetaTitles = (\n agentText: string,\n expectedKeys: readonly string[]\n): MetaTitlesResult => {\n const start = agentText.indexOf(\"{\");\n const end = agentText.lastIndexOf(\"}\");\n let parsed: FrontmatterValue | undefined;\n if (start !== -1 && end > start) {\n try {\n parsed = JSON.parse(agentText.slice(start, end + 1));\n } catch {\n parsed = undefined;\n }\n }\n const record: FrontmatterData = isKeyedObject(parsed) ? parsed : {};\n\n const titles: Record<string, string> = {};\n const missing: string[] = [];\n for (const key of expectedKeys) {\n const value = record[key];\n if (isString(value) && value.trim() !== \"\") {\n titles[key] = value;\n } else {\n missing.push(key);\n }\n }\n return { missing, titles };\n};\n",
14
14
  "import { existsSync, readdirSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { extname, join, relative } from \"pathe\";\n\nimport { localeCodes, localeTargetPath } from \"../core/i18n.ts\";\nimport { scanProject } from \"../core/project-graph.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { Diagnostic, PageRecord } from \"../core/types.ts\";\nimport { hashSource } from \"./ledger.ts\";\nimport type { TranslationLedger } from \"./ledger.ts\";\nimport { discoverTranslatableMeta, metaTargetPath } from \"./meta.ts\";\nimport type { TranslatableMeta } from \"./meta.ts\";\n\n/**\n * Classification of every (source, target locale) pair:\n * - `missing` — no non-fallback page record for (translationKey, locale).\n * Existence is the graph record, never a disk probe, so a hand-authored\n * translation at a non-canonical name still counts as existing.\n * - `stale` — a record exists, but the ledger hash differs from the current\n * source hash (the source changed since its last translation).\n * - up-to-date — hashes match (counted, not itemized).\n * - untracked — a record exists with no ledger entry: a pre-existing human\n * translation. Adopted (stamped at the current hash), never overwritten;\n * only `--force` retranslates it.\n */\nexport type WorkStatus = \"missing\" | \"stale\";\n\nexport interface PageWorkItem {\n kind: \"page\";\n /** Target locale code (configured casing). */\n locale: string;\n /** Absolute path of the default-locale source file. */\n sourcePath: string;\n /** POSIX root-relative source path — the ledger key. */\n sourceRel: string;\n status: WorkStatus;\n /**\n * Absolute target path: an existing translation's own file (which can sit\n * at a non-canonical name, like a hand-written `fr/guide.md` for\n * `guide.mdx`), otherwise the canonical `localeTargetPath`.\n */\n targetPath: string;\n /** POSIX root-relative target path, for display. */\n targetRel: string;\n /** Copy the file unchanged instead of translating it — a non-markdown\n * include partial (code embed) has no prose, but must still exist in each\n * locale tree so the translated pages' relative includes resolve. */\n verbatim?: boolean;\n}\n\n/** One meta file needing its title in one locale, inside a `MetaWorkItem`. */\nexport interface MetaWorkEntry {\n meta: TranslatableMeta;\n status: WorkStatus;\n /** Absolute path of the per-locale meta module (see `metaTargetPath`). */\n targetPath: string;\n}\n\n/** All of one locale's needed meta titles — a single agent call. */\nexport interface MetaWorkItem {\n kind: \"meta\";\n entries: MetaWorkEntry[];\n locale: string;\n}\n\nexport type WorkItem = MetaWorkItem | PageWorkItem;\n\n/** A pre-existing translation with no ledger entry, to adopt (stamp) as-is. */\nexport interface UntrackedEntry {\n /** The current source hash to stamp. */\n hash: string;\n kind: \"meta\" | \"page\";\n locale: string;\n sourceRel: string;\n}\n\nexport interface TranslateWorkList {\n diagnostics: Diagnostic[];\n items: WorkItem[];\n /** Every ledger key in the current universe (for pruning). */\n knownSources: Set<string>;\n /** The locales this run targets (configured casing, default excluded). */\n targetLocales: string[];\n untracked: UntrackedEntry[];\n /** Count of (source, locale) pairs already translated and current. */\n upToDate: number;\n}\n\nconst PAGE_EXTENSIONS = new Set([\".md\", \".mdx\"]);\n\n/**\n * The names in each content root, read once per root: a locale folder authored\n * in another casing (`pt-br/` for `pt-BR`) is where `localeTargetPath` puts\n * that locale's translations.\n */\nconst rootFolders = (): ((contentRoot: string) => string[]) => {\n const read = new Map<string, string[]>();\n return (contentRoot) => {\n const cached = read.get(contentRoot);\n if (cached) {\n return cached;\n }\n const names = readdirSync(contentRoot);\n read.set(contentRoot, names);\n return names;\n };\n};\n\n/**\n * Scan the project for a translation run: drafts included. A production\n * (`build`) scan drops them, so a hand-written translation marked\n * `draft: true` would look missing and be overwritten, and a source page\n * drafted for a while would lose its ledger stamps — its outdated\n * translations then reading as current once it's published again. A dev scan\n * keeps drafts and differs only in reusing cached remote content, which\n * translation never reads.\n */\nexport const scanForTranslation = (root: string): Promise<BlumeProject> =>\n scanProject(root, { mode: \"dev\" });\n\n/**\n * The translatable page universe: filesystem-backed default-locale pages.\n * Remote/staged sources have no writable path; fallback records are padding;\n * a `.$.` shared file already materializes into every locale.\n */\nconst translatablePages = (\n project: BlumeProject,\n i18n: NonNullable<BlumeProject[\"config\"][\"i18n\"]>\n): {\n page: PageRecord;\n contentRoot: string;\n ext: string;\n sourcePath: string;\n}[] => {\n const rootsByName = new Map(\n project.sources.flatMap((source) =>\n source.staged || !source.contentRoot\n ? []\n : [[source.name, source.contentRoot] as const]\n )\n );\n const seen = new Set<string>();\n const universe: {\n page: PageRecord;\n contentRoot: string;\n ext: string;\n sourcePath: string;\n }[] = [];\n for (const page of project.graph.pages) {\n if (\n page.locale !== i18n.defaultLocale ||\n page.fallback ||\n !page.sourcePath ||\n seen.has(page.sourcePath) ||\n // Archived snapshots are frozen and carry their own translations —\n // they are never (re)translated. (`localeTargetPath` would also compute\n // `fr/v1.0/…` where the snapshot's translation lives at `v1.0/fr/…`.)\n page.version !== \"\"\n ) {\n continue;\n }\n const ext = extname(page.sourcePath);\n const base = page.sourcePath.slice(0, page.sourcePath.length - ext.length);\n const contentRoot = rootsByName.get(page.source.name);\n if (!PAGE_EXTENSIONS.has(ext) || base.endsWith(\".$\") || !contentRoot) {\n continue;\n }\n seen.add(page.sourcePath);\n universe.push({ contentRoot, ext, page, sourcePath: page.sourcePath });\n }\n return universe;\n};\n\n/** Outcome of classifying one (source, locale) pair against the ledger:\n * a work status, an existing translation to adopt, or already current. */\ntype PairOutcome = WorkStatus | \"current\" | \"untracked\";\n\n/** The shared pair classifier — see the WorkStatus doc for the taxonomy. */\nconst classifyPair = (\n exists: boolean,\n stamp: string | undefined,\n hash: string,\n force: boolean\n): PairOutcome => {\n if (!exists) {\n return \"missing\";\n }\n if (stamp === undefined) {\n return force ? \"stale\" : \"untracked\";\n }\n return stamp !== hash || force ? \"stale\" : \"current\";\n};\n\n/** The classified work for the include partials the pages reference. */\ninterface PartialWork {\n items: PageWorkItem[];\n /** Ledger keys to add to the run's known-source universe. */\n sources: string[];\n untracked: UntrackedEntry[];\n upToDate: number;\n}\n\n/**\n * Work for the include partials referenced by the translatable pages. Under\n * the `dir` parser each locale is its own tree, so a translated page's\n * relative `<include>` resolves *inside the locale tree* — the partial must\n * exist there too, or the next build fails with BLUME_INCLUDE_NOT_FOUND on\n * every locale. (Under `dot` the translated file sits beside its source and\n * the shared partial already resolves; nothing to do.) Markdown partials are\n * translated like pages; anything else (code embeds) is copied verbatim. A\n * partial that is itself a page is skipped — its own translation already\n * lands at the mirrored path. Existence is a disk probe: partials have no\n * page records to consult.\n */\nconst partialWorkItems = async (\n universe: ReturnType<typeof translatablePages>,\n project: BlumeProject,\n i18n: NonNullable<BlumeProject[\"config\"][\"i18n\"]>,\n ledger: TranslationLedger,\n targetLocales: string[],\n force: boolean\n): Promise<PartialWork> => {\n const work: PartialWork = {\n items: [],\n sources: [],\n untracked: [],\n upToDate: 0,\n };\n if (i18n.parser !== \"dir\") {\n return work;\n }\n const { root } = project.context;\n const pagePaths = new Set(\n project.graph.pages.flatMap((page) =>\n page.sourcePath ? [page.sourcePath] : []\n )\n );\n const folders = rootFolders();\n const partials = new Map<string, string>();\n for (const { page, contentRoot } of universe) {\n for (const partial of page.includes ?? []) {\n if (!(pagePaths.has(partial) || partials.has(partial))) {\n partials.set(partial, contentRoot);\n }\n }\n }\n for (const [partialPath, contentRoot] of partials) {\n const sourceRel = relative(root, partialPath);\n work.sources.push(sourceRel);\n // oxlint-disable-next-line no-await-in-loop -- one read per partial\n const hash = hashSource(await readFile(partialPath, \"utf-8\"));\n const ext = extname(partialPath);\n const verbatim = !PAGE_EXTENSIONS.has(ext.toLowerCase());\n const contentRel = relative(contentRoot, partialPath);\n for (const locale of targetLocales) {\n const targetPath = join(\n contentRoot,\n localeTargetPath(contentRel, ext, locale, i18n, folders(contentRoot))\n );\n const item = (status: WorkStatus): PageWorkItem => {\n const partialItem: PageWorkItem = {\n kind: \"page\",\n locale,\n sourcePath: partialPath,\n sourceRel,\n status,\n targetPath,\n targetRel: relative(root, targetPath),\n };\n if (verbatim) {\n partialItem.verbatim = true;\n }\n return partialItem;\n };\n const stamp = ledger.files[sourceRel]?.[locale];\n const outcome = classifyPair(existsSync(targetPath), stamp, hash, force);\n if (outcome === \"untracked\") {\n work.untracked.push({ hash, kind: \"page\", locale, sourceRel });\n } else if (outcome === \"current\") {\n work.upToDate += 1;\n } else {\n work.items.push(item(outcome));\n }\n }\n }\n return work;\n};\n\n/**\n * Every existing translation, keyed by `translationKey` and locale, with the\n * file it was read from when that file is on disk in a filesystem source. A\n * retranslation writes there: an adopted hand-written `fr/guide.md` for a\n * `guide.mdx` source is replaced in place, never joined by a canonical\n * `fr/guide.mdx` that would publish the route twice.\n */\nconst existingTranslations = (\n project: BlumeProject\n): Map<string, string | undefined> => {\n const writableSources = new Set(\n project.sources.flatMap((source) =>\n source.staged || !source.contentRoot ? [] : [source.name]\n )\n );\n const translated = new Map<string, string | undefined>();\n for (const page of project.graph.pages) {\n const key = `${page.translationKey}\\0${page.locale}`;\n if (page.fallback || translated.has(key)) {\n continue;\n }\n translated.set(\n key,\n page.sourcePath && writableSources.has(page.source.name)\n ? page.sourcePath\n : undefined\n );\n }\n return translated;\n};\n\n/**\n * Compute the run's work: which (source, locale) pairs are missing or stale,\n * which existing translations to adopt, and what's already up to date.\n * `force` promotes every pair to work; `locales` narrows the targets.\n */\nexport const computeWorkList = async (\n project: BlumeProject,\n ledger: TranslationLedger,\n options: { force?: boolean; locales?: string[] } = {}\n): Promise<TranslateWorkList> => {\n const { i18n } = project.config;\n if (!i18n) {\n return {\n diagnostics: [],\n items: [],\n knownSources: new Set(),\n targetLocales: [],\n untracked: [],\n upToDate: 0,\n };\n }\n const targetLocales = localeCodes(i18n).filter(\n (code) =>\n code !== i18n.defaultLocale &&\n (options.locales === undefined || options.locales.includes(code))\n );\n\n const translated = existingTranslations(project);\n\n const { root } = project.context;\n const knownSources = new Set<string>();\n const untracked: UntrackedEntry[] = [];\n const pageItems: PageWorkItem[] = [];\n let upToDate = 0;\n\n const universe = translatablePages(project, i18n);\n const folders = rootFolders();\n\n for (const { page, contentRoot, ext, sourcePath } of universe) {\n const sourceRel = relative(root, sourcePath);\n knownSources.add(sourceRel);\n // oxlint-disable-next-line no-await-in-loop -- one read per source file\n const hash = hashSource(await readFile(sourcePath, \"utf-8\"));\n const contentRel = relative(contentRoot, sourcePath);\n\n for (const locale of targetLocales) {\n const key = `${page.translationKey}\\0${locale}`;\n const targetPath =\n translated.get(key) ??\n join(\n contentRoot,\n localeTargetPath(contentRel, ext, locale, i18n, folders(contentRoot))\n );\n const item = (status: WorkStatus): PageWorkItem => ({\n kind: \"page\",\n locale,\n sourcePath,\n sourceRel,\n status,\n targetPath,\n targetRel: relative(root, targetPath),\n });\n const exists = translated.has(key);\n const stamp = ledger.files[sourceRel]?.[locale];\n const outcome = classifyPair(exists, stamp, hash, options.force === true);\n if (outcome === \"untracked\") {\n untracked.push({ hash, kind: \"page\", locale, sourceRel });\n } else if (outcome === \"current\") {\n upToDate += 1;\n } else {\n pageItems.push(item(outcome));\n }\n }\n }\n\n const partialWork = await partialWorkItems(\n universe,\n project,\n i18n,\n ledger,\n targetLocales,\n options.force ?? false\n );\n for (const rel of partialWork.sources) {\n knownSources.add(rel);\n }\n pageItems.push(...partialWork.items);\n untracked.push(...partialWork.untracked);\n upToDate += partialWork.upToDate;\n\n const meta = await discoverTranslatableMeta(project);\n const metaItems: MetaWorkItem[] = [];\n for (const locale of targetLocales) {\n const entries: MetaWorkEntry[] = [];\n for (const source of meta.metas) {\n knownSources.add(source.sourceRel);\n // The locale folder's existing meta module when there is one, so a\n // retranslation rewrites it instead of adding a `meta.ts` beside it.\n const targetPath = metaTargetPath(\n source,\n locale,\n i18n,\n folders(source.contentRoot)\n );\n const exists = existsSync(targetPath);\n const hash = hashSource(source.raw);\n const stamp = ledger.files[source.sourceRel]?.[locale];\n const entry = (status: WorkStatus): MetaWorkEntry => ({\n meta: source,\n status,\n targetPath,\n });\n const outcome = classifyPair(exists, stamp, hash, options.force === true);\n if (outcome === \"untracked\") {\n untracked.push({\n hash,\n kind: \"meta\",\n locale,\n sourceRel: source.sourceRel,\n });\n } else if (outcome === \"current\") {\n upToDate += 1;\n } else {\n entries.push(entry(outcome));\n }\n }\n if (entries.length > 0) {\n metaItems.push({ entries, kind: \"meta\", locale });\n }\n }\n\n pageItems.sort((a, b) =>\n a.sourceRel === b.sourceRel\n ? a.locale.localeCompare(b.locale)\n : a.sourceRel.localeCompare(b.sourceRel)\n );\n metaItems.sort((a, b) => a.locale.localeCompare(b.locale));\n\n return {\n diagnostics: meta.diagnostics,\n items: [...pageItems, ...metaItems],\n knownSources,\n targetLocales,\n untracked,\n upToDate,\n };\n};\n"
15
15
  ],
16
- "mappings": "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",
17
- "debugId": "8AF42E7E46BE994464756E2164756E21",
16
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;ACiBO,IAAM,+BAA+B;AAE5C,IAAM,aAAa,MAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB,KAAK,GAAG;AAAA,EACzB;AAAA,EACA;AACF;AAMA,IAAM,YAAY,CAAC,oBAAsC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AACF;AAOO,IAAM,qBAAqB,CAChC,MACA,oBACc,SAAS,WAAW,WAAW,IAAI,UAAU,eAAe;;;ACvD5E;AACA;AAEA;AACA;AAYO,IAAM,cAAc;AAW3B,IAAM,eAAe,EAAE,OAAO;AAAA,EAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;AAAA,EAC5D,SAAS,EAAE,QAAQ,CAAC;AACtB,CAAC;AAEM,IAAM,cAAc,OAA0B;AAAA,EACnD,OAAO,CAAC;AAAA,EACR,SAAS;AACX;AAWO,IAAM,aAAa,CAAC,SACzB,WAAW,QAAQ,EAChB,OAAO,KAAK,WAAW;AAAA,GAAQ;AAAA,CAAI,CAAC,EACpC,OAAO,KAAK,EACZ,MAAM,GAAG,EAAE;AAGhB,IAAM,kBAAkB;AAYjB,IAAM,aAAa,OAAO,SAA6C;AAAA,EAC5E,MAAM,OAAO,KAAK,MAAM,WAAW;AAAA,EACnC,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,IAClC,MAAM;AAAA,IACN,OAAO,YAAY;AAAA;AAAA,EAErB,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,GAAG;AAAA,IACrB,MAAM;AAAA,IACN,IAAI,gBAAgB,KAAK,GAAG,GAAG;AAAA,MAC7B,MAAM,IAAI,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,GAAG;AAAA,QACZ,UAAU;AAAA,QACV,YAAY,iCAAiC;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,IACA,OAAO,YAAY;AAAA;AAAA,EAErB,MAAM,SAAS,aAAa,UAAU,IAAI;AAAA,EAC1C,OAAO,OAAO,UAAU,OAAO,OAAO,YAAY;AAAA;AAI7C,IAAM,kBAAkB,CAAC,WAAsC;AAAA,EACpE,MAAM,QAAgD,CAAC;AAAA,EACvD,WAAW,UAAU,OAAO,KAAK,OAAO,KAAK,EAAE,SAAS,GAAG;AAAA,IACzD,MAAM,UAAU,OAAO,MAAM,WAAW,CAAC;AAAA,IACzC,MAAM,UAAU,OAAO,YACrB,OAAO,KAAK,OAAO,EAChB,SAAS,EACT,IAAI,CAAC,WAAW,CAAC,QAAQ,QAAQ,WAAW,EAAE,CAAC,CACpD;AAAA,EACF;AAAA,EACA,OAAO,GAAG,KAAK,UAAU,EAAE,OAAO,SAAS,OAAO,QAAQ,GAAG,MAAM,CAAC;AAAA;AAAA;AAS/D,IAAM,cAAc,OACzB,MACA,WACqB;AAAA,EACrB,MAAM,OAAO,KAAK,MAAM,WAAW;AAAA,EACnC,MAAM,UAAU,gBAAgB,MAAM;AAAA,EACtC,IAAI,WAA0B;AAAA,EAC9B,IAAI;AAAA,IACF,WAAW,MAAM,SAAS,MAAM,OAAO;AAAA,IACvC,MAAM;AAAA,IACN,WAAW;AAAA;AAAA,EAEb,IAAI,aAAa,SAAS;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,gBAAgB,MAAM,OAAO;AAAA,EACnC,OAAO;AAAA;AAIF,IAAM,cAAc,CACzB,QACA,WACA,QACA,SACS;AAAA,EACT,MAAM,UAAU,OAAO,MAAM,cAAc,CAAC;AAAA,EAC5C,QAAQ,UAAU;AAAA,EAClB,OAAO,MAAM,aAAa;AAAA;AAQrB,IAAM,cAAc,CACzB,QACA,cACA,iBACsB;AAAA,EACtB,MAAM,QAAgD,CAAC;AAAA,EACvD,YAAY,QAAQ,YAAY,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,IAC5D,IAAI,CAAC,aAAa,IAAI,MAAM,GAAG;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,MAAM,OAAO,OAAO,YAClB,OAAO,QAAQ,OAAO,EAAE,OAAO,EAAE,YAAY,aAAa,IAAI,MAAM,CAAC,CACvE;AAAA,IACA,IAAI,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AAAA,MAChC,MAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAAA,EACA,OAAO,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA;;;ACrK1C;AA6BA,IAAM,MAAM,OAAO,cAAc,EAAE;AAEnC,IAAM,QAAQ;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AACd;AAEA,IAAM,eAAe;AAAA,EACnB,QAAQ,OAAO;AAAA,EACf,SAAS,OAAO;AAAA,EAChB,YAAY,OAAO;AACrB;AAEO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,sBAAsB;AAGnC,IAAM,UAAU,KAAK;AAGd,IAAM,YAAY,CAAC,SACxB,KAAK,SAAS,SACV,GAAG,KAAK,eAAe,KAAK,WAC5B,aAAa,KAAK,QAAQ,WAAW,IAAI,KAAK,QAAQ,KAAK,QAAQ,aAAa,KAAK;AAMpF,IAAM,cAAc,CACzB,QACA,MACA,OACA,UACW;AAAA,EAGX,MAAM,QAAQ,OAAO;AAAA,EACrB,MAAM,OAAO,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS,YAAY;AAAA,EAGnE,OAAO,KAAK,OAAO,KAAK,eAAe,QAAQ,eAAe,OAAiB,KAAK,UAAU,KAAK,IAAI,QAAQ,OAAO,IAAI,GAAG,QAAQ,OAAO;AAAA;AAIvI,IAAM,cAAc,CAAC,WAAwC;AAAA,EAClE,MAAM,QAAQ,aAAa,OAAO;AAAA,EAClC,MAAM,QAAQ,MAAM,MAAM,OAAO,OAAO;AAAA,EACxC,MAAM,QAAQ,UAAU,OAAO,IAAI;AAAA,EACnC,IAAI,OAAO,WAAW,cAAc;AAAA,IAClC,MAAM,QAAQ,CAAC,QAAQ,OAAO,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC,EAC7D,OAAO,CAAC,SAAS,SAAS,EAAE,EAC5B,KAAK,GAAG;AAAA,IACX,OAAO,KAAK,SAAS,SAAS,OAAO,IAAI,KAAK;AAAA,EAChD;AAAA,EACA,MAAM,OAAO,OAAO,WAAW,YAAY,YAAY;AAAA,EACvD,OAAO,KAAK,SAAS,SAAS,MAAM,IAAI,IACtC,OAAO,SAAS,OAAO,IAAI,KAAK,OAAO,QAAQ,IAAI;AAAA;AAKhD,IAAM,sBAAsB,CACjC,WACA,aACA,UAEA,GAAG,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,2BAA2B,OAAO,OAAO;AAMjG,IAAM,uBAAuB,CAClC,QACA,aACW;AAAA,EACX,QAAQ,WAAW;AAAA,EACnB,MAAM,QAAQ;AAAA,IACZ,cAAc,OAAO,kBAAkB,OAAO,eAAe,IAAI,KAAK,YAAY,SAAS,cAAc,gBAAgB,SAAS,cAAc,WAAW,IAAI,KAAK;AAAA,IACpK,OAAO,SAAS,IAAI,GAAG,OAAO,kBAAkB;AAAA,IAChD,OAAO,UAAU,IAAI,GAAG,OAAO,oBAAoB;AAAA,IACnD,SAAS,UAAU,SAAS,IAAI,GAAG,SAAS,UAAU,mBAAmB;AAAA,IACzE,SAAS,WAAW,IAAI,GAAG,SAAS,gCAAgC;AAAA,IACpE,SAAS,OAAO,UAAU;AAAA,IAC1B,MAAM,OAAO,OAAO;AAAA,EACtB,EAAE,OAAO,CAAC,SAAS,SAAS,EAAE;AAAA,EAC9B,OAAO,MAAM,KAAK,KAAK;AAAA;AAIlB,IAAM,kBAAkB,CAAC,gBAC9B,YAAY,IACV,CAAC,eAAe,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,IAAI,WAAW,OAAO,GAC1E;AAYF,IAAM,YAAY,CAAC,aACjB,SAAS,MAAM,QAAQ,CAAC,SACtB,KAAK,SAAS,SACV;AAAA,EACE;AAAA,IACE,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,EACf;AACF,IACA,KAAK,QAAQ,IAAI,CAAC,WAA0B;AAAA,EAC1C,MAAM,MAAM,KAAK;AAAA,EACjB,QAAQ,KAAK;AAAA,EACb,WAAW,MAAM,KAAK;AAAA,EACtB,QAAQ,MAAM;AAChB,EAAE,CACR;AAQF,IAAM,mBAAmB,CAAC,aACxB,UAAU,QAAQ,EAAE,IAAI,CAAC,SAAS;AAAA,EAChC,MACE,IAAI,WAAW,YACX,4BACA;AAAA,EACN,MAAM,IAAI;AAAA,EACV,SACE,IAAI,WAAW,YACX,GAAG,IAAI,qBAAqB,IAAI,yBAChC,QAAQ,IAAI,0BAA0B,IAAI;AAAA,EAChD,UAAU;AAAA,EACV,YACE;AACJ,EAAE;AAGG,IAAM,aAAa,CAAC,aAA0C;AAAA,EACnE,GAAG,UAAU,QAAQ,EAAE,IACrB,CAAC,QACC,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,eAAe,IAAI,UAAU,OAAO,IAAI,IAAI,MAAM,GAClF;AAAA,EACA,GAAG,SAAS,UAAU,IACpB,CAAC,UACC,KAAK,OAAO,IAAI,KAAK,MAAM,eAAe,MAAM,sDAAsD,GAC1G;AACF;AAGO,IAAM,mBAAmB,CAAC,aAAwC;AAAA,EACvE,MAAM,OAAO,UAAU,QAAQ;AAAA,EAC/B,MAAM,UAAU,KAAK,OAAO,CAAC,QAAQ,IAAI,WAAW,SAAS,EAAE;AAAA,EAC/D,MAAM,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,WAAW,OAAO,EAAE;AAAA,EAC3D,MAAM,QAAQ;AAAA,IACZ,UAAU,IAAI,GAAG,oBAAoB;AAAA,IACrC,QAAQ,IAAI,GAAG,gBAAgB;AAAA,IAC/B,SAAS,UAAU,SAAS,IACxB,GAAG,SAAS,UAAU,qBACtB;AAAA,IACJ,GAAG,SAAS;AAAA,EACd,EAAE,OAAO,CAAC,SAAS,SAAS,EAAE;AAAA,EAC9B,OAAO,MAAM,KAAK,KAAK;AAAA;AAIlB,IAAM,WAAW,CAAC,aACvB,SAAS,MAAM,SAAS;AAQnB,IAAM,kBAAkB,CAAC,aAAwC;AAAA,EACtE,MAAM,cAAc,CAAC,GAAG,SAAS,aAAa,GAAG,iBAAiB,QAAQ,CAAC;AAAA,EAC3E,MAAM,UAGF,CAAC;AAAA,EACL,WAAW,UAAU,SAAS,eAAe;AAAA,IAC3C,QAAQ,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,WAAW,CAAC,EAAE;AAAA,EAC5D;AAAA,EACA,WAAW,OAAO,UAAU,QAAQ,GAAG;AAAA,IACrC,QAAQ,IAAI,UAAU,IAAI,QAAQ,KAAK,IAAI,SAAS;AAAA,EACtD;AAAA,EACA,WAAW,SAAS,SAAS,WAAW;AAAA,IACtC,QAAQ,MAAM,SAAS,UAAU,KAAK,MAAM,SAAS;AAAA,EACvD;AAAA,EACA,OAAO,GAAG,KAAK,UACb;AAAA,IACE;AAAA,IACA,SAAS,gBAAgB,WAAW;AAAA,IACpC,WAAW,EAAE,SAAS,UAAU,SAAS,SAAS;AAAA,EACpD,GACA,MACA,CACF;AAAA;AAAA;AAIF,IAAM,aAAa,CAAC,YAAiC;AAAA,EACnD,SAAS,OAAO;AAAA,EAChB,QAAQ,OAAO;AAAA,EACf,YAAY,OAAO;AAAA,EACnB,MAAM,OAAO,KAAK;AAAA,EAClB,QAAQ,OAAO,KAAK;AAAA,EACpB,QAAQ,OAAO;AAAA,KACX,OAAO,KAAK,SAAS,SACrB,EAAE,QAAQ,OAAO,KAAK,WAAW,QAAQ,OAAO,KAAK,UAAU,IAC/D;AAAA,IACE,SAAS,OAAO,KAAK,QAAQ,IAAI,CAAC,UAAU,MAAM,KAAK,SAAS;AAAA,EAClE;AACN;AAGO,IAAM,sBAAsB,CACjC,QACA,aACW;AAAA,EACX,MAAM,cAAc,CAAC,GAAG,SAAS,aAAa,GAAG,OAAO,WAAW;AAAA,EACnE,OAAO,GAAG,KAAK,UACb;AAAA,IACE;AAAA,IACA,SAAS,gBAAgB,WAAW;AAAA,IACpC,WAAW;AAAA,MACT,SAAS,SAAS,UAAU;AAAA,MAC5B,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,SAAS,OAAO,QAAQ,IAAI,UAAU;AAAA,MACtC,UAAU,SAAS;AAAA,IACrB;AAAA,EACF,GACA,MACA,CACF;AAAA;AAAA;AAwBK,IAAM,yBAAyB,CAAC,YAIf;AAAA,EACtB,MAAM,MAAM,QAAQ,QAAQ,MAAM,YAAY,IAAI;AAAA,EAClD,IAAI;AAAA,EACJ,MAAM,SAAS,IAAI;AAAA,EACnB,IAAI,OAAO;AAAA,EACX,IAAI,QAAQ;AAAA,EACZ,IAAI,YAAY;AAAA,EAEhB,MAAM,QAAQ,MAAY;AAAA,IACxB,IAAI,OAAO,OAAO,GAAG;AAAA,MACnB,MAAM,QAAQ,KAAK,OAAO,IAAI,IAAI,aAAa,mBAAmB;AAAA,MAClE,QAAQ,MACN,GAAG,UAAU,YAAY,CAAC,GAAG,OAAO,OAAO,CAAC,GAAG,MAAM,OAAO,KAAK,GACnE;AAAA,IACF;AAAA;AAAA,EAEF,MAAM,aAAa,MAAY;AAAA,IAC7B,IAAI,OAAO;AAAA,MACT,cAAc,KAAK;AAAA,MACnB,QAAQ;AAAA,IACV;AAAA;AAAA,EAGF,OAAO;AAAA,IACL,UAAU,CAAC,OAAO;AAAA,OACf,EAAE,MAAM,IAAI;AAAA,MACb,IAAI,MAAM,SAAS,cAAc;AAAA,QAC/B,OAAO,IAAI,MAAM,OAAO,MAAM,IAAI;AAAA,QAClC,IAAI,CAAC,QAAQ,OAAO;AAAA,UAClB;AAAA,QACF;AAAA,QACA,IAAI,CAAC,OAAO;AAAA,UACV,YAAY,IAAI;AAAA,UAChB,QAAQ,YAAY,OAAO,mBAAmB;AAAA,UAC9C,MAAM,QAAQ;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF;AAAA,MACA,OAAO,OAAO,MAAM,KAAK;AAAA,MACzB,QAAQ;AAAA,MACR,MAAM,OAAO,YAAY,MAAM,MAAM;AAAA,MACrC,IAAI,CAAC,QAAQ,OAAO;AAAA,QAClB,QAAQ,MAAM,GAAG;AAAA,CAAQ;AAAA,QACzB;AAAA,MACF;AAAA,MACA,QAAQ,MAAM,GAAG,UAAU;AAAA,CAAQ;AAAA,MACnC,IAAI,OAAO,OAAO,GAAG;AAAA,QACnB,MAAM;AAAA,MACR,EAAO;AAAA,QACL,WAAW;AAAA;AAAA;AAAA,IAGf,IAAI,GAAG;AAAA,MACL,WAAW;AAAA,MACX,OAAO,MAAM;AAAA;AAAA,EAEjB;AAAA;;;ACxXF,uBAAS;AACT,8BAAkB;AAClB;AAEA;AACA;AACA,oBAAS,kBAAS;;;ACNlB;AACA,qBAAS;AAET,0BAAkB;AAuClB,IAAM,aAAa,CAAC,WAAW,WAAW,UAAU;AAEpD,IAAM,aAAa,WAAW,IAAI,CAAC,SAAS,MAAM,MAAM;AAMxD,IAAM,kBAAkB,CACtB,UAEA,OAAO,UAAU;AAWZ,IAAM,iBAAiB,CAC5B,MACA,QACA,MACA,YACW;AAAA,EACX,MAAM,MAAM,MACV,KAAK,aACL,QACE,iBAAiB,MAAK,KAAK,KAAK,SAAS,GAAG,OAAO,QAAQ,MAAM,OAAO,CAC1E,CACF;AAAA,EACA,MAAM,WAAW,WAAW,KAAK,CAAC,SAAS,WAAW,MAAK,KAAK,IAAI,CAAC,CAAC;AAAA,EACtE,OAAO,MAAK,KAAK,YAAY,SAAS;AAAA;AAiBjC,IAAM,2BAA2B,OACtC,YACsE;AAAA,EACtE,QAAQ,SAAS,QAAQ;AAAA,EACzB,IAAI,CAAC,QAAQ,KAAK,WAAW,OAAO;AAAA,IAClC,OAAO,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,EACtC;AAAA,EACA,MAAM,aAAa,IAAI,IACrB,KAAK,QAAQ,QAAQ,CAAC,WACpB,OAAO,SAAS,KAAK,gBAAgB,CAAC,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,CACtE,CACF;AAAA,EACA,MAAM,cAAc,IAAI,IACtB,QAAQ,OAAO,UAAU,SAAS,IAAI,CAAC,YAAY,QAAQ,EAAE,CAC/D;AAAA,EAEA,MAAM,OAAO,mBAAmB;AAAA,EAChC,MAAM,QAA4B,CAAC;AAAA,EACnC,MAAM,cAA4B,CAAC;AAAA,EAEnC,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,CAAC,WACrC,OAAO,UAAU,CAAC,OAAO,cACrB,CAAC,IACD;AAAA,IACE;AAAA,MACE,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,CACN;AAAA,EACA,aAAa,aAAa,SAAS,aAAa,OAAO;AAAA,IAMrD,MAAM,QAAQ,MAAM,oBAClB,EAAE,SAAS,SAAS,MAAM,YAAY,GACtC,UACF;AAAA,IACA,WAAW,QAAQ,MAAM,SAAS,GAAG;AAAA,MACnC,MAAM,MAAM,SAAS,aAAa,QAAQ,IAAI,CAAC;AAAA,MAC/C,OAAO,QAAQ,IAAI,MAAM,GAAG;AAAA,MAC5B,IACE,SACC,WAAW,IAAI,KAAK,YAAY,CAAC,KAAK,YAAY,IAAI,IAAI,IAC3D;AAAA,QACA;AAAA,MACF;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,QAEF,MAAM,MAAM,KAAK,IAAI;AAAA,QACrB,MAAM;AAAA,QAGN;AAAA;AAAA,MAGF,MAAM,MAAM,MAAM,UAAS,MAAM,OAAO;AAAA,MACxC,IAAI,gBAAgB,GAAG,GAAG;AAAA,QACxB,YAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN;AAAA,UACA,SACE;AAAA,UACF,UAAU;AAAA,UACV,YACE;AAAA,QACJ,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MACA,MAAM,SAAS,iBAAiB,UAAU,GAAG;AAAA,MAC7C,IAAI,CAAC,OAAO,WAAW,OAAO,KAAK,UAAU,WAAW;AAAA,QACtD;AAAA,MACF;AAAA,MACA,MAAM,KAAK;AAAA,QACT;AAAA,QACA,MAAM,OAAO;AAAA,QACb,KAAK,QAAQ,MAAM,KAAK;AAAA,QACxB;AAAA,QACA;AAAA,QACA,WAAW,SAAS,QAAQ,QAAQ,MAAM,IAAI;AAAA,QAC9C,OAAO,OAAO,KAAK;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,OAAO,EAAE,aAAa,MAAM;AAAA;AAOvB,IAAM,qBAAqB,CAChC,MACA,oBACW;AAAA,EACX,MAAM,OAAO;AAAA,OACR;AAAA,IACH,OAAO;AAAA,EACT;AAAA,EACA,MAAM,QAAQ,OAAO,QAAQ,IAAI,EAC9B,SAAS,EAAE,KAAK,OAAQ,IAAI,IAAI,KAAK,CAAE,EACvC,OAAO,IAAI,WAAW,UAAU,SAAS,EACzC,IAAI,EAAE,KAAK,WAAW,KAAK,QAAQ,KAAK,UAAU,KAAK,IAAI;AAAA,EAC9D,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE,KAAK;AAAA,CAAI;AAAA;;;ACxMN,IAAM,yBAAyD;AAAA,EACpE,CAAC,OAAO;AAAA,EACR,CAAC,aAAa;AAAA,EACd,CAAC,WAAW,OAAO;AAAA,EACnB,CAAC,WAAW,OAAO;AAAA,EACnB,CAAC,OAAO,OAAO;AAAA,EACf,CAAC,OAAO,aAAa;AACvB;AAGA,IAAM,aAAa,CAAC,WAClB,GAAG,OAAO,UAAU,OAAO;AAE7B,IAAM,WAAW,uBAAuB,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,CAAC,EAAE,KACpE,IACF;AAUO,IAAM,aAAa,CACxB,YACA,QACA,QACA,wBACW;AAAA,EACX,MAAM,YACJ,OAAO,UAAU,YACb,KACA;AAAA,yCACiC,OAAO;AAAA,EAC9C,MAAM,eACJ,wBAAwB,YACpB,KACA;AAAA,8OAEE,OAAO,UAAU,YACb,KACA;AAAA,EAEZ,MAAM,kBACJ,wBAAwB,YACpB,KACA;AAAA;AAAA,EAEN;AAAA,EACA,OAAO,mDAAmD,WACxD,MACF,UAAU,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA,sEAIyC;AAAA;AAAA;AAAA;AAAA;AAAA,8HAKwD,YAAY;AAAA;AAAA,EAExI;AAAA;AAAA,EAEA;AAAA;AAOK,IAAM,aAAa,CACxB,QACA,QACA,WACW,qEAAqE,WAChF,MACF,UAAU,WAAW,MAAM;AAAA;AAAA,gLAEqJ,WAC9K,MACF,uDACE,OAAO,UAAU,YACb,KACA;AAAA,kCAAqC,OAAO;AAAA;AAAA,EAGhD,KAAK,UAAU,QAAQ,MAAM,CAAC;;;ACrEhC,IAAM,YAAY;AAElB,IAAM,cAAc,CAAC,aACnB,SAAS,IAAI,CAAC,YAAY,QAAQ,KAAK,EAAE,KAAK,GAAG;AAGnD,IAAM,UAAU,CAAC,MAAc,OAAuB;AAAA,EACpD,MAAM,MAAM,KAAK,SAAS,IAAI,IAAI,OAAO;AAAA,EACzC,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI,MAAM,EAAE,QAAQ;AAAA,EAC7D,MAAM,QAAQ,KAAK,MAAM,SAAS,IAAI,MAAM;AAAA,EAC5C,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK,SAAS,MAAM,MAAM;AAAA,EACrD,OAAO,GAAG,UAAU,MAAM,QAAQ;AAAA;AAG7B,IAAM,oBAAoB,CAC/B,YACA,mBACc;AAAA,EACd,MAAM,SAAS,SAAS,UAAU;AAAA,EAClC,MAAM,aAAa,SAAS,cAAc;AAAA,EAC1C,IAAI,YAAY,OAAO,QAAQ,MAAM,YAAY,WAAW,QAAQ,GAAG;AAAA,IACrE,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,yCAAyC,OAAO,SAAS,oCAAoC,WAAW,SAAS;AAAA,MAC1H,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,eAAe,MAAM;AAAA,CAAI;AAAA,EACvC,IAAI,SAAS;AAAA,EACb,YAAY,OAAO,YAAY,WAAW,SAAS,QAAQ,GAAG;AAAA,IAC5D,MAAM,OAAO,WAAW,MAAM;AAAA,IAC9B,MAAM,WAAW,OAAO,SAAS,QAAQ;AAAA,IACzC,IACE,CAAC,QACD,KAAK,UACL,aAAa,aACb,QAAQ,SAAS,UACjB;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,KAAK,OAAO,KAAK,QAAQ,MAAM,KAAK,OAAO,MAAM,IAAI,QAAQ;AAAA,IACnE,UAAU;AAAA,EACZ;AAAA,EACA,IAAI,WAAW,GAAG;AAAA,IAChB,OAAO,EAAE,QAAQ,MAAM,eAAe;AAAA,EACxC;AAAA,EAKA,MAAM,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA,EAC5B,MAAM,WAAW,SAAS,IAAI,EAAE,SAAS,IAAI,CAAC,YAAY,QAAQ,IAAI;AAAA,EACtE,MAAM,WAAW,OAAO,SAAS,IAAI,CAAC,YAAY,QAAQ,IAAI;AAAA,EAC9D,IAAI,SAAS,KAAK;AAAA,CAAI,MAAM,SAAS,KAAK;AAAA,CAAI,GAAG;AAAA,IAC/C,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,OAAO,EAAE,QAAQ,KAAK;AAAA;;;ACnDxB,IAAM,mBAAmB;AACzB,IAAM,aAAa;AAOZ,IAAM,kBAAkB,CAAC,SAAyB;AAAA,EACvD,MAAM,UAAU,KAAK,KAAK;AAAA,EAC1B,MAAM,QAAQ,QAAQ,MACpB,kEACF;AAAA,EACA,OAAO,OAAO,QAAQ,SAAS;AAAA;AAIjC,IAAM,kBAAkB,CAAC,SACvB,KAAK,MAAM;AAAA,CAAI,EAAE,OAAO,CAAC,SAAS,WAAW,KAAK,IAAI,CAAC,EAAE;AAE3D,IAAM,gBAAgB,CACpB,UAC6B,OAAO,UAAU,YAAY,UAAU;AAEtE,IAAM,WAAW,CAAC,UAChB,OAAO,UAAU;AAEnB,IAAM,UAAU,CACd,MACA,SACiC;AAAA,EACjC,IAAI,QAAsC;AAAA,EAC1C,WAAW,OAAO,MAAM;AAAA,IACtB,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IACA,QAAQ,MAAM;AAAA,EAChB;AAAA,EACA,OAAO;AAAA;AAIT,IAAM,UAAU,CACd,MACA,MACA,UACS;AAAA,EACT,IAAI,SAAS;AAAA,EACb,WAAW,OAAO,KAAK,MAAM,GAAG,EAAE,GAAG;AAAA,IAGnC,SAAS,OAAO;AAAA,EAClB;AAAA,EAGA,OAAO,KAAK,GAAG,EAAE,KAAe;AAAA;AAUlC,IAAM,gBAAgB,CAAC,SAAgC;AAAA,EACrD,QAAQ,QAAQ;AAAA,EAChB,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,eAAe,MAAM;AAAA,IAChD;AAAA,EACF;AAAA,EACA,QAAQ,WAAW,eAAe,SAAS;AAAA,EAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AAAA,IAChC,KAAK,MAAM;AAAA,EACb,EAAO;AAAA,IACL,OAAO,KAAK;AAAA;AAAA;AAIhB,IAAM,wBAAwB,CAAC,SAC7B,KAAK,SAAS;AAAA,CAAI,IAAI,OAAO,GAAG;AAAA;AAO3B,IAAM,sBAAsB,CACjC,YACA,cACqB;AAAA,EAMrB,MAAM,iBAAiB,gBAAgB,UAAU,MAAM,WAAW,KAAK;AAAA,EACvE,MAAM,YACJ,kBAAkB,gBAAgB,SAAS,KAAK,gBAAgB,UAAU,IACtE,UAAU,KAAK,IACf,gBAAgB,SAAS;AAAA,EAC/B,IAAI,cAAc,IAAI;AAAA,IACpB,OAAO,EAAE,IAAI,OAAO,QAAQ,8BAA8B;AAAA,EAC5D;AAAA,EAEA,MAAM,uBAAuB,iBAAiB,KAAK,UAAU;AAAA,EAC7D,MAAM,SAAS,oBAAO,UAAU;AAAA,EAEhC,IAAI,wBAAwB,CAAC,iBAAiB,KAAK,SAAS,GAAG;AAAA,IAC7D,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,oBAAO,SAAS;AAAA,IACzB,OAAO,OAAO;AAAA,IAGd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ,uCAAuC,QAAQ,QAAQ,eAAe,EAAE;AAAA,IAClF;AAAA;AAAA,EAGF,MAAM,UAAU,sBAAsB,OAAO,QAAQ,QAAQ,WAAW,EAAE,CAAC;AAAA,EAC3E,IAAI,QAAQ,KAAK,MAAM,IAAI;AAAA,IACzB,OAAO,EAAE,IAAI,OAAO,QAAQ,gCAAgC;AAAA,EAC9D;AAAA,EAEA,MAAM,eAAe,gBAAgB,OAAO,OAAO;AAAA,EACnD,MAAM,kBAAkB,gBAAgB,OAAO;AAAA,EAC/C,IAAI,iBAAiB,iBAAiB;AAAA,IACpC,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ,wCAAwC,iCAAiC;AAAA,IACnF;AAAA,EACF;AAAA,EAIA,MAAM,OAAO,kBAAkB,OAAO,SAAS,OAAO,EAAE;AAAA,EAExD,IAAI,CAAC,sBAAsB;AAAA,IAGzB,OAAO,EAAE,IAAI,MAAM,MAAM,KAAK;AAAA,EAChC;AAAA,EAKA,MAAM,OAAwB,gBAAgB,OAAO,IAAI;AAAA,EACzD,WAAW,QAAQ,wBAAwB;AAAA,IACzC,MAAM,WAAW,QAAQ,OAAO,MAAM,IAAI;AAAA,IAC1C,MAAM,aAAa,QAAQ,OAAO,MAAM,IAAI;AAAA,IAC5C,IACE,SAAS,QAAQ,KACjB,SAAS,UAAU,KACnB,WAAW,KAAK,MAAM,IACtB;AAAA,MACA,QAAQ,MAAM,MAAM,UAAU;AAAA,IAChC;AAAA,EACF;AAAA,EACA,cAAc,IAAI;AAAA,EAElB,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM,sBAAsB,oBAAO,UAAU,MAAM,IAAI,CAAC;AAAA,EAC1D;AAAA;AAcK,IAAM,kBAAkB,CAC7B,WACA,iBACqB;AAAA,EACrB,MAAM,QAAQ,UAAU,QAAQ,GAAG;AAAA,EACnC,MAAM,MAAM,UAAU,YAAY,GAAG;AAAA,EACrC,IAAI;AAAA,EACJ,IAAI,UAAU,MAAM,MAAM,OAAO;AAAA,IAC/B,IAAI;AAAA,MACF,SAAS,KAAK,MAAM,UAAU,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,MACnD,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,EAEb;AAAA,EACA,MAAM,SAA0B,cAAc,MAAM,IAAI,SAAS,CAAC;AAAA,EAElE,MAAM,SAAiC,CAAC;AAAA,EACxC,MAAM,UAAoB,CAAC;AAAA,EAC3B,WAAW,OAAO,cAAc;AAAA,IAC9B,MAAM,QAAQ,OAAO;AAAA,IACrB,IAAI,SAAS,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,MAC1C,OAAO,OAAO;AAAA,IAChB,EAAO;AAAA,MACL,QAAQ,KAAK,GAAG;AAAA;AAAA,EAEpB;AAAA,EACA,OAAO,EAAE,SAAS,OAAO;AAAA;;;AJxJ3B,IAAM,UAAU,CAAC,SAAmC,SAAQ,KAAK,SAAS;AAO1E,IAAM,cAAc,OAClB,SACA,QACA,UACyB;AAAA,EACzB,MAAM,cAAc,MAAK,QAAQ,KAAK,WAAW,WAAW;AAAA,EAC5D,MAAM,SAAS,MAAM,QAAQ,IAC3B,QAAQ,KACR,mBAAmB,QAAQ,MAAM,WAAW,GAC5C,EAAE,KAAK,QAAQ,KAAK,QAAQ,WAAW,QAAQ,UAAU,CAC3D;AAAA,EACA,OAAO,MAAM,gBAAgB,QAAQ,MAAM,QAAQ,WAAW;AAAA;AAGhE,IAAM,cAAc,OAClB,MACA,OACA,SACA,WACiC;AAAA,EACjC,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,MAAM,OAAO,CACX,QACA,QACA,aACyB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,OAAO;AAAA,IAClD;AAAA,IACA;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAM,UAAS,KAAK,YAAY,OAAO;AAAA,EAC1D,IAAI,KAAK,UAAU;AAAA,IAGjB,MAAM,gBAAgB,KAAK,YAAY,UAAU;AAAA,IACjD,YAAY,QAAQ,KAAK,WAAW,KAAK,QAAQ,WAAW,UAAU,CAAC;AAAA,IACvE,OAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAGA,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,MAAM;AAAA,EAI9C,MAAM,sBAAsB,YAAW,KAAK,UAAU,IAClD,MAAM,UAAS,KAAK,YAAY,OAAO,IACvC;AAAA,EACJ,MAAM,SAAS,MAAM,YACnB,SACA,WAAW,YAAY,QAAQ,QAAQ,QAAQ,mBAAmB,GAClE,KACF;AAAA,EACA,IAAI,OAAO,SAAS;AAAA,IAClB,OAAO,KAAK,UAAU,OAAO,UAAU,gBAAgB,OAAO,OAAO;AAAA,EACvE;AAAA,EACA,MAAM,YAAY,oBAAoB,YAAY,OAAO,IAAI;AAAA,EAC7D,IAAI,CAAC,UAAU,IAAI;AAAA,IACjB,OAAO,KAAK,UAAU,UAAU,QAAQ,OAAO,OAAO;AAAA,EACxD;AAAA,EACA,MAAM,gBAAgB,KAAK,YAAY,UAAU,IAAI;AAAA,EACrD,YAAY,QAAQ,KAAK,WAAW,KAAK,QAAQ,WAAW,UAAU,CAAC;AAAA,EACvE,OAAO,KAAK,cAAc,WAAW,OAAO,OAAO;AAAA;AAGrD,IAAM,cAAc,OAClB,MACA,OACA,SACA,WACiC;AAAA,EACjC,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,MAAM,OAAO,CACX,QACA,QACA,aACyB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,OAAO;AAAA,IAClD;AAAA,IACA;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,OAAO,YACpB,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,MAAM,IAAI,GAAG,MAAM,KAAK,KAAK,CAAC,CACrE;AAAA,EAGA,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,MAAM;AAAA,EAC9C,MAAM,SAAS,MAAM,YACnB,SACA,WAAW,QAAQ,QAAQ,QAAQ,MAAM,GACzC,KACF;AAAA,EACA,IAAI,OAAO,SAAS;AAAA,IAClB,OAAO,KAAK,UAAU,OAAO,UAAU,gBAAgB,OAAO,OAAO;AAAA,EACvE;AAAA,EAEA,MAAM,SAAS,gBAAgB,OAAO,MAAM,OAAO,KAAK,MAAM,CAAC;AAAA,EAC/D,WAAW,SAAS,KAAK,SAAS;AAAA,IAChC,MAAM,aAAa,OAAO,OAAO,QAAQ,MAAM,IAAI;AAAA,IACnD,IAAI,eAAe,WAAW;AAAA,MAC5B;AAAA,IACF;AAAA,IAIA,MAAM,gBACJ,MAAM,YACN,mBAAmB,MAAM,KAAK,MAAM,UAAU,CAChD;AAAA,IACA,YACE,QACA,MAAM,KAAK,WACX,KAAK,QACL,WAAW,MAAM,KAAK,GAAG,CAC3B;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,QAAQ,WAAW,KAAK,QAAQ,QAAQ;AAAA,IACjD,OAAO,KAAK,UAAU,oCAAoC,OAAO,OAAO;AAAA,EAC1E;AAAA,EACA,IAAI,OAAO,QAAQ,SAAS,GAAG;AAAA,IAC7B,OAAO,KACL,WACA,uBAAuB,OAAO,QAAQ,KAAK,IAAI,KAC/C,OAAO,OACT;AAAA,EACF;AAAA,EACA,OAAO,KAAK,cAAc,WAAW,OAAO,OAAO;AAAA;AAGrD,IAAM,iBAAiB,CAAC,WAA4C;AAAA,EAClE,QAAQ,SAAS;AAAA,EACjB,MAAM,OACJ,KAAK,SAAS,SACV,EAAE,MAAM,KAAK,YAAY,SAAS,KAAK,UAAU,IACjD;AAAA,IACE,MAAM,KAAK,QAAQ,IAAI,KAAK;AAAA,IAC5B,SAAS,gBAAgB,KAAK,QAAQ;AAAA,EACxC;AAAA,EACN,OAAO;AAAA,IACL,MACE,OAAO,WAAW,YACd,iCACA;AAAA,IACN,MAAM,KAAK;AAAA,IACX,SAAS,eAAe,KAAK,iBAAiB,KAAK,WACjD,OAAO,WAAW,YAAY,qBAAqB,aAChD,OAAO,UAAU;AAAA,IACtB,UAAU,OAAO,WAAW,YAAY,YAAY;AAAA,EACtD;AAAA;AAWK,IAAM,eAAe,OAC1B,YAC6B;AAAA,EAC7B,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,QAAQ,SAAS,QAAQ,QAAQ;AAAA,EACjC,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAAA,EAEA,MAAM,SAAS,KAAK,QAAQ,KAC1B,CAAC,WAAW,OAAO,SAAS,KAAK,aACnC;AAAA,EAEA,MAAM,UAAsB;AAAA,IAC1B,KAAK,OAAO,QAAQ,OAAO;AAAA,IAC3B,KAAK,MAAM,QAAQ,MAAK,OAAO,GAAG,kBAAkB,CAAC;AAAA,IACrD,MAAM,QAAQ;AAAA,IACd,KAAK,QAAQ,OAAO;AAAA,IACpB;AAAA,IACA,SAAS,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAC,CAAC;AAAA,IACpE,WAAW,QAAQ,aAAa;AAAA,EAClC;AAAA,EAEA,QAAQ,UAAU,QAAQ;AAAA,EAC1B,MAAM,cAAc,KAAK,IACvB,GACA,KAAK,IAAI,QAAQ,eAAe,GAAG,MAAM,UAAU,CAAC,CACtD;AAAA,EAIA,MAAM,eAAe,OAAO,CAAC;AAAA,EAC7B,MAAM,UAAU,MACd,aAAa,MAAM,QAAQ,gBAAgB,CAAC;AAAA,EAE9C,MAAM,UAAU,MAAM,KACpB,OACA,OAAO,MAAgB,UAAwC;AAAA,IAC7D,QAAQ,aAAa;AAAA,MACnB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IACD,MAAM,SAAS,OAAO,KAAK,SAAS,SAChC,YAAY,MAAM,OAAO,SAAS,QAAQ,MAAM,IAChD,YAAY,MAAM,OAAO,SAAS,QAAQ,MAAM;AAAA,IAGpD,MAAM,QAAQ;AAAA,IACd,QAAQ,aAAa;AAAA,MACnB;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IACD,OAAO;AAAA,KAET,EAAE,YAAY,CAChB;AAAA,EAEA,MAAM,cAA4B,CAAC;AAAA,EACnC,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,OAAO,WAAW,cAAc;AAAA,MAClC,YAAY,KAAK,eAAe,MAAM,CAAC;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,WAAW,UAAU,SAAS;AAAA,IAC5B,OAAO,OAAO,WAAW;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ,QAAQ,QAAQ,CAAC,WAC7B,OAAO,YAAY,YAAY,CAAC,IAAI,CAAC,OAAO,OAAO,CACrD;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,SACE,MAAM,SAAS,IACX,MAAM,OAAO,CAAC,OAAO,SAAS,QAAQ,MAAM,CAAC,IAC7C;AAAA,IACN;AAAA,IACA;AAAA,IACA,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,OAAO;AAAA,IAClD;AAAA,EACF;AAAA;;;AKvWF,uBAAS;AACT,qBAAS;AAET,0BAAkB,mBAAM;AAsFxB,IAAM,kBAAkB,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC;AAO/C,IAAM,cAAc,MAA2C;AAAA,EAC7D,MAAM,OAAO,IAAI;AAAA,EACjB,OAAO,CAAC,gBAAgB;AAAA,IACtB,MAAM,SAAS,KAAK,IAAI,WAAW;AAAA,IACnC,IAAI,QAAQ;AAAA,MACV,OAAO;AAAA,IACT;AAAA,IACA,MAAM,QAAQ,YAAY,WAAW;AAAA,IACrC,KAAK,IAAI,aAAa,KAAK;AAAA,IAC3B,OAAO;AAAA;AAAA;AAaJ,IAAM,qBAAqB,CAAC,SACjC,YAAY,MAAM,EAAE,MAAM,MAAM,CAAC;AAOnC,IAAM,oBAAoB,CACxB,SACA,SAMK;AAAA,EACL,MAAM,cAAc,IAAI,IACtB,QAAQ,QAAQ,QAAQ,CAAC,WACvB,OAAO,UAAU,CAAC,OAAO,cACrB,CAAC,IACD,CAAC,CAAC,OAAO,MAAM,OAAO,WAAW,CAAU,CACjD,CACF;AAAA,EACA,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,WAKA,CAAC;AAAA,EACP,WAAW,QAAQ,QAAQ,MAAM,OAAO;AAAA,IACtC,IACE,KAAK,WAAW,KAAK,iBACrB,KAAK,YACL,CAAC,KAAK,cACN,KAAK,IAAI,KAAK,UAAU,KAIxB,KAAK,YAAY,IACjB;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,MAAM,QAAQ,KAAK,UAAU;AAAA,IACnC,MAAM,OAAO,KAAK,WAAW,MAAM,GAAG,KAAK,WAAW,SAAS,IAAI,MAAM;AAAA,IACzE,MAAM,cAAc,YAAY,IAAI,KAAK,OAAO,IAAI;AAAA,IACpD,IAAI,CAAC,gBAAgB,IAAI,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa;AAAA,MACpE;AAAA,IACF;AAAA,IACA,KAAK,IAAI,KAAK,UAAU;AAAA,IACxB,SAAS,KAAK,EAAE,aAAa,KAAK,MAAM,YAAY,KAAK,WAAW,CAAC;AAAA,EACvE;AAAA,EACA,OAAO;AAAA;AAQT,IAAM,eAAe,CACnB,QACA,OACA,MACA,UACgB;AAAA,EAChB,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,IAAI,UAAU,WAAW;AAAA,IACvB,OAAO,QAAQ,UAAU;AAAA,EAC3B;AAAA,EACA,OAAO,UAAU,QAAQ,QAAQ,UAAU;AAAA;AAwB7C,IAAM,mBAAmB,OACvB,UACA,SACA,MACA,QACA,eACA,UACyB;AAAA,EACzB,MAAM,OAAoB;AAAA,IACxB,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,WAAW,CAAC;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,IAAI,KAAK,WAAW,OAAO;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EACA,QAAQ,SAAS,QAAQ;AAAA,EACzB,MAAM,YAAY,IAAI,IACpB,QAAQ,MAAM,MAAM,QAAQ,CAAC,SAC3B,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI,CAAC,CACzC,CACF;AAAA,EACA,MAAM,UAAU,YAAY;AAAA,EAC5B,MAAM,WAAW,IAAI;AAAA,EACrB,aAAa,MAAM,iBAAiB,UAAU;AAAA,IAC5C,WAAW,WAAW,KAAK,YAAY,CAAC,GAAG;AAAA,MACzC,IAAI,EAAE,UAAU,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI;AAAA,QACtD,SAAS,IAAI,SAAS,WAAW;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY,aAAa,gBAAgB,UAAU;AAAA,IACjD,MAAM,YAAY,UAAS,MAAM,WAAW;AAAA,IAC5C,KAAK,QAAQ,KAAK,SAAS;AAAA,IAE3B,MAAM,OAAO,WAAW,MAAM,UAAS,aAAa,OAAO,CAAC;AAAA,IAC5D,MAAM,MAAM,QAAQ,WAAW;AAAA,IAC/B,MAAM,WAAW,CAAC,gBAAgB,IAAI,IAAI,YAAY,CAAC;AAAA,IACvD,MAAM,aAAa,UAAS,aAAa,WAAW;AAAA,IACpD,WAAW,UAAU,eAAe;AAAA,MAClC,MAAM,aAAa,MACjB,aACA,iBAAiB,YAAY,KAAK,QAAQ,MAAM,QAAQ,WAAW,CAAC,CACtE;AAAA,MACA,MAAM,OAAO,CAAC,WAAqC;AAAA,QACjD,MAAM,cAA4B;AAAA,UAChC,MAAM;AAAA,UACN;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,UAAS,MAAM,UAAU;AAAA,QACtC;AAAA,QACA,IAAI,UAAU;AAAA,UACZ,YAAY,WAAW;AAAA,QACzB;AAAA,QACA,OAAO;AAAA;AAAA,MAET,MAAM,QAAQ,OAAO,MAAM,aAAa;AAAA,MACxC,MAAM,UAAU,aAAa,YAAW,UAAU,GAAG,OAAO,MAAM,KAAK;AAAA,MACvE,IAAI,YAAY,aAAa;AAAA,QAC3B,KAAK,UAAU,KAAK,EAAE,MAAM,MAAM,QAAQ,QAAQ,UAAU,CAAC;AAAA,MAC/D,EAAO,SAAI,YAAY,WAAW;AAAA,QAChC,KAAK,YAAY;AAAA,MACnB,EAAO;AAAA,QACL,KAAK,MAAM,KAAK,KAAK,OAAO,CAAC;AAAA;AAAA,IAEjC;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAUT,IAAM,uBAAuB,CAC3B,YACoC;AAAA,EACpC,MAAM,kBAAkB,IAAI,IAC1B,QAAQ,QAAQ,QAAQ,CAAC,WACvB,OAAO,UAAU,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,CAC1D,CACF;AAAA,EACA,MAAM,aAAa,IAAI;AAAA,EACvB,WAAW,QAAQ,QAAQ,MAAM,OAAO;AAAA,IACtC,MAAM,MAAM,GAAG,KAAK,qBAAmB,KAAK;AAAA,IAC5C,IAAI,KAAK,YAAY,WAAW,IAAI,GAAG,GAAG;AAAA,MACxC;AAAA,IACF;AAAA,IACA,WAAW,IACT,KACA,KAAK,cAAc,gBAAgB,IAAI,KAAK,OAAO,IAAI,IACnD,KAAK,aACL,SACN;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAQF,IAAM,kBAAkB,OAC7B,SACA,QACA,UAAmD,CAAC,MACrB;AAAA,EAC/B,QAAQ,SAAS,QAAQ;AAAA,EACzB,IAAI,CAAC,MAAM;AAAA,IACT,OAAO;AAAA,MACL,aAAa,CAAC;AAAA,MACd,OAAO,CAAC;AAAA,MACR,cAAc,IAAI;AAAA,MAClB,eAAe,CAAC;AAAA,MAChB,WAAW,CAAC;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,MAAM,gBAAgB,YAAY,IAAI,EAAE,OACtC,CAAC,SACC,SAAS,KAAK,kBACb,QAAQ,YAAY,aAAa,QAAQ,QAAQ,SAAS,IAAI,EACnE;AAAA,EAEA,MAAM,aAAa,qBAAqB,OAAO;AAAA,EAE/C,QAAQ,SAAS,QAAQ;AAAA,EACzB,MAAM,eAAe,IAAI;AAAA,EACzB,MAAM,YAA8B,CAAC;AAAA,EACrC,MAAM,YAA4B,CAAC;AAAA,EACnC,IAAI,WAAW;AAAA,EAEf,MAAM,WAAW,kBAAkB,SAAS,IAAI;AAAA,EAChD,MAAM,UAAU,YAAY;AAAA,EAE5B,aAAa,MAAM,aAAa,KAAK,gBAAgB,UAAU;AAAA,IAC7D,MAAM,YAAY,UAAS,MAAM,UAAU;AAAA,IAC3C,aAAa,IAAI,SAAS;AAAA,IAE1B,MAAM,OAAO,WAAW,MAAM,UAAS,YAAY,OAAO,CAAC;AAAA,IAC3D,MAAM,aAAa,UAAS,aAAa,UAAU;AAAA,IAEnD,WAAW,UAAU,eAAe;AAAA,MAClC,MAAM,MAAM,GAAG,KAAK,qBAAmB;AAAA,MACvC,MAAM,aACJ,WAAW,IAAI,GAAG,KAClB,MACE,aACA,iBAAiB,YAAY,KAAK,QAAQ,MAAM,QAAQ,WAAW,CAAC,CACtE;AAAA,MACF,MAAM,OAAO,CAAC,YAAsC;AAAA,QAClD,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,UAAS,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,MAAM,SAAS,WAAW,IAAI,GAAG;AAAA,MACjC,MAAM,QAAQ,OAAO,MAAM,aAAa;AAAA,MACxC,MAAM,UAAU,aAAa,QAAQ,OAAO,MAAM,QAAQ,UAAU,IAAI;AAAA,MACxE,IAAI,YAAY,aAAa;AAAA,QAC3B,UAAU,KAAK,EAAE,MAAM,MAAM,QAAQ,QAAQ,UAAU,CAAC;AAAA,MAC1D,EAAO,SAAI,YAAY,WAAW;AAAA,QAChC,YAAY;AAAA,MACd,EAAO;AAAA,QACL,UAAU,KAAK,KAAK,OAAO,CAAC;AAAA;AAAA,IAEhC;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,MAAM,iBACxB,UACA,SACA,MACA,QACA,eACA,QAAQ,SAAS,KACnB;AAAA,EACA,WAAW,OAAO,YAAY,SAAS;AAAA,IACrC,aAAa,IAAI,GAAG;AAAA,EACtB;AAAA,EACA,UAAU,KAAK,GAAG,YAAY,KAAK;AAAA,EACnC,UAAU,KAAK,GAAG,YAAY,SAAS;AAAA,EACvC,YAAY,YAAY;AAAA,EAExB,MAAM,OAAO,MAAM,yBAAyB,OAAO;AAAA,EACnD,MAAM,YAA4B,CAAC;AAAA,EACnC,WAAW,UAAU,eAAe;AAAA,IAClC,MAAM,UAA2B,CAAC;AAAA,IAClC,WAAW,UAAU,KAAK,OAAO;AAAA,MAC/B,aAAa,IAAI,OAAO,SAAS;AAAA,MAGjC,MAAM,aAAa,eACjB,QACA,QACA,MACA,QAAQ,OAAO,WAAW,CAC5B;AAAA,MACA,MAAM,SAAS,YAAW,UAAU;AAAA,MACpC,MAAM,OAAO,WAAW,OAAO,GAAG;AAAA,MAClC,MAAM,QAAQ,OAAO,MAAM,OAAO,aAAa;AAAA,MAC/C,MAAM,QAAQ,CAAC,YAAuC;AAAA,QACpD,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM,UAAU,aAAa,QAAQ,OAAO,MAAM,QAAQ,UAAU,IAAI;AAAA,MACxE,IAAI,YAAY,aAAa;AAAA,QAC3B,UAAU,KAAK;AAAA,UACb;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,WAAW,OAAO;AAAA,QACpB,CAAC;AAAA,MACH,EAAO,SAAI,YAAY,WAAW;AAAA,QAChC,YAAY;AAAA,MACd,EAAO;AAAA,QACL,QAAQ,KAAK,MAAM,OAAO,CAAC;AAAA;AAAA,IAE/B;AAAA,IACA,IAAI,QAAQ,SAAS,GAAG;AAAA,MACtB,UAAU,KAAK,EAAE,SAAS,MAAM,QAAQ,OAAO,CAAC;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,UAAU,KAAK,CAAC,GAAG,MACjB,EAAE,cAAc,EAAE,YACd,EAAE,OAAO,cAAc,EAAE,MAAM,IAC/B,EAAE,UAAU,cAAc,EAAE,SAAS,CAC3C;AAAA,EACA,UAAU,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;AAAA,EAEzD,OAAO;AAAA,IACL,aAAa,KAAK;AAAA,IAClB,OAAO,CAAC,GAAG,WAAW,GAAG,SAAS;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;;;AT7aF,IAAM,oBAAoB,+BAA+B;AAGzD,IAAM,sBAAsB;AAC5B,IAAM,kBAAkB;AAqBxB,IAAM,aAAa,CAAC,SAA+C;AAAA,EAGjE,MAAM,SAAU,OAAO,KAAK,MAAM,EAAkB,OAClD,CAAC,SAAS,KAAK,KACjB;AAAA,EACA,IAAI,OAAO,SAAS,GAAG;AAAA,IACrB,OAAO,MAAM,0CAA0C;AAAA,IACvD,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,IAAI,KAAK,SAAS,OAAO,SAAS,GAAG;AAAA,IACnC,OAAO,MACL,sEACF;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,IAAI,CAAC,KAAK,SAAS,OAAO,WAAW,GAAG;AAAA,IACtC,OAAO,MACL,mEACF;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,MAAM,WAAW,oBAAoB,KAAK,SAAS,iBAAiB;AAAA,EACpE,MAAM,cACJ,KAAK,gBAAgB,YACjB,sBACA,OAAO,KAAK,WAAW;AAAA,EAC7B,IACE,CAAC,OAAO,UAAU,WAAW,KAC7B,cAAc,KACd,cAAc,iBACd;AAAA,IACA,OAAO,MACL,0BAA0B,KAAK,wBAAwB,mBACzD;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,OAAO,EAAE,OAAO,OAAO,IAAI,aAAa,SAAS;AAAA;AAQnD,IAAM,eAAe,CACnB,OACA,SACyB;AAAA,EACzB,IAAI,UAAU,WAAW;AAAA,IACvB;AAAA,EACF;AAAA,EACA,MAAM,aAAa,IAAI,IACrB,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,YAAY,GAAG,OAAO,IAAI,CAAC,CACvE;AAAA,EACA,MAAM,WAAqB,CAAC;AAAA,EAC5B,WAAW,QAAQ,MAAM,MAAM,GAAG,GAAG;AAAA,IACnC,MAAM,OAAO,WAAW,IAAI,KAAK,KAAK,EAAE,YAAY,CAAC;AAAA,IACrD,IAAI,SAAS,WAAW;AAAA,MACtB,OAAO,MACL,qBAAqB,KAAK,KAAK,mBAAmB,YAAY,IAAI,EAAE,KAAK,IAAI,KAC/E;AAAA,MACA,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IACA,IAAI,SAAS,KAAK,eAAe;AAAA,MAC/B,OAAO,MACL,aAAa,2EACf;AAAA,MACA,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IACA,SAAS,KAAK,IAAI;AAAA,EACpB;AAAA,EACA,OAAO;AAAA;AAGT,IAAM,eAAe,CAAC,UAA4B;AAAA,EAChD,MAAM,MAAM,OAAO;AAAA,EACnB,OAAO,MACL,GAAG,IAAI,WAAW,IAAI,mDAAmD,IAAI,YAC/E;AAAA,EACA,OAAO,QAAQ,KAAK,CAAC;AAAA;AAGhB,IAAM,mBAAmB,cAAc;AAAA,EAC5C,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,aAAa;AAAA,MACX,aAAa,wCAAwC,4BAA4B;AAAA,MACjF,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACJ,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,aAAa,sDAAsD;AAAA,MACnE,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,MAAM,YAAY;AAAA,OACZ,IAAG,GAAG,QAAQ;AAAA,IAClB,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,QAAQ,OAAO,aAAa,aAAa,WAAW,IAAI;AAAA,IAExD,IAAI;AAAA,MAKF,MAAM,UAAU,MAAM,mBAAmB,IAAI;AAAA,MAC7C,IAAI,CAAC,YAAY,QAAQ,MAAM,GAAG;AAAA,QAChC,OAAO,MACL,uFACF;AAAA,QACA,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MACA,QAAQ,SAAS,QAAQ;AAAA,MACzB,IAAI,YAAY,IAAI,EAAE,MAAM,CAAC,SAAS,SAAS,KAAK,aAAa,GAAG;AAAA,QAClE,OAAO,MACL,6EACF;AAAA,QACA,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MACA,MAAM,UAAU,aAAa,KAAK,QAAQ,IAAI;AAAA,MAC9C,MAAM,SAAS,MAAM,WAAW,IAAI;AAAA,MACpC,MAAM,WAAW,MAAM,gBAAgB,SAAS,QAAQ;AAAA,QACtD,OAAO,CAAC,KAAK,SAAS,QAAQ,KAAK,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,MAED,IAAI,KAAK,OAAO;AAAA,QACd,MAAM,QAAQ;AAAA,UACZ,GAAG,gBAAgB,SAAS,WAAW;AAAA,UACvC,GAAG,WAAW,QAAQ;AAAA,UACtB;AAAA,UACA,KAAK,iBAAiB,QAAQ;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,QAAQ,OAAO,MAAM,GAAG,MAAM,KAAK;AAAA,CAAI;AAAA,CAAK;AAAA,QAC5C,IAAI,KAAK,MAAM;AAAA,UACb,QAAQ,OAAO,MAAM,gBAAgB,QAAQ,CAAC;AAAA,QAChD;AAAA,QACA,IAAI,SAAS,QAAQ,GAAG;AAAA,UAGtB,QAAQ,WAAW;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,MAIA,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO,MACb,GAAG,oBAAoB,SAAS,MAAM,QAAQ,SAAS,cAAc,QAAQ,IAAI;AAAA;AAAA,CACnF;AAAA,MAIA,WAAW,SAAS,SAAS,WAAW;AAAA,QACtC,YAAY,QAAQ,MAAM,WAAW,MAAM,QAAQ,MAAM,IAAI;AAAA,MAC/D;AAAA,MACA,MAAM,YAAY,MAAM,MAAM;AAAA,MAE9B,MAAM,WAAW,uBAAuB;AAAA,QACtC,OAAO,QAAQ,OAAO,UAAU;AAAA,QAChC,OAAO,CAAC,UAAU,QAAQ,OAAO,MAAM,KAAK;AAAA,MAC9C,CAAC;AAAA,MACD,MAAM,SAAS,MAAM,aAAa;AAAA,QAChC,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,YAAY,CAAC,UAAU,SAAS,WAAW,KAAK;AAAA,QAGhD,eAAe,MAAM,YAAY,MAAM,MAAM;AAAA,QAC7C;AAAA,QACA,WAAW,WAAW;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,MACD,SAAS,KAAK;AAAA,MAKd,MAAM,eAAe,IAAI,IACvB,YAAY,IAAI,EAAE,OAAO,CAAC,SAAS,SAAS,KAAK,aAAa,CAChE;AAAA,MACA,MAAM,YACJ,MACA,YAAY,QAAQ,SAAS,cAAc,YAAY,CACzD;AAAA,MAEA,MAAM,OAAO;AAAA,QACX;AAAA,QACA,GAAG,gBAAgB,SAAS,WAAW;AAAA,QACvC,KAAK,qBAAqB,QAAQ,QAAQ;AAAA,QAC1C;AAAA,MACF;AAAA,MACA,QAAQ,OAAO,MAAM,KAAK,KAAK;AAAA,CAAI,CAAC;AAAA,MAEpC,IAAI,KAAK,MAAM;AAAA,QACb,QAAQ,OAAO,MAAM,oBAAoB,QAAQ,QAAQ,CAAC;AAAA,MAC5D;AAAA,MACA,IAAI,OAAO,OAAO,SAAS,KAAK,OAAO,OAAO,UAAU,GAAG;AAAA,QAIzD,QAAQ,WAAW;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AAAA,MACd,IAAI,iBAAiB,YAAY;AAAA,QAC/B,kBAAkB,CAAC,MAAM,UAAU,GAAG,IAAI;AAAA,QAC1C,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MAGA,IAAK,OAAiC,SAAS,YAAY,OAAO;AAAA,QAChE,aAAa,KAAK;AAAA,MACpB;AAAA,MACA,oBAAoB,KAAK;AAAA,MACzB,QAAQ,KAAK,CAAC;AAAA;AAAA;AAGpB,CAAC;",
17
+ "debugId": "7CBDF68DDB18B6AB64756E2164756E21",
18
18
  "names": []
19
19
  }