gazetta 0.5.0 → 0.7.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 (478) hide show
  1. package/admin-dist/assets/index-BO9-CXmW.css +1 -0
  2. package/admin-dist/assets/index-Ufu8zZH_.js +668 -0
  3. package/admin-dist/assets/{vendor-primevue-BnR1c_bQ.js → vendor-primevue-C0Q_YTCb.js} +330 -431
  4. package/admin-dist/assets/vendor-vue-D3wBSmDf.js +1 -0
  5. package/admin-dist/index.html +4 -4
  6. package/dist/admin-api/error-response.d.ts +21 -0
  7. package/dist/admin-api/error-response.d.ts.map +1 -0
  8. package/dist/admin-api/error-response.js +12 -0
  9. package/dist/admin-api/error-response.js.map +1 -0
  10. package/dist/admin-api/index.d.ts +19 -6
  11. package/dist/admin-api/index.d.ts.map +1 -1
  12. package/dist/admin-api/index.js +137 -21
  13. package/dist/admin-api/index.js.map +1 -1
  14. package/dist/admin-api/routes/assets.d.ts +16 -0
  15. package/dist/admin-api/routes/assets.d.ts.map +1 -0
  16. package/dist/admin-api/routes/assets.js +433 -0
  17. package/dist/admin-api/routes/assets.js.map +1 -0
  18. package/dist/admin-api/routes/compare.d.ts +2 -1
  19. package/dist/admin-api/routes/compare.d.ts.map +1 -1
  20. package/dist/admin-api/routes/compare.js +33 -24
  21. package/dist/admin-api/routes/compare.js.map +1 -1
  22. package/dist/admin-api/routes/fields.d.ts +2 -2
  23. package/dist/admin-api/routes/fields.d.ts.map +1 -1
  24. package/dist/admin-api/routes/fields.js +10 -3
  25. package/dist/admin-api/routes/fields.js.map +1 -1
  26. package/dist/admin-api/routes/fragments.d.ts +2 -3
  27. package/dist/admin-api/routes/fragments.d.ts.map +1 -1
  28. package/dist/admin-api/routes/fragments.js +120 -21
  29. package/dist/admin-api/routes/fragments.js.map +1 -1
  30. package/dist/admin-api/routes/history.d.ts +23 -0
  31. package/dist/admin-api/routes/history.d.ts.map +1 -0
  32. package/dist/admin-api/routes/history.js +143 -0
  33. package/dist/admin-api/routes/history.js.map +1 -0
  34. package/dist/admin-api/routes/pages.d.ts +2 -3
  35. package/dist/admin-api/routes/pages.d.ts.map +1 -1
  36. package/dist/admin-api/routes/pages.js +153 -22
  37. package/dist/admin-api/routes/pages.js.map +1 -1
  38. package/dist/admin-api/routes/preview.d.ts +2 -2
  39. package/dist/admin-api/routes/preview.d.ts.map +1 -1
  40. package/dist/admin-api/routes/preview.js +50 -15
  41. package/dist/admin-api/routes/preview.js.map +1 -1
  42. package/dist/admin-api/routes/publish.d.ts +2 -1
  43. package/dist/admin-api/routes/publish.d.ts.map +1 -1
  44. package/dist/admin-api/routes/publish.js +259 -79
  45. package/dist/admin-api/routes/publish.js.map +1 -1
  46. package/dist/admin-api/routes/site.d.ts +2 -2
  47. package/dist/admin-api/routes/site.d.ts.map +1 -1
  48. package/dist/admin-api/routes/site.js +27 -4
  49. package/dist/admin-api/routes/site.js.map +1 -1
  50. package/dist/admin-api/routes/templates.d.ts +2 -2
  51. package/dist/admin-api/routes/templates.d.ts.map +1 -1
  52. package/dist/admin-api/routes/templates.js +19 -9
  53. package/dist/admin-api/routes/templates.js.map +1 -1
  54. package/dist/admin-api/schemas/assets.d.ts +48 -0
  55. package/dist/admin-api/schemas/assets.d.ts.map +1 -0
  56. package/dist/admin-api/schemas/assets.js +44 -0
  57. package/dist/admin-api/schemas/assets.js.map +1 -0
  58. package/dist/admin-api/schemas/compare.d.ts +29 -0
  59. package/dist/admin-api/schemas/compare.d.ts.map +1 -0
  60. package/dist/admin-api/schemas/compare.js +30 -0
  61. package/dist/admin-api/schemas/compare.js.map +1 -0
  62. package/dist/admin-api/schemas/dependents.d.ts +15 -0
  63. package/dist/admin-api/schemas/dependents.d.ts.map +1 -0
  64. package/dist/admin-api/schemas/dependents.js +14 -0
  65. package/dist/admin-api/schemas/dependents.js.map +1 -0
  66. package/dist/admin-api/schemas/fetch.d.ts +12 -0
  67. package/dist/admin-api/schemas/fetch.d.ts.map +1 -0
  68. package/dist/admin-api/schemas/fetch.js +11 -0
  69. package/dist/admin-api/schemas/fetch.js.map +1 -0
  70. package/dist/admin-api/schemas/fields.d.ts +11 -0
  71. package/dist/admin-api/schemas/fields.d.ts.map +1 -0
  72. package/dist/admin-api/schemas/fields.js +11 -0
  73. package/dist/admin-api/schemas/fields.js.map +1 -0
  74. package/dist/admin-api/schemas/fragments.d.ts +27 -0
  75. package/dist/admin-api/schemas/fragments.d.ts.map +1 -0
  76. package/dist/admin-api/schemas/fragments.js +26 -0
  77. package/dist/admin-api/schemas/fragments.js.map +1 -0
  78. package/dist/admin-api/schemas/history.d.ts +73 -0
  79. package/dist/admin-api/schemas/history.d.ts.map +1 -0
  80. package/dist/admin-api/schemas/history.js +35 -0
  81. package/dist/admin-api/schemas/history.js.map +1 -0
  82. package/dist/admin-api/schemas/index.d.ts +34 -0
  83. package/dist/admin-api/schemas/index.d.ts.map +1 -0
  84. package/dist/admin-api/schemas/index.js +34 -0
  85. package/dist/admin-api/schemas/index.js.map +1 -0
  86. package/dist/admin-api/schemas/pages.d.ts +46 -0
  87. package/dist/admin-api/schemas/pages.d.ts.map +1 -0
  88. package/dist/admin-api/schemas/pages.js +47 -0
  89. package/dist/admin-api/schemas/pages.js.map +1 -0
  90. package/dist/admin-api/schemas/publish.d.ts +67 -0
  91. package/dist/admin-api/schemas/publish.d.ts.map +1 -0
  92. package/dist/admin-api/schemas/publish.js +60 -0
  93. package/dist/admin-api/schemas/publish.js.map +1 -0
  94. package/dist/admin-api/schemas/site.d.ts +28 -0
  95. package/dist/admin-api/schemas/site.d.ts.map +1 -0
  96. package/dist/admin-api/schemas/site.js +24 -0
  97. package/dist/admin-api/schemas/site.js.map +1 -0
  98. package/dist/admin-api/schemas/targets.d.ts +36 -0
  99. package/dist/admin-api/schemas/targets.d.ts.map +1 -0
  100. package/dist/admin-api/schemas/targets.js +19 -0
  101. package/dist/admin-api/schemas/targets.js.map +1 -0
  102. package/dist/admin-api/schemas/templates.d.ts +17 -0
  103. package/dist/admin-api/schemas/templates.d.ts.map +1 -0
  104. package/dist/admin-api/schemas/templates.js +16 -0
  105. package/dist/admin-api/schemas/templates.js.map +1 -0
  106. package/dist/admin-api/source-context.d.ts +158 -0
  107. package/dist/admin-api/source-context.d.ts.map +1 -0
  108. package/dist/admin-api/source-context.js +92 -0
  109. package/dist/admin-api/source-context.js.map +1 -0
  110. package/dist/app.js +1 -1
  111. package/dist/app.js.map +1 -1
  112. package/dist/assemble.d.ts.map +1 -1
  113. package/dist/assemble.js +4 -1
  114. package/dist/assemble.js.map +1 -1
  115. package/dist/assets/analyze-audio.d.ts +3 -0
  116. package/dist/assets/analyze-audio.d.ts.map +1 -0
  117. package/dist/assets/analyze-audio.js +80 -0
  118. package/dist/assets/analyze-audio.js.map +1 -0
  119. package/dist/assets/analyze-image.d.ts +19 -0
  120. package/dist/assets/analyze-image.d.ts.map +1 -0
  121. package/dist/assets/analyze-image.js +123 -0
  122. package/dist/assets/analyze-image.js.map +1 -0
  123. package/dist/assets/analyze.d.ts +94 -0
  124. package/dist/assets/analyze.d.ts.map +1 -0
  125. package/dist/assets/analyze.js +45 -0
  126. package/dist/assets/analyze.js.map +1 -0
  127. package/dist/assets/asset-deps.d.ts +30 -0
  128. package/dist/assets/asset-deps.d.ts.map +1 -0
  129. package/dist/assets/asset-deps.js +42 -0
  130. package/dist/assets/asset-deps.js.map +1 -0
  131. package/dist/assets/asset-paths.d.ts +155 -0
  132. package/dist/assets/asset-paths.d.ts.map +1 -0
  133. package/dist/assets/asset-paths.js +197 -0
  134. package/dist/assets/asset-paths.js.map +1 -0
  135. package/dist/assets/delete.d.ts +75 -0
  136. package/dist/assets/delete.d.ts.map +1 -0
  137. package/dist/assets/delete.js +82 -0
  138. package/dist/assets/delete.js.map +1 -0
  139. package/dist/assets/errors.d.ts +241 -0
  140. package/dist/assets/errors.d.ts.map +1 -0
  141. package/dist/assets/errors.js +300 -0
  142. package/dist/assets/errors.js.map +1 -0
  143. package/dist/assets/find-refs.d.ts +37 -0
  144. package/dist/assets/find-refs.d.ts.map +1 -0
  145. package/dist/assets/find-refs.js +35 -0
  146. package/dist/assets/find-refs.js.map +1 -0
  147. package/dist/assets/hash.d.ts +13 -0
  148. package/dist/assets/hash.d.ts.map +1 -0
  149. package/dist/assets/hash.js +43 -0
  150. package/dist/assets/hash.js.map +1 -0
  151. package/dist/assets/image-metadata.d.ts +11 -0
  152. package/dist/assets/image-metadata.d.ts.map +1 -0
  153. package/dist/assets/image-metadata.js +31 -0
  154. package/dist/assets/image-metadata.js.map +1 -0
  155. package/dist/assets/ingest-locale.d.ts +86 -0
  156. package/dist/assets/ingest-locale.d.ts.map +1 -0
  157. package/dist/assets/ingest-locale.js +209 -0
  158. package/dist/assets/ingest-locale.js.map +1 -0
  159. package/dist/assets/ingest.d.ts +96 -0
  160. package/dist/assets/ingest.d.ts.map +1 -0
  161. package/dist/assets/ingest.js +308 -0
  162. package/dist/assets/ingest.js.map +1 -0
  163. package/dist/assets/kind-compat.d.ts +34 -0
  164. package/dist/assets/kind-compat.d.ts.map +1 -0
  165. package/dist/assets/kind-compat.js +33 -0
  166. package/dist/assets/kind-compat.js.map +1 -0
  167. package/dist/assets/list.d.ts +46 -0
  168. package/dist/assets/list.d.ts.map +1 -0
  169. package/dist/assets/list.js +102 -0
  170. package/dist/assets/list.js.map +1 -0
  171. package/dist/assets/manifest-default.d.ts +56 -0
  172. package/dist/assets/manifest-default.d.ts.map +1 -0
  173. package/dist/assets/manifest-default.js +120 -0
  174. package/dist/assets/manifest-default.js.map +1 -0
  175. package/dist/assets/manifest-filename.d.ts +52 -0
  176. package/dist/assets/manifest-filename.d.ts.map +1 -0
  177. package/dist/assets/manifest-filename.js +104 -0
  178. package/dist/assets/manifest-filename.js.map +1 -0
  179. package/dist/assets/manifest-locale.d.ts +60 -0
  180. package/dist/assets/manifest-locale.d.ts.map +1 -0
  181. package/dist/assets/manifest-locale.js +206 -0
  182. package/dist/assets/manifest-locale.js.map +1 -0
  183. package/dist/assets/manifest-merge.d.ts +66 -0
  184. package/dist/assets/manifest-merge.d.ts.map +1 -0
  185. package/dist/assets/manifest-merge.js +82 -0
  186. package/dist/assets/manifest-merge.js.map +1 -0
  187. package/dist/assets/manifest.d.ts +83 -0
  188. package/dist/assets/manifest.d.ts.map +1 -0
  189. package/dist/assets/manifest.js +93 -0
  190. package/dist/assets/manifest.js.map +1 -0
  191. package/dist/assets/mime-sniff.d.ts +18 -0
  192. package/dist/assets/mime-sniff.d.ts.map +1 -0
  193. package/dist/assets/mime-sniff.js +84 -0
  194. package/dist/assets/mime-sniff.js.map +1 -0
  195. package/dist/assets/preprocess-svg.d.ts +3 -0
  196. package/dist/assets/preprocess-svg.d.ts.map +1 -0
  197. package/dist/assets/preprocess-svg.js +49 -0
  198. package/dist/assets/preprocess-svg.js.map +1 -0
  199. package/dist/assets/preprocess.d.ts +62 -0
  200. package/dist/assets/preprocess.d.ts.map +1 -0
  201. package/dist/assets/preprocess.js +86 -0
  202. package/dist/assets/preprocess.js.map +1 -0
  203. package/dist/assets/publish-plan.d.ts +41 -0
  204. package/dist/assets/publish-plan.d.ts.map +1 -0
  205. package/dist/assets/publish-plan.js +49 -0
  206. package/dist/assets/publish-plan.js.map +1 -0
  207. package/dist/assets/publish.d.ts +33 -0
  208. package/dist/assets/publish.d.ts.map +1 -0
  209. package/dist/assets/publish.js +81 -0
  210. package/dist/assets/publish.js.map +1 -0
  211. package/dist/assets/refs.d.ts +37 -0
  212. package/dist/assets/refs.d.ts.map +1 -0
  213. package/dist/assets/refs.js +33 -0
  214. package/dist/assets/refs.js.map +1 -0
  215. package/dist/assets/remove-override.d.ts +42 -0
  216. package/dist/assets/remove-override.d.ts.map +1 -0
  217. package/dist/assets/remove-override.js +53 -0
  218. package/dist/assets/remove-override.js.map +1 -0
  219. package/dist/assets/rename.d.ts +43 -0
  220. package/dist/assets/rename.d.ts.map +1 -0
  221. package/dist/assets/rename.js +271 -0
  222. package/dist/assets/rename.js.map +1 -0
  223. package/dist/assets/replace.d.ts +37 -0
  224. package/dist/assets/replace.d.ts.map +1 -0
  225. package/dist/assets/replace.js +195 -0
  226. package/dist/assets/replace.js.map +1 -0
  227. package/dist/assets/resolve.d.ts +141 -0
  228. package/dist/assets/resolve.d.ts.map +1 -0
  229. package/dist/assets/resolve.js +381 -0
  230. package/dist/assets/resolve.js.map +1 -0
  231. package/dist/assets/rewrite-manifest-asset-ref.d.ts +44 -0
  232. package/dist/assets/rewrite-manifest-asset-ref.d.ts.map +1 -0
  233. package/dist/assets/rewrite-manifest-asset-ref.js +51 -0
  234. package/dist/assets/rewrite-manifest-asset-ref.js.map +1 -0
  235. package/dist/assets/scan-manifest-for-asset.d.ts +63 -0
  236. package/dist/assets/scan-manifest-for-asset.d.ts.map +1 -0
  237. package/dist/assets/scan-manifest-for-asset.js +105 -0
  238. package/dist/assets/scan-manifest-for-asset.js.map +1 -0
  239. package/dist/assets/serve-route.d.ts +45 -0
  240. package/dist/assets/serve-route.d.ts.map +1 -0
  241. package/dist/assets/serve-route.js +123 -0
  242. package/dist/assets/serve-route.js.map +1 -0
  243. package/dist/assets/svg-sanitize.d.ts +38 -0
  244. package/dist/assets/svg-sanitize.d.ts.map +1 -0
  245. package/dist/assets/svg-sanitize.js +209 -0
  246. package/dist/assets/svg-sanitize.js.map +1 -0
  247. package/dist/assets/update-metadata.d.ts +61 -0
  248. package/dist/assets/update-metadata.d.ts.map +1 -0
  249. package/dist/assets/update-metadata.js +82 -0
  250. package/dist/assets/update-metadata.js.map +1 -0
  251. package/dist/assets/url.d.ts +82 -0
  252. package/dist/assets/url.d.ts.map +1 -0
  253. package/dist/assets/url.js +103 -0
  254. package/dist/assets/url.js.map +1 -0
  255. package/dist/assets/validate.d.ts +74 -0
  256. package/dist/assets/validate.d.ts.map +1 -0
  257. package/dist/assets/validate.js +136 -0
  258. package/dist/assets/validate.js.map +1 -0
  259. package/dist/assets/variants.d.ts +23 -0
  260. package/dist/assets/variants.d.ts.map +1 -0
  261. package/dist/assets/variants.js +74 -0
  262. package/dist/assets/variants.js.map +1 -0
  263. package/dist/cli/assets-cli.d.ts +58 -0
  264. package/dist/cli/assets-cli.d.ts.map +1 -0
  265. package/dist/cli/assets-cli.js +233 -0
  266. package/dist/cli/assets-cli.js.map +1 -0
  267. package/dist/cli/assets-display.d.ts +112 -0
  268. package/dist/cli/assets-display.d.ts.map +1 -0
  269. package/dist/cli/assets-display.js +106 -0
  270. package/dist/cli/assets-display.js.map +1 -0
  271. package/dist/cli/bootstrap.d.ts +46 -0
  272. package/dist/cli/bootstrap.d.ts.map +1 -0
  273. package/dist/cli/bootstrap.js +84 -0
  274. package/dist/cli/bootstrap.js.map +1 -0
  275. package/dist/cli/history.d.ts +45 -0
  276. package/dist/cli/history.d.ts.map +1 -0
  277. package/dist/cli/history.js +165 -0
  278. package/dist/cli/history.js.map +1 -0
  279. package/dist/cli/index.js +689 -128
  280. package/dist/cli/index.js.map +1 -1
  281. package/dist/compare.d.ts +8 -5
  282. package/dist/compare.d.ts.map +1 -1
  283. package/dist/compare.js +62 -20
  284. package/dist/compare.js.map +1 -1
  285. package/dist/content-root.d.ts +38 -0
  286. package/dist/content-root.d.ts.map +1 -0
  287. package/dist/content-root.js +29 -0
  288. package/dist/content-root.js.map +1 -0
  289. package/dist/dep-sidecars.d.ts +127 -0
  290. package/dist/dep-sidecars.d.ts.map +1 -0
  291. package/dist/dep-sidecars.js +122 -0
  292. package/dist/dep-sidecars.js.map +1 -0
  293. package/dist/editor/AssetEmbeddedWidget.d.ts +3 -0
  294. package/dist/editor/AssetEmbeddedWidget.d.ts.map +1 -0
  295. package/dist/editor/AssetEmbeddedWidget.js +146 -0
  296. package/dist/editor/AssetEmbeddedWidget.js.map +1 -0
  297. package/dist/editor/mount.d.ts +12 -1
  298. package/dist/editor/mount.d.ts.map +1 -1
  299. package/dist/editor/mount.js +96 -33
  300. package/dist/editor/mount.js.map +1 -1
  301. package/dist/format.d.ts +44 -0
  302. package/dist/format.d.ts.map +1 -0
  303. package/dist/format.js +65 -0
  304. package/dist/format.js.map +1 -0
  305. package/dist/fragment-deps.d.ts +24 -0
  306. package/dist/fragment-deps.d.ts.map +1 -0
  307. package/dist/fragment-deps.js +20 -0
  308. package/dist/fragment-deps.js.map +1 -0
  309. package/dist/hash.d.ts +34 -9
  310. package/dist/hash.d.ts.map +1 -1
  311. package/dist/hash.js +60 -21
  312. package/dist/hash.js.map +1 -1
  313. package/dist/history-provider.d.ts +49 -0
  314. package/dist/history-provider.d.ts.map +1 -0
  315. package/dist/history-provider.js +248 -0
  316. package/dist/history-provider.js.map +1 -0
  317. package/dist/history-recorder.d.ts +102 -0
  318. package/dist/history-recorder.d.ts.map +1 -0
  319. package/dist/history-recorder.js +168 -0
  320. package/dist/history-recorder.js.map +1 -0
  321. package/dist/history-restorer.d.ts +46 -0
  322. package/dist/history-restorer.d.ts.map +1 -0
  323. package/dist/history-restorer.js +137 -0
  324. package/dist/history-restorer.js.map +1 -0
  325. package/dist/history.d.ts +129 -0
  326. package/dist/history.d.ts.map +1 -0
  327. package/dist/history.js +25 -0
  328. package/dist/history.js.map +1 -0
  329. package/dist/index.d.ts +27 -7
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +16 -4
  332. package/dist/index.js.map +1 -1
  333. package/dist/locale.d.ts +94 -0
  334. package/dist/locale.d.ts.map +1 -0
  335. package/dist/locale.js +188 -0
  336. package/dist/locale.js.map +1 -0
  337. package/dist/manifest.d.ts.map +1 -1
  338. package/dist/manifest.js +16 -1
  339. package/dist/manifest.js.map +1 -1
  340. package/dist/providers/_atomic-write.d.ts +9 -0
  341. package/dist/providers/_atomic-write.d.ts.map +1 -0
  342. package/dist/providers/_atomic-write.js +72 -0
  343. package/dist/providers/_atomic-write.js.map +1 -0
  344. package/dist/providers/_rm-ignore-missing.d.ts +31 -0
  345. package/dist/providers/_rm-ignore-missing.d.ts.map +1 -0
  346. package/dist/providers/_rm-ignore-missing.js +12 -0
  347. package/dist/providers/_rm-ignore-missing.js.map +1 -0
  348. package/dist/providers/_stream-interop.d.ts +23 -0
  349. package/dist/providers/_stream-interop.d.ts.map +1 -0
  350. package/dist/providers/_stream-interop.js +21 -0
  351. package/dist/providers/_stream-interop.js.map +1 -0
  352. package/dist/providers/azure-blob.d.ts.map +1 -1
  353. package/dist/providers/azure-blob.js +60 -0
  354. package/dist/providers/azure-blob.js.map +1 -1
  355. package/dist/providers/filesystem.d.ts +4 -0
  356. package/dist/providers/filesystem.d.ts.map +1 -1
  357. package/dist/providers/filesystem.js +63 -2
  358. package/dist/providers/filesystem.js.map +1 -1
  359. package/dist/providers/s3.d.ts.map +1 -1
  360. package/dist/providers/s3.js +107 -16
  361. package/dist/providers/s3.js.map +1 -1
  362. package/dist/publish-locale.d.ts +44 -0
  363. package/dist/publish-locale.d.ts.map +1 -0
  364. package/dist/publish-locale.js +103 -0
  365. package/dist/publish-locale.js.map +1 -0
  366. package/dist/publish-rendered.d.ts +52 -21
  367. package/dist/publish-rendered.d.ts.map +1 -1
  368. package/dist/publish-rendered.js +144 -87
  369. package/dist/publish-rendered.js.map +1 -1
  370. package/dist/publish.d.ts +18 -19
  371. package/dist/publish.d.ts.map +1 -1
  372. package/dist/publish.js +41 -56
  373. package/dist/publish.js.map +1 -1
  374. package/dist/renderer.d.ts +14 -4
  375. package/dist/renderer.d.ts.map +1 -1
  376. package/dist/renderer.js +35 -23
  377. package/dist/renderer.js.map +1 -1
  378. package/dist/resolver.d.ts +17 -2
  379. package/dist/resolver.d.ts.map +1 -1
  380. package/dist/resolver.js +112 -16
  381. package/dist/resolver.js.map +1 -1
  382. package/dist/robots.d.ts +22 -0
  383. package/dist/robots.d.ts.map +1 -0
  384. package/dist/robots.js +25 -0
  385. package/dist/robots.js.map +1 -0
  386. package/dist/schema/dimensions.d.ts +78 -0
  387. package/dist/schema/dimensions.d.ts.map +1 -0
  388. package/dist/schema/dimensions.js +97 -0
  389. package/dist/schema/dimensions.js.map +1 -0
  390. package/dist/schema/helpers.d.ts +108 -0
  391. package/dist/schema/helpers.d.ts.map +1 -0
  392. package/dist/schema/helpers.js +133 -0
  393. package/dist/schema/helpers.js.map +1 -0
  394. package/dist/schema/index.d.ts +27 -0
  395. package/dist/schema/index.d.ts.map +1 -0
  396. package/dist/schema/index.js +25 -0
  397. package/dist/schema/index.js.map +1 -0
  398. package/dist/schema/types.d.ts +390 -0
  399. package/dist/schema/types.d.ts.map +1 -0
  400. package/dist/schema/types.js +25 -0
  401. package/dist/schema/types.js.map +1 -0
  402. package/dist/selector-chain.d.ts +63 -0
  403. package/dist/selector-chain.d.ts.map +1 -0
  404. package/dist/selector-chain.js +58 -0
  405. package/dist/selector-chain.js.map +1 -0
  406. package/dist/seo.d.ts +56 -0
  407. package/dist/seo.d.ts.map +1 -0
  408. package/dist/seo.js +72 -0
  409. package/dist/seo.js.map +1 -0
  410. package/dist/serve.d.ts +41 -3
  411. package/dist/serve.d.ts.map +1 -1
  412. package/dist/serve.js +206 -65
  413. package/dist/serve.js.map +1 -1
  414. package/dist/sidecars.d.ts +26 -21
  415. package/dist/sidecars.d.ts.map +1 -1
  416. package/dist/sidecars.js +143 -45
  417. package/dist/sidecars.js.map +1 -1
  418. package/dist/site-loader.d.ts +74 -6
  419. package/dist/site-loader.d.ts.map +1 -1
  420. package/dist/site-loader.js +138 -28
  421. package/dist/site-loader.js.map +1 -1
  422. package/dist/sitemap.d.ts +45 -0
  423. package/dist/sitemap.d.ts.map +1 -0
  424. package/dist/sitemap.js +67 -0
  425. package/dist/sitemap.js.map +1 -0
  426. package/dist/targets.d.ts +47 -1
  427. package/dist/targets.d.ts.map +1 -1
  428. package/dist/targets.js +83 -36
  429. package/dist/targets.js.map +1 -1
  430. package/dist/template-loader.d.ts +7 -3
  431. package/dist/template-loader.d.ts.map +1 -1
  432. package/dist/template-loader.js +27 -12
  433. package/dist/template-loader.js.map +1 -1
  434. package/dist/templates-scan-worker.js +1 -1
  435. package/dist/templates-scan-worker.js.map +1 -1
  436. package/dist/templates-scan.d.ts.map +1 -1
  437. package/dist/templates-scan.js +1 -1
  438. package/dist/templates-scan.js.map +1 -1
  439. package/dist/themes.d.ts +69 -0
  440. package/dist/themes.d.ts.map +1 -0
  441. package/dist/themes.js +85 -0
  442. package/dist/themes.js.map +1 -0
  443. package/dist/transforms/adapter.d.ts +115 -0
  444. package/dist/transforms/adapter.d.ts.map +1 -0
  445. package/dist/transforms/adapter.js +2 -0
  446. package/dist/transforms/adapter.js.map +1 -0
  447. package/dist/transforms/cloudflare.d.ts +17 -0
  448. package/dist/transforms/cloudflare.d.ts.map +1 -0
  449. package/dist/transforms/cloudflare.js +110 -0
  450. package/dist/transforms/cloudflare.js.map +1 -0
  451. package/dist/transforms/index.d.ts +24 -0
  452. package/dist/transforms/index.d.ts.map +1 -0
  453. package/dist/transforms/index.js +30 -0
  454. package/dist/transforms/index.js.map +1 -0
  455. package/dist/transforms/sharp.d.ts +3 -0
  456. package/dist/transforms/sharp.d.ts.map +1 -0
  457. package/dist/transforms/sharp.js +43 -0
  458. package/dist/transforms/sharp.js.map +1 -0
  459. package/dist/types.d.ts +241 -10
  460. package/dist/types.d.ts.map +1 -1
  461. package/dist/types.js +28 -5
  462. package/dist/types.js.map +1 -1
  463. package/dist/workers/cloudflare-r2.d.ts +11 -2
  464. package/dist/workers/cloudflare-r2.d.ts.map +1 -1
  465. package/dist/workers/cloudflare-r2.js +120 -55
  466. package/dist/workers/cloudflare-r2.js.map +1 -1
  467. package/package.json +30 -2
  468. package/admin-dist/assets/index-BZAFKsUp.js +0 -608
  469. package/admin-dist/assets/index-BpRotMuK.css +0 -1
  470. package/admin-dist/assets/vendor-vue-DSjyxCX6.js +0 -1
  471. package/dist/providers/r2.d.ts +0 -8
  472. package/dist/providers/r2.d.ts.map +0 -1
  473. package/dist/providers/r2.js +0 -83
  474. package/dist/providers/r2.js.map +0 -1
  475. package/dist/source-sidecars.d.ts +0 -13
  476. package/dist/source-sidecars.d.ts.map +0 -1
  477. package/dist/source-sidecars.js +0 -52
  478. package/dist/source-sidecars.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * SourceContext — everything an admin-api route needs to read or write
