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,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Higher-level helper for recording revisions on a target.
|
|
3
|
+
*
|
|
4
|
+
* The bare `HistoryProvider.recordRevision` takes a full
|
|
5
|
+
* `items: Map<path, content>` snapshot. That's fine for testing but
|
|
6
|
+
* wasteful at runtime: every save of one page would re-hash and
|
|
7
|
+
* re-list every page + fragment on the target. This helper does the
|
|
8
|
+
* right thing:
|
|
9
|
+
*
|
|
10
|
+
* - First revision on a target: walks the content tree once to
|
|
11
|
+
* snapshot every manifest (page.json, fragment.json, site.yaml).
|
|
12
|
+
* - Subsequent revisions: reads the previous snapshot and overlays
|
|
13
|
+
* the delta (changed items the caller passes in). `readBlob` for
|
|
14
|
+
* each carried-over path gives us the content for the new
|
|
15
|
+
* revision's items map — at which point `recordRevision` dedupes
|
|
16
|
+
* the unchanged blobs via content-addressing, so no new storage.
|
|
17
|
+
*
|
|
18
|
+
* SRP: this module owns the "what goes in a revision snapshot"
|
|
19
|
+
* decision. `HistoryProvider` owns layout. Callers (admin-api save /
|
|
20
|
+
* admin-api publish / CLI publish) just describe *what they wrote*
|
|
21
|
+
* and we construct the revision.
|
|
22
|
+
*/
|
|
23
|
+
import { join } from 'node:path';
|
|
24
|
+
/**
|
|
25
|
+
* Built-in content locations Gazetta knows about today. Callers can
|
|
26
|
+
* pass a superset (e.g. for future data/*, templates/*) — the list is
|
|
27
|
+
* part of `RecordWriteOptions` so this module stays open for extension
|
|
28
|
+
* without changes when new content kinds land.
|
|
29
|
+
*/
|
|
30
|
+
export const DEFAULT_SCAN_LOCATIONS = [
|
|
31
|
+
{ dir: 'pages', manifest: 'page.json' },
|
|
32
|
+
{ dir: 'fragments', manifest: 'fragment.json' },
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Flat files at the content root to capture in the baseline snapshot
|
|
36
|
+
* (no per-subdirectory recursion). `site.yaml` is the only one today.
|
|
37
|
+
*/
|
|
38
|
+
export const DEFAULT_SCAN_ROOT_FILES = ['site.yaml'];
|
|
39
|
+
/**
|
|
40
|
+
* Build + record a revision for the given write. Reads the previous
|
|
41
|
+
* snapshot (if any), overlays the delta, and calls
|
|
42
|
+
* `history.recordRevision`. Returns the recorded Revision.
|
|
43
|
+
*
|
|
44
|
+
* Callers are expected to have already written the items to the
|
|
45
|
+
* target's storage before invoking this; the recorder reads back via
|
|
46
|
+
* the HistoryProvider's dedup path (blobs it has already seen just
|
|
47
|
+
* `exists()` and skip) so the happy path is cheap on repeated saves
|
|
48
|
+
* of the same item.
|
|
49
|
+
*/
|
|
50
|
+
export async function recordWrite(opts) {
|
|
51
|
+
const scanLocations = opts.scanLocations ?? DEFAULT_SCAN_LOCATIONS;
|
|
52
|
+
const scanRootFiles = opts.scanRootFiles ?? DEFAULT_SCAN_ROOT_FILES;
|
|
53
|
+
// On the very first write, record a baseline revision capturing the
|
|
54
|
+
// pre-write state — so "undo my first save" has something to revert
|
|
55
|
+
// to (the tree as it was before the CMS touched it). Subsequent
|
|
56
|
+
// writes overlay deltas onto the previous revision. Without this,
|
|
57
|
+
// rev-0001 would be post-save state and undo would have no earlier
|
|
58
|
+
// revision to restore.
|
|
59
|
+
const existing = await opts.history.listRevisions(1);
|
|
60
|
+
if (existing.length === 0) {
|
|
61
|
+
const baseline = await scanContentTree(opts.contentRoot, scanLocations, scanRootFiles);
|
|
62
|
+
await opts.history.recordRevision({
|
|
63
|
+
operation: 'save',
|
|
64
|
+
message: 'Initial baseline',
|
|
65
|
+
items: baseline,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const prevItems = await loadPreviousSnapshot(opts.history, opts.contentRoot, scanLocations, scanRootFiles);
|
|
69
|
+
const nextItems = new Map(prevItems);
|
|
70
|
+
for (const it of opts.items) {
|
|
71
|
+
if (it.content === null)
|
|
72
|
+
nextItems.delete(it.path);
|
|
73
|
+
else
|
|
74
|
+
nextItems.set(it.path, it.content);
|
|
75
|
+
}
|
|
76
|
+
const input = {
|
|
77
|
+
operation: opts.operation,
|
|
78
|
+
author: opts.author,
|
|
79
|
+
source: opts.source,
|
|
80
|
+
message: opts.message,
|
|
81
|
+
restoredFrom: opts.restoredFrom,
|
|
82
|
+
items: nextItems,
|
|
83
|
+
};
|
|
84
|
+
return opts.history.recordRevision(input);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Materialize the previous revision's full content snapshot as
|
|
88
|
+
* `path → content`. If there is no previous revision, fall back to a
|
|
89
|
+
* one-time scan of the target's content tree (pages, fragments,
|
|
90
|
+
* site.yaml). That makes the first revision a proper baseline even
|
|
91
|
+
* when history was turned on after content already existed.
|
|
92
|
+
*/
|
|
93
|
+
async function loadPreviousSnapshot(history, contentRoot, scanLocations, scanRootFiles) {
|
|
94
|
+
const [head] = await history.listRevisions(1);
|
|
95
|
+
if (head) {
|
|
96
|
+
const manifest = await history.readRevision(head.id);
|
|
97
|
+
const items = new Map();
|
|
98
|
+
// Read blobs in parallel to avoid a big serial chain on large
|
|
99
|
+
// snapshots. `readBlob` returns Uint8Array — passing through as-is
|
|
100
|
+
// means binary blobs round-trip without decode/encode, and text
|
|
101
|
+
// blobs round-trip as their UTF-8 byte form (still hashes the same
|
|
102
|
+
// way they would as strings, so dedup holds).
|
|
103
|
+
const entries = Object.entries(manifest.snapshot);
|
|
104
|
+
const contents = await Promise.all(entries.map(([, hash]) => history.readBlob(hash)));
|
|
105
|
+
entries.forEach(([path], i) => items.set(path, contents[i]));
|
|
106
|
+
return items;
|
|
107
|
+
}
|
|
108
|
+
return scanContentTree(contentRoot, scanLocations, scanRootFiles);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* One-time walk of a content root, capturing every content-defining
|
|
112
|
+
* manifest. Used only for the first revision on a target; subsequent
|
|
113
|
+
* revisions overlay deltas onto the previous snapshot.
|
|
114
|
+
*
|
|
115
|
+
* Locations walked come from `scanLocations` and `scanRootFiles` (see
|
|
116
|
+
* RecordWriteOptions) so this module stays open for extension: adding
|
|
117
|
+
* a new content kind is a caller-side change, not an edit here.
|
|
118
|
+
*/
|
|
119
|
+
async function scanContentTree(root, scanLocations, scanRootFiles) {
|
|
120
|
+
// Snapshot type is `BlobContent` (string | Uint8Array). v1 only scans
|
|
121
|
+
// text content (manifests, YAML); binary asset paths are populated
|
|
122
|
+
// by callers via `WrittenItem`s on subsequent saves. The map's type
|
|
123
|
+
// accommodates both so callers can pass either through.
|
|
124
|
+
const items = new Map();
|
|
125
|
+
const { storage } = root;
|
|
126
|
+
for (const rel of scanRootFiles) {
|
|
127
|
+
const abs = root.path(rel);
|
|
128
|
+
if (await storage.exists(abs)) {
|
|
129
|
+
items.set(rel, await storage.readFile(abs));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
for (const loc of scanLocations) {
|
|
133
|
+
await scanManifestsInto(storage, root.path(loc.dir), loc.dir, loc.manifest, items);
|
|
134
|
+
}
|
|
135
|
+
return items;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Walk a `pages/` or `fragments/` tree, reading every matching manifest
|
|
139
|
+
* into `items` with relative-path keys. Recurses so nested dynamic
|
|
140
|
+
* routes (e.g. `blog/[slug]/page.json`) are captured.
|
|
141
|
+
*
|
|
142
|
+
* Cloud object stores (R2/S3/Azure Blob) have no "directory" concept —
|
|
143
|
+
* `exists()` on a prefix-only path returns false. Rely on `readDir`
|
|
144
|
+
* returning an empty array for missing paths instead of probing via
|
|
145
|
+
* `exists` first.
|
|
146
|
+
*/
|
|
147
|
+
async function scanManifestsInto(storage, absDir, relPrefix, manifestName, items) {
|
|
148
|
+
let entries;
|
|
149
|
+
try {
|
|
150
|
+
entries = await storage.readDir(absDir);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return; // Directory doesn't exist (or provider threw) — nothing to scan.
|
|
154
|
+
}
|
|
155
|
+
for (const e of entries) {
|
|
156
|
+
if (!e.isDirectory)
|
|
157
|
+
continue;
|
|
158
|
+
const sub = join(absDir, e.name);
|
|
159
|
+
const relSub = `${relPrefix}/${e.name}`;
|
|
160
|
+
const manifestPath = join(sub, manifestName);
|
|
161
|
+
if (await storage.exists(manifestPath)) {
|
|
162
|
+
items.set(`${relSub}/${manifestName}`, await storage.readFile(manifestPath));
|
|
163
|
+
}
|
|
164
|
+
// Recurse for nested routes (pages/blog/[slug]/page.json).
|
|
165
|
+
await scanManifestsInto(storage, sub, relSub, manifestName, items);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=history-recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-recorder.js","sourceRoot":"","sources":["../src/history-recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply a past revision's snapshot to a target's content tree.
|
|
3
|
+
*
|
|
4
|
+
* This is the write side of undo / rollback. Design-publishing.md:
|
|
5
|
+
* "Undo and rollback restore a prior revision — both are soft
|
|
6
|
+
* (forward-only; create a new revision reverting to the past state,
|
|
7
|
+
* never destroy history)."
|
|
8
|
+
*
|
|
9
|
+
* Algorithm:
|
|
10
|
+
* 1. Load the target revision's snapshot (itemPath → blob hash).
|
|
11
|
+
* 2. Diff against the current on-disk content (via the HistoryProvider's
|
|
12
|
+
* most-recent revision). Anything present now but absent from the
|
|
13
|
+
* target snapshot is deleted; everything in the snapshot is written
|
|
14
|
+
* from its blob.
|
|
15
|
+
* 3. Record a new revision with operation='rollback' and
|
|
16
|
+
* restoredFrom=<targetRevId>, so the audit trail shows where the
|
|
17
|
+
* state came from and history stays forward-only.
|
|
18
|
+
*
|
|
19
|
+
* The caller (admin-api / CLI) owns orchestration — picking which
|
|
20
|
+
* revision to restore (head-1 for undo, arbitrary for rollback) and
|
|
21
|
+
* any side effects beyond the content tree (e.g., sidecar writer
|
|
22
|
+
* invalidation).
|
|
23
|
+
*/
|
|
24
|
+
import type { ContentRoot } from './content-root.js';
|
|
25
|
+
import type { HistoryProvider, Revision } from './history.js';
|
|
26
|
+
export interface RestoreRevisionOptions {
|
|
27
|
+
/** HistoryProvider for the target being restored. */
|
|
28
|
+
history: HistoryProvider;
|
|
29
|
+
/** Content root of the target — destination for the restore writes. */
|
|
30
|
+
contentRoot: ContentRoot;
|
|
31
|
+
/** Id of the revision to restore to (rev-NNNN). */
|
|
32
|
+
revisionId: string;
|
|
33
|
+
/** Free-form author identifier passed to the forward revision. */
|
|
34
|
+
author?: string;
|
|
35
|
+
/** Human-readable note ("Undo publish from local"). */
|
|
36
|
+
message?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Restore `revisionId`'s content onto the target. Writes any items
|
|
40
|
+
* present in the snapshot (content fetched via `readBlob`); deletes
|
|
41
|
+
* items that exist today but aren't in the restored snapshot. Returns
|
|
42
|
+
* the new forward revision — always operation='rollback' so audit
|
|
43
|
+
* consumers can distinguish restores from normal saves/publishes.
|
|
44
|
+
*/
|
|
45
|
+
export declare function restoreRevision(opts: RestoreRevisionOptions): Promise<Revision>;
|
|
46
|
+
//# sourceMappingURL=history-restorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-restorer.d.ts","sourceRoot":"","sources":["../src/history-restorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAuC,MAAM,cAAc,CAAA;AAElG,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,eAAe,CAAA;IACxB,uEAAuE;IACvE,WAAW,EAAE,WAAW,CAAA;IACxB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyErF"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply a past revision's snapshot to a target's content tree.
|
|
3
|
+
*
|
|
4
|
+
* This is the write side of undo / rollback. Design-publishing.md:
|
|
5
|
+
* "Undo and rollback restore a prior revision — both are soft
|
|
6
|
+
* (forward-only; create a new revision reverting to the past state,
|
|
7
|
+
* never destroy history)."
|
|
8
|
+
*
|
|
9
|
+
* Algorithm:
|
|
10
|
+
* 1. Load the target revision's snapshot (itemPath → blob hash).
|
|
11
|
+
* 2. Diff against the current on-disk content (via the HistoryProvider's
|
|
12
|
+
* most-recent revision). Anything present now but absent from the
|
|
13
|
+
* target snapshot is deleted; everything in the snapshot is written
|
|
14
|
+
* from its blob.
|
|
15
|
+
* 3. Record a new revision with operation='rollback' and
|
|
16
|
+
* restoredFrom=<targetRevId>, so the audit trail shows where the
|
|
17
|
+
* state came from and history stays forward-only.
|
|
18
|
+
*
|
|
19
|
+
* The caller (admin-api / CLI) owns orchestration — picking which
|
|
20
|
+
* revision to restore (head-1 for undo, arbitrary for rollback) and
|
|
21
|
+
* any side effects beyond the content tree (e.g., sidecar writer
|
|
22
|
+
* invalidation).
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Restore `revisionId`'s content onto the target. Writes any items
|
|
26
|
+
* present in the snapshot (content fetched via `readBlob`); deletes
|
|
27
|
+
* items that exist today but aren't in the restored snapshot. Returns
|
|
28
|
+
* the new forward revision — always operation='rollback' so audit
|
|
29
|
+
* consumers can distinguish restores from normal saves/publishes.
|
|
30
|
+
*/
|
|
31
|
+
export async function restoreRevision(opts) {
|
|
32
|
+
const { history, contentRoot, revisionId } = opts;
|
|
33
|
+
const target = await history.readRevision(revisionId);
|
|
34
|
+
// Current state = the most recent revision's snapshot. If none
|
|
35
|
+
// exists yet we're restoring onto an empty tree — nothing to delete
|
|
36
|
+
// and no "unchanged" entries to skip.
|
|
37
|
+
const currentSnapshot = await loadHeadSnapshot(history);
|
|
38
|
+
const toDelete = Object.keys(currentSnapshot).filter(p => !(p in target.snapshot));
|
|
39
|
+
// Only write items whose blob hash differs from what's currently on
|
|
40
|
+
// disk (per head snapshot). Without this, restoring typically rewrites
|
|
41
|
+
// every item in the snapshot — an undo of a single-page edit would
|
|
42
|
+
// touch every page + fragment manifest, triggering a storm of file-
|
|
43
|
+
// watch events and SSE reloads in the dev server. Equal hashes →
|
|
44
|
+
// same content → skip the write.
|
|
45
|
+
const toWrite = Object.entries(target.snapshot).filter(([path, hash]) => currentSnapshot[path] !== hash);
|
|
46
|
+
// Delete first: rolling back a "delete" in the old revision means the
|
|
47
|
+
// item came back; rolling back an "add" means the item goes away.
|
|
48
|
+
// Delete-before-write keeps storage from briefly holding both.
|
|
49
|
+
for (const path of toDelete) {
|
|
50
|
+
const abs = contentRoot.path(path);
|
|
51
|
+
try {
|
|
52
|
+
await contentRoot.storage.rm(abs);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Best-effort: a missing path at rm time is fine (already gone).
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const [path, hash] of toWrite) {
|
|
59
|
+
const bytes = await history.readBlob(hash);
|
|
60
|
+
const abs = contentRoot.path(path);
|
|
61
|
+
const parent = abs.substring(0, abs.lastIndexOf('/'));
|
|
62
|
+
if (parent)
|
|
63
|
+
await contentRoot.storage.mkdir(parent);
|
|
64
|
+
// Restore via writeBytes — uniform bytes-in for both text and
|
|
65
|
+
// binary content. Text blobs are UTF-8-encoded bytes
|
|
66
|
+
// (indistinguishable from what writeFile would have stored);
|
|
67
|
+
// binary blobs (asset bytes, variants) round-trip raw.
|
|
68
|
+
await contentRoot.storage.writeBytes(abs, bytes);
|
|
69
|
+
}
|
|
70
|
+
// After restoring manifests, rebuild the asset-refs sidecar index.
|
|
71
|
+
// Manifests are the source of truth; a restore can change which
|
|
72
|
+
// assets and fragments each item references, which would leave the
|
|
73
|
+
// per-edge dep sidecars stale. Easier to rebuild than diff per-item —
|
|
74
|
+
// we have the full set of post-restore manifests on disk.
|
|
75
|
+
if (toWrite.length > 0 || toDelete.length > 0) {
|
|
76
|
+
try {
|
|
77
|
+
const { loadSite } = await import('./site-loader.js');
|
|
78
|
+
const { rebuildDepIndex } = await import('./publish-rendered.js');
|
|
79
|
+
const { ASSET_REFS } = await import('./assets/asset-deps.js');
|
|
80
|
+
const { FRAGMENT_DEPS } = await import('./fragment-deps.js');
|
|
81
|
+
const site = await loadSite({ contentRoot });
|
|
82
|
+
await Promise.all([
|
|
83
|
+
rebuildDepIndex(ASSET_REFS, site, contentRoot.storage, contentRoot.rootPath),
|
|
84
|
+
rebuildDepIndex(FRAGMENT_DEPS, site, contentRoot.storage, contentRoot.rootPath),
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
// Non-fatal: if site.yaml is missing or load fails, dep indices
|
|
89
|
+
// might drift. Reindex CLI recovers.
|
|
90
|
+
// eslint-disable-next-line no-console
|
|
91
|
+
console.warn(`dep-sidecar rebuild after restore failed: ${err.message}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Record a new forward revision capturing the restored state. Uses
|
|
95
|
+
// the same snapshot we just wrote — no need to re-read from disk.
|
|
96
|
+
return recordFromSnapshot(history, target, {
|
|
97
|
+
operation: 'rollback',
|
|
98
|
+
restoredFrom: revisionId,
|
|
99
|
+
author: opts.author,
|
|
100
|
+
message: opts.message,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Re-record an existing snapshot as a forward revision. Blobs already
|
|
105
|
+
* exist (they're the same content), so the HistoryProvider's exists()
|
|
106
|
+
* check skips the writes — cheap.
|
|
107
|
+
*
|
|
108
|
+
* Items map carries `Uint8Array` because that's what `readBlob`
|
|
109
|
+
* returns. Text and binary blobs round-trip identically — the
|
|
110
|
+
* provider hashes raw bytes either way, so dedup holds.
|
|
111
|
+
*/
|
|
112
|
+
async function recordFromSnapshot(history, target, meta) {
|
|
113
|
+
const items = new Map();
|
|
114
|
+
for (const [path, hash] of Object.entries(target.snapshot)) {
|
|
115
|
+
items.set(path, await history.readBlob(hash));
|
|
116
|
+
}
|
|
117
|
+
return history.recordRevision({
|
|
118
|
+
operation: meta.operation,
|
|
119
|
+
author: meta.author,
|
|
120
|
+
message: meta.message,
|
|
121
|
+
restoredFrom: meta.restoredFrom,
|
|
122
|
+
items,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Head revision's snapshot, or `{}` if there are no revisions yet.
|
|
127
|
+
* Used by restore to figure out what's currently on-disk and needs
|
|
128
|
+
* deleting when the restored revision doesn't include it.
|
|
129
|
+
*/
|
|
130
|
+
async function loadHeadSnapshot(history) {
|
|
131
|
+
const [head] = await history.listRevisions(1);
|
|
132
|
+
if (!head)
|
|
133
|
+
return {};
|
|
134
|
+
const m = await history.readRevision(head.id);
|
|
135
|
+
return m.snapshot;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=history-restorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-restorer.js","sourceRoot":"","sources":["../src/history-restorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History / revisions for a target.
|
|
3
|
+
*
|
|
4
|
+
* Every write to a target (save or publish) records a revision. Undo and
|
|
5
|
+
* rollback restore a prior revision — both are soft (forward-only; create
|
|
6
|
+
* a new revision reverting to the past state, never destroy history).
|
|
7
|
+
*
|
|
8
|
+
* Storage layout per target (all inside the target's storage, in the
|
|
9
|
+
* reserved `.gazetta/` namespace that the runtime never reads):
|
|
10
|
+
*
|
|
11
|
+
* .gazetta/
|
|
12
|
+
* history/
|
|
13
|
+
* index.json ordered revision list
|
|
14
|
+
* objects/<hh>/<rest> content-addressed blobs, sharded by first 2 hex chars
|
|
15
|
+
* revisions/rev-NNNN.json revision manifest: metadata + item→hash map
|
|
16
|
+
*
|
|
17
|
+
* One uniform approach across all storage providers — the provider
|
|
18
|
+
* interface remains read/write bytes at paths; no provider-native
|
|
19
|
+
* versioning (S3 object versions, git commits) is used.
|
|
20
|
+
*
|
|
21
|
+
* This module declares the types and provider interface. Implementation
|
|
22
|
+
* lands in a later phase.
|
|
23
|
+
*/
|
|
24
|
+
/** Operation that produced a revision. */
|
|
25
|
+
export type RevisionOperation = 'save' | 'publish' | 'rollback';
|
|
26
|
+
/** Metadata + item→hash snapshot for one write to a target. */
|
|
27
|
+
export interface Revision {
|
|
28
|
+
/** Unique id, typically `rev-{NNNN}` with a zero-padded counter. */
|
|
29
|
+
id: string;
|
|
30
|
+
/** ISO 8601 timestamp when the revision was recorded. */
|
|
31
|
+
timestamp: string;
|
|
32
|
+
/** What kind of write this was. */
|
|
33
|
+
operation: RevisionOperation;
|
|
34
|
+
/** Author identifier. Free-form for v1; upgrades to auth identity later. */
|
|
35
|
+
author?: string;
|
|
36
|
+
/** Source target name, if this revision was produced by a publish from another target. */
|
|
37
|
+
source?: string;
|
|
38
|
+
/** Paths of items affected by this write (e.g. `pages/home`, `fragments/header`). */
|
|
39
|
+
items: string[];
|
|
40
|
+
/** Optional human-readable note. */
|
|
41
|
+
message?: string;
|
|
42
|
+
/** For rollback/restore: the revision id this one restored from. */
|
|
43
|
+
restoredFrom?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Full revision manifest as stored in `revisions/rev-NNNN.json`. */
|
|
46
|
+
export interface RevisionManifest extends Revision {
|
|
47
|
+
/**
|
|
48
|
+
* Snapshot of the full content tree at this revision, as `path → content hash`.
|
|
49
|
+
* The hash references a blob under `.gazetta/history/objects/`.
|
|
50
|
+
* Unchanged items across revisions share blobs (content-addressed dedupe).
|
|
51
|
+
*/
|
|
52
|
+
snapshot: Record<string, string>;
|
|
53
|
+
}
|
|
54
|
+
/** Retention policy for a target's history. */
|
|
55
|
+
export interface HistoryRetention {
|
|
56
|
+
/** Keep at most N most-recent revisions. Default: 50. Oldest evicted. */
|
|
57
|
+
maxRevisions?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Content carried in a revision snapshot — either UTF-8 text (for JSON
|
|
61
|
+
* manifests, YAML, HTML, CSS, JS) or raw bytes (asset bytes, variants,
|
|
62
|
+
* fonts). The provider hashes either via SHA-256 over the raw bytes
|
|
63
|
+
* (text encoded as UTF-8 first), so dedup works uniformly: identical
|
|
64
|
+
* text and identical bytes share a blob.
|
|
65
|
+
*
|
|
66
|
+
* Per Q9 lock, one blob store, mixed content. The public `readBlob`
|
|
67
|
+
* always returns bytes; callers that expect text decode on read.
|
|
68
|
+
*/
|
|
69
|
+
export type BlobContent = string | Uint8Array;
|
|
70
|
+
/** Input to `recordRevision` — metadata plus the current content tree. */
|
|
71
|
+
export interface RevisionInput {
|
|
72
|
+
operation: RevisionOperation;
|
|
73
|
+
/** Author identifier (free-form for v1). */
|
|
74
|
+
author?: string;
|
|
75
|
+
/** Source target, when this revision was produced by a publish. */
|
|
76
|
+
source?: string;
|
|
77
|
+
/** Optional human-readable note. */
|
|
78
|
+
message?: string;
|
|
79
|
+
/** For rollback/restore: the revision id this one restored from. */
|
|
80
|
+
restoredFrom?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Full content tree snapshot at this revision: `itemPath → content`.
|
|
83
|
+
* Content is `string | Uint8Array` — text and binary first-class
|
|
84
|
+
* (asset bytes, variants, fonts; per Q9 lock).
|
|
85
|
+
*
|
|
86
|
+
* Unchanged items should carry identical content across calls so the
|
|
87
|
+
* provider can dedupe via content-addressing.
|
|
88
|
+
*/
|
|
89
|
+
items: Map<string, BlobContent>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Uniform history API. Implemented on top of any StorageProvider — reads
|
|
93
|
+
* and writes bytes under `.gazetta/history/`. No provider-native
|
|
94
|
+
* versioning (S3 object versions, git commits) is used.
|
|
95
|
+
*/
|
|
96
|
+
export interface HistoryProvider {
|
|
97
|
+
/**
|
|
98
|
+
* Record a new revision on the target.
|
|
99
|
+
*
|
|
100
|
+
* Writes any new item blobs to `objects/<hash[:2]>/<hash[2:]>`, writes
|
|
101
|
+
* the revision manifest to `revisions/rev-NNNN.json`, updates
|
|
102
|
+
* `index.json`, and applies retention (evicts oldest if over limit).
|
|
103
|
+
*
|
|
104
|
+
* `items` parameter carries the full content tree; only blobs that
|
|
105
|
+
* don't already exist are written. Returns the recorded Revision.
|
|
106
|
+
*/
|
|
107
|
+
recordRevision(input: RevisionInput): Promise<Revision>;
|
|
108
|
+
/** List revisions, newest first. `limit` caps the list size. */
|
|
109
|
+
listRevisions(limit?: number): Promise<Revision[]>;
|
|
110
|
+
/** Read a revision's full manifest (metadata + snapshot). */
|
|
111
|
+
readRevision(id: string): Promise<RevisionManifest>;
|
|
112
|
+
/**
|
|
113
|
+
* Read a content blob by hash. Returns raw bytes — callers that
|
|
114
|
+
* expect text (page/fragment manifests, site.yaml) decode UTF-8 on
|
|
115
|
+
* receipt. Callers that expect binary (asset bytes, variants) use
|
|
116
|
+
* the bytes as-is.
|
|
117
|
+
*
|
|
118
|
+
* The pre-step-20 signature returned `string`. The widening to
|
|
119
|
+
* `Uint8Array` is a foundation contract change; existing string
|
|
120
|
+
* consumers must wrap with `new TextDecoder().decode(bytes)`.
|
|
121
|
+
*/
|
|
122
|
+
readBlob(hash: string): Promise<Uint8Array>;
|
|
123
|
+
/**
|
|
124
|
+
* Delete a revision and its manifest. Orphaned blobs are garbage-
|
|
125
|
+
* collected by the implementation (lazy or immediate, adapter's choice).
|
|
126
|
+
*/
|
|
127
|
+
deleteRevision(id: string): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;AAE/D,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAA;IACV,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;IACjB,mCAAmC;IACnC,SAAS,EAAE,iBAAiB,CAAA;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7C,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,iBAAiB,CAAA;IAC5B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;OASG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEvD,gEAAgE;IAChE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAElD,6DAA6D;IAC7D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEnD;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE3C;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1C"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History / revisions for a target.
|
|
3
|
+
*
|
|
4
|
+
* Every write to a target (save or publish) records a revision. Undo and
|
|
5
|
+
* rollback restore a prior revision — both are soft (forward-only; create
|
|
6
|
+
* a new revision reverting to the past state, never destroy history).
|
|
7
|
+
*
|
|
8
|
+
* Storage layout per target (all inside the target's storage, in the
|
|
9
|
+
* reserved `.gazetta/` namespace that the runtime never reads):
|
|
10
|
+
*
|
|
11
|
+
* .gazetta/
|
|
12
|
+
* history/
|
|
13
|
+
* index.json ordered revision list
|
|
14
|
+
* objects/<hh>/<rest> content-addressed blobs, sharded by first 2 hex chars
|
|
15
|
+
* revisions/rev-NNNN.json revision manifest: metadata + item→hash map
|
|
16
|
+
*
|
|
17
|
+
* One uniform approach across all storage providers — the provider
|
|
18
|
+
* interface remains read/write bytes at paths; no provider-native
|
|
19
|
+
* versioning (S3 object versions, git commits) is used.
|
|
20
|
+
*
|
|
21
|
+
* This module declares the types and provider interface. Implementation
|
|
22
|
+
* lands in a later phase.
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
export type { RenderOutput, TemplateFunction, EditorMount, FieldMount, TemplateModule, ComponentManifest, FragmentManifest, PageManifest, SiteManifest, ResolvedComponent, TargetConfig, StorageConfig, WorkerConfig, CacheConfig, DirEntry, StorageProvider, PurgeStrategy, } from './types.js';
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
export type { RenderOutput, TemplateFunction, EditorMount, FieldMount, TemplateModule, ComponentManifest, FragmentManifest, PageManifest, SiteManifest, ResolvedComponent, TargetConfig, StorageConfig, WorkerConfig, CacheConfig, DirEntry, StorageProvider, ByteRange, PurgeStrategy, } from './types.js';
|
|
2
|
+
export { getType, isEditable } from './types.js';
|
|
3
|
+
export type { TargetType } from './types.js';
|
|
4
|
+
export { createTargetRegistryView, listEditableTargets, UnknownTargetError, NoEditableTargetError, } from './targets.js';
|
|
5
|
+
export type { TargetRegistry } from './targets.js';
|
|
6
|
+
export { createContentRoot } from './content-root.js';
|
|
7
|
+
export type { ContentRoot } from './content-root.js';
|
|
8
|
+
export { createSourceContext, createSourceContextFromRegistry } from './admin-api/source-context.js';
|
|
9
|
+
export type { SourceContext } from './admin-api/source-context.js';
|
|
10
|
+
export type { HistoryProvider, Revision, RevisionInput, RevisionManifest, RevisionOperation, HistoryRetention, } from './history.js';
|
|
11
|
+
export { createHistoryProvider } from './history-provider.js';
|
|
12
|
+
export type { CreateHistoryProviderOptions } from './history-provider.js';
|
|
13
|
+
export { recordWrite, DEFAULT_SCAN_LOCATIONS, DEFAULT_SCAN_ROOT_FILES, } from './history-recorder.js';
|
|
14
|
+
export type { RecordWriteOptions, WrittenItem, ScanLocation, } from './history-recorder.js';
|
|
15
|
+
export { restoreRevision } from './history-restorer.js';
|
|
16
|
+
export type { RestoreRevisionOptions } from './history-restorer.js';
|
|
17
|
+
export { isHistoryEnabled, getHistoryRetention, DEFAULT_HISTORY_RETENTION, } from './types.js';
|
|
18
|
+
export type { HistoryConfig, LocalesConfig, PageMetadata } from './types.js';
|
|
19
|
+
export { isValidLocale, normalizeLocale, defaultLocaleFor, resolveSiteLocales, resolveTargetLocales, localeFromFilename, localeFilename, resolveLocaleFallback, localeRoutePrefix, } from './locale.js';
|
|
20
|
+
export type { ResolvedLocales } from './locale.js';
|
|
21
|
+
export { renderComponent, renderFragment, renderPage, type RenderPageOptions, type SeoContext, } from './renderer.js';
|
|
22
|
+
export { resolveSeoTags, type ResolveSeoTagsInput } from './seo.js';
|
|
4
23
|
export { resolveComponent, resolveFragment, resolvePage } from './resolver.js';
|
|
5
24
|
export { loadSite } from './site-loader.js';
|
|
6
|
-
export type { Site, LoadSiteOptions } from './site-loader.js';
|
|
25
|
+
export type { Site, LocalizedEntry, PageEntry, FragmentEntry, LoadSiteOptions } from './site-loader.js';
|
|
26
|
+
export { allPageEntries, allFragmentEntries } from './site-loader.js';
|
|
7
27
|
export { loadTemplate, invalidateTemplate, invalidateAllTemplates } from './template-loader.js';
|
|
8
28
|
export { scopeHtml, scopeCss, hashPath } from './scope.js';
|
|
9
29
|
export { createFilesystemProvider } from './providers/filesystem.js';
|
|
@@ -11,13 +31,13 @@ export { createAzureBlobProvider } from './providers/azure-blob.js';
|
|
|
11
31
|
export type { AzureBlobProviderOptions } from './providers/azure-blob.js';
|
|
12
32
|
export { createS3Provider } from './providers/s3.js';
|
|
13
33
|
export type { S3ProviderOptions } from './providers/s3.js';
|
|
14
|
-
export { createR2RestProvider } from './providers/r2.js';
|
|
15
|
-
export type { R2RestProviderOptions } from './providers/r2.js';
|
|
16
34
|
export { createStorageProvider, createTargetRegistry } from './targets.js';
|
|
35
|
+
export { bootstrapFromSiteYaml, buildSourceContext } from './cli/bootstrap.js';
|
|
36
|
+
export type { BootstrapResult, BuildSourceContextOptions } from './cli/bootstrap.js';
|
|
17
37
|
export { createServer } from './serve.js';
|
|
18
38
|
export type { ServeOptions } from './serve.js';
|
|
19
39
|
export { publishItems, resolveDependencies } from './publish.js';
|
|
20
|
-
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest,
|
|
40
|
+
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest, publishDepIndices, } from './publish-rendered.js';
|
|
21
41
|
export { format } from './formats.js';
|
|
22
42
|
export { assembleEsi, parseCacheComment, splitFragment, findEsiPaths } from './assemble.js';
|
|
23
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { getType, isEditable } from './types.js';
|
|
2
|
+
export { createTargetRegistryView, listEditableTargets, UnknownTargetError, NoEditableTargetError, } from './targets.js';
|
|
3
|
+
export { createContentRoot } from './content-root.js';
|
|
4
|
+
export { createSourceContext, createSourceContextFromRegistry } from './admin-api/source-context.js';
|
|
5
|
+
export { createHistoryProvider } from './history-provider.js';
|
|
6
|
+
export { recordWrite, DEFAULT_SCAN_LOCATIONS, DEFAULT_SCAN_ROOT_FILES, } from './history-recorder.js';
|
|
7
|
+
export { restoreRevision } from './history-restorer.js';
|
|
8
|
+
export { isHistoryEnabled, getHistoryRetention, DEFAULT_HISTORY_RETENTION, } from './types.js';
|
|
9
|
+
// Locale resolution
|
|
10
|
+
export { isValidLocale, normalizeLocale, defaultLocaleFor, resolveSiteLocales, resolveTargetLocales, localeFromFilename, localeFilename, resolveLocaleFallback, localeRoutePrefix, } from './locale.js';
|
|
2
11
|
// Renderer
|
|
3
|
-
export { renderComponent, renderFragment, renderPage } from './renderer.js';
|
|
12
|
+
export { renderComponent, renderFragment, renderPage, } from './renderer.js';
|
|
13
|
+
export { resolveSeoTags } from './seo.js';
|
|
4
14
|
export { resolveComponent, resolveFragment, resolvePage } from './resolver.js';
|
|
5
15
|
export { loadSite } from './site-loader.js';
|
|
16
|
+
export { allPageEntries, allFragmentEntries } from './site-loader.js';
|
|
6
17
|
export { loadTemplate, invalidateTemplate, invalidateAllTemplates } from './template-loader.js';
|
|
7
18
|
export { scopeHtml, scopeCss, hashPath } from './scope.js';
|
|
8
19
|
// Storage providers
|
|
9
20
|
export { createFilesystemProvider } from './providers/filesystem.js';
|
|
10
21
|
export { createAzureBlobProvider } from './providers/azure-blob.js';
|
|
11
22
|
export { createS3Provider } from './providers/s3.js';
|
|
12
|
-
export { createR2RestProvider } from './providers/r2.js';
|
|
13
23
|
// Targets
|
|
14
24
|
export { createStorageProvider, createTargetRegistry } from './targets.js';
|
|
25
|
+
// Bootstrap helpers — read site.yaml, build registry, derive SourceContext
|
|
26
|
+
export { bootstrapFromSiteYaml, buildSourceContext } from './cli/bootstrap.js';
|
|
15
27
|
// Server
|
|
16
28
|
export { createServer } from './serve.js';
|
|
17
29
|
// Publish
|
|
18
30
|
export { publishItems, resolveDependencies } from './publish.js';
|
|
19
|
-
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest,
|
|
31
|
+
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest, publishDepIndices, } from './publish-rendered.js';
|
|
20
32
|
// Format helpers
|
|
21
33
|
export { format } from './formats.js';
|
|
22
34
|
// ESI assembly (for edge workers and servers)
|