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.
- package/admin-dist/assets/index-BO9-CXmW.css +1 -0
- package/admin-dist/assets/index-Ufu8zZH_.js +668 -0
- package/admin-dist/assets/{vendor-primevue-BnR1c_bQ.js → vendor-primevue-C0Q_YTCb.js} +330 -431
- package/admin-dist/assets/vendor-vue-D3wBSmDf.js +1 -0
- package/admin-dist/index.html +4 -4
- package/dist/admin-api/error-response.d.ts +21 -0
- package/dist/admin-api/error-response.d.ts.map +1 -0
- package/dist/admin-api/error-response.js +12 -0
- package/dist/admin-api/error-response.js.map +1 -0
- package/dist/admin-api/index.d.ts +19 -6
- package/dist/admin-api/index.d.ts.map +1 -1
- package/dist/admin-api/index.js +137 -21
- package/dist/admin-api/index.js.map +1 -1
- package/dist/admin-api/routes/assets.d.ts +16 -0
- package/dist/admin-api/routes/assets.d.ts.map +1 -0
- package/dist/admin-api/routes/assets.js +433 -0
- package/dist/admin-api/routes/assets.js.map +1 -0
- package/dist/admin-api/routes/compare.d.ts +2 -1
- package/dist/admin-api/routes/compare.d.ts.map +1 -1
- package/dist/admin-api/routes/compare.js +33 -24
- package/dist/admin-api/routes/compare.js.map +1 -1
- package/dist/admin-api/routes/fields.d.ts +2 -2
- package/dist/admin-api/routes/fields.d.ts.map +1 -1
- package/dist/admin-api/routes/fields.js +10 -3
- package/dist/admin-api/routes/fields.js.map +1 -1
- package/dist/admin-api/routes/fragments.d.ts +2 -3
- package/dist/admin-api/routes/fragments.d.ts.map +1 -1
- package/dist/admin-api/routes/fragments.js +120 -21
- package/dist/admin-api/routes/fragments.js.map +1 -1
- package/dist/admin-api/routes/history.d.ts +23 -0
- package/dist/admin-api/routes/history.d.ts.map +1 -0
- package/dist/admin-api/routes/history.js +143 -0
- package/dist/admin-api/routes/history.js.map +1 -0
- package/dist/admin-api/routes/pages.d.ts +2 -3
- package/dist/admin-api/routes/pages.d.ts.map +1 -1
- package/dist/admin-api/routes/pages.js +153 -22
- package/dist/admin-api/routes/pages.js.map +1 -1
- package/dist/admin-api/routes/preview.d.ts +2 -2
- package/dist/admin-api/routes/preview.d.ts.map +1 -1
- package/dist/admin-api/routes/preview.js +50 -15
- package/dist/admin-api/routes/preview.js.map +1 -1
- package/dist/admin-api/routes/publish.d.ts +2 -1
- package/dist/admin-api/routes/publish.d.ts.map +1 -1
- package/dist/admin-api/routes/publish.js +259 -79
- package/dist/admin-api/routes/publish.js.map +1 -1
- package/dist/admin-api/routes/site.d.ts +2 -2
- package/dist/admin-api/routes/site.d.ts.map +1 -1
- package/dist/admin-api/routes/site.js +27 -4
- package/dist/admin-api/routes/site.js.map +1 -1
- package/dist/admin-api/routes/templates.d.ts +2 -2
- package/dist/admin-api/routes/templates.d.ts.map +1 -1
- package/dist/admin-api/routes/templates.js +19 -9
- package/dist/admin-api/routes/templates.js.map +1 -1
- package/dist/admin-api/schemas/assets.d.ts +48 -0
- package/dist/admin-api/schemas/assets.d.ts.map +1 -0
- package/dist/admin-api/schemas/assets.js +44 -0
- package/dist/admin-api/schemas/assets.js.map +1 -0
- package/dist/admin-api/schemas/compare.d.ts +29 -0
- package/dist/admin-api/schemas/compare.d.ts.map +1 -0
- package/dist/admin-api/schemas/compare.js +30 -0
- package/dist/admin-api/schemas/compare.js.map +1 -0
- package/dist/admin-api/schemas/dependents.d.ts +15 -0
- package/dist/admin-api/schemas/dependents.d.ts.map +1 -0
- package/dist/admin-api/schemas/dependents.js +14 -0
- package/dist/admin-api/schemas/dependents.js.map +1 -0
- package/dist/admin-api/schemas/fetch.d.ts +12 -0
- package/dist/admin-api/schemas/fetch.d.ts.map +1 -0
- package/dist/admin-api/schemas/fetch.js +11 -0
- package/dist/admin-api/schemas/fetch.js.map +1 -0
- package/dist/admin-api/schemas/fields.d.ts +11 -0
- package/dist/admin-api/schemas/fields.d.ts.map +1 -0
- package/dist/admin-api/schemas/fields.js +11 -0
- package/dist/admin-api/schemas/fields.js.map +1 -0
- package/dist/admin-api/schemas/fragments.d.ts +27 -0
- package/dist/admin-api/schemas/fragments.d.ts.map +1 -0
- package/dist/admin-api/schemas/fragments.js +26 -0
- package/dist/admin-api/schemas/fragments.js.map +1 -0
- package/dist/admin-api/schemas/history.d.ts +73 -0
- package/dist/admin-api/schemas/history.d.ts.map +1 -0
- package/dist/admin-api/schemas/history.js +35 -0
- package/dist/admin-api/schemas/history.js.map +1 -0
- package/dist/admin-api/schemas/index.d.ts +34 -0
- package/dist/admin-api/schemas/index.d.ts.map +1 -0
- package/dist/admin-api/schemas/index.js +34 -0
- package/dist/admin-api/schemas/index.js.map +1 -0
- package/dist/admin-api/schemas/pages.d.ts +46 -0
- package/dist/admin-api/schemas/pages.d.ts.map +1 -0
- package/dist/admin-api/schemas/pages.js +47 -0
- package/dist/admin-api/schemas/pages.js.map +1 -0
- package/dist/admin-api/schemas/publish.d.ts +67 -0
- package/dist/admin-api/schemas/publish.d.ts.map +1 -0
- package/dist/admin-api/schemas/publish.js +60 -0
- package/dist/admin-api/schemas/publish.js.map +1 -0
- package/dist/admin-api/schemas/site.d.ts +28 -0
- package/dist/admin-api/schemas/site.d.ts.map +1 -0
- package/dist/admin-api/schemas/site.js +24 -0
- package/dist/admin-api/schemas/site.js.map +1 -0
- package/dist/admin-api/schemas/targets.d.ts +36 -0
- package/dist/admin-api/schemas/targets.d.ts.map +1 -0
- package/dist/admin-api/schemas/targets.js +19 -0
- package/dist/admin-api/schemas/targets.js.map +1 -0
- package/dist/admin-api/schemas/templates.d.ts +17 -0
- package/dist/admin-api/schemas/templates.d.ts.map +1 -0
- package/dist/admin-api/schemas/templates.js +16 -0
- package/dist/admin-api/schemas/templates.js.map +1 -0
- package/dist/admin-api/source-context.d.ts +158 -0
- package/dist/admin-api/source-context.d.ts.map +1 -0
- package/dist/admin-api/source-context.js +92 -0
- package/dist/admin-api/source-context.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/assemble.d.ts.map +1 -1
- package/dist/assemble.js +4 -1
- package/dist/assemble.js.map +1 -1
- package/dist/assets/analyze-audio.d.ts +3 -0
- package/dist/assets/analyze-audio.d.ts.map +1 -0
- package/dist/assets/analyze-audio.js +80 -0
- package/dist/assets/analyze-audio.js.map +1 -0
- package/dist/assets/analyze-image.d.ts +19 -0
- package/dist/assets/analyze-image.d.ts.map +1 -0
- package/dist/assets/analyze-image.js +123 -0
- package/dist/assets/analyze-image.js.map +1 -0
- package/dist/assets/analyze.d.ts +94 -0
- package/dist/assets/analyze.d.ts.map +1 -0
- package/dist/assets/analyze.js +45 -0
- package/dist/assets/analyze.js.map +1 -0
- package/dist/assets/asset-deps.d.ts +30 -0
- package/dist/assets/asset-deps.d.ts.map +1 -0
- package/dist/assets/asset-deps.js +42 -0
- package/dist/assets/asset-deps.js.map +1 -0
- package/dist/assets/asset-paths.d.ts +155 -0
- package/dist/assets/asset-paths.d.ts.map +1 -0
- package/dist/assets/asset-paths.js +197 -0
- package/dist/assets/asset-paths.js.map +1 -0
- package/dist/assets/delete.d.ts +75 -0
- package/dist/assets/delete.d.ts.map +1 -0
- package/dist/assets/delete.js +82 -0
- package/dist/assets/delete.js.map +1 -0
- package/dist/assets/errors.d.ts +241 -0
- package/dist/assets/errors.d.ts.map +1 -0
- package/dist/assets/errors.js +300 -0
- package/dist/assets/errors.js.map +1 -0
- package/dist/assets/find-refs.d.ts +37 -0
- package/dist/assets/find-refs.d.ts.map +1 -0
- package/dist/assets/find-refs.js +35 -0
- package/dist/assets/find-refs.js.map +1 -0
- package/dist/assets/hash.d.ts +13 -0
- package/dist/assets/hash.d.ts.map +1 -0
- package/dist/assets/hash.js +43 -0
- package/dist/assets/hash.js.map +1 -0
- package/dist/assets/image-metadata.d.ts +11 -0
- package/dist/assets/image-metadata.d.ts.map +1 -0
- package/dist/assets/image-metadata.js +31 -0
- package/dist/assets/image-metadata.js.map +1 -0
- package/dist/assets/ingest-locale.d.ts +86 -0
- package/dist/assets/ingest-locale.d.ts.map +1 -0
- package/dist/assets/ingest-locale.js +209 -0
- package/dist/assets/ingest-locale.js.map +1 -0
- package/dist/assets/ingest.d.ts +96 -0
- package/dist/assets/ingest.d.ts.map +1 -0
- package/dist/assets/ingest.js +308 -0
- package/dist/assets/ingest.js.map +1 -0
- package/dist/assets/kind-compat.d.ts +34 -0
- package/dist/assets/kind-compat.d.ts.map +1 -0
- package/dist/assets/kind-compat.js +33 -0
- package/dist/assets/kind-compat.js.map +1 -0
- package/dist/assets/list.d.ts +46 -0
- package/dist/assets/list.d.ts.map +1 -0
- package/dist/assets/list.js +102 -0
- package/dist/assets/list.js.map +1 -0
- package/dist/assets/manifest-default.d.ts +56 -0
- package/dist/assets/manifest-default.d.ts.map +1 -0
- package/dist/assets/manifest-default.js +120 -0
- package/dist/assets/manifest-default.js.map +1 -0
- package/dist/assets/manifest-filename.d.ts +52 -0
- package/dist/assets/manifest-filename.d.ts.map +1 -0
- package/dist/assets/manifest-filename.js +104 -0
- package/dist/assets/manifest-filename.js.map +1 -0
- package/dist/assets/manifest-locale.d.ts +60 -0
- package/dist/assets/manifest-locale.d.ts.map +1 -0
- package/dist/assets/manifest-locale.js +206 -0
- package/dist/assets/manifest-locale.js.map +1 -0
- package/dist/assets/manifest-merge.d.ts +66 -0
- package/dist/assets/manifest-merge.d.ts.map +1 -0
- package/dist/assets/manifest-merge.js +82 -0
- package/dist/assets/manifest-merge.js.map +1 -0
- package/dist/assets/manifest.d.ts +83 -0
- package/dist/assets/manifest.d.ts.map +1 -0
- package/dist/assets/manifest.js +93 -0
- package/dist/assets/manifest.js.map +1 -0
- package/dist/assets/mime-sniff.d.ts +18 -0
- package/dist/assets/mime-sniff.d.ts.map +1 -0
- package/dist/assets/mime-sniff.js +84 -0
- package/dist/assets/mime-sniff.js.map +1 -0
- package/dist/assets/preprocess-svg.d.ts +3 -0
- package/dist/assets/preprocess-svg.d.ts.map +1 -0
- package/dist/assets/preprocess-svg.js +49 -0
- package/dist/assets/preprocess-svg.js.map +1 -0
- package/dist/assets/preprocess.d.ts +62 -0
- package/dist/assets/preprocess.d.ts.map +1 -0
- package/dist/assets/preprocess.js +86 -0
- package/dist/assets/preprocess.js.map +1 -0
- package/dist/assets/publish-plan.d.ts +41 -0
- package/dist/assets/publish-plan.d.ts.map +1 -0
- package/dist/assets/publish-plan.js +49 -0
- package/dist/assets/publish-plan.js.map +1 -0
- package/dist/assets/publish.d.ts +33 -0
- package/dist/assets/publish.d.ts.map +1 -0
- package/dist/assets/publish.js +81 -0
- package/dist/assets/publish.js.map +1 -0
- package/dist/assets/refs.d.ts +37 -0
- package/dist/assets/refs.d.ts.map +1 -0
- package/dist/assets/refs.js +33 -0
- package/dist/assets/refs.js.map +1 -0
- package/dist/assets/remove-override.d.ts +42 -0
- package/dist/assets/remove-override.d.ts.map +1 -0
- package/dist/assets/remove-override.js +53 -0
- package/dist/assets/remove-override.js.map +1 -0
- package/dist/assets/rename.d.ts +43 -0
- package/dist/assets/rename.d.ts.map +1 -0
- package/dist/assets/rename.js +271 -0
- package/dist/assets/rename.js.map +1 -0
- package/dist/assets/replace.d.ts +37 -0
- package/dist/assets/replace.d.ts.map +1 -0
- package/dist/assets/replace.js +195 -0
- package/dist/assets/replace.js.map +1 -0
- package/dist/assets/resolve.d.ts +141 -0
- package/dist/assets/resolve.d.ts.map +1 -0
- package/dist/assets/resolve.js +381 -0
- package/dist/assets/resolve.js.map +1 -0
- package/dist/assets/rewrite-manifest-asset-ref.d.ts +44 -0
- package/dist/assets/rewrite-manifest-asset-ref.d.ts.map +1 -0
- package/dist/assets/rewrite-manifest-asset-ref.js +51 -0
- package/dist/assets/rewrite-manifest-asset-ref.js.map +1 -0
- package/dist/assets/scan-manifest-for-asset.d.ts +63 -0
- package/dist/assets/scan-manifest-for-asset.d.ts.map +1 -0
- package/dist/assets/scan-manifest-for-asset.js +105 -0
- package/dist/assets/scan-manifest-for-asset.js.map +1 -0
- package/dist/assets/serve-route.d.ts +45 -0
- package/dist/assets/serve-route.d.ts.map +1 -0
- package/dist/assets/serve-route.js +123 -0
- package/dist/assets/serve-route.js.map +1 -0
- package/dist/assets/svg-sanitize.d.ts +38 -0
- package/dist/assets/svg-sanitize.d.ts.map +1 -0
- package/dist/assets/svg-sanitize.js +209 -0
- package/dist/assets/svg-sanitize.js.map +1 -0
- package/dist/assets/update-metadata.d.ts +61 -0
- package/dist/assets/update-metadata.d.ts.map +1 -0
- package/dist/assets/update-metadata.js +82 -0
- package/dist/assets/update-metadata.js.map +1 -0
- package/dist/assets/url.d.ts +82 -0
- package/dist/assets/url.d.ts.map +1 -0
- package/dist/assets/url.js +103 -0
- package/dist/assets/url.js.map +1 -0
- package/dist/assets/validate.d.ts +74 -0
- package/dist/assets/validate.d.ts.map +1 -0
- package/dist/assets/validate.js +136 -0
- package/dist/assets/validate.js.map +1 -0
- package/dist/assets/variants.d.ts +23 -0
- package/dist/assets/variants.d.ts.map +1 -0
- package/dist/assets/variants.js +74 -0
- package/dist/assets/variants.js.map +1 -0
- package/dist/cli/assets-cli.d.ts +58 -0
- package/dist/cli/assets-cli.d.ts.map +1 -0
- package/dist/cli/assets-cli.js +233 -0
- package/dist/cli/assets-cli.js.map +1 -0
- package/dist/cli/assets-display.d.ts +112 -0
- package/dist/cli/assets-display.d.ts.map +1 -0
- package/dist/cli/assets-display.js +106 -0
- package/dist/cli/assets-display.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +46 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +84 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/history.d.ts +45 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +165 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/index.js +689 -128
- package/dist/cli/index.js.map +1 -1
- package/dist/compare.d.ts +8 -5
- package/dist/compare.d.ts.map +1 -1
- package/dist/compare.js +62 -20
- package/dist/compare.js.map +1 -1
- package/dist/content-root.d.ts +38 -0
- package/dist/content-root.d.ts.map +1 -0
- package/dist/content-root.js +29 -0
- package/dist/content-root.js.map +1 -0
- package/dist/dep-sidecars.d.ts +127 -0
- package/dist/dep-sidecars.d.ts.map +1 -0
- package/dist/dep-sidecars.js +122 -0
- package/dist/dep-sidecars.js.map +1 -0
- package/dist/editor/AssetEmbeddedWidget.d.ts +3 -0
- package/dist/editor/AssetEmbeddedWidget.d.ts.map +1 -0
- package/dist/editor/AssetEmbeddedWidget.js +146 -0
- package/dist/editor/AssetEmbeddedWidget.js.map +1 -0
- package/dist/editor/mount.d.ts +12 -1
- package/dist/editor/mount.d.ts.map +1 -1
- package/dist/editor/mount.js +96 -33
- package/dist/editor/mount.js.map +1 -1
- package/dist/format.d.ts +44 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +65 -0
- package/dist/format.js.map +1 -0
- package/dist/fragment-deps.d.ts +24 -0
- package/dist/fragment-deps.d.ts.map +1 -0
- package/dist/fragment-deps.js +20 -0
- package/dist/fragment-deps.js.map +1 -0
- package/dist/hash.d.ts +34 -9
- package/dist/hash.d.ts.map +1 -1
- package/dist/hash.js +60 -21
- package/dist/hash.js.map +1 -1
- package/dist/history-provider.d.ts +49 -0
- package/dist/history-provider.d.ts.map +1 -0
- package/dist/history-provider.js +248 -0
- package/dist/history-provider.js.map +1 -0
- package/dist/history-recorder.d.ts +102 -0
- package/dist/history-recorder.d.ts.map +1 -0
- package/dist/history-recorder.js +168 -0
- package/dist/history-recorder.js.map +1 -0
- package/dist/history-restorer.d.ts +46 -0
- package/dist/history-restorer.d.ts.map +1 -0
- package/dist/history-restorer.js +137 -0
- package/dist/history-restorer.js.map +1 -0
- package/dist/history.d.ts +129 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +25 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +27 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +94 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +188 -0
- package/dist/locale.js.map +1 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +16 -1
- package/dist/manifest.js.map +1 -1
- package/dist/providers/_atomic-write.d.ts +9 -0
- package/dist/providers/_atomic-write.d.ts.map +1 -0
- package/dist/providers/_atomic-write.js +72 -0
- package/dist/providers/_atomic-write.js.map +1 -0
- package/dist/providers/_rm-ignore-missing.d.ts +31 -0
- package/dist/providers/_rm-ignore-missing.d.ts.map +1 -0
- package/dist/providers/_rm-ignore-missing.js +12 -0
- package/dist/providers/_rm-ignore-missing.js.map +1 -0
- package/dist/providers/_stream-interop.d.ts +23 -0
- package/dist/providers/_stream-interop.d.ts.map +1 -0
- package/dist/providers/_stream-interop.js +21 -0
- package/dist/providers/_stream-interop.js.map +1 -0
- package/dist/providers/azure-blob.d.ts.map +1 -1
- package/dist/providers/azure-blob.js +60 -0
- package/dist/providers/azure-blob.js.map +1 -1
- package/dist/providers/filesystem.d.ts +4 -0
- package/dist/providers/filesystem.d.ts.map +1 -1
- package/dist/providers/filesystem.js +63 -2
- package/dist/providers/filesystem.js.map +1 -1
- package/dist/providers/s3.d.ts.map +1 -1
- package/dist/providers/s3.js +107 -16
- package/dist/providers/s3.js.map +1 -1
- package/dist/publish-locale.d.ts +44 -0
- package/dist/publish-locale.d.ts.map +1 -0
- package/dist/publish-locale.js +103 -0
- package/dist/publish-locale.js.map +1 -0
- package/dist/publish-rendered.d.ts +52 -21
- package/dist/publish-rendered.d.ts.map +1 -1
- package/dist/publish-rendered.js +144 -87
- package/dist/publish-rendered.js.map +1 -1
- package/dist/publish.d.ts +18 -19
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +41 -56
- package/dist/publish.js.map +1 -1
- package/dist/renderer.d.ts +14 -4
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +35 -23
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.d.ts +17 -2
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +112 -16
- package/dist/resolver.js.map +1 -1
- package/dist/robots.d.ts +22 -0
- package/dist/robots.d.ts.map +1 -0
- package/dist/robots.js +25 -0
- package/dist/robots.js.map +1 -0
- package/dist/schema/dimensions.d.ts +78 -0
- package/dist/schema/dimensions.d.ts.map +1 -0
- package/dist/schema/dimensions.js +97 -0
- package/dist/schema/dimensions.js.map +1 -0
- package/dist/schema/helpers.d.ts +108 -0
- package/dist/schema/helpers.d.ts.map +1 -0
- package/dist/schema/helpers.js +133 -0
- package/dist/schema/helpers.js.map +1 -0
- package/dist/schema/index.d.ts +27 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +25 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/types.d.ts +390 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +25 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/selector-chain.d.ts +63 -0
- package/dist/selector-chain.d.ts.map +1 -0
- package/dist/selector-chain.js +58 -0
- package/dist/selector-chain.js.map +1 -0
- package/dist/seo.d.ts +56 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +72 -0
- package/dist/seo.js.map +1 -0
- package/dist/serve.d.ts +41 -3
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +206 -65
- package/dist/serve.js.map +1 -1
- package/dist/sidecars.d.ts +26 -21
- package/dist/sidecars.d.ts.map +1 -1
- package/dist/sidecars.js +143 -45
- package/dist/sidecars.js.map +1 -1
- package/dist/site-loader.d.ts +74 -6
- package/dist/site-loader.d.ts.map +1 -1
- package/dist/site-loader.js +138 -28
- package/dist/site-loader.js.map +1 -1
- package/dist/sitemap.d.ts +45 -0
- package/dist/sitemap.d.ts.map +1 -0
- package/dist/sitemap.js +67 -0
- package/dist/sitemap.js.map +1 -0
- package/dist/targets.d.ts +47 -1
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +83 -36
- package/dist/targets.js.map +1 -1
- package/dist/template-loader.d.ts +7 -3
- package/dist/template-loader.d.ts.map +1 -1
- package/dist/template-loader.js +27 -12
- package/dist/template-loader.js.map +1 -1
- package/dist/templates-scan-worker.js +1 -1
- package/dist/templates-scan-worker.js.map +1 -1
- package/dist/templates-scan.d.ts.map +1 -1
- package/dist/templates-scan.js +1 -1
- package/dist/templates-scan.js.map +1 -1
- package/dist/themes.d.ts +69 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +85 -0
- package/dist/themes.js.map +1 -0
- package/dist/transforms/adapter.d.ts +115 -0
- package/dist/transforms/adapter.d.ts.map +1 -0
- package/dist/transforms/adapter.js +2 -0
- package/dist/transforms/adapter.js.map +1 -0
- package/dist/transforms/cloudflare.d.ts +17 -0
- package/dist/transforms/cloudflare.d.ts.map +1 -0
- package/dist/transforms/cloudflare.js +110 -0
- package/dist/transforms/cloudflare.js.map +1 -0
- package/dist/transforms/index.d.ts +24 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/dist/transforms/index.js +30 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/sharp.d.ts +3 -0
- package/dist/transforms/sharp.d.ts.map +1 -0
- package/dist/transforms/sharp.js +43 -0
- package/dist/transforms/sharp.js.map +1 -0
- package/dist/types.d.ts +241 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +28 -5
- package/dist/types.js.map +1 -1
- package/dist/workers/cloudflare-r2.d.ts +11 -2
- package/dist/workers/cloudflare-r2.d.ts.map +1 -1
- package/dist/workers/cloudflare-r2.js +120 -55
- package/dist/workers/cloudflare-r2.js.map +1 -1
- package/package.json +30 -2
- package/admin-dist/assets/index-BZAFKsUp.js +0 -608
- package/admin-dist/assets/index-BpRotMuK.css +0 -1
- package/admin-dist/assets/vendor-vue-DSjyxCX6.js +0 -1
- package/dist/providers/r2.d.ts +0 -8
- package/dist/providers/r2.d.ts.map +0 -1
- package/dist/providers/r2.js +0 -83
- package/dist/providers/r2.js.map +0 -1
- package/dist/source-sidecars.d.ts +0 -13
- package/dist/source-sidecars.d.ts.map +0 -1
- package/dist/source-sidecars.js +0 -52
- package/dist/source-sidecars.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG5D,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB;AAQD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMnD;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CA8B3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CAGrH"}
|
package/dist/themes.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { isValidLocale } from './locale.js';
|
|
2
|
+
/**
|
|
3
|
+
* Theme name pattern: lowercase ASCII letters, digits, hyphens, underscores.
|
|
4
|
+
* No dots (collide with filename composition), no whitespace, non-empty.
|
|
5
|
+
*/
|
|
6
|
+
const THEME_PATTERN = /^[a-z][a-z0-9_-]*$/;
|
|
7
|
+
/**
|
|
8
|
+
* Validate a theme name as it would appear in storage / filenames.
|
|
9
|
+
*
|
|
10
|
+
* Strict on input — does NOT normalize. Mixed case, leading dots, etc.
|
|
11
|
+
* fail. Callers that want lenient parsing should `normalizeTheme` first
|
|
12
|
+
* and then check.
|
|
13
|
+
*
|
|
14
|
+
* Rejects:
|
|
15
|
+
* - empty / whitespace
|
|
16
|
+
* - dots (would collide with filename suffix scheme)
|
|
17
|
+
* - any uppercase character (filenames must be normalized to lowercase
|
|
18
|
+
* before reaching storage; uppercase reaching this validator is a bug)
|
|
19
|
+
* - BCP 47 locale codes (would be ambiguous in filename composition —
|
|
20
|
+
* `hero.asset.en.json` could be locale `en` or theme `en`)
|
|
21
|
+
*/
|
|
22
|
+
export function isValidTheme(theme) {
|
|
23
|
+
if (!THEME_PATTERN.test(theme))
|
|
24
|
+
return false;
|
|
25
|
+
// Theme names must not collide with valid BCP 47 locale codes.
|
|
26
|
+
// `en`, `fr`, `pt-br`, etc. are reserved for the locale dimension.
|
|
27
|
+
if (isValidLocale(theme))
|
|
28
|
+
return false;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
/** Normalize a theme name to lowercase for filenames. */
|
|
32
|
+
export function normalizeTheme(theme) {
|
|
33
|
+
return theme.toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve theme settings from a site manifest. Throws when the config is
|
|
37
|
+
* present but invalid (collision with locale codes, malformed names) so
|
|
38
|
+
* misconfiguration surfaces at boot rather than silently at render time.
|
|
39
|
+
*
|
|
40
|
+
* Returns `null` when `themes` is unset — that's the "no theme dimension
|
|
41
|
+
* for this site" signal. Asset overrides keyed by theme are rejected
|
|
42
|
+
* downstream when this is null.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveSiteThemes(site) {
|
|
45
|
+
const config = site.themes;
|
|
46
|
+
if (!config)
|
|
47
|
+
return null;
|
|
48
|
+
if (!Array.isArray(config.supported) || config.supported.length === 0) {
|
|
49
|
+
throw new Error('themes.supported must be a non-empty array of theme names');
|
|
50
|
+
}
|
|
51
|
+
const supported = [];
|
|
52
|
+
for (const raw of config.supported) {
|
|
53
|
+
const norm = normalizeTheme(raw);
|
|
54
|
+
if (!isValidTheme(norm)) {
|
|
55
|
+
throw new Error(`Invalid theme name "${raw}". Must be lowercase ASCII (a-z, 0-9, -, _), ` +
|
|
56
|
+
`start with a letter, and not collide with BCP 47 locale codes.`);
|
|
57
|
+
}
|
|
58
|
+
if (supported.includes(norm)) {
|
|
59
|
+
throw new Error(`Duplicate theme name "${norm}" in themes.supported`);
|
|
60
|
+
}
|
|
61
|
+
supported.push(norm);
|
|
62
|
+
}
|
|
63
|
+
const defaultRaw = config.default ?? supported[0];
|
|
64
|
+
const defaultTheme = normalizeTheme(defaultRaw);
|
|
65
|
+
if (!supported.includes(defaultTheme)) {
|
|
66
|
+
throw new Error(`themes.default "${config.default}" is not in themes.supported [${supported.join(', ')}]`);
|
|
67
|
+
}
|
|
68
|
+
return { supported, default: defaultTheme };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Subset themes to a config — used when a target overrides the site's theme
|
|
72
|
+
* set. Falls back to the site's resolved themes when the target doesn't
|
|
73
|
+
* narrow.
|
|
74
|
+
*
|
|
75
|
+
* v1 doesn't expose target-level theme override (assets are global to the
|
|
76
|
+
* site's theme set). The function is here for symmetry with locale
|
|
77
|
+
* resolution and future-proofs the API when targets may want to ship a
|
|
78
|
+
* subset (e.g. a target that only serves light mode).
|
|
79
|
+
*/
|
|
80
|
+
export function resolveTargetThemes(siteThemes, override) {
|
|
81
|
+
if (override)
|
|
82
|
+
return resolveSiteThemes({ name: '', themes: override });
|
|
83
|
+
return siteThemes;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=themes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAU3C;;;GAGG;AACH,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAE1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5C,+DAA+D;IAC/D,mEAAmE;IACnE,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,uBAAuB,GAAG,+CAA+C;gBACvE,gEAAgE,CACnE,CAAA;QACH,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,uBAAuB,CAAC,CAAA;QACvE,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAE,CAAA;IAClD,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,OAAO,iCAAiC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5G,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAA;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAiC,EAAE,QAAuB;IAC5F,IAAI,QAAQ;QAAE,OAAO,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAkB,CAAC,CAAA;IACtF,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TransformAdapter — delivery strategy for asset bytes.
|
|
3
|
+
*
|
|
4
|
+
* Per Q8 lock, an adapter owns three coupled concerns:
|
|
5
|
+
* 1. URL composition for the primary asset URL and srcset (where
|
|
6
|
+
* different from the origin's pre-generated ladder)
|
|
7
|
+
* 2. Cache policy for the URLs it produces (since cache semantics
|
|
8
|
+
* depend on whether bytes are origin-served vs CDN-served)
|
|
9
|
+
* 3. Optional server-side route mounting for adapters that mediate
|
|
10
|
+
* delivery (e.g. proxy adapters that route through our origin)
|
|
11
|
+
*
|
|
12
|
+
* # Why all three on one interface
|
|
13
|
+
*
|
|
14
|
+
* URL + cache + delivery are coupled. The hardcoded
|
|
15
|
+
* `Cache-Control: immutable` in the serve-route was correct for the
|
|
16
|
+
* sharp adapter but wrong for any adapter that signs URLs with a
|
|
17
|
+
* short-TTL HMAC (future imgproxy) or routes through a CDN with its
|
|
18
|
+
* own cache (cloudflare). Co-locating the policy with the URL builder
|
|
19
|
+
* keeps the contract honest.
|
|
20
|
+
*
|
|
21
|
+
* # Why mountRoutes is optional
|
|
22
|
+
*
|
|
23
|
+
* Origin-passthrough (sharp) and CDN adapters (cloudflare) don't need
|
|
24
|
+
* server-side routes — the existing `assets/serve-route.ts` handles
|
|
25
|
+
* origin bytes; the CDN handles its own. Future proxy adapters
|
|
26
|
+
* (imgproxy, signed-URL workers) would implement `mountRoutes` to
|
|
27
|
+
* add their own handlers.
|
|
28
|
+
*
|
|
29
|
+
* # Why required (not optional) in the resolver context
|
|
30
|
+
*
|
|
31
|
+
* Adapter is always present. Resolver code paths don't branch on
|
|
32
|
+
* "does an adapter exist" — the factory at boot constructs one
|
|
33
|
+
* (defaulting to `sharpAdapter`), and every URL goes through it.
|
|
34
|
+
* Eliminates the conditional URL construction throughout the resolver.
|
|
35
|
+
*/
|
|
36
|
+
import type { Hono } from 'hono';
|
|
37
|
+
import type { Selector } from '../schema/dimensions.js';
|
|
38
|
+
import type { AssetVariant } from '../schema/types.js';
|
|
39
|
+
/**
|
|
40
|
+
* Input for adapter URL builders. Carries everything an adapter could
|
|
41
|
+
* possibly need; concrete adapters pick what they use. The sharp
|
|
42
|
+
* adapter reads `variants` for srcset; the cloudflare adapter reads
|
|
43
|
+
* `width`/`height` to skip upscaling but ignores `variants`.
|
|
44
|
+
*/
|
|
45
|
+
export interface AssetUrlInput {
|
|
46
|
+
/** Asset name (the canonical identifier). */
|
|
47
|
+
name: string;
|
|
48
|
+
/** 8-char SHA-256 prefix of the bytes. For locale-bytes overrides this is the override's hash. */
|
|
49
|
+
hash: string;
|
|
50
|
+
/** File extension without the dot (e.g., 'jpg'). */
|
|
51
|
+
ext: string;
|
|
52
|
+
/** Selector identifying which override these bytes are (null = default). */
|
|
53
|
+
selector: Selector | null;
|
|
54
|
+
/** Optional site URL — absolute prefix for cross-origin delivery. */
|
|
55
|
+
siteUrl?: string;
|
|
56
|
+
/** Pre-generated variants from the manifest. Adapters that ignore this (cloudflare) don't read it. */
|
|
57
|
+
variants: readonly AssetVariant[];
|
|
58
|
+
/** Source width in pixels. Null for non-images. */
|
|
59
|
+
width: number | null;
|
|
60
|
+
/** Source height in pixels. Null for non-images. */
|
|
61
|
+
height: number | null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Cache headers an adapter dictates for the URLs it produced. The
|
|
65
|
+
* asset-serve route applies these when serving origin bytes; CDN
|
|
66
|
+
* adapters return the same policy for documentation (the CDN owns
|
|
67
|
+
* actual caching, but the origin response still carries headers
|
|
68
|
+
* because the CDN re-emits or honors them depending on config).
|
|
69
|
+
*/
|
|
70
|
+
export interface CachePolicy {
|
|
71
|
+
/** `Cache-Control` header value. */
|
|
72
|
+
cacheControl: string;
|
|
73
|
+
/** Optional `Vary` header (theme/locale-aware delivery, format negotiation). */
|
|
74
|
+
vary?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Delivery strategy for asset bytes. Per-target — wired into the
|
|
78
|
+
* resolver context at boot via the `transforms` factory.
|
|
79
|
+
*/
|
|
80
|
+
export interface TransformAdapter {
|
|
81
|
+
/** Stable identifier — used in telemetry, logs, and adapter selection. */
|
|
82
|
+
readonly name: string;
|
|
83
|
+
/**
|
|
84
|
+
* Build the primary URL for an asset's bytes-of-record. This is the
|
|
85
|
+
* URL that goes into `<img src>`, `<a href>`, or `@font-face src`.
|
|
86
|
+
*/
|
|
87
|
+
primaryUrl(input: AssetUrlInput): string;
|
|
88
|
+
/**
|
|
89
|
+
* Build a `srcset` string for responsive image delivery, OR return
|
|
90
|
+
* null when responsive delivery isn't supported (non-image assets,
|
|
91
|
+
* or images with no variant ladder).
|
|
92
|
+
*
|
|
93
|
+
* Adapter decides ladder semantics:
|
|
94
|
+
* - sharp adapter reads `input.variants` (pre-generated at upload)
|
|
95
|
+
* - cloudflare adapter generates ladder from a width set the
|
|
96
|
+
* adapter chooses (typically 400/800/1200/1600)
|
|
97
|
+
*/
|
|
98
|
+
srcset(input: AssetUrlInput): string | null;
|
|
99
|
+
/**
|
|
100
|
+
* Cache policy for a URL this adapter produced. Returned headers
|
|
101
|
+
* are applied by whichever serving layer handles the URL — origin
|
|
102
|
+
* route for origin-served adapters, propagated to CDN config for
|
|
103
|
+
* upstream adapters.
|
|
104
|
+
*/
|
|
105
|
+
cachePolicy(input: AssetUrlInput): CachePolicy;
|
|
106
|
+
/**
|
|
107
|
+
* Mount adapter-specific server-side routes. Called once per app
|
|
108
|
+
* construction by the bootstrap. Origin-passthrough adapters
|
|
109
|
+
* (sharp) and pure CDN adapters (cloudflare) leave this undefined;
|
|
110
|
+
* mediating adapters (future imgproxy, signed URL workers)
|
|
111
|
+
* implement it.
|
|
112
|
+
*/
|
|
113
|
+
mountRoutes?(app: Hono): void;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/transforms/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,4EAA4E;IAC5E,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IACzB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sGAAsG;IACtG,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAA;IACjC,mDAAmD;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAA;IAExC;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAAA;IAE3C;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAAA;IAE9C;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAA;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/transforms/adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TransformAdapter } from './adapter.js';
|
|
2
|
+
export interface CloudflareAdapterOptions {
|
|
3
|
+
/**
|
|
4
|
+
* The zone (hostname) where `/cdn-cgi/image/` is served. Typically
|
|
5
|
+
* the same hostname as `siteUrl`. Required — without it we can't
|
|
6
|
+
* compose a CDN URL.
|
|
7
|
+
*/
|
|
8
|
+
zone: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Build a Cloudflare-Images-flavored TransformAdapter for the given zone.
|
|
12
|
+
* Factory function (not a singleton) because the zone is per-target —
|
|
13
|
+
* sites with multiple Cloudflare zones get one adapter instance per
|
|
14
|
+
* configured target.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createCloudflareAdapter(opts: CloudflareAdapterOptions): TransformAdapter;
|
|
17
|
+
//# sourceMappingURL=cloudflare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/transforms/cloudflare.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAA8B,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAYhF,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,wBAAwB,GAAG,gBAAgB,CAgCxF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare Images transform adapter.
|
|
3
|
+
*
|
|
4
|
+
* Routes URLs through Cloudflare's `/cdn-cgi/image/` endpoint at the
|
|
5
|
+
* configured zone. Cloudflare fetches the origin URL (the asset bytes
|
|
6
|
+
* served from the target's storage), applies the requested transforms
|
|
7
|
+
* (resize, format conversion, quality), and returns the transformed
|
|
8
|
+
* bytes to the browser.
|
|
9
|
+
*
|
|
10
|
+
* URL shape:
|
|
11
|
+
* https://{zone}/cdn-cgi/image/{params}/{originUrl}
|
|
12
|
+
*
|
|
13
|
+
* Where params is a comma-separated list (e.g. `format=auto,width=800`).
|
|
14
|
+
* For the primary URL we use `format=auto` only — Cloudflare picks the
|
|
15
|
+
* best supported format (AVIF, WebP, JPEG) per the browser's Accept
|
|
16
|
+
* header. For srcset entries we add `width={W}` per ladder rung.
|
|
17
|
+
*
|
|
18
|
+
* # Why a fixed ladder
|
|
19
|
+
*
|
|
20
|
+
* Sharp generates 400/800/1200/1600 widths at upload. Cloudflare can
|
|
21
|
+
* generate any width on the fly, but srcset still needs a concrete
|
|
22
|
+
* ladder for the browser to pick from. We use the same widths as the
|
|
23
|
+
* sharp adapter — consistent visual delivery between targets that
|
|
24
|
+
* happen to use different adapters.
|
|
25
|
+
*
|
|
26
|
+
* # Why `Vary: Accept`
|
|
27
|
+
*
|
|
28
|
+
* `format=auto` returns AVIF or WebP per browser support. Caches MUST
|
|
29
|
+
* vary on `Accept` to avoid serving an AVIF response to a WebP-only
|
|
30
|
+
* browser. The cache policy carries that header.
|
|
31
|
+
*
|
|
32
|
+
* # What this adapter ignores
|
|
33
|
+
*
|
|
34
|
+
* `input.variants` — Cloudflare generates widths on demand; the
|
|
35
|
+
* pre-generated ladder is irrelevant. Sites that use Cloudflare can
|
|
36
|
+
* still upload variants (they cost nothing on egress, just a tiny bit
|
|
37
|
+
* of storage), but the URLs the browser receives won't reference them.
|
|
38
|
+
*/
|
|
39
|
+
import { buildAssetUrl } from '../assets/url.js';
|
|
40
|
+
/** Widths the srcset ladder generates. Same as sharp's `VARIANT_WIDTHS`. */
|
|
41
|
+
const LADDER_WIDTHS = [400, 800, 1200, 1600];
|
|
42
|
+
const CDN_CACHE_POLICY = {
|
|
43
|
+
cacheControl: 'public, max-age=31536000, immutable',
|
|
44
|
+
// Cloudflare's `format=auto` returns different bytes per Accept header;
|
|
45
|
+
// caches must vary or they'll serve AVIF to WebP-only clients.
|
|
46
|
+
vary: 'Accept',
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Build a Cloudflare-Images-flavored TransformAdapter for the given zone.
|
|
50
|
+
* Factory function (not a singleton) because the zone is per-target —
|
|
51
|
+
* sites with multiple Cloudflare zones get one adapter instance per
|
|
52
|
+
* configured target.
|
|
53
|
+
*/
|
|
54
|
+
export function createCloudflareAdapter(opts) {
|
|
55
|
+
if (!opts.zone || typeof opts.zone !== 'string') {
|
|
56
|
+
throw new Error('cloudflareAdapter requires a `zone` (e.g. "cdn.example.com")');
|
|
57
|
+
}
|
|
58
|
+
const zone = opts.zone.replace(/^https?:\/\//, '').replace(/\/+$/, '');
|
|
59
|
+
return {
|
|
60
|
+
name: 'cloudflare',
|
|
61
|
+
primaryUrl(input) {
|
|
62
|
+
const origin = absoluteOriginUrl(input);
|
|
63
|
+
// Primary URL uses format=auto only — no width; the browser gets
|
|
64
|
+
// the source-resolution version (within Cloudflare's max).
|
|
65
|
+
return `https://${zone}/cdn-cgi/image/format=auto/${origin}`;
|
|
66
|
+
},
|
|
67
|
+
srcset(input) {
|
|
68
|
+
// No srcset for non-images — same skip rule as sharp adapter.
|
|
69
|
+
// We detect by extension; future kinds can refine this.
|
|
70
|
+
if (!isImageExt(input.ext))
|
|
71
|
+
return null;
|
|
72
|
+
// Skip widths larger than the source image (no point upscaling).
|
|
73
|
+
const sourceWidth = input.width ?? Infinity;
|
|
74
|
+
const widths = LADDER_WIDTHS.filter(w => w <= sourceWidth);
|
|
75
|
+
if (widths.length === 0)
|
|
76
|
+
return null;
|
|
77
|
+
const origin = absoluteOriginUrl(input);
|
|
78
|
+
return widths.map(w => `https://${zone}/cdn-cgi/image/format=auto,width=${w}/${origin} ${w}w`).join(', ');
|
|
79
|
+
},
|
|
80
|
+
cachePolicy(_input) {
|
|
81
|
+
return CDN_CACHE_POLICY;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Compose the absolute origin URL for the asset bytes — the URL
|
|
87
|
+
* Cloudflare fetches from. Always absolute because Cloudflare's
|
|
88
|
+
* `/cdn-cgi/image/` endpoint requires it. When `siteUrl` isn't set
|
|
89
|
+
* the adapter can't function — origin URLs need to be reachable
|
|
90
|
+
* from Cloudflare's edge.
|
|
91
|
+
*/
|
|
92
|
+
function absoluteOriginUrl(input) {
|
|
93
|
+
if (!input.siteUrl) {
|
|
94
|
+
throw new Error(`cloudflareAdapter requires siteUrl on the resolve context — Cloudflare needs an absolute origin URL to fetch.`);
|
|
95
|
+
}
|
|
96
|
+
// Use buildAssetUrl for path composition (handles selector suffix);
|
|
97
|
+
// it returns the full URL when siteUrl is set.
|
|
98
|
+
return buildAssetUrl({
|
|
99
|
+
name: input.name,
|
|
100
|
+
hash: input.hash,
|
|
101
|
+
ext: input.ext,
|
|
102
|
+
siteUrl: input.siteUrl,
|
|
103
|
+
selector: input.selector,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/** Whether the extension is one Cloudflare can transform. */
|
|
107
|
+
function isImageExt(ext) {
|
|
108
|
+
return ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'webp' || ext === 'avif' || ext === 'gif';
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=cloudflare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/transforms/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGhD,4EAA4E;AAC5E,MAAM,aAAa,GAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE/D,MAAM,gBAAgB,GAAgB;IACpC,YAAY,EAAE,qCAAqC;IACnD,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,EAAE,QAAQ;CACf,CAAA;AAWD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAA8B;IACpE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAEtE,OAAO;QACL,IAAI,EAAE,YAAY;QAElB,UAAU,CAAC,KAAoB;YAC7B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;YACvC,iEAAiE;YACjE,2DAA2D;YAC3D,OAAO,WAAW,IAAI,8BAA8B,MAAM,EAAE,CAAA;QAC9D,CAAC;QAED,MAAM,CAAC,KAAoB;YACzB,8DAA8D;YAC9D,wDAAwD;YACxD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAA;YACvC,iEAAiE;YACjE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAA;YAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,CAAA;YAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;YACvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,oCAAoC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3G,CAAC;QAED,WAAW,CAAC,MAAqB;YAC/B,OAAO,gBAAgB,CAAA;QACzB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAA;IACH,CAAC;IACD,oEAAoE;IACpE,+CAA+C;IAC/C,OAAO,aAAa,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAA;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,CAAA;AAC9G,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform-adapter factory.
|
|
3
|
+
*
|
|
4
|
+
* One switch over `target.transforms?.adapter`, the only place that
|
|
5
|
+
* knows adapter names. Adding a new adapter is one new module + one
|
|
6
|
+
* case here — no edits to resolver, walker, kind resolvers, or
|
|
7
|
+
* serve-route.
|
|
8
|
+
*
|
|
9
|
+
* Default (no `transforms` config) = `sharpAdapter`. This matches the
|
|
10
|
+
* pre-step-18 hardcoded behavior — sites that don't opt into a CDN
|
|
11
|
+
* adapter get the same URLs and cache headers they had before.
|
|
12
|
+
*/
|
|
13
|
+
import type { TargetConfig } from '../types.js';
|
|
14
|
+
import type { TransformAdapter } from './adapter.js';
|
|
15
|
+
/**
|
|
16
|
+
* Construct a `TransformAdapter` from a target's config. Throws on
|
|
17
|
+
* unknown adapter names so misconfiguration surfaces at boot, not
|
|
18
|
+
* silently at render time.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildTransformAdapter(target: TargetConfig): TransformAdapter;
|
|
21
|
+
export type { AssetUrlInput, CachePolicy, TransformAdapter } from './adapter.js';
|
|
22
|
+
export { sharpAdapter } from './sharp.js';
|
|
23
|
+
export { createCloudflareAdapter, type CloudflareAdapterOptions } from './cloudflare.js';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAIpD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAkB5E;AAGD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { sharpAdapter } from './sharp.js';
|
|
2
|
+
import { createCloudflareAdapter } from './cloudflare.js';
|
|
3
|
+
/**
|
|
4
|
+
* Construct a `TransformAdapter` from a target's config. Throws on
|
|
5
|
+
* unknown adapter names so misconfiguration surfaces at boot, not
|
|
6
|
+
* silently at render time.
|
|
7
|
+
*/
|
|
8
|
+
export function buildTransformAdapter(target) {
|
|
9
|
+
const config = target.transforms;
|
|
10
|
+
if (!config || config.adapter === 'sharp')
|
|
11
|
+
return sharpAdapter;
|
|
12
|
+
switch (config.adapter) {
|
|
13
|
+
case 'cloudflare': {
|
|
14
|
+
if (!config.zone) {
|
|
15
|
+
throw new Error('transforms.adapter "cloudflare" requires a `zone` field (e.g. "cdn.example.com")');
|
|
16
|
+
}
|
|
17
|
+
return createCloudflareAdapter({ zone: config.zone });
|
|
18
|
+
}
|
|
19
|
+
default: {
|
|
20
|
+
// Exhaustive check — TypeScript ensures we don't miss a known adapter.
|
|
21
|
+
// Runtime fallthrough is for when site.yaml carries an adapter name
|
|
22
|
+
// this build doesn't know.
|
|
23
|
+
const unknown = config.adapter;
|
|
24
|
+
throw new Error(`Unknown transforms.adapter "${unknown}". Supported: sharp, cloudflare.`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export { sharpAdapter } from './sharp.js';
|
|
29
|
+
export { createCloudflareAdapter } from './cloudflare.js';
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAEzD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAA;IAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,YAAY,CAAA;IAC9D,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAA;YACrG,CAAC;YACD,OAAO,uBAAuB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,uEAAuE;YACvE,oEAAoE;YACpE,2BAA2B;YAC3B,MAAM,OAAO,GAAI,MAA8B,CAAC,OAAO,CAAA;YACvD,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,kCAAkC,CAAC,CAAA;QAC3F,CAAC;IACH,CAAC;AACH,CAAC;AAID,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAiC,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharp.d.ts","sourceRoot":"","sources":["../../src/transforms/sharp.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAA8B,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAMhF,eAAO,MAAM,YAAY,EAAE,gBAqB1B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default `TransformAdapter`: origin bytes + pre-generated variant ladder.
|
|
3
|
+
*
|
|
4
|
+
* Bytes are served from the target's storage via `assets/serve-route.ts`.
|
|
5
|
+
* Variants are pre-generated at upload by sharp (see `assets/variants.ts`)
|
|
6
|
+
* and listed in the manifest's `variants` array. Both URLs and srcset
|
|
7
|
+
* descriptors point at origin paths — the CDN, if any, caches as-is.
|
|
8
|
+
*
|
|
9
|
+
* Cache policy: `public, max-age=31536000, immutable`. Safe because
|
|
10
|
+
* hash-in-path is content-addressed — new bytes mean a new URL, so
|
|
11
|
+
* the URL's response is genuinely immutable.
|
|
12
|
+
*
|
|
13
|
+
* Single responsibility: wrap `buildAssetUrl` + `buildSrcset` from
|
|
14
|
+
* `assets/url.ts` behind the `TransformAdapter` interface. No extra
|
|
15
|
+
* logic — the adapter is the right shape for swap-out, and the URL
|
|
16
|
+
* helpers stay reusable for tests and future adapters that compose
|
|
17
|
+
* origin URLs (cloudflare prefixes them; imgproxy wraps them).
|
|
18
|
+
*/
|
|
19
|
+
import { buildAssetUrl, buildSrcset } from '../assets/url.js';
|
|
20
|
+
const IMMUTABLE_CACHE = {
|
|
21
|
+
cacheControl: 'public, max-age=31536000, immutable',
|
|
22
|
+
};
|
|
23
|
+
export const sharpAdapter = {
|
|
24
|
+
name: 'sharp',
|
|
25
|
+
primaryUrl(input) {
|
|
26
|
+
return buildAssetUrl({
|
|
27
|
+
name: input.name,
|
|
28
|
+
hash: input.hash,
|
|
29
|
+
ext: input.ext,
|
|
30
|
+
siteUrl: input.siteUrl,
|
|
31
|
+
selector: input.selector,
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
srcset(input) {
|
|
35
|
+
if (input.variants.length === 0)
|
|
36
|
+
return null;
|
|
37
|
+
return buildSrcset(input.variants, input.siteUrl);
|
|
38
|
+
},
|
|
39
|
+
cachePolicy(_input) {
|
|
40
|
+
return IMMUTABLE_CACHE;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=sharp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharp.js","sourceRoot":"","sources":["../../src/transforms/sharp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG7D,MAAM,eAAe,GAAgB;IACnC,YAAY,EAAE,qCAAqC;CACpD,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,IAAI,EAAE,OAAO;IAEb,UAAU,CAAC,KAAoB;QAC7B,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5C,OAAO,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,WAAW,CAAC,MAAqB;QAC/B,OAAO,eAAe,CAAA;IACxB,CAAC;CACF,CAAA"}
|