3
+ * source content. Bundles storage, site directory, content root, and the
4
+ * sidecar writer into one parameter so route factories depend on a single
5
+ * coherent concept instead of 3-4 positional arguments.
6
+ *
7
+ * This is the admin-api's "source" indirection. Today it wraps the ambient
8
+ * source storage + siteDir pair; tomorrow it can be built from a
9
+ * TargetRegistry's selected editable target with no changes to routes.
10
+ */
11
+ import { createContentRoot } from '../content-root.js';
12
+ import { loadSite } from '../site-loader.js';
13
+ /**
14
+ * Load a site from a SourceContext. Passes the project-level manifest
15
+ * so loadSite doesn't need a target-level site.yaml.
16
+ */
17
+ export function loadSiteFromSource(source, opts) {
18
+ return loadSite({ contentRoot: source.contentRoot, manifest: source.manifest, ...opts });
19
+ }
20
+ export function createSourceContext(opts) {
21
+ return {
22
+ storage: opts.storage,
23
+ siteDir: opts.siteDir,
24
+ projectSiteDir: opts.projectSiteDir ?? opts.siteDir,
25
+ contentRoot: createContentRoot(opts.storage, opts.siteDir),
26
+ history: opts.history,
27
+ manifest: opts.manifest,
28
+ };
29
+ }
30
+ /**
31
+ * Construct a SourceContext from a TargetRegistry, picking the given target
32
+ * (or the default editable target) as the source. Throws if no editable
33
+ * target is configured and no explicit targetName is provided.
34
+ */
35
+ export function createSourceContextFromRegistry(opts) {
36
+ const name = opts.targetName ?? opts.registry.defaultEditable();
37
+ const storage = opts.registry.get(name);
38
+ return {
39
+ ...createSourceContext({
40
+ storage,
41
+ siteDir: opts.siteDir ?? '',
42
+ projectSiteDir: opts.projectSiteDir,
43
+ history: opts.buildHistory?.(name, storage),
44
+ manifest: opts.manifest,
45
+ }),
46
+ targetName: name,
47
+ };
48
+ }
49
+ /** Static resolver — always returns the given SourceContext regardless of requested target. */
50
+ export function staticSourceResolver(source) {
51
+ return () => source;
52
+ }
53
+ /**
54
+ * Registry-backed resolver — picks the named target (or the registry's
55
+ * default editable when none is named) and wraps its storage in a
56
+ * SourceContext. Memoizes one context per target name so repeated
57
+ * requests for the same target share the same contentRoot instance.
58
+ */
59
+ export function registrySourceResolver(opts) {
60
+ const cache = new Map();
61
+ return async (targetName) => {
62
+ const name = targetName ?? opts.registry.defaultEditable();
63
+ const cached = cache.get(name);
64
+ if (cached)
65
+ return cached;
66
+ // Cross-target reads may hit targets that weren't pre-initialized by
67
+ // the bootstrap (dev only inits the editable local target by default).
68
+ // If the target is configured but its provider hasn't been built yet,
69
+ // let the caller lazy-init. Unknown targets (not in site.yaml at all)
70
+ // fall through so registry.get throws a clean UnknownTargetError.
71
+ const isConfigured = opts.registry.list().includes(name);
72
+ if (opts.lazyInit && isConfigured) {
73
+ try {
74
+ opts.registry.get(name);
75
+ }
76
+ catch {
77
+ await opts.lazyInit(name);
78
+ }
79
+ }
80
+ const ctx = createSourceContextFromRegistry({
81
+ registry: opts.registry,
82
+ targetName: name,
83
+ projectSiteDir: opts.projectSiteDir,
84
+ buildHistory: opts.buildHistory,
85
+ siteDir: opts.siteDir,
86
+ manifest: opts.manifest,
87
+ });
88
+ cache.set(name, ctx);
89
+ return ctx;
90
+ };
91
+ }
92
+ //# sourceMappingURL=source-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-context.js","sourceRoot":"","sources":["../../src/admin-api/source-context.ts"],"names":[],"mappings":"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"}
package/dist/app.js CHANGED
@@ -4,7 +4,7 @@ import { resolvePage } from './resolver.js';
4
4
  import { renderPage } from './renderer.js';
5
5
  export async function createApp(siteDir, storage) {
6
6
  const app = new Hono();
7
- const site = await loadSite(siteDir, storage);
7
+ const site = await loadSite({ siteDir, storage });
8
8
  for (const [pageName, page] of site.pages) {
9
9
  app.get(page.route, async (c) => {
10
10
  const resolved = await resolvePage(pageName, site);
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,OAAwB;IACvE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAE7C,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;YACtD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,OAAwB;IACvE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAEjD,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;YAC5B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;YACtD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQ/F;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY1E;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMnD;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CA0DR"}
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQ/F;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY1E;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMnD;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CA6D5G"}
package/dist/assemble.js CHANGED
@@ -55,7 +55,10 @@ export function assembleEsi(pageHtml, fragments) {
55
55
  const frag = fragments.get(path);
56
56
  if (!frag?.head)
57
57
  continue;
58
- for (const line of frag.head.split('\n').map(l => l.trim()).filter(Boolean)) {
58
+ for (const line of frag.head
59
+ .split('\n')
60
+ .map(l => l.trim())
61
+ .filter(Boolean)) {
59
62
  if (seen.has(line))
60
63
  continue;
61
64
  seen.add(line);
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
@@ -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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Asset-refs binding for the generic dep-sidecars module.
3
+ *
4
+ * Asset-side conveniences over the generic API:
5
+ * - `ASSET_REFS` constant fixes the dep-sidecar relation kind for
6
+ * callers (so they don't need to know "the asset-refs root is named
7
+ * `asset-refs`").
8
+ * - `itemRefToAssetRef` reconstructs an `AssetRef` (the schema/types
9
+ * shape used in 409 delete-blocking responses) from the sidecar's
10
+ * `ItemRef`. Sidecars don't carry `componentPath`; we synthesize
11
+ * null and let callers re-read manifests for breadcrumb display.
12
+ */
13
+ import type { ContentRoot } from '../content-root.js';
14
+ import { type DepRelation, type ItemRef, type ManifestLike } from '../dep-sidecars.js';
15
+ import type { AssetRef } from './refs.js';
16
+ /** The asset-refs relation: extract `_asset` references from a manifest. */
17
+ export declare const ASSET_REFS: DepRelation;
18
+ /** Convert an `ItemRef` to the `AssetRef` shape used by delete.ts and 409 responses. */
19
+ export declare function itemRefToAssetRef(item: ItemRef): AssetRef;
20
+ /** Read every item that references this asset. Thin wrapper around `readDepsFor`. */
21
+ export declare function readRefsForAsset(contentRoot: ContentRoot, assetName: string): Promise<ItemRef[]>;
22
+ /**
23
+ * Apply asset-refs diff for one item's manifest change. Thin wrapper
24
+ * around `rebuildItemDeps` with the asset-refs relation pre-bound.
25
+ */
26
+ export declare function rebuildAssetRefs(contentRoot: ContentRoot, item: ItemRef, oldManifest: ManifestLike | null, newManifest: ManifestLike | null): Promise<void>;
27
+ /** Apply a pre-computed diff (used in tests + cases where caller has the sets already). */
28
+ export declare function applyAssetRefsDiff(contentRoot: ContentRoot, item: ItemRef, oldAssets: ReadonlySet<string>, newAssets: ReadonlySet<string>): Promise<void>;
29
+ export { applyDepDiff, filenameToItemRef, itemRefToFilename, type DepRelation, type ItemRef, } from '../dep-sidecars.js';
30
+ //# sourceMappingURL=asset-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-deps.d.ts","sourceRoot":"","sources":["../../src/assets/asset-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,YAAY,EAIlB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGzC,4EAA4E;AAC5E,eAAO,MAAM,UAAU,EAAE,WAKxB,CAAA;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAYzD;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,YAAY,GAAG,IAAI,EAChC,WAAW,EAAE,YAAY,GAAG,IAAI,GAC/B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAID,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,GACb,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { applyDepDiff, rebuildItemDeps, readDepsFor, } from '../dep-sidecars.js';
2
+ import { collectAssetRefs } from './scan-manifest-for-asset.js';
3
+ /** The asset-refs relation: extract `_asset` references from a manifest. */
4
+ export const ASSET_REFS = {
5
+ rootName: 'asset-refs',
6
+ // collectAssetRefs accepts a `Walkable` shape — narrower than ComponentManifest
7
+ // but every ComponentManifest is structurally a Walkable for its purposes.
8
+ extract: (manifest) => collectAssetRefs(manifest),
9
+ };
10
+ /** Convert an `ItemRef` to the `AssetRef` shape used by delete.ts and 409 responses. */
11
+ export function itemRefToAssetRef(item) {
12
+ // The sidecar doesn't carry componentPath — it answers "is this asset
13
+ // referenced by this item?" but not "where exactly in the manifest."
14
+ // For breadcrumb display, callers re-read the manifest on demand.
15
+ const filename = item.source === 'page' ? 'page' : 'fragment';
16
+ const localePart = item.locale ? `.${item.locale}` : '';
17
+ const folder = item.source === 'page' ? 'pages' : 'fragments';
18
+ return {
19
+ source: item.source,
20
+ path: `${folder}/${item.name}/${filename}${localePart}.json`,
21
+ componentPath: null,
22
+ };
23
+ }
24
+ /** Read every item that references this asset. Thin wrapper around `readDepsFor`. */
25
+ export function readRefsForAsset(contentRoot, assetName) {
26
+ return readDepsFor(ASSET_REFS, contentRoot, assetName);
27
+ }
28
+ /**
29
+ * Apply asset-refs diff for one item's manifest change. Thin wrapper
30
+ * around `rebuildItemDeps` with the asset-refs relation pre-bound.
31
+ */
32
+ export function rebuildAssetRefs(contentRoot, item, oldManifest, newManifest) {
33
+ return rebuildItemDeps(ASSET_REFS, contentRoot, item, oldManifest, newManifest);
34
+ }
35
+ /** Apply a pre-computed diff (used in tests + cases where caller has the sets already). */
36
+ export function applyAssetRefsDiff(contentRoot, item, oldAssets, newAssets) {
37
+ return applyDepDiff(ASSET_REFS, contentRoot, item, oldAssets, newAssets);
38
+ }
39
+ // Re-export the generic types/utilities so asset-side callers don't
40
+ // need to import from two modules.
41
+ export { applyDepDiff, filenameToItemRef, itemRefToFilename, } from '../dep-sidecars.js';
42
+ //# sourceMappingURL=asset-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-deps.js","sourceRoot":"","sources":["../../src/assets/asset-deps.ts"],"names":[],"mappings":"AAaA,OAAO,EAIL,YAAY,EACZ,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,QAAQ,EAAE,YAAY;IACtB,gFAAgF;IAChF,2EAA2E;IAC3E,OAAO,EAAE,CAAC,QAAsB,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAA6D,CAAC;CACrH,CAAA;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,sEAAsE;IACtE,qEAAqE;IACrE,kEAAkE;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAA;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAA;IAC7D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,UAAU,OAAO;QAC5D,aAAa,EAAE,IAAI;KACpB,CAAA;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,WAAwB,EAAE,SAAiB;IAC1E,OAAO,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAwB,EACxB,IAAa,EACb,WAAgC,EAChC,WAAgC;IAEhC,OAAO,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACjF,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,kBAAkB,CAChC,WAAwB,EACxB,IAAa,EACb,SAA8B,EAC9B,SAA8B;IAE9B,OAAO,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAC1E,CAAC;AAED,oEAAoE;AACpE,mCAAmC;AACnC,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAA"}