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,120 @@
1
+ import { AssetManifestCorruptError, AssetManifestNotFoundError, AssetStorageError } from './errors.js';
2
+ import { manifestPath } from './manifest.js';
3
+ /**
4
+ * Read a default asset manifest from storage. Throws:
5
+ * - `AssetManifestNotFoundError` when the manifest file doesn't exist
6
+ * - `AssetManifestCorruptError` when it exists but doesn't validate
7
+ * - `AssetStorageError` on any other storage failure
8
+ *
9
+ * Default manifests are required (vs. locale manifests which are optional);
10
+ * an asset that has no `{name}.asset.json` doesn't exist.
11
+ */
12
+ export async function readDefaultManifest(storage, assetsRoot, assetName) {
13
+ const path = `${assetsRoot}/${manifestPath(assetName)}`;
14
+ const exists = await storage.exists(path).catch(err => {
15
+ throw new AssetStorageError('stat', path, err);
16
+ });
17
+ if (!exists)
18
+ throw new AssetManifestNotFoundError(assetName);
19
+ let raw;
20
+ try {
21
+ raw = await storage.readFile(path);
22
+ }
23
+ catch (err) {
24
+ throw new AssetStorageError('read', path, err);
25
+ }
26
+ let parsed;
27
+ try {
28
+ parsed = JSON.parse(raw);
29
+ }
30
+ catch (err) {
31
+ throw new AssetManifestCorruptError(path, err);
32
+ }
33
+ if (!isDefaultManifest(parsed)) {
34
+ throw new AssetManifestCorruptError(path, new Error('manifest shape mismatch'));
35
+ }
36
+ return parsed;
37
+ }
38
+ /**
39
+ * Type guard: narrow a parsed-JSON value to `AssetManifest`.
40
+ *
41
+ * Validation order:
42
+ * 1. Common identity fields (version, name, kind, source)
43
+ * 2. Per-kind required field rules (today: same set across kinds; the
44
+ * switch is in place for step 17's kind-specific divergence)
45
+ * 3. Common metadata fields (alt, uploadedAt, uploadedBy)
46
+ *
47
+ * Returns `false` on any failure — callers translate to
48
+ * `AssetManifestCorruptError` for I/O paths.
49
+ */
50
+ export function isDefaultManifest(candidate) {
51
+ if (!candidate || typeof candidate !== 'object')
52
+ return false;
53
+ const m = candidate;
54
+ // 1. Identity fields (always present, never override-able)
55
+ if (m.version !== 1)
56
+ return false;
57
+ if (typeof m.name !== 'string')
58
+ return false;
59
+ if (m.kind !== 'embedded' && m.kind !== 'downloadable' && m.kind !== 'font')
60
+ return false;
61
+ if (m.source !== 'internal')
62
+ return false;
63
+ // 2. Per-kind required fields. Today all kinds require the same byte-
64
+ // describing set; step 17 will diverge fonts (add cssName/format/etc.)
65
+ // and downloadables (add title). This switch reserves the dispatch
66
+ // shape so adding a per-kind rule is an additive change.
67
+ if (!validateByteFields(m))
68
+ return false;
69
+ switch (m.kind) {
70
+ case 'embedded':
71
+ // No additional fields beyond byte-describing today.
72
+ break;
73
+ case 'downloadable':
74
+ // Step 17 will add: typeof m.title === 'string', etc.
75
+ break;
76
+ case 'font':
77
+ // Step 17 will add: cssName, format, weight, style, optional
78
+ // unicodeRange, etc.
79
+ break;
80
+ }
81
+ // 3. Common metadata
82
+ if (m.alt !== null && typeof m.alt !== 'string')
83
+ return false;
84
+ if (typeof m.uploadedAt !== 'string')
85
+ return false;
86
+ if (typeof m.uploadedBy !== 'string')
87
+ return false;
88
+ return true;
89
+ }
90
+ /**
91
+ * Byte-describing field validator. All three kinds today require the
92
+ * same set: mime, size, hash, width/height (or null), variants array.
93
+ * Extracted as a helper so the kind-specific switch above can compose
94
+ * it cleanly when a future kind needs different bytes contract (e.g.
95
+ * font subsetting changing what `variants` means).
96
+ */
97
+ function validateByteFields(m) {
98
+ if (typeof m.mime !== 'string')
99
+ return false;
100
+ if (typeof m.size !== 'number')
101
+ return false;
102
+ if (typeof m.hash !== 'string')
103
+ return false;
104
+ if (m.width !== null && typeof m.width !== 'number')
105
+ return false;
106
+ if (m.height !== null && typeof m.height !== 'number')
107
+ return false;
108
+ if (!Array.isArray(m.variants))
109
+ return false;
110
+ if (!m.variants.every(isAssetVariant))
111
+ return false;
112
+ return true;
113
+ }
114
+ function isAssetVariant(candidate) {
115
+ if (!candidate || typeof candidate !== 'object')
116
+ return false;
117
+ const v = candidate;
118
+ return typeof v.width === 'number' && typeof v.path === 'string' && typeof v.size === 'number';
119
+ }
120
+ //# sourceMappingURL=manifest-default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-default.js","sourceRoot":"","sources":["../../src/assets/manifest-default.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Asset manifest filename parsing — the inverse of `manifestPath` /
3
+ * `selectorSuffix`. Given a filename on disk, extract the asset name and
4
+ * (locale, theme) selector. Used by `enumerateAssetStoragePaths` to find
5
+ * existing locale/theme override manifests without trusting filename
6
+ * conventions blindly.
7
+ *
8
+ * Single responsibility: filename ↔ (assetName, selector). No I/O, no
9
+ * disambiguation across asset names, no schema awareness. Pure.
10
+ *
11
+ * Grammar (per design-media.md and dimensions.ts):
12
+ * {name}.asset.json → default manifest, selector=null
13
+ * {name}.asset.{locale}.json → locale-only override
14
+ * {name}.asset.{theme}.json → theme-only override
15
+ * {name}.asset.{locale}.{theme}.json → locale + theme
16
+ *
17
+ * Selector tokens:
18
+ * - locale: BCP 47 (lowercase), validated by `isValidLocale`
19
+ * - theme: lowercase ASCII non-locale token, validated by `isValidTheme`
20
+ *
21
+ * Per `DIMENSION_ORDER` (locale before theme), classification is:
22
+ * - 1 token: locale OR theme — try locale first; theme on miss
23
+ * - 2 tokens: first is locale, second is theme. The first token MUST
24
+ * validate as a locale and the second MUST validate as a theme — any
25
+ * other shape is rejected (no slot reordering, no theme-then-locale).
26
+ *
27
+ * Adding a future dimension: extend the recognized-tokens loop to walk
28
+ * `DIMENSION_ORDER` and try each dimension's validator in turn. Today
29
+ * the closed two-dimension grammar lets us hardcode the cases for
30
+ * clarity.
31
+ */
32
+ import { type Selector } from '../schema/dimensions.js';
33
+ /**
34
+ * Parsed manifest filename. Carries the asset name and the selector
35
+ * extracted from the suffix. `selector === null` means default manifest.
36
+ */
37
+ export interface ParsedManifestFilename {
38
+ readonly assetName: string;
39
+ readonly selector: Selector | null;
40
+ }
41
+ /**
42
+ * Try to parse `filename` as an asset manifest. Returns `null` when:
43
+ * - the filename doesn't end in `.asset.json` (or `.asset.X.json` etc.)
44
+ * - any selector token fails its validator
45
+ * - the asset name (everything before `.asset`) is empty
46
+ *
47
+ * Strict — invalid selector tokens are rejected outright, not coerced.
48
+ * Callers that scan a directory pass every entry through this; matches
49
+ * surface as overrides, misses are skipped (could be unrelated files).
50
+ */
51
+ export declare function parseManifestFilename(filename: string): ParsedManifestFilename | null;
52
+ //# sourceMappingURL=manifest-filename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-filename.d.ts","sourceRoot":"","sources":["../../src/assets/manifest-filename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAItE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CA2BrF"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Asset manifest filename parsing — the inverse of `manifestPath` /
3
+ * `selectorSuffix`. Given a filename on disk, extract the asset name and
4
+ * (locale, theme) selector. Used by `enumerateAssetStoragePaths` to find
5
+ * existing locale/theme override manifests without trusting filename
6
+ * conventions blindly.
7
+ *
8
+ * Single responsibility: filename ↔ (assetName, selector). No I/O, no
9
+ * disambiguation across asset names, no schema awareness. Pure.
10
+ *
11
+ * Grammar (per design-media.md and dimensions.ts):
12
+ * {name}.asset.json → default manifest, selector=null
13
+ * {name}.asset.{locale}.json → locale-only override
14
+ * {name}.asset.{theme}.json → theme-only override
15
+ * {name}.asset.{locale}.{theme}.json → locale + theme
16
+ *
17
+ * Selector tokens:
18
+ * - locale: BCP 47 (lowercase), validated by `isValidLocale`
19
+ * - theme: lowercase ASCII non-locale token, validated by `isValidTheme`
20
+ *
21
+ * Per `DIMENSION_ORDER` (locale before theme), classification is:
22
+ * - 1 token: locale OR theme — try locale first; theme on miss
23
+ * - 2 tokens: first is locale, second is theme. The first token MUST
24
+ * validate as a locale and the second MUST validate as a theme — any
25
+ * other shape is rejected (no slot reordering, no theme-then-locale).
26
+ *
27
+ * Adding a future dimension: extend the recognized-tokens loop to walk
28
+ * `DIMENSION_ORDER` and try each dimension's validator in turn. Today
29
+ * the closed two-dimension grammar lets us hardcode the cases for
30
+ * clarity.
31
+ */
32
+ import { buildSelector } from '../schema/dimensions.js';
33
+ import { isValidLocale } from '../locale.js';
34
+ import { isValidTheme } from '../themes.js';
35
+ /**
36
+ * Try to parse `filename` as an asset manifest. Returns `null` when:
37
+ * - the filename doesn't end in `.asset.json` (or `.asset.X.json` etc.)
38
+ * - any selector token fails its validator
39
+ * - the asset name (everything before `.asset`) is empty
40
+ *
41
+ * Strict — invalid selector tokens are rejected outright, not coerced.
42
+ * Callers that scan a directory pass every entry through this; matches
43
+ * surface as overrides, misses are skipped (could be unrelated files).
44
+ */
45
+ export function parseManifestFilename(filename) {
46
+ if (!filename.endsWith('.json'))
47
+ return null;
48
+ // Strip the trailing `.json`.
49
+ const withoutExt = filename.slice(0, -'.json'.length);
50
+ // Find the `.asset` marker. The asset name is everything before it;
51
+ // the selector tokens are everything after (dot-separated).
52
+ const markerIdx = withoutExt.lastIndexOf('.asset');
53
+ if (markerIdx < 0)
54
+ return null;
55
+ const assetName = withoutExt.slice(0, markerIdx);
56
+ const afterMarker = withoutExt.slice(markerIdx + '.asset'.length);
57
+ if (assetName.length === 0)
58
+ return null;
59
+ // Default manifest — no selector tokens.
60
+ if (afterMarker.length === 0) {
61
+ return { assetName, selector: null };
62
+ }
63
+ // Selector tokens follow as `.token1` or `.token1.token2`. Anything
64
+ // else (no leading dot, empty token from `..`) is invalid.
65
+ if (!afterMarker.startsWith('.'))
66
+ return null;
67
+ const tokens = afterMarker.slice(1).split('.');
68
+ if (tokens.length === 0 || tokens.length > 2)
69
+ return null;
70
+ if (tokens.some(t => t.length === 0))
71
+ return null;
72
+ const selector = classifySelectorTokens(tokens);
73
+ if (selector === null)
74
+ return null;
75
+ return { assetName, selector };
76
+ }
77
+ /**
78
+ * Classify selector tokens into a Selector. Returns null if the tokens
79
+ * don't form a valid (locale?, theme?) shape per the grammar.
80
+ *
81
+ * One-token forms try locale first, then theme. Both validators reject
82
+ * each other's shapes (theme rejects BCP 47; isValidLocale rejects
83
+ * lowercase-only non-BCP-47), so the order is unambiguous in practice
84
+ * and this preference matters only for the rare case where both
85
+ * validators accept (which the validators are designed not to do).
86
+ */
87
+ function classifySelectorTokens(tokens) {
88
+ if (tokens.length === 1) {
89
+ const t = tokens[0];
90
+ if (isValidLocale(t))
91
+ return buildSelector({ locale: t });
92
+ if (isValidTheme(t))
93
+ return buildSelector({ theme: t });
94
+ return null;
95
+ }
96
+ // Two tokens: locked order is locale, then theme.
97
+ const [t1, t2] = tokens;
98
+ if (!isValidLocale(t1))
99
+ return null;
100
+ if (!isValidTheme(t2))
101
+ return null;
102
+ return buildSelector({ locale: t1, theme: t2 });
103
+ }
104
+ //# sourceMappingURL=manifest-filename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-filename.js","sourceRoot":"","sources":["../../src/assets/manifest-filename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,aAAa,EAAiB,MAAM,yBAAyB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAW3C;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5C,8BAA8B;IAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACrD,oEAAoE;IACpE,4DAA4D;IAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAClD,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IACjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,yCAAyC;IACzC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IACtC,CAAC;IAED,oEAAoE;IACpE,2DAA2D;IAC3D,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACzD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEjD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC/C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAClC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAAC,MAAyB;IACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QACpB,IAAI,aAAa,CAAC,CAAC,CAAC;YAAE,OAAO,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACzD,IAAI,YAAY,CAAC,CAAC,CAAC;YAAE,OAAO,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,kDAAkD;IAClD,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAA0B,CAAA;IAC3C,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,OAAO,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Locale-variant manifest I/O + validation, dispatched by asset kind.
3
+ *
4
+ * Three kinds, three locale-variant shapes:
5
+ * - embedded → `LocaleOverrideManifest` (override-merge per Q3 lock)
6
+ * - downloadable → `LocaleOverrideManifest` (same shape as embedded)
7
+ * - font → `FontLocaleAdditiveManifest` (additive variant union, NOT
8
+ * override; per Q3 lock fonts compose differently)
9
+ *
10
+ * # The interface
11
+ *
12
+ * `LocaleManifestVariant<T>` packages "validate + read" for one kind's
13
+ * locale-variant shape. Three implementations (one per kind), one
14
+ * dispatch table. Adding a new kind = new implementation + table entry,
15
+ * no changes to existing kinds.
16
+ *
17
+ * # Why locale variants are optional
18
+ *
19
+ * Default manifests are required (no default = asset doesn't exist);
20
+ * locale variants are optional. Reads return `null` when the file is
21
+ * missing — same shape as "no override for this locale." Throwing on
22
+ * missing would force every walker to wrap in try/catch when "absent"
23
+ * is the common case.
24
+ *
25
+ * # Why a separate module from manifest-default.ts
26
+ *
27
+ * Default and locale shapes are genuinely distinct (locale-override has
28
+ * optional byte fields; locale-additive-font has font-specific fields).
29
+ * Separate modules let each evolve independently. The dispatch table
30
+ * (`localeManifestVariants`) is the only place a caller bridges them —
31
+ * keying by `AssetKind` keeps the bridge mechanical.
32
+ */
33
+ import type { StorageProvider } from '../types.js';
34
+ import type { Selector } from '../schema/dimensions.js';
35
+ import type { AssetKind, FontLocaleAdditiveManifest, LocaleOverrideManifest } from '../schema/types.js';
36
+ /**
37
+ * Variant of locale-manifest I/O for one asset kind. Three concrete
38
+ * implementations; the dispatch table picks based on the default
39
+ * manifest's `kind` (which is read separately, before any locale
40
+ * variant lookup).
41
+ */
42
+ export interface LocaleManifestVariant<T> {
43
+ /** Type guard for parsed JSON. Returns false on shape mismatch. */
44
+ validate(parsed: unknown): parsed is T;
45
+ /**
46
+ * Read + parse + validate. Returns `null` when the file doesn't
47
+ * exist (the common case). Throws `AssetManifestCorruptError` on
48
+ * shape mismatch, `AssetStorageError` on I/O failure.
49
+ */
50
+ read(storage: StorageProvider, assetsRoot: string, assetName: string, selector: Selector): Promise<T | null>;
51
+ }
52
+ /**
53
+ * Get the locale-manifest variant for a given asset kind. Type
54
+ * narrows the return so callers see the right manifest shape.
55
+ */
56
+ export declare function localeManifestVariantFor(kind: 'embedded'): LocaleManifestVariant<LocaleOverrideManifest>;
57
+ export declare function localeManifestVariantFor(kind: 'downloadable'): LocaleManifestVariant<LocaleOverrideManifest>;
58
+ export declare function localeManifestVariantFor(kind: 'font'): LocaleManifestVariant<FontLocaleAdditiveManifest>;
59
+ export declare function localeManifestVariantFor(kind: AssetKind): LocaleManifestVariant<LocaleOverrideManifest> | LocaleManifestVariant<FontLocaleAdditiveManifest>;
60
+ //# sourceMappingURL=manifest-locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-locale.d.ts","sourceRoot":"","sources":["../../src/assets/manifest-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAgB,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAIrH;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,CAAC,CAAA;IACtC;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;CAC7G;AAsDD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAA;AACzG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,cAAc,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAA;AAC7G,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAAC,0BAA0B,CAAC,CAAA;AACzG,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,GACd,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,qBAAqB,CAAC,0BAA0B,CAAC,CAAA"}
@@ -0,0 +1,206 @@
1
+ import { AssetManifestCorruptError, AssetStorageError } from './errors.js';
2
+ import { manifestPath } from './manifest.js';
3
+ // ---------- Embedded locale-override variant ----------
4
+ const embeddedVariant = {
5
+ validate(parsed) {
6
+ return validateLocaleOverride(parsed);
7
+ },
8
+ async read(storage, assetsRoot, assetName, selector) {
9
+ return readLocaleOverride(storage, assetsRoot, assetName, selector);
10
+ },
11
+ };
12
+ // ---------- Downloadable locale-override variant ----------
13
+ // Today's downloadable shape matches embedded's locale-override shape
14
+ // exactly — both share `LocaleOverrideManifest`. They diverge structurally
15
+ // only when downloadable gains its own fields (`title`, `description`)
16
+ // in step 17. The validator gains those checks then; today the same
17
+ // `validateLocaleOverride` covers both, with the kind-specific switch
18
+ // living in this dispatch.
19
+ const downloadableVariant = {
20
+ validate(parsed) {
21
+ return validateLocaleOverride(parsed);
22
+ },
23
+ async read(storage, assetsRoot, assetName, selector) {
24
+ return readLocaleOverride(storage, assetsRoot, assetName, selector);
25
+ },
26
+ };
27
+ // ---------- Font locale-additive variant ----------
28
+ const fontVariant = {
29
+ validate(parsed) {
30
+ return validateFontLocaleAdditive(parsed);
31
+ },
32
+ async read(storage, assetsRoot, assetName, selector) {
33
+ return readFontLocaleAdditive(storage, assetsRoot, assetName, selector);
34
+ },
35
+ };
36
+ // ---------- Dispatch table ----------
37
+ /**
38
+ * Map kind → locale variant. Walker reads the default first to discover
39
+ * `kind`, then looks up the right variant here. Type narrows via the
40
+ * indexed access in `localeManifestVariantFor`.
41
+ */
42
+ const variantsByKind = {
43
+ embedded: embeddedVariant,
44
+ downloadable: downloadableVariant,
45
+ font: fontVariant,
46
+ };
47
+ export function localeManifestVariantFor(kind) {
48
+ return variantsByKind[kind];
49
+ }
50
+ // ---------- Shared read helper for embedded/downloadable ----------
51
+ async function readLocaleOverride(storage, assetsRoot, assetName, selector) {
52
+ const path = `${assetsRoot}/${manifestPath(assetName, selector)}`;
53
+ const exists = await storage.exists(path).catch(err => {
54
+ throw new AssetStorageError('stat', path, err);
55
+ });
56
+ if (!exists)
57
+ return null;
58
+ let raw;
59
+ try {
60
+ raw = await storage.readFile(path);
61
+ }
62
+ catch (err) {
63
+ throw new AssetStorageError('read', path, err);
64
+ }
65
+ let parsed;
66
+ try {
67
+ parsed = JSON.parse(raw);
68
+ }
69
+ catch (err) {
70
+ throw new AssetManifestCorruptError(path, err);
71
+ }
72
+ if (!validateLocaleOverride(parsed)) {
73
+ throw new AssetManifestCorruptError(path, new Error('locale-override manifest shape mismatch'));
74
+ }
75
+ return parsed;
76
+ }
77
+ async function readFontLocaleAdditive(storage, assetsRoot, assetName, selector) {
78
+ const path = `${assetsRoot}/${manifestPath(assetName, selector)}`;
79
+ const exists = await storage.exists(path).catch(err => {
80
+ throw new AssetStorageError('stat', path, err);
81
+ });
82
+ if (!exists)
83
+ return null;
84
+ let raw;
85
+ try {
86
+ raw = await storage.readFile(path);
87
+ }
88
+ catch (err) {
89
+ throw new AssetStorageError('read', path, err);
90
+ }
91
+ let parsed;
92
+ try {
93
+ parsed = JSON.parse(raw);
94
+ }
95
+ catch (err) {
96
+ throw new AssetManifestCorruptError(path, err);
97
+ }
98
+ if (!validateFontLocaleAdditive(parsed)) {
99
+ throw new AssetManifestCorruptError(path, new Error('font-locale-additive manifest shape mismatch'));
100
+ }
101
+ return parsed;
102
+ }
103
+ // ---------- Validators ----------
104
+ /**
105
+ * Validate a locale-override manifest. Two valid shapes (per the
106
+ * discriminated union in schema/types.ts):
107
+ *
108
+ * 1. Metadata-only override — no `hash`. All byte-describing fields
109
+ * must be absent. Optional metadata fields validate per their type.
110
+ * 2. Bytes override — `hash` set. `size`, `mime`, `width`, `height`,
111
+ * `variants` MUST all be present (byte-presence-coupled).
112
+ */
113
+ function validateLocaleOverride(candidate) {
114
+ if (!candidate || typeof candidate !== 'object')
115
+ return false;
116
+ const m = candidate;
117
+ // Identity fields (always present)
118
+ if (m.version !== 1)
119
+ return false;
120
+ if (typeof m.name !== 'string')
121
+ return false;
122
+ // Byte-presence coupling: hash present ⇒ all bytes-describing fields present
123
+ const hasHash = m.hash !== undefined;
124
+ if (hasHash) {
125
+ if (typeof m.hash !== 'string')
126
+ return false;
127
+ if (typeof m.size !== 'number')
128
+ return false;
129
+ if (typeof m.mime !== 'string')
130
+ return false;
131
+ if (m.width !== null && typeof m.width !== 'number')
132
+ return false;
133
+ if (m.height !== null && typeof m.height !== 'number')
134
+ return false;
135
+ if (!Array.isArray(m.variants))
136
+ return false;
137
+ if (!m.variants.every(isAssetVariant))
138
+ return false;
139
+ }
140
+ else {
141
+ // Metadata-only: byte-describing fields must all be absent
142
+ if (m.size !== undefined)
143
+ return false;
144
+ if (m.mime !== undefined)
145
+ return false;
146
+ if (m.width !== undefined)
147
+ return false;
148
+ if (m.height !== undefined)
149
+ return false;
150
+ if (m.variants !== undefined)
151
+ return false;
152
+ }
153
+ // Optional metadata overrides (shared by metadata-only and bytes-override)
154
+ if (m.alt !== undefined && m.alt !== null && typeof m.alt !== 'string')
155
+ return false;
156
+ if (m.focalPoint !== undefined && !isFocalPoint(m.focalPoint))
157
+ return false;
158
+ if (m.title !== undefined && typeof m.title !== 'string')
159
+ return false;
160
+ if (m.description !== undefined && typeof m.description !== 'string')
161
+ return false;
162
+ return true;
163
+ }
164
+ /**
165
+ * Validate a font locale-additive manifest. Fonts always have bytes
166
+ * (a font with no bytes is meaningless) AND font-specific fields.
167
+ */
168
+ function validateFontLocaleAdditive(candidate) {
169
+ if (!candidate || typeof candidate !== 'object')
170
+ return false;
171
+ const m = candidate;
172
+ if (m.version !== 1)
173
+ return false;
174
+ if (typeof m.name !== 'string')
175
+ return false;
176
+ // Bytes are mandatory for fonts
177
+ if (typeof m.hash !== 'string')
178
+ return false;
179
+ if (typeof m.size !== 'number')
180
+ return false;
181
+ if (typeof m.mime !== 'string')
182
+ return false;
183
+ // Font-specific fields
184
+ if (m.format !== 'woff2' && m.format !== 'woff' && m.format !== 'ttf' && m.format !== 'otf')
185
+ return false;
186
+ if (m.weight !== 'variable' && typeof m.weight !== 'number')
187
+ return false;
188
+ if (m.style !== 'normal' && m.style !== 'italic')
189
+ return false;
190
+ if (m.unicodeRange !== null && typeof m.unicodeRange !== 'string')
191
+ return false;
192
+ return true;
193
+ }
194
+ function isAssetVariant(candidate) {
195
+ if (!candidate || typeof candidate !== 'object')
196
+ return false;
197
+ const v = candidate;
198
+ return typeof v.width === 'number' && typeof v.path === 'string' && typeof v.size === 'number';
199
+ }
200
+ function isFocalPoint(candidate) {
201
+ if (!candidate || typeof candidate !== 'object')
202
+ return false;
203
+ const f = candidate;
204
+ return typeof f.x === 'number' && typeof f.y === 'number';
205
+ }
206
+ //# sourceMappingURL=manifest-locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-locale.js","sourceRoot":"","sources":["../../src/assets/manifest-locale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Manifest field-merge primitives. Pure functions; no I/O.
3
+ *
4
+ * Two operations:
5
+ * - `applyLocaleOverrides` — shallow spread of one override on top of a
6
+ * base manifest. The override's non-undefined fields win; everything
7
+ * else falls through to the base.
8
+ * - `foldLocaleChain` — multi-overlay fold: read each chain entry and
9
+ * spread it on the previous, most-specific-LAST so most-specific
10
+ * wins per field.
11
+ *
12
+ * # Why a separate module
13
+ *
14
+ * The merge is the one piece of logic shared between embedded and
15
+ * downloadable kind resolvers (per Q3 lock). Font resolver does NOT
16
+ * use override-merge — it composes a variant union, structurally
17
+ * different. So the merge primitive lives separately and the kinds
18
+ * that share semantics compose it; the one that doesn't, doesn't.
19
+ *
20
+ * # Shallow vs deep
21
+ *
22
+ * The merge is SHALLOW. `focalPoint`, `variants`, `width`, `height` are
23
+ * atomic values from the override's perspective — partial focal-point
24
+ * overrides aren't a concept. If a locale variant carries `focalPoint`,
25
+ * its full {x, y} pair replaces the default's; you don't mix x from one
26
+ * with y from another.
27
+ *
28
+ * # Why use spread of `Partial<M>` instead of typed `LocaleOverrideManifest`
29
+ *
30
+ * Generic over manifest type so the same primitive can serve embedded
31
+ * and downloadable (and any future kind that wants override-wins
32
+ * semantics) without re-implementing per kind.
33
+ */
34
+ /**
35
+ * Spread `override`'s non-undefined fields onto `base`. Returns a new
36
+ * object — `base` is not mutated.
37
+ *
38
+ * Fields that are `undefined` in `override` do NOT shadow `base`'s value.
39
+ * That's the whole point: a locale manifest with only `alt` set should
40
+ * keep the default's everything-else.
41
+ *
42
+ * `null` is treated as a value, not "absent". `alt: null` on the override
43
+ * explicitly clears the default's alt — useful for "this locale's image
44
+ * is decorative even though the default has alt text."
45
+ */
46
+ export declare function applyLocaleOverrides<M extends object>(base: M, override: Partial<M> | null): M;
47
+ /**
48
+ * Fold a chain of overrides onto a base. Chain order is
49
+ * most-specific-LAST so the final fold step replaces fields from
50
+ * less-specific entries.
51
+ *
52
+ * Example for active `pt-BR` with fallback `pt`:
53
+ *
54
+ * chain = [pt-manifest, pt-BR-manifest] // least-specific FIRST
55
+ * foldLocaleChain(default, chain)
56
+ *
57
+ * Step 1: apply pt overrides onto default → pt-effective
58
+ * Step 2: apply pt-BR overrides onto pt-effective → pt-BR-effective
59
+ *
60
+ * Most-specific (pt-BR) wins per field. Entries that are `null` (locale
61
+ * manifest didn't exist) are skipped — same effect as no overrides.
62
+ *
63
+ * Caller responsibility: order the chain correctly. Most-specific LAST.
64
+ */
65
+ export declare function foldLocaleChain<M extends object>(base: M, chain: readonly (Partial<M> | null)[]): M;
66
+ //# sourceMappingURL=manifest-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-merge.d.ts","sourceRoot":"","sources":["../../src/assets/manifest-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAQ9F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAMnG"}