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,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset schema — reference and resolved type spaces, and the `Content<T>`
|
|
3
|
+
* utility that walks a Zod-inferred content type and swaps reference types
|
|
4
|
+
* for resolved types.
|
|
5
|
+
*
|
|
6
|
+
* Two distinct type spaces:
|
|
7
|
+
* - **Reference shapes** — what's stored in page/fragment content JSON. The
|
|
8
|
+
* authoring model: "this content field points to asset X with this optional
|
|
9
|
+
* override." Small, stable.
|
|
10
|
+
* - **Resolved shapes** — what templates receive at render time after the
|
|
11
|
+
* resolver merges manifest + reference overrides. Large, evolves as
|
|
12
|
+
* templates gain capabilities.
|
|
13
|
+
*
|
|
14
|
+
* Brands distinguish reference types from plain objects. `Content<T>` reads
|
|
15
|
+
* the brand to perform the swap. Brands are phantom — attached at the type
|
|
16
|
+
* level via `z.brand(...)` in `helpers.ts`, invisible at runtime.
|
|
17
|
+
*
|
|
18
|
+
* Branding is split across the two modules by role:
|
|
19
|
+
* - `types.ts` (this file) owns the `Resolved*Asset` shapes and the
|
|
20
|
+
* `Content<T>` mapper that consumes brands.
|
|
21
|
+
* - `helpers.ts` owns the `embeddedAsset()` / `downloadable()` / `fontAsset()`
|
|
22
|
+
* Zod schemas that attach brands to their inferred output.
|
|
23
|
+
*/
|
|
24
|
+
/** Embedded asset reference — stored in content JSON for image/video/audio fields. */
|
|
25
|
+
export interface EmbeddedAssetRef {
|
|
26
|
+
/** Asset name (path-like, e.g. `"hero"` or `"products/shot"`). */
|
|
27
|
+
_asset: string;
|
|
28
|
+
/** Per-reference alt override. When absent, falls back to asset manifest's alt. */
|
|
29
|
+
alt?: string;
|
|
30
|
+
/** Per-reference focal-point override. Image assets only; 0–1 normalized. */
|
|
31
|
+
focalPoint?: {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Downloadable asset reference — stored in content JSON for file-download fields. */
|
|
37
|
+
export interface DownloadableAssetRef {
|
|
38
|
+
_asset: string;
|
|
39
|
+
/** Per-reference title override (the human-readable link label). */
|
|
40
|
+
title?: string;
|
|
41
|
+
/** Optional blurb rendered next to the link. */
|
|
42
|
+
description?: string;
|
|
43
|
+
}
|
|
44
|
+
/** Font asset reference — stored in content JSON for @font-face fields. */
|
|
45
|
+
export interface FontAssetRef {
|
|
46
|
+
_asset: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Asset rendering role — determines how templates use the asset.
|
|
50
|
+
* - `embedded` — rendered inline (`<img>`, `<video>`, `<audio>`)
|
|
51
|
+
* - `downloadable` — linked for download (`<a href download>`)
|
|
52
|
+
* - `font` — loaded via `@font-face`, used by CSS name
|
|
53
|
+
*
|
|
54
|
+
* Set at upload time; identity attribute. Never overridable on locale
|
|
55
|
+
* variants.
|
|
56
|
+
*/
|
|
57
|
+
export type AssetKind = 'embedded' | 'downloadable' | 'font';
|
|
58
|
+
/**
|
|
59
|
+
* A single responsive variant of an image asset. Pre-generated at
|
|
60
|
+
* upload time; the resolver composes these into a `srcset` string.
|
|
61
|
+
*/
|
|
62
|
+
export interface AssetVariant {
|
|
63
|
+
/** Target width in pixels. */
|
|
64
|
+
width: number;
|
|
65
|
+
/** Path relative to the assets root, e.g. `hero-a3b2c1d4-800w.jpg`. */
|
|
66
|
+
path: string;
|
|
67
|
+
/** On-disk size of the variant in bytes. */
|
|
68
|
+
size: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Asset manifest — the JSON written to `{name}.asset.json` for each asset.
|
|
72
|
+
* Storage shape, distinct from reference (content JSON) and resolved (template
|
|
73
|
+
* render). v1 slice fields; wider fields (animated, poster, font-specific,
|
|
74
|
+
* etc.) are added as those capabilities land.
|
|
75
|
+
*
|
|
76
|
+
* `version: 1` is the forward-compatibility lever for future changes.
|
|
77
|
+
*
|
|
78
|
+
* Deviation from design-media.md:
|
|
79
|
+
* The design specifies a `variantsStatus: 'generating' | 'complete' | 'failed'`
|
|
80
|
+
* tri-state alongside `variants`. We don't carry it in v1 because ingest
|
|
81
|
+
* is synchronous + rolls back on variant-generation failure — when a
|
|
82
|
+
* manifest exists, variants are always complete by invariant, so the
|
|
83
|
+
* status field would be dead weight. If we ever move to async generation
|
|
84
|
+
* (a separate step), the tri-state comes back and callers distinguish
|
|
85
|
+
* "variants still generating" from "variants failed" the design-doc way.
|
|
86
|
+
*/
|
|
87
|
+
export interface AssetManifest {
|
|
88
|
+
version: 1;
|
|
89
|
+
/** Asset name (matches the library key and the reference `_asset`). */
|
|
90
|
+
name: string;
|
|
91
|
+
/** Rendering role — determines how templates use this asset. */
|
|
92
|
+
kind: AssetKind;
|
|
93
|
+
/** Whether bytes live on target (`internal`) or elsewhere. v1 slice: internal only. */
|
|
94
|
+
source: 'internal';
|
|
95
|
+
/** Canonical MIME type (sniffed from bytes at upload). */
|
|
96
|
+
mime: string;
|
|
97
|
+
/** Size in bytes of the default representation. */
|
|
98
|
+
size: number;
|
|
99
|
+
/** 8-char SHA-256 prefix of default bytes. Matches the on-disk filename suffix. */
|
|
100
|
+
hash: string;
|
|
101
|
+
/** Width in pixels (images) — null when not applicable. */
|
|
102
|
+
width: number | null;
|
|
103
|
+
/** Height in pixels (images) — null when not applicable. */
|
|
104
|
+
height: number | null;
|
|
105
|
+
/**
|
|
106
|
+
* Responsive-image variants, pre-generated at upload time. Empty for
|
|
107
|
+
* non-image assets (downloadable, font) or images smaller than the
|
|
108
|
+
* smallest target width (no point upscaling). Ordered ascending by width.
|
|
109
|
+
*/
|
|
110
|
+
variants: readonly AssetVariant[];
|
|
111
|
+
/** Alt text per the three-state model; null means "not set". */
|
|
112
|
+
alt: string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Focal point in normalized coordinates (0–1). Used by templates that
|
|
115
|
+
* crop the image to non-original aspect ratios — keeps the subject in
|
|
116
|
+
* frame. Optional: omitted = no preference set, treated as center
|
|
117
|
+
* (0.5, 0.5) by the resolver; explicit value = author's choice.
|
|
118
|
+
*
|
|
119
|
+
* Per-reference focal-point overrides live on the embedded ref in
|
|
120
|
+
* page/fragment manifests; this is the asset-level default for refs
|
|
121
|
+
* that don't override.
|
|
122
|
+
*/
|
|
123
|
+
focalPoint?: {
|
|
124
|
+
x: number;
|
|
125
|
+
y: number;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Multi-frame indicator for animated images (GIF, APNG, animated WebP,
|
|
129
|
+
* animated AVIF). True when the source has > 1 frame; false / absent
|
|
130
|
+
* for static images. Resolver passes through to `ResolvedEmbeddedAsset.animated`.
|
|
131
|
+
*/
|
|
132
|
+
animated?: boolean;
|
|
133
|
+
/** Frame count for animated content. Absent for static. */
|
|
134
|
+
frames?: number;
|
|
135
|
+
/**
|
|
136
|
+
* Duration in milliseconds for time-based content (animated images,
|
|
137
|
+
* future video, future audio). Null when the format technically
|
|
138
|
+
* supports it but the duration couldn't be derived; absent for
|
|
139
|
+
* static images.
|
|
140
|
+
*/
|
|
141
|
+
duration?: number | null;
|
|
142
|
+
/**
|
|
143
|
+
* First-frame poster path (relative to assetsRoot) for animated
|
|
144
|
+
* content. Templates can render this for reduced-motion fallbacks
|
|
145
|
+
* or as a lazy-load placeholder. Absent for static; null when
|
|
146
|
+
* extraction failed despite the source being animated.
|
|
147
|
+
*/
|
|
148
|
+
poster?: string | null;
|
|
149
|
+
/** Upload timestamp (ISO 8601 UTC). */
|
|
150
|
+
uploadedAt: string;
|
|
151
|
+
/** Author who uploaded; empty string when RBAC isn't configured. */
|
|
152
|
+
uploadedBy: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Per-kind manifest aliases. Today they all point at `AssetManifest` because
|
|
156
|
+
* no kind-specific fields exist yet — fonts, downloadables, and embedded
|
|
157
|
+
* images share the same shape. When kind-specific fields land (font's
|
|
158
|
+
* `cssName`/`format`/`weight`, downloadable's `title`/`description`), these
|
|
159
|
+
* aliases become genuinely distinct types and the union below ties them
|
|
160
|
+
* together. Authors writing schema helpers can already type-import the
|
|
161
|
+
* alias they need without churn at that point.
|
|
162
|
+
*/
|
|
163
|
+
export type EmbeddedAssetManifest = AssetManifest;
|
|
164
|
+
export type DownloadableAssetManifest = AssetManifest;
|
|
165
|
+
export type FontAssetManifest = AssetManifest;
|
|
166
|
+
/**
|
|
167
|
+
* Locale-override manifest for embedded/downloadable assets — every field
|
|
168
|
+
* except identity (`version`, `name`) is optional. Authors create these via
|
|
169
|
+
* locale-bytes upload (per design-media.md → locale-specific bytes) or by
|
|
170
|
+
* editing alt/focal/etc. metadata for one locale.
|
|
171
|
+
*
|
|
172
|
+
* Two byte-presence states, enforced by the discriminated union:
|
|
173
|
+
*
|
|
174
|
+
* 1. Metadata-only override — no `hash`. Locale uses default bytes;
|
|
175
|
+
* only metadata fields (alt, focalPoint) override.
|
|
176
|
+
* 2. Bytes override — `hash` set. Locale has its own bytes; `size`,
|
|
177
|
+
* `mime`, `width`/`height`, `variants` MUST be present.
|
|
178
|
+
*
|
|
179
|
+
* `kind` and `source` are never overridable on a locale variant — those
|
|
180
|
+
* are identity attributes of the asset.
|
|
181
|
+
*
|
|
182
|
+
* Font locale variants have a different shape (always have bytes, never
|
|
183
|
+
* "override" — they ADD to a variant union). See `FontLocaleAdditiveManifest`.
|
|
184
|
+
*/
|
|
185
|
+
export type LocaleOverrideManifest = LocaleMetadataOverrideManifest | LocaleBytesOverrideManifest;
|
|
186
|
+
/** Locale metadata-only override — no `hash`, no byte-describing fields. */
|
|
187
|
+
export interface LocaleMetadataOverrideManifest {
|
|
188
|
+
version: 1;
|
|
189
|
+
name: string;
|
|
190
|
+
/** Discriminator: bytes are absent. */
|
|
191
|
+
hash?: undefined;
|
|
192
|
+
size?: undefined;
|
|
193
|
+
variants?: undefined;
|
|
194
|
+
width?: undefined;
|
|
195
|
+
height?: undefined;
|
|
196
|
+
mime?: undefined;
|
|
197
|
+
/** Optional alt override. Falls back to default's alt. */
|
|
198
|
+
alt?: string | null;
|
|
199
|
+
/**
|
|
200
|
+
* Optional focal-point override at the manifest level (per-asset default
|
|
201
|
+
* for this locale). Per-reference focal-point overrides live on the
|
|
202
|
+
* embedded ref, not here — see design-media.md.
|
|
203
|
+
*/
|
|
204
|
+
focalPoint?: {
|
|
205
|
+
x: number;
|
|
206
|
+
y: number;
|
|
207
|
+
};
|
|
208
|
+
/** Optional title override (downloadable kind). */
|
|
209
|
+
title?: string;
|
|
210
|
+
/** Optional description override (downloadable kind). */
|
|
211
|
+
description?: string;
|
|
212
|
+
}
|
|
213
|
+
/** Locale bytes override — `hash` set; byte-describing fields all required. */
|
|
214
|
+
export interface LocaleBytesOverrideManifest {
|
|
215
|
+
version: 1;
|
|
216
|
+
name: string;
|
|
217
|
+
/** 8-char SHA-256 prefix of THIS locale's bytes. */
|
|
218
|
+
hash: string;
|
|
219
|
+
/** Size in bytes of THIS locale's primary bytes. */
|
|
220
|
+
size: number;
|
|
221
|
+
/** MIME of THIS locale's bytes (may differ from default — e.g. webp override of jpeg default). */
|
|
222
|
+
mime: string;
|
|
223
|
+
/** Width in pixels of THIS locale's bytes. Null when not applicable. */
|
|
224
|
+
width: number | null;
|
|
225
|
+
/** Height in pixels of THIS locale's bytes. Null when not applicable. */
|
|
226
|
+
height: number | null;
|
|
227
|
+
/** Variant ladder for THIS locale's bytes. Empty when below smallest target width. */
|
|
228
|
+
variants: readonly AssetVariant[];
|
|
229
|
+
/** Optional metadata overrides — same as the metadata-only variant. */
|
|
230
|
+
alt?: string | null;
|
|
231
|
+
focalPoint?: {
|
|
232
|
+
x: number;
|
|
233
|
+
y: number;
|
|
234
|
+
};
|
|
235
|
+
title?: string;
|
|
236
|
+
description?: string;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Font locale-additive manifest — contributes a variant to the resolved
|
|
240
|
+
* font's `@font-face` union. Distinct shape from `LocaleOverrideManifest`
|
|
241
|
+
* because font locale variants:
|
|
242
|
+
* - ALWAYS have bytes (a font with no bytes is meaningless)
|
|
243
|
+
* - NEVER override default metadata; they add a variant alongside the default
|
|
244
|
+
* - carry font-specific fields (format, weight, style, optional unicodeRange)
|
|
245
|
+
*
|
|
246
|
+
* Browser picks the right variant per character via `unicode-range`.
|
|
247
|
+
*/
|
|
248
|
+
export interface FontLocaleAdditiveManifest {
|
|
249
|
+
version: 1;
|
|
250
|
+
name: string;
|
|
251
|
+
/** 8-char SHA-256 prefix of THIS variant's bytes. */
|
|
252
|
+
hash: string;
|
|
253
|
+
/** Size in bytes of THIS variant's bytes. */
|
|
254
|
+
size: number;
|
|
255
|
+
/** MIME of THIS variant's bytes. */
|
|
256
|
+
mime: string;
|
|
257
|
+
/** Font format the bytes are encoded in. */
|
|
258
|
+
format: 'woff2' | 'woff' | 'ttf' | 'otf';
|
|
259
|
+
/** Font weight — number or 'variable' for variable-axis fonts. */
|
|
260
|
+
weight: number | 'variable';
|
|
261
|
+
/** Font style. */
|
|
262
|
+
style: 'normal' | 'italic';
|
|
263
|
+
/**
|
|
264
|
+
* Unicode range covered by this variant. Browser uses it to pick the
|
|
265
|
+
* right variant per character. Null = no range restriction (variant
|
|
266
|
+
* applies to all characters).
|
|
267
|
+
*/
|
|
268
|
+
unicodeRange: string | null;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Library-list summary — the compact projection of `AssetManifest` that
|
|
272
|
+
* the library UI displays. Deliberately smaller than the full manifest:
|
|
273
|
+
* `uploadedBy` is excluded (RBAC / audit concern, not UI concern), and
|
|
274
|
+
* future manifest fields (variants, animated flag, etc.) are only added
|
|
275
|
+
* here when the UI genuinely needs them.
|
|
276
|
+
*/
|
|
277
|
+
export interface AssetSummary {
|
|
278
|
+
name: string;
|
|
279
|
+
kind: AssetKind;
|
|
280
|
+
mime: string;
|
|
281
|
+
size: number;
|
|
282
|
+
hash: string;
|
|
283
|
+
width: number | null;
|
|
284
|
+
height: number | null;
|
|
285
|
+
alt: string | null;
|
|
286
|
+
/** Focal point in normalized coordinates (0–1). Absent = no preference. */
|
|
287
|
+
focalPoint?: {
|
|
288
|
+
x: number;
|
|
289
|
+
y: number;
|
|
290
|
+
};
|
|
291
|
+
/** Multi-frame indicator. Absent for static images. */
|
|
292
|
+
animated?: boolean;
|
|
293
|
+
/** First-frame poster path for animated content. Absent for static. */
|
|
294
|
+
poster?: string | null;
|
|
295
|
+
uploadedAt: string;
|
|
296
|
+
/**
|
|
297
|
+
* Locales for which this asset has a manifest override (with or
|
|
298
|
+
* without bytes). Empty array means no locale variants. Detected
|
|
299
|
+
* from sibling `{name}.asset.{locale}.json` files in the same
|
|
300
|
+
* directory listing — no extra I/O.
|
|
301
|
+
*
|
|
302
|
+
* Drives the library card coverage badge (`[en✓ fr✓ ar—]`) and
|
|
303
|
+
* informs the upload dialog's default-vs-override prompt.
|
|
304
|
+
*/
|
|
305
|
+
overrideLocales: readonly string[];
|
|
306
|
+
/**
|
|
307
|
+
* Themes for which this asset has a manifest override. Same shape
|
|
308
|
+
* and source as `overrideLocales`. Empty when the site has no theme
|
|
309
|
+
* dimension or no theme overrides exist.
|
|
310
|
+
*/
|
|
311
|
+
overrideThemes: readonly string[];
|
|
312
|
+
}
|
|
313
|
+
/** Embedded asset after the resolver merges manifest + per-ref overrides. */
|
|
314
|
+
export interface ResolvedEmbeddedAsset {
|
|
315
|
+
/** Absolute or root-relative URL. */
|
|
316
|
+
url: string;
|
|
317
|
+
/** Responsive `srcset` string; null for external, SVG, animated, or when variants aren't generated. */
|
|
318
|
+
srcset: string | null;
|
|
319
|
+
width: number | null;
|
|
320
|
+
height: number | null;
|
|
321
|
+
/** Duration in ms — video, audio, or animated image. Null otherwise. */
|
|
322
|
+
duration: number | null;
|
|
323
|
+
/** True for GIF, APNG, animated WebP, animated AVIF. */
|
|
324
|
+
animated: boolean;
|
|
325
|
+
/** First-frame URL for animated content; null for static. */
|
|
326
|
+
poster: string | null;
|
|
327
|
+
/** Alt text — always a string. Empty string (`""`) means "intentionally decorative". */
|
|
328
|
+
alt: string;
|
|
329
|
+
/** Normalized 0–1 focal point; null when not set. */
|
|
330
|
+
focalPoint: {
|
|
331
|
+
x: number;
|
|
332
|
+
y: number;
|
|
333
|
+
} | null;
|
|
334
|
+
mime: string;
|
|
335
|
+
}
|
|
336
|
+
/** Downloadable asset after the resolver merges manifest + per-ref overrides. */
|
|
337
|
+
export interface ResolvedDownloadableAsset {
|
|
338
|
+
url: string;
|
|
339
|
+
title: string;
|
|
340
|
+
description: string | null;
|
|
341
|
+
size: number | null;
|
|
342
|
+
mime: string;
|
|
343
|
+
}
|
|
344
|
+
/** Font asset — a union of locale variants, each rendered as a `@font-face` declaration. */
|
|
345
|
+
export interface ResolvedFontAsset {
|
|
346
|
+
/**
|
|
347
|
+
* Gazetta-stable CSS font-family name. Templates reference this in their
|
|
348
|
+
* `font-family` declarations. NOT the font file's intrinsic family name —
|
|
349
|
+
* Gazetta owns this identifier so multi-script fonts (e.g. Inter for Latin
|
|
350
|
+
* + Noto Sans Arabic for Arabic) can share one logical family from the
|
|
351
|
+
* template's perspective.
|
|
352
|
+
*/
|
|
353
|
+
cssName: string;
|
|
354
|
+
variants: Array<{
|
|
355
|
+
url: string;
|
|
356
|
+
format: 'woff2' | 'woff' | 'ttf' | 'otf';
|
|
357
|
+
weight: number | 'variable';
|
|
358
|
+
style: 'normal' | 'italic';
|
|
359
|
+
/** Unicode range for multi-script fallback. Null means "no range restriction". */
|
|
360
|
+
unicodeRange: string | null;
|
|
361
|
+
mime: string;
|
|
362
|
+
}>;
|
|
363
|
+
}
|
|
364
|
+
import type { $brand } from 'zod/v4/core';
|
|
365
|
+
/** True when `T` carries the `embedded` brand. */
|
|
366
|
+
export type HasEmbeddedBrand<T> = T extends $brand<'embedded'> ? true : false;
|
|
367
|
+
/** True when `T` carries the `downloadable` brand. */
|
|
368
|
+
export type HasDownloadableBrand<T> = T extends $brand<'downloadable'> ? true : false;
|
|
369
|
+
/** True when `T` carries the `font` brand. */
|
|
370
|
+
export type HasFontBrand<T> = T extends $brand<'font'> ? true : false;
|
|
371
|
+
/**
|
|
372
|
+
* Walks a content type `T` (typically `z.infer<typeof schema>`) and swaps every
|
|
373
|
+
* asset reference type for its resolved counterpart.
|
|
374
|
+
*
|
|
375
|
+
* Mapping rules:
|
|
376
|
+
* - branded `embedded` → `ResolvedEmbeddedAsset`
|
|
377
|
+
* - branded `downloadable` → `ResolvedDownloadableAsset`
|
|
378
|
+
* - branded `font` → `ResolvedFontAsset`
|
|
379
|
+
* - Array: `Content<T[]>` (recurse into element type)
|
|
380
|
+
* - Object: recurse into each property, preserving optionality
|
|
381
|
+
* - Primitive: unchanged
|
|
382
|
+
*
|
|
383
|
+
* Depends only on Zod's `$brand` symbol and the resolved types above. If Zod
|
|
384
|
+
* v5 changes brand representation, update only the `Has*Brand` predicates;
|
|
385
|
+
* the mapper body stays the same.
|
|
386
|
+
*/
|
|
387
|
+
export type Content<T> = HasEmbeddedBrand<T> extends true ? ResolvedEmbeddedAsset : HasDownloadableBrand<T> extends true ? ResolvedDownloadableAsset : HasFontBrand<T> extends true ? ResolvedFontAsset : T extends ReadonlyArray<infer U> ? ReadonlyArray<Content<U>> : T extends object ? {
|
|
388
|
+
[K in keyof T]: Content<T[K]>;
|
|
389
|
+
} : T;
|
|
390
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset schema — reference and resolved type spaces, and the `Content<T>`
|
|
3
|
+
* utility that walks a Zod-inferred content type and swaps reference types
|
|
4
|
+
* for resolved types.
|
|
5
|
+
*
|
|
6
|
+
* Two distinct type spaces:
|
|
7
|
+
* - **Reference shapes** — what's stored in page/fragment content JSON. The
|
|
8
|
+
* authoring model: "this content field points to asset X with this optional
|
|
9
|
+
* override." Small, stable.
|
|
10
|
+
* - **Resolved shapes** — what templates receive at render time after the
|
|
11
|
+
* resolver merges manifest + reference overrides. Large, evolves as
|
|
12
|
+
* templates gain capabilities.
|
|
13
|
+
*
|
|
14
|
+
* Brands distinguish reference types from plain objects. `Content<T>` reads
|
|
15
|
+
* the brand to perform the swap. Brands are phantom — attached at the type
|
|
16
|
+
* level via `z.brand(...)` in `helpers.ts`, invisible at runtime.
|
|
17
|
+
*
|
|
18
|
+
* Branding is split across the two modules by role:
|
|
19
|
+
* - `types.ts` (this file) owns the `Resolved*Asset` shapes and the
|
|
20
|
+
* `Content<T>` mapper that consumes brands.
|
|
21
|
+
* - `helpers.ts` owns the `embeddedAsset()` / `downloadable()` / `fontAsset()`
|
|
22
|
+
* Zod schemas that attach brands to their inferred output.
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-dimension fallback chain resolution.
|
|
3
|
+
*
|
|
4
|
+
* Produces an ordered list of `Selector`s to try, given the active locale
|
|
5
|
+
* + theme and the site's resolved locale + theme configuration. The list
|
|
6
|
+
* is in **most-specific-first** order — callers walk it and apply each
|
|
7
|
+
* variant's overrides on top of the previous (per-field cascade), with the
|
|
8
|
+
* default manifest always read separately as the base.
|
|
9
|
+
*
|
|
10
|
+
* # Locale-priority ordering (locked)
|
|
11
|
+
*
|
|
12
|
+
* For active `(fr, dark)` with site default `(en, light)`:
|
|
13
|
+
*
|
|
14
|
+
* 1. (fr, dark) — most specific
|
|
15
|
+
* 2. (fr, light) — locale match, default theme
|
|
16
|
+
* 3. (default-locale, dark) — only theme match
|
|
17
|
+
* 4. (default-locale, light) [the default manifest, read separately]
|
|
18
|
+
*
|
|
19
|
+
* Locale matches first, then theme. Documented in design-media.md and
|
|
20
|
+
* locked during foundation grilling — language matters more for
|
|
21
|
+
* comprehension than visual presentation, so when content has to fall
|
|
22
|
+
* back, it falls back along the theme axis before the locale axis.
|
|
23
|
+
*
|
|
24
|
+
* # Default exclusion
|
|
25
|
+
*
|
|
26
|
+
* The chain never includes the all-default selector (no locale, no theme
|
|
27
|
+
* overrides). That's the base manifest, always read separately. Including
|
|
28
|
+
* it would make every walker double-read the default.
|
|
29
|
+
*
|
|
30
|
+
* Selectors with `theme = default-theme` are also excluded when the
|
|
31
|
+
* default manifest already covers that theme — they would just be
|
|
32
|
+
* duplicate reads. The chain only carries selectors whose stored manifest
|
|
33
|
+
* could plausibly differ from the default.
|
|
34
|
+
*
|
|
35
|
+
* # Single-dimension sites
|
|
36
|
+
*
|
|
37
|
+
* - Site has no themes config → chain has only locale selectors.
|
|
38
|
+
* - Site has themes but no locales → chain has only theme selectors.
|
|
39
|
+
* - Site has both → cross-product, locale-priority.
|
|
40
|
+
*
|
|
41
|
+
* Single responsibility: combine config + active selector → ordered chain.
|
|
42
|
+
* No I/O, no manifest reads, no asset knowledge.
|
|
43
|
+
*/
|
|
44
|
+
import type { ResolvedLocales } from './locale.js';
|
|
45
|
+
import { type Selector } from './schema/dimensions.js';
|
|
46
|
+
import type { ResolvedThemes } from './themes.js';
|
|
47
|
+
export interface CrossDimensionInput {
|
|
48
|
+
/** Active locale, if set. When unset, locale dimension contributes nothing. */
|
|
49
|
+
locale?: string;
|
|
50
|
+
/** Active theme, if set. When unset, theme dimension contributes nothing. */
|
|
51
|
+
theme?: string;
|
|
52
|
+
/** Resolved site locales — null when site is single-locale. */
|
|
53
|
+
locales: ResolvedLocales | null;
|
|
54
|
+
/** Resolved site themes — null when site has no theme dimension. */
|
|
55
|
+
themes: ResolvedThemes | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build the most-specific-first list of selectors to read for cross-dimension
|
|
59
|
+
* fallback. Excludes the all-default selector (caller reads default manifest
|
|
60
|
+
* separately as the base).
|
|
61
|
+
*/
|
|
62
|
+
export declare function crossDimensionFallbackChain(input: CrossDimensionInput): readonly Selector[];
|
|
63
|
+
//# sourceMappingURL=selector-chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-chain.d.ts","sourceRoot":"","sources":["../src/selector-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;IAC/B,oEAAoE;IACpE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,QAAQ,EAAE,CAkB3F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { localeFallbackChain } from './locale.js';
|
|
2
|
+
import { buildSelector } from './schema/dimensions.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build the most-specific-first list of selectors to read for cross-dimension
|
|
5
|
+
* fallback. Excludes the all-default selector (caller reads default manifest
|
|
6
|
+
* separately as the base).
|
|
7
|
+
*/
|
|
8
|
+
export function crossDimensionFallbackChain(input) {
|
|
9
|
+
const localeAxis = buildLocaleAxis(input);
|
|
10
|
+
const themeAxis = buildThemeAxis(input);
|
|
11
|
+
const result = [];
|
|
12
|
+
// Locale-priority: outer loop is locale (active first, then locale-fallbacks),
|
|
13
|
+
// inner loop is theme (active first, then default-theme).
|
|
14
|
+
for (const locale of localeAxis) {
|
|
15
|
+
for (const theme of themeAxis) {
|
|
16
|
+
const selector = buildSelector({
|
|
17
|
+
...(locale !== null ? { locale } : {}),
|
|
18
|
+
...(theme !== null ? { theme } : {}),
|
|
19
|
+
});
|
|
20
|
+
if (selector === null)
|
|
21
|
+
continue; // all-defaults, excluded
|
|
22
|
+
result.push(selector);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Locale axis values to try, in order. `null` means "no locale dimension"
|
|
29
|
+
* (default-locale, treated as identity on this axis).
|
|
30
|
+
*
|
|
31
|
+
* - When `locale` is unset OR equals default → `[null]` (no locale variants to try)
|
|
32
|
+
* - When `locale` is non-default → `[active, ...fallbacks, null]`
|
|
33
|
+
* (try active locale, then configured fallbacks, then drop the locale dimension)
|
|
34
|
+
*/
|
|
35
|
+
function buildLocaleAxis(input) {
|
|
36
|
+
if (!input.locale || !input.locales)
|
|
37
|
+
return [null];
|
|
38
|
+
if (input.locale === input.locales.default)
|
|
39
|
+
return [null];
|
|
40
|
+
const chain = localeFallbackChain(input.locale, input.locales);
|
|
41
|
+
return [...chain, null];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Theme axis values to try, in order. `null` means "no theme dimension"
|
|
45
|
+
* (default-theme, treated as identity on this axis).
|
|
46
|
+
*
|
|
47
|
+
* - When `theme` is unset OR equals default → `[null]`
|
|
48
|
+
* - When `theme` is non-default → `[active, null]`
|
|
49
|
+
* (try active theme, then drop the theme dimension)
|
|
50
|
+
*/
|
|
51
|
+
function buildThemeAxis(input) {
|
|
52
|
+
if (!input.theme || !input.themes)
|
|
53
|
+
return [null];
|
|
54
|
+
if (input.theme === input.themes.default)
|
|
55
|
+
return [null];
|
|
56
|
+
return [input.theme, null];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=selector-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-chain.js","sourceRoot":"","sources":["../src/selector-chain.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,aAAa,EAAiB,MAAM,wBAAwB,CAAA;AAcrE;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAA0B;IACpE,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,+EAA+E;IAC/E,0DAA0D;IAC1D,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC;gBAC7B,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrC,CAAC,CAAA;YACF,IAAI,QAAQ,KAAK,IAAI;gBAAE,SAAQ,CAAC,yBAAyB;YACzD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,KAA0B;IACjD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,KAA0B;IAChD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AAC5B,CAAC"}
|
package/dist/seo.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEO tag resolution — computes `<head>` tags from a fallback chain:
|
|
3
|
+
* metadata field → content field → site default → omit
|
|
4
|
+
*
|
|
5
|
+
* Single responsibility: this module owns the fallback logic and HTML
|
|
6
|
+
* tag generation for SEO. The renderer calls `resolveSeoTags()` and
|
|
7
|
+
* injects the result into `<head>` — it doesn't know about title
|
|
8
|
+
* truncation, OG deduplication, or robots directives.
|
|
9
|
+
*
|
|
10
|
+
* Open for extension: adding a new tag type is a new block in
|
|
11
|
+
* `resolveSeoTags()`, not a change to the renderer.
|
|
12
|
+
*/
|
|
13
|
+
import type { PageMetadata } from './types.js';
|
|
14
|
+
/** Escape HTML attribute values — prevents XSS in generated meta tags. */
|
|
15
|
+
export declare function escapeAttr(s: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* SEO context for a rendering pass — assembled by the caller from
|
|
18
|
+
* whatever sources it has (site manifest, target config, etc.).
|
|
19
|
+
* The renderer and seo module depend on this interface only, not
|
|
20
|
+
* on SiteManifest or TargetConfig (DIP).
|
|
21
|
+
*/
|
|
22
|
+
export interface SeoContext {
|
|
23
|
+
/** Site name — appended to auto-generated titles ("Page — Site Name"). */
|
|
24
|
+
siteName?: string;
|
|
25
|
+
/** Target's public URL for canonical/og:url (e.g. "https://gazetta.studio"). */
|
|
26
|
+
siteUrl?: string;
|
|
27
|
+
/** Site locale for `<html lang>` (e.g. "en", "fr"). Default: "en". */
|
|
28
|
+
locale?: string;
|
|
29
|
+
/** Default OG image for pages that don't specify their own. */
|
|
30
|
+
defaultOgImage?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Locale alternates for hreflang — maps locale code to absolute URL.
|
|
33
|
+
* Only set for subpath targets (same domain, all locales).
|
|
34
|
+
* Cross-domain hreflang is handled via sitemap, not HTML tags.
|
|
35
|
+
* Example: { en: "https://example.com/about", fr: "https://example.com/fr/about" }
|
|
36
|
+
*/
|
|
37
|
+
hreflangAlternates?: Record<string, string>;
|
|
38
|
+
/** The default locale code — used for x-default hreflang. */
|
|
39
|
+
defaultLocale?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ResolveSeoTagsInput {
|
|
42
|
+
metadata?: PageMetadata;
|
|
43
|
+
content?: Record<string, unknown>;
|
|
44
|
+
route?: string;
|
|
45
|
+
seo: SeoContext;
|
|
46
|
+
/** Template-provided head HTML — tags already present won't be duplicated. */
|
|
47
|
+
templateHead?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve all SEO `<head>` tags using the fallback chain. Returns raw
|
|
51
|
+
* HTML string for injection. Template-provided tags are checked for
|
|
52
|
+
* duplicates — a metadata tag is only emitted when the template head
|
|
53
|
+
* doesn't already include it.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveSeoTags(input: ResolveSeoTagsInput): string;
|
|
56
|
+
//# sourceMappingURL=seo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../src/seo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,UAAU,CAAA;IACf,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAyEjE"}
|