gazetta 0.6.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 (983) 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/error-response.d.ts +21 -0
  21. package/dist/admin-api/error-response.d.ts.map +1 -0
  22. package/dist/admin-api/error-response.js +12 -0
  23. package/dist/admin-api/error-response.js.map +1 -0
  24. package/dist/admin-api/hook-audit-emitter.d.ts +38 -0
  25. package/dist/admin-api/hook-audit-emitter.d.ts.map +1 -0
  26. package/dist/admin-api/hook-audit-emitter.js +21 -0
  27. package/dist/admin-api/hook-audit-emitter.js.map +1 -0
  28. package/dist/admin-api/index.d.ts +84 -2
  29. package/dist/admin-api/index.d.ts.map +1 -1
  30. package/dist/admin-api/index.js +257 -32
  31. package/dist/admin-api/index.js.map +1 -1
  32. package/dist/admin-api/middleware/audit.d.ts +25 -0
  33. package/dist/admin-api/middleware/audit.d.ts.map +1 -0
  34. package/dist/admin-api/middleware/audit.js +65 -0
  35. package/dist/admin-api/middleware/audit.js.map +1 -0
  36. package/dist/admin-api/middleware/capability.d.ts +8 -0
  37. package/dist/admin-api/middleware/capability.d.ts.map +1 -0
  38. package/dist/admin-api/middleware/capability.js +65 -0
  39. package/dist/admin-api/middleware/capability.js.map +1 -0
  40. package/dist/admin-api/middleware/principal.d.ts +18 -0
  41. package/dist/admin-api/middleware/principal.d.ts.map +1 -0
  42. package/dist/admin-api/middleware/principal.js +128 -0
  43. package/dist/admin-api/middleware/principal.js.map +1 -0
  44. package/dist/admin-api/routes/archive-review.d.ts +80 -0
  45. package/dist/admin-api/routes/archive-review.d.ts.map +1 -0
  46. package/dist/admin-api/routes/archive-review.js +70 -0
  47. package/dist/admin-api/routes/archive-review.js.map +1 -0
  48. package/dist/admin-api/routes/archive.d.ts +145 -0
  49. package/dist/admin-api/routes/archive.d.ts.map +1 -0
  50. package/dist/admin-api/routes/archive.js +540 -0
  51. package/dist/admin-api/routes/archive.js.map +1 -0
  52. package/dist/admin-api/routes/assets.d.ts +21 -0
  53. package/dist/admin-api/routes/assets.d.ts.map +1 -0
  54. package/dist/admin-api/routes/assets.js +586 -0
  55. package/dist/admin-api/routes/assets.js.map +1 -0
  56. package/dist/admin-api/routes/audit.d.ts +71 -0
  57. package/dist/admin-api/routes/audit.d.ts.map +1 -0
  58. package/dist/admin-api/routes/audit.js +178 -0
  59. package/dist/admin-api/routes/audit.js.map +1 -0
  60. package/dist/admin-api/routes/compare.d.ts.map +1 -1
  61. package/dist/admin-api/routes/compare.js +3 -2
  62. package/dist/admin-api/routes/compare.js.map +1 -1
  63. package/dist/admin-api/routes/fields.d.ts.map +1 -1
  64. package/dist/admin-api/routes/fields.js +2 -1
  65. package/dist/admin-api/routes/fields.js.map +1 -1
  66. package/dist/admin-api/routes/fragments.d.ts +13 -1
  67. package/dist/admin-api/routes/fragments.d.ts.map +1 -1
  68. package/dist/admin-api/routes/fragments.js +128 -67
  69. package/dist/admin-api/routes/fragments.js.map +1 -1
  70. package/dist/admin-api/routes/health.d.ts +60 -0
  71. package/dist/admin-api/routes/health.d.ts.map +1 -0
  72. package/dist/admin-api/routes/health.js +65 -0
  73. package/dist/admin-api/routes/health.js.map +1 -0
  74. package/dist/admin-api/routes/history.d.ts +2 -1
  75. package/dist/admin-api/routes/history.d.ts.map +1 -1
  76. package/dist/admin-api/routes/history.js +26 -4
  77. package/dist/admin-api/routes/history.js.map +1 -1
  78. package/dist/admin-api/routes/pages.d.ts +20 -1
  79. package/dist/admin-api/routes/pages.d.ts.map +1 -1
  80. package/dist/admin-api/routes/pages.js +158 -85
  81. package/dist/admin-api/routes/pages.js.map +1 -1
  82. package/dist/admin-api/routes/preview.d.ts.map +1 -1
  83. package/dist/admin-api/routes/preview.js +56 -17
  84. package/dist/admin-api/routes/preview.js.map +1 -1
  85. package/dist/admin-api/routes/publish.d.ts +19 -1
  86. package/dist/admin-api/routes/publish.d.ts.map +1 -1
  87. package/dist/admin-api/routes/publish.js +548 -99
  88. package/dist/admin-api/routes/publish.js.map +1 -1
  89. package/dist/admin-api/routes/rename.d.ts +62 -0
  90. package/dist/admin-api/routes/rename.d.ts.map +1 -0
  91. package/dist/admin-api/routes/rename.js +366 -0
  92. package/dist/admin-api/routes/rename.js.map +1 -0
  93. package/dist/admin-api/routes/site.d.ts.map +1 -1
  94. package/dist/admin-api/routes/site.js +6 -18
  95. package/dist/admin-api/routes/site.js.map +1 -1
  96. package/dist/admin-api/routes/system.d.ts +23 -0
  97. package/dist/admin-api/routes/system.d.ts.map +1 -0
  98. package/dist/admin-api/routes/system.js +115 -0
  99. package/dist/admin-api/routes/system.js.map +1 -0
  100. package/dist/admin-api/routes/templates.d.ts +11 -1
  101. package/dist/admin-api/routes/templates.d.ts.map +1 -1
  102. package/dist/admin-api/routes/templates.js +36 -3
  103. package/dist/admin-api/routes/templates.js.map +1 -1
  104. package/dist/admin-api/routes/validation.d.ts +47 -0
  105. package/dist/admin-api/routes/validation.d.ts.map +1 -0
  106. package/dist/admin-api/routes/validation.js +120 -0
  107. package/dist/admin-api/routes/validation.js.map +1 -0
  108. package/dist/admin-api/schemas/archive.d.ts +124 -0
  109. package/dist/admin-api/schemas/archive.d.ts.map +1 -0
  110. package/dist/admin-api/schemas/archive.js +93 -0
  111. package/dist/admin-api/schemas/archive.js.map +1 -0
  112. package/dist/admin-api/schemas/assets.d.ts +64 -0
  113. package/dist/admin-api/schemas/assets.d.ts.map +1 -0
  114. package/dist/admin-api/schemas/assets.js +59 -0
  115. package/dist/admin-api/schemas/assets.js.map +1 -0
  116. package/dist/admin-api/schemas/audit.d.ts +175 -0
  117. package/dist/admin-api/schemas/audit.d.ts.map +1 -0
  118. package/dist/admin-api/schemas/audit.js +91 -0
  119. package/dist/admin-api/schemas/audit.js.map +1 -0
  120. package/dist/admin-api/schemas/error.d.ts +94 -0
  121. package/dist/admin-api/schemas/error.d.ts.map +1 -0
  122. package/dist/admin-api/schemas/error.js +79 -0
  123. package/dist/admin-api/schemas/error.js.map +1 -0
  124. package/dist/admin-api/schemas/fragments.d.ts +2 -0
  125. package/dist/admin-api/schemas/fragments.d.ts.map +1 -1
  126. package/dist/admin-api/schemas/fragments.js +4 -0
  127. package/dist/admin-api/schemas/fragments.js.map +1 -1
  128. package/dist/admin-api/schemas/index.d.ts +10 -0
  129. package/dist/admin-api/schemas/index.d.ts.map +1 -1
  130. package/dist/admin-api/schemas/index.js +10 -0
  131. package/dist/admin-api/schemas/index.js.map +1 -1
  132. package/dist/admin-api/schemas/pages.d.ts +2 -0
  133. package/dist/admin-api/schemas/pages.d.ts.map +1 -1
  134. package/dist/admin-api/schemas/pages.js +11 -0
  135. package/dist/admin-api/schemas/pages.js.map +1 -1
  136. package/dist/admin-api/schemas/rename.d.ts +77 -0
  137. package/dist/admin-api/schemas/rename.d.ts.map +1 -0
  138. package/dist/admin-api/schemas/rename.js +75 -0
  139. package/dist/admin-api/schemas/rename.js.map +1 -0
  140. package/dist/admin-api/schemas/site.d.ts +3 -2
  141. package/dist/admin-api/schemas/site.d.ts.map +1 -1
  142. package/dist/admin-api/schemas/site.js +3 -2
  143. package/dist/admin-api/schemas/site.js.map +1 -1
  144. package/dist/admin-api/schemas/system.d.ts +28 -0
  145. package/dist/admin-api/schemas/system.d.ts.map +1 -0
  146. package/dist/admin-api/schemas/system.js +35 -0
  147. package/dist/admin-api/schemas/system.js.map +1 -0
  148. package/dist/admin-api/schemas/targets.d.ts +55 -0
  149. package/dist/admin-api/schemas/targets.d.ts.map +1 -1
  150. package/dist/admin-api/schemas/targets.js +46 -0
  151. package/dist/admin-api/schemas/targets.js.map +1 -1
  152. package/dist/admin-api/schemas/templates.d.ts +54 -0
  153. package/dist/admin-api/schemas/templates.d.ts.map +1 -1
  154. package/dist/admin-api/schemas/templates.js +21 -0
  155. package/dist/admin-api/schemas/templates.js.map +1 -1
  156. package/dist/admin-api/schemas/validation.d.ts +101 -0
  157. package/dist/admin-api/schemas/validation.d.ts.map +1 -0
  158. package/dist/admin-api/schemas/validation.js +57 -0
  159. package/dist/admin-api/schemas/validation.js.map +1 -0
  160. package/dist/admin-api/source-context.d.ts +66 -17
  161. package/dist/admin-api/source-context.d.ts.map +1 -1
  162. package/dist/admin-api/source-context.js +43 -8
  163. package/dist/admin-api/source-context.js.map +1 -1
  164. package/dist/ai/adapter-scaffold.d.ts +63 -0
  165. package/dist/ai/adapter-scaffold.d.ts.map +1 -0
  166. package/dist/ai/adapter-scaffold.js +89 -0
  167. package/dist/ai/adapter-scaffold.js.map +1 -0
  168. package/dist/ai/compose-prompt.d.ts +50 -0
  169. package/dist/ai/compose-prompt.d.ts.map +1 -0
  170. package/dist/ai/compose-prompt.js +49 -0
  171. package/dist/ai/compose-prompt.js.map +1 -0
  172. package/dist/ai/errors.d.ts +65 -0
  173. package/dist/ai/errors.d.ts.map +1 -0
  174. package/dist/ai/errors.js +59 -0
  175. package/dist/ai/errors.js.map +1 -0
  176. package/dist/ai/index.d.ts +17 -0
  177. package/dist/ai/index.d.ts.map +1 -0
  178. package/dist/ai/index.js +16 -0
  179. package/dist/ai/index.js.map +1 -0
  180. package/dist/ai/provider.d.ts +76 -0
  181. package/dist/ai/provider.d.ts.map +1 -0
  182. package/dist/ai/provider.js +13 -0
  183. package/dist/ai/provider.js.map +1 -0
  184. package/dist/ai/refusal.d.ts +50 -0
  185. package/dist/ai/refusal.d.ts.map +1 -0
  186. package/dist/ai/refusal.js +100 -0
  187. package/dist/ai/refusal.js.map +1 -0
  188. package/dist/ai/vision-prep.d.ts +32 -0
  189. package/dist/ai/vision-prep.d.ts.map +1 -0
  190. package/dist/ai/vision-prep.js +113 -0
  191. package/dist/ai/vision-prep.js.map +1 -0
  192. package/dist/alt/adapter.d.ts +140 -0
  193. package/dist/alt/adapter.d.ts.map +1 -0
  194. package/dist/alt/adapter.js +7 -0
  195. package/dist/alt/adapter.js.map +1 -0
  196. package/dist/alt/anthropic.d.ts +63 -0
  197. package/dist/alt/anthropic.d.ts.map +1 -0
  198. package/dist/alt/anthropic.js +147 -0
  199. package/dist/alt/anthropic.js.map +1 -0
  200. package/dist/alt/config.d.ts +67 -0
  201. package/dist/alt/config.d.ts.map +1 -0
  202. package/dist/alt/config.js +41 -0
  203. package/dist/alt/config.js.map +1 -0
  204. package/dist/alt/factory.d.ts +19 -0
  205. package/dist/alt/factory.d.ts.map +1 -0
  206. package/dist/alt/factory.js +69 -0
  207. package/dist/alt/factory.js.map +1 -0
  208. package/dist/alt/null-adapter.d.ts +3 -0
  209. package/dist/alt/null-adapter.d.ts.map +1 -0
  210. package/dist/alt/null-adapter.js +43 -0
  211. package/dist/alt/null-adapter.js.map +1 -0
  212. package/dist/alt/ollama.d.ts +40 -0
  213. package/dist/alt/ollama.d.ts.map +1 -0
  214. package/dist/alt/ollama.js +139 -0
  215. package/dist/alt/ollama.js.map +1 -0
  216. package/dist/alt/openai.d.ts +46 -0
  217. package/dist/alt/openai.d.ts.map +1 -0
  218. package/dist/alt/openai.js +118 -0
  219. package/dist/alt/openai.js.map +1 -0
  220. package/dist/alt/prompt-policies.d.ts +79 -0
  221. package/dist/alt/prompt-policies.d.ts.map +1 -0
  222. package/dist/alt/prompt-policies.js +67 -0
  223. package/dist/alt/prompt-policies.js.map +1 -0
  224. package/dist/alt/route-handler.d.ts +56 -0
  225. package/dist/alt/route-handler.d.ts.map +1 -0
  226. package/dist/alt/route-handler.js +122 -0
  227. package/dist/alt/route-handler.js.map +1 -0
  228. package/dist/alt/suggester.d.ts +57 -0
  229. package/dist/alt/suggester.d.ts.map +1 -0
  230. package/dist/alt/suggester.js +133 -0
  231. package/dist/alt/suggester.js.map +1 -0
  232. package/dist/app.js +1 -1
  233. package/dist/app.js.map +1 -1
  234. package/dist/archive-aliases.d.ts +79 -0
  235. package/dist/archive-aliases.d.ts.map +1 -0
  236. package/dist/archive-aliases.js +60 -0
  237. package/dist/archive-aliases.js.map +1 -0
  238. package/dist/archive-helpers.d.ts +73 -0
  239. package/dist/archive-helpers.d.ts.map +1 -0
  240. package/dist/archive-helpers.js +94 -0
  241. package/dist/archive-helpers.js.map +1 -0
  242. package/dist/assets/analyze-audio.d.ts +3 -0
  243. package/dist/assets/analyze-audio.d.ts.map +1 -0
  244. package/dist/assets/analyze-audio.js +80 -0
  245. package/dist/assets/analyze-audio.js.map +1 -0
  246. package/dist/assets/analyze-image.d.ts +19 -0
  247. package/dist/assets/analyze-image.d.ts.map +1 -0
  248. package/dist/assets/analyze-image.js +123 -0
  249. package/dist/assets/analyze-image.js.map +1 -0
  250. package/dist/assets/analyze.d.ts +94 -0
  251. package/dist/assets/analyze.d.ts.map +1 -0
  252. package/dist/assets/analyze.js +45 -0
  253. package/dist/assets/analyze.js.map +1 -0
  254. package/dist/assets/asset-deps.d.ts +30 -0
  255. package/dist/assets/asset-deps.d.ts.map +1 -0
  256. package/dist/assets/asset-deps.js +42 -0
  257. package/dist/assets/asset-deps.js.map +1 -0
  258. package/dist/assets/asset-paths.d.ts +155 -0
  259. package/dist/assets/asset-paths.d.ts.map +1 -0
  260. package/dist/assets/asset-paths.js +197 -0
  261. package/dist/assets/asset-paths.js.map +1 -0
  262. package/dist/assets/delete.d.ts +75 -0
  263. package/dist/assets/delete.d.ts.map +1 -0
  264. package/dist/assets/delete.js +82 -0
  265. package/dist/assets/delete.js.map +1 -0
  266. package/dist/assets/errors.d.ts +241 -0
  267. package/dist/assets/errors.d.ts.map +1 -0
  268. package/dist/assets/errors.js +300 -0
  269. package/dist/assets/errors.js.map +1 -0
  270. package/dist/assets/find-refs.d.ts +37 -0
  271. package/dist/assets/find-refs.d.ts.map +1 -0
  272. package/dist/assets/find-refs.js +35 -0
  273. package/dist/assets/find-refs.js.map +1 -0
  274. package/dist/assets/hash.d.ts +13 -0
  275. package/dist/assets/hash.d.ts.map +1 -0
  276. package/dist/assets/hash.js +43 -0
  277. package/dist/assets/hash.js.map +1 -0
  278. package/dist/assets/image-metadata.d.ts +11 -0
  279. package/dist/assets/image-metadata.d.ts.map +1 -0
  280. package/dist/assets/image-metadata.js +31 -0
  281. package/dist/assets/image-metadata.js.map +1 -0
  282. package/dist/assets/ingest-locale.d.ts +86 -0
  283. package/dist/assets/ingest-locale.d.ts.map +1 -0
  284. package/dist/assets/ingest-locale.js +209 -0
  285. package/dist/assets/ingest-locale.js.map +1 -0
  286. package/dist/assets/ingest.d.ts +96 -0
  287. package/dist/assets/ingest.d.ts.map +1 -0
  288. package/dist/assets/ingest.js +308 -0
  289. package/dist/assets/ingest.js.map +1 -0
  290. package/dist/assets/kind-compat.d.ts +34 -0
  291. package/dist/assets/kind-compat.d.ts.map +1 -0
  292. package/dist/assets/kind-compat.js +33 -0
  293. package/dist/assets/kind-compat.js.map +1 -0
  294. package/dist/assets/list.d.ts +46 -0
  295. package/dist/assets/list.d.ts.map +1 -0
  296. package/dist/assets/list.js +102 -0
  297. package/dist/assets/list.js.map +1 -0
  298. package/dist/assets/manifest-default.d.ts +56 -0
  299. package/dist/assets/manifest-default.d.ts.map +1 -0
  300. package/dist/assets/manifest-default.js +120 -0
  301. package/dist/assets/manifest-default.js.map +1 -0
  302. package/dist/assets/manifest-filename.d.ts +52 -0
  303. package/dist/assets/manifest-filename.d.ts.map +1 -0
  304. package/dist/assets/manifest-filename.js +104 -0
  305. package/dist/assets/manifest-filename.js.map +1 -0
  306. package/dist/assets/manifest-locale.d.ts +60 -0
  307. package/dist/assets/manifest-locale.d.ts.map +1 -0
  308. package/dist/assets/manifest-locale.js +206 -0
  309. package/dist/assets/manifest-locale.js.map +1 -0
  310. package/dist/assets/manifest-merge.d.ts +66 -0
  311. package/dist/assets/manifest-merge.d.ts.map +1 -0
  312. package/dist/assets/manifest-merge.js +82 -0
  313. package/dist/assets/manifest-merge.js.map +1 -0
  314. package/dist/assets/manifest.d.ts +83 -0
  315. package/dist/assets/manifest.d.ts.map +1 -0
  316. package/dist/assets/manifest.js +93 -0
  317. package/dist/assets/manifest.js.map +1 -0
  318. package/dist/assets/mime-sniff.d.ts +18 -0
  319. package/dist/assets/mime-sniff.d.ts.map +1 -0
  320. package/dist/assets/mime-sniff.js +84 -0
  321. package/dist/assets/mime-sniff.js.map +1 -0
  322. package/dist/assets/preprocess-svg.d.ts +3 -0
  323. package/dist/assets/preprocess-svg.d.ts.map +1 -0
  324. package/dist/assets/preprocess-svg.js +49 -0
  325. package/dist/assets/preprocess-svg.js.map +1 -0
  326. package/dist/assets/preprocess.d.ts +62 -0
  327. package/dist/assets/preprocess.d.ts.map +1 -0
  328. package/dist/assets/preprocess.js +86 -0
  329. package/dist/assets/preprocess.js.map +1 -0
  330. package/dist/assets/publish-plan.d.ts +41 -0
  331. package/dist/assets/publish-plan.d.ts.map +1 -0
  332. package/dist/assets/publish-plan.js +49 -0
  333. package/dist/assets/publish-plan.js.map +1 -0
  334. package/dist/assets/publish.d.ts +33 -0
  335. package/dist/assets/publish.d.ts.map +1 -0
  336. package/dist/assets/publish.js +81 -0
  337. package/dist/assets/publish.js.map +1 -0
  338. package/dist/assets/refs.d.ts +37 -0
  339. package/dist/assets/refs.d.ts.map +1 -0
  340. package/dist/assets/refs.js +33 -0
  341. package/dist/assets/refs.js.map +1 -0
  342. package/dist/assets/remove-override.d.ts +42 -0
  343. package/dist/assets/remove-override.d.ts.map +1 -0
  344. package/dist/assets/remove-override.js +53 -0
  345. package/dist/assets/remove-override.js.map +1 -0
  346. package/dist/assets/rename.d.ts +43 -0
  347. package/dist/assets/rename.d.ts.map +1 -0
  348. package/dist/assets/rename.js +271 -0
  349. package/dist/assets/rename.js.map +1 -0
  350. package/dist/assets/replace.d.ts +37 -0
  351. package/dist/assets/replace.d.ts.map +1 -0
  352. package/dist/assets/replace.js +195 -0
  353. package/dist/assets/replace.js.map +1 -0
  354. package/dist/assets/resolve.d.ts +141 -0
  355. package/dist/assets/resolve.d.ts.map +1 -0
  356. package/dist/assets/resolve.js +381 -0
  357. package/dist/assets/resolve.js.map +1 -0
  358. package/dist/assets/rewrite-manifest-asset-ref.d.ts +44 -0
  359. package/dist/assets/rewrite-manifest-asset-ref.d.ts.map +1 -0
  360. package/dist/assets/rewrite-manifest-asset-ref.js +51 -0
  361. package/dist/assets/rewrite-manifest-asset-ref.js.map +1 -0
  362. package/dist/assets/scan-manifest-for-asset.d.ts +63 -0
  363. package/dist/assets/scan-manifest-for-asset.d.ts.map +1 -0
  364. package/dist/assets/scan-manifest-for-asset.js +105 -0
  365. package/dist/assets/scan-manifest-for-asset.js.map +1 -0
  366. package/dist/assets/serve-route.d.ts +45 -0
  367. package/dist/assets/serve-route.d.ts.map +1 -0
  368. package/dist/assets/serve-route.js +123 -0
  369. package/dist/assets/serve-route.js.map +1 -0
  370. package/dist/assets/svg-sanitize.d.ts +38 -0
  371. package/dist/assets/svg-sanitize.d.ts.map +1 -0
  372. package/dist/assets/svg-sanitize.js +209 -0
  373. package/dist/assets/svg-sanitize.js.map +1 -0
  374. package/dist/assets/update-metadata.d.ts +61 -0
  375. package/dist/assets/update-metadata.d.ts.map +1 -0
  376. package/dist/assets/update-metadata.js +82 -0
  377. package/dist/assets/update-metadata.js.map +1 -0
  378. package/dist/assets/url.d.ts +82 -0
  379. package/dist/assets/url.d.ts.map +1 -0
  380. package/dist/assets/url.js +103 -0
  381. package/dist/assets/url.js.map +1 -0
  382. package/dist/assets/validate.d.ts +74 -0
  383. package/dist/assets/validate.d.ts.map +1 -0
  384. package/dist/assets/validate.js +136 -0
  385. package/dist/assets/validate.js.map +1 -0
  386. package/dist/assets/variants.d.ts +23 -0
  387. package/dist/assets/variants.d.ts.map +1 -0
  388. package/dist/assets/variants.js +74 -0
  389. package/dist/assets/variants.js.map +1 -0
  390. package/dist/audit/config.d.ts +75 -0
  391. package/dist/audit/config.d.ts.map +1 -0
  392. package/dist/audit/config.js +91 -0
  393. package/dist/audit/config.js.map +1 -0
  394. package/dist/audit/context.d.ts +98 -0
  395. package/dist/audit/context.d.ts.map +1 -0
  396. package/dist/audit/context.js +51 -0
  397. package/dist/audit/context.js.map +1 -0
  398. package/dist/audit/errors.d.ts +73 -0
  399. package/dist/audit/errors.d.ts.map +1 -0
  400. package/dist/audit/errors.js +78 -0
  401. package/dist/audit/errors.js.map +1 -0
  402. package/dist/audit/index.d.ts +16 -0
  403. package/dist/audit/index.d.ts.map +1 -0
  404. package/dist/audit/index.js +10 -0
  405. package/dist/audit/index.js.map +1 -0
  406. package/dist/audit/provider.d.ts +73 -0
  407. package/dist/audit/provider.d.ts.map +1 -0
  408. package/dist/audit/provider.js +2 -0
  409. package/dist/audit/provider.js.map +1 -0
  410. package/dist/audit/providers/history.d.ts +66 -0
  411. package/dist/audit/providers/history.d.ts.map +1 -0
  412. package/dist/audit/providers/history.js +102 -0
  413. package/dist/audit/providers/history.js.map +1 -0
  414. package/dist/audit/pseudonymize.d.ts +26 -0
  415. package/dist/audit/pseudonymize.d.ts.map +1 -0
  416. package/dist/audit/pseudonymize.js +86 -0
  417. package/dist/audit/pseudonymize.js.map +1 -0
  418. package/dist/audit/recorder.d.ts +102 -0
  419. package/dist/audit/recorder.d.ts.map +1 -0
  420. package/dist/audit/recorder.js +55 -0
  421. package/dist/audit/recorder.js.map +1 -0
  422. package/dist/audit/retention.d.ts +83 -0
  423. package/dist/audit/retention.d.ts.map +1 -0
  424. package/dist/audit/retention.js +142 -0
  425. package/dist/audit/retention.js.map +1 -0
  426. package/dist/audit/source-ip.d.ts +32 -0
  427. package/dist/audit/source-ip.d.ts.map +1 -0
  428. package/dist/audit/source-ip.js +164 -0
  429. package/dist/audit/source-ip.js.map +1 -0
  430. package/dist/audit/types.d.ts +143 -0
  431. package/dist/audit/types.d.ts.map +1 -0
  432. package/dist/audit/types.js +33 -0
  433. package/dist/audit/types.js.map +1 -0
  434. package/dist/audit/user-agent.d.ts +28 -0
  435. package/dist/audit/user-agent.d.ts.map +1 -0
  436. package/dist/audit/user-agent.js +63 -0
  437. package/dist/audit/user-agent.js.map +1 -0
  438. package/dist/auth/capabilities.d.ts +28 -0
  439. package/dist/auth/capabilities.d.ts.map +1 -0
  440. package/dist/auth/capabilities.js +101 -0
  441. package/dist/auth/capabilities.js.map +1 -0
  442. package/dist/auth/config.d.ts +109 -0
  443. package/dist/auth/config.d.ts.map +1 -0
  444. package/dist/auth/config.js +221 -0
  445. package/dist/auth/config.js.map +1 -0
  446. package/dist/auth/errors.d.ts +72 -0
  447. package/dist/auth/errors.d.ts.map +1 -0
  448. package/dist/auth/errors.js +78 -0
  449. package/dist/auth/errors.js.map +1 -0
  450. package/dist/auth/factory.d.ts +43 -0
  451. package/dist/auth/factory.d.ts.map +1 -0
  452. package/dist/auth/factory.js +48 -0
  453. package/dist/auth/factory.js.map +1 -0
  454. package/dist/auth/index.d.ts +21 -0
  455. package/dist/auth/index.d.ts.map +1 -0
  456. package/dist/auth/index.js +14 -0
  457. package/dist/auth/index.js.map +1 -0
  458. package/dist/auth/ip-match.d.ts +29 -0
  459. package/dist/auth/ip-match.d.ts.map +1 -0
  460. package/dist/auth/ip-match.js +162 -0
  461. package/dist/auth/ip-match.js.map +1 -0
  462. package/dist/auth/provider.d.ts +76 -0
  463. package/dist/auth/provider.d.ts.map +1 -0
  464. package/dist/auth/provider.js +2 -0
  465. package/dist/auth/provider.js.map +1 -0
  466. package/dist/auth/providers/aws-cognito.d.ts +55 -0
  467. package/dist/auth/providers/aws-cognito.d.ts.map +1 -0
  468. package/dist/auth/providers/aws-cognito.js +114 -0
  469. package/dist/auth/providers/aws-cognito.js.map +1 -0
  470. package/dist/auth/providers/azure-easy-auth.d.ts +7 -0
  471. package/dist/auth/providers/azure-easy-auth.d.ts.map +1 -0
  472. package/dist/auth/providers/azure-easy-auth.js +48 -0
  473. package/dist/auth/providers/azure-easy-auth.js.map +1 -0
  474. package/dist/auth/providers/cloudflare-access.d.ts +71 -0
  475. package/dist/auth/providers/cloudflare-access.d.ts.map +1 -0
  476. package/dist/auth/providers/cloudflare-access.js +120 -0
  477. package/dist/auth/providers/cloudflare-access.js.map +1 -0
  478. package/dist/auth/providers/forwarded-user.d.ts +31 -0
  479. package/dist/auth/providers/forwarded-user.d.ts.map +1 -0
  480. package/dist/auth/providers/forwarded-user.js +72 -0
  481. package/dist/auth/providers/forwarded-user.js.map +1 -0
  482. package/dist/auth/providers/none.d.ts +6 -0
  483. package/dist/auth/providers/none.d.ts.map +1 -0
  484. package/dist/auth/providers/none.js +19 -0
  485. package/dist/auth/providers/none.js.map +1 -0
  486. package/dist/auth/providers/tailscale.d.ts +7 -0
  487. package/dist/auth/providers/tailscale.d.ts.map +1 -0
  488. package/dist/auth/providers/tailscale.js +30 -0
  489. package/dist/auth/providers/tailscale.js.map +1 -0
  490. package/dist/auth/role-resolver.d.ts +38 -0
  491. package/dist/auth/role-resolver.d.ts.map +1 -0
  492. package/dist/auth/role-resolver.js +92 -0
  493. package/dist/auth/role-resolver.js.map +1 -0
  494. package/dist/auth/types.d.ts +150 -0
  495. package/dist/auth/types.d.ts.map +1 -0
  496. package/dist/auth/types.js +60 -0
  497. package/dist/auth/types.js.map +1 -0
  498. package/dist/cache/errors.d.ts +41 -0
  499. package/dist/cache/errors.d.ts.map +1 -0
  500. package/dist/cache/errors.js +44 -0
  501. package/dist/cache/errors.js.map +1 -0
  502. package/dist/cache/factories.d.ts +17 -0
  503. package/dist/cache/factories.d.ts.map +1 -0
  504. package/dist/cache/factories.js +17 -0
  505. package/dist/cache/factories.js.map +1 -0
  506. package/dist/cache/keys.d.ts +63 -0
  507. package/dist/cache/keys.d.ts.map +1 -0
  508. package/dist/cache/keys.js +145 -0
  509. package/dist/cache/keys.js.map +1 -0
  510. package/dist/cache/memory.d.ts +51 -0
  511. package/dist/cache/memory.d.ts.map +1 -0
  512. package/dist/cache/memory.js +204 -0
  513. package/dist/cache/memory.js.map +1 -0
  514. package/dist/cache/per-site.d.ts +22 -0
  515. package/dist/cache/per-site.d.ts.map +1 -0
  516. package/dist/cache/per-site.js +114 -0
  517. package/dist/cache/per-site.js.map +1 -0
  518. package/dist/cache/types.d.ts +142 -0
  519. package/dist/cache/types.d.ts.map +1 -0
  520. package/dist/cache/types.js +33 -0
  521. package/dist/cache/types.js.map +1 -0
  522. package/dist/cli/archive.d.ts +44 -0
  523. package/dist/cli/archive.d.ts.map +1 -0
  524. package/dist/cli/archive.js +310 -0
  525. package/dist/cli/archive.js.map +1 -0
  526. package/dist/cli/assets-cli.d.ts +58 -0
  527. package/dist/cli/assets-cli.d.ts.map +1 -0
  528. package/dist/cli/assets-cli.js +233 -0
  529. package/dist/cli/assets-cli.js.map +1 -0
  530. package/dist/cli/assets-display.d.ts +112 -0
  531. package/dist/cli/assets-display.d.ts.map +1 -0
  532. package/dist/cli/assets-display.js +106 -0
  533. package/dist/cli/assets-display.js.map +1 -0
  534. package/dist/cli/bootstrap.d.ts +15 -10
  535. package/dist/cli/bootstrap.d.ts.map +1 -1
  536. package/dist/cli/bootstrap.js +59 -24
  537. package/dist/cli/bootstrap.js.map +1 -1
  538. package/dist/cli/dev-template-watcher.d.ts +29 -0
  539. package/dist/cli/dev-template-watcher.d.ts.map +1 -0
  540. package/dist/cli/dev-template-watcher.js +38 -0
  541. package/dist/cli/dev-template-watcher.js.map +1 -0
  542. package/dist/cli/history.d.ts.map +1 -1
  543. package/dist/cli/history.js +5 -3
  544. package/dist/cli/history.js.map +1 -1
  545. package/dist/cli/index.js +737 -374
  546. package/dist/cli/index.js.map +1 -1
  547. package/dist/cli/validate-flags.d.ts +29 -0
  548. package/dist/cli/validate-flags.d.ts.map +1 -0
  549. package/dist/cli/validate-flags.js +49 -0
  550. package/dist/cli/validate-flags.js.map +1 -0
  551. package/dist/compare.d.ts +1 -1
  552. package/dist/compare.d.ts.map +1 -1
  553. package/dist/compare.js +40 -35
  554. package/dist/compare.js.map +1 -1
  555. package/dist/component-ids.d.ts +25 -0
  556. package/dist/component-ids.d.ts.map +1 -0
  557. package/dist/component-ids.js +83 -0
  558. package/dist/component-ids.js.map +1 -0
  559. package/dist/config/define.d.ts +61 -0
  560. package/dist/config/define.d.ts.map +1 -0
  561. package/dist/config/define.js +64 -0
  562. package/dist/config/define.js.map +1 -0
  563. package/dist/config/errors.d.ts +32 -0
  564. package/dist/config/errors.d.ts.map +1 -0
  565. package/dist/config/errors.js +40 -0
  566. package/dist/config/errors.js.map +1 -0
  567. package/dist/config/index.d.ts +13 -0
  568. package/dist/config/index.d.ts.map +1 -0
  569. package/dist/config/index.js +20 -0
  570. package/dist/config/index.js.map +1 -0
  571. package/dist/config/loader.d.ts +105 -0
  572. package/dist/config/loader.d.ts.map +1 -0
  573. package/dist/config/loader.js +265 -0
  574. package/dist/config/loader.js.map +1 -0
  575. package/dist/config/schemas.d.ts +89 -0
  576. package/dist/config/schemas.d.ts.map +1 -0
  577. package/dist/config/schemas.js +172 -0
  578. package/dist/config/schemas.js.map +1 -0
  579. package/dist/config/types.d.ts +32 -0
  580. package/dist/config/types.d.ts.map +1 -0
  581. package/dist/config/types.js +15 -0
  582. package/dist/config/types.js.map +1 -0
  583. package/dist/dep-sidecars.d.ts +127 -0
  584. package/dist/dep-sidecars.d.ts.map +1 -0
  585. package/dist/dep-sidecars.js +122 -0
  586. package/dist/dep-sidecars.js.map +1 -0
  587. package/dist/deploy/cloudflare-workers.d.ts +46 -0
  588. package/dist/deploy/cloudflare-workers.d.ts.map +1 -0
  589. package/dist/deploy/cloudflare-workers.js +213 -0
  590. package/dist/deploy/cloudflare-workers.js.map +1 -0
  591. package/dist/deploy/errors.d.ts +66 -0
  592. package/dist/deploy/errors.d.ts.map +1 -0
  593. package/dist/deploy/errors.js +82 -0
  594. package/dist/deploy/errors.js.map +1 -0
  595. package/dist/deploy/index.d.ts +9 -0
  596. package/dist/deploy/index.d.ts.map +1 -0
  597. package/dist/deploy/index.js +3 -0
  598. package/dist/deploy/index.js.map +1 -0
  599. package/dist/deploy/types.d.ts +162 -0
  600. package/dist/deploy/types.d.ts.map +1 -0
  601. package/dist/deploy/types.js +2 -0
  602. package/dist/deploy/types.js.map +1 -0
  603. package/dist/editor/AssetEmbeddedWidget.d.ts +3 -0
  604. package/dist/editor/AssetEmbeddedWidget.d.ts.map +1 -0
  605. package/dist/editor/AssetEmbeddedWidget.js +146 -0
  606. package/dist/editor/AssetEmbeddedWidget.js.map +1 -0
  607. package/dist/editor/mount.d.ts +12 -1
  608. package/dist/editor/mount.d.ts.map +1 -1
  609. package/dist/editor/mount.js +36 -5
  610. package/dist/editor/mount.js.map +1 -1
  611. package/dist/format.d.ts +44 -0
  612. package/dist/format.d.ts.map +1 -0
  613. package/dist/format.js +65 -0
  614. package/dist/format.js.map +1 -0
  615. package/dist/fragment-deps.d.ts +24 -0
  616. package/dist/fragment-deps.d.ts.map +1 -0
  617. package/dist/fragment-deps.js +20 -0
  618. package/dist/fragment-deps.js.map +1 -0
  619. package/dist/fragments/create.d.ts +70 -0
  620. package/dist/fragments/create.d.ts.map +1 -0
  621. package/dist/fragments/create.js +93 -0
  622. package/dist/fragments/create.js.map +1 -0
  623. package/dist/fragments/publish.d.ts +37 -0
  624. package/dist/fragments/publish.d.ts.map +1 -0
  625. package/dist/fragments/publish.js +52 -0
  626. package/dist/fragments/publish.js.map +1 -0
  627. package/dist/fragments/save.d.ts +81 -0
  628. package/dist/fragments/save.d.ts.map +1 -0
  629. package/dist/fragments/save.js +105 -0
  630. package/dist/fragments/save.js.map +1 -0
  631. package/dist/hash.d.ts +0 -6
  632. package/dist/hash.d.ts.map +1 -1
  633. package/dist/hash.js +0 -18
  634. package/dist/hash.js.map +1 -1
  635. package/dist/history-provider.d.ts.map +1 -1
  636. package/dist/history-provider.js +30 -8
  637. package/dist/history-provider.js.map +1 -1
  638. package/dist/history-recorder.d.ts +10 -6
  639. package/dist/history-recorder.d.ts.map +1 -1
  640. package/dist/history-recorder.js +13 -5
  641. package/dist/history-recorder.js.map +1 -1
  642. package/dist/history-restorer.d.ts.map +1 -1
  643. package/dist/history-restorer.js +34 -2
  644. package/dist/history-restorer.js.map +1 -1
  645. package/dist/history.d.ts +26 -8
  646. package/dist/history.d.ts.map +1 -1
  647. package/dist/hooks/audit-emitter.d.ts +73 -0
  648. package/dist/hooks/audit-emitter.d.ts.map +1 -0
  649. package/dist/hooks/audit-emitter.js +13 -0
  650. package/dist/hooks/audit-emitter.js.map +1 -0
  651. package/dist/hooks/context.d.ts +78 -0
  652. package/dist/hooks/context.d.ts.map +1 -0
  653. package/dist/hooks/context.js +56 -0
  654. package/dist/hooks/context.js.map +1 -0
  655. package/dist/hooks/contribution.d.ts +90 -0
  656. package/dist/hooks/contribution.d.ts.map +1 -0
  657. package/dist/hooks/contribution.js +2 -0
  658. package/dist/hooks/contribution.js.map +1 -0
  659. package/dist/hooks/dispatch.d.ts +30 -0
  660. package/dist/hooks/dispatch.d.ts.map +1 -0
  661. package/dist/hooks/dispatch.js +252 -0
  662. package/dist/hooks/dispatch.js.map +1 -0
  663. package/dist/hooks/errors.d.ts +100 -0
  664. package/dist/hooks/errors.d.ts.map +1 -0
  665. package/dist/hooks/errors.js +103 -0
  666. package/dist/hooks/errors.js.map +1 -0
  667. package/dist/hooks/index.d.ts +15 -0
  668. package/dist/hooks/index.d.ts.map +1 -0
  669. package/dist/hooks/index.js +6 -0
  670. package/dist/hooks/index.js.map +1 -0
  671. package/dist/hooks/registry.d.ts +53 -0
  672. package/dist/hooks/registry.d.ts.map +1 -0
  673. package/dist/hooks/registry.js +139 -0
  674. package/dist/hooks/registry.js.map +1 -0
  675. package/dist/hooks/storage.d.ts +43 -0
  676. package/dist/hooks/storage.d.ts.map +1 -0
  677. package/dist/hooks/storage.js +2 -0
  678. package/dist/hooks/storage.js.map +1 -0
  679. package/dist/hooks/types.d.ts +324 -0
  680. package/dist/hooks/types.d.ts.map +1 -0
  681. package/dist/hooks/types.js +2 -0
  682. package/dist/hooks/types.js.map +1 -0
  683. package/dist/index.d.ts +27 -9
  684. package/dist/index.d.ts.map +1 -1
  685. package/dist/index.js +50 -7
  686. package/dist/index.js.map +1 -1
  687. package/dist/locale.d.ts +25 -1
  688. package/dist/locale.d.ts.map +1 -1
  689. package/dist/locale.js +44 -2
  690. package/dist/locale.js.map +1 -1
  691. package/dist/manifest-save.d.ts +255 -0
  692. package/dist/manifest-save.d.ts.map +1 -0
  693. package/dist/manifest-save.js +260 -0
  694. package/dist/manifest-save.js.map +1 -0
  695. package/dist/manifest.d.ts +1 -2
  696. package/dist/manifest.d.ts.map +1 -1
  697. package/dist/manifest.js +43 -44
  698. package/dist/manifest.js.map +1 -1
  699. package/dist/node-floor.d.ts +3 -0
  700. package/dist/node-floor.d.ts.map +1 -0
  701. package/dist/node-floor.js +3 -0
  702. package/dist/node-floor.js.map +1 -0
  703. package/dist/pages/create.d.ts +103 -0
  704. package/dist/pages/create.d.ts.map +1 -0
  705. package/dist/pages/create.js +117 -0
  706. package/dist/pages/create.js.map +1 -0
  707. package/dist/pages/publish.d.ts +59 -0
  708. package/dist/pages/publish.d.ts.map +1 -0
  709. package/dist/pages/publish.js +78 -0
  710. package/dist/pages/publish.js.map +1 -0
  711. package/dist/pages/save.d.ts +97 -0
  712. package/dist/pages/save.d.ts.map +1 -0
  713. package/dist/pages/save.js +138 -0
  714. package/dist/pages/save.js.map +1 -0
  715. package/dist/providers/_atomic-write.d.ts +9 -0
  716. package/dist/providers/_atomic-write.d.ts.map +1 -0
  717. package/dist/providers/_atomic-write.js +72 -0
  718. package/dist/providers/_atomic-write.js.map +1 -0
  719. package/dist/providers/_rm-ignore-missing.d.ts +31 -0
  720. package/dist/providers/_rm-ignore-missing.d.ts.map +1 -0
  721. package/dist/providers/_rm-ignore-missing.js +12 -0
  722. package/dist/providers/_rm-ignore-missing.js.map +1 -0
  723. package/dist/providers/_stream-interop.d.ts +23 -0
  724. package/dist/providers/_stream-interop.d.ts.map +1 -0
  725. package/dist/providers/_stream-interop.js +21 -0
  726. package/dist/providers/_stream-interop.js.map +1 -0
  727. package/dist/providers/azure-blob.d.ts.map +1 -1
  728. package/dist/providers/azure-blob.js +60 -0
  729. package/dist/providers/azure-blob.js.map +1 -1
  730. package/dist/providers/factories.d.ts +65 -0
  731. package/dist/providers/factories.d.ts.map +1 -0
  732. package/dist/providers/factories.js +189 -0
  733. package/dist/providers/factories.js.map +1 -0
  734. package/dist/providers/filesystem.d.ts +4 -0
  735. package/dist/providers/filesystem.d.ts.map +1 -1
  736. package/dist/providers/filesystem.js +63 -2
  737. package/dist/providers/filesystem.js.map +1 -1
  738. package/dist/providers/s3.d.ts.map +1 -1
  739. package/dist/providers/s3.js +84 -1
  740. package/dist/providers/s3.js.map +1 -1
  741. package/dist/publish-item.d.ts +225 -0
  742. package/dist/publish-item.d.ts.map +1 -0
  743. package/dist/publish-item.js +210 -0
  744. package/dist/publish-item.js.map +1 -0
  745. package/dist/publish-rendered.d.ts +37 -17
  746. package/dist/publish-rendered.d.ts.map +1 -1
  747. package/dist/publish-rendered.js +144 -71
  748. package/dist/publish-rendered.js.map +1 -1
  749. package/dist/publish-renderers.d.ts +132 -0
  750. package/dist/publish-renderers.d.ts.map +1 -0
  751. package/dist/publish-renderers.js +240 -0
  752. package/dist/publish-renderers.js.map +1 -0
  753. package/dist/publish-run.d.ts +223 -0
  754. package/dist/publish-run.d.ts.map +1 -0
  755. package/dist/publish-run.js +307 -0
  756. package/dist/publish-run.js.map +1 -0
  757. package/dist/publish.d.ts +13 -12
  758. package/dist/publish.d.ts.map +1 -1
  759. package/dist/publish.js +24 -57
  760. package/dist/publish.js.map +1 -1
  761. package/dist/render-for-analysis.d.ts +24 -0
  762. package/dist/render-for-analysis.d.ts.map +1 -0
  763. package/dist/render-for-analysis.js +146 -0
  764. package/dist/render-for-analysis.js.map +1 -0
  765. package/dist/resolver.d.ts +12 -2
  766. package/dist/resolver.d.ts.map +1 -1
  767. package/dist/resolver.js +101 -32
  768. package/dist/resolver.js.map +1 -1
  769. package/dist/runtime/archive-marker.d.ts +62 -0
  770. package/dist/runtime/archive-marker.d.ts.map +1 -0
  771. package/dist/runtime/archive-marker.js +88 -0
  772. package/dist/runtime/archive-marker.js.map +1 -0
  773. package/dist/runtime/capability-gap-warnings.d.ts +42 -0
  774. package/dist/runtime/capability-gap-warnings.d.ts.map +1 -0
  775. package/dist/runtime/capability-gap-warnings.js +28 -0
  776. package/dist/runtime/capability-gap-warnings.js.map +1 -0
  777. package/dist/runtime/redirects-emit.d.ts +93 -0
  778. package/dist/runtime/redirects-emit.d.ts.map +1 -0
  779. package/dist/runtime/redirects-emit.js +89 -0
  780. package/dist/runtime/redirects-emit.js.map +1 -0
  781. package/dist/runtime/runtime-capabilities.d.ts +79 -0
  782. package/dist/runtime/runtime-capabilities.d.ts.map +1 -0
  783. package/dist/runtime/runtime-capabilities.js +60 -0
  784. package/dist/runtime/runtime-capabilities.js.map +1 -0
  785. package/dist/save-etag.d.ts +69 -0
  786. package/dist/save-etag.d.ts.map +1 -0
  787. package/dist/save-etag.js +118 -0
  788. package/dist/save-etag.js.map +1 -0
  789. package/dist/schema/dimensions.d.ts +78 -0
  790. package/dist/schema/dimensions.d.ts.map +1 -0
  791. package/dist/schema/dimensions.js +97 -0
  792. package/dist/schema/dimensions.js.map +1 -0
  793. package/dist/schema/helpers.d.ts +108 -0
  794. package/dist/schema/helpers.d.ts.map +1 -0
  795. package/dist/schema/helpers.js +133 -0
  796. package/dist/schema/helpers.js.map +1 -0
  797. package/dist/schema/index.d.ts +27 -0
  798. package/dist/schema/index.d.ts.map +1 -0
  799. package/dist/schema/index.js +25 -0
  800. package/dist/schema/index.js.map +1 -0
  801. package/dist/schema/types.d.ts +390 -0
  802. package/dist/schema/types.d.ts.map +1 -0
  803. package/dist/schema/types.js +25 -0
  804. package/dist/schema/types.js.map +1 -0
  805. package/dist/selector-chain.d.ts +63 -0
  806. package/dist/selector-chain.d.ts.map +1 -0
  807. package/dist/selector-chain.js +58 -0
  808. package/dist/selector-chain.js.map +1 -0
  809. package/dist/sidecars.d.ts +19 -18
  810. package/dist/sidecars.d.ts.map +1 -1
  811. package/dist/sidecars.js +70 -62
  812. package/dist/sidecars.js.map +1 -1
  813. package/dist/site-loader.d.ts +42 -4
  814. package/dist/site-loader.d.ts.map +1 -1
  815. package/dist/site-loader.js +27 -8
  816. package/dist/site-loader.js.map +1 -1
  817. package/dist/targets.d.ts +21 -12
  818. package/dist/targets.d.ts.map +1 -1
  819. package/dist/targets.js +27 -117
  820. package/dist/targets.js.map +1 -1
  821. package/dist/testing/admin-cache-contract.d.ts +52 -0
  822. package/dist/testing/admin-cache-contract.d.ts.map +1 -0
  823. package/dist/testing/admin-cache-contract.js +203 -0
  824. package/dist/testing/admin-cache-contract.js.map +1 -0
  825. package/dist/testing/index.d.ts +11 -0
  826. package/dist/testing/index.d.ts.map +1 -0
  827. package/dist/testing/index.js +11 -0
  828. package/dist/testing/index.js.map +1 -0
  829. package/dist/themes.d.ts +69 -0
  830. package/dist/themes.d.ts.map +1 -0
  831. package/dist/themes.js +85 -0
  832. package/dist/themes.js.map +1 -0
  833. package/dist/transforms/adapter.d.ts +115 -0
  834. package/dist/transforms/adapter.d.ts.map +1 -0
  835. package/dist/transforms/adapter.js +2 -0
  836. package/dist/transforms/adapter.js.map +1 -0
  837. package/dist/transforms/cloudflare.d.ts +17 -0
  838. package/dist/transforms/cloudflare.d.ts.map +1 -0
  839. package/dist/transforms/cloudflare.js +110 -0
  840. package/dist/transforms/cloudflare.js.map +1 -0
  841. package/dist/transforms/factories.d.ts +16 -0
  842. package/dist/transforms/factories.d.ts.map +1 -0
  843. package/dist/transforms/factories.js +18 -0
  844. package/dist/transforms/factories.js.map +1 -0
  845. package/dist/transforms/index.d.ts +17 -0
  846. package/dist/transforms/index.d.ts.map +1 -0
  847. package/dist/transforms/index.js +6 -0
  848. package/dist/transforms/index.js.map +1 -0
  849. package/dist/transforms/sharp.d.ts +17 -0
  850. package/dist/transforms/sharp.d.ts.map +1 -0
  851. package/dist/transforms/sharp.js +57 -0
  852. package/dist/transforms/sharp.js.map +1 -0
  853. package/dist/types.d.ts +485 -34
  854. package/dist/types.d.ts.map +1 -1
  855. package/dist/types.js +20 -1
  856. package/dist/types.js.map +1 -1
  857. package/dist/validation/alt-required-walker.d.ts +27 -0
  858. package/dist/validation/alt-required-walker.d.ts.map +1 -0
  859. package/dist/validation/alt-required-walker.js +108 -0
  860. package/dist/validation/alt-required-walker.js.map +1 -0
  861. package/dist/validation/default-registry.d.ts +12 -0
  862. package/dist/validation/default-registry.d.ts.map +1 -0
  863. package/dist/validation/default-registry.js +55 -0
  864. package/dist/validation/default-registry.js.map +1 -0
  865. package/dist/validation/publish-audit.d.ts +44 -0
  866. package/dist/validation/publish-audit.d.ts.map +1 -0
  867. package/dist/validation/publish-audit.js +64 -0
  868. package/dist/validation/publish-audit.js.map +1 -0
  869. package/dist/validation/registry.d.ts +23 -0
  870. package/dist/validation/registry.d.ts.map +1 -0
  871. package/dist/validation/registry.js +15 -0
  872. package/dist/validation/registry.js.map +1 -0
  873. package/dist/validation/save-delta.d.ts +46 -0
  874. package/dist/validation/save-delta.d.ts.map +1 -0
  875. package/dist/validation/save-delta.js +57 -0
  876. package/dist/validation/save-delta.js.map +1 -0
  877. package/dist/validation/scanner.d.ts +91 -0
  878. package/dist/validation/scanner.d.ts.map +1 -0
  879. package/dist/validation/scanner.js +327 -0
  880. package/dist/validation/scanner.js.map +1 -0
  881. package/dist/validation/template-impact.d.ts +52 -0
  882. package/dist/validation/template-impact.d.ts.map +1 -0
  883. package/dist/validation/template-impact.js +53 -0
  884. package/dist/validation/template-impact.js.map +1 -0
  885. package/dist/validation/types.d.ts +123 -0
  886. package/dist/validation/types.d.ts.map +1 -0
  887. package/dist/validation/types.js +7 -0
  888. package/dist/validation/types.js.map +1 -0
  889. package/dist/validation/validators/accessibility.d.ts +3 -0
  890. package/dist/validation/validators/accessibility.d.ts.map +1 -0
  891. package/dist/validation/validators/accessibility.js +106 -0
  892. package/dist/validation/validators/accessibility.js.map +1 -0
  893. package/dist/validation/validators/aliasof-points-to-archived.d.ts +40 -0
  894. package/dist/validation/validators/aliasof-points-to-archived.d.ts.map +1 -0
  895. package/dist/validation/validators/aliasof-points-to-archived.js +34 -0
  896. package/dist/validation/validators/aliasof-points-to-archived.js.map +1 -0
  897. package/dist/validation/validators/alt-required.d.ts +3 -0
  898. package/dist/validation/validators/alt-required.d.ts.map +1 -0
  899. package/dist/validation/validators/alt-required.js +118 -0
  900. package/dist/validation/validators/alt-required.js.map +1 -0
  901. package/dist/validation/validators/archive-not-supported-on-target.d.ts +3 -0
  902. package/dist/validation/validators/archive-not-supported-on-target.d.ts.map +1 -0
  903. package/dist/validation/validators/archive-not-supported-on-target.js +38 -0
  904. package/dist/validation/validators/archive-not-supported-on-target.js.map +1 -0
  905. package/dist/validation/validators/broken-links.d.ts +3 -0
  906. package/dist/validation/validators/broken-links.d.ts.map +1 -0
  907. package/dist/validation/validators/broken-links.js +190 -0
  908. package/dist/validation/validators/broken-links.js.map +1 -0
  909. package/dist/validation/validators/circular-alias.d.ts +36 -0
  910. package/dist/validation/validators/circular-alias.d.ts.map +1 -0
  911. package/dist/validation/validators/circular-alias.js +63 -0
  912. package/dist/validation/validators/circular-alias.js.map +1 -0
  913. package/dist/validation/validators/circular-fragment.d.ts +15 -0
  914. package/dist/validation/validators/circular-fragment.d.ts.map +1 -0
  915. package/dist/validation/validators/circular-fragment.js +97 -0
  916. package/dist/validation/validators/circular-fragment.js.map +1 -0
  917. package/dist/validation/validators/dangling-alias.d.ts +38 -0
  918. package/dist/validation/validators/dangling-alias.d.ts.map +1 -0
  919. package/dist/validation/validators/dangling-alias.js +31 -0
  920. package/dist/validation/validators/dangling-alias.js.map +1 -0
  921. package/dist/validation/validators/deploy-target-type-supported.d.ts +3 -0
  922. package/dist/validation/validators/deploy-target-type-supported.d.ts.map +1 -0
  923. package/dist/validation/validators/deploy-target-type-supported.js +32 -0
  924. package/dist/validation/validators/deploy-target-type-supported.js.map +1 -0
  925. package/dist/validation/validators/dynamic-route-conflict.d.ts +18 -0
  926. package/dist/validation/validators/dynamic-route-conflict.d.ts.map +1 -0
  927. package/dist/validation/validators/dynamic-route-conflict.js +80 -0
  928. package/dist/validation/validators/dynamic-route-conflict.js.map +1 -0
  929. package/dist/validation/validators/html-validity.d.ts +3 -0
  930. package/dist/validation/validators/html-validity.d.ts.map +1 -0
  931. package/dist/validation/validators/html-validity.js +89 -0
  932. package/dist/validation/validators/html-validity.js.map +1 -0
  933. package/dist/validation/validators/orphaned-locale-file.d.ts +21 -0
  934. package/dist/validation/validators/orphaned-locale-file.d.ts.map +1 -0
  935. package/dist/validation/validators/orphaned-locale-file.js +84 -0
  936. package/dist/validation/validators/orphaned-locale-file.js.map +1 -0
  937. package/dist/validation/validators/referenced-archived-without-alias.d.ts +3 -0
  938. package/dist/validation/validators/referenced-archived-without-alias.d.ts.map +1 -0
  939. package/dist/validation/validators/referenced-archived-without-alias.js +65 -0
  940. package/dist/validation/validators/referenced-archived-without-alias.js.map +1 -0
  941. package/dist/validation/validators/referenced-asset-exists.d.ts +13 -0
  942. package/dist/validation/validators/referenced-asset-exists.d.ts.map +1 -0
  943. package/dist/validation/validators/referenced-asset-exists.js +80 -0
  944. package/dist/validation/validators/referenced-asset-exists.js.map +1 -0
  945. package/dist/validation/validators/referenced-fragment-exists.d.ts +9 -0
  946. package/dist/validation/validators/referenced-fragment-exists.d.ts.map +1 -0
  947. package/dist/validation/validators/referenced-fragment-exists.js +52 -0
  948. package/dist/validation/validators/referenced-fragment-exists.js.map +1 -0
  949. package/dist/validation/validators/referenced-template-exists.d.ts +10 -0
  950. package/dist/validation/validators/referenced-template-exists.d.ts.map +1 -0
  951. package/dist/validation/validators/referenced-template-exists.js +74 -0
  952. package/dist/validation/validators/referenced-template-exists.js.map +1 -0
  953. package/dist/validation/validators/schema-conformance.d.ts +17 -0
  954. package/dist/validation/validators/schema-conformance.d.ts.map +1 -0
  955. package/dist/validation/validators/schema-conformance.js +94 -0
  956. package/dist/validation/validators/schema-conformance.js.map +1 -0
  957. package/dist/validation/validators/target-deploy-coverage.d.ts +3 -0
  958. package/dist/validation/validators/target-deploy-coverage.d.ts.map +1 -0
  959. package/dist/validation/validators/target-deploy-coverage.js +37 -0
  960. package/dist/validation/validators/target-deploy-coverage.js.map +1 -0
  961. package/dist/validation/validators/unused-fragment.d.ts +16 -0
  962. package/dist/validation/validators/unused-fragment.d.ts.map +1 -0
  963. package/dist/validation/validators/unused-fragment.js +86 -0
  964. package/dist/validation/validators/unused-fragment.js.map +1 -0
  965. package/package.json +69 -27
  966. package/admin-dist/assets/index-B6pVot0Y.css +0 -1
  967. package/admin-dist/assets/index-DniLwxJA.js +0 -609
  968. package/admin-dist/assets/rolldown-runtime-COnpUsM8.js +0 -1
  969. package/admin-dist/assets/vendor-rjsf-HKBAjOmQ.js +0 -32
  970. package/admin-dist/assets/vendor-tiptap-IyO99U4R.js +0 -142
  971. package/admin-dist/assets/vendor-vue-D3wBSmDf.js +0 -1
  972. package/dist/providers/r2.d.ts +0 -8
  973. package/dist/providers/r2.d.ts.map +0 -1
  974. package/dist/providers/r2.js +0 -86
  975. package/dist/providers/r2.js.map +0 -1
  976. package/dist/publish-locale.d.ts +0 -44
  977. package/dist/publish-locale.d.ts.map +0 -1
  978. package/dist/publish-locale.js +0 -103
  979. package/dist/publish-locale.js.map +0 -1
  980. package/dist/source-sidecars.d.ts +0 -32
  981. package/dist/source-sidecars.d.ts.map +0 -1
  982. package/dist/source-sidecars.js +0 -98
  983. package/dist/source-sidecars.js.map +0 -1
