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/manifest.js CHANGED
@@ -1,19 +1,3 @@
1
- import yaml from 'js-yaml';
2
- function parseYaml(content, filePath) {
3
- try {
4
- const parsed = yaml.load(content);
5
- if (!parsed || typeof parsed !== 'object') {
6
- throw new Error(`Expected a YAML object in ${filePath}, got ${typeof parsed}`);
7
- }
8
- return parsed;
9
- }
10
- catch (err) {
11
- if (err instanceof yaml.YAMLException) {
12
- throw new Error(`YAML parse error in ${filePath}: ${err.message}`);
13
- }
14
- throw err;
15
- }
16
- }
17
1
  function parseJson(content, filePath) {
18
2
  try {
19
3
  const parsed = JSON.parse(content);
@@ -29,6 +13,38 @@ function parseJson(content, filePath) {
29
13
  throw err;
30
14
  }
31
15
  }
16
+ /**
17
+ * Pick the archive fields off a parsed manifest, projecting only the
18
+ * locked four (per design-soft-delete.md Q1). Stale or unknown fields
19
+ * are dropped — the manifest projection layer is the boundary that
20
+ * defines which manifest properties Gazetta consumes.
21
+ */
22
+ function parseArchiveFields(raw) {
23
+ const out = {};
24
+ if (typeof raw.archived === 'boolean')
25
+ out.archived = raw.archived;
26
+ if (typeof raw.archivedAt === 'string')
27
+ out.archivedAt = raw.archivedAt;
28
+ if (typeof raw.archivedBy === 'string')
29
+ out.archivedBy = raw.archivedBy;
30
+ if (typeof raw.aliasOf === 'string')
31
+ out.aliasOf = raw.aliasOf;
32
+ return out;
33
+ }
34
+ /**
35
+ * Forward-compat passthrough for review-workflow's `reviewState`
36
+ * field (per design-soft-delete.md Cut 14). The review-workflow
37
+ * foundation will lock the field's shape when it ships; until then,
38
+ * the parser passes through any string value so archive-time logic
39
+ * (auto-withdraw on pending-review, restore-to-draft on unarchive)
40
+ * has the field to read. Spread directly into the parsed object so
41
+ * it's `reviewState?: string | undefined`.
42
+ */
43
+ function parseReviewFields(raw) {
44
+ if (typeof raw.reviewState === 'string')
45
+ return { reviewState: raw.reviewState };
46
+ return {};
47
+ }
32
48
  function parseComponents(raw) {
33
49
  if (!Array.isArray(raw))
34
50
  return undefined;
@@ -37,43 +53,22 @@ function parseComponents(raw) {
37
53
  return entry;
38
54
  if (typeof entry === 'object' && entry !== null && typeof entry.template === 'string') {
39
55
  const comp = entry;
40
- return {
56
+ const parsed = {
41
57
  name: comp.name,
42
58
  template: comp.template,
43
59
  content: comp.content,
44
60
  components: parseComponents(comp.components),
45
61
  };
62
+ // Preserve component IDs (per design-collaboration.md Cut 1).
63
+ // IDs are written by the save handlers and must round-trip
64
+ // through read so inline anchors stay valid.
65
+ if (typeof comp.id === 'string')
66
+ parsed.id = comp.id;
67
+ return parsed;
46
68
  }
47
69
  return entry;
48
70
  });
49
71
  }
50
- export async function parseSiteManifest(storage, filePath) {
51
- const raw = parseYaml(await storage.readFile(filePath), filePath);
52
- if (typeof raw.name !== 'string') {
53
- throw new Error(`Invalid site.yaml at ${filePath}: missing required "name" field`);
54
- }
55
- return {
56
- name: raw.name,
57
- version: raw.version,
58
- locale: raw.locale,
59
- locales: parseLocalesConfig(raw.locales),
60
- defaultOgImage: raw.defaultOgImage,
61
- systemPages: Array.isArray(raw.systemPages) ? raw.systemPages : undefined,
62
- };
63
- }
64
- function parseLocalesConfig(raw) {
65
- if (!raw || typeof raw !== 'object')
66
- return undefined;
67
- const obj = raw;
68
- if (!Array.isArray(obj.supported) || obj.supported.length === 0)
69
- return undefined;
70
- return {
71
- supported: obj.supported,
72
- fallbacks: obj.fallbacks,
73
- defaultPrefix: typeof obj.defaultPrefix === 'boolean' ? obj.defaultPrefix : undefined,
74
- detection: typeof obj.detection === 'boolean' ? obj.detection : undefined,
75
- };
76
- }
77
72
  export async function parsePageManifest(storage, filePath) {
78
73
  const raw = parseJson(await storage.readFile(filePath), filePath);
79
74
  if (typeof raw.template !== 'string') {
@@ -86,6 +81,8 @@ export async function parsePageManifest(storage, filePath) {
86
81
  components: parseComponents(raw.components),
87
82
  metadata: raw.metadata,
88
83
  cache: raw.cache,
84
+ ...parseArchiveFields(raw),
85
+ ...parseReviewFields(raw),
89
86
  };
90
87
  }
91
88
  export async function parseFragmentManifest(storage, filePath) {
@@ -97,6 +94,8 @@ export async function parseFragmentManifest(storage, filePath) {
97
94
  template: raw.template,
98
95
  content: raw.content,
99
96
  components: parseComponents(raw.components),
97
+ ...parseArchiveFields(raw),
98
+ ...parseReviewFields(raw),
100
99
  };
101
100
  }
102
101
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Driven by `write-file-atomic@8`'s engines requirement. */
2
+ export declare const REQUIRED_NODE_FLOOR = ">=22.22.2";
3
+ //# sourceMappingURL=node-floor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-floor.d.ts","sourceRoot":"","sources":["../src/node-floor.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Driven by `write-file-atomic@8`'s engines requirement. */
2
+ export const REQUIRED_NODE_FLOOR = '>=22.22.2';
3
+ //# sourceMappingURL=node-floor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-floor.js","sourceRoot":"","sources":["../src/node-floor.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAA"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Page Create — POST handler logic for `/api/pages`.
3
+ *
4
+ * Different from `savePage`:
5
+ * - No etag precheck (nothing to compare against; new page)
6
+ * - No locale variant lookup (creates the default Page Manifest)
7
+ * - Name conflict resolution per `design-soft-delete.md` Q5 I3:
8
+ * - Live name in use → typed `LIVE_CONFLICT` outcome
9
+ * - Archived name in use, no `?onConflict` flag → typed
10
+ * `ARCHIVED_CONFLICT` outcome with archive details
11
+ * - Archived name in use, with mode → delegate to
12
+ * `resolveArchivedNameConflict` (restore / replace / moveAside)
13
+ * - Folder creation (`storage.mkdir(pageDir)`)
14
+ * - Initial sidecar wiring (`rebuildAssetRefs` /
15
+ * `rebuildFragmentDeps` against `null` → empty manifest)
16
+ * - Cache invalidation (`pages:`)
17
+ *
18
+ * Same as `savePage` for the post-resolution-or-create write itself —
19
+ * eventually creates pass through `saveManifestCore` once the
20
+ * "before is null" path lands. v1 keeps the create-time path
21
+ * separate because it doesn't need validators / hooks / scanner /
22
+ * audit-on-failure (a new empty page has no validation surface to
23
+ * exercise yet).
24
+ *
25
+ * Per Q6 lock: separate `createPage` instead of folding into
26
+ * `savePage` — Create has its own pre-write phase (conflict prompt,
27
+ * mkdir, route derive) that update doesn't. Branchy A would merge
28
+ * two distinct intents.
29
+ */
30
+ import { type ArchivedNameConflictResult } from '../admin-api/archived-name-conflict.js';
31
+ import type { SourceContext } from '../admin-api/source-context.js';
32
+ import type { SaveAuditRecorder, SavePrincipal } from '../manifest-save.js';
33
+ /**
34
+ * Inputs to `createPage`. The body's already been Zod-validated by
35
+ * the route — caller passes the parsed shape.
36
+ */
37
+ export interface CreatePageInput {
38
+ /** Page name (folder name under `pages/`). */
39
+ readonly name: string;
40
+ /** Template the new page uses. */
41
+ readonly template: string;
42
+ /** Optional initial content; defaults to `{ title: name }` when absent. */
43
+ readonly content?: Record<string, unknown>;
44
+ /**
45
+ * `?onConflict` query param: `'restore' | 'replace' | 'moveAside'`
46
+ * or undefined. When undefined and an archived name conflict is
47
+ * detected, returns `ARCHIVED_CONFLICT` so the route prompts the
48
+ * client. When set, delegates to `resolveArchivedNameConflict`.
49
+ */
50
+ readonly onConflict?: string;
51
+ /** Source wiring + admin-api SourceContext (for archived-conflict resolver). */
52
+ readonly source: SourceContext;
53
+ /** Authenticated principal driving this create. */
54
+ readonly principal: SavePrincipal;
55
+ /** Audit recorder bound to the request. */
56
+ readonly audit: SaveAuditRecorder;
57
+ }
58
+ /**
59
+ * Successful create — fresh page or restored-from-archive.
60
+ * `resolution` is set when the create resolved an archive conflict;
61
+ * absent for plain creates.
62
+ */
63
+ export interface CreatePageOk {
64
+ readonly ok: true;
65
+ readonly name: string;
66
+ readonly resolution?: ArchivedNameConflictResult['kind'];
67
+ }
68
+ /** Live (non-archived) page already exists at `name`. */
69
+ export interface CreatePageLiveConflict {
70
+ readonly ok: false;
71
+ readonly code: 'LIVE_CONFLICT';
72
+ readonly name: string;
73
+ }
74
+ /**
75
+ * Archived page exists at `name`. Caller hadn't sent `?onConflict`
76
+ * → return the archive details so the client can prompt
77
+ * Restore / Replace / Move-aside per Soft-Delete Q5 I3.
78
+ */
79
+ export interface CreatePageArchivedConflict {
80
+ readonly ok: false;
81
+ readonly code: 'ARCHIVED_CONFLICT';
82
+ readonly archive: {
83
+ readonly kind: 'page';
84
+ readonly name: string;
85
+ readonly archivedAt?: string;
86
+ readonly archivedBy?: string;
87
+ readonly aliasOf?: string;
88
+ };
89
+ }
90
+ /** Caller sent `?onConflict=<unknown>`. Routes project to 400. */
91
+ export interface CreatePageInvalidMode {
92
+ readonly ok: false;
93
+ readonly code: 'INVALID_CONFLICT_MODE';
94
+ readonly mode: string;
95
+ }
96
+ export type CreatePageResult = CreatePageOk | CreatePageLiveConflict | CreatePageArchivedConflict | CreatePageInvalidMode;
97
+ /**
98
+ * Create a Page. Wraps the conflict-resolution decision tree + the
99
+ * fresh-create write path. Routes project the typed `CreatePageResult`
100
+ * to HTTP (200 / 400 / 409).
101
+ */
102
+ export declare function createPage(input: CreatePageInput): Promise<CreatePageResult>;
103
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/pages/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAKnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAE3E;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAA;CACzD;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF;AAED,kEAAkE;AAClE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,sBAAsB,GACtB,0BAA0B,GAC1B,qBAAqB,CAAA;AAEzB;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmFlF"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Page Create — POST handler logic for `/api/pages`.
3
+ *
4
+ * Different from `savePage`:
5
+ * - No etag precheck (nothing to compare against; new page)
6
+ * - No locale variant lookup (creates the default Page Manifest)
7
+ * - Name conflict resolution per `design-soft-delete.md` Q5 I3:
8
+ * - Live name in use → typed `LIVE_CONFLICT` outcome
9
+ * - Archived name in use, no `?onConflict` flag → typed
10
+ * `ARCHIVED_CONFLICT` outcome with archive details
11
+ * - Archived name in use, with mode → delegate to
12
+ * `resolveArchivedNameConflict` (restore / replace / moveAside)
13
+ * - Folder creation (`storage.mkdir(pageDir)`)
14
+ * - Initial sidecar wiring (`rebuildAssetRefs` /
15
+ * `rebuildFragmentDeps` against `null` → empty manifest)
16
+ * - Cache invalidation (`pages:`)
17
+ *
18
+ * Same as `savePage` for the post-resolution-or-create write itself —
19
+ * eventually creates pass through `saveManifestCore` once the
20
+ * "before is null" path lands. v1 keeps the create-time path
21
+ * separate because it doesn't need validators / hooks / scanner /
22
+ * audit-on-failure (a new empty page has no validation surface to
23
+ * exercise yet).
24
+ *
25
+ * Per Q6 lock: separate `createPage` instead of folding into
26
+ * `savePage` — Create has its own pre-write phase (conflict prompt,
27
+ * mkdir, route derive) that update doesn't. Branchy A would merge
28
+ * two distinct intents.
29
+ */
30
+ import { join } from 'node:path';
31
+ import { resolveArchivedNameConflict, } from '../admin-api/archived-name-conflict.js';
32
+ import { rebuildAssetRefs } from '../assets/asset-deps.js';
33
+ import { rebuildFragmentDeps } from '../fragment-deps.js';
34
+ import { loadSiteFromSource } from '../admin-api/source-context.js';
35
+ /**
36
+ * Create a Page. Wraps the conflict-resolution decision tree + the
37
+ * fresh-create write path. Routes project the typed `CreatePageResult`
38
+ * to HTTP (200 / 400 / 409).
39
+ */
40
+ export async function createPage(input) {
41
+ const { source, name, template, content, onConflict, principal, audit } = input;
42
+ const { storage } = source;
43
+ const pageDir = source.contentRoot.path('pages', name);
44
+ const manifestPath = join(pageDir, 'page.json');
45
+ // Conflict path — manifest already exists at the target name.
46
+ if (await storage.exists(manifestPath)) {
47
+ const site = await loadSiteFromSource(source);
48
+ const existing = site.pages.get(name);
49
+ const isArchived = existing?.archived === true;
50
+ if (!isArchived) {
51
+ return { ok: false, code: 'LIVE_CONFLICT', name };
52
+ }
53
+ // Archived conflict, no resolution flag → return structured
54
+ // body so the client can prompt the author per Q5 I3.
55
+ if (!onConflict) {
56
+ return {
57
+ ok: false,
58
+ code: 'ARCHIVED_CONFLICT',
59
+ archive: {
60
+ kind: 'page',
61
+ name,
62
+ ...(existing?.archivedAt ? { archivedAt: existing.archivedAt } : {}),
63
+ ...(existing?.archivedBy ? { archivedBy: existing.archivedBy } : {}),
64
+ ...(existing?.aliasOf ? { aliasOf: existing.aliasOf } : {}),
65
+ },
66
+ };
67
+ }
68
+ // Archived conflict + mode → delegate to the resolver.
69
+ const result = await resolveArchivedNameConflict({
70
+ source,
71
+ kind: 'page',
72
+ name,
73
+ existing: existing,
74
+ mode: onConflict,
75
+ newTemplate: template,
76
+ newContent: content,
77
+ actorId: principal.id,
78
+ });
79
+ if (result.kind === 'invalid-mode') {
80
+ return { ok: false, code: 'INVALID_CONFLICT_MODE', mode: onConflict };
81
+ }
82
+ // Audit one event per logical mode — mirror existing route shape.
83
+ const action = result.kind === 'restored' ? 'unarchive' : result.kind === 'replaced' ? 'archive' : 'rename';
84
+ await audit.record({
85
+ // The audit recorder's typed shape limits action to save-flow values;
86
+ // the resolver's audit events use the soft-delete vocabulary. Cast
87
+ // through `unknown` keeps the recorder shape narrow without forcing a
88
+ // wider union into the save pipeline's contract.
89
+ action: action,
90
+ outcome: 'success',
91
+ scope: { kind: 'page', name },
92
+ metadata: { onConflict },
93
+ });
94
+ await source.cache.invalidatePrefix('pages:');
95
+ return { ok: true, name, resolution: result.kind };
96
+ }
97
+ // Fresh create path — no existing manifest at the target name.
98
+ await storage.mkdir(pageDir);
99
+ const manifest = {
100
+ template,
101
+ content: content ?? { title: name },
102
+ components: [],
103
+ };
104
+ await storage.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
105
+ // Sidecar wiring — fresh manifest has empty components[] so the
106
+ // diff against null is mostly a no-op today; wires the dep tracking
107
+ // for the moment templates ship initial content with `_asset` or
108
+ // `@fragment` refs.
109
+ const item = { source: 'page', name };
110
+ await Promise.all([
111
+ rebuildAssetRefs(source.contentRoot, item, null, manifest),
112
+ rebuildFragmentDeps(source.contentRoot, item, null, manifest),
113
+ ]);
114
+ await source.cache.invalidatePrefix('pages:');
115
+ return { ok: true, name };
116
+ }
117
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/pages/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Page Publish — kind-specific wrapper around `publishItemCore`.
3
+ *
4
+ * Owns the bits unique to Page publishes:
5
+ * - Render-mode resolution from target.type + archive state:
6
+ * - archived → 'archive-marker' regardless of target type
7
+ * - target.type === 'esi' → 'page-rendered' (ESI placeholders)
8
+ * - target.type === 'static' → 'page-static' (full-bake)
9
+ * - target.type === 'dynamic' → 'page-static' (static fallback;
10
+ * dynamic origin handles per-request render)
11
+ * - Page-cache config flow-through (target → page → spine renderer
12
+ * reads it for the cache-control comment)
13
+ *
14
+ * Everything downstream — archive precheck, render dispatch, storage
15
+ * I/O, sidecar writes, cleanup — is `publishItemCore`'s spine.
16
+ *
17
+ * Per Q3 lock: two fns + shared core. The 5 page-vs-fragment diffs
18
+ * (mode resolution, page-cache, sidecar pub-state, etc.) live here in
19
+ * one file the reader can scan top-to-bottom.
20
+ */
21
+ import { type PublishItemResult, type PublishRenderMode, type PublishTarget } from '../publish-item.js';
22
+ import type { ContentRoot } from '../content-root.js';
23
+ import type { Site } from '../site-loader.js';
24
+ /**
25
+ * Inputs to `publishPage`. Routes / CLI / orchestrator destructure
26
+ * their context and pass the parts the pipeline needs.
27
+ */
28
+ export interface PublishPageInput {
29
+ /** Page name (folder name under `pages/`). */
30
+ readonly name: string;
31
+ /** Locale variant being published; undefined = default locale. */
32
+ readonly locale?: string;
33
+ /** Loaded site (caller does `loadSite()` once for the publish run). */
34
+ readonly site: Site;
35
+ /** Source content root (typically not used by core today; reserved for hooks). */
36
+ readonly sourceRoot: ContentRoot;
37
+ /** Target context (storage, type, optional manifestHash, seo, cache). */
38
+ readonly target: PublishTarget;
39
+ }
40
+ /**
41
+ * Resolve the render mode for a page on a target. Pure dispatch
42
+ * function — exported for tests + per-kind reuse.
43
+ */
44
+ export declare function resolvePageRenderMode(page: {
45
+ archived?: boolean;
46
+ }, targetType: PublishTarget['type']): PublishRenderMode;
47
+ /**
48
+ * Publish a page to a target. Wraps `publishItemCore` with the
49
+ * page-specific mode resolution. Returns one of `PublishItemResult`'s
50
+ * typed variants — caller projects to wire shape (HTTP / SSE / CLI
51
+ * stdout / aggregate result).
52
+ *
53
+ * Caller responsibilities (handled by per-run orchestrator in Cut 5):
54
+ * - Capability check (`requireCapability('publish:...')`)
55
+ * - Template scan + loadSite (shared across run)
56
+ * - Per-target init + capability gates
57
+ */
58
+ export declare function publishPage(input: PublishPageInput): Promise<PublishItemResult>;
59
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/pages/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAmB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAE7C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;IAChC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5B,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,iBAAiB,CAcnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBrF"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Page Publish — kind-specific wrapper around `publishItemCore`.
3
+ *
4
+ * Owns the bits unique to Page publishes:
5
+ * - Render-mode resolution from target.type + archive state:
6
+ * - archived → 'archive-marker' regardless of target type
7
+ * - target.type === 'esi' → 'page-rendered' (ESI placeholders)
8
+ * - target.type === 'static' → 'page-static' (full-bake)
9
+ * - target.type === 'dynamic' → 'page-static' (static fallback;
10
+ * dynamic origin handles per-request render)
11
+ * - Page-cache config flow-through (target → page → spine renderer
12
+ * reads it for the cache-control comment)
13
+ *
14
+ * Everything downstream — archive precheck, render dispatch, storage
15
+ * I/O, sidecar writes, cleanup — is `publishItemCore`'s spine.
16
+ *
17
+ * Per Q3 lock: two fns + shared core. The 5 page-vs-fragment diffs
18
+ * (mode resolution, page-cache, sidecar pub-state, etc.) live here in
19
+ * one file the reader can scan top-to-bottom.
20
+ */
21
+ import { isArchived } from '../archive-helpers.js';
22
+ import { publishItemCore } from '../publish-item.js';
23
+ /**
24
+ * Resolve the render mode for a page on a target. Pure dispatch
25
+ * function — exported for tests + per-kind reuse.
26
+ */
27
+ export function resolvePageRenderMode(page, targetType) {
28
+ // Archive precheck wins regardless of target type. The spine's
29
+ // archive-marker renderer body-skips and emits the marker line so
30
+ // the worker reads first 200 bytes and short-circuits to 301/410
31
+ // per design-soft-delete.md Q10.
32
+ if (isArchived(page))
33
+ return 'archive-marker';
34
+ // ESI mode: pages compose ESI placeholders for `@fragment` refs
35
+ // at request time on a worker-served target.
36
+ if (targetType === 'esi')
37
+ return 'page-rendered';
38
+ // Static + dynamic targets bake the full page. Dynamic targets'
39
+ // origin handles per-request rendering for dynamic FRAGMENTS only;
40
+ // pages themselves still get a static fallback (per
41
+ // design-rendering.md compatibility matrix).
42
+ return 'page-static';
43
+ }
44
+ /**
45
+ * Publish a page to a target. Wraps `publishItemCore` with the
46
+ * page-specific mode resolution. Returns one of `PublishItemResult`'s
47
+ * typed variants — caller projects to wire shape (HTTP / SSE / CLI
48
+ * stdout / aggregate result).
49
+ *
50
+ * Caller responsibilities (handled by per-run orchestrator in Cut 5):
51
+ * - Capability check (`requireCapability('publish:...')`)
52
+ * - Template scan + loadSite (shared across run)
53
+ * - Per-target init + capability gates
54
+ */
55
+ export async function publishPage(input) {
56
+ const page = input.site.pages.get(input.name);
57
+ if (!page) {
58
+ return {
59
+ kind: 'page',
60
+ name: input.name,
61
+ locale: input.locale,
62
+ ok: false,
63
+ code: 'NOT_FOUND',
64
+ reason: `Page "${input.name}" not found in source`,
65
+ };
66
+ }
67
+ const mode = resolvePageRenderMode(page, input.target.type);
68
+ return publishItemCore({
69
+ kind: 'page',
70
+ name: input.name,
71
+ locale: input.locale,
72
+ mode,
73
+ site: input.site,
74
+ sourceRoot: input.sourceRoot,
75
+ target: input.target,
76
+ });
77
+ }
78
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/pages/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAsE,MAAM,oBAAoB,CAAA;AAqBxH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA4B,EAC5B,UAAiC;IAEjC,+DAA+D;IAC/D,kEAAkE;IAClE,iEAAiE;IACjE,iCAAiC;IACjC,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAC7C,gEAAgE;IAChE,6CAA6C;IAC7C,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,eAAe,CAAA;IAChD,gEAAgE;IAChE,mEAAmE;IACnE,oDAAoD;IACpD,6CAA6C;IAC7C,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,uBAAuB;SACnD,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,eAAe,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI;QACJ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Page Save — kind-specific wrapper around `saveManifestCore`.
3
+ *
4
+ * Owns the bits unique to Page Manifest writes:
5
+ * - Locale resolution (default vs `page.{locale}.json` variant)
6
+ * using `site.pages` + `site.pageLocales`
7
+ * - Component-ID auto-assignment via `ensureComponentIds`
8
+ * - Filename composition (`page.json` vs `page.{locale}.json`)
9
+ * - Manifest assembly (template/content/components/metadata, plus
10
+ * route preservation for locale variants)
11
+ * - The `route` field in `etagExtras` (folder-derived; not stored
12
+ * in the file but part of the etag projection chain per
13
+ * `design-offline.md` Q3)
14
+ * - Per-kind cache prefix `pages:`
15
+ *
16
+ * Everything downstream — etag check, validators, beforeSave hooks,
17
+ * history, write, sidecars, cache invalidate, audit, afterSave hooks,
18
+ * scanner — is `saveManifestCore`'s spine. This wrapper is the
19
+ * Page-flavored thin entry point routes (and the future CLI / plugin
20
+ * routes) call.
21
+ *
22
+ * Per Q3 lock: two fns + shared core. The 5 page-specific diffs
23
+ * (route field, locale lookup in `site.pages`, page-cache prefix,
24
+ * filename, route preservation in locale variants) live here in
25
+ * one file the reader can scan top-to-bottom.
26
+ */
27
+ import { type SaveAuditRecorder, type SaveResult, type SavePrincipal, type SaveSourceWiring } from '../manifest-save.js';
28
+ import type { PageManifest } from '../types.js';
29
+ import type { Site } from '../site-loader.js';
30
+ import type { ValidatorRegistry } from '../validation/registry.js';
31
+ import type { ValidationScanner } from '../validation/scanner.js';
32
+ import type { HookFiringEmitter, HookRegistry } from '../hooks/index.js';
33
+ /**
34
+ * Inputs to `savePage`. Routes destructure their request and pass
35
+ * the parts the pipeline needs; CLI / plugin callers do the same
36
+ * without an HTTP shell. Returns one of `SaveResult`'s typed
37
+ * variants — caller projects to HTTP (200 / 409) or CLI exit code.
38
+ */
39
+ export interface SavePageInput {
40
+ /** Page name (folder name under `pages/`). */
41
+ readonly name: string;
42
+ /** BCP-47 locale when saving a Locale Variant; undefined for default. */
43
+ readonly locale?: string;
44
+ /** Incoming manifest body (template/content/components/metadata). */
45
+ readonly body: Partial<PageManifest> & Record<string, unknown>;
46
+ /** Optional save-etag for concurrency check. */
47
+ readonly ifMatch?: string;
48
+ /** Loaded site (caller does `loadSiteFromSource(source)` once). */
49
+ readonly site: Site;
50
+ /** Source wiring (cache, history, storage, contentRoot, manifest, targetName). */
51
+ readonly source: SaveSourceWiring;
52
+ /** Authenticated principal driving this save. */
53
+ readonly principal: SavePrincipal;
54
+ /** Audit recorder bound to the request. */
55
+ readonly audit: SaveAuditRecorder;
56
+ /** Validator registry built once at admin boot. */
57
+ readonly validators: ValidatorRegistry;
58
+ /** Hook registry; absent when no hooks contributed. */
59
+ readonly hooks?: HookRegistry;
60
+ /** Audit-firing emitter for hook dispatch. */
61
+ readonly hookAuditEmit?: HookFiringEmitter;
62
+ /** Background scanner; absent when scanner not enabled. */
63
+ readonly scanner?: ValidationScanner;
64
+ /** Per-request correlation id; fresh UUID when absent. */
65
+ readonly requestId?: string;
66
+ }
67
+ /**
68
+ * Page-name-not-found error. The route projects this to a 404; the
69
+ * pipeline can't compose the full save without a `before` manifest
70
+ * (etag check, validators, sidecar diffs all need it). Distinct
71
+ * from the typed `SaveResult` variants because absence-of-target is
72
+ * a route-level precondition, not a save-pipeline outcome.
73
+ */
74
+ export declare class PageNotFoundError extends Error {
75
+ readonly name: string;
76
+ constructor(name: string);
77
+ }
78
+ /**
79
+ * Invalid locale code per `isValidLocale`. Routes project to 400.
80
+ */
81
+ export declare class InvalidLocaleError extends Error {
82
+ readonly raw: string;
83
+ constructor(raw: string);
84
+ }
85
+ /**
86
+ * Save a Page Manifest. Wraps `saveManifestCore` with the Page-specific
87
+ * resolution + assembly. Throws `PageNotFoundError` / `InvalidLocaleError`
88
+ * for route-level preconditions; returns `SaveResult` for save outcomes.
89
+ *
90
+ * Caller responsibilities:
91
+ * - Capability check (`requireCapability('edit:pages')`) before calling
92
+ * - HTTP projection of `SaveResult` (200 success, 409 STALE /
93
+ * VALIDATION_FAILED / HOOK_CANCELLED with appropriate body shape)
94
+ * - Setting the `ETag` response header on success from `result.etag`
95
+ */
96
+ export declare function savePage(input: SavePageInput): Promise<SaveResult>;
97
+ //# sourceMappingURL=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/pages/save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAExE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9D,gDAAgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAA;IACtC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAA;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAC1C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aACd,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAIzC;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aACf,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;CAIxC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAqExE"}