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,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset resolution — turn references stored in content JSON into the resolved
|
|
3
|
+
* shapes templates receive at render time.
|
|
4
|
+
*
|
|
5
|
+
* Dispatches by `manifest.kind` (per Q1 lock):
|
|
6
|
+
* - embedded → `resolveEmbeddedRef`
|
|
7
|
+
* - downloadable → `resolveDownloadableRef`
|
|
8
|
+
* - font → `resolveFontRef`
|
|
9
|
+
*
|
|
10
|
+
* Locale + theme handled per Q3/Q4 locks:
|
|
11
|
+
* - embedded/downloadable: walker reads each variant in the cross-dimension
|
|
12
|
+
* chain (most-specific-first) and folds them onto the default with
|
|
13
|
+
* `foldLocaleChain` (most-specific-LAST after reversing). Result is one
|
|
14
|
+
* effective `Partial<AssetManifest>` passed to the kind resolver.
|
|
15
|
+
* - font: walker enumerates every (locale, theme) cell in the site's
|
|
16
|
+
* supported universe, reads each variant that exists, and passes the
|
|
17
|
+
* full Map<Selector-key, FontLocaleAdditiveManifest> to the font
|
|
18
|
+
* resolver. Fonts ADD variants (per Q3 lock); they don't override.
|
|
19
|
+
*
|
|
20
|
+
* # Why the walker enumerates the full universe for fonts
|
|
21
|
+
*
|
|
22
|
+
* The font resolver returns a union of `@font-face` declarations, each
|
|
23
|
+
* with its own `unicode-range`. The browser picks per character based on
|
|
24
|
+
* the active page's content. So at render time we don't know which
|
|
25
|
+
* locale's font variant will be needed — we expose ALL of them. The
|
|
26
|
+
* universe is the site's `themes.supported × locales.supported` cells;
|
|
27
|
+
* the walker tries each one and includes the variants that exist.
|
|
28
|
+
*
|
|
29
|
+
* # Graceful degradation
|
|
30
|
+
*
|
|
31
|
+
* When a referenced asset can't be resolved (manifest missing, corrupt,
|
|
32
|
+
* or storage failure), the walker returns a placeholder resolved shape
|
|
33
|
+
* and logs the error. Pages continue rendering; authors see degraded
|
|
34
|
+
* output instead of crashed pages (design-media.md → graceful
|
|
35
|
+
* degradation).
|
|
36
|
+
*/
|
|
37
|
+
import type { ResolvedDownloadableAsset, ResolvedEmbeddedAsset, ResolvedFontAsset } from '../schema/types.js';
|
|
38
|
+
import type { StorageProvider } from '../types.js';
|
|
39
|
+
import { type Selector, selectorsEqual } from '../schema/dimensions.js';
|
|
40
|
+
import type { ResolvedLocales } from '../locale.js';
|
|
41
|
+
import type { ResolvedThemes } from '../themes.js';
|
|
42
|
+
import type { TransformAdapter } from '../transforms/adapter.js';
|
|
43
|
+
/** Context needed to resolve a reference — shared across all refs in a render pass. */
|
|
44
|
+
export interface AssetResolveContext {
|
|
45
|
+
/** The source target's storage provider (where manifests + bytes live). */
|
|
46
|
+
storage: StorageProvider;
|
|
47
|
+
/** Path prefix for assets within the storage root (typically `"assets"`). */
|
|
48
|
+
assetsRoot: string;
|
|
49
|
+
/**
|
|
50
|
+
* Site URL prefix for absolute URLs. When absent, URLs are root-relative.
|
|
51
|
+
* Used for targets served from a separate origin.
|
|
52
|
+
*/
|
|
53
|
+
siteUrl?: string;
|
|
54
|
+
/** Active locale for this render pass. Absent = default-locale render. */
|
|
55
|
+
locale?: string;
|
|
56
|
+
/** Active theme for this render pass. Absent = default-theme render. */
|
|
57
|
+
theme?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Resolved site-level locales. Required when `locale` is set; the chain
|
|
60
|
+
* builder needs the full config (default locale, fallbacks).
|
|
61
|
+
*/
|
|
62
|
+
locales?: ResolvedLocales | null;
|
|
63
|
+
/**
|
|
64
|
+
* Resolved site-level themes. Required when `theme` is set OR for font
|
|
65
|
+
* resolution (fonts enumerate the supported theme set).
|
|
66
|
+
*/
|
|
67
|
+
themes?: ResolvedThemes | null;
|
|
68
|
+
/**
|
|
69
|
+
* Transform adapter — required, but defaults to `sharpAdapter` when the
|
|
70
|
+
* caller doesn't supply one. The adapter owns URL composition, srcset
|
|
71
|
+
* generation, and cache policy. Per-target factory at boot picks the
|
|
72
|
+
* right adapter per `target.transforms` config.
|
|
73
|
+
*/
|
|
74
|
+
transformAdapter?: TransformAdapter;
|
|
75
|
+
}
|
|
76
|
+
/** Shape of an embedded-asset reference as stored in content JSON. */
|
|
77
|
+
interface EmbeddedRefShape {
|
|
78
|
+
_asset: string;
|
|
79
|
+
alt?: string;
|
|
80
|
+
focalPoint?: {
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** Shape of a downloadable-asset reference as stored in content JSON. */
|
|
86
|
+
interface DownloadableRefShape {
|
|
87
|
+
_asset: string;
|
|
88
|
+
title?: string;
|
|
89
|
+
description?: string;
|
|
90
|
+
}
|
|
91
|
+
/** Shape of a font-asset reference as stored in content JSON. */
|
|
92
|
+
interface FontRefShape {
|
|
93
|
+
_asset: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resolve a single embedded-asset reference. Caller has already read the
|
|
97
|
+
* default + per-locale variant and folded the chain into one effective
|
|
98
|
+
* Partial. We merge that effective override on top of the default for
|
|
99
|
+
* field-level overrides; bytes-presence (hash on the override) shifts
|
|
100
|
+
* URL construction to the override's bytes.
|
|
101
|
+
*
|
|
102
|
+
* Throws on manifest not-found or corrupt — caller (the walker) catches
|
|
103
|
+
* and substitutes a placeholder.
|
|
104
|
+
*/
|
|
105
|
+
export declare function resolveEmbeddedRef(ref: EmbeddedRefShape, defaultManifest: import('../schema/types.js').AssetManifest, effectiveOverride: Partial<import('../schema/types.js').AssetManifest> | null, selector: Selector | null, ctx: AssetResolveContext): Promise<ResolvedEmbeddedAsset>;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve a single downloadable-asset reference. Same locale-merge
|
|
108
|
+
* semantics as embedded; different resolved shape (no srcset, no
|
|
109
|
+
* focal-point, has title/description).
|
|
110
|
+
*/
|
|
111
|
+
export declare function resolveDownloadableRef(ref: DownloadableRefShape, defaultManifest: import('../schema/types.js').AssetManifest, effectiveOverride: Partial<import('../schema/types.js').AssetManifest> | null, selector: Selector | null, ctx: AssetResolveContext): Promise<ResolvedDownloadableAsset>;
|
|
112
|
+
/**
|
|
113
|
+
* Resolve a font-asset reference. Walker has already enumerated every
|
|
114
|
+
* locale/theme variant that exists; we receive them as a Map. The
|
|
115
|
+
* resolved shape carries the full union — templates emit one
|
|
116
|
+
* `@font-face` per variant.
|
|
117
|
+
*
|
|
118
|
+
* Today's manifest type doesn't yet carry font-specific fields
|
|
119
|
+
* (`cssName`, `format`, `weight`, `style`, `unicodeRange`) — those
|
|
120
|
+
* land when ingest learns to write fonts. Until then, we synthesize
|
|
121
|
+
* sensible defaults from the asset name and MIME. The shape and
|
|
122
|
+
* dispatch are correct from day one; the field set fills in
|
|
123
|
+
* incrementally.
|
|
124
|
+
*/
|
|
125
|
+
/** A font variant paired with the selector that addresses its bytes. */
|
|
126
|
+
export interface FontVariantEntry {
|
|
127
|
+
selector: Selector;
|
|
128
|
+
manifest: import('../schema/types.js').FontLocaleAdditiveManifest;
|
|
129
|
+
}
|
|
130
|
+
export declare function resolveFontRef(_ref: FontRefShape, defaultManifest: import('../schema/types.js').AssetManifest, variants: readonly FontVariantEntry[], ctx: AssetResolveContext): Promise<ResolvedFontAsset>;
|
|
131
|
+
/**
|
|
132
|
+
* Walk a content object and resolve every asset reference found. Returns a
|
|
133
|
+
* new content object with references swapped for resolved shapes; arrays and
|
|
134
|
+
* nested objects are recursed into. Non-ref values are copied unchanged.
|
|
135
|
+
*
|
|
136
|
+
* Graceful degradation: references that fail to resolve are replaced with a
|
|
137
|
+
* placeholder. Errors are logged but don't halt rendering.
|
|
138
|
+
*/
|
|
139
|
+
export declare function resolveAssetRefs(content: Record<string, unknown> | undefined, ctx: AssetResolveContext): Promise<Record<string, unknown> | undefined>;
|
|
140
|
+
export { selectorsEqual };
|
|
141
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/assets/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { buildSelector, selectorsEqual } from '../schema/dimensions.js';
|
|
2
|
+
import { crossDimensionFallbackChain } from '../selector-chain.js';
|
|
3
|
+
import { sharpAdapter } from '../transforms/sharp.js';
|
|
4
|
+
import { AssetManifestCorruptError, AssetManifestNotFoundError } from './errors.js';
|
|
5
|
+
import { foldLocaleChain } from './manifest-merge.js';
|
|
6
|
+
import { readDefaultManifest } from './manifest-default.js';
|
|
7
|
+
import { localeManifestVariantFor } from './manifest-locale.js';
|
|
8
|
+
import { extFromMime } from './url.js';
|
|
9
|
+
// ---------- Per-kind resolvers ----------
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a single embedded-asset reference. Caller has already read the
|
|
12
|
+
* default + per-locale variant and folded the chain into one effective
|
|
13
|
+
* Partial. We merge that effective override on top of the default for
|
|
14
|
+
* field-level overrides; bytes-presence (hash on the override) shifts
|
|
15
|
+
* URL construction to the override's bytes.
|
|
16
|
+
*
|
|
17
|
+
* Throws on manifest not-found or corrupt — caller (the walker) catches
|
|
18
|
+
* and substitutes a placeholder.
|
|
19
|
+
*/
|
|
20
|
+
export async function resolveEmbeddedRef(ref, defaultManifest, effectiveOverride, selector, ctx) {
|
|
21
|
+
// Bytes source: when the effective override has a hash, the locale
|
|
22
|
+
// has its own bytes — URL points at the locale-bytes path. Otherwise
|
|
23
|
+
// URL points at the default bytes.
|
|
24
|
+
const overrideHasBytes = effectiveOverride !== null && typeof effectiveOverride.hash === 'string';
|
|
25
|
+
const bytesSource = overrideHasBytes ? effectiveOverride : defaultManifest;
|
|
26
|
+
const bytesSelector = overrideHasBytes ? selector : null;
|
|
27
|
+
// The merged manifest is "default with override fields applied" for
|
|
28
|
+
// field reads (alt, width, height, variants, mime). Override-wins on
|
|
29
|
+
// any non-undefined field.
|
|
30
|
+
const merged = {
|
|
31
|
+
...defaultManifest,
|
|
32
|
+
...(effectiveOverride ?? {}),
|
|
33
|
+
};
|
|
34
|
+
const ext = extFromMime(merged.mime);
|
|
35
|
+
if (!ext) {
|
|
36
|
+
throw new AssetManifestCorruptError(`${ctx.assetsRoot}/${defaultManifest.name}.asset.json`, new Error(`No extension known for MIME ${merged.mime}`));
|
|
37
|
+
}
|
|
38
|
+
const adapter = ctx.transformAdapter ?? sharpAdapter;
|
|
39
|
+
const adapterInput = {
|
|
40
|
+
name: defaultManifest.name,
|
|
41
|
+
hash: bytesSource.hash,
|
|
42
|
+
ext,
|
|
43
|
+
selector: bytesSelector,
|
|
44
|
+
siteUrl: ctx.siteUrl,
|
|
45
|
+
variants: (bytesSource.variants ?? []),
|
|
46
|
+
width: merged.width,
|
|
47
|
+
height: merged.height,
|
|
48
|
+
};
|
|
49
|
+
const url = adapter.primaryUrl(adapterInput);
|
|
50
|
+
const srcset = adapter.srcset(adapterInput);
|
|
51
|
+
// Per-ref override > merged manifest's alt > '' (decorative).
|
|
52
|
+
const alt = ref.alt ?? merged.alt ?? '';
|
|
53
|
+
return {
|
|
54
|
+
url,
|
|
55
|
+
srcset,
|
|
56
|
+
width: merged.width,
|
|
57
|
+
height: merged.height,
|
|
58
|
+
duration: null,
|
|
59
|
+
animated: false,
|
|
60
|
+
poster: null,
|
|
61
|
+
alt,
|
|
62
|
+
focalPoint: ref.focalPoint ?? null,
|
|
63
|
+
mime: merged.mime,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve a single downloadable-asset reference. Same locale-merge
|
|
68
|
+
* semantics as embedded; different resolved shape (no srcset, no
|
|
69
|
+
* focal-point, has title/description).
|
|
70
|
+
*/
|
|
71
|
+
export async function resolveDownloadableRef(ref, defaultManifest, effectiveOverride, selector, ctx) {
|
|
72
|
+
const overrideHasBytes = effectiveOverride !== null && typeof effectiveOverride.hash === 'string';
|
|
73
|
+
const bytesSource = overrideHasBytes ? effectiveOverride : defaultManifest;
|
|
74
|
+
const bytesSelector = overrideHasBytes ? selector : null;
|
|
75
|
+
const merged = {
|
|
76
|
+
...defaultManifest,
|
|
77
|
+
...(effectiveOverride ?? {}),
|
|
78
|
+
};
|
|
79
|
+
const ext = extFromMime(merged.mime);
|
|
80
|
+
if (!ext) {
|
|
81
|
+
throw new AssetManifestCorruptError(`${ctx.assetsRoot}/${defaultManifest.name}.asset.json`, new Error(`No extension known for MIME ${merged.mime}`));
|
|
82
|
+
}
|
|
83
|
+
const adapter = ctx.transformAdapter ?? sharpAdapter;
|
|
84
|
+
const url = adapter.primaryUrl({
|
|
85
|
+
name: defaultManifest.name,
|
|
86
|
+
hash: bytesSource.hash,
|
|
87
|
+
ext,
|
|
88
|
+
selector: bytesSelector,
|
|
89
|
+
siteUrl: ctx.siteUrl,
|
|
90
|
+
variants: [], // downloadable assets don't have a srcset ladder
|
|
91
|
+
width: null,
|
|
92
|
+
height: null,
|
|
93
|
+
});
|
|
94
|
+
// Title fallback chain: per-ref → merged manifest title → asset name.
|
|
95
|
+
// (Today's manifest type doesn't carry `title`; step 24/post-v1 will
|
|
96
|
+
// add it. Until then, the asset name is the human-readable fallback.)
|
|
97
|
+
const title = ref.title ?? merged.title ?? defaultManifest.name;
|
|
98
|
+
const description = ref.description ?? merged.description ?? null;
|
|
99
|
+
return {
|
|
100
|
+
url,
|
|
101
|
+
title,
|
|
102
|
+
description,
|
|
103
|
+
size: merged.size ?? null,
|
|
104
|
+
mime: merged.mime,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export async function resolveFontRef(_ref, defaultManifest, variants, ctx) {
|
|
108
|
+
const ext = extFromMime(defaultManifest.mime);
|
|
109
|
+
if (!ext) {
|
|
110
|
+
throw new AssetManifestCorruptError(`${ctx.assetsRoot}/${defaultManifest.name}.asset.json`, new Error(`No extension known for MIME ${defaultManifest.mime}`));
|
|
111
|
+
}
|
|
112
|
+
// CSS family name: stable per asset (Gazetta-owned identifier per
|
|
113
|
+
// design-media.md). Today's manifest doesn't carry `cssName`, so
|
|
114
|
+
// derive from the asset name.
|
|
115
|
+
const cssName = defaultManifest.name;
|
|
116
|
+
const adapter = ctx.transformAdapter ?? sharpAdapter;
|
|
117
|
+
// Default variant is always present in the union — every font has
|
|
118
|
+
// its default file.
|
|
119
|
+
const resolved = [
|
|
120
|
+
{
|
|
121
|
+
url: adapter.primaryUrl({
|
|
122
|
+
name: defaultManifest.name,
|
|
123
|
+
hash: defaultManifest.hash,
|
|
124
|
+
ext,
|
|
125
|
+
selector: null,
|
|
126
|
+
siteUrl: ctx.siteUrl,
|
|
127
|
+
variants: [],
|
|
128
|
+
width: null,
|
|
129
|
+
height: null,
|
|
130
|
+
}),
|
|
131
|
+
format: deriveFontFormat(ext),
|
|
132
|
+
weight: 400,
|
|
133
|
+
style: 'normal',
|
|
134
|
+
unicodeRange: null,
|
|
135
|
+
mime: defaultManifest.mime,
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
// Add each locale/theme variant. URL embeds the variant's selector so
|
|
139
|
+
// the bytes file for that variant resolves correctly.
|
|
140
|
+
for (const { selector, manifest: variant } of variants) {
|
|
141
|
+
const variantExt = extFromMime(variant.mime) ?? ext;
|
|
142
|
+
resolved.push({
|
|
143
|
+
url: adapter.primaryUrl({
|
|
144
|
+
name: defaultManifest.name,
|
|
145
|
+
hash: variant.hash,
|
|
146
|
+
ext: variantExt,
|
|
147
|
+
selector,
|
|
148
|
+
siteUrl: ctx.siteUrl,
|
|
149
|
+
variants: [],
|
|
150
|
+
width: null,
|
|
151
|
+
height: null,
|
|
152
|
+
}),
|
|
153
|
+
format: variant.format,
|
|
154
|
+
weight: variant.weight,
|
|
155
|
+
style: variant.style,
|
|
156
|
+
unicodeRange: variant.unicodeRange,
|
|
157
|
+
mime: variant.mime,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
cssName,
|
|
162
|
+
variants: resolved,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function deriveFontFormat(ext) {
|
|
166
|
+
switch (ext) {
|
|
167
|
+
case 'woff2':
|
|
168
|
+
return 'woff2';
|
|
169
|
+
case 'woff':
|
|
170
|
+
return 'woff';
|
|
171
|
+
case 'ttf':
|
|
172
|
+
return 'ttf';
|
|
173
|
+
case 'otf':
|
|
174
|
+
return 'otf';
|
|
175
|
+
default:
|
|
176
|
+
return 'woff2';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// ---------- Walker ----------
|
|
180
|
+
/** Placeholder returned when a reference can't be resolved. */
|
|
181
|
+
const EMBEDDED_PLACEHOLDER = {
|
|
182
|
+
url: '/assets/__missing__.svg',
|
|
183
|
+
srcset: null,
|
|
184
|
+
width: null,
|
|
185
|
+
height: null,
|
|
186
|
+
duration: null,
|
|
187
|
+
animated: false,
|
|
188
|
+
poster: null,
|
|
189
|
+
alt: '',
|
|
190
|
+
focalPoint: null,
|
|
191
|
+
mime: 'image/svg+xml',
|
|
192
|
+
};
|
|
193
|
+
const DOWNLOADABLE_PLACEHOLDER = {
|
|
194
|
+
url: '/assets/__missing__',
|
|
195
|
+
title: '(missing asset)',
|
|
196
|
+
description: null,
|
|
197
|
+
size: null,
|
|
198
|
+
mime: 'application/octet-stream',
|
|
199
|
+
};
|
|
200
|
+
const FONT_PLACEHOLDER = {
|
|
201
|
+
cssName: '__missing__',
|
|
202
|
+
variants: [],
|
|
203
|
+
};
|
|
204
|
+
/** Structural check — is this value an asset reference (any kind)? */
|
|
205
|
+
function isAssetRef(value) {
|
|
206
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
207
|
+
return false;
|
|
208
|
+
const v = value;
|
|
209
|
+
return typeof v._asset === 'string';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Walk a content object and resolve every asset reference found. Returns a
|
|
213
|
+
* new content object with references swapped for resolved shapes; arrays and
|
|
214
|
+
* nested objects are recursed into. Non-ref values are copied unchanged.
|
|
215
|
+
*
|
|
216
|
+
* Graceful degradation: references that fail to resolve are replaced with a
|
|
217
|
+
* placeholder. Errors are logged but don't halt rendering.
|
|
218
|
+
*/
|
|
219
|
+
export async function resolveAssetRefs(content, ctx) {
|
|
220
|
+
if (!content)
|
|
221
|
+
return content;
|
|
222
|
+
return (await walk(content, ctx));
|
|
223
|
+
}
|
|
224
|
+
async function walk(value, ctx) {
|
|
225
|
+
if (isAssetRef(value)) {
|
|
226
|
+
try {
|
|
227
|
+
return await resolveOne(value, ctx);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
if (err instanceof AssetManifestNotFoundError || err instanceof AssetManifestCorruptError) {
|
|
231
|
+
// eslint-disable-next-line no-console
|
|
232
|
+
console.warn(`[asset-resolver] ${err.message}`);
|
|
233
|
+
// Return the most generic placeholder — the walker can't know
|
|
234
|
+
// the kind without successfully reading the manifest. Embedded's
|
|
235
|
+
// placeholder shape carries the most fields, so it satisfies any
|
|
236
|
+
// template that conditionally checks fields like `srcset`.
|
|
237
|
+
return EMBEDDED_PLACEHOLDER;
|
|
238
|
+
}
|
|
239
|
+
throw err;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (Array.isArray(value)) {
|
|
243
|
+
return Promise.all(value.map(item => walk(item, ctx)));
|
|
244
|
+
}
|
|
245
|
+
if (value && typeof value === 'object') {
|
|
246
|
+
const result = {};
|
|
247
|
+
for (const [key, v] of Object.entries(value)) {
|
|
248
|
+
result[key] = await walk(v, ctx);
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
return value;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Resolve one asset reference. Reads default first to discover kind,
|
|
256
|
+
* then dispatches to the kind-specific path with appropriate locale/
|
|
257
|
+
* theme handling.
|
|
258
|
+
*/
|
|
259
|
+
async function resolveOne(ref, ctx) {
|
|
260
|
+
const defaultManifest = await readDefaultManifest(ctx.storage, ctx.assetsRoot, ref._asset);
|
|
261
|
+
switch (defaultManifest.kind) {
|
|
262
|
+
case 'font': {
|
|
263
|
+
const variants = await readAllFontVariants(defaultManifest.name, ctx);
|
|
264
|
+
return resolveFontRef(ref, defaultManifest, variants, ctx);
|
|
265
|
+
}
|
|
266
|
+
case 'downloadable': {
|
|
267
|
+
const { effective, selector } = await readEffectiveLocaleOverride(defaultManifest.name, 'downloadable', ctx);
|
|
268
|
+
return resolveDownloadableRef(ref, defaultManifest, effective, selector, ctx);
|
|
269
|
+
}
|
|
270
|
+
case 'embedded':
|
|
271
|
+
default: {
|
|
272
|
+
const { effective, selector } = await readEffectiveLocaleOverride(defaultManifest.name, 'embedded', ctx);
|
|
273
|
+
return resolveEmbeddedRef(ref, defaultManifest, effective, selector, ctx);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Read the cross-dimension fallback chain for an asset's name + kind,
|
|
279
|
+
* fold the per-field overrides onto a fresh base, and return the
|
|
280
|
+
* effective override along with the selector that produced bytes (if
|
|
281
|
+
* any).
|
|
282
|
+
*
|
|
283
|
+
* Returns:
|
|
284
|
+
* - effective: Partial<AssetManifest> — undefined-shaped fields show
|
|
285
|
+
* "no override"; defined fields show "this locale wins."
|
|
286
|
+
* - selector: the most-specific selector that contributed bytes (i.e.
|
|
287
|
+
* had a `hash`); null if no override has bytes.
|
|
288
|
+
*/
|
|
289
|
+
async function readEffectiveLocaleOverride(name, kind, ctx) {
|
|
290
|
+
const chain = crossDimensionFallbackChain({
|
|
291
|
+
locale: ctx.locale,
|
|
292
|
+
theme: ctx.theme,
|
|
293
|
+
locales: ctx.locales ?? null,
|
|
294
|
+
themes: ctx.themes ?? null,
|
|
295
|
+
});
|
|
296
|
+
if (chain.length === 0) {
|
|
297
|
+
return { effective: null, selector: null };
|
|
298
|
+
}
|
|
299
|
+
// Read each variant in the chain. `crossDimensionFallbackChain` returns
|
|
300
|
+
// most-specific-FIRST. `foldLocaleChain` expects most-specific-LAST,
|
|
301
|
+
// so we reverse before fold (and pick the first hash-carrying entry,
|
|
302
|
+
// also walking most-specific-first, for the bytes selector).
|
|
303
|
+
const variant = localeManifestVariantFor(kind);
|
|
304
|
+
const overrides = [];
|
|
305
|
+
for (const sel of chain) {
|
|
306
|
+
const manifest = (await variant.read(ctx.storage, ctx.assetsRoot, name, sel));
|
|
307
|
+
overrides.push({ selector: sel, manifest });
|
|
308
|
+
}
|
|
309
|
+
// Pick the bytes selector — first override (most-specific) with a hash.
|
|
310
|
+
let bytesSelector = null;
|
|
311
|
+
for (const o of overrides) {
|
|
312
|
+
if (o.manifest && typeof o.manifest.hash === 'string') {
|
|
313
|
+
bytesSelector = o.selector;
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Fold: reverse so least-specific applies first; most-specific overwrites.
|
|
318
|
+
const reversed = overrides
|
|
319
|
+
.slice()
|
|
320
|
+
.reverse()
|
|
321
|
+
.map(o => o.manifest);
|
|
322
|
+
const effective = foldLocaleChain({}, reversed);
|
|
323
|
+
return { effective: Object.keys(effective).length > 0 ? effective : null, selector: bytesSelector };
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Read every locale/theme font variant that exists. Walker enumerates
|
|
327
|
+
* the site's `themes.supported × locales.supported` cells (excluding
|
|
328
|
+
* the all-default cell, which is the default manifest read separately)
|
|
329
|
+
* and collects the variants returned non-null.
|
|
330
|
+
*
|
|
331
|
+
* Returns a Map keyed by selector identity (built from JSON.stringify
|
|
332
|
+
* of the selector entries) for downstream iteration. Today's caller
|
|
333
|
+
* just iterates the values — the key is for de-duplication only.
|
|
334
|
+
*/
|
|
335
|
+
async function readAllFontVariants(name, ctx) {
|
|
336
|
+
const out = [];
|
|
337
|
+
const variant = localeManifestVariantFor('font');
|
|
338
|
+
// Universe = configured (locale, theme) cells. Default-locale +
|
|
339
|
+
// default-theme is excluded — that's the default manifest, read
|
|
340
|
+
// separately. When neither dimension is configured, there are no
|
|
341
|
+
// variants to look up.
|
|
342
|
+
const localeCells = ctx.locales?.supported ?? [];
|
|
343
|
+
const themeCells = ctx.themes?.supported ?? [];
|
|
344
|
+
const candidates = [];
|
|
345
|
+
for (const loc of localeCells) {
|
|
346
|
+
if (loc === ctx.locales?.default)
|
|
347
|
+
continue;
|
|
348
|
+
const sel = buildSelector({ locale: loc });
|
|
349
|
+
if (sel)
|
|
350
|
+
candidates.push(sel);
|
|
351
|
+
}
|
|
352
|
+
for (const th of themeCells) {
|
|
353
|
+
if (th === ctx.themes?.default)
|
|
354
|
+
continue;
|
|
355
|
+
const sel = buildSelector({ theme: th });
|
|
356
|
+
if (sel)
|
|
357
|
+
candidates.push(sel);
|
|
358
|
+
}
|
|
359
|
+
for (const loc of localeCells) {
|
|
360
|
+
if (loc === ctx.locales?.default)
|
|
361
|
+
continue;
|
|
362
|
+
for (const th of themeCells) {
|
|
363
|
+
if (th === ctx.themes?.default)
|
|
364
|
+
continue;
|
|
365
|
+
const sel = buildSelector({ locale: loc, theme: th });
|
|
366
|
+
if (sel)
|
|
367
|
+
candidates.push(sel);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
for (const sel of candidates) {
|
|
371
|
+
const m = await variant.read(ctx.storage, ctx.assetsRoot, name, sel);
|
|
372
|
+
if (m) {
|
|
373
|
+
out.push({ selector: sel, manifest: m });
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return out;
|
|
377
|
+
}
|
|
378
|
+
// Re-export so external callers continue to import `selectorsEqual`-style
|
|
379
|
+
// helpers from this module if needed for tests. Pure pass-through.
|
|
380
|
+
export { selectorsEqual };
|
|
381
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/assets/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite every reference to an asset inside one manifest, returning a
|
|
3
|
+
* new deeply-cloned manifest with the refs updated. Pure (no I/O); the
|
|
4
|
+
* caller decides what to do with the result.
|
|
5
|
+
*
|
|
6
|
+
* Two consumers:
|
|
7
|
+
* - `replace.ts` — the orchestrator for "replace asset A with asset B
|
|
8
|
+
* across the whole site" uses this to transform each referencing
|
|
9
|
+
* manifest before writing it back.
|
|
10
|
+
* - Future rename operation — same semantic (rewrite asset-name refs),
|
|
11
|
+
* just different caller intent.
|
|
12
|
+
*
|
|
13
|
+
* Pairs with `scan-manifest-for-asset.ts`: scan emits locations where
|
|
14
|
+
* refs live; rewrite produces a new manifest with those locations
|
|
15
|
+
* updated. Keeping them separate modules is deliberate SRP — scanning
|
|
16
|
+
* is read-only, rewriting mutates (a copy of) the tree.
|
|
17
|
+
*
|
|
18
|
+
* Per-reference override semantics:
|
|
19
|
+
* When we rewrite `{ _asset: "hero", alt: "..." }` → target `banner`,
|
|
20
|
+
* we preserve the override fields (`alt`, `focalPoint`, etc.). The
|
|
21
|
+
* author's per-reference override is authored-intent, not asset-intent;
|
|
22
|
+
* it stays when the underlying asset changes. Design-media.md: "Preserve
|
|
23
|
+
* per-reference overrides when the author re-picks."
|
|
24
|
+
*/
|
|
25
|
+
import type { ComponentManifest } from '../types.js';
|
|
26
|
+
export interface RewriteInput {
|
|
27
|
+
readonly manifest: ComponentManifest;
|
|
28
|
+
readonly fromAssetName: string;
|
|
29
|
+
readonly toAssetName: string;
|
|
30
|
+
}
|
|
31
|
+
export interface RewriteResult {
|
|
32
|
+
/** The new manifest with refs rewritten. Structurally cloned, so
|
|
33
|
+
* callers can freely mutate or serialize without affecting the input. */
|
|
34
|
+
readonly manifest: ComponentManifest;
|
|
35
|
+
/** How many `{ _asset: fromAssetName }` references were rewritten.
|
|
36
|
+
* Zero is a valid result (manifest didn't reference the asset). */
|
|
37
|
+
readonly rewriteCount: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Rewrite every `{ _asset: fromAssetName }` ref in `manifest` to point
|
|
41
|
+
* at `toAssetName` instead. Returns a deep clone — input is untouched.
|
|
42
|
+
*/
|
|
43
|
+
export declare function rewriteManifestAssetRef(input: RewriteInput): RewriteResult;
|
|
44
|
+
//# sourceMappingURL=rewrite-manifest-asset-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-manifest-asset-ref.d.ts","sourceRoot":"","sources":["../../src/assets/rewrite-manifest-asset-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B;8EAC0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC;wEACoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAQ1E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite every `{ _asset: fromAssetName }` ref in `manifest` to point
|
|
3
|
+
* at `toAssetName` instead. Returns a deep clone — input is untouched.
|
|
4
|
+
*/
|
|
5
|
+
export function rewriteManifestAssetRef(input) {
|
|
6
|
+
// Deep clone so the walker can mutate freely. JSON round-trip is safe
|
|
7
|
+
// for manifests — they're JSON already (content is Record<string,
|
|
8
|
+
// unknown> with JSON-serializable values per the schema).
|
|
9
|
+
const cloned = JSON.parse(JSON.stringify(input.manifest));
|
|
10
|
+
const counter = { n: 0 };
|
|
11
|
+
walkComponent(cloned, input.fromAssetName, input.toAssetName, counter);
|
|
12
|
+
return { manifest: cloned, rewriteCount: counter.n };
|
|
13
|
+
}
|
|
14
|
+
/** Walk a component (page/fragment manifest or inline child). */
|
|
15
|
+
function walkComponent(comp, from, to, counter) {
|
|
16
|
+
if (comp.content)
|
|
17
|
+
rewriteValue(comp.content, from, to, counter);
|
|
18
|
+
if (comp.components) {
|
|
19
|
+
for (const child of comp.components) {
|
|
20
|
+
if (typeof child === 'string')
|
|
21
|
+
continue;
|
|
22
|
+
walkComponent(child, from, to, counter);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Recursively walk a value looking for `{ _asset: from, ... }` objects.
|
|
28
|
+
* When found, update `_asset` to `to` and count. Does NOT early-return —
|
|
29
|
+
* a ref object can itself contain nested refs (e.g. a future composite
|
|
30
|
+
* template puts one asset ref inside another's override fields).
|
|
31
|
+
*/
|
|
32
|
+
function rewriteValue(value, from, to, counter) {
|
|
33
|
+
if (value === null || typeof value !== 'object')
|
|
34
|
+
return;
|
|
35
|
+
if (Array.isArray(value)) {
|
|
36
|
+
for (const item of value)
|
|
37
|
+
rewriteValue(item, from, to, counter);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const obj = value;
|
|
41
|
+
if (typeof obj._asset === 'string' && obj._asset === from) {
|
|
42
|
+
obj._asset = to;
|
|
43
|
+
counter.n++;
|
|
44
|
+
}
|
|
45
|
+
for (const [key, child] of Object.entries(obj)) {
|
|
46
|
+
if (key === '_asset')
|
|
47
|
+
continue;
|
|
48
|
+
rewriteValue(child, from, to, counter);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=rewrite-manifest-asset-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-manifest-asset-ref.js","sourceRoot":"","sources":["../../src/assets/rewrite-manifest-asset-ref.ts"],"names":[],"mappings":"AAyCA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAmB;IACzD,sEAAsE;IACtE,kEAAkE;IAClE,0DAA0D;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAsB,CAAA;IAC9E,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACxB,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;AACtD,CAAC;AAED,iEAAiE;AACjE,SAAS,aAAa,CACpB,IAAyF,EACzF,IAAY,EACZ,EAAU,EACV,OAAsB;IAEtB,IAAI,IAAI,CAAC,OAAO;QAAE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAQ;YACvC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,KAAc,EAAE,IAAY,EAAE,EAAU,EAAE,OAAsB;IACpF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAM;IAEvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1D,GAAG,CAAC,MAAM,GAAG,EAAE,CAAA;QACf,OAAO,CAAC,CAAC,EAAE,CAAA;IACb,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,KAAK,QAAQ;YAAE,SAAQ;QAC9B,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;AACH,CAAC"}
|