gazetta 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (738) hide show
  1. package/admin-dist/assets/index-CBeq0rRb.js +693 -0
  2. package/admin-dist/assets/index-Dtg1dTZQ.css +1 -0
  3. package/admin-dist/assets/rolldown-runtime-BYbx6iT9.js +1 -0
  4. package/admin-dist/assets/{vendor-primevue-C0Q_YTCb.js → vendor-primevue-CBGHkaXv.js} +183 -39
  5. package/admin-dist/assets/{vendor-react-BipDVGow.js → vendor-react-BdW_kNCG.js} +2 -2
  6. package/admin-dist/assets/vendor-rjsf-lN2SztQt.js +33 -0
  7. package/admin-dist/assets/vendor-tiptap-C36yDquB.js +141 -0
  8. package/admin-dist/assets/vendor-vue-Bt5uR1VW.js +1 -0
  9. package/admin-dist/assets/workbox-window.prod.es5-DGMtIXHc.js +2 -0
  10. package/admin-dist/index.html +8 -8
  11. package/admin-dist/sw.js +1 -0
  12. package/dist/admin-api/archived-name-conflict.d.ts +31 -0
  13. package/dist/admin-api/archived-name-conflict.d.ts.map +1 -0
  14. package/dist/admin-api/archived-name-conflict.js +226 -0
  15. package/dist/admin-api/archived-name-conflict.js.map +1 -0
  16. package/dist/admin-api/cache-stats-logger.d.ts +83 -0
  17. package/dist/admin-api/cache-stats-logger.d.ts.map +1 -0
  18. package/dist/admin-api/cache-stats-logger.js +59 -0
  19. package/dist/admin-api/cache-stats-logger.js.map +1 -0
  20. package/dist/admin-api/hook-audit-emitter.d.ts +38 -0
  21. package/dist/admin-api/hook-audit-emitter.d.ts.map +1 -0
  22. package/dist/admin-api/hook-audit-emitter.js +21 -0
  23. package/dist/admin-api/hook-audit-emitter.js.map +1 -0
  24. package/dist/admin-api/index.d.ts +84 -0
  25. package/dist/admin-api/index.d.ts.map +1 -1
  26. package/dist/admin-api/index.js +254 -9
  27. package/dist/admin-api/index.js.map +1 -1
  28. package/dist/admin-api/middleware/audit.d.ts +25 -0
  29. package/dist/admin-api/middleware/audit.d.ts.map +1 -0
  30. package/dist/admin-api/middleware/audit.js +65 -0
  31. package/dist/admin-api/middleware/audit.js.map +1 -0
  32. package/dist/admin-api/middleware/capability.d.ts +8 -0
  33. package/dist/admin-api/middleware/capability.d.ts.map +1 -0
  34. package/dist/admin-api/middleware/capability.js +65 -0
  35. package/dist/admin-api/middleware/capability.js.map +1 -0
  36. package/dist/admin-api/middleware/principal.d.ts +18 -0
  37. package/dist/admin-api/middleware/principal.d.ts.map +1 -0
  38. package/dist/admin-api/middleware/principal.js +128 -0
  39. package/dist/admin-api/middleware/principal.js.map +1 -0
  40. package/dist/admin-api/routes/archive-review.d.ts +80 -0
  41. package/dist/admin-api/routes/archive-review.d.ts.map +1 -0
  42. package/dist/admin-api/routes/archive-review.js +70 -0
  43. package/dist/admin-api/routes/archive-review.js.map +1 -0
  44. package/dist/admin-api/routes/archive.d.ts +145 -0
  45. package/dist/admin-api/routes/archive.d.ts.map +1 -0
  46. package/dist/admin-api/routes/archive.js +540 -0
  47. package/dist/admin-api/routes/archive.js.map +1 -0
  48. package/dist/admin-api/routes/assets.d.ts +6 -1
  49. package/dist/admin-api/routes/assets.d.ts.map +1 -1
  50. package/dist/admin-api/routes/assets.js +167 -14
  51. package/dist/admin-api/routes/assets.js.map +1 -1
  52. package/dist/admin-api/routes/audit.d.ts +71 -0
  53. package/dist/admin-api/routes/audit.d.ts.map +1 -0
  54. package/dist/admin-api/routes/audit.js +178 -0
  55. package/dist/admin-api/routes/audit.js.map +1 -0
  56. package/dist/admin-api/routes/compare.d.ts.map +1 -1
  57. package/dist/admin-api/routes/compare.js +3 -2
  58. package/dist/admin-api/routes/compare.js.map +1 -1
  59. package/dist/admin-api/routes/fields.d.ts.map +1 -1
  60. package/dist/admin-api/routes/fields.js +2 -1
  61. package/dist/admin-api/routes/fields.js.map +1 -1
  62. package/dist/admin-api/routes/fragments.d.ts +13 -1
  63. package/dist/admin-api/routes/fragments.d.ts.map +1 -1
  64. package/dist/admin-api/routes/fragments.js +127 -92
  65. package/dist/admin-api/routes/fragments.js.map +1 -1
  66. package/dist/admin-api/routes/health.d.ts +60 -0
  67. package/dist/admin-api/routes/health.d.ts.map +1 -0
  68. package/dist/admin-api/routes/health.js +65 -0
  69. package/dist/admin-api/routes/health.js.map +1 -0
  70. package/dist/admin-api/routes/history.d.ts +2 -1
  71. package/dist/admin-api/routes/history.d.ts.map +1 -1
  72. package/dist/admin-api/routes/history.js +26 -4
  73. package/dist/admin-api/routes/history.js.map +1 -1
  74. package/dist/admin-api/routes/pages.d.ts +20 -1
  75. package/dist/admin-api/routes/pages.d.ts.map +1 -1
  76. package/dist/admin-api/routes/pages.js +157 -117
  77. package/dist/admin-api/routes/pages.js.map +1 -1
  78. package/dist/admin-api/routes/preview.d.ts.map +1 -1
  79. package/dist/admin-api/routes/preview.js +56 -17
  80. package/dist/admin-api/routes/preview.js.map +1 -1
  81. package/dist/admin-api/routes/publish.d.ts +19 -1
  82. package/dist/admin-api/routes/publish.d.ts.map +1 -1
  83. package/dist/admin-api/routes/publish.js +508 -92
  84. package/dist/admin-api/routes/publish.js.map +1 -1
  85. package/dist/admin-api/routes/rename.d.ts +62 -0
  86. package/dist/admin-api/routes/rename.d.ts.map +1 -0
  87. package/dist/admin-api/routes/rename.js +366 -0
  88. package/dist/admin-api/routes/rename.js.map +1 -0
  89. package/dist/admin-api/routes/site.d.ts.map +1 -1
  90. package/dist/admin-api/routes/site.js +6 -18
  91. package/dist/admin-api/routes/site.js.map +1 -1
  92. package/dist/admin-api/routes/system.d.ts +23 -0
  93. package/dist/admin-api/routes/system.d.ts.map +1 -0
  94. package/dist/admin-api/routes/system.js +115 -0
  95. package/dist/admin-api/routes/system.js.map +1 -0
  96. package/dist/admin-api/routes/templates.d.ts +11 -1
  97. package/dist/admin-api/routes/templates.d.ts.map +1 -1
  98. package/dist/admin-api/routes/templates.js +36 -3
  99. package/dist/admin-api/routes/templates.js.map +1 -1
  100. package/dist/admin-api/routes/validation.d.ts +47 -0
  101. package/dist/admin-api/routes/validation.d.ts.map +1 -0
  102. package/dist/admin-api/routes/validation.js +120 -0
  103. package/dist/admin-api/routes/validation.js.map +1 -0
  104. package/dist/admin-api/schemas/archive.d.ts +124 -0
  105. package/dist/admin-api/schemas/archive.d.ts.map +1 -0
  106. package/dist/admin-api/schemas/archive.js +93 -0
  107. package/dist/admin-api/schemas/archive.js.map +1 -0
  108. package/dist/admin-api/schemas/assets.d.ts +16 -0
  109. package/dist/admin-api/schemas/assets.d.ts.map +1 -1
  110. package/dist/admin-api/schemas/assets.js +15 -0
  111. package/dist/admin-api/schemas/assets.js.map +1 -1
  112. package/dist/admin-api/schemas/audit.d.ts +175 -0
  113. package/dist/admin-api/schemas/audit.d.ts.map +1 -0
  114. package/dist/admin-api/schemas/audit.js +91 -0
  115. package/dist/admin-api/schemas/audit.js.map +1 -0
  116. package/dist/admin-api/schemas/error.d.ts +94 -0
  117. package/dist/admin-api/schemas/error.d.ts.map +1 -0
  118. package/dist/admin-api/schemas/error.js +79 -0
  119. package/dist/admin-api/schemas/error.js.map +1 -0
  120. package/dist/admin-api/schemas/fragments.d.ts +2 -0
  121. package/dist/admin-api/schemas/fragments.d.ts.map +1 -1
  122. package/dist/admin-api/schemas/fragments.js +4 -0
  123. package/dist/admin-api/schemas/fragments.js.map +1 -1
  124. package/dist/admin-api/schemas/index.d.ts +8 -0
  125. package/dist/admin-api/schemas/index.d.ts.map +1 -1
  126. package/dist/admin-api/schemas/index.js +8 -0
  127. package/dist/admin-api/schemas/index.js.map +1 -1
  128. package/dist/admin-api/schemas/pages.d.ts +2 -0
  129. package/dist/admin-api/schemas/pages.d.ts.map +1 -1
  130. package/dist/admin-api/schemas/pages.js +11 -0
  131. package/dist/admin-api/schemas/pages.js.map +1 -1
  132. package/dist/admin-api/schemas/rename.d.ts +77 -0
  133. package/dist/admin-api/schemas/rename.d.ts.map +1 -0
  134. package/dist/admin-api/schemas/rename.js +75 -0
  135. package/dist/admin-api/schemas/rename.js.map +1 -0
  136. package/dist/admin-api/schemas/site.d.ts +3 -2
  137. package/dist/admin-api/schemas/site.d.ts.map +1 -1
  138. package/dist/admin-api/schemas/site.js +3 -2
  139. package/dist/admin-api/schemas/site.js.map +1 -1
  140. package/dist/admin-api/schemas/system.d.ts +28 -0
  141. package/dist/admin-api/schemas/system.d.ts.map +1 -0
  142. package/dist/admin-api/schemas/system.js +35 -0
  143. package/dist/admin-api/schemas/system.js.map +1 -0
  144. package/dist/admin-api/schemas/targets.d.ts +55 -0
  145. package/dist/admin-api/schemas/targets.d.ts.map +1 -1
  146. package/dist/admin-api/schemas/targets.js +46 -0
  147. package/dist/admin-api/schemas/targets.js.map +1 -1
  148. package/dist/admin-api/schemas/templates.d.ts +54 -0
  149. package/dist/admin-api/schemas/templates.d.ts.map +1 -1
  150. package/dist/admin-api/schemas/templates.js +21 -0
  151. package/dist/admin-api/schemas/templates.js.map +1 -1
  152. package/dist/admin-api/schemas/validation.d.ts +101 -0
  153. package/dist/admin-api/schemas/validation.d.ts.map +1 -0
  154. package/dist/admin-api/schemas/validation.js +57 -0
  155. package/dist/admin-api/schemas/validation.js.map +1 -0
  156. package/dist/admin-api/source-context.d.ts +66 -10
  157. package/dist/admin-api/source-context.d.ts.map +1 -1
  158. package/dist/admin-api/source-context.js +43 -5
  159. package/dist/admin-api/source-context.js.map +1 -1
  160. package/dist/ai/adapter-scaffold.d.ts +63 -0
  161. package/dist/ai/adapter-scaffold.d.ts.map +1 -0
  162. package/dist/ai/adapter-scaffold.js +89 -0
  163. package/dist/ai/adapter-scaffold.js.map +1 -0
  164. package/dist/ai/compose-prompt.d.ts +50 -0
  165. package/dist/ai/compose-prompt.d.ts.map +1 -0
  166. package/dist/ai/compose-prompt.js +49 -0
  167. package/dist/ai/compose-prompt.js.map +1 -0
  168. package/dist/ai/errors.d.ts +65 -0
  169. package/dist/ai/errors.d.ts.map +1 -0
  170. package/dist/ai/errors.js +59 -0
  171. package/dist/ai/errors.js.map +1 -0
  172. package/dist/ai/index.d.ts +17 -0
  173. package/dist/ai/index.d.ts.map +1 -0
  174. package/dist/ai/index.js +16 -0
  175. package/dist/ai/index.js.map +1 -0
  176. package/dist/ai/provider.d.ts +76 -0
  177. package/dist/ai/provider.d.ts.map +1 -0
  178. package/dist/ai/provider.js +13 -0
  179. package/dist/ai/provider.js.map +1 -0
  180. package/dist/ai/refusal.d.ts +50 -0
  181. package/dist/ai/refusal.d.ts.map +1 -0
  182. package/dist/ai/refusal.js +100 -0
  183. package/dist/ai/refusal.js.map +1 -0
  184. package/dist/ai/vision-prep.d.ts +32 -0
  185. package/dist/ai/vision-prep.d.ts.map +1 -0
  186. package/dist/ai/vision-prep.js +113 -0
  187. package/dist/ai/vision-prep.js.map +1 -0
  188. package/dist/alt/adapter.d.ts +140 -0
  189. package/dist/alt/adapter.d.ts.map +1 -0
  190. package/dist/alt/adapter.js +7 -0
  191. package/dist/alt/adapter.js.map +1 -0
  192. package/dist/alt/anthropic.d.ts +63 -0
  193. package/dist/alt/anthropic.d.ts.map +1 -0
  194. package/dist/alt/anthropic.js +147 -0
  195. package/dist/alt/anthropic.js.map +1 -0
  196. package/dist/alt/config.d.ts +67 -0
  197. package/dist/alt/config.d.ts.map +1 -0
  198. package/dist/alt/config.js +41 -0
  199. package/dist/alt/config.js.map +1 -0
  200. package/dist/alt/factory.d.ts +19 -0
  201. package/dist/alt/factory.d.ts.map +1 -0
  202. package/dist/alt/factory.js +69 -0
  203. package/dist/alt/factory.js.map +1 -0
  204. package/dist/alt/null-adapter.d.ts +3 -0
  205. package/dist/alt/null-adapter.d.ts.map +1 -0
  206. package/dist/alt/null-adapter.js +43 -0
  207. package/dist/alt/null-adapter.js.map +1 -0
  208. package/dist/alt/ollama.d.ts +40 -0
  209. package/dist/alt/ollama.d.ts.map +1 -0
  210. package/dist/alt/ollama.js +139 -0
  211. package/dist/alt/ollama.js.map +1 -0
  212. package/dist/alt/openai.d.ts +46 -0
  213. package/dist/alt/openai.d.ts.map +1 -0
  214. package/dist/alt/openai.js +118 -0
  215. package/dist/alt/openai.js.map +1 -0
  216. package/dist/alt/prompt-policies.d.ts +79 -0
  217. package/dist/alt/prompt-policies.d.ts.map +1 -0
  218. package/dist/alt/prompt-policies.js +67 -0
  219. package/dist/alt/prompt-policies.js.map +1 -0
  220. package/dist/alt/route-handler.d.ts +56 -0
  221. package/dist/alt/route-handler.d.ts.map +1 -0
  222. package/dist/alt/route-handler.js +122 -0
  223. package/dist/alt/route-handler.js.map +1 -0
  224. package/dist/alt/suggester.d.ts +57 -0
  225. package/dist/alt/suggester.d.ts.map +1 -0
  226. package/dist/alt/suggester.js +133 -0
  227. package/dist/alt/suggester.js.map +1 -0
  228. package/dist/app.js +1 -1
  229. package/dist/app.js.map +1 -1
  230. package/dist/archive-aliases.d.ts +79 -0
  231. package/dist/archive-aliases.d.ts.map +1 -0
  232. package/dist/archive-aliases.js +60 -0
  233. package/dist/archive-aliases.js.map +1 -0
  234. package/dist/archive-helpers.d.ts +73 -0
  235. package/dist/archive-helpers.d.ts.map +1 -0
  236. package/dist/archive-helpers.js +94 -0
  237. package/dist/archive-helpers.js.map +1 -0
  238. package/dist/assets/find-refs.d.ts +1 -1
  239. package/dist/assets/find-refs.js +1 -1
  240. package/dist/assets/find-refs.js.map +1 -1
  241. package/dist/assets/rename.js +1 -1
  242. package/dist/assets/rename.js.map +1 -1
  243. package/dist/assets/replace.js +1 -1
  244. package/dist/assets/replace.js.map +1 -1
  245. package/dist/assets/resolve.js +4 -4
  246. package/dist/assets/resolve.js.map +1 -1
  247. package/dist/assets/serve-route.js +2 -2
  248. package/dist/assets/serve-route.js.map +1 -1
  249. package/dist/assets/validate.d.ts +1 -1
  250. package/dist/assets/validate.js +1 -1
  251. package/dist/audit/config.d.ts +75 -0
  252. package/dist/audit/config.d.ts.map +1 -0
  253. package/dist/audit/config.js +91 -0
  254. package/dist/audit/config.js.map +1 -0
  255. package/dist/audit/context.d.ts +98 -0
  256. package/dist/audit/context.d.ts.map +1 -0
  257. package/dist/audit/context.js +51 -0
  258. package/dist/audit/context.js.map +1 -0
  259. package/dist/audit/errors.d.ts +73 -0
  260. package/dist/audit/errors.d.ts.map +1 -0
  261. package/dist/audit/errors.js +78 -0
  262. package/dist/audit/errors.js.map +1 -0
  263. package/dist/audit/index.d.ts +16 -0
  264. package/dist/audit/index.d.ts.map +1 -0
  265. package/dist/audit/index.js +10 -0
  266. package/dist/audit/index.js.map +1 -0
  267. package/dist/audit/provider.d.ts +73 -0
  268. package/dist/audit/provider.d.ts.map +1 -0
  269. package/dist/audit/provider.js +2 -0
  270. package/dist/audit/provider.js.map +1 -0
  271. package/dist/audit/providers/history.d.ts +66 -0
  272. package/dist/audit/providers/history.d.ts.map +1 -0
  273. package/dist/audit/providers/history.js +102 -0
  274. package/dist/audit/providers/history.js.map +1 -0
  275. package/dist/audit/pseudonymize.d.ts +26 -0
  276. package/dist/audit/pseudonymize.d.ts.map +1 -0
  277. package/dist/audit/pseudonymize.js +86 -0
  278. package/dist/audit/pseudonymize.js.map +1 -0
  279. package/dist/audit/recorder.d.ts +102 -0
  280. package/dist/audit/recorder.d.ts.map +1 -0
  281. package/dist/audit/recorder.js +55 -0
  282. package/dist/audit/recorder.js.map +1 -0
  283. package/dist/audit/retention.d.ts +83 -0
  284. package/dist/audit/retention.d.ts.map +1 -0
  285. package/dist/audit/retention.js +142 -0
  286. package/dist/audit/retention.js.map +1 -0
  287. package/dist/audit/source-ip.d.ts +32 -0
  288. package/dist/audit/source-ip.d.ts.map +1 -0
  289. package/dist/audit/source-ip.js +164 -0
  290. package/dist/audit/source-ip.js.map +1 -0
  291. package/dist/audit/types.d.ts +143 -0
  292. package/dist/audit/types.d.ts.map +1 -0
  293. package/dist/audit/types.js +33 -0
  294. package/dist/audit/types.js.map +1 -0
  295. package/dist/audit/user-agent.d.ts +28 -0
  296. package/dist/audit/user-agent.d.ts.map +1 -0
  297. package/dist/audit/user-agent.js +63 -0
  298. package/dist/audit/user-agent.js.map +1 -0
  299. package/dist/auth/capabilities.d.ts +28 -0
  300. package/dist/auth/capabilities.d.ts.map +1 -0
  301. package/dist/auth/capabilities.js +101 -0
  302. package/dist/auth/capabilities.js.map +1 -0
  303. package/dist/auth/config.d.ts +109 -0
  304. package/dist/auth/config.d.ts.map +1 -0
  305. package/dist/auth/config.js +221 -0
  306. package/dist/auth/config.js.map +1 -0
  307. package/dist/auth/errors.d.ts +72 -0
  308. package/dist/auth/errors.d.ts.map +1 -0
  309. package/dist/auth/errors.js +78 -0
  310. package/dist/auth/errors.js.map +1 -0
  311. package/dist/auth/factory.d.ts +43 -0
  312. package/dist/auth/factory.d.ts.map +1 -0
  313. package/dist/auth/factory.js +48 -0
  314. package/dist/auth/factory.js.map +1 -0
  315. package/dist/auth/index.d.ts +21 -0
  316. package/dist/auth/index.d.ts.map +1 -0
  317. package/dist/auth/index.js +14 -0
  318. package/dist/auth/index.js.map +1 -0
  319. package/dist/auth/ip-match.d.ts +29 -0
  320. package/dist/auth/ip-match.d.ts.map +1 -0
  321. package/dist/auth/ip-match.js +162 -0
  322. package/dist/auth/ip-match.js.map +1 -0
  323. package/dist/auth/provider.d.ts +76 -0
  324. package/dist/auth/provider.d.ts.map +1 -0
  325. package/dist/auth/provider.js +2 -0
  326. package/dist/auth/provider.js.map +1 -0
  327. package/dist/auth/providers/aws-cognito.d.ts +55 -0
  328. package/dist/auth/providers/aws-cognito.d.ts.map +1 -0
  329. package/dist/auth/providers/aws-cognito.js +114 -0
  330. package/dist/auth/providers/aws-cognito.js.map +1 -0
  331. package/dist/auth/providers/azure-easy-auth.d.ts +7 -0
  332. package/dist/auth/providers/azure-easy-auth.d.ts.map +1 -0
  333. package/dist/auth/providers/azure-easy-auth.js +48 -0
  334. package/dist/auth/providers/azure-easy-auth.js.map +1 -0
  335. package/dist/auth/providers/cloudflare-access.d.ts +71 -0
  336. package/dist/auth/providers/cloudflare-access.d.ts.map +1 -0
  337. package/dist/auth/providers/cloudflare-access.js +120 -0
  338. package/dist/auth/providers/cloudflare-access.js.map +1 -0
  339. package/dist/auth/providers/forwarded-user.d.ts +31 -0
  340. package/dist/auth/providers/forwarded-user.d.ts.map +1 -0
  341. package/dist/auth/providers/forwarded-user.js +72 -0
  342. package/dist/auth/providers/forwarded-user.js.map +1 -0
  343. package/dist/auth/providers/none.d.ts +6 -0
  344. package/dist/auth/providers/none.d.ts.map +1 -0
  345. package/dist/auth/providers/none.js +19 -0
  346. package/dist/auth/providers/none.js.map +1 -0
  347. package/dist/auth/providers/tailscale.d.ts +7 -0
  348. package/dist/auth/providers/tailscale.d.ts.map +1 -0
  349. package/dist/auth/providers/tailscale.js +30 -0
  350. package/dist/auth/providers/tailscale.js.map +1 -0
  351. package/dist/auth/role-resolver.d.ts +38 -0
  352. package/dist/auth/role-resolver.d.ts.map +1 -0
  353. package/dist/auth/role-resolver.js +92 -0
  354. package/dist/auth/role-resolver.js.map +1 -0
  355. package/dist/auth/types.d.ts +150 -0
  356. package/dist/auth/types.d.ts.map +1 -0
  357. package/dist/auth/types.js +60 -0
  358. package/dist/auth/types.js.map +1 -0
  359. package/dist/cache/errors.d.ts +41 -0
  360. package/dist/cache/errors.d.ts.map +1 -0
  361. package/dist/cache/errors.js +44 -0
  362. package/dist/cache/errors.js.map +1 -0
  363. package/dist/cache/factories.d.ts +17 -0
  364. package/dist/cache/factories.d.ts.map +1 -0
  365. package/dist/cache/factories.js +17 -0
  366. package/dist/cache/factories.js.map +1 -0
  367. package/dist/cache/keys.d.ts +63 -0
  368. package/dist/cache/keys.d.ts.map +1 -0
  369. package/dist/cache/keys.js +145 -0
  370. package/dist/cache/keys.js.map +1 -0
  371. package/dist/cache/memory.d.ts +51 -0
  372. package/dist/cache/memory.d.ts.map +1 -0
  373. package/dist/cache/memory.js +204 -0
  374. package/dist/cache/memory.js.map +1 -0
  375. package/dist/cache/per-site.d.ts +22 -0
  376. package/dist/cache/per-site.d.ts.map +1 -0
  377. package/dist/cache/per-site.js +114 -0
  378. package/dist/cache/per-site.js.map +1 -0
  379. package/dist/cache/types.d.ts +142 -0
  380. package/dist/cache/types.d.ts.map +1 -0
  381. package/dist/cache/types.js +33 -0
  382. package/dist/cache/types.js.map +1 -0
  383. package/dist/cli/archive.d.ts +44 -0
  384. package/dist/cli/archive.d.ts.map +1 -0
  385. package/dist/cli/archive.js +310 -0
  386. package/dist/cli/archive.js.map +1 -0
  387. package/dist/cli/bootstrap.d.ts +15 -8
  388. package/dist/cli/bootstrap.d.ts.map +1 -1
  389. package/dist/cli/bootstrap.js +59 -23
  390. package/dist/cli/bootstrap.js.map +1 -1
  391. package/dist/cli/dev-template-watcher.d.ts +29 -0
  392. package/dist/cli/dev-template-watcher.d.ts.map +1 -0
  393. package/dist/cli/dev-template-watcher.js +38 -0
  394. package/dist/cli/dev-template-watcher.js.map +1 -0
  395. package/dist/cli/history.d.ts.map +1 -1
  396. package/dist/cli/history.js +5 -3
  397. package/dist/cli/history.js.map +1 -1
  398. package/dist/cli/index.js +712 -395
  399. package/dist/cli/index.js.map +1 -1
  400. package/dist/cli/validate-flags.d.ts +29 -0
  401. package/dist/cli/validate-flags.d.ts.map +1 -0
  402. package/dist/cli/validate-flags.js +49 -0
  403. package/dist/cli/validate-flags.js.map +1 -0
  404. package/dist/compare.d.ts +1 -1
  405. package/dist/compare.d.ts.map +1 -1
  406. package/dist/compare.js +25 -23
  407. package/dist/compare.js.map +1 -1
  408. package/dist/component-ids.d.ts +25 -0
  409. package/dist/component-ids.d.ts.map +1 -0
  410. package/dist/component-ids.js +83 -0
  411. package/dist/component-ids.js.map +1 -0
  412. package/dist/config/define.d.ts +61 -0
  413. package/dist/config/define.d.ts.map +1 -0
  414. package/dist/config/define.js +64 -0
  415. package/dist/config/define.js.map +1 -0
  416. package/dist/config/errors.d.ts +32 -0
  417. package/dist/config/errors.d.ts.map +1 -0
  418. package/dist/config/errors.js +40 -0
  419. package/dist/config/errors.js.map +1 -0
  420. package/dist/config/index.d.ts +13 -0
  421. package/dist/config/index.d.ts.map +1 -0
  422. package/dist/config/index.js +20 -0
  423. package/dist/config/index.js.map +1 -0
  424. package/dist/config/loader.d.ts +105 -0
  425. package/dist/config/loader.d.ts.map +1 -0
  426. package/dist/config/loader.js +265 -0
  427. package/dist/config/loader.js.map +1 -0
  428. package/dist/config/schemas.d.ts +89 -0
  429. package/dist/config/schemas.d.ts.map +1 -0
  430. package/dist/config/schemas.js +172 -0
  431. package/dist/config/schemas.js.map +1 -0
  432. package/dist/config/types.d.ts +32 -0
  433. package/dist/config/types.d.ts.map +1 -0
  434. package/dist/config/types.js +15 -0
  435. package/dist/config/types.js.map +1 -0
  436. package/dist/deploy/cloudflare-workers.d.ts +46 -0
  437. package/dist/deploy/cloudflare-workers.d.ts.map +1 -0
  438. package/dist/deploy/cloudflare-workers.js +213 -0
  439. package/dist/deploy/cloudflare-workers.js.map +1 -0
  440. package/dist/deploy/errors.d.ts +66 -0
  441. package/dist/deploy/errors.d.ts.map +1 -0
  442. package/dist/deploy/errors.js +82 -0
  443. package/dist/deploy/errors.js.map +1 -0
  444. package/dist/deploy/index.d.ts +9 -0
  445. package/dist/deploy/index.d.ts.map +1 -0
  446. package/dist/deploy/index.js +3 -0
  447. package/dist/deploy/index.js.map +1 -0
  448. package/dist/deploy/types.d.ts +162 -0
  449. package/dist/deploy/types.d.ts.map +1 -0
  450. package/dist/deploy/types.js +2 -0
  451. package/dist/deploy/types.js.map +1 -0
  452. package/dist/fragments/create.d.ts +70 -0
  453. package/dist/fragments/create.d.ts.map +1 -0
  454. package/dist/fragments/create.js +93 -0
  455. package/dist/fragments/create.js.map +1 -0
  456. package/dist/fragments/publish.d.ts +37 -0
  457. package/dist/fragments/publish.d.ts.map +1 -0
  458. package/dist/fragments/publish.js +52 -0
  459. package/dist/fragments/publish.js.map +1 -0
  460. package/dist/fragments/save.d.ts +81 -0
  461. package/dist/fragments/save.d.ts.map +1 -0
  462. package/dist/fragments/save.js +105 -0
  463. package/dist/fragments/save.js.map +1 -0
  464. package/dist/history-recorder.d.ts +5 -5
  465. package/dist/history-recorder.d.ts.map +1 -1
  466. package/dist/history-recorder.js +4 -4
  467. package/dist/history-recorder.js.map +1 -1
  468. package/dist/history-restorer.js +2 -2
  469. package/dist/history-restorer.js.map +1 -1
  470. package/dist/history.d.ts +1 -1
  471. package/dist/hooks/audit-emitter.d.ts +73 -0
  472. package/dist/hooks/audit-emitter.d.ts.map +1 -0
  473. package/dist/hooks/audit-emitter.js +13 -0
  474. package/dist/hooks/audit-emitter.js.map +1 -0
  475. package/dist/hooks/context.d.ts +78 -0
  476. package/dist/hooks/context.d.ts.map +1 -0
  477. package/dist/hooks/context.js +56 -0
  478. package/dist/hooks/context.js.map +1 -0
  479. package/dist/hooks/contribution.d.ts +90 -0
  480. package/dist/hooks/contribution.d.ts.map +1 -0
  481. package/dist/hooks/contribution.js +2 -0
  482. package/dist/hooks/contribution.js.map +1 -0
  483. package/dist/hooks/dispatch.d.ts +30 -0
  484. package/dist/hooks/dispatch.d.ts.map +1 -0
  485. package/dist/hooks/dispatch.js +252 -0
  486. package/dist/hooks/dispatch.js.map +1 -0
  487. package/dist/hooks/errors.d.ts +100 -0
  488. package/dist/hooks/errors.d.ts.map +1 -0
  489. package/dist/hooks/errors.js +103 -0
  490. package/dist/hooks/errors.js.map +1 -0
  491. package/dist/hooks/index.d.ts +15 -0
  492. package/dist/hooks/index.d.ts.map +1 -0
  493. package/dist/hooks/index.js +6 -0
  494. package/dist/hooks/index.js.map +1 -0
  495. package/dist/hooks/registry.d.ts +53 -0
  496. package/dist/hooks/registry.d.ts.map +1 -0
  497. package/dist/hooks/registry.js +139 -0
  498. package/dist/hooks/registry.js.map +1 -0
  499. package/dist/hooks/storage.d.ts +43 -0
  500. package/dist/hooks/storage.d.ts.map +1 -0
  501. package/dist/hooks/storage.js +2 -0
  502. package/dist/hooks/storage.js.map +1 -0
  503. package/dist/hooks/types.d.ts +324 -0
  504. package/dist/hooks/types.d.ts.map +1 -0
  505. package/dist/hooks/types.js +2 -0
  506. package/dist/hooks/types.js.map +1 -0
  507. package/dist/index.d.ts +26 -6
  508. package/dist/index.d.ts.map +1 -1
  509. package/dist/index.js +49 -5
  510. package/dist/index.js.map +1 -1
  511. package/dist/locale.d.ts +5 -1
  512. package/dist/locale.d.ts.map +1 -1
  513. package/dist/locale.js +6 -2
  514. package/dist/locale.js.map +1 -1
  515. package/dist/manifest-save.d.ts +255 -0
  516. package/dist/manifest-save.d.ts.map +1 -0
  517. package/dist/manifest-save.js +260 -0
  518. package/dist/manifest-save.js.map +1 -0
  519. package/dist/manifest.d.ts +1 -2
  520. package/dist/manifest.d.ts.map +1 -1
  521. package/dist/manifest.js +43 -44
  522. package/dist/manifest.js.map +1 -1
  523. package/dist/node-floor.d.ts +3 -0
  524. package/dist/node-floor.d.ts.map +1 -0
  525. package/dist/node-floor.js +3 -0
  526. package/dist/node-floor.js.map +1 -0
  527. package/dist/pages/create.d.ts +103 -0
  528. package/dist/pages/create.d.ts.map +1 -0
  529. package/dist/pages/create.js +117 -0
  530. package/dist/pages/create.js.map +1 -0
  531. package/dist/pages/publish.d.ts +59 -0
  532. package/dist/pages/publish.d.ts.map +1 -0
  533. package/dist/pages/publish.js +78 -0
  534. package/dist/pages/publish.js.map +1 -0
  535. package/dist/pages/save.d.ts +97 -0
  536. package/dist/pages/save.d.ts.map +1 -0
  537. package/dist/pages/save.js +138 -0
  538. package/dist/pages/save.js.map +1 -0
  539. package/dist/providers/factories.d.ts +65 -0
  540. package/dist/providers/factories.d.ts.map +1 -0
  541. package/dist/providers/factories.js +189 -0
  542. package/dist/providers/factories.js.map +1 -0
  543. package/dist/publish-item.d.ts +225 -0
  544. package/dist/publish-item.d.ts.map +1 -0
  545. package/dist/publish-item.js +210 -0
  546. package/dist/publish-item.js.map +1 -0
  547. package/dist/publish-rendered.d.ts.map +1 -1
  548. package/dist/publish-rendered.js +75 -6
  549. package/dist/publish-rendered.js.map +1 -1
  550. package/dist/publish-renderers.d.ts +132 -0
  551. package/dist/publish-renderers.d.ts.map +1 -0
  552. package/dist/publish-renderers.js +240 -0
  553. package/dist/publish-renderers.js.map +1 -0
  554. package/dist/publish-run.d.ts +223 -0
  555. package/dist/publish-run.d.ts.map +1 -0
  556. package/dist/publish-run.js +307 -0
  557. package/dist/publish-run.js.map +1 -0
  558. package/dist/publish.d.ts.map +1 -1
  559. package/dist/publish.js +1 -10
  560. package/dist/publish.js.map +1 -1
  561. package/dist/render-for-analysis.d.ts +24 -0
  562. package/dist/render-for-analysis.d.ts.map +1 -0
  563. package/dist/render-for-analysis.js +146 -0
  564. package/dist/render-for-analysis.js.map +1 -0
  565. package/dist/resolver.d.ts.map +1 -1
  566. package/dist/resolver.js +47 -23
  567. package/dist/resolver.js.map +1 -1
  568. package/dist/runtime/archive-marker.d.ts +62 -0
  569. package/dist/runtime/archive-marker.d.ts.map +1 -0
  570. package/dist/runtime/archive-marker.js +88 -0
  571. package/dist/runtime/archive-marker.js.map +1 -0
  572. package/dist/runtime/capability-gap-warnings.d.ts +42 -0
  573. package/dist/runtime/capability-gap-warnings.d.ts.map +1 -0
  574. package/dist/runtime/capability-gap-warnings.js +28 -0
  575. package/dist/runtime/capability-gap-warnings.js.map +1 -0
  576. package/dist/runtime/redirects-emit.d.ts +93 -0
  577. package/dist/runtime/redirects-emit.d.ts.map +1 -0
  578. package/dist/runtime/redirects-emit.js +89 -0
  579. package/dist/runtime/redirects-emit.js.map +1 -0
  580. package/dist/runtime/runtime-capabilities.d.ts +79 -0
  581. package/dist/runtime/runtime-capabilities.d.ts.map +1 -0
  582. package/dist/runtime/runtime-capabilities.js +60 -0
  583. package/dist/runtime/runtime-capabilities.js.map +1 -0
  584. package/dist/save-etag.d.ts +69 -0
  585. package/dist/save-etag.d.ts.map +1 -0
  586. package/dist/save-etag.js +118 -0
  587. package/dist/save-etag.js.map +1 -0
  588. package/dist/site-loader.d.ts +42 -4
  589. package/dist/site-loader.d.ts.map +1 -1
  590. package/dist/site-loader.js +27 -8
  591. package/dist/site-loader.js.map +1 -1
  592. package/dist/targets.d.ts +21 -12
  593. package/dist/targets.d.ts.map +1 -1
  594. package/dist/targets.js +27 -95
  595. package/dist/targets.js.map +1 -1
  596. package/dist/testing/admin-cache-contract.d.ts +52 -0
  597. package/dist/testing/admin-cache-contract.d.ts.map +1 -0
  598. package/dist/testing/admin-cache-contract.js +203 -0
  599. package/dist/testing/admin-cache-contract.js.map +1 -0
  600. package/dist/testing/index.d.ts +11 -0
  601. package/dist/testing/index.d.ts.map +1 -0
  602. package/dist/testing/index.js +11 -0
  603. package/dist/testing/index.js.map +1 -0
  604. package/dist/transforms/factories.d.ts +16 -0
  605. package/dist/transforms/factories.d.ts.map +1 -0
  606. package/dist/transforms/factories.js +18 -0
  607. package/dist/transforms/factories.js.map +1 -0
  608. package/dist/transforms/index.d.ts +10 -17
  609. package/dist/transforms/index.d.ts.map +1 -1
  610. package/dist/transforms/index.js +4 -28
  611. package/dist/transforms/index.js.map +1 -1
  612. package/dist/transforms/sharp.d.ts +15 -1
  613. package/dist/transforms/sharp.d.ts.map +1 -1
  614. package/dist/transforms/sharp.js +34 -20
  615. package/dist/transforms/sharp.js.map +1 -1
  616. package/dist/types.d.ts +379 -52
  617. package/dist/types.d.ts.map +1 -1
  618. package/dist/types.js +20 -1
  619. package/dist/types.js.map +1 -1
  620. package/dist/validation/alt-required-walker.d.ts +27 -0
  621. package/dist/validation/alt-required-walker.d.ts.map +1 -0
  622. package/dist/validation/alt-required-walker.js +108 -0
  623. package/dist/validation/alt-required-walker.js.map +1 -0
  624. package/dist/validation/default-registry.d.ts +12 -0
  625. package/dist/validation/default-registry.d.ts.map +1 -0
  626. package/dist/validation/default-registry.js +55 -0
  627. package/dist/validation/default-registry.js.map +1 -0
  628. package/dist/validation/publish-audit.d.ts +44 -0
  629. package/dist/validation/publish-audit.d.ts.map +1 -0
  630. package/dist/validation/publish-audit.js +64 -0
  631. package/dist/validation/publish-audit.js.map +1 -0
  632. package/dist/validation/registry.d.ts +23 -0
  633. package/dist/validation/registry.d.ts.map +1 -0
  634. package/dist/validation/registry.js +15 -0
  635. package/dist/validation/registry.js.map +1 -0
  636. package/dist/validation/save-delta.d.ts +46 -0
  637. package/dist/validation/save-delta.d.ts.map +1 -0
  638. package/dist/validation/save-delta.js +57 -0
  639. package/dist/validation/save-delta.js.map +1 -0
  640. package/dist/validation/scanner.d.ts +91 -0
  641. package/dist/validation/scanner.d.ts.map +1 -0
  642. package/dist/validation/scanner.js +327 -0
  643. package/dist/validation/scanner.js.map +1 -0
  644. package/dist/validation/template-impact.d.ts +52 -0
  645. package/dist/validation/template-impact.d.ts.map +1 -0
  646. package/dist/validation/template-impact.js +53 -0
  647. package/dist/validation/template-impact.js.map +1 -0
  648. package/dist/validation/types.d.ts +123 -0
  649. package/dist/validation/types.d.ts.map +1 -0
  650. package/dist/validation/types.js +7 -0
  651. package/dist/validation/types.js.map +1 -0
  652. package/dist/validation/validators/accessibility.d.ts +3 -0
  653. package/dist/validation/validators/accessibility.d.ts.map +1 -0
  654. package/dist/validation/validators/accessibility.js +106 -0
  655. package/dist/validation/validators/accessibility.js.map +1 -0
  656. package/dist/validation/validators/aliasof-points-to-archived.d.ts +40 -0
  657. package/dist/validation/validators/aliasof-points-to-archived.d.ts.map +1 -0
  658. package/dist/validation/validators/aliasof-points-to-archived.js +34 -0
  659. package/dist/validation/validators/aliasof-points-to-archived.js.map +1 -0
  660. package/dist/validation/validators/alt-required.d.ts +3 -0
  661. package/dist/validation/validators/alt-required.d.ts.map +1 -0
  662. package/dist/validation/validators/alt-required.js +118 -0
  663. package/dist/validation/validators/alt-required.js.map +1 -0
  664. package/dist/validation/validators/archive-not-supported-on-target.d.ts +3 -0
  665. package/dist/validation/validators/archive-not-supported-on-target.d.ts.map +1 -0
  666. package/dist/validation/validators/archive-not-supported-on-target.js +38 -0
  667. package/dist/validation/validators/archive-not-supported-on-target.js.map +1 -0
  668. package/dist/validation/validators/broken-links.d.ts +3 -0
  669. package/dist/validation/validators/broken-links.d.ts.map +1 -0
  670. package/dist/validation/validators/broken-links.js +190 -0
  671. package/dist/validation/validators/broken-links.js.map +1 -0
  672. package/dist/validation/validators/circular-alias.d.ts +36 -0
  673. package/dist/validation/validators/circular-alias.d.ts.map +1 -0
  674. package/dist/validation/validators/circular-alias.js +63 -0
  675. package/dist/validation/validators/circular-alias.js.map +1 -0
  676. package/dist/validation/validators/circular-fragment.d.ts +15 -0
  677. package/dist/validation/validators/circular-fragment.d.ts.map +1 -0
  678. package/dist/validation/validators/circular-fragment.js +97 -0
  679. package/dist/validation/validators/circular-fragment.js.map +1 -0
  680. package/dist/validation/validators/dangling-alias.d.ts +38 -0
  681. package/dist/validation/validators/dangling-alias.d.ts.map +1 -0
  682. package/dist/validation/validators/dangling-alias.js +31 -0
  683. package/dist/validation/validators/dangling-alias.js.map +1 -0
  684. package/dist/validation/validators/deploy-target-type-supported.d.ts +3 -0
  685. package/dist/validation/validators/deploy-target-type-supported.d.ts.map +1 -0
  686. package/dist/validation/validators/deploy-target-type-supported.js +32 -0
  687. package/dist/validation/validators/deploy-target-type-supported.js.map +1 -0
  688. package/dist/validation/validators/dynamic-route-conflict.d.ts +18 -0
  689. package/dist/validation/validators/dynamic-route-conflict.d.ts.map +1 -0
  690. package/dist/validation/validators/dynamic-route-conflict.js +80 -0
  691. package/dist/validation/validators/dynamic-route-conflict.js.map +1 -0
  692. package/dist/validation/validators/html-validity.d.ts +3 -0
  693. package/dist/validation/validators/html-validity.d.ts.map +1 -0
  694. package/dist/validation/validators/html-validity.js +89 -0
  695. package/dist/validation/validators/html-validity.js.map +1 -0
  696. package/dist/validation/validators/orphaned-locale-file.d.ts +21 -0
  697. package/dist/validation/validators/orphaned-locale-file.d.ts.map +1 -0
  698. package/dist/validation/validators/orphaned-locale-file.js +84 -0
  699. package/dist/validation/validators/orphaned-locale-file.js.map +1 -0
  700. package/dist/validation/validators/referenced-archived-without-alias.d.ts +3 -0
  701. package/dist/validation/validators/referenced-archived-without-alias.d.ts.map +1 -0
  702. package/dist/validation/validators/referenced-archived-without-alias.js +65 -0
  703. package/dist/validation/validators/referenced-archived-without-alias.js.map +1 -0
  704. package/dist/validation/validators/referenced-asset-exists.d.ts +13 -0
  705. package/dist/validation/validators/referenced-asset-exists.d.ts.map +1 -0
  706. package/dist/validation/validators/referenced-asset-exists.js +80 -0
  707. package/dist/validation/validators/referenced-asset-exists.js.map +1 -0
  708. package/dist/validation/validators/referenced-fragment-exists.d.ts +9 -0
  709. package/dist/validation/validators/referenced-fragment-exists.d.ts.map +1 -0
  710. package/dist/validation/validators/referenced-fragment-exists.js +52 -0
  711. package/dist/validation/validators/referenced-fragment-exists.js.map +1 -0
  712. package/dist/validation/validators/referenced-template-exists.d.ts +10 -0
  713. package/dist/validation/validators/referenced-template-exists.d.ts.map +1 -0
  714. package/dist/validation/validators/referenced-template-exists.js +74 -0
  715. package/dist/validation/validators/referenced-template-exists.js.map +1 -0
  716. package/dist/validation/validators/schema-conformance.d.ts +17 -0
  717. package/dist/validation/validators/schema-conformance.d.ts.map +1 -0
  718. package/dist/validation/validators/schema-conformance.js +94 -0
  719. package/dist/validation/validators/schema-conformance.js.map +1 -0
  720. package/dist/validation/validators/target-deploy-coverage.d.ts +3 -0
  721. package/dist/validation/validators/target-deploy-coverage.d.ts.map +1 -0
  722. package/dist/validation/validators/target-deploy-coverage.js +37 -0
  723. package/dist/validation/validators/target-deploy-coverage.js.map +1 -0
  724. package/dist/validation/validators/unused-fragment.d.ts +16 -0
  725. package/dist/validation/validators/unused-fragment.d.ts.map +1 -0
  726. package/dist/validation/validators/unused-fragment.js +86 -0
  727. package/dist/validation/validators/unused-fragment.js.map +1 -0
  728. package/package.json +54 -31
  729. package/admin-dist/assets/index-BO9-CXmW.css +0 -1
  730. package/admin-dist/assets/index-Ufu8zZH_.js +0 -668
  731. package/admin-dist/assets/rolldown-runtime-COnpUsM8.js +0 -1
  732. package/admin-dist/assets/vendor-rjsf-HKBAjOmQ.js +0 -32
  733. package/admin-dist/assets/vendor-tiptap-IyO99U4R.js +0 -142
  734. package/admin-dist/assets/vendor-vue-D3wBSmDf.js +0 -1
  735. package/dist/publish-locale.d.ts +0 -44
  736. package/dist/publish-locale.d.ts.map +0 -1
  737. package/dist/publish-locale.js +0 -103
  738. package/dist/publish-locale.js.map +0 -1
