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
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAA;AAUpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAM9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,YAAY,CAAA;AAGnB,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAGpB,WAAW;AACX,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,GAGX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAA4B,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1D,oBAAoB;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGpD,UAAU;AACV,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAE1E,2EAA2E;AAC3E,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAG9E,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAE9B,iBAAiB;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,8CAA8C;AAC9C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE3F,0GAA0G"}
|
package/dist/locale.d.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locale resolution — single source of truth for locale configuration.
|
|
3
|
+
*
|
|
4
|
+
* Resolves the effective locale settings for a site and for each target,
|
|
5
|
+
* applying inheritance (target inherits from site) and inference
|
|
6
|
+
* (single-locale target auto-infers its default).
|
|
7
|
+
*
|
|
8
|
+
* All locale logic goes through this module. Consumers (renderer, publisher,
|
|
9
|
+
* CLI, admin API) call these functions instead of reading raw config fields.
|
|
10
|
+
*/
|
|
11
|
+
import type { SiteManifest, TargetConfig } from './types.js';
|
|
12
|
+
/** Resolved locale settings for a site or target. */
|
|
13
|
+
export interface ResolvedLocales {
|
|
14
|
+
/** All supported locale codes, normalized to lowercase. */
|
|
15
|
+
supported: string[];
|
|
16
|
+
/** The default locale code. */
|
|
17
|
+
default: string;
|
|
18
|
+
/** Whether the default locale gets a URL prefix. */
|
|
19
|
+
defaultPrefix: boolean;
|
|
20
|
+
/** Whether Accept-Language detection/redirect is enabled. */
|
|
21
|
+
detection: boolean;
|
|
22
|
+
/** Fallback chains. E.g. { 'pt-br': 'pt' }. */
|
|
23
|
+
fallbacks: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate a locale code against BCP 47 pattern.
|
|
27
|
+
* Rejects path traversal (../), dots (fr.json), scripts, empty strings,
|
|
28
|
+
* and anything that isn't a simple language or language-region code.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isValidLocale(locale: string): boolean;
|
|
31
|
+
/** Normalize a BCP 47 locale code to lowercase for filenames. */
|
|
32
|
+
export declare function normalizeLocale(locale: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the default locale for a site manifest.
|
|
35
|
+
* Chain: explicit `locale` field → first in `locales.supported` → 'en'.
|
|
36
|
+
*/
|
|
37
|
+
export declare function defaultLocaleFor(site: SiteManifest): string;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve site-level locale settings.
|
|
40
|
+
* Returns null if i18n is not enabled (no `locales` config).
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveSiteLocales(site: SiteManifest): ResolvedLocales | null;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve target-level locale settings, inheriting from site.
|
|
45
|
+
* Returns null if i18n is not enabled at the site level.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveTargetLocales(target: TargetConfig, site: SiteManifest): ResolvedLocales | null;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the locale for a given filename suffix.
|
|
50
|
+
* `page.json` → default locale, `page.fr.json` → 'fr'.
|
|
51
|
+
*/
|
|
52
|
+
export declare function localeFromFilename(filename: string, baseName: string): string | null;
|
|
53
|
+
/**
|
|
54
|
+
* Build the filename for a locale variant.
|
|
55
|
+
* `('page', null)` → `page.json`, `('page', 'fr')` → `page.fr.json`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function localeFilename(baseName: string, locale: string | null): string;
|
|
58
|
+
/**
|
|
59
|
+
* Resolve a locale through the fallback chain.
|
|
60
|
+
* Returns the first locale in the chain that has content,
|
|
61
|
+
* or the default if nothing matches.
|
|
62
|
+
*
|
|
63
|
+
* @param locale - The requested locale
|
|
64
|
+
* @param available - Set of locales that have content
|
|
65
|
+
* @param resolved - The resolved locale settings (for fallbacks and default)
|
|
66
|
+
*/
|
|
67
|
+
export declare function resolveLocaleFallback(locale: string, available: Set<string>, resolved: ResolvedLocales): string;
|
|
68
|
+
/**
|
|
69
|
+
* Build the route prefix for a locale on a given target.
|
|
70
|
+
* Default locale → '' (no prefix, unless defaultPrefix is true).
|
|
71
|
+
* Other locales → '/{locale}'.
|
|
72
|
+
*/
|
|
73
|
+
export declare function localeRoutePrefix(locale: string, resolved: ResolvedLocales): string;
|
|
74
|
+
/**
|
|
75
|
+
* Build the locale fallback chain for a given active locale, EXCLUDING the
|
|
76
|
+
* default locale (which is always read separately as the base manifest).
|
|
77
|
+
*
|
|
78
|
+
* Distinct from `resolveLocaleFallback` (which is "first-found-wins" page
|
|
79
|
+
* resolution). This helper supports **per-field cascade** in asset metadata:
|
|
80
|
+
* the asset walker reads each variant in chain order and merges most-specific-
|
|
81
|
+
* wins, so a French page can pick up `pt-BR` alt overrides through the
|
|
82
|
+
* configured `pt-BR → pt` fallback while still using default for everything
|
|
83
|
+
* else.
|
|
84
|
+
*
|
|
85
|
+
* Examples (with site default `en`, fallbacks `{ 'pt-BR': 'pt' }`):
|
|
86
|
+
* localeFallbackChain('pt-BR', resolved) → ['pt-br', 'pt']
|
|
87
|
+
* localeFallbackChain('fr', resolved) → ['fr']
|
|
88
|
+
* localeFallbackChain('en', resolved) → [] (active === default; no chain)
|
|
89
|
+
*
|
|
90
|
+
* The default locale never appears in the chain — callers always read the
|
|
91
|
+
* default manifest first as the base, then apply the chain on top.
|
|
92
|
+
*/
|
|
93
|
+
export declare function localeFallbackChain(locale: string, resolved: ResolvedLocales): readonly string[];
|
|
94
|
+
//# sourceMappingURL=locale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAA;AAE3E,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,aAAa,EAAE,OAAO,CAAA;IACtB,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAY7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAsBrG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWpF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAiB/G;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAInF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,SAAS,MAAM,EAAE,CAehG"}
|
package/dist/locale.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locale resolution — single source of truth for locale configuration.
|
|
3
|
+
*
|
|
4
|
+
* Resolves the effective locale settings for a site and for each target,
|
|
5
|
+
* applying inheritance (target inherits from site) and inference
|
|
6
|
+
* (single-locale target auto-infers its default).
|
|
7
|
+
*
|
|
8
|
+
* All locale logic goes through this module. Consumers (renderer, publisher,
|
|
9
|
+
* CLI, admin API) call these functions instead of reading raw config fields.
|
|
10
|
+
*/
|
|
11
|
+
/** BCP 47 locale code pattern: 2-letter language, optional region subtag. */
|
|
12
|
+
const LOCALE_PATTERN = /^[a-z]{2}(-[a-z]{2,8})?$/;
|
|
13
|
+
/**
|
|
14
|
+
* Validate a locale code against BCP 47 pattern.
|
|
15
|
+
* Rejects path traversal (../), dots (fr.json), scripts, empty strings,
|
|
16
|
+
* and anything that isn't a simple language or language-region code.
|
|
17
|
+
*/
|
|
18
|
+
export function isValidLocale(locale) {
|
|
19
|
+
return LOCALE_PATTERN.test(locale.toLowerCase());
|
|
20
|
+
}
|
|
21
|
+
/** Normalize a BCP 47 locale code to lowercase for filenames. */
|
|
22
|
+
export function normalizeLocale(locale) {
|
|
23
|
+
return locale.toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the default locale for a site manifest.
|
|
27
|
+
* Chain: explicit `locale` field → first in `locales.supported` → 'en'.
|
|
28
|
+
*/
|
|
29
|
+
export function defaultLocaleFor(site) {
|
|
30
|
+
return site.locale ?? site.locales?.supported?.[0] ?? 'en';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve site-level locale settings.
|
|
34
|
+
* Returns null if i18n is not enabled (no `locales` config).
|
|
35
|
+
*/
|
|
36
|
+
export function resolveSiteLocales(site) {
|
|
37
|
+
if (!site.locales)
|
|
38
|
+
return null;
|
|
39
|
+
const supported = site.locales.supported.map(normalizeLocale);
|
|
40
|
+
if (supported.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
const defaultLocale = normalizeLocale(defaultLocaleFor(site));
|
|
43
|
+
return {
|
|
44
|
+
supported,
|
|
45
|
+
default: defaultLocale,
|
|
46
|
+
defaultPrefix: site.locales.defaultPrefix ?? false,
|
|
47
|
+
detection: site.locales.detection ?? false,
|
|
48
|
+
fallbacks: normalizeFallbacks(site.locales.fallbacks),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve target-level locale settings, inheriting from site.
|
|
53
|
+
* Returns null if i18n is not enabled at the site level.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveTargetLocales(target, site) {
|
|
56
|
+
const siteLocales = resolveSiteLocales(site);
|
|
57
|
+
if (!siteLocales)
|
|
58
|
+
return null;
|
|
59
|
+
const supported = target.locales ? target.locales.map(normalizeLocale) : siteLocales.supported;
|
|
60
|
+
const defaultLocale = target.locale
|
|
61
|
+
? normalizeLocale(target.locale)
|
|
62
|
+
: supported.length === 1
|
|
63
|
+
? supported[0] // single-locale target: the only locale IS the default
|
|
64
|
+
: siteLocales.default;
|
|
65
|
+
return {
|
|
66
|
+
supported,
|
|
67
|
+
default: defaultLocale,
|
|
68
|
+
defaultPrefix: target.defaultPrefix ?? siteLocales.defaultPrefix,
|
|
69
|
+
detection: supported.length === 1
|
|
70
|
+
? false // single-locale: nothing to detect
|
|
71
|
+
: (target.detection ?? siteLocales.detection),
|
|
72
|
+
fallbacks: siteLocales.fallbacks,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Resolve the locale for a given filename suffix.
|
|
77
|
+
* `page.json` → default locale, `page.fr.json` → 'fr'.
|
|
78
|
+
*/
|
|
79
|
+
export function localeFromFilename(filename, baseName) {
|
|
80
|
+
// page.json → null (default)
|
|
81
|
+
if (filename === `${baseName}.json`)
|
|
82
|
+
return null;
|
|
83
|
+
// page.fr.json → 'fr', page.en-gb.json → 'en-gb'
|
|
84
|
+
const prefix = `${baseName}.`;
|
|
85
|
+
const suffix = '.json';
|
|
86
|
+
if (filename.startsWith(prefix) && filename.endsWith(suffix)) {
|
|
87
|
+
const locale = filename.slice(prefix.length, -suffix.length);
|
|
88
|
+
return locale || null;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build the filename for a locale variant.
|
|
94
|
+
* `('page', null)` → `page.json`, `('page', 'fr')` → `page.fr.json`.
|
|
95
|
+
*/
|
|
96
|
+
export function localeFilename(baseName, locale) {
|
|
97
|
+
if (!locale)
|
|
98
|
+
return `${baseName}.json`;
|
|
99
|
+
return `${baseName}.${normalizeLocale(locale)}.json`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a locale through the fallback chain.
|
|
103
|
+
* Returns the first locale in the chain that has content,
|
|
104
|
+
* or the default if nothing matches.
|
|
105
|
+
*
|
|
106
|
+
* @param locale - The requested locale
|
|
107
|
+
* @param available - Set of locales that have content
|
|
108
|
+
* @param resolved - The resolved locale settings (for fallbacks and default)
|
|
109
|
+
*/
|
|
110
|
+
export function resolveLocaleFallback(locale, available, resolved) {
|
|
111
|
+
const norm = normalizeLocale(locale);
|
|
112
|
+
if (available.has(norm))
|
|
113
|
+
return norm;
|
|
114
|
+
// Walk fallback chain
|
|
115
|
+
let current = norm;
|
|
116
|
+
while (resolved.fallbacks[current]) {
|
|
117
|
+
current = resolved.fallbacks[current];
|
|
118
|
+
if (available.has(current))
|
|
119
|
+
return current;
|
|
120
|
+
}
|
|
121
|
+
// Fall back to default
|
|
122
|
+
if (available.has(resolved.default))
|
|
123
|
+
return resolved.default;
|
|
124
|
+
// Last resort: first available
|
|
125
|
+
for (const loc of available)
|
|
126
|
+
return loc;
|
|
127
|
+
return resolved.default;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Build the route prefix for a locale on a given target.
|
|
131
|
+
* Default locale → '' (no prefix, unless defaultPrefix is true).
|
|
132
|
+
* Other locales → '/{locale}'.
|
|
133
|
+
*/
|
|
134
|
+
export function localeRoutePrefix(locale, resolved) {
|
|
135
|
+
const norm = normalizeLocale(locale);
|
|
136
|
+
if (norm === resolved.default && !resolved.defaultPrefix)
|
|
137
|
+
return '';
|
|
138
|
+
return `/${norm}`;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Build the locale fallback chain for a given active locale, EXCLUDING the
|
|
142
|
+
* default locale (which is always read separately as the base manifest).
|
|
143
|
+
*
|
|
144
|
+
* Distinct from `resolveLocaleFallback` (which is "first-found-wins" page
|
|
145
|
+
* resolution). This helper supports **per-field cascade** in asset metadata:
|
|
146
|
+
* the asset walker reads each variant in chain order and merges most-specific-
|
|
147
|
+
* wins, so a French page can pick up `pt-BR` alt overrides through the
|
|
148
|
+
* configured `pt-BR → pt` fallback while still using default for everything
|
|
149
|
+
* else.
|
|
150
|
+
*
|
|
151
|
+
* Examples (with site default `en`, fallbacks `{ 'pt-BR': 'pt' }`):
|
|
152
|
+
* localeFallbackChain('pt-BR', resolved) → ['pt-br', 'pt']
|
|
153
|
+
* localeFallbackChain('fr', resolved) → ['fr']
|
|
154
|
+
* localeFallbackChain('en', resolved) → [] (active === default; no chain)
|
|
155
|
+
*
|
|
156
|
+
* The default locale never appears in the chain — callers always read the
|
|
157
|
+
* default manifest first as the base, then apply the chain on top.
|
|
158
|
+
*/
|
|
159
|
+
export function localeFallbackChain(locale, resolved) {
|
|
160
|
+
const norm = normalizeLocale(locale);
|
|
161
|
+
if (norm === resolved.default)
|
|
162
|
+
return [];
|
|
163
|
+
const chain = [norm];
|
|
164
|
+
const visited = new Set([norm]);
|
|
165
|
+
let current = norm;
|
|
166
|
+
while (resolved.fallbacks[current]) {
|
|
167
|
+
const next = resolved.fallbacks[current];
|
|
168
|
+
if (next === resolved.default)
|
|
169
|
+
break;
|
|
170
|
+
if (visited.has(next))
|
|
171
|
+
break; // cycle: stop, never re-visit
|
|
172
|
+
visited.add(next);
|
|
173
|
+
chain.push(next);
|
|
174
|
+
current = next;
|
|
175
|
+
}
|
|
176
|
+
return chain;
|
|
177
|
+
}
|
|
178
|
+
/** Normalize fallback keys and values to lowercase. */
|
|
179
|
+
function normalizeFallbacks(fallbacks) {
|
|
180
|
+
if (!fallbacks)
|
|
181
|
+
return {};
|
|
182
|
+
const result = {};
|
|
183
|
+
for (const [key, value] of Object.entries(fallbacks)) {
|
|
184
|
+
result[normalizeLocale(key)] = normalizeLocale(value);
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gBAAgB,EAEhB,YAAY,EACZ,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAA;AAiDnB,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAazG;AAcD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAazG;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAUjH"}
|
package/dist/manifest.js
CHANGED
|
@@ -56,10 +56,24 @@ export async function parseSiteManifest(storage, filePath) {
|
|
|
56
56
|
name: raw.name,
|
|
57
57
|
version: raw.version,
|
|
58
58
|
locale: raw.locale,
|
|
59
|
-
|
|
59
|
+
locales: parseLocalesConfig(raw.locales),
|
|
60
|
+
defaultOgImage: raw.defaultOgImage,
|
|
60
61
|
systemPages: Array.isArray(raw.systemPages) ? raw.systemPages : undefined,
|
|
61
62
|
};
|
|
62
63
|
}
|
|
64
|
+
function parseLocalesConfig(raw) {
|
|
65
|
+
if (!raw || typeof raw !== 'object')
|
|
66
|
+
return undefined;
|
|
67
|
+
const obj = raw;
|
|
68
|
+
if (!Array.isArray(obj.supported) || obj.supported.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
return {
|
|
71
|
+
supported: obj.supported,
|
|
72
|
+
fallbacks: obj.fallbacks,
|
|
73
|
+
defaultPrefix: typeof obj.defaultPrefix === 'boolean' ? obj.defaultPrefix : undefined,
|
|
74
|
+
detection: typeof obj.detection === 'boolean' ? obj.detection : undefined,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
63
77
|
export async function parsePageManifest(storage, filePath) {
|
|
64
78
|
const raw = parseJson(await storage.readFile(filePath), filePath);
|
|
65
79
|
if (typeof raw.template !== 'string') {
|
|
@@ -70,6 +84,7 @@ export async function parsePageManifest(storage, filePath) {
|
|
|
70
84
|
template: raw.template,
|
|
71
85
|
content: raw.content,
|
|
72
86
|
components: parseComponents(raw.components),
|
|
87
|
+
metadata: raw.metadata,
|
|
73
88
|
cache: raw.cache,
|
|
74
89
|
};
|
|
75
90
|
}
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAA;AAU1B,SAAS,SAAS,CAAC,OAAe,EAAE,QAAgB;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,SAAS,OAAO,MAAM,EAAE,CAAC,CAAA;QAChF,CAAC;QACD,OAAO,MAAiC,CAAA;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,QAAgB;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,SAAS,OAAO,MAAM,EAAE,CAAC,CAAA;QAChF,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACtF,MAAM,IAAI,GAAG,KAAgC,CAAA;YAC7C,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAc;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAkB;gBACjC,OAAO,EAAE,IAAI,CAAC,OAA8C;gBAC5D,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;aAC7C,CAAA;QACH,CAAC;QACD,OAAO,KAAe,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAwB,EAAE,QAAgB;IAChF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjE,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,iCAAiC,CAAC,CAAA;IACpF,CAAC;IACD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAA6B;QAC1C,MAAM,EAAE,GAAG,CAAC,MAA4B;QACxC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;QACxC,cAAc,EAAE,GAAG,CAAC,cAAoC;QACxD,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,WAAwB,CAAC,CAAC,CAAC,SAAS;KACxF,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IACrD,MAAM,GAAG,GAAG,GAA8B,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjF,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAqB;QACpC,SAAS,EAAE,GAAG,CAAC,SAA+C;QAC9D,aAAa,EAAE,OAAO,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACrF,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC1E,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAwB,EAAE,QAAgB;IAChF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjE,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,qCAAqC,CAAC,CAAA;IACxF,CAAC;IACD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,GAAG,CAAC,QAAkB;QAChC,OAAO,EAAE,GAAG,CAAC,OAA8C;QAC3D,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QAC3C,QAAQ,EAAE,GAAG,CAAC,QAAyD;QACvE,KAAK,EAAE,GAAG,CAAC,KAAqD;KACjE,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAwB,EAAE,QAAgB;IACpF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjE,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,qCAAqC,CAAC,CAAA;IAC5F,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO,EAAE,GAAG,CAAC,OAA8C;QAC3D,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;KAC5C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function atomicWriteString(path: string, content: string): Promise<void>;
|
|
2
|
+
/**
|
|
3
|
+
* Atomic byte write — bytes-in, no string round-trip. Used by callers
|
|
4
|
+
* that have a buffer in hand (history blobs, bounded asset writes).
|
|
5
|
+
* Same write-then-rename guarantees as atomicWriteString.
|
|
6
|
+
*/
|
|
7
|
+
export declare function atomicWriteBytes(path: string, bytes: Uint8Array): Promise<void>;
|
|
8
|
+
export declare function atomicWriteStream(path: string, stream: ReadableStream<Uint8Array>): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=_atomic-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_atomic-write.d.ts","sourceRoot":"","sources":["../../src/providers/_atomic-write.ts"],"names":[],"mappings":"AA+BA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBvG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic file write policy for the filesystem provider.
|
|
3
|
+
*
|
|
4
|
+
* Both text and binary-stream writes use a write-then-rename strategy so
|
|
5
|
+
* readers mid-write never see a partial file:
|
|
6
|
+
*
|
|
7
|
+
* - Text (`atomicWriteString`): delegates to the `write-file-atomic` package
|
|
8
|
+
* (same pattern everyone else in the Node ecosystem uses — sharp's internal
|
|
9
|
+
* config, npm's lockfile writer, etc.).
|
|
10
|
+
* - Binary stream (`atomicWriteStream`): pipes the incoming stream into a
|
|
11
|
+
* same-directory temp file, then renames onto the target. Temp is cleaned
|
|
12
|
+
* up on pipeline failure.
|
|
13
|
+
*
|
|
14
|
+
* Atomicity guarantees:
|
|
15
|
+
* - POSIX `rename(2)` is atomic within a single filesystem. Node's
|
|
16
|
+
* `fs.rename` delegates to it on POSIX systems.
|
|
17
|
+
* - Windows `MoveFileEx` with `MOVEFILE_REPLACE_EXISTING` is atomic on NTFS
|
|
18
|
+
* when source and target are on the same volume — write-file-atomic (for
|
|
19
|
+
* text) and our temp-path scheme (for streams) both place the temp file
|
|
20
|
+
* in the same directory as the target to meet this requirement.
|
|
21
|
+
*
|
|
22
|
+
* This module is filesystem-specific. Cloud storage (R2, S3, Azure) has
|
|
23
|
+
* naturally atomic single-object PUT and does not need this policy.
|
|
24
|
+
*/
|
|
25
|
+
import { createWriteStream } from 'node:fs';
|
|
26
|
+
import { mkdir, rename, rm } from 'node:fs/promises';
|
|
27
|
+
import { dirname } from 'node:path';
|
|
28
|
+
import { pipeline } from 'node:stream/promises';
|
|
29
|
+
import writeFileAtomic from 'write-file-atomic';
|
|
30
|
+
import { webReadableToNode } from './_stream-interop.js';
|
|
31
|
+
export async function atomicWriteString(path, content) {
|
|
32
|
+
// Parent directory must exist before write-file-atomic creates its tempfile
|
|
33
|
+
// next to the target. Same contract as atomicWriteStream.
|
|
34
|
+
await mkdir(dirname(path), { recursive: true });
|
|
35
|
+
await writeFileAtomic(path, content, 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Atomic byte write — bytes-in, no string round-trip. Used by callers
|
|
39
|
+
* that have a buffer in hand (history blobs, bounded asset writes).
|
|
40
|
+
* Same write-then-rename guarantees as atomicWriteString.
|
|
41
|
+
*/
|
|
42
|
+
export async function atomicWriteBytes(path, bytes) {
|
|
43
|
+
await mkdir(dirname(path), { recursive: true });
|
|
44
|
+
// write-file-atomic accepts Buffer | Uint8Array directly; no encoding
|
|
45
|
+
// applied when the second arg is bytes. Wrap in Buffer for consistent
|
|
46
|
+
// typing across Node versions (Buffer extends Uint8Array).
|
|
47
|
+
await writeFileAtomic(path, Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength));
|
|
48
|
+
}
|
|
49
|
+
export async function atomicWriteStream(path, stream) {
|
|
50
|
+
// Parent directory must exist before createWriteStream can create the file.
|
|
51
|
+
// (`write-file-atomic` handles this for text; for streams we do it ourselves.)
|
|
52
|
+
await mkdir(dirname(path), { recursive: true });
|
|
53
|
+
const tmpPath = `${path}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
|
|
54
|
+
const writer = createWriteStream(tmpPath);
|
|
55
|
+
try {
|
|
56
|
+
await pipeline(webReadableToNode(stream), writer);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
// Clean up the temp file on pipeline failure; swallow rm errors
|
|
60
|
+
// (already-missing temp is fine).
|
|
61
|
+
await rm(tmpPath, { force: true }).catch(() => { });
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await rename(tmpPath, path);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
await rm(tmpPath, { force: true }).catch(() => { });
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=_atomic-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_atomic-write.js","sourceRoot":"","sources":["../../src/providers/_atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAiB,MAAM,sBAAsB,CAAA;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe;IACnE,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAiB;IACpE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,sEAAsE;IACtE,sEAAsE;IACtE,2DAA2D;IAC3D,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAkC;IACtF,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/C,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;IACnF,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAEzC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAkB,CAAC,CAAA;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gEAAgE;QAChE,kCAAkC;QAClC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage adapter utility — idempotent remove via probe-then-delete.
|
|
3
|
+
*
|
|
4
|
+
* Uses `exists()` to determine whether the path is present, then `rm()`
|
|
5
|
+
* only when it is. This delegates the "is it missing?" decision to the
|
|
6
|
+
* provider's own `exists()` implementation — no cross-provider error-
|
|
7
|
+
* shape matching needed.
|
|
8
|
+
*
|
|
9
|
+
* Why probe-then-delete instead of try/catch:
|
|
10
|
+
* - `exists()` is already part of the StorageProvider contract and every
|
|
11
|
+
* provider knows how to answer it correctly for its backend.
|
|
12
|
+
* - Matching raw error messages (`ENOENT`, `NoSuchKey`, etc.) across four
|
|
13
|
+
* providers is fragile and accumulates drift as providers version.
|
|
14
|
+
* - A TOCTOU race (file deleted between probe and rm) just means `rm()`
|
|
15
|
+
* throws, and the caller sees a real error — acceptable because the
|
|
16
|
+
* race is vanishingly rare in our single-writer model (the admin is the
|
|
17
|
+
* only writer on source content during v1).
|
|
18
|
+
*
|
|
19
|
+
* When the storage interface grows a typed `StorageNotFoundError`
|
|
20
|
+
* (separate PR — retrofit across all four providers + all existing `rm`
|
|
21
|
+
* callers), this helper becomes a one-liner try/catch. Until then, the
|
|
22
|
+
* probe is the honest abstraction boundary.
|
|
23
|
+
*/
|
|
24
|
+
import type { StorageProvider } from '../types.js';
|
|
25
|
+
/**
|
|
26
|
+
* `rm(path)` that swallows "already missing" — probes with `exists()`
|
|
27
|
+
* first. Returns `true` if a file was actually removed, `false` if it
|
|
28
|
+
* was already gone. Callers that care can distinguish.
|
|
29
|
+
*/
|
|
30
|
+
export declare function rmIgnoreMissing(storage: StorageProvider, path: string): Promise<boolean>;
|
|
31
|
+
//# sourceMappingURL=_rm-ignore-missing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_rm-ignore-missing.d.ts","sourceRoot":"","sources":["../../src/providers/_rm-ignore-missing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rm(path)` that swallows "already missing" — probes with `exists()`
|
|
3
|
+
* first. Returns `true` if a file was actually removed, `false` if it
|
|
4
|
+
* was already gone. Callers that care can distinguish.
|
|
5
|
+
*/
|
|
6
|
+
export async function rmIgnoreMissing(storage, path) {
|
|
7
|
+
if (!(await storage.exists(path)))
|
|
8
|
+
return false;
|
|
9
|
+
await storage.rm(path);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=_rm-ignore-missing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_rm-ignore-missing.js","sourceRoot":"","sources":["../../src/providers/_rm-ignore-missing.ts"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB,EAAE,IAAY;IAC1E,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAC/C,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACtB,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream interoperability between Node's `stream` module and the WHATWG
|
|
3
|
+
* `ReadableStream` web standard.
|
|
4
|
+
*
|
|
5
|
+
* Node 16.5+ provides `Readable.toWeb` / `Readable.fromWeb`, but the types
|
|
6
|
+
* are subtly wrong for our use case — they return/accept the `node:stream/web`
|
|
7
|
+
* variant of `ReadableStream` rather than the lib-dom global. These helpers
|
|
8
|
+
* do the single-point type coercion so every consumer of the filesystem
|
|
9
|
+
* provider's streaming methods (and future providers) sees the standard
|
|
10
|
+
* web type without casting at each call site.
|
|
11
|
+
*/
|
|
12
|
+
import { Readable, type Writable } from 'node:stream';
|
|
13
|
+
/** Coerce a Node Readable into the standard `ReadableStream<Uint8Array>`. */
|
|
14
|
+
export declare function nodeReadableToWeb(stream: Readable): ReadableStream<Uint8Array>;
|
|
15
|
+
/** Coerce a standard `ReadableStream<Uint8Array>` into a Node Readable. */
|
|
16
|
+
export declare function webReadableToNode(stream: ReadableStream<Uint8Array>): Readable;
|
|
17
|
+
/**
|
|
18
|
+
* Re-exported type alias — callers doing `pipeline(webReadableToNode(s), writer)`
|
|
19
|
+
* need the Writable type for the writer argument, but the Node `stream` module's
|
|
20
|
+
* typing is verbose to import in every provider.
|
|
21
|
+
*/
|
|
22
|
+
export type { Writable };
|
|
23
|
+
//# sourceMappingURL=_stream-interop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_stream-interop.d.ts","sourceRoot":"","sources":["../../src/providers/_stream-interop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAE9E;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,QAAQ,CAE9E;AAED;;;;GAIG;AACH,YAAY,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream interoperability between Node's `stream` module and the WHATWG
|
|
3
|
+
* `ReadableStream` web standard.
|
|
4
|
+
*
|
|
5
|
+
* Node 16.5+ provides `Readable.toWeb` / `Readable.fromWeb`, but the types
|
|
6
|
+
* are subtly wrong for our use case — they return/accept the `node:stream/web`
|
|
7
|
+
* variant of `ReadableStream` rather than the lib-dom global. These helpers
|
|
8
|
+
* do the single-point type coercion so every consumer of the filesystem
|
|
9
|
+
* provider's streaming methods (and future providers) sees the standard
|
|
10
|
+
* web type without casting at each call site.
|
|
11
|
+
*/
|
|
12
|
+
import { Readable } from 'node:stream';
|
|
13
|
+
/** Coerce a Node Readable into the standard `ReadableStream<Uint8Array>`. */
|
|
14
|
+
export function nodeReadableToWeb(stream) {
|
|
15
|
+
return Readable.toWeb(stream);
|
|
16
|
+
}
|
|
17
|
+
/** Coerce a standard `ReadableStream<Uint8Array>` into a Node Readable. */
|
|
18
|
+
export function webReadableToNode(stream) {
|
|
19
|
+
return Readable.fromWeb(stream);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=_stream-interop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_stream-interop.js","sourceRoot":"","sources":["../../src/providers/_stream-interop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAA;AAErD,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,MAAgB;IAChD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAA+B,CAAA;AAC7D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,MAAkC;IAClE,OAAO,QAAQ,CAAC,OAAO,CAAC,MAA8D,CAAC,CAAA;AACzF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-blob.d.ts","sourceRoot":"","sources":["../../src/providers/azure-blob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"azure-blob.d.ts","sourceRoot":"","sources":["../../src/providers/azure-blob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,aAAa,CAAA;AAGvE,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,GAChC,eAAe,GAAG;IAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA0I7C"}
|