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