package/dist/resolver.js CHANGED
@@ -3,6 +3,7 @@ import { processContent } from './content.js';
3
3
  import { resolveAssetRefs } from './assets/resolve.js';
4
4
  import { resolveLocaleFallback, resolveSiteLocales } from './locale.js';
5
5
  import { resolveSiteThemes } from './themes.js';
6
+ import { resolveFragmentArchiveAlias } from './archive-helpers.js';
6
7
  /**
7
8
  * Build the asset-resolve context from the site being rendered. Shared
8
9
  * across all `processContent` + `resolveAssetRefs` pairs in a single
@@ -36,14 +37,20 @@ export async function resolveComponent(entry, ctx) {
36
37
  }
37
38
  return resolveInlineComponent(entry, ctx);
38
39
  }
39
- async function resolveFragmentRef(fragmentName, ctx) {
40
- const key = `@${fragmentName}`;
41
- if (ctx.visited.has(key)) {
42
- throw new Error(`Circular reference detected: ${key}\n` + ` Resolution path: ${ctx.path.join(' → ')} → ${key}`);
43
- }
44
- ctx.visited.add(key);
45
- ctx.path.push(key);
46
- // Resolve locale-specific fragment variant, falling back through the chain
40
+ /**
41
+ * Look up a fragment by name with locale fallback. Returns null when the
42
+ * fragment doesn't exist (in any locale). Doesn't follow aliasOf —
43
+ * that's the caller's job (via `resolveFragmentArchiveAlias`).
44
+ *
45
+ * Locale resolution: a locale-specific variant (`fragment.fr.json`)
46
+ * wins when available + reachable per the resolved-locales fallback
47
+ * chain; otherwise the default-locale manifest is used.
48
+ *
49
+ * Used by both `resolveFragmentRef` (per-component path) and
50
+ * `resolveFragment` (entry-point path). Sharing the lookup keeps
51
+ * locale + alias resolution coherent across both paths.
52
+ */
53
+ function lookupFragmentForLocale(fragmentName, ctx) {
47
54
  let fragment = ctx.site.fragments.get(fragmentName) ?? null;
48
55
  if (ctx.locale && ctx.resolvedLocales) {
49
56
  const localeEntry = ctx.site.fragmentLocales.get(fragmentName);
@@ -55,7 +62,30 @@ async function resolveFragmentRef(fragmentName, ctx) {
55
62
  fragment = localeVariant;
56
63
  }
57
64
  }
58
- if (!fragment) {
65
+ return fragment;
66
+ }
67
+ async function resolveFragmentRef(fragmentName, ctx) {
68
+ const key = `@${fragmentName}`;
69
+ if (ctx.visited.has(key)) {
70
+ throw new Error(`Circular reference detected: ${key}\n` + ` Resolution path: ${ctx.path.join(' → ')} → ${key}`);
71
+ }
72
+ ctx.visited.add(key);
73
+ ctx.path.push(key);
74
+ // Look up the fragment, following aliasOf when archived (Q2 F1 lock).
75
+ // Throws ArchivedNoAliasError if archived without alias; throws on
76
+ // alias chains > MAX_ALIAS_HOPS or cycles (defensive — Q3 flatten
77
+ // guarantees one hop in practice).
78
+ const lookup = (name) => lookupFragmentForLocale(name, ctx);
79
+ let resolution;
80
+ try {
81
+ resolution = resolveFragmentArchiveAlias(fragmentName, lookup, ctx.path.join(' → '));
82
+ }
83
+ catch (err) {
84
+ ctx.path.pop();
85
+ ctx.visited.delete(key);
86
+ throw err;
87
+ }
88
+ if (!resolution) {
59
89
  const available = [...ctx.site.fragments.keys()];
60
90
  ctx.path.pop();
61
91
  ctx.visited.delete(key);
@@ -63,6 +93,8 @@ async function resolveFragmentRef(fragmentName, ctx) {
63
93
  ` Referenced in: ${ctx.path.join(' → ') || 'page root'}\n` +
64
94
  ` Available fragments: ${available.length > 0 ? available.join(', ') : '(none)'}`);
65
95
  }
96
+ // Cast: lookup callback only returns Site fragment entries which carry `dir`.
97
+ const fragment = resolution.manifest;
66
98
  const loaded = await loadTemplate(ctx.site.storage, ctx.templatesDir, fragment.template);
67
99
  const children = [];
68
100
  if (fragment.components) {
@@ -106,34 +138,26 @@ async function resolveInlineComponent(comp, ctx) {
106
138
  };
107
139
  }
108
140
  export async function resolveFragment(fragmentName, site, locale, theme) {
109
- // Resolve locale-specific fragment variant
110
- let fragment = site.fragments.get(fragmentName) ?? null;
111
141
  // Always resolve site-level config — even when no active locale/theme
112
142
  // is set, the asset resolver may need it (font enumeration walks the
113
143
  // configured theme universe).
114
144
  const resolvedLocales = resolveSiteLocales(site.manifest) ?? undefined;
115
145
  const resolvedThemes = resolveSiteThemes(site.manifest);
116
- if (locale && resolvedLocales) {
117
- const localeEntry = site.fragmentLocales.get(fragmentName);
118
- if (localeEntry) {
119
- const available = new Set(localeEntry.locales.keys());
120
- const bestLocale = resolveLocaleFallback(locale, available, resolvedLocales);
121
- const localeVariant = localeEntry.locales.get(bestLocale);
122
- if (localeVariant)
123
- fragment = localeVariant;
124
- }
125
- }
126
- if (!fragment) {
146
+ // Look up the fragment, following aliasOf when archived (Q2 F1 lock).
147
+ const lookup = (name) => lookupFragmentForLocale(name, { site, locale, resolvedLocales });
148
+ const resolution = resolveFragmentArchiveAlias(fragmentName, lookup, `@${fragmentName}`);
149
+ if (!resolution) {
127
150
  const available = [...site.fragments.keys()];
128
151
  throw new Error(`Fragment "${fragmentName}" not found.\n` +
129
152
  ` Available fragments: ${available.length > 0 ? available.join(', ') : '(none)'}`);
130
153
  }
154
+ const fragment = resolution.manifest;
131
155
  const templatesDir = site.templatesDir;
132
156
  const ctx = {
133
157
  site,
134
158
  templatesDir,
135
159
  visited: new Set(),
136
- path: ['', `@${fragmentName}`],
160
+ path: ['', `@${resolution.resolvedName}`],
137
161
  locale,
138
162
  theme,
139
163
  resolvedLocales,
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Archive marker grammar + parser for static + dynamic targets per
3
+ * design-soft-delete.md Q10 lock.
4
+ *
5
+ * Static (and dynamic) targets emit HTML with the marker as the first
6
+ * line of the file:
7
+ *
8
+ * <!-- gazetta:archived alias=welcome -->
9
+ * <!-- gazetta:archived gone -->
10
+ *
11
+ * Worker reads the first ~200 bytes of `pages/{name}/index.html`,
12
+ * parses the marker, and decides:
13
+ *
14
+ * - alias=X → 301 redirect to deriveRoute(X)
15
+ * - gone → 410 Gone
16
+ * - no marker → serve the HTML as-is (live page)
17
+ *
18
+ * Constraints (locked):
19
+ * - Marker MUST be the first line (worker reads only the prefix)
20
+ * - Single-line; no nested HTML; no whitespace games
21
+ * - `<bare-name>` is a name (page or fragment), not a route — the
22
+ * worker calls `deriveRoute()` to resolve to a URL when needed
23
+ *
24
+ * SRP: this module is the marker grammar. Emit + parse round-trip.
25
+ * Publish-rendered.ts emits via `archiveMarker()`; workers parse via
26
+ * `parseArchiveMarker()`. Workers never emit; publish never parses.
27
+ */
28
+ /** Result of parsing the marker — null when no marker is present. */
29
+ export type ArchiveMarker = {
30
+ kind: 'alias';
31
+ target: string;
32
+ } | {
33
+ kind: 'gone';
34
+ };
35
+ /**
36
+ * Emit a marker line for a page/fragment that's archived. Returns the
37
+ * full marker line including trailing newline so callers concatenate
38
+ * it directly with the rendered HTML.
39
+ *
40
+ * For aliased archives: `archiveMarker({ kind: 'alias', target: 'welcome' })`
41
+ * For pure soft-delete: `archiveMarker({ kind: 'gone' })`
42
+ *
43
+ * Validates the alias target is non-empty and contains no whitespace
44
+ * (the regex grammar requires `\S+`); throws on bad input rather than
45
+ * silently emitting an unparseable marker.
46
+ */
47
+ export declare function archiveMarker(marker: ArchiveMarker): string;
48
+ /**
49
+ * Parse an archive marker from the leading bytes of an HTML file.
50
+ *
51
+ * Accepts either a `Uint8Array` (worker reading bytes from storage)
52
+ * or a `string` (testing convenience).
53
+ *
54
+ * Returns the parsed marker, or null when no marker is present (the
55
+ * normal case — live pages don't carry markers).
56
+ *
57
+ * Reads only the first MARKER_PREFIX_BYTES bytes; longer input is
58
+ * truncated. The marker MUST be at byte 0; markers in the middle of
59
+ * a file are not detected (per the locked grammar — first-line only).
60
+ */
61
+ export declare function parseArchiveMarker(input: Uint8Array | string): ArchiveMarker | null;
62
+ //# sourceMappingURL=archive-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-marker.d.ts","sourceRoot":"","sources":["../../src/runtime/archive-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,qEAAqE;AACrE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAQhF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAU3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,IAAI,CASnF"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Archive marker grammar + parser for static + dynamic targets per
3
+ * design-soft-delete.md Q10 lock.
4
+ *
5
+ * Static (and dynamic) targets emit HTML with the marker as the first
6
+ * line of the file:
7
+ *
8
+ * <!-- gazetta:archived alias=welcome -->
9
+ * <!-- gazetta:archived gone -->
10
+ *
11
+ * Worker reads the first ~200 bytes of `pages/{name}/index.html`,
12
+ * parses the marker, and decides:
13
+ *
14
+ * - alias=X → 301 redirect to deriveRoute(X)
15
+ * - gone → 410 Gone
16
+ * - no marker → serve the HTML as-is (live page)
17
+ *
18
+ * Constraints (locked):
19
+ * - Marker MUST be the first line (worker reads only the prefix)
20
+ * - Single-line; no nested HTML; no whitespace games
21
+ * - `<bare-name>` is a name (page or fragment), not a route — the
22
+ * worker calls `deriveRoute()` to resolve to a URL when needed
23
+ *
24
+ * SRP: this module is the marker grammar. Emit + parse round-trip.
25
+ * Publish-rendered.ts emits via `archiveMarker()`; workers parse via
26
+ * `parseArchiveMarker()`. Workers never emit; publish never parses.
27
+ */
28
+ /** Number of leading bytes to inspect for a marker. */
29
+ const MARKER_PREFIX_BYTES = 200;
30
+ /** Regex anchors at start of input; closed-form grammar. */
31
+ const MARKER_RE = /^<!-- gazetta:archived (alias=([\S]+)|gone) -->/;
32
+ /**
33
+ * Emit a marker line for a page/fragment that's archived. Returns the
34
+ * full marker line including trailing newline so callers concatenate
35
+ * it directly with the rendered HTML.
36
+ *
37
+ * For aliased archives: `archiveMarker({ kind: 'alias', target: 'welcome' })`
38
+ * For pure soft-delete: `archiveMarker({ kind: 'gone' })`
39
+ *
40
+ * Validates the alias target is non-empty and contains no whitespace
41
+ * (the regex grammar requires `\S+`); throws on bad input rather than
42
+ * silently emitting an unparseable marker.
43
+ */
44
+ export function archiveMarker(marker) {
45
+ if (marker.kind === 'alias') {
46
+ if (!marker.target || /\s/.test(marker.target)) {
47
+ throw new Error(`Invalid archive alias target ${JSON.stringify(marker.target)} — must be a non-empty string with no whitespace.`);
48
+ }
49
+ return `<!-- gazetta:archived alias=${marker.target} -->\n`;
50
+ }
51
+ return '<!-- gazetta:archived gone -->\n';
52
+ }
53
+ /**
54
+ * Parse an archive marker from the leading bytes of an HTML file.
55
+ *
56
+ * Accepts either a `Uint8Array` (worker reading bytes from storage)
57
+ * or a `string` (testing convenience).
58
+ *
59
+ * Returns the parsed marker, or null when no marker is present (the
60
+ * normal case — live pages don't carry markers).
61
+ *
62
+ * Reads only the first MARKER_PREFIX_BYTES bytes; longer input is
63
+ * truncated. The marker MUST be at byte 0; markers in the middle of
64
+ * a file are not detected (per the locked grammar — first-line only).
65
+ */
66
+ export function parseArchiveMarker(input) {
67
+ const prefix = typeof input === 'string' ? input.slice(0, MARKER_PREFIX_BYTES) : decodePrefix(input);
68
+ const match = MARKER_RE.exec(prefix);
69
+ if (!match)
70
+ return null;
71
+ if (match[1] === 'gone')
72
+ return { kind: 'gone' };
73
+ // match[1] starts with 'alias=', match[2] is the bare target name
74
+ const target = match[2];
75
+ if (!target)
76
+ return null;
77
+ return { kind: 'alias', target };
78
+ }
79
+ /**
80
+ * Decode the first MARKER_PREFIX_BYTES bytes as UTF-8. Bounded read;
81
+ * the worker may pass a longer Uint8Array, we slice. Returns the
82
+ * decoded string (or as much of it as fits in the prefix budget).
83
+ */
84
+ function decodePrefix(bytes) {
85
+ const slice = bytes.byteLength > MARKER_PREFIX_BYTES ? bytes.subarray(0, MARKER_PREFIX_BYTES) : bytes;
86
+ return new TextDecoder('utf-8', { fatal: false }).decode(slice);
87
+ }
88
+ //# sourceMappingURL=archive-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-marker.js","sourceRoot":"","sources":["../../src/runtime/archive-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,uDAAuD;AACvD,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAE/B,4DAA4D;AAC5D,MAAM,SAAS,GAAG,iDAAiD,CAAA;AAEnE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,mDAAmD,CACjH,CAAA;QACH,CAAC;QACD,OAAO,+BAA+B,MAAM,CAAC,MAAM,QAAQ,CAAA;IAC7D,CAAC;IACD,OAAO,kCAAkC,CAAA;AAC3C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA0B;IAC3D,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IACpG,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAChD,kEAAkE;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACvB,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAClC,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAiB;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrG,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Boot-time capability-gap inspection — surface #1 of the four-point
3
+ * capability-gap UX pattern.
4
+ *
5
+ * Per `design-soft-delete.md` Q10 lock + `feature-design-process.md`
6
+ * non-foundational discipline: at admin boot, walk every configured
7
+ * target and warn about runtime capability gaps. Non-blocking — admin
8
+ * starts. The warning gives operators an early signal during deploy
9
+ * so misconfiguration surfaces before content authors hit the gap at
10
+ * publish time.
11
+ *
12
+ * Pairs with:
13
+ * - Surface #2 (author modal): consumes `/api/targets` extended
14
+ * payload with capability info (Cut 10 wires the UI)
15
+ * - Surface #3 (validator scanner): `archive-not-supported-on-target`
16
+ * P4 validator from Cut 8 reports per-archived-item gaps
17
+ * - Surface #4 (pre-publish gate): `/api/publish/audit` includes
18
+ * per-target capability info when archived items are in scope
19
+ *
20
+ * # SOLID
21
+ *
22
+ * - SRP: this module owns ONE concern — emit warnings at boot.
23
+ * Doesn't inspect targets itself (delegates to runtime-capabilities);
24
+ * doesn't render the warnings (consumes the existing console.warn
25
+ * pattern).
26
+ * - DIP: depends on the `inspectTarget` predicate, not on target-config
27
+ * parsing details.
28
+ */
29
+ import type { SiteManifest } from '../types.js';
30
+ /**
31
+ * Walk the site's targets at boot; emit a warning per target that
32
+ * has any capability gap. Logs are operator-facing — once
33
+ * `design-logging.md`'s structured logger ships, replace `console.warn`
34
+ * with `log.warn({ module: 'admin-api.capability-gap', ... })`.
35
+ *
36
+ * Idempotent: calling twice produces the same warnings. The caller
37
+ * (admin-api boot path) calls once.
38
+ *
39
+ * @returns the count of targets with gaps — useful for tests.
40
+ */
41
+ export declare function warnOnCapabilityGaps(manifest: SiteManifest): number;
42
+ //# sourceMappingURL=capability-gap-warnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-gap-warnings.d.ts","sourceRoot":"","sources":["../../src/runtime/capability-gap-warnings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,aAAa,CAAA;AAG7D;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAenE"}
@@ -0,0 +1,28 @@
1
+ import { inspectTarget } from './runtime-capabilities.js';
2
+ /**
3
+ * Walk the site's targets at boot; emit a warning per target that
4
+ * has any capability gap. Logs are operator-facing — once
5
+ * `design-logging.md`'s structured logger ships, replace `console.warn`
6
+ * with `log.warn({ module: 'admin-api.capability-gap', ... })`.
7
+ *
8
+ * Idempotent: calling twice produces the same warnings. The caller
9
+ * (admin-api boot path) calls once.
10
+ *
11
+ * @returns the count of targets with gaps — useful for tests.
12
+ */
13
+ export function warnOnCapabilityGaps(manifest) {
14
+ const targets = (manifest.targets ?? {});
15
+ let count = 0;
16
+ for (const [name, target] of Object.entries(targets)) {
17
+ const inspection = inspectTarget(target);
18
+ if (inspection.gaps.length === 0)
19
+ continue;
20
+ count++;
21
+ const reasons = inspection.gaps.map(g => `${g.capability}: ${g.reason}`).join('; ');
22
+ console.warn(` Warning: target "${name}" has runtime capability gaps. ${reasons}. ` +
23
+ 'Archive operations on this target may not emit 301/410 redirects. ' +
24
+ 'See https://gazetta.studio/docs/runtime-capabilities for resolution paths.');
25
+ }
26
+ return count;
27
+ }
28
+ //# sourceMappingURL=capability-gap-warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-gap-warnings.js","sourceRoot":"","sources":["../../src/runtime/capability-gap-warnings.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAiC,CAAA;IACxE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAC1C,KAAK,EAAE,CAAA;QACP,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnF,OAAO,CAAC,IAAI,CACV,sBAAsB,IAAI,kCAAkC,OAAO,IAAI;YACrE,oEAAoE;YACpE,4EAA4E,CAC/E,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Host-format redirect manifest emit per design-soft-delete.md Q10.
3
+ *
4
+ * Plain-static targets (no worker) can't read the per-page HTML
5
+ * marker. They get a `_redirects` (or equivalent) file at the target
6
+ * root that the host runtime reads. Cloudflare Pages and Netlify
7
+ * both honor this convention; their syntax is identical for the
8
+ * patterns we emit.
9
+ *
10
+ * Worker-served target types DON'T need this — the worker reads the
11
+ * HTML marker directly per request.
12
+ *
13
+ * Pure functions: takes the archive summary list, returns the file
14
+ * content as a string. Caller (publish.ts) writes to storage.
15
+ *
16
+ * SRP: this module owns the wire format. Walking the source for
17
+ * archived pages is the caller's job. Adding a new host format
18
+ * (e.g., a future Vercel-specific dialect) extends the file with a
19
+ * new emit function and the type union — existing emitters
20
+ * untouched.
21
+ */
22
+ import type { RedirectsFormat } from '../types.js';
23
+ /**
24
+ * Summary of one archived page contributing to the redirects file.
25
+ *
26
+ * `from`: source route (e.g. `/landing`). Includes leading slash;
27
+ * empty path is the homepage `/`.
28
+ * `to`: alias target route — only present when the archive has
29
+ * `aliasOf` set. When absent, this entry is a 410 Gone.
30
+ */
31
+ export interface ArchiveSummary {
32
+ from: string;
33
+ to?: string;
34
+ }
35
+ /**
36
+ * Emit the `_redirects` file body. Cloudflare and Netlify share the
37
+ * same syntax for the patterns we emit:
38
+ *
39
+ * /from /to 301 — permanent alias redirect
40
+ * /from / 410 — soft-delete (gone)
41
+ *
42
+ * Cloudflare and Netlify both default to 301 when status is omitted,
43
+ * but we emit it explicitly for forensic clarity. The `410` row uses
44
+ * `/` as the destination because both hosts require a destination
45
+ * column even for status-only rules; both will apply the status
46
+ * regardless of where the destination points.
47
+ *
48
+ * Sorted by `from` so the output is deterministic across publishes.
49
+ * Determinism matters because the file is content-addressed
50
+ * downstream (host's CDN may cache it; same input = same output =
51
+ * cache hit on republish without changes).
52
+ */
53
+ export declare function emitCloudflareRedirects(archives: ReadonlyArray<ArchiveSummary>): string;
54
+ /**
55
+ * Netlify uses the same `_redirects` grammar as Cloudflare for the
56
+ * patterns we emit. Kept as a separate function so that future
57
+ * Netlify-specific extensions (e.g., country-aware redirects via
58
+ * `Country` headers) land here without forking Cloudflare.
59
+ */
60
+ export declare function emitNetlifyRedirects(archives: ReadonlyArray<ArchiveSummary>): string;
61
+ /**
62
+ * Structured JSON for custom host integrations. Operators with
63
+ * non-Cloudflare/Netlify hosting wire their own glue (Caddy
64
+ * `redir` directives, nginx rules, AWS CloudFront functions,
65
+ * etc.) and consume this file at deploy time.
66
+ *
67
+ * Shape:
68
+ * {
69
+ * redirects: [{ from, to, status: 301 }, ...],
70
+ * gone: [{ path, status: 410 }, ...]
71
+ * }
72
+ *
73
+ * Same sort order as Cloudflare/Netlify emit (alphabetical by
74
+ * source path) so output is deterministic.
75
+ */
76
+ export declare function emitJsonRedirects(archives: ReadonlyArray<ArchiveSummary>): string;
77
+ /**
78
+ * The destination filename per format. Cloudflare and Netlify both
79
+ * use `_redirects` at the site root; the JSON form lives at
80
+ * `redirects.json`.
81
+ */
82
+ export declare function redirectsFilename(format: Exclude<RedirectsFormat, 'none'>): string;
83
+ /**
84
+ * Emit the file body for the given format. Returns null when the
85
+ * format is `'none'` — callers skip writing entirely. Returns empty
86
+ * string when there are no archives — caller decides whether to
87
+ * write an empty file or skip.
88
+ */
89
+ export declare function emitRedirects(format: RedirectsFormat, archives: ReadonlyArray<ArchiveSummary>): {
90
+ filename: string;
91
+ body: string;
92
+ } | null;
93
+ //# sourceMappingURL=redirects-emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirects-emit.d.ts","sourceRoot":"","sources":["../../src/runtime/redirects-emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM,CAKvF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM,CAEpF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM,CAKjF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,MAAM,CAQlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,GACtC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW3C"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Emit the `_redirects` file body. Cloudflare and Netlify share the
3
+ * same syntax for the patterns we emit:
4
+ *
5
+ * /from /to 301 — permanent alias redirect
6
+ * /from / 410 — soft-delete (gone)
7
+ *
8
+ * Cloudflare and Netlify both default to 301 when status is omitted,
9
+ * but we emit it explicitly for forensic clarity. The `410` row uses
10
+ * `/` as the destination because both hosts require a destination
11
+ * column even for status-only rules; both will apply the status
12
+ * regardless of where the destination points.
13
+ *
14
+ * Sorted by `from` so the output is deterministic across publishes.
15
+ * Determinism matters because the file is content-addressed
16
+ * downstream (host's CDN may cache it; same input = same output =
17
+ * cache hit on republish without changes).
18
+ */
19
+ export function emitCloudflareRedirects(archives) {
20
+ if (archives.length === 0)
21
+ return '';
22
+ const sorted = [...archives].sort((a, b) => a.from.localeCompare(b.from));
23
+ const lines = sorted.map(a => (a.to ? `${a.from} ${a.to} 301` : `${a.from} / 410`));
24
+ return lines.join('\n') + '\n';
25
+ }
26
+ /**
27
+ * Netlify uses the same `_redirects` grammar as Cloudflare for the
28
+ * patterns we emit. Kept as a separate function so that future
29
+ * Netlify-specific extensions (e.g., country-aware redirects via
30
+ * `Country` headers) land here without forking Cloudflare.
31
+ */
32
+ export function emitNetlifyRedirects(archives) {
33
+ return emitCloudflareRedirects(archives);
34
+ }
35
+ /**
36
+ * Structured JSON for custom host integrations. Operators with
37
+ * non-Cloudflare/Netlify hosting wire their own glue (Caddy
38
+ * `redir` directives, nginx rules, AWS CloudFront functions,
39
+ * etc.) and consume this file at deploy time.
40
+ *
41
+ * Shape:
42
+ * {
43
+ * redirects: [{ from, to, status: 301 }, ...],
44
+ * gone: [{ path, status: 410 }, ...]
45
+ * }
46
+ *
47
+ * Same sort order as Cloudflare/Netlify emit (alphabetical by
48
+ * source path) so output is deterministic.
49
+ */
50
+ export function emitJsonRedirects(archives) {
51
+ const sorted = [...archives].sort((a, b) => a.from.localeCompare(b.from));
52
+ const redirects = sorted.filter(a => a.to !== undefined).map(a => ({ from: a.from, to: a.to, status: 301 }));
53
+ const gone = sorted.filter(a => a.to === undefined).map(a => ({ path: a.from, status: 410 }));
54
+ return JSON.stringify({ redirects, gone }, null, 2) + '\n';
55
+ }
56
+ /**
57
+ * The destination filename per format. Cloudflare and Netlify both
58
+ * use `_redirects` at the site root; the JSON form lives at
59
+ * `redirects.json`.
60
+ */
61
+ export function redirectsFilename(format) {
62
+ switch (format) {
63
+ case 'cloudflare':
64
+ case 'netlify':
65
+ return '_redirects';
66
+ case 'json':
67
+ return 'redirects.json';
68
+ }
69
+ }
70
+ /**
71
+ * Emit the file body for the given format. Returns null when the
72
+ * format is `'none'` — callers skip writing entirely. Returns empty
73
+ * string when there are no archives — caller decides whether to
74
+ * write an empty file or skip.
75
+ */
76
+ export function emitRedirects(format, archives) {
77
+ if (format === 'none')
78
+ return null;
79
+ const filename = redirectsFilename(format);
80
+ switch (format) {
81
+ case 'cloudflare':
82
+ return { filename, body: emitCloudflareRedirects(archives) };
83
+ case 'netlify':
84
+ return { filename, body: emitNetlifyRedirects(archives) };
85
+ case 'json':
86
+ return { filename, body: emitJsonRedirects(archives) };
87
+ }
88
+ }
89
+ //# sourceMappingURL=redirects-emit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirects-emit.js","sourceRoot":"","sources":["../../src/runtime/redirects-emit.ts"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAuC;IAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAA;IACvF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAuC;IAC1E,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAuC;IACvE,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC5G,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC7F,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwC;IACxE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAA;QACrB,KAAK,MAAM;YACT,OAAO,gBAAgB,CAAA;IAC3B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EACvB,QAAuC;IAEvC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IAClC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC1C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAA;QAC9D,KAAK,SAAS;YACZ,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAA;QAC3D,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC1D,CAAC;AACH,CAAC"}