@@ -0,0 +1,60 @@
1
+ import { applyDepDiff, rebuildItemDeps, readDepsFor, } from './dep-sidecars.js';
2
+ /**
3
+ * The archive-aliases relation.
4
+ *
5
+ * Extracts the alias target from a manifest. The set is at most
6
+ * one element — Q3 flatten guarantees one-hop aliases. A live
7
+ * manifest (or an archived-without-alias manifest) yields the
8
+ * empty set, which means no sidecars are written for it.
9
+ */
10
+ export const ARCHIVE_ALIASES = {
11
+ rootName: 'alias-targets',
12
+ extract: (manifest) => {
13
+ // Cast: ComponentManifest is the full shape; ManifestLike is
14
+ // the dep-sidecars module's loose type. The `archived` and
15
+ // `aliasOf` fields aren't part of `ManifestLike`'s declaration,
16
+ // so the cast names what we're looking at.
17
+ const m = manifest;
18
+ if (m.archived !== true)
19
+ return new Set();
20
+ if (typeof m.aliasOf !== 'string' || m.aliasOf.length === 0)
21
+ return new Set();
22
+ return new Set([m.aliasOf]);
23
+ },
24
+ };
25
+ /**
26
+ * Read every archived item that aliases this target. Returns
27
+ * `ItemRef[]`; the caller maps to `(kind, name)` for error bodies
28
+ * (e.g. the purge-blocked 409 response from `design-soft-delete.md`
29
+ * Q4).
30
+ */
31
+ export function readArchivesAliasing(contentRoot, targetName) {
32
+ return readDepsFor(ARCHIVE_ALIASES, contentRoot, targetName);
33
+ }
34
+ /**
35
+ * Apply the alias-targets diff for one item's manifest change.
36
+ *
37
+ * Pass the pre-save manifest as `oldManifest` and the post-save
38
+ * manifest as `newManifest`. The diff drops sidecars for any
39
+ * removed alias targets and writes sidecars for any added targets.
40
+ *
41
+ * Cases:
42
+ * - Live → archive(aliasOf=X) : write `.gazetta/alias-targets/X/{item}`
43
+ * - Live → archive(no aliasOf) : no I/O
44
+ * - Archive(X) → archive(Y) : remove X's sidecar, write Y's
45
+ * - Archive(X) → archive(no aliasOf) : remove X's sidecar
46
+ * - Archive(X) → live : remove X's sidecar
47
+ * - Archive(X) → null (purge) : remove X's sidecar
48
+ * - Live → null (purge) : no I/O
49
+ */
50
+ export function rebuildArchiveAliases(contentRoot, item, oldManifest, newManifest) {
51
+ return rebuildItemDeps(ARCHIVE_ALIASES, contentRoot, item, oldManifest, newManifest);
52
+ }
53
+ /**
54
+ * Apply a pre-computed diff (used in tests + cases where the
55
+ * caller has the alias names already).
56
+ */
57
+ export function applyArchiveAliasesDiff(contentRoot, item, oldTargets, newTargets) {
58
+ return applyDepDiff(ARCHIVE_ALIASES, contentRoot, item, oldTargets, newTargets);
59
+ }
60
+ //# sourceMappingURL=archive-aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-aliases.js","sourceRoot":"","sources":["../src/archive-aliases.ts"],"names":[],"mappings":"AAwCA,OAAO,EAIL,YAAY,EACZ,eAAe,EACf,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,CAAC,QAAsB,EAAE,EAAE;QAClC,6DAA6D;QAC7D,2DAA2D;QAC3D,gEAAgE;QAChE,2CAA2C;QAC3C,MAAM,CAAC,GAAG,QAAsC,CAAA;QAChD,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,GAAG,EAAU,CAAA;QACjD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,EAAU,CAAA;QACrF,OAAO,IAAI,GAAG,CAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACrC,CAAC;CACF,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAwB,EAAE,UAAkB;IAC/E,OAAO,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAwB,EACxB,IAAa,EACb,WAAgC,EAChC,WAAgC;IAEhC,OAAO,eAAe,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAAwB,EACxB,IAAa,EACb,UAA+B,EAC/B,UAA+B;IAE/B,OAAO,YAAY,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AACjF,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Archive predicates + alias resolution helpers per design-soft-delete.md.
3
+ *
4
+ * Pure functions over manifest data. No I/O. The render pipeline + admin
5
+ * routes consume these instead of inlining `manifest.archived === true`
6
+ * checks (SRP — archive semantics in one place).
7
+ *
8
+ * Archive state lives on the manifest itself (Q1 lock — manifest field,
9
+ * not sidecar). Aliasing is a runtime concern — the resolver follows
10
+ * `aliasOf` for archived items with the field set; throws ARCHIVED_NO_ALIAS
11
+ * for archived items without (Q2 F1 split).
12
+ *
13
+ * Q3 flatten-on-rename guarantees aliases never point at other archives —
14
+ * one-hop only. The recursion limit + cycle detection in
15
+ * `resolveFragmentArchiveAlias` are defensive: if external manifest
16
+ * mutation produces a chain (git pull, hand edit), we still terminate.
17
+ */
18
+ import type { ComponentManifest } from './types.js';
19
+ /** True when the manifest is archived (and not a non-archived archived: false). */
20
+ export declare function isArchived(manifest: {
21
+ archived?: boolean;
22
+ }): boolean;
23
+ /**
24
+ * Returns the alias target name when the manifest is archived AND has
25
+ * `aliasOf` set; null in any other case (live manifest, or archived
26
+ * without alias).
27
+ *
28
+ * The caller distinguishes "live" from "archived without alias" via
29
+ * `isArchived(manifest)` — both states return null here, but the runtime
30
+ * behavior differs (live = render normally; archived-no-alias = throw).
31
+ */
32
+ export declare function aliasTarget(manifest: {
33
+ archived?: boolean;
34
+ aliasOf?: string;
35
+ }): string | null;
36
+ /**
37
+ * Error thrown by `resolveFragmentArchiveAlias` when an archived fragment
38
+ * has no `aliasOf` field. Caller (renderer / worker) decides UX:
39
+ *
40
+ * - Renderer: surface as render-time error (per Q2 F1 split)
41
+ * - Validator (P1): warn at save / background / pre-publish
42
+ * - Worker: emit 410 Gone on the page that referenced this fragment
43
+ *
44
+ * Distinct error class so callers can `instanceof`-check without
45
+ * pattern-matching messages.
46
+ */
47
+ export declare class ArchivedNoAliasError extends Error {
48
+ readonly fragmentName: string;
49
+ constructor(fragmentName: string, contextPath?: string);
50
+ }
51
+ /**
52
+ * Resolve a fragment ref through the alias chain. Returns the live
53
+ * fragment name to use for the actual lookup.
54
+ *
55
+ * - Live fragment → returns the original name unchanged
56
+ * - Archived fragment with `aliasOf: X` → recurses to resolve X
57
+ * - Archived fragment without `aliasOf` → throws ArchivedNoAliasError
58
+ * - Alias chain longer than MAX_ALIAS_HOPS → throws (data-corruption guard)
59
+ * - Cycle (A → B → A) → throws (data-corruption guard)
60
+ *
61
+ * The `lookupFragment` callback decouples this helper from the
62
+ * `Site.fragments` / `Site.fragmentLocales` map shape — the resolver
63
+ * passes whichever lookup strategy applies for the active locale.
64
+ *
65
+ * Returns null when the resolved name doesn't exist as a fragment
66
+ * (the caller's lookup returned null at some point in the chain) —
67
+ * caller surfaces "fragment not found" with their own context.
68
+ */
69
+ export declare function resolveFragmentArchiveAlias(fragmentName: string, lookupFragment: (name: string) => ComponentManifest | null, contextPath?: string): {
70
+ resolvedName: string;
71
+ manifest: ComponentManifest;
72
+ } | null;
73
+ //# sourceMappingURL=archive-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-helpers.d.ts","sourceRoot":"","sources":["../src/archive-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAEpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAG7F;AAED;;;;;;;;;;GAUG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;gBAEjB,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CASvD;AASD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,IAAI,EAC1D,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAkC9D"}
@@ -0,0 +1,94 @@
1
+ /** True when the manifest is archived (and not a non-archived archived: false). */
2
+ export function isArchived(manifest) {
3
+ return manifest.archived === true;
4
+ }
5
+ /**
6
+ * Returns the alias target name when the manifest is archived AND has
7
+ * `aliasOf` set; null in any other case (live manifest, or archived
8
+ * without alias).
9
+ *
10
+ * The caller distinguishes "live" from "archived without alias" via
11
+ * `isArchived(manifest)` — both states return null here, but the runtime
12
+ * behavior differs (live = render normally; archived-no-alias = throw).
13
+ */
14
+ export function aliasTarget(manifest) {
15
+ if (!isArchived(manifest))
16
+ return null;
17
+ return manifest.aliasOf ?? null;
18
+ }
19
+ /**
20
+ * Error thrown by `resolveFragmentArchiveAlias` when an archived fragment
21
+ * has no `aliasOf` field. Caller (renderer / worker) decides UX:
22
+ *
23
+ * - Renderer: surface as render-time error (per Q2 F1 split)
24
+ * - Validator (P1): warn at save / background / pre-publish
25
+ * - Worker: emit 410 Gone on the page that referenced this fragment
26
+ *
27
+ * Distinct error class so callers can `instanceof`-check without
28
+ * pattern-matching messages.
29
+ */
30
+ export class ArchivedNoAliasError extends Error {
31
+ fragmentName;
32
+ constructor(fragmentName, contextPath) {
33
+ const where = contextPath ? `\n Resolution path: ${contextPath}` : '';
34
+ super(`Fragment "@${fragmentName}" is archived without an alias. References to it cannot resolve.${where}\n` +
35
+ ` Restore the fragment, set its aliasOf, or remove the reference.`);
36
+ this.name = 'ArchivedNoAliasError';
37
+ this.fragmentName = fragmentName;
38
+ }
39
+ }
40
+ /**
41
+ * Maximum hops the alias chain may follow. Q3 flatten guarantees one,
42
+ * so we tolerate 5 to absorb data corruption (git pull, hand edit) and
43
+ * still surface a clear error if someone constructs a real chain by hand.
44
+ */
45
+ const MAX_ALIAS_HOPS = 5;
46
+ /**
47
+ * Resolve a fragment ref through the alias chain. Returns the live
48
+ * fragment name to use for the actual lookup.
49
+ *
50
+ * - Live fragment → returns the original name unchanged
51
+ * - Archived fragment with `aliasOf: X` → recurses to resolve X
52
+ * - Archived fragment without `aliasOf` → throws ArchivedNoAliasError
53
+ * - Alias chain longer than MAX_ALIAS_HOPS → throws (data-corruption guard)
54
+ * - Cycle (A → B → A) → throws (data-corruption guard)
55
+ *
56
+ * The `lookupFragment` callback decouples this helper from the
57
+ * `Site.fragments` / `Site.fragmentLocales` map shape — the resolver
58
+ * passes whichever lookup strategy applies for the active locale.
59
+ *
60
+ * Returns null when the resolved name doesn't exist as a fragment
61
+ * (the caller's lookup returned null at some point in the chain) —
62
+ * caller surfaces "fragment not found" with their own context.
63
+ */
64
+ export function resolveFragmentArchiveAlias(fragmentName, lookupFragment, contextPath) {
65
+ const visited = new Set();
66
+ let currentName = fragmentName;
67
+ for (let hop = 0; hop <= MAX_ALIAS_HOPS; hop++) {
68
+ if (visited.has(currentName)) {
69
+ const where = contextPath ? `\n Resolution path: ${contextPath}` : '';
70
+ throw new Error(`Circular fragment alias chain detected at "@${currentName}".\n` +
71
+ ` Chain: ${[...visited, currentName].map(n => `@${n}`).join(' → ')}${where}\n` +
72
+ ` Q3 flatten-on-rename should make this impossible; check for hand-edited manifests.`);
73
+ }
74
+ visited.add(currentName);
75
+ const manifest = lookupFragment(currentName);
76
+ if (!manifest)
77
+ return null;
78
+ if (!isArchived(manifest)) {
79
+ return { resolvedName: currentName, manifest };
80
+ }
81
+ // Archived; check for alias
82
+ const next = aliasTarget(manifest);
83
+ if (next === null) {
84
+ throw new ArchivedNoAliasError(currentName, contextPath);
85
+ }
86
+ currentName = next;
87
+ }
88
+ // Hop budget exhausted without landing on a live fragment.
89
+ const where = contextPath ? `\n Resolution path: ${contextPath}` : '';
90
+ throw new Error(`Fragment alias chain exceeded ${MAX_ALIAS_HOPS} hops starting from "@${fragmentName}".\n` +
91
+ ` Chain: ${[...visited].map(n => `@${n}`).join(' → ')}${where}\n` +
92
+ ` Q3 flatten-on-rename should make chains > 1 hop impossible; check for hand-edited manifests.`);
93
+ }
94
+ //# sourceMappingURL=archive-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-helpers.js","sourceRoot":"","sources":["../src/archive-helpers.ts"],"names":[],"mappings":"AAmBA,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,QAAgC;IACzD,OAAO,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAA;AACnC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,QAAkD;IAC5E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAA;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,YAAY,CAAQ;IAE7B,YAAY,YAAoB,EAAE,WAAoB;QACpD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,KAAK,CACH,cAAc,YAAY,mEAAmE,KAAK,IAAI;YACpG,mEAAmE,CACtE,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;QAClC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,CAAA;AAExB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAAoB,EACpB,cAA0D,EAC1D,WAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,WAAW,GAAG,YAAY,CAAA;IAC9B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,cAAc,EAAE,GAAG,EAAE,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACtE,MAAM,IAAI,KAAK,CACb,+CAA+C,WAAW,MAAM;gBAC9D,YAAY,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI;gBAC/E,sFAAsF,CACzF,CAAA;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAE1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;QAChD,CAAC;QACD,4BAA4B;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QAC1D,CAAC;QACD,WAAW,GAAG,IAAI,CAAA;IACpB,CAAC;IACD,2DAA2D;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE,MAAM,IAAI,KAAK,CACb,iCAAiC,cAAc,yBAAyB,YAAY,MAAM;QACxF,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI;QAClE,gGAAgG,CACnG,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { UploadAnalyzer } from './analyze.js';
2
+ export declare const audioAnalyzer: UploadAnalyzer;
3
+ //# sourceMappingURL=analyze-audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-audio.d.ts","sourceRoot":"","sources":["../../src/assets/analyze-audio.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAiC,cAAc,EAAE,MAAM,cAAc,CAAA;AAoBjF,eAAO,MAAM,aAAa,EAAE,cAuC3B,CAAA"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Audio analyzer — extracts duration via the `music-metadata` library.
3
+ *
4
+ * Single responsibility: read audio bytes, return manifest enrichment
5
+ * (`duration` in milliseconds; null when the format technically
6
+ * supports duration but the value couldn't be derived from headers).
7
+ *
8
+ * Design notes (per design-media.md):
9
+ * - Personal-metadata stripping is documented as the default for
10
+ * audio, with opt-in preservation. The analyzer reads metadata
11
+ * non-destructively here; stripping is a *byte-transform* concern
12
+ * (preprocessor surface, not analyzer). Wiring an
13
+ * `audioMetadataPreprocessor` is a v1.5 follow-up — the analyzer
14
+ * reading duration doesn't preclude future stripping.
15
+ * - No supplementary files in v1. Future waveform-image extraction
16
+ * would slot in here (`supplementaryFiles: [{ path: ...waveform.svg }]`).
17
+ * - Format-specific MIME match: MP3, WAV, FLAC, Opus, AAC, M4A, OGG.
18
+ * `music-metadata` v11+ handles all of these natively.
19
+ *
20
+ * SOLID lenses:
21
+ * - SRP: this module owns "audio bytes → duration"
22
+ * - OCP: adding waveform extraction = same module gains a
23
+ * supplementary-file output; no other module changes
24
+ * - LSP: honors the `UploadAnalyzer` contract — match + analyze
25
+ * - ISP / DIP: ingest depends on `runAnalyzers`, not on this module
26
+ */
27
+ import { parseBuffer } from 'music-metadata';
28
+ /**
29
+ * MIMEs the audio analyzer matches. Mirrors the v1 audio allowlist
30
+ * documented in design-media.md. Adding a new audio MIME here +
31
+ * `ALLOWED_MIMES` admits it; no other code changes.
32
+ */
33
+ const AUDIO_MIMES = new Set([
34
+ 'audio/mpeg', // MP3
35
+ 'audio/wav',
36
+ 'audio/x-wav',
37
+ 'audio/flac',
38
+ 'audio/x-flac',
39
+ 'audio/ogg',
40
+ 'audio/opus',
41
+ 'audio/aac',
42
+ 'audio/mp4', // M4A
43
+ 'audio/x-m4a',
44
+ ]);
45
+ export const audioAnalyzer = {
46
+ name: 'audio',
47
+ matches(mime) {
48
+ return !!mime && AUDIO_MIMES.has(mime);
49
+ },
50
+ async analyze(input) {
51
+ let durationSec;
52
+ try {
53
+ // music-metadata accepts a Buffer or Uint8Array; we already have
54
+ // the bytes from the preprocess pass.
55
+ const meta = await parseBuffer(input.bytes, { mimeType: input.mime, size: input.bytes.byteLength }, {
56
+ skipPostHeaders: true,
57
+ });
58
+ durationSec = typeof meta.format.duration === 'number' ? meta.format.duration : undefined;
59
+ }
60
+ catch {
61
+ // Malformed audio header — bail out with no enrichment. The
62
+ // upload still succeeds (the user's bytes are valid as far as
63
+ // MIME sniffing was concerned); we just couldn't extract a
64
+ // duration. A future stricter mode could throw here.
65
+ return {};
66
+ }
67
+ if (durationSec === undefined) {
68
+ // Format supports duration in principle but we couldn't extract.
69
+ // null distinguishes "not applicable" (static image, document)
70
+ // from "applicable but unknown" (corrupt header, streaming OGG
71
+ // without a length).
72
+ return { manifestPatch: { duration: null } };
73
+ }
74
+ // music-metadata returns seconds; manifest stores milliseconds
75
+ // (matching animated-image duration units, where sharp returns ms).
76
+ const durationMs = Math.round(durationSec * 1000);
77
+ return { manifestPatch: { duration: durationMs } };
78
+ },
79
+ };
80
+ //# sourceMappingURL=analyze-audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-audio.js","sourceRoot":"","sources":["../../src/assets/analyze-audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C;;;;GAIG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,YAAY,EAAE,MAAM;IACpB,WAAW;IACX,aAAa;IACb,YAAY;IACZ,cAAc;IACd,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW,EAAE,MAAM;IACnB,aAAa;CACd,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,OAAO;IACb,OAAO,CAAC,IAAI;QACV,OAAO,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,IAAI,WAA+B,CAAA;QACnC,IAAI,CAAC;YACH,iEAAiE;YACjE,sCAAsC;YACtC,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,KAAK,CAAC,KAAK,EACX,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,EACtD;gBACE,eAAe,EAAE,IAAI;aACtB,CACF,CAAA;YACD,WAAW,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;YAC5D,8DAA8D;YAC9D,2DAA2D;YAC3D,qDAAqD;YACrD,OAAO,EAAE,CAAA;QACX,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,iEAAiE;YACjE,+DAA+D;YAC/D,+DAA+D;YAC/D,qBAAqB;YACrB,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAA;QAC9C,CAAC;QAED,+DAA+D;QAC/D,oEAAoE;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;QACjD,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAA;IACpD,CAAC;CACF,CAAA"}
@@ -0,0 +1,19 @@
1
+ import type { UploadAnalyzer } from './analyze.js';
2
+ /**
3
+ * Static-image analyzer — width + height. Runs for any `image/*`
4
+ * MIME except SVG (which has its own dimension path; libvips
5
+ * sometimes mis-reports vector content).
6
+ */
7
+ export declare const staticImageAnalyzer: UploadAnalyzer;
8
+ /**
9
+ * Animated-image analyzer — `pages > 1` detection, frame count,
10
+ * duration sum, and first-frame poster extraction.
11
+ *
12
+ * Per design-media.md: animated images render as `<img>` in v1
13
+ * (no `<video>` transcoding — that requires ffmpeg). The poster
14
+ * is provided so future UI layers (lazy-load, video-style poster
15
+ * fallback) can use it; v1 templates can also render the poster
16
+ * for reduced-motion preferences.
17
+ */
18
+ export declare const animatedImageAnalyzer: UploadAnalyzer;
19
+ //# sourceMappingURL=analyze-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-image.d.ts","sourceRoot":"","sources":["../../src/assets/analyze-image.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAiC,cAAc,EAAE,MAAM,cAAc,CAAA;AASjF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAkBjC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,cA4DnC,CAAA"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Image analyzers — read final bytes, contribute manifest fields
3
+ * (and a poster file for animated content). Two analyzers behind
4
+ * the abstraction:
5
+ *
6
+ * - `staticImageAnalyzer` — extracts width + height for any image
7
+ * MIME. Always runs. Animated images also produce dimensions
8
+ * (the canvas size); they get the same width/height treatment.
9
+ * - `animatedImageAnalyzer` — runs for formats that can carry
10
+ * animation (GIF, APNG, animated WebP, animated AVIF). Reads
11
+ * `pages` + `delay[]` from sharp's metadata, sets
12
+ * `animated/frames/duration`, extracts the first frame as a
13
+ * poster PNG.
14
+ *
15
+ * Both analyzers are sharp-backed. SVG bypasses (no analyzer matches
16
+ * `image/svg+xml`) — sharp can metadata SVG via libvips, but the
17
+ * sanitizer-modified bytes are what we want characterized, and the
18
+ * existing inline `extractImageDimensions` already handles SVG dims
19
+ * correctly inside ingest. Kept separate for now; SVG could move into
20
+ * an analyzer when the dimension-extraction call site changes.
21
+ */
22
+ import sharp from 'sharp';
23
+ const ANIMATED_MIMES = new Set([
24
+ 'image/gif',
25
+ 'image/png', // APNG; sharp surfaces pages > 1 when animated
26
+ 'image/webp', // animated WebP
27
+ 'image/avif', // animated AVIF
28
+ ]);
29
+ /**
30
+ * Static-image analyzer — width + height. Runs for any `image/*`
31
+ * MIME except SVG (which has its own dimension path; libvips
32
+ * sometimes mis-reports vector content).
33
+ */
34
+ export const staticImageAnalyzer = {
35
+ name: 'static-image',
36
+ matches(mime) {
37
+ return !!mime && mime.startsWith('image/') && mime !== 'image/svg+xml';
38
+ },
39
+ async analyze(input) {
40
+ try {
41
+ const meta = await sharp(input.bytes).metadata();
42
+ const width = typeof meta.width === 'number' ? meta.width : null;
43
+ const height = typeof meta.height === 'number' ? meta.height : null;
44
+ return { manifestPatch: { width, height } };
45
+ }
46
+ catch {
47
+ // sharp couldn't decode — return null dims so downstream code
48
+ // doesn't break. This isn't a hard error: a bad image will fail
49
+ // variant generation later with a more specific message.
50
+ return { manifestPatch: { width: null, height: null } };
51
+ }
52
+ },
53
+ };
54
+ /**
55
+ * Animated-image analyzer — `pages > 1` detection, frame count,
56
+ * duration sum, and first-frame poster extraction.
57
+ *
58
+ * Per design-media.md: animated images render as `<img>` in v1
59
+ * (no `<video>` transcoding — that requires ffmpeg). The poster
60
+ * is provided so future UI layers (lazy-load, video-style poster
61
+ * fallback) can use it; v1 templates can also render the poster
62
+ * for reduced-motion preferences.
63
+ */
64
+ export const animatedImageAnalyzer = {
65
+ name: 'animated-image',
66
+ matches(mime) {
67
+ return !!mime && ANIMATED_MIMES.has(mime);
68
+ },
69
+ async analyze(input) {
70
+ let pages;
71
+ let delays;
72
+ try {
73
+ const meta = await sharp(input.bytes).metadata();
74
+ pages = typeof meta.pages === 'number' ? meta.pages : undefined;
75
+ // sharp returns delay as `number[]` per frame in milliseconds when
76
+ // animated (some encoders use 0 for "use default" — tolerate).
77
+ delays = Array.isArray(meta.delay) ? meta.delay : undefined;
78
+ }
79
+ catch {
80
+ // sharp couldn't decode — bail out. Static-image analyzer will
81
+ // also fail and we'll fall through with no manifest patch.
82
+ return {};
83
+ }
84
+ // Static (single-frame) — nothing to contribute. The static
85
+ // analyzer already sets width/height; this analyzer skips when
86
+ // there's no animation to describe.
87
+ if (!pages || pages <= 1)
88
+ return {};
89
+ // Animated. Compute total duration (sum of frame delays).
90
+ const duration = delays ? delays.reduce((sum, d) => sum + d, 0) : null;
91
+ const frames = pages;
92
+ // Extract first frame as a PNG poster. PNG keeps alpha lossless;
93
+ // for solid-frame GIFs the size penalty over JPEG is worth the
94
+ // simplicity (no quality knob to tune at this layer).
95
+ let posterBytes;
96
+ try {
97
+ const buf = await sharp(input.bytes, { page: 0 }).png().toBuffer();
98
+ posterBytes = new Uint8Array(buf);
99
+ }
100
+ catch {
101
+ // Poster extraction failed — return manifest fields without
102
+ // poster. Better partial enrichment than zero enrichment.
103
+ return {
104
+ manifestPatch: { animated: true, frames, duration, poster: null },
105
+ };
106
+ }
107
+ // Path is content-addressed alongside the source asset:
108
+ // {name}-{hash}-poster.png. Same-pattern as the variant ladder so
109
+ // delete/rename/path-enumeration logic finds them via filename
110
+ // glob without special-casing.
111
+ const posterPath = `${input.assetName}-${input.hash}-poster.png`;
112
+ return {
113
+ manifestPatch: {
114
+ animated: true,
115
+ frames,
116
+ duration,
117
+ poster: posterPath,
118
+ },
119
+ supplementaryFiles: [{ path: posterPath, bytes: posterBytes }],
120
+ };
121
+ },
122
+ };
123
+ //# sourceMappingURL=analyze-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-image.js","sourceRoot":"","sources":["../../src/assets/analyze-image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,WAAW;IACX,WAAW,EAAE,+CAA+C;IAC5D,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,gBAAgB;CAC/B,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,cAAc;IACpB,OAAO,CAAC,IAAI;QACV,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,eAAe,CAAA;IACxE,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAA;YAChD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;YAChE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;YACnE,OAAO,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;YAC9D,gEAAgE;YAChE,yDAAyD;YACzD,OAAO,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAA;QACzD,CAAC;IACH,CAAC;CACF,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,IAAI,EAAE,gBAAgB;IACtB,OAAO,CAAC,IAAI;QACV,OAAO,CAAC,CAAC,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,IAAI,KAAyB,CAAA;QAC7B,IAAI,MAA4B,CAAA;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAA;YAChD,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;YAC/D,mEAAmE;YACnE,+DAA+D;YAC/D,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,2DAA2D;YAC3D,OAAO,EAAE,CAAA;QACX,CAAC;QAED,4DAA4D;QAC5D,+DAA+D;QAC/D,oCAAoC;QACpC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QAEnC,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACtE,MAAM,MAAM,GAAG,KAAK,CAAA;QAEpB,iEAAiE;QACjE,+DAA+D;QAC/D,sDAAsD;QACtD,IAAI,WAAuB,CAAA;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;YAClE,WAAW,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;YAC5D,0DAA0D;YAC1D,OAAO;gBACL,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;aAClE,CAAA;QACH,CAAC;QAED,wDAAwD;QACxD,kEAAkE;QAClE,+DAA+D;QAC/D,+BAA+B;QAC/B,MAAM,UAAU,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,aAAa,CAAA;QAEhE,OAAO;YACL,aAAa,EAAE;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM;gBACN,QAAQ;gBACR,MAAM,EAAE,UAAU;aACnB;YACD,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;SAC/D,CAAA;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Manifest fields an analyzer is allowed to set. Subset of
3
+ * `AssetManifest` — analyzers can't change identity (`name`, `kind`,
4
+ * `source`, `mime`, `hash`, `size`) or audit (`uploadedAt`,
5
+ * `uploadedBy`). They contribute *characterization* fields:
6
+ * dimensions, animation flags, duration, poster URL, focal point if
7
+ * extractable from EXIF, etc.
8
+ *
9
+ * Listed explicitly (rather than `Partial<AssetManifest>`) so the
10
+ * type system catches an analyzer that tries to override identity
11
+ * fields by accident.
12
+ */
13
+ export interface ManifestEnrichment {
14
+ /** Width in pixels — null for non-image formats. */
15
+ width?: number | null;
16
+ /** Height in pixels — null for non-image formats. */
17
+ height?: number | null;
18
+ /** Multi-frame indicator (GIF, APNG, animated WebP/AVIF). */
19
+ animated?: boolean;
20
+ /** Frame count for animated content (≥ 1). */
21
+ frames?: number;
22
+ /** Duration in milliseconds — animated images, video, audio. */
23
+ duration?: number | null;
24
+ /** Relative path to the poster bytes (under assetsRoot). */
25
+ poster?: string | null;
26
+ }
27
+ /**
28
+ * A supplementary file the analyzer wants written alongside the
29
+ * primary asset bytes (and in the manifest's enrichment, where
30
+ * relevant via `poster`/etc. paths). The runner adds these to the
31
+ * write plan so they participate in atomic-rollback.
32
+ */
33
+ export interface SupplementaryFile {
34
+ /** Path relative to `assetsRoot` — e.g. `hero-{hash}-poster.png`. */
35
+ path: string;
36
+ /** Bytes to write. */
37
+ bytes: Uint8Array;
38
+ }
39
+ export interface AnalysisResult {
40
+ /**
41
+ * Fields to merge into the manifest. The runner validates that no
42
+ * forbidden field is set; analyzers that try to set identity
43
+ * fields are rejected at the type level (the interface excludes
44
+ * them).
45
+ */
46
+ manifestPatch?: ManifestEnrichment;
47
+ /** Supplementary byte files to write. */
48
+ supplementaryFiles?: readonly SupplementaryFile[];
49
+ }
50
+ /**
51
+ * One format's analysis contract. Implementations are async (sharp
52
+ * I/O is async) but otherwise pure — no storage access, no manifest
53
+ * writing, no logging. The runner orchestrates side effects.
54
+ *
55
+ * `assetName` and `hash` are passed in so analyzers that produce
56
+ * supplementary files can name them deterministically (e.g.
57
+ * `{name}-{hash}-poster.png`).
58
+ */
59
+ export interface UploadAnalyzer {
60
+ /** Stable identifier for diagnostics (`'animated-image'`, `'audio'`). */
61
+ readonly name: string;
62
+ /** Whether this analyzer applies to the given MIME. */
63
+ matches(mime: string | null): boolean;
64
+ /**
65
+ * Read the bytes; return manifest enrichment + supplementary files.
66
+ * Throw on malformed input — runner wraps in a typed error.
67
+ */
68
+ analyze(input: AnalyzerInput): Promise<AnalysisResult>;
69
+ }
70
+ export interface AnalyzerInput {
71
+ /** Final, post-preprocess bytes. */
72
+ bytes: Uint8Array;
73
+ /** Asset name (canonical, no extension). For supplementary file paths. */
74
+ assetName: string;
75
+ /** Asset hash. For supplementary file paths. */
76
+ hash: string;
77
+ /** Source extension (`jpg`, `png`, `gif`, ...). For format-specific decisions. */
78
+ ext: string;
79
+ /** Sniffed MIME — analyzers don't need to re-sniff. */
80
+ mime: string;
81
+ }
82
+ export declare const defaultAnalyzers: readonly UploadAnalyzer[];
83
+ /**
84
+ * Run the matching analyzer(s) for the given MIME. Returns the
85
+ * merged enrichment + flattened supplementary files. Pass-through
86
+ * (no enrichment, no extras) when no analyzer matches.
87
+ *
88
+ * Multiple analyzers matching the same MIME is allowed — results
89
+ * are merged (later wins on field conflicts; supplementary files
90
+ * concatenate). v1 exercises this for animated images: both static
91
+ * and animated analyzers run.
92
+ */
93
+ export declare function runAnalyzers(input: AnalyzerInput, analyzers?: readonly UploadAnalyzer[]): Promise<AnalysisResult>;
94
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/assets/analyze.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAA;IAClC,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAClD;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAA;IACrC;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,KAAK,EAAE,UAAU,CAAA;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAA;IACX,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;CACb;AAiBD,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAAgE,CAAA;AAEtH;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,aAAa,EACpB,SAAS,GAAE,SAAS,cAAc,EAAqB,GACtD,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Default analyzer registry — what ingest uses out of the box.
3
+ * Order matters when more than one matches; analyzer results
4
+ * later in the list win on field conflicts. Today's order:
5
+ * 1. `staticImageAnalyzer` — width/height for all images except SVG
6
+ * 2. `animatedImageAnalyzer` — multi-frame detection + poster
7
+ * 3. `audioAnalyzer` — duration via music-metadata
8
+ *
9
+ * Both image analyzers run for animated images (static contributes
10
+ * canvas dimensions, animated contributes animation flags + poster).
11
+ * Audio MIMEs trigger only the audio analyzer.
12
+ */
13
+ import { animatedImageAnalyzer, staticImageAnalyzer } from './analyze-image.js';
14
+ import { audioAnalyzer } from './analyze-audio.js';
15
+ export const defaultAnalyzers = [staticImageAnalyzer, animatedImageAnalyzer, audioAnalyzer];
16
+ /**
17
+ * Run the matching analyzer(s) for the given MIME. Returns the
18
+ * merged enrichment + flattened supplementary files. Pass-through
19
+ * (no enrichment, no extras) when no analyzer matches.
20
+ *
21
+ * Multiple analyzers matching the same MIME is allowed — results
22
+ * are merged (later wins on field conflicts; supplementary files
23
+ * concatenate). v1 exercises this for animated images: both static
24
+ * and animated analyzers run.
25
+ */
26
+ export async function runAnalyzers(input, analyzers = defaultAnalyzers) {
27
+ let manifestPatch;
28
+ const supplementaryFiles = [];
29
+ for (const analyzer of analyzers) {
30
+ if (!analyzer.matches(input.mime))
31
+ continue;
32
+ const result = await analyzer.analyze(input);
33
+ if (result.manifestPatch) {
34
+ manifestPatch = { ...manifestPatch, ...result.manifestPatch };
35
+ }
36
+ if (result.supplementaryFiles) {
37
+ supplementaryFiles.push(...result.supplementaryFiles);
38
+ }
39
+ }
40
+ return {
41
+ manifestPatch,
42
+ supplementaryFiles: supplementaryFiles.length > 0 ? supplementaryFiles : undefined,
43
+ };
44
+ }
45
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/assets/analyze.ts"],"names":[],"mappings":"AAgIA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAA;AAEtH;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAoB,EACpB,YAAuC,gBAAgB;IAEvD,IAAI,aAA6C,CAAA;IACjD,MAAM,kBAAkB,GAAwB,EAAE,CAAA;IAElD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;QAC/D,CAAC;QACD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,kBAAkB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa;QACb,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;KACnF,CAAA;AACH,CAAC"}