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
package/dist/types.d.ts CHANGED
@@ -10,6 +10,8 @@ export type TemplateFunction<T extends Record<string, unknown> = Record<string,
10
10
  content?: T;
11
11
  children?: RenderOutput[];
12
12
  params?: Record<string, string>;
13
+ /** Active locale code (e.g. 'fr', 'en'). Always provided by the renderer — defaults to site's locale or 'en'. */
14
+ locale: string;
13
15
  }) => RenderOutput | Promise<RenderOutput>;
14
16
  /** Mount function for framework-agnostic custom editors */
15
17
  export interface EditorMount {
@@ -20,6 +22,20 @@ export interface EditorMount {
20
22
  onChange: (content: Record<string, unknown>) => void;
21
23
  /** Base URL for loading custom field modules (dev mode: /@fs/ path) */
22
24
  fieldsBaseUrl?: string;
25
+ /**
26
+ * Asset picker callback — used by embedded-asset field widgets to
27
+ * open a "select one asset" modal. Admin supplies its own
28
+ * implementation (Vue-rendered in the admin); the editor package
29
+ * depends only on the abstract Promise-returning shape.
30
+ *
31
+ * Returns `{ _asset: name }` on confirm, `null` on cancel.
32
+ */
33
+ onPickAsset?: (options: {
34
+ accept?: string[];
35
+ currentAssetName?: string | null;
36
+ }) => Promise<{
37
+ _asset: string;
38
+ } | null>;
23
39
  }): void;
24
40
  unmount(el: HTMLElement): void;
25
41
  }
@@ -73,14 +89,32 @@ export interface CacheConfig {
73
89
  /** CDN cache purge configuration */
74
90
  purge?: PurgeConfig;
75
91
  }
92
+ /** SEO metadata for a page — surfaced in <head> and used by sitemap generation. */
93
+ export interface PageMetadata {
94
+ title?: string;
95
+ description?: string;
96
+ ogImage?: string;
97
+ canonical?: string;
98
+ /** Robots directive — e.g. "noindex", "nofollow", "noindex, nofollow".
99
+ * When set, emitted as `<meta name="robots" content="...">`.
100
+ * When absent, the tag is omitted (default: allow indexing). */
101
+ robots?: string;
102
+ }
76
103
  /** Page manifest (routable component) */
77
104
  export interface PageManifest extends ComponentManifest {
78
105
  route: string;
106
+ metadata?: PageMetadata;
79
107
  cache?: CacheConfig;
80
108
  }
81
109
  /** Storage configuration */
