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,141 @@
1
+ /**
2
+ * Asset resolution — turn references stored in content JSON into the resolved
3
+ * shapes templates receive at render time.
4
+ *
5
+ * Dispatches by `manifest.kind` (per Q1 lock):
6
+ * - embedded → `resolveEmbeddedRef`
7
+ * - downloadable → `resolveDownloadableRef`
8
+ * - font → `resolveFontRef`
9
+ *
10
+ * Locale + theme handled per Q3/Q4 locks:
11
+ * - embedded/downloadable: walker reads each variant in the cross-dimension
12
+ * chain (most-specific-first) and folds them onto the default with
13
+ * `foldLocaleChain` (most-specific-LAST after reversing). Result is one
14
+ * effective `Partial<AssetManifest>` passed to the kind resolver.
15
+ * - font: walker enumerates every (locale, theme) cell in the site's
16
+ * supported universe, reads each variant that exists, and passes the
17
+ * full Map<Selector-key, FontLocaleAdditiveManifest> to the font
18
+ * resolver. Fonts ADD variants (per Q3 lock); they don't override.
19
+ *
20
+ * # Why the walker enumerates the full universe for fonts
21
+ *
22
+ * The font resolver returns a union of `@font-face` declarations, each
23
+ * with its own `unicode-range`. The browser picks per character based on
24
+ * the active page's content. So at render time we don't know which
25
+ * locale's font variant will be needed — we expose ALL of them. The
26
+ * universe is the site's `themes.supported × locales.supported` cells;
27
+ * the walker tries each one and includes the variants that exist.
28
+ *
29
+ * # Graceful degradation
30
+ *
31
+ * When a referenced asset can't be resolved (manifest missing, corrupt,
32
+ * or storage failure), the walker returns a placeholder resolved shape
33
+ * and logs the error. Pages continue rendering; authors see degraded
34
+ * output instead of crashed pages (design-media.md → graceful
35
+ * degradation).
36
+ */
37
+ import type { ResolvedDownloadableAsset, ResolvedEmbeddedAsset, ResolvedFontAsset } from '../schema/types.js';
38
+ import type { StorageProvider } from '../types.js';
39
+ import { type Selector, selectorsEqual } from '../schema/dimensions.js';
40
+ import type { ResolvedLocales } from '../locale.js';
41
+ import type { ResolvedThemes } from '../themes.js';
42
+ import type { TransformAdapter } from '../transforms/adapter.js';
43
+ /** Context needed to resolve a reference — shared across all refs in a render pass. */
44
+ export interface AssetResolveContext {
45
+ /** The source target's storage provider (where manifests + bytes live). */
46
+ storage: StorageProvider;
47
+ /** Path prefix for assets within the storage root (typically `"assets"`). */
48
+ assetsRoot: string;
49
+ /**
50
+ * Site URL prefix for absolute URLs. When absent, URLs are root-relative.
51
+ * Used for targets served from a separate origin.
52
+ */
53
+ siteUrl?: string;
54
+ /** Active locale for this render pass. Absent = default-locale render. */
55
+ locale?: string;
56
+ /** Active theme for this render pass. Absent = default-theme render. */
57
+ theme?: string;
58
+ /**
59
+ * Resolved site-level locales. Required when `locale` is set; the chain
60
+ * builder needs the full config (default locale, fallbacks).
61
+ */
62
+ locales?: ResolvedLocales | null;
63
+ /**
64
+ * Resolved site-level themes. Required when `theme` is set OR for font
65
+ * resolution (fonts enumerate the supported theme set).
66
+ */
67
+ themes?: ResolvedThemes | null;
68
+ /**
69
+ * Transform adapter — required, but defaults to `sharpAdapter` when the
70
+ * caller doesn't supply one. The adapter owns URL composition, srcset
71
+ * generation, and cache policy. Per-target factory at boot picks the
72
+ * right adapter per `target.transforms` config.
73
+ */
74
+ transformAdapter?: TransformAdapter;
75
+ }
76
+ /** Shape of an embedded-asset reference as stored in content JSON. */
77
+ interface EmbeddedRefShape {
78
+ _asset: string;
79
+ alt?: string;
80
+ focalPoint?: {
81
+ x: number;
82
+ y: number;
83
+ };
84
+ }
85
+ /** Shape of a downloadable-asset reference as stored in content JSON. */
86
+ interface DownloadableRefShape {
87
+ _asset: string;
88
+ title?: string;
89
+ description?: string;
90
+ }
91
+ /** Shape of a font-asset reference as stored in content JSON. */
92
+ interface FontRefShape {
93
+ _asset: string;
94
+ }
95
+ /**
96
+ * Resolve a single embedded-asset reference. Caller has already read the
97
+ * default + per-locale variant and folded the chain into one effective
98
+ * Partial. We merge that effective override on top of the default for
99
+ * field-level overrides; bytes-presence (hash on the override) shifts
100
+ * URL construction to the override's bytes.
101
+ *
102
+ * Throws on manifest not-found or corrupt — caller (the walker) catches
103
+ * and substitutes a placeholder.
104
+ */
105
+ export declare function resolveEmbeddedRef(ref: EmbeddedRefShape, defaultManifest: import('../schema/types.js').AssetManifest, effectiveOverride: Partial<import('../schema/types.js').AssetManifest> | null, selector: Selector | null, ctx: AssetResolveContext): Promise<ResolvedEmbeddedAsset>;
106
+ /**
107
+ * Resolve a single downloadable-asset reference. Same locale-merge
108
+ * semantics as embedded; different resolved shape (no srcset, no
109
+ * focal-point, has title/description).
110
+ */
111
+ export declare function resolveDownloadableRef(ref: DownloadableRefShape, defaultManifest: import('../schema/types.js').AssetManifest, effectiveOverride: Partial<import('../schema/types.js').AssetManifest> | null, selector: Selector | null, ctx: AssetResolveContext): Promise<ResolvedDownloadableAsset>;
112
+ /**
113
+ * Resolve a font-asset reference. Walker has already enumerated every
114
+ * locale/theme variant that exists; we receive them as a Map. The
115
+ * resolved shape carries the full union — templates emit one
116
+ * `@font-face` per variant.
117
+ *
118
+ * Today's manifest type doesn't yet carry font-specific fields
119
+ * (`cssName`, `format`, `weight`, `style`, `unicodeRange`) — those
120
+ * land when ingest learns to write fonts. Until then, we synthesize
121
+ * sensible defaults from the asset name and MIME. The shape and
122
+ * dispatch are correct from day one; the field set fills in
123
+ * incrementally.
124
+ */
125
+ /** A font variant paired with the selector that addresses its bytes. */
126
+ export interface FontVariantEntry {
127
+ selector: Selector;
128
+ manifest: import('../schema/types.js').FontLocaleAdditiveManifest;
129
+ }
130
+ export declare function resolveFontRef(_ref: FontRefShape, defaultManifest: import('../schema/types.js').AssetManifest, variants: readonly FontVariantEntry[], ctx: AssetResolveContext): Promise<ResolvedFontAsset>;
131
+ /**
132
+ * Walk a content object and resolve every asset reference found. Returns a
133
+ * new content object with references swapped for resolved shapes; arrays and
134
+ * nested objects are recursed into. Non-ref values are copied unchanged.
135
+ *
136
+ * Graceful degradation: references that fail to resolve are replaced with a
137
+ * placeholder. Errors are logged but don't halt rendering.
138
+ */
139
+ export declare function resolveAssetRefs(content: Record<string, unknown> | undefined, ctx: AssetResolveContext): Promise<Record<string, unknown> | undefined>;
140
+ export { selectorsEqual };
141
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/assets/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,381 @@
1
+ import { buildSelector, selectorsEqual } from '../schema/dimensions.js';
2
+ import { crossDimensionFallbackChain } from '../selector-chain.js';
3
+ import { sharpAdapter } from '../transforms/sharp.js';
4
+ import { AssetManifestCorruptError, AssetManifestNotFoundError } from './errors.js';
5
+ import { foldLocaleChain } from './manifest-merge.js';
6
+ import { readDefaultManifest } from './manifest-default.js';
7
+ import { localeManifestVariantFor } from './manifest-locale.js';
8
+ import { extFromMime } from './url.js';
9
+ // ---------- Per-kind resolvers ----------
10
+ /**
11
+ * Resolve a single embedded-asset reference. Caller has already read the
12
+ * default + per-locale variant and folded the chain into one effective
13
+ * Partial. We merge that effective override on top of the default for
14
+ * field-level overrides; bytes-presence (hash on the override) shifts
15
+ * URL construction to the override's bytes.
16
+ *
17
+ * Throws on manifest not-found or corrupt — caller (the walker) catches
18
+ * and substitutes a placeholder.
19
+ */
20
+ export async function resolveEmbeddedRef(ref, defaultManifest, effectiveOverride, selector, ctx) {
21
+ // Bytes source: when the effective override has a hash, the locale
22
+ // has its own bytes — URL points at the locale-bytes path. Otherwise
23
+ // URL points at the default bytes.
24
+ const overrideHasBytes = effectiveOverride !== null && typeof effectiveOverride.hash === 'string';
25
+ const bytesSource = overrideHasBytes ? effectiveOverride : defaultManifest;
26
+ const bytesSelector = overrideHasBytes ? selector : null;
27
+ // The merged manifest is "default with override fields applied" for
28
+ // field reads (alt, width, height, variants, mime). Override-wins on
29
+ // any non-undefined field.
30
+ const merged = {
31
+ ...defaultManifest,
32
+ ...(effectiveOverride ?? {}),
33
+ };
34
+ const ext = extFromMime(merged.mime);
35
+ if (!ext) {
36
+ throw new AssetManifestCorruptError(`${ctx.assetsRoot}/${defaultManifest.name}.asset.json`, new Error(`No extension known for MIME ${merged.mime}`));
37
+ }
38
+ const adapter = ctx.transformAdapter ?? sharpAdapter;
39
+ const adapterInput = {
40
+ name: defaultManifest.name,
41
+ hash: bytesSource.hash,
42
+ ext,
43
+ selector: bytesSelector,
44
+ siteUrl: ctx.siteUrl,
45
+ variants: (bytesSource.variants ?? []),
46
+ width: merged.width,
47
+ height: merged.height,
48
+ };
49
+ const url = adapter.primaryUrl(adapterInput);
50
+ const srcset = adapter.srcset(adapterInput);
51
+ // Per-ref override > merged manifest's alt > '' (decorative).
52
+ const alt = ref.alt ?? merged.alt ?? '';
53
+ return {
54
+ url,
55
+ srcset,
56
+ width: merged.width,
57
+ height: merged.height,
58
+ duration: null,
59
+ animated: false,
60
+ poster: null,
61
+ alt,
62
+ focalPoint: ref.focalPoint ?? null,
63
+ mime: merged.mime,
64
+ };
65
+ }
66
+ /**
67
+ * Resolve a single downloadable-asset reference. Same locale-merge
68
+ * semantics as embedded; different resolved shape (no srcset, no
69
+ * focal-point, has title/description).
70
+ */
71
+ export async function resolveDownloadableRef(ref, defaultManifest, effectiveOverride, selector, ctx) {
72
+ const overrideHasBytes = effectiveOverride !== null && typeof effectiveOverride.hash === 'string';
73
+ const bytesSource = overrideHasBytes ? effectiveOverride : defaultManifest;
74
+ const bytesSelector = overrideHasBytes ? selector : null;
75
+ const merged = {
76
+ ...defaultManifest,
77
+ ...(effectiveOverride ?? {}),
78
+ };
79
+ const ext = extFromMime(merged.mime);
80
+ if (!ext) {
81
+ throw new AssetManifestCorruptError(`${ctx.assetsRoot}/${defaultManifest.name}.asset.json`, new Error(`No extension known for MIME ${merged.mime}`));
82
+ }
83
+ const adapter = ctx.transformAdapter ?? sharpAdapter;
84
+ const url = adapter.primaryUrl({
85
+ name: defaultManifest.name,
86
+ hash: bytesSource.hash,
87
+ ext,
88
+ selector: bytesSelector,
89
+ siteUrl: ctx.siteUrl,
90
+ variants: [], // downloadable assets don't have a srcset ladder
91
+ width: null,
92
+ height: null,
93
+ });
94
+ // Title fallback chain: per-ref → merged manifest title → asset name.
95
+ // (Today's manifest type doesn't carry `title`; step 24/post-v1 will
96
+ // add it. Until then, the asset name is the human-readable fallback.)
97
+ const title = ref.title ?? merged.title ?? defaultManifest.name;
98
+ const description = ref.description ?? merged.description ?? null;
99
+ return {
100
+ url,
101
+ title,
102
+ description,
103
+ size: merged.size ?? null,
104
+ mime: merged.mime,
105
+ };
106
+ }
107
+ export async function resolveFontRef(_ref, defaultManifest, variants, ctx) {
108
+ const ext = extFromMime(defaultManifest.mime);
109
+ if (!ext) {
110
+ throw new AssetManifestCorruptError(`${ctx.assetsRoot}/${defaultManifest.name}.asset.json`, new Error(`No extension known for MIME ${defaultManifest.mime}`));
111
+ }
112
+ // CSS family name: stable per asset (Gazetta-owned identifier per
113
+ // design-media.md). Today's manifest doesn't carry `cssName`, so
114
+ // derive from the asset name.
115
+ const cssName = defaultManifest.name;
116
+ const adapter = ctx.transformAdapter ?? sharpAdapter;
117
+ // Default variant is always present in the union — every font has
118
+ // its default file.
119
+ const resolved = [
120
+ {
121
+ url: adapter.primaryUrl({
122
+ name: defaultManifest.name,
123
+ hash: defaultManifest.hash,
124
+ ext,
125
+ selector: null,
126
+ siteUrl: ctx.siteUrl,
127
+ variants: [],
128
+ width: null,
129
+ height: null,
130
+ }),
131
+ format: deriveFontFormat(ext),
132
+ weight: 400,
133
+ style: 'normal',
134
+ unicodeRange: null,
135
+ mime: defaultManifest.mime,
136
+ },
137
+ ];
138
+ // Add each locale/theme variant. URL embeds the variant's selector so
139
+ // the bytes file for that variant resolves correctly.
140
+ for (const { selector, manifest: variant } of variants) {
141
+ const variantExt = extFromMime(variant.mime) ?? ext;
142
+ resolved.push({
143
+ url: adapter.primaryUrl({
144
+ name: defaultManifest.name,
145
+ hash: variant.hash,
146
+ ext: variantExt,
147
+ selector,
148
+ siteUrl: ctx.siteUrl,
149
+ variants: [],
150
+ width: null,
151
+ height: null,
152
+ }),
153
+ format: variant.format,
154
+ weight: variant.weight,
155
+ style: variant.style,
156
+ unicodeRange: variant.unicodeRange,
157
+ mime: variant.mime,
158
+ });
159
+ }
160
+ return {
161
+ cssName,
162
+ variants: resolved,
163
+ };
164
+ }
165
+ function deriveFontFormat(ext) {
166
+ switch (ext) {
167
+ case 'woff2':
168
+ return 'woff2';
169
+ case 'woff':
170
+ return 'woff';
171
+ case 'ttf':
172
+ return 'ttf';
173
+ case 'otf':
174
+ return 'otf';
175
+ default:
176
+ return 'woff2';
177
+ }
178
+ }
179
+ // ---------- Walker ----------
180
+ /** Placeholder returned when a reference can't be resolved. */
181
+ const EMBEDDED_PLACEHOLDER = {
182
+ url: '/assets/__missing__.svg',
183
+ srcset: null,
184
+ width: null,
185
+ height: null,
186
+ duration: null,
187
+ animated: false,
188
+ poster: null,
189
+ alt: '',
190
+ focalPoint: null,
191
+ mime: 'image/svg+xml',
192
+ };
193
+ const DOWNLOADABLE_PLACEHOLDER = {
194
+ url: '/assets/__missing__',
195
+ title: '(missing asset)',
196
+ description: null,
197
+ size: null,
198
+ mime: 'application/octet-stream',
199
+ };
200
+ const FONT_PLACEHOLDER = {
201
+ cssName: '__missing__',
202
+ variants: [],
203
+ };
204
+ /** Structural check — is this value an asset reference (any kind)? */
205
+ function isAssetRef(value) {
206
+ if (!value || typeof value !== 'object' || Array.isArray(value))
207
+ return false;
208
+ const v = value;
209
+ return typeof v._asset === 'string';
210
+ }
211
+ /**
212
+ * Walk a content object and resolve every asset reference found. Returns a
213
+ * new content object with references swapped for resolved shapes; arrays and
214
+ * nested objects are recursed into. Non-ref values are copied unchanged.
215
+ *
216
+ * Graceful degradation: references that fail to resolve are replaced with a
217
+ * placeholder. Errors are logged but don't halt rendering.
218
+ */
219
+ export async function resolveAssetRefs(content, ctx) {
220
+ if (!content)
221
+ return content;
222
+ return (await walk(content, ctx));
223
+ }
224
+ async function walk(value, ctx) {
225
+ if (isAssetRef(value)) {
226
+ try {
227
+ return await resolveOne(value, ctx);
228
+ }
229
+ catch (err) {
230
+ if (err instanceof AssetManifestNotFoundError || err instanceof AssetManifestCorruptError) {
231
+ // eslint-disable-next-line no-console
232
+ console.warn(`[asset-resolver] ${err.message}`);
233
+ // Return the most generic placeholder — the walker can't know
234
+ // the kind without successfully reading the manifest. Embedded's
235
+ // placeholder shape carries the most fields, so it satisfies any
236
+ // template that conditionally checks fields like `srcset`.
237
+ return EMBEDDED_PLACEHOLDER;
238
+ }
239
+ throw err;
240
+ }
241
+ }
242
+ if (Array.isArray(value)) {
243
+ return Promise.all(value.map(item => walk(item, ctx)));
244
+ }
245
+ if (value && typeof value === 'object') {
246
+ const result = {};
247
+ for (const [key, v] of Object.entries(value)) {
248
+ result[key] = await walk(v, ctx);
249
+ }
250
+ return result;
251
+ }
252
+ return value;
253
+ }
254
+ /**
255
+ * Resolve one asset reference. Reads default first to discover kind,
256
+ * then dispatches to the kind-specific path with appropriate locale/
257
+ * theme handling.
258
+ */
259
+ async function resolveOne(ref, ctx) {
260
+ const defaultManifest = await readDefaultManifest(ctx.storage, ctx.assetsRoot, ref._asset);
261
+ switch (defaultManifest.kind) {
262
+ case 'font': {
263
+ const variants = await readAllFontVariants(defaultManifest.name, ctx);
264
+ return resolveFontRef(ref, defaultManifest, variants, ctx);
265
+ }
266
+ case 'downloadable': {
267
+ const { effective, selector } = await readEffectiveLocaleOverride(defaultManifest.name, 'downloadable', ctx);
268
+ return resolveDownloadableRef(ref, defaultManifest, effective, selector, ctx);
269
+ }
270
+ case 'embedded':
271
+ default: {
272
+ const { effective, selector } = await readEffectiveLocaleOverride(defaultManifest.name, 'embedded', ctx);
273
+ return resolveEmbeddedRef(ref, defaultManifest, effective, selector, ctx);
274
+ }
275
+ }
276
+ }
277
+ /**
278
+ * Read the cross-dimension fallback chain for an asset's name + kind,
279
+ * fold the per-field overrides onto a fresh base, and return the
280
+ * effective override along with the selector that produced bytes (if
281
+ * any).
282
+ *
283
+ * Returns:
284
+ * - effective: Partial<AssetManifest> — undefined-shaped fields show
285
+ * "no override"; defined fields show "this locale wins."
286
+ * - selector: the most-specific selector that contributed bytes (i.e.
287
+ * had a `hash`); null if no override has bytes.
288
+ */
289
+ async function readEffectiveLocaleOverride(name, kind, ctx) {
290
+ const chain = crossDimensionFallbackChain({
291
+ locale: ctx.locale,
292
+ theme: ctx.theme,
293
+ locales: ctx.locales ?? null,
294
+ themes: ctx.themes ?? null,
295
+ });
296
+ if (chain.length === 0) {
297
+ return { effective: null, selector: null };
298
+ }
299
+ // Read each variant in the chain. `crossDimensionFallbackChain` returns
300
+ // most-specific-FIRST. `foldLocaleChain` expects most-specific-LAST,
301
+ // so we reverse before fold (and pick the first hash-carrying entry,
302
+ // also walking most-specific-first, for the bytes selector).
303
+ const variant = localeManifestVariantFor(kind);
304
+ const overrides = [];
305
+ for (const sel of chain) {
306
+ const manifest = (await variant.read(ctx.storage, ctx.assetsRoot, name, sel));
307
+ overrides.push({ selector: sel, manifest });
308
+ }
309
+ // Pick the bytes selector — first override (most-specific) with a hash.
310
+ let bytesSelector = null;
311
+ for (const o of overrides) {
312
+ if (o.manifest && typeof o.manifest.hash === 'string') {
313
+ bytesSelector = o.selector;
314
+ break;
315
+ }
316
+ }
317
+ // Fold: reverse so least-specific applies first; most-specific overwrites.
318
+ const reversed = overrides
319
+ .slice()
320
+ .reverse()
321
+ .map(o => o.manifest);
322
+ const effective = foldLocaleChain({}, reversed);
323
+ return { effective: Object.keys(effective).length > 0 ? effective : null, selector: bytesSelector };
324
+ }
325
+ /**
326
+ * Read every locale/theme font variant that exists. Walker enumerates
327
+ * the site's `themes.supported × locales.supported` cells (excluding
328
+ * the all-default cell, which is the default manifest read separately)
329
+ * and collects the variants returned non-null.
330
+ *
331
+ * Returns a Map keyed by selector identity (built from JSON.stringify
332
+ * of the selector entries) for downstream iteration. Today's caller
333
+ * just iterates the values — the key is for de-duplication only.
334
+ */
335
+ async function readAllFontVariants(name, ctx) {
336
+ const out = [];
337
+ const variant = localeManifestVariantFor('font');
338
+ // Universe = configured (locale, theme) cells. Default-locale +
339
+ // default-theme is excluded — that's the default manifest, read
340
+ // separately. When neither dimension is configured, there are no
341
+ // variants to look up.
342
+ const localeCells = ctx.locales?.supported ?? [];
343
+ const themeCells = ctx.themes?.supported ?? [];
344
+ const candidates = [];
345
+ for (const loc of localeCells) {
346
+ if (loc === ctx.locales?.default)
347
+ continue;
348
+ const sel = buildSelector({ locale: loc });
349
+ if (sel)
350
+ candidates.push(sel);
351
+ }
352
+ for (const th of themeCells) {
353
+ if (th === ctx.themes?.default)
354
+ continue;
355
+ const sel = buildSelector({ theme: th });
356
+ if (sel)
357
+ candidates.push(sel);
358
+ }
359
+ for (const loc of localeCells) {
360
+ if (loc === ctx.locales?.default)
361
+ continue;
362
+ for (const th of themeCells) {
363
+ if (th === ctx.themes?.default)
364
+ continue;
365
+ const sel = buildSelector({ locale: loc, theme: th });
366
+ if (sel)
367
+ candidates.push(sel);
368
+ }
369
+ }
370
+ for (const sel of candidates) {
371
+ const m = await variant.read(ctx.storage, ctx.assetsRoot, name, sel);
372
+ if (m) {
373
+ out.push({ selector: sel, manifest: m });
374
+ }
375
+ }
376
+ return out;
377
+ }
378
+ // Re-export so external callers continue to import `selectorsEqual`-style
379
+ // helpers from this module if needed for tests. Pure pass-through.
380
+ export { selectorsEqual };
381
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/assets/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Rewrite every reference to an asset inside one manifest, returning a
3
+ * new deeply-cloned manifest with the refs updated. Pure (no I/O); the
4
+ * caller decides what to do with the result.
5
+ *
6
+ * Two consumers:
7
+ * - `replace.ts` — the orchestrator for "replace asset A with asset B
8
+ * across the whole site" uses this to transform each referencing
9
+ * manifest before writing it back.
10
+ * - Future rename operation — same semantic (rewrite asset-name refs),
11
+ * just different caller intent.
12
+ *
13
+ * Pairs with `scan-manifest-for-asset.ts`: scan emits locations where
14
+ * refs live; rewrite produces a new manifest with those locations
15
+ * updated. Keeping them separate modules is deliberate SRP — scanning
16
+ * is read-only, rewriting mutates (a copy of) the tree.
17
+ *
18
+ * Per-reference override semantics:
19
+ * When we rewrite `{ _asset: "hero", alt: "..." }` → target `banner`,
20
+ * we preserve the override fields (`alt`, `focalPoint`, etc.). The
21
+ * author's per-reference override is authored-intent, not asset-intent;
22
+ * it stays when the underlying asset changes. Design-media.md: "Preserve
23
+ * per-reference overrides when the author re-picks."
24
+ */
25
+ import type { ComponentManifest } from '../types.js';
26
+ export interface RewriteInput {
27
+ readonly manifest: ComponentManifest;
28
+ readonly fromAssetName: string;
29
+ readonly toAssetName: string;
30
+ }
31
+ export interface RewriteResult {
32
+ /** The new manifest with refs rewritten. Structurally cloned, so
33
+ * callers can freely mutate or serialize without affecting the input. */
34
+ readonly manifest: ComponentManifest;
35
+ /** How many `{ _asset: fromAssetName }` references were rewritten.
36
+ * Zero is a valid result (manifest didn't reference the asset). */
37
+ readonly rewriteCount: number;
38
+ }
39
+ /**
40
+ * Rewrite every `{ _asset: fromAssetName }` ref in `manifest` to point
41
+ * at `toAssetName` instead. Returns a deep clone — input is untouched.
42
+ */
43
+ export declare function rewriteManifestAssetRef(input: RewriteInput): RewriteResult;
44
+ //# sourceMappingURL=rewrite-manifest-asset-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-manifest-asset-ref.d.ts","sourceRoot":"","sources":["../../src/assets/rewrite-manifest-asset-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B;8EAC0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC;wEACoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAQ1E"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Rewrite every `{ _asset: fromAssetName }` ref in `manifest` to point
3
+ * at `toAssetName` instead. Returns a deep clone — input is untouched.
4
+ */
5
+ export function rewriteManifestAssetRef(input) {
6
+ // Deep clone so the walker can mutate freely. JSON round-trip is safe
7
+ // for manifests — they're JSON already (content is Record<string,
8
+ // unknown> with JSON-serializable values per the schema).
9
+ const cloned = JSON.parse(JSON.stringify(input.manifest));
10
+ const counter = { n: 0 };
11
+ walkComponent(cloned, input.fromAssetName, input.toAssetName, counter);
12
+ return { manifest: cloned, rewriteCount: counter.n };
13
+ }
14
+ /** Walk a component (page/fragment manifest or inline child). */
15
+ function walkComponent(comp, from, to, counter) {
16
+ if (comp.content)
17
+ rewriteValue(comp.content, from, to, counter);
18
+ if (comp.components) {
19
+ for (const child of comp.components) {
20
+ if (typeof child === 'string')
21
+ continue;
22
+ walkComponent(child, from, to, counter);
23
+ }
24
+ }
25
+ }
26
+ /**
27
+ * Recursively walk a value looking for `{ _asset: from, ... }` objects.
28
+ * When found, update `_asset` to `to` and count. Does NOT early-return —
29
+ * a ref object can itself contain nested refs (e.g. a future composite
30
+ * template puts one asset ref inside another's override fields).
31
+ */
32
+ function rewriteValue(value, from, to, counter) {
33
+ if (value === null || typeof value !== 'object')
34
+ return;
35
+ if (Array.isArray(value)) {
36
+ for (const item of value)
37
+ rewriteValue(item, from, to, counter);
38
+ return;
39
+ }
40
+ const obj = value;
41
+ if (typeof obj._asset === 'string' && obj._asset === from) {
42
+ obj._asset = to;
43
+ counter.n++;
44
+ }
45
+ for (const [key, child] of Object.entries(obj)) {
46
+ if (key === '_asset')
47
+ continue;
48
+ rewriteValue(child, from, to, counter);
49
+ }
50
+ }
51
+ //# sourceMappingURL=rewrite-manifest-asset-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-manifest-asset-ref.js","sourceRoot":"","sources":["../../src/assets/rewrite-manifest-asset-ref.ts"],"names":[],"mappings":"AAyCA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAmB;IACzD,sEAAsE;IACtE,kEAAkE;IAClE,0DAA0D;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAsB,CAAA;IAC9E,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACxB,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;AACtD,CAAC;AAED,iEAAiE;AACjE,SAAS,aAAa,CACpB,IAAyF,EACzF,IAAY,EACZ,EAAU,EACV,OAAsB;IAEtB,IAAI,IAAI,CAAC,OAAO;QAAE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAQ;YACvC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,KAAc,EAAE,IAAY,EAAE,EAAU,EAAE,OAAsB;IACpF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAM;IAEvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1D,GAAG,CAAC,MAAM,GAAG,EAAE,CAAA;QACf,OAAO,CAAC,CAAC,EAAE,CAAA;IACb,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,KAAK,QAAQ;YAAE,SAAQ;QAC9B,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;AACH,CAAC"}