82
110
  export interface StorageConfig {
83
111
  type: 'filesystem' | 'azure-blob' | 's3' | 'r2';
112
+ /**
113
+ * Filesystem storage directory, relative to the site directory.
114
+ * Defaults to `./targets/<target-key>` when unset — the target's key in
115
+ * site.yaml maps to a subdirectory under `targets/`. Override for shared
116
+ * drives, external mounts, or existing custom layouts.
117
+ */
84
118
  path?: string;
85
119
  connectionString?: string;
86
120
  container?: string;
@@ -97,33 +131,185 @@ export interface WorkerConfig {
97
131
  name?: string;
98
132
  }
99
133
  export type TargetEnvironment = 'local' | 'staging' | 'production';
134
+ export type TargetType = 'static' | 'dynamic';
100
135
  /** Target configuration in site.yaml */
101
136
  export interface TargetConfig {
102
137
  storage: StorageConfig;
103
138
  worker?: WorkerConfig;
104
- /** Publish mode — 'esi' for Workers/gazetta serve, 'static' for static hosting. Default: esi if worker configured, static otherwise. */
105
- publishMode?: 'esi' | 'static';
139
+ /**
140
+ * Rendering model:
141
+ * - `static`: pre-rendered at publish time, served from edge (no SSR at request)
142
+ * - `dynamic`: composed/SSR'd at request time on Node/Bun server (ESI-style assembly)
143
+ * Default: `dynamic` if worker configured, `static` otherwise.
144
+ */
145
+ type?: TargetType;
106
146
  /**
107
147
  * Semantic intent of this target — drives UI treatment (confirmation
108
- * prompts, badges) and ops decisions. Default: 'local' for filesystem,
109
- * 'production' otherwise. Override in site.yaml for shared filesystem
110
- * mounts used as production, or for cloud targets used for staging.
148
+ * prompts, badges) and ops decisions. Default: 'local'. Production
149
+ * targets must be marked explicitly the default is safe, not
150
+ * alarming; prod opt-in prevents accidental prod chrome on dev targets.
111
151
  */
112
152
  environment?: TargetEnvironment;
153
+ /**
154
+ * Whether the author can save form-edits to this target and whether it
155
+ * can receive publishes from the CMS. Default: `true` for `environment:
156
+ * local` (or unset — local is the env default), `false` for `staging`
157
+ * and `production`.
158
+ * Override explicitly for hotfix-tolerant staging/prod setups
159
+ * (`editable: true`) or locked-down local targets (`editable: false`).
160
+ */
161
+ editable?: boolean;
113
162
  /** Base URL of the site (e.g. https://gazetta.studio) */
114
163
  siteUrl?: string;
164
+ /**
165
+ * Locale subset this target serves. Inherits site-level `locales.supported`
166
+ * when absent. A single-entry list (e.g. `[fr]`) makes the target
167
+ * single-language — no URL prefix, no locale switching.
168
+ */
169
+ locales?: string[];
170
+ /**
171
+ * Default locale for this target. Inherits site-level `locale` when absent.
172
+ * The default locale has no URL prefix (unless `defaultPrefix` is true).
173
+ * For single-locale targets, auto-inferred from the `locales` list.
174
+ */
175
+ locale?: string;
176
+ /**
177
+ * Override site-level `locales.defaultPrefix` for this target.
178
+ */
179
+ defaultPrefix?: boolean;
180
+ /**
181
+ * Override site-level `locales.detection` for this target.
182
+ */
183
+ detection?: boolean;
115
184
  cache?: CacheConfig;
185
+ /**
186
+ * Per-target history / revisions (undo, rollback). Default: enabled
187
+ * with 50-revision retention. Set `{ enabled: false }` to disable
188
+ * entirely (no `.gazetta/history/` writes on save/publish) for
189
+ * targets where the storage cost isn't worth it (e.g., ephemeral CI
190
+ * preview targets).
191
+ */
192
+ history?: HistoryConfig;
193
+ /**
194
+ * Image-transform delivery strategy. When unset, `sharp` adapter is
195
+ * used — bytes serve from origin with the immutable cache headers
196
+ * the v1 slice ships. Set to `cloudflare` (or future adapters) to
197
+ * route URLs through a CDN's transform pipeline.
198
+ */
199
+ transforms?: TransformConfig;
200
+ /**
201
+ * Per-target asset upload policy. Today carries the size cap; future
202
+ * fields (MIME allowlist subset, name policy overrides) extend this
203
+ * block additively. Default cap when unset: 50 MB
204
+ * (DEFAULT_ASSET_MAX_BYTES in assets/validate.ts).
205
+ *
206
+ * Example use cases:
207
+ * - Cloudflare Workers Free tier: cap below 100 MB worker body limit
208
+ * - Self-hosted with nginx + S3: raise to 500 MB for raw-photo
209
+ * workflows
210
+ * - Locked-down prod target: cap at the smallest sensible value
211
+ * for the site's content
212
+ */
213
+ assets?: AssetUploadConfig;
214
+ }
215
+ /** Per-target asset upload policy. */
216
+ export interface AssetUploadConfig {
217
+ /**
218
+ * Per-asset upload size cap in bytes. Validates against the bytes
219
+ * actually received (sniffed at ingest time, not the client's
220
+ * Content-Length claim). Default: 50 MB.
221
+ */
222
+ maxBytes?: number;
116
223
  }
117
- /** Determine publish mode for a target centralised logic used by CLI and admin API */
118
- export declare function getPublishMode(target: TargetConfig): 'esi' | 'static';
119
- /** Resolve a target's environment, applying the storage-type default */
224
+ /** Per-target transform-adapter configuration. */
225
+ export interface TransformConfig {
226
+ /**
227
+ * Adapter name. v1 ships:
228
+ * - `sharp` (default): origin bytes + pre-generated variant ladder
229
+ * - `cloudflare`: `/cdn-cgi/image/...` URL builder against a zone
230
+ */
231
+ adapter: 'sharp' | 'cloudflare';
232
+ /**
233
+ * Cloudflare adapter only: the zone (hostname) where `/cdn-cgi/image/`
234
+ * is served. Required when adapter is `cloudflare`.
235
+ */
236
+ zone?: string;
237
+ }
238
+ /** Per-target history configuration. */
239
+ export interface HistoryConfig {
240
+ /** Record revisions on save/publish. Default: true. */
241
+ enabled?: boolean;
242
+ /**
243
+ * Keep at most N most-recent revisions; oldest evicted on write.
244
+ * Default: 50.
245
+ */
246
+ retention?: number;
247
+ }
248
+ /** Determine rendering type for a target — centralised logic used by CLI and admin API */
249
+ export declare function getType(target: TargetConfig): TargetType;
250
+ /** Resolve a target's environment. Defaults to 'local' — production must be explicit. */
120
251
  export declare function getEnvironment(target: TargetConfig): TargetEnvironment;
252
+ /**
253
+ * Whether the author can save and receive publishes on this target from the CMS.
254
+ * Default: true for `environment: local`, false for `staging` / `production`.
255
+ */
256
+ export declare function isEditable(target: TargetConfig): boolean;
257
+ /** Default retention: keep the last 50 revisions. Matches design-publishing.md. */
258
+ export declare const DEFAULT_HISTORY_RETENTION = 50;
259
+ /** Whether this target records history on save/publish. Default: true. */
260
+ export declare function isHistoryEnabled(target: TargetConfig): boolean;
261
+ /**
262
+ * Effective retention (max revisions) for this target. Defaults to
263
+ * `DEFAULT_HISTORY_RETENTION`. Values ≤ 0 are clamped to 1 — retaining
264
+ * zero revisions would mean every write evicts itself, which is
265
+ * confusing; use `enabled: false` to disable entirely.
266
+ */
267
+ export declare function getHistoryRetention(target: TargetConfig): number;
268
+ /**
269
+ * i18n configuration. Opt-in: absent = single-locale site.
270
+ * Adding `locales` enables multi-locale support.
271
+ */
272
+ export interface LocalesConfig {
273
+ /** All supported locale codes (BCP 47). First entry is the default if `locale` is not set. */
274
+ supported: string[];
275
+ /** Locale-specific fallback chains. E.g. `{ 'pt-BR': 'pt' }` → pt-BR falls back to pt before default. */
276
+ fallbacks?: Record<string, string>;
277
+ /** Whether the default locale gets a URL prefix. Default: false (no prefix for default). */
278
+ defaultPrefix?: boolean;
279
+ /** Enable Accept-Language detection and redirect. Default: false. */
280
+ detection?: boolean;
281
+ }
282
+ /**
283
+ * Theme configuration. Opt-in: absent = single-theme site (no theme overrides
284
+ * on assets). Themes are a peer override dimension to locales — assets can
285
+ * declare locale-specific bytes, theme-specific bytes, or both.
286
+ *
287
+ * v1 enables themes on **assets only**. Page/fragment theme variants are
288
+ * deferred; templates emit theme-aware CSS via PrimeVue tokens / class-based
289
+ * cascade. See design-media.md and css-theming.md.
290
+ */
291
+ export interface ThemesConfig {
292
+ /** Supported theme names (lowercase ASCII, no dots). Conventionally `['light', 'dark']`. */
293
+ supported: string[];
294
+ /** Default theme name. Falls back to first in `supported`. */
295
+ default?: string;
296
+ }
121
297
  /** Site manifest (site.yaml) */
122
298
  export interface SiteManifest {
123
299
  name: string;
124
300
  version?: string;
301
+ /** Default locale code (BCP 47). Falls back to first in `locales.supported`, then 'en'. */
125
302
  locale?: string;
126
- baseUrl?: string;
303
+ /** i18n configuration. Absent = single-locale site. */
304
+ locales?: LocalesConfig;
305
+ /**
306
+ * Theme configuration for asset overrides. Absent = no theme dimension
307
+ * (assets are theme-agnostic). When set, assets can carry per-theme
308
+ * byte overrides, and the resolver picks variants per render context.
309
+ */
310
+ themes?: ThemesConfig;
311
+ /** Default Open Graph image for pages that don't specify their own. */
312
+ defaultOgImage?: string;
127
313
  systemPages?: string[];
128
314
  targets?: Record<string, TargetConfig>;
129
315
  }
@@ -132,7 +318,38 @@ export interface DirEntry {
132
318
  name: string;
133
319
  isDirectory: boolean;
134
320
  }
135
- /** Storage abstraction — filesystem, S3, Azure Blob, etc. */
321
+ /**
322
+ * Byte range for `StorageProvider.readStream`.
323
+ * Both `start` and `end` are inclusive (matches HTTP Range and Node `fs.createReadStream`).
324
+ */
325
+ export interface ByteRange {
326
+ start: number;
327
+ end: number;
328
+ }
329
+ /**
330
+ * Storage abstraction — filesystem, S3, R2, Azure Blob.
331
+ *
332
+ * Implementations must provide atomic writes from a reader's perspective
333
+ * (filesystem uses write-then-rename; cloud PUT is naturally atomic per
334
+ * object; multipart uploads commit atomically). `readStream` must honor
335
+ * the optional `range` argument for video/audio seek.
336
+ *
337
+ * Three I/O patterns, each with a use case:
338
+ * - **Text** (`readFile` / `writeFile`): small string content
339
+ * (manifests, YAML, HTML). Encodes/decodes UTF-8 internally.
340
+ * - **Bytes** (`readBytes` / `writeBytes`): small binary content
341
+ * (asset bytes, history blobs). Buffer-shaped — bytes in, bytes
342
+ * out. No string round-trip.
343
+ * - **Stream** (`readStream` / `writeStream`): unbounded content
344
+ * (large uploads, range-served videos). Used by ingest and the
345
+ * asset-serve route.
346
+ *
347
+ * All three are part of the base contract, not separate capabilities —
348
+ * every provider Gazetta ships supports them, and custom providers
349
+ * must too. Authors writing a non-conforming provider get a compile-
350
+ * time error rather than a runtime capability check that surfaces
351
+ * at publish time.
352
+ */
136
353
  export interface StorageProvider {
137
354
  readFile(path: string): Promise<string>;
138
355
  readDir(path: string): Promise<DirEntry[]>;
@@ -140,6 +357,20 @@ export interface StorageProvider {
140
357
  writeFile(path: string, content: string): Promise<void>;
141
358
  mkdir(path: string): Promise<void>;
142
359
  rm(path: string): Promise<void>;
360
+ /**
361
+ * Read the full byte content of `path`. Bounded — for unbounded /
362
+ * range-served reads, use `readStream`. Used by history-blob reads.
363
+ */
364
+ readBytes(path: string): Promise<Uint8Array>;
365
+ /**
366
+ * Write `content` to `path` atomically. Bounded — for unbounded
367
+ * uploads, use `writeStream`. Used by history-blob writes (and any
368
+ * future write path that has bytes-in-hand and doesn't need
369
+ * streaming).
370
+ */
371
+ writeBytes(path: string, content: Uint8Array): Promise<void>;
372
+ readStream(path: string, range?: ByteRange): Promise<ReadableStream<Uint8Array>>;
373
+ writeStream(path: string, stream: ReadableStream<Uint8Array>): Promise<void>;
143
374
  }
144
375
  /** Resolved component ready for rendering */
145
376
  export interface ResolvedComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,9 +1,32 @@
1
- /** Determine publish mode for a target — centralised logic used by CLI and admin API */
2
- export function getPublishMode(target) {
3
- return target.publishMode ?? (target.worker ? 'esi' : 'static');
1
+ /** Determine rendering type for a target — centralised logic used by CLI and admin API */
2
+ export function getType(target) {
3
+ return target.type ?? (target.worker ? 'dynamic' : 'static');
4
4
  }
5
- /** Resolve a target's environment, applying the storage-type default */
5
+ /** Resolve a target's environment. Defaults to 'local' production must be explicit. */
6
6
  export function getEnvironment(target) {
7
- return target.environment ?? (target.storage.type === 'filesystem' ? 'local' : 'production');
7
+ return target.environment ?? 'local';
8
+ }
9
+ /**
10
+ * Whether the author can save and receive publishes on this target from the CMS.
11
+ * Default: true for `environment: local`, false for `staging` / `production`.
12
+ */
13
+ export function isEditable(target) {
14
+ return target.editable ?? getEnvironment(target) === 'local';
15
+ }
16
+ /** Default retention: keep the last 50 revisions. Matches design-publishing.md. */
17
+ export const DEFAULT_HISTORY_RETENTION = 50;
18
+ /** Whether this target records history on save/publish. Default: true. */
19
+ export function isHistoryEnabled(target) {
20
+ return target.history?.enabled ?? true;
21
+ }
22
+ /**
23
+ * Effective retention (max revisions) for this target. Defaults to
24
+ * `DEFAULT_HISTORY_RETENTION`. Values ≤ 0 are clamped to 1 — retaining
25
+ * zero revisions would mean every write evicts itself, which is
26
+ * confusing; use `enabled: false` to disable entirely.
27
+ */
28
+ export function getHistoryRetention(target) {
29
+ const raw = target.history?.retention ?? DEFAULT_HISTORY_RETENTION;
30
+ return raw > 0 ? raw : 1;
8
31
  }
9
32
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmIA,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AACjE,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;AAC9F,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA+QA,0FAA0F;AAC1F,MAAM,UAAU,OAAO,CAAC,MAAoB;IAC1C,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC9D,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,WAAW,IAAI,OAAO,CAAA;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,OAAO,CAAA;AAC9D,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAE3C,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,yBAAyB,CAAA;IAClE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC"}
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Reads pre-rendered pages and fragments from an R2 bucket,
5
5
  * assembles them using ESI-style composition, and serves with
6
- * Cache API + ETag support.
6
+ * Cache API + ETag support. Locale-aware: extracts locale prefix
7
+ * from URL, reads locale-suffixed files, falls back to default.
7
8
  *
8
9
  * Usage: import and re-export from your worker entry point:
9
10
  *
@@ -13,13 +14,21 @@
13
14
  * Or customize:
14
15
  *
15
16
  * import { createWorker } from 'gazetta/workers/cloudflare-r2'
16
- * const worker = createWorker({ bucketBinding: 'SITE_BUCKET' })
17
+ * const worker = createWorker({
18
+ * bucketBinding: 'SITE_BUCKET',
19
+ * locales: ['en', 'fr', 'de'],
20
+ * defaultLocale: 'en',
21
+ * })
17
22
  * export default worker
18
23
  */
19
24
  import { Hono } from 'hono';
20
25
  export interface CloudflareR2WorkerOptions {
21
26
  /** R2 bucket binding name (default: 'SITE_BUCKET') */
22
27
  bucketBinding?: string;
28
+ /** Supported locale codes (lowercase). Enables locale-prefix routing. */
29
+ locales?: string[];
30
+ /** Default locale — no URL prefix. Falls back to first in `locales`. */
31
+ defaultLocale?: string;
23
32
  /** Custom middleware to add before page serving */
24
33
  middleware?: (app: Hono<{
25
34
  Bindings: Record<string, R2Bucket>;
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare-r2.d.ts","sourceRoot":"","sources":["../../src/workers/cloudflare-r2.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,MAAM,WAAW,yBAAyB;IACxC,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI,CAAA;CACzE;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,yBAAyB;cAG7B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;0CAqF1D"}
1
+ {"version":3,"file":"cloudflare-r2.d.ts","sourceRoot":"","sources":["../../src/workers/cloudflare-r2.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,MAAM,WAAW,yBAAyB;IACxC,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI,CAAA;CACzE;AA0FD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,yBAAyB;cAK7B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;0CAuF1D"}
@@ -4,7 +4,8 @@
4
4
  *
5
5
  * Reads pre-rendered pages and fragments from an R2 bucket,
6
6
  * assembles them using ESI-style composition, and serves with
7
- * Cache API + ETag support.
7
+ * Cache API + ETag support. Locale-aware: extracts locale prefix
8
+ * from URL, reads locale-suffixed files, falls back to default.
8
9
  *
9
10
  * Usage: import and re-export from your worker entry point:
10
11
  *
@@ -14,13 +15,97 @@
14
15
  * Or customize:
15
16
  *
16
17
  * import { createWorker } from 'gazetta/workers/cloudflare-r2'
17
- * const worker = createWorker({ bucketBinding: 'SITE_BUCKET' })
18
+ * const worker = createWorker({
19
+ * bucketBinding: 'SITE_BUCKET',
20
+ * locales: ['en', 'fr', 'de'],
21
+ * defaultLocale: 'en',
22
+ * })
18
23
  * export default worker
19
24
  */
20
25
  import { Hono } from 'hono';
21
26
  import { assembleEsi, parseCacheComment, splitFragment, findEsiPaths } from '../assemble.js';
27
+ // ---------------------------------------------------------------------------
28
+ // Locale extraction (same logic as serve.ts — SRP)
29
+ // ---------------------------------------------------------------------------
30
+ function extractLocale(requestPath, locales) {
31
+ if (locales.length === 0)
32
+ return { locale: undefined, path: requestPath };
33
+ const parts = requestPath.split('/').filter(Boolean);
34
+ if (parts.length > 0 && locales.includes(parts[0])) {
35
+ return { locale: parts[0], path: '/' + parts.slice(1).join('/') || '/' };
36
+ }
37
+ return { locale: undefined, path: requestPath };
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // Fragment fetching with locale fallback (SRP)
41
+ // ---------------------------------------------------------------------------
42
+ async function fetchFragment(bucket, path) {
43
+ const key = path.slice(1);
44
+ const obj = await bucket.get(key);
45
+ if (obj)
46
+ return [path, splitFragment(await obj.text())];
47
+ // Locale fallback: index.fr.html → index.html
48
+ const localeFallback = key.replace(/\/index\.[a-z-]+\.html$/, '/index.html');
49
+ if (localeFallback !== key) {
50
+ const fallbackObj = await bucket.get(localeFallback);
51
+ if (fallbackObj)
52
+ return [path, splitFragment(await fallbackObj.text())];
53
+ }
54
+ return [path, { head: '', body: `<!-- fragment not found: ${path} -->` }];
55
+ }
56
+ // ---------------------------------------------------------------------------
57
+ // Page lookup with locale support (SRP)
58
+ // ---------------------------------------------------------------------------
59
+ async function findPage(bucket, requestPath, locales) {
60
+ const { locale, path: resolvedPath } = locales?.length
61
+ ? extractLocale(requestPath, locales)
62
+ : { locale: undefined, path: requestPath };
63
+ const indexFile = locale ? `index.${locale}.html` : 'index.html';
64
+ // Try exact page path
65
+ const pagePath = resolvedPath === '/' ? `pages/home/${indexFile}` : `pages${resolvedPath}/${indexFile}`;
66
+ const obj = await bucket.get(pagePath);
67
+ if (obj)
68
+ return { html: await obj.text(), locale };
69
+ // Locale fallback to default
70
+ if (locale) {
71
+ const fallback = resolvedPath === '/' ? 'pages/home/index.html' : `pages${resolvedPath}/index.html`;
72
+ const fallbackObj = await bucket.get(fallback);
73
+ if (fallbackObj)
74
+ return { html: await fallbackObj.text(), locale };
75
+ }
76
+ // Dynamic segments — list parent directory, find [param] entries
77
+ const parts = resolvedPath.split('/').filter(Boolean);
78
+ for (let i = parts.length - 1; i >= 0; i--) {
79
+ const parentDir = parts.slice(0, i).join('/');
80
+ const prefix = parentDir ? `pages/${parentDir}/` : 'pages/';
81
+ const listed = await bucket.list({ prefix, delimiter: '/' });
82
+ for (const item of listed.delimitedPrefixes) {
83
+ const segment = item.replace(prefix, '').replace(/\/$/, '');
84
+ if (segment.startsWith('[') && segment.endsWith(']')) {
85
+ const dynamicParts = [...parts];
86
+ dynamicParts[i] = segment;
87
+ const dynamicPath = `pages/${dynamicParts.join('/')}/${indexFile}`;
88
+ const dynObj = await bucket.get(dynamicPath);
89
+ if (dynObj)
90
+ return { html: await dynObj.text(), locale };
91
+ // Dynamic route locale fallback
92
+ if (locale) {
93
+ const dynFallback = await bucket.get(`pages/${dynamicParts.join('/')}/index.html`);
94
+ if (dynFallback)
95
+ return { html: await dynFallback.text(), locale };
96
+ }
97
+ }
98
+ }
99
+ }
100
+ return null;
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Worker composition
104
+ // ---------------------------------------------------------------------------
22
105
  export function createWorker(options) {
23
106
  const bindingName = options?.bucketBinding ?? 'SITE_BUCKET';
107
+ const locales = options?.locales;
108
+ const nonDefaultLocales = locales?.filter(l => l !== (options?.defaultLocale ?? locales?.[0])) ?? [];
24
109
  const app = new Hono();
25
110
  // Custom middleware (e.g., www redirect, auth)
26
111
  if (options?.middleware)
@@ -32,6 +117,23 @@ export function createWorker(options) {
32
117
  const fragments = await bucket.list({ prefix: 'fragments/', delimiter: '/' });
33
118
  return c.json({ ok: true, pages: pages.delimitedPrefixes.length, fragments: fragments.delimitedPrefixes.length });
34
119
  });
120
+ // Root-level files (sitemap.xml, robots.txt) — served from R2
121
+ app.get('/sitemap.xml', async (c) => {
122
+ const obj = await c.env[bindingName].get('sitemap.xml');
123
+ if (!obj)
124
+ return c.notFound();
125
+ return new Response(obj.body, {
126
+ headers: { 'Content-Type': 'application/xml; charset=utf-8', 'Cache-Control': 'public, max-age=3600' },
127
+ });
128
+ });
129
+ app.get('/robots.txt', async (c) => {
130
+ const obj = await c.env[bindingName].get('robots.txt');
131
+ if (!obj)
132
+ return c.notFound();
133
+ return new Response(obj.body, {
134
+ headers: { 'Content-Type': 'text/plain; charset=utf-8', 'Cache-Control': 'public, max-age=3600' },
135
+ });
136
+ });
35
137
  // Static assets (CSS, JS) — immutable cache
36
138
  app.get('/pages/*', async (c) => serveStatic(c, c.env[bindingName]));
37
139
  app.get('/fragments/*', async (c) => serveStatic(c, c.env[bindingName]));
@@ -44,47 +146,36 @@ export function createWorker(options) {
44
146
  return cached;
45
147
  const bucket = c.env[bindingName];
46
148
  const requestPath = new URL(c.req.url).pathname;
47
- const pageHtml = await findPage(bucket, requestPath);
48
- if (!pageHtml) {
49
- const notFoundHtml = await findPage(bucket, '/404');
50
- if (notFoundHtml) {
51
- const { html: raw404 } = parseCacheComment(notFoundHtml);
52
- const fragPaths = findEsiPaths(raw404);
53
- const fragEntries = await Promise.all(fragPaths.map(async (p) => {
54
- const obj = await bucket.get(p.slice(1));
55
- if (!obj)
56
- return [p, { head: '', body: '' }];
57
- return [p, splitFragment(await obj.text())];
58
- }));
149
+ const result = await findPage(bucket, requestPath, locales);
150
+ if (!result) {
151
+ const notFound = await findPage(bucket, '/404');
152
+ if (notFound) {
153
+ const { html: raw404 } = parseCacheComment(notFound.html);
154
+ const fragEntries = await Promise.all(findEsiPaths(raw404).map(p => fetchFragment(bucket, p)));
59
155
  return c.html(assembleEsi(raw404, new Map(fragEntries)), 404);
60
156
  }
61
157
  return c.html('<h1>404 — Page not found</h1>', 404);
62
158
  }
63
- const { html: rawHtml, browser, edge } = parseCacheComment(pageHtml);
64
- // Read all fragments in parallel
65
- const fragmentPaths = findEsiPaths(rawHtml);
66
- const fragmentEntries = await Promise.all(fragmentPaths.map(async (path) => {
67
- const key = path.slice(1);
68
- const obj = await bucket.get(key);
69
- if (!obj)
70
- return [path, { head: '', body: `<!-- fragment not found: ${path} -->` }];
71
- return [path, splitFragment(await obj.text())];
72
- }));
73
- const fragments = new Map(fragmentEntries);
74
- const assembled = assembleEsi(rawHtml, fragments);
159
+ const { html: rawHtml, browser, edge } = parseCacheComment(result.html);
160
+ // Read all fragments in parallel (with locale fallback)
161
+ const fragEntries = await Promise.all(findEsiPaths(rawHtml).map(p => fetchFragment(bucket, p)));
162
+ const assembled = assembleEsi(rawHtml, new Map(fragEntries));
75
163
  // Compute ETag
76
164
  const encoder = new TextEncoder();
77
165
  const hashBuffer = await crypto.subtle.digest('SHA-256', encoder.encode(assembled));
78
- const etag = `"${[...new Uint8Array(hashBuffer)].map(b => b.toString(16).padStart(2, '0')).join('').slice(0, 16)}"`;
166
+ const etag = `"${[...new Uint8Array(hashBuffer)]
167
+ .map(b => b.toString(16).padStart(2, '0'))
168
+ .join('')
169
+ .slice(0, 16)}"`;
79
170
  if (c.req.header('If-None-Match') === etag) {
80
- return new Response(null, { status: 304, headers: { 'ETag': etag } });
171
+ return new Response(null, { status: 304, headers: { ETag: etag } });
81
172
  }
82
173
  const response = new Response(assembled, {
83
174
  status: 200,
84
175
  headers: {
85
176
  'Content-Type': 'text/html; charset=utf-8',
86
177
  'Cache-Control': `public, max-age=${browser}, s-maxage=${edge}`,
87
- 'ETag': etag,
178
+ ETag: etag,
88
179
  },
89
180
  });
90
181
  c.executionCtx.waitUntil(cache.put(request, response.clone()));
@@ -106,30 +197,4 @@ async function serveStatic(c, bucket) {
106
197
  },
107
198
  });
108
199
  }
109
- async function findPage(bucket, requestPath) {
110
- const pagePath = requestPath === '/' ? 'pages/home/index.html'
111
- : `pages${requestPath}/index.html`;
112
- const obj = await bucket.get(pagePath);
113
- if (obj)
114
- return await obj.text();
115
- // Try dynamic segments — list parent directory, find [param] entries
116
- const parts = requestPath.split('/').filter(Boolean);
117
- for (let i = parts.length - 1; i >= 0; i--) {
118
- const parentDir = parts.slice(0, i).join('/');
119
- const prefix = parentDir ? `pages/${parentDir}/` : 'pages/';
120
- const listed = await bucket.list({ prefix, delimiter: '/' });
121
- for (const item of listed.delimitedPrefixes) {
122
- const segment = item.replace(prefix, '').replace(/\/$/, '');
123
- if (segment.startsWith('[') && segment.endsWith(']')) {
124
- const dynamicParts = [...parts];
125
- dynamicParts[i] = segment;
126
- const dynamicPath = `pages/${dynamicParts.join('/')}/index.html`;
127
- const dynObj = await bucket.get(dynamicPath);
128
- if (dynObj)
129
- return await dynObj.text();
130
- }
131
- }
132
- }
133
- return null;
134
- }
135
200
  //# sourceMappingURL=cloudflare-r2.js.map