gazetta 0.7.0 → 0.8.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-CBeq0rRb.js +693 -0
- package/admin-dist/assets/index-Dtg1dTZQ.css +1 -0
- package/admin-dist/assets/rolldown-runtime-BYbx6iT9.js +1 -0
- package/admin-dist/assets/{vendor-primevue-C0Q_YTCb.js → vendor-primevue-CBGHkaXv.js} +183 -39
- package/admin-dist/assets/{vendor-react-BipDVGow.js → vendor-react-BdW_kNCG.js} +2 -2
- package/admin-dist/assets/vendor-rjsf-lN2SztQt.js +33 -0
- package/admin-dist/assets/vendor-tiptap-C36yDquB.js +141 -0
- package/admin-dist/assets/vendor-vue-Bt5uR1VW.js +1 -0
- package/admin-dist/assets/workbox-window.prod.es5-DGMtIXHc.js +2 -0
- package/admin-dist/index.html +8 -8
- package/admin-dist/sw.js +1 -0
- package/dist/admin-api/archived-name-conflict.d.ts +31 -0
- package/dist/admin-api/archived-name-conflict.d.ts.map +1 -0
- package/dist/admin-api/archived-name-conflict.js +226 -0
- package/dist/admin-api/archived-name-conflict.js.map +1 -0
- package/dist/admin-api/cache-stats-logger.d.ts +83 -0
- package/dist/admin-api/cache-stats-logger.d.ts.map +1 -0
- package/dist/admin-api/cache-stats-logger.js +59 -0
- package/dist/admin-api/cache-stats-logger.js.map +1 -0
- package/dist/admin-api/hook-audit-emitter.d.ts +38 -0
- package/dist/admin-api/hook-audit-emitter.d.ts.map +1 -0
- package/dist/admin-api/hook-audit-emitter.js +21 -0
- package/dist/admin-api/hook-audit-emitter.js.map +1 -0
- package/dist/admin-api/index.d.ts +84 -0
- package/dist/admin-api/index.d.ts.map +1 -1
- package/dist/admin-api/index.js +254 -9
- package/dist/admin-api/index.js.map +1 -1
- package/dist/admin-api/middleware/audit.d.ts +25 -0
- package/dist/admin-api/middleware/audit.d.ts.map +1 -0
- package/dist/admin-api/middleware/audit.js +65 -0
- package/dist/admin-api/middleware/audit.js.map +1 -0
- package/dist/admin-api/middleware/capability.d.ts +8 -0
- package/dist/admin-api/middleware/capability.d.ts.map +1 -0
- package/dist/admin-api/middleware/capability.js +65 -0
- package/dist/admin-api/middleware/capability.js.map +1 -0
- package/dist/admin-api/middleware/principal.d.ts +18 -0
- package/dist/admin-api/middleware/principal.d.ts.map +1 -0
- package/dist/admin-api/middleware/principal.js +128 -0
- package/dist/admin-api/middleware/principal.js.map +1 -0
- package/dist/admin-api/routes/archive-review.d.ts +80 -0
- package/dist/admin-api/routes/archive-review.d.ts.map +1 -0
- package/dist/admin-api/routes/archive-review.js +70 -0
- package/dist/admin-api/routes/archive-review.js.map +1 -0
- package/dist/admin-api/routes/archive.d.ts +145 -0
- package/dist/admin-api/routes/archive.d.ts.map +1 -0
- package/dist/admin-api/routes/archive.js +540 -0
- package/dist/admin-api/routes/archive.js.map +1 -0
- package/dist/admin-api/routes/assets.d.ts +6 -1
- package/dist/admin-api/routes/assets.d.ts.map +1 -1
- package/dist/admin-api/routes/assets.js +167 -14
- package/dist/admin-api/routes/assets.js.map +1 -1
- package/dist/admin-api/routes/audit.d.ts +71 -0
- package/dist/admin-api/routes/audit.d.ts.map +1 -0
- package/dist/admin-api/routes/audit.js +178 -0
- package/dist/admin-api/routes/audit.js.map +1 -0
- package/dist/admin-api/routes/compare.d.ts.map +1 -1
- package/dist/admin-api/routes/compare.js +3 -2
- package/dist/admin-api/routes/compare.js.map +1 -1
- package/dist/admin-api/routes/fields.d.ts.map +1 -1
- package/dist/admin-api/routes/fields.js +2 -1
- package/dist/admin-api/routes/fields.js.map +1 -1
- package/dist/admin-api/routes/fragments.d.ts +13 -1
- package/dist/admin-api/routes/fragments.d.ts.map +1 -1
- package/dist/admin-api/routes/fragments.js +127 -92
- package/dist/admin-api/routes/fragments.js.map +1 -1
- package/dist/admin-api/routes/health.d.ts +60 -0
- package/dist/admin-api/routes/health.d.ts.map +1 -0
- package/dist/admin-api/routes/health.js +65 -0
- package/dist/admin-api/routes/health.js.map +1 -0
- package/dist/admin-api/routes/history.d.ts +2 -1
- package/dist/admin-api/routes/history.d.ts.map +1 -1
- package/dist/admin-api/routes/history.js +26 -4
- package/dist/admin-api/routes/history.js.map +1 -1
- package/dist/admin-api/routes/pages.d.ts +20 -1
- package/dist/admin-api/routes/pages.d.ts.map +1 -1
- package/dist/admin-api/routes/pages.js +157 -117
- package/dist/admin-api/routes/pages.js.map +1 -1
- package/dist/admin-api/routes/preview.d.ts.map +1 -1
- package/dist/admin-api/routes/preview.js +56 -17
- package/dist/admin-api/routes/preview.js.map +1 -1
- package/dist/admin-api/routes/publish.d.ts +19 -1
- package/dist/admin-api/routes/publish.d.ts.map +1 -1
- package/dist/admin-api/routes/publish.js +508 -92
- package/dist/admin-api/routes/publish.js.map +1 -1
- package/dist/admin-api/routes/rename.d.ts +62 -0
- package/dist/admin-api/routes/rename.d.ts.map +1 -0
- package/dist/admin-api/routes/rename.js +366 -0
- package/dist/admin-api/routes/rename.js.map +1 -0
- package/dist/admin-api/routes/site.d.ts.map +1 -1
- package/dist/admin-api/routes/site.js +6 -18
- package/dist/admin-api/routes/site.js.map +1 -1
- package/dist/admin-api/routes/system.d.ts +23 -0
- package/dist/admin-api/routes/system.d.ts.map +1 -0
- package/dist/admin-api/routes/system.js +115 -0
- package/dist/admin-api/routes/system.js.map +1 -0
- package/dist/admin-api/routes/templates.d.ts +11 -1
- package/dist/admin-api/routes/templates.d.ts.map +1 -1
- package/dist/admin-api/routes/templates.js +36 -3
- package/dist/admin-api/routes/templates.js.map +1 -1
- package/dist/admin-api/routes/validation.d.ts +47 -0
- package/dist/admin-api/routes/validation.d.ts.map +1 -0
- package/dist/admin-api/routes/validation.js +120 -0
- package/dist/admin-api/routes/validation.js.map +1 -0
- package/dist/admin-api/schemas/archive.d.ts +124 -0
- package/dist/admin-api/schemas/archive.d.ts.map +1 -0
- package/dist/admin-api/schemas/archive.js +93 -0
- package/dist/admin-api/schemas/archive.js.map +1 -0
- package/dist/admin-api/schemas/assets.d.ts +16 -0
- package/dist/admin-api/schemas/assets.d.ts.map +1 -1
- package/dist/admin-api/schemas/assets.js +15 -0
- package/dist/admin-api/schemas/assets.js.map +1 -1
- package/dist/admin-api/schemas/audit.d.ts +175 -0
- package/dist/admin-api/schemas/audit.d.ts.map +1 -0
- package/dist/admin-api/schemas/audit.js +91 -0
- package/dist/admin-api/schemas/audit.js.map +1 -0
- package/dist/admin-api/schemas/error.d.ts +94 -0
- package/dist/admin-api/schemas/error.d.ts.map +1 -0
- package/dist/admin-api/schemas/error.js +79 -0
- package/dist/admin-api/schemas/error.js.map +1 -0
- package/dist/admin-api/schemas/fragments.d.ts +2 -0
- package/dist/admin-api/schemas/fragments.d.ts.map +1 -1
- package/dist/admin-api/schemas/fragments.js +4 -0
- package/dist/admin-api/schemas/fragments.js.map +1 -1
- package/dist/admin-api/schemas/index.d.ts +8 -0
- package/dist/admin-api/schemas/index.d.ts.map +1 -1
- package/dist/admin-api/schemas/index.js +8 -0
- package/dist/admin-api/schemas/index.js.map +1 -1
- package/dist/admin-api/schemas/pages.d.ts +2 -0
- package/dist/admin-api/schemas/pages.d.ts.map +1 -1
- package/dist/admin-api/schemas/pages.js +11 -0
- package/dist/admin-api/schemas/pages.js.map +1 -1
- package/dist/admin-api/schemas/rename.d.ts +77 -0
- package/dist/admin-api/schemas/rename.d.ts.map +1 -0
- package/dist/admin-api/schemas/rename.js +75 -0
- package/dist/admin-api/schemas/rename.js.map +1 -0
- package/dist/admin-api/schemas/site.d.ts +3 -2
- package/dist/admin-api/schemas/site.d.ts.map +1 -1
- package/dist/admin-api/schemas/site.js +3 -2
- package/dist/admin-api/schemas/site.js.map +1 -1
- package/dist/admin-api/schemas/system.d.ts +28 -0
- package/dist/admin-api/schemas/system.d.ts.map +1 -0
- package/dist/admin-api/schemas/system.js +35 -0
- package/dist/admin-api/schemas/system.js.map +1 -0
- package/dist/admin-api/schemas/targets.d.ts +55 -0
- package/dist/admin-api/schemas/targets.d.ts.map +1 -1
- package/dist/admin-api/schemas/targets.js +46 -0
- package/dist/admin-api/schemas/targets.js.map +1 -1
- package/dist/admin-api/schemas/templates.d.ts +54 -0
- package/dist/admin-api/schemas/templates.d.ts.map +1 -1
- package/dist/admin-api/schemas/templates.js +21 -0
- package/dist/admin-api/schemas/templates.js.map +1 -1
- package/dist/admin-api/schemas/validation.d.ts +101 -0
- package/dist/admin-api/schemas/validation.d.ts.map +1 -0
- package/dist/admin-api/schemas/validation.js +57 -0
- package/dist/admin-api/schemas/validation.js.map +1 -0
- package/dist/admin-api/source-context.d.ts +66 -10
- package/dist/admin-api/source-context.d.ts.map +1 -1
- package/dist/admin-api/source-context.js +43 -5
- package/dist/admin-api/source-context.js.map +1 -1
- package/dist/ai/adapter-scaffold.d.ts +63 -0
- package/dist/ai/adapter-scaffold.d.ts.map +1 -0
- package/dist/ai/adapter-scaffold.js +89 -0
- package/dist/ai/adapter-scaffold.js.map +1 -0
- package/dist/ai/compose-prompt.d.ts +50 -0
- package/dist/ai/compose-prompt.d.ts.map +1 -0
- package/dist/ai/compose-prompt.js +49 -0
- package/dist/ai/compose-prompt.js.map +1 -0
- package/dist/ai/errors.d.ts +65 -0
- package/dist/ai/errors.d.ts.map +1 -0
- package/dist/ai/errors.js +59 -0
- package/dist/ai/errors.js.map +1 -0
- package/dist/ai/index.d.ts +17 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +16 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/provider.d.ts +76 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +13 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/refusal.d.ts +50 -0
- package/dist/ai/refusal.d.ts.map +1 -0
- package/dist/ai/refusal.js +100 -0
- package/dist/ai/refusal.js.map +1 -0
- package/dist/ai/vision-prep.d.ts +32 -0
- package/dist/ai/vision-prep.d.ts.map +1 -0
- package/dist/ai/vision-prep.js +113 -0
- package/dist/ai/vision-prep.js.map +1 -0
- package/dist/alt/adapter.d.ts +140 -0
- package/dist/alt/adapter.d.ts.map +1 -0
- package/dist/alt/adapter.js +7 -0
- package/dist/alt/adapter.js.map +1 -0
- package/dist/alt/anthropic.d.ts +63 -0
- package/dist/alt/anthropic.d.ts.map +1 -0
- package/dist/alt/anthropic.js +147 -0
- package/dist/alt/anthropic.js.map +1 -0
- package/dist/alt/config.d.ts +67 -0
- package/dist/alt/config.d.ts.map +1 -0
- package/dist/alt/config.js +41 -0
- package/dist/alt/config.js.map +1 -0
- package/dist/alt/factory.d.ts +19 -0
- package/dist/alt/factory.d.ts.map +1 -0
- package/dist/alt/factory.js +69 -0
- package/dist/alt/factory.js.map +1 -0
- package/dist/alt/null-adapter.d.ts +3 -0
- package/dist/alt/null-adapter.d.ts.map +1 -0
- package/dist/alt/null-adapter.js +43 -0
- package/dist/alt/null-adapter.js.map +1 -0
- package/dist/alt/ollama.d.ts +40 -0
- package/dist/alt/ollama.d.ts.map +1 -0
- package/dist/alt/ollama.js +139 -0
- package/dist/alt/ollama.js.map +1 -0
- package/dist/alt/openai.d.ts +46 -0
- package/dist/alt/openai.d.ts.map +1 -0
- package/dist/alt/openai.js +118 -0
- package/dist/alt/openai.js.map +1 -0
- package/dist/alt/prompt-policies.d.ts +79 -0
- package/dist/alt/prompt-policies.d.ts.map +1 -0
- package/dist/alt/prompt-policies.js +67 -0
- package/dist/alt/prompt-policies.js.map +1 -0
- package/dist/alt/route-handler.d.ts +56 -0
- package/dist/alt/route-handler.d.ts.map +1 -0
- package/dist/alt/route-handler.js +122 -0
- package/dist/alt/route-handler.js.map +1 -0
- package/dist/alt/suggester.d.ts +57 -0
- package/dist/alt/suggester.d.ts.map +1 -0
- package/dist/alt/suggester.js +133 -0
- package/dist/alt/suggester.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/archive-aliases.d.ts +79 -0
- package/dist/archive-aliases.d.ts.map +1 -0
- package/dist/archive-aliases.js +60 -0
- package/dist/archive-aliases.js.map +1 -0
- package/dist/archive-helpers.d.ts +73 -0
- package/dist/archive-helpers.d.ts.map +1 -0
- package/dist/archive-helpers.js +94 -0
- package/dist/archive-helpers.js.map +1 -0
- package/dist/assets/find-refs.d.ts +1 -1
- package/dist/assets/find-refs.js +1 -1
- package/dist/assets/find-refs.js.map +1 -1
- package/dist/assets/rename.js +1 -1
- package/dist/assets/rename.js.map +1 -1
- package/dist/assets/replace.js +1 -1
- package/dist/assets/replace.js.map +1 -1
- package/dist/assets/resolve.js +4 -4
- package/dist/assets/resolve.js.map +1 -1
- package/dist/assets/serve-route.js +2 -2
- package/dist/assets/serve-route.js.map +1 -1
- package/dist/assets/validate.d.ts +1 -1
- package/dist/assets/validate.js +1 -1
- package/dist/audit/config.d.ts +75 -0
- package/dist/audit/config.d.ts.map +1 -0
- package/dist/audit/config.js +91 -0
- package/dist/audit/config.js.map +1 -0
- package/dist/audit/context.d.ts +98 -0
- package/dist/audit/context.d.ts.map +1 -0
- package/dist/audit/context.js +51 -0
- package/dist/audit/context.js.map +1 -0
- package/dist/audit/errors.d.ts +73 -0
- package/dist/audit/errors.d.ts.map +1 -0
- package/dist/audit/errors.js +78 -0
- package/dist/audit/errors.js.map +1 -0
- package/dist/audit/index.d.ts +16 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +10 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/provider.d.ts +73 -0
- package/dist/audit/provider.d.ts.map +1 -0
- package/dist/audit/provider.js +2 -0
- package/dist/audit/provider.js.map +1 -0
- package/dist/audit/providers/history.d.ts +66 -0
- package/dist/audit/providers/history.d.ts.map +1 -0
- package/dist/audit/providers/history.js +102 -0
- package/dist/audit/providers/history.js.map +1 -0
- package/dist/audit/pseudonymize.d.ts +26 -0
- package/dist/audit/pseudonymize.d.ts.map +1 -0
- package/dist/audit/pseudonymize.js +86 -0
- package/dist/audit/pseudonymize.js.map +1 -0
- package/dist/audit/recorder.d.ts +102 -0
- package/dist/audit/recorder.d.ts.map +1 -0
- package/dist/audit/recorder.js +55 -0
- package/dist/audit/recorder.js.map +1 -0
- package/dist/audit/retention.d.ts +83 -0
- package/dist/audit/retention.d.ts.map +1 -0
- package/dist/audit/retention.js +142 -0
- package/dist/audit/retention.js.map +1 -0
- package/dist/audit/source-ip.d.ts +32 -0
- package/dist/audit/source-ip.d.ts.map +1 -0
- package/dist/audit/source-ip.js +164 -0
- package/dist/audit/source-ip.js.map +1 -0
- package/dist/audit/types.d.ts +143 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +33 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/user-agent.d.ts +28 -0
- package/dist/audit/user-agent.d.ts.map +1 -0
- package/dist/audit/user-agent.js +63 -0
- package/dist/audit/user-agent.js.map +1 -0
- package/dist/auth/capabilities.d.ts +28 -0
- package/dist/auth/capabilities.d.ts.map +1 -0
- package/dist/auth/capabilities.js +101 -0
- package/dist/auth/capabilities.js.map +1 -0
- package/dist/auth/config.d.ts +109 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +221 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/errors.d.ts +72 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +78 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/factory.d.ts +43 -0
- package/dist/auth/factory.d.ts.map +1 -0
- package/dist/auth/factory.js +48 -0
- package/dist/auth/factory.js.map +1 -0
- package/dist/auth/index.d.ts +21 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/ip-match.d.ts +29 -0
- package/dist/auth/ip-match.d.ts.map +1 -0
- package/dist/auth/ip-match.js +162 -0
- package/dist/auth/ip-match.js.map +1 -0
- package/dist/auth/provider.d.ts +76 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +2 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/providers/aws-cognito.d.ts +55 -0
- package/dist/auth/providers/aws-cognito.d.ts.map +1 -0
- package/dist/auth/providers/aws-cognito.js +114 -0
- package/dist/auth/providers/aws-cognito.js.map +1 -0
- package/dist/auth/providers/azure-easy-auth.d.ts +7 -0
- package/dist/auth/providers/azure-easy-auth.d.ts.map +1 -0
- package/dist/auth/providers/azure-easy-auth.js +48 -0
- package/dist/auth/providers/azure-easy-auth.js.map +1 -0
- package/dist/auth/providers/cloudflare-access.d.ts +71 -0
- package/dist/auth/providers/cloudflare-access.d.ts.map +1 -0
- package/dist/auth/providers/cloudflare-access.js +120 -0
- package/dist/auth/providers/cloudflare-access.js.map +1 -0
- package/dist/auth/providers/forwarded-user.d.ts +31 -0
- package/dist/auth/providers/forwarded-user.d.ts.map +1 -0
- package/dist/auth/providers/forwarded-user.js +72 -0
- package/dist/auth/providers/forwarded-user.js.map +1 -0
- package/dist/auth/providers/none.d.ts +6 -0
- package/dist/auth/providers/none.d.ts.map +1 -0
- package/dist/auth/providers/none.js +19 -0
- package/dist/auth/providers/none.js.map +1 -0
- package/dist/auth/providers/tailscale.d.ts +7 -0
- package/dist/auth/providers/tailscale.d.ts.map +1 -0
- package/dist/auth/providers/tailscale.js +30 -0
- package/dist/auth/providers/tailscale.js.map +1 -0
- package/dist/auth/role-resolver.d.ts +38 -0
- package/dist/auth/role-resolver.d.ts.map +1 -0
- package/dist/auth/role-resolver.js +92 -0
- package/dist/auth/role-resolver.js.map +1 -0
- package/dist/auth/types.d.ts +150 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +60 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cache/errors.d.ts +41 -0
- package/dist/cache/errors.d.ts.map +1 -0
- package/dist/cache/errors.js +44 -0
- package/dist/cache/errors.js.map +1 -0
- package/dist/cache/factories.d.ts +17 -0
- package/dist/cache/factories.d.ts.map +1 -0
- package/dist/cache/factories.js +17 -0
- package/dist/cache/factories.js.map +1 -0
- package/dist/cache/keys.d.ts +63 -0
- package/dist/cache/keys.d.ts.map +1 -0
- package/dist/cache/keys.js +145 -0
- package/dist/cache/keys.js.map +1 -0
- package/dist/cache/memory.d.ts +51 -0
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +204 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/per-site.d.ts +22 -0
- package/dist/cache/per-site.d.ts.map +1 -0
- package/dist/cache/per-site.js +114 -0
- package/dist/cache/per-site.js.map +1 -0
- package/dist/cache/types.d.ts +142 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +33 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cli/archive.d.ts +44 -0
- package/dist/cli/archive.d.ts.map +1 -0
- package/dist/cli/archive.js +310 -0
- package/dist/cli/archive.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +15 -8
- package/dist/cli/bootstrap.d.ts.map +1 -1
- package/dist/cli/bootstrap.js +59 -23
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/dev-template-watcher.d.ts +29 -0
- package/dist/cli/dev-template-watcher.d.ts.map +1 -0
- package/dist/cli/dev-template-watcher.js +38 -0
- package/dist/cli/dev-template-watcher.js.map +1 -0
- package/dist/cli/history.d.ts.map +1 -1
- package/dist/cli/history.js +5 -3
- package/dist/cli/history.js.map +1 -1
- package/dist/cli/index.js +712 -395
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/validate-flags.d.ts +29 -0
- package/dist/cli/validate-flags.d.ts.map +1 -0
- package/dist/cli/validate-flags.js +49 -0
- package/dist/cli/validate-flags.js.map +1 -0
- package/dist/compare.d.ts +1 -1
- package/dist/compare.d.ts.map +1 -1
- package/dist/compare.js +25 -23
- package/dist/compare.js.map +1 -1
- package/dist/component-ids.d.ts +25 -0
- package/dist/component-ids.d.ts.map +1 -0
- package/dist/component-ids.js +83 -0
- package/dist/component-ids.js.map +1 -0
- package/dist/config/define.d.ts +61 -0
- package/dist/config/define.d.ts.map +1 -0
- package/dist/config/define.js +64 -0
- package/dist/config/define.js.map +1 -0
- package/dist/config/errors.d.ts +32 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/errors.js +40 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +20 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +105 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +265 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schemas.d.ts +89 -0
- package/dist/config/schemas.d.ts.map +1 -0
- package/dist/config/schemas.js +172 -0
- package/dist/config/schemas.js.map +1 -0
- package/dist/config/types.d.ts +32 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +15 -0
- package/dist/config/types.js.map +1 -0
- package/dist/deploy/cloudflare-workers.d.ts +46 -0
- package/dist/deploy/cloudflare-workers.d.ts.map +1 -0
- package/dist/deploy/cloudflare-workers.js +213 -0
- package/dist/deploy/cloudflare-workers.js.map +1 -0
- package/dist/deploy/errors.d.ts +66 -0
- package/dist/deploy/errors.d.ts.map +1 -0
- package/dist/deploy/errors.js +82 -0
- package/dist/deploy/errors.js.map +1 -0
- package/dist/deploy/index.d.ts +9 -0
- package/dist/deploy/index.d.ts.map +1 -0
- package/dist/deploy/index.js +3 -0
- package/dist/deploy/index.js.map +1 -0
- package/dist/deploy/types.d.ts +162 -0
- package/dist/deploy/types.d.ts.map +1 -0
- package/dist/deploy/types.js +2 -0
- package/dist/deploy/types.js.map +1 -0
- package/dist/fragments/create.d.ts +70 -0
- package/dist/fragments/create.d.ts.map +1 -0
- package/dist/fragments/create.js +93 -0
- package/dist/fragments/create.js.map +1 -0
- package/dist/fragments/publish.d.ts +37 -0
- package/dist/fragments/publish.d.ts.map +1 -0
- package/dist/fragments/publish.js +52 -0
- package/dist/fragments/publish.js.map +1 -0
- package/dist/fragments/save.d.ts +81 -0
- package/dist/fragments/save.d.ts.map +1 -0
- package/dist/fragments/save.js +105 -0
- package/dist/fragments/save.js.map +1 -0
- package/dist/history-recorder.d.ts +5 -5
- package/dist/history-recorder.d.ts.map +1 -1
- package/dist/history-recorder.js +4 -4
- package/dist/history-recorder.js.map +1 -1
- package/dist/history-restorer.js +2 -2
- package/dist/history-restorer.js.map +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/hooks/audit-emitter.d.ts +73 -0
- package/dist/hooks/audit-emitter.d.ts.map +1 -0
- package/dist/hooks/audit-emitter.js +13 -0
- package/dist/hooks/audit-emitter.js.map +1 -0
- package/dist/hooks/context.d.ts +78 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +56 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/contribution.d.ts +90 -0
- package/dist/hooks/contribution.d.ts.map +1 -0
- package/dist/hooks/contribution.js +2 -0
- package/dist/hooks/contribution.js.map +1 -0
- package/dist/hooks/dispatch.d.ts +30 -0
- package/dist/hooks/dispatch.d.ts.map +1 -0
- package/dist/hooks/dispatch.js +252 -0
- package/dist/hooks/dispatch.js.map +1 -0
- package/dist/hooks/errors.d.ts +100 -0
- package/dist/hooks/errors.d.ts.map +1 -0
- package/dist/hooks/errors.js +103 -0
- package/dist/hooks/errors.js.map +1 -0
- package/dist/hooks/index.d.ts +15 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/registry.d.ts +53 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +139 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/storage.d.ts +43 -0
- package/dist/hooks/storage.d.ts.map +1 -0
- package/dist/hooks/storage.js +2 -0
- package/dist/hooks/storage.js.map +1 -0
- package/dist/hooks/types.d.ts +324 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +26 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -5
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +5 -1
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +6 -2
- package/dist/locale.js.map +1 -1
- package/dist/manifest-save.d.ts +255 -0
- package/dist/manifest-save.d.ts.map +1 -0
- package/dist/manifest-save.js +260 -0
- package/dist/manifest-save.js.map +1 -0
- package/dist/manifest.d.ts +1 -2
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +43 -44
- package/dist/manifest.js.map +1 -1
- package/dist/node-floor.d.ts +3 -0
- package/dist/node-floor.d.ts.map +1 -0
- package/dist/node-floor.js +3 -0
- package/dist/node-floor.js.map +1 -0
- package/dist/pages/create.d.ts +103 -0
- package/dist/pages/create.d.ts.map +1 -0
- package/dist/pages/create.js +117 -0
- package/dist/pages/create.js.map +1 -0
- package/dist/pages/publish.d.ts +59 -0
- package/dist/pages/publish.d.ts.map +1 -0
- package/dist/pages/publish.js +78 -0
- package/dist/pages/publish.js.map +1 -0
- package/dist/pages/save.d.ts +97 -0
- package/dist/pages/save.d.ts.map +1 -0
- package/dist/pages/save.js +138 -0
- package/dist/pages/save.js.map +1 -0
- package/dist/providers/factories.d.ts +65 -0
- package/dist/providers/factories.d.ts.map +1 -0
- package/dist/providers/factories.js +189 -0
- package/dist/providers/factories.js.map +1 -0
- package/dist/publish-item.d.ts +225 -0
- package/dist/publish-item.d.ts.map +1 -0
- package/dist/publish-item.js +210 -0
- package/dist/publish-item.js.map +1 -0
- package/dist/publish-rendered.d.ts.map +1 -1
- package/dist/publish-rendered.js +75 -6
- package/dist/publish-rendered.js.map +1 -1
- package/dist/publish-renderers.d.ts +132 -0
- package/dist/publish-renderers.d.ts.map +1 -0
- package/dist/publish-renderers.js +240 -0
- package/dist/publish-renderers.js.map +1 -0
- package/dist/publish-run.d.ts +223 -0
- package/dist/publish-run.d.ts.map +1 -0
- package/dist/publish-run.js +307 -0
- package/dist/publish-run.js.map +1 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +1 -10
- package/dist/publish.js.map +1 -1
- package/dist/render-for-analysis.d.ts +24 -0
- package/dist/render-for-analysis.d.ts.map +1 -0
- package/dist/render-for-analysis.js +146 -0
- package/dist/render-for-analysis.js.map +1 -0
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +47 -23
- package/dist/resolver.js.map +1 -1
- package/dist/runtime/archive-marker.d.ts +62 -0
- package/dist/runtime/archive-marker.d.ts.map +1 -0
- package/dist/runtime/archive-marker.js +88 -0
- package/dist/runtime/archive-marker.js.map +1 -0
- package/dist/runtime/capability-gap-warnings.d.ts +42 -0
- package/dist/runtime/capability-gap-warnings.d.ts.map +1 -0
- package/dist/runtime/capability-gap-warnings.js +28 -0
- package/dist/runtime/capability-gap-warnings.js.map +1 -0
- package/dist/runtime/redirects-emit.d.ts +93 -0
- package/dist/runtime/redirects-emit.d.ts.map +1 -0
- package/dist/runtime/redirects-emit.js +89 -0
- package/dist/runtime/redirects-emit.js.map +1 -0
- package/dist/runtime/runtime-capabilities.d.ts +79 -0
- package/dist/runtime/runtime-capabilities.d.ts.map +1 -0
- package/dist/runtime/runtime-capabilities.js +60 -0
- package/dist/runtime/runtime-capabilities.js.map +1 -0
- package/dist/save-etag.d.ts +69 -0
- package/dist/save-etag.d.ts.map +1 -0
- package/dist/save-etag.js +118 -0
- package/dist/save-etag.js.map +1 -0
- package/dist/site-loader.d.ts +42 -4
- package/dist/site-loader.d.ts.map +1 -1
- package/dist/site-loader.js +27 -8
- package/dist/site-loader.js.map +1 -1
- package/dist/targets.d.ts +21 -12
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +27 -95
- package/dist/targets.js.map +1 -1
- package/dist/testing/admin-cache-contract.d.ts +52 -0
- package/dist/testing/admin-cache-contract.d.ts.map +1 -0
- package/dist/testing/admin-cache-contract.js +203 -0
- package/dist/testing/admin-cache-contract.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +11 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/transforms/factories.d.ts +16 -0
- package/dist/transforms/factories.d.ts.map +1 -0
- package/dist/transforms/factories.js +18 -0
- package/dist/transforms/factories.js.map +1 -0
- package/dist/transforms/index.d.ts +10 -17
- package/dist/transforms/index.d.ts.map +1 -1
- package/dist/transforms/index.js +4 -28
- package/dist/transforms/index.js.map +1 -1
- package/dist/transforms/sharp.d.ts +15 -1
- package/dist/transforms/sharp.d.ts.map +1 -1
- package/dist/transforms/sharp.js +34 -20
- package/dist/transforms/sharp.js.map +1 -1
- package/dist/types.d.ts +379 -52
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -1
- package/dist/types.js.map +1 -1
- package/dist/validation/alt-required-walker.d.ts +27 -0
- package/dist/validation/alt-required-walker.d.ts.map +1 -0
- package/dist/validation/alt-required-walker.js +108 -0
- package/dist/validation/alt-required-walker.js.map +1 -0
- package/dist/validation/default-registry.d.ts +12 -0
- package/dist/validation/default-registry.d.ts.map +1 -0
- package/dist/validation/default-registry.js +55 -0
- package/dist/validation/default-registry.js.map +1 -0
- package/dist/validation/publish-audit.d.ts +44 -0
- package/dist/validation/publish-audit.d.ts.map +1 -0
- package/dist/validation/publish-audit.js +64 -0
- package/dist/validation/publish-audit.js.map +1 -0
- package/dist/validation/registry.d.ts +23 -0
- package/dist/validation/registry.d.ts.map +1 -0
- package/dist/validation/registry.js +15 -0
- package/dist/validation/registry.js.map +1 -0
- package/dist/validation/save-delta.d.ts +46 -0
- package/dist/validation/save-delta.d.ts.map +1 -0
- package/dist/validation/save-delta.js +57 -0
- package/dist/validation/save-delta.js.map +1 -0
- package/dist/validation/scanner.d.ts +91 -0
- package/dist/validation/scanner.d.ts.map +1 -0
- package/dist/validation/scanner.js +327 -0
- package/dist/validation/scanner.js.map +1 -0
- package/dist/validation/template-impact.d.ts +52 -0
- package/dist/validation/template-impact.d.ts.map +1 -0
- package/dist/validation/template-impact.js +53 -0
- package/dist/validation/template-impact.js.map +1 -0
- package/dist/validation/types.d.ts +123 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +7 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validators/accessibility.d.ts +3 -0
- package/dist/validation/validators/accessibility.d.ts.map +1 -0
- package/dist/validation/validators/accessibility.js +106 -0
- package/dist/validation/validators/accessibility.js.map +1 -0
- package/dist/validation/validators/aliasof-points-to-archived.d.ts +40 -0
- package/dist/validation/validators/aliasof-points-to-archived.d.ts.map +1 -0
- package/dist/validation/validators/aliasof-points-to-archived.js +34 -0
- package/dist/validation/validators/aliasof-points-to-archived.js.map +1 -0
- package/dist/validation/validators/alt-required.d.ts +3 -0
- package/dist/validation/validators/alt-required.d.ts.map +1 -0
- package/dist/validation/validators/alt-required.js +118 -0
- package/dist/validation/validators/alt-required.js.map +1 -0
- package/dist/validation/validators/archive-not-supported-on-target.d.ts +3 -0
- package/dist/validation/validators/archive-not-supported-on-target.d.ts.map +1 -0
- package/dist/validation/validators/archive-not-supported-on-target.js +38 -0
- package/dist/validation/validators/archive-not-supported-on-target.js.map +1 -0
- package/dist/validation/validators/broken-links.d.ts +3 -0
- package/dist/validation/validators/broken-links.d.ts.map +1 -0
- package/dist/validation/validators/broken-links.js +190 -0
- package/dist/validation/validators/broken-links.js.map +1 -0
- package/dist/validation/validators/circular-alias.d.ts +36 -0
- package/dist/validation/validators/circular-alias.d.ts.map +1 -0
- package/dist/validation/validators/circular-alias.js +63 -0
- package/dist/validation/validators/circular-alias.js.map +1 -0
- package/dist/validation/validators/circular-fragment.d.ts +15 -0
- package/dist/validation/validators/circular-fragment.d.ts.map +1 -0
- package/dist/validation/validators/circular-fragment.js +97 -0
- package/dist/validation/validators/circular-fragment.js.map +1 -0
- package/dist/validation/validators/dangling-alias.d.ts +38 -0
- package/dist/validation/validators/dangling-alias.d.ts.map +1 -0
- package/dist/validation/validators/dangling-alias.js +31 -0
- package/dist/validation/validators/dangling-alias.js.map +1 -0
- package/dist/validation/validators/deploy-target-type-supported.d.ts +3 -0
- package/dist/validation/validators/deploy-target-type-supported.d.ts.map +1 -0
- package/dist/validation/validators/deploy-target-type-supported.js +32 -0
- package/dist/validation/validators/deploy-target-type-supported.js.map +1 -0
- package/dist/validation/validators/dynamic-route-conflict.d.ts +18 -0
- package/dist/validation/validators/dynamic-route-conflict.d.ts.map +1 -0
- package/dist/validation/validators/dynamic-route-conflict.js +80 -0
- package/dist/validation/validators/dynamic-route-conflict.js.map +1 -0
- package/dist/validation/validators/html-validity.d.ts +3 -0
- package/dist/validation/validators/html-validity.d.ts.map +1 -0
- package/dist/validation/validators/html-validity.js +89 -0
- package/dist/validation/validators/html-validity.js.map +1 -0
- package/dist/validation/validators/orphaned-locale-file.d.ts +21 -0
- package/dist/validation/validators/orphaned-locale-file.d.ts.map +1 -0
- package/dist/validation/validators/orphaned-locale-file.js +84 -0
- package/dist/validation/validators/orphaned-locale-file.js.map +1 -0
- package/dist/validation/validators/referenced-archived-without-alias.d.ts +3 -0
- package/dist/validation/validators/referenced-archived-without-alias.d.ts.map +1 -0
- package/dist/validation/validators/referenced-archived-without-alias.js +65 -0
- package/dist/validation/validators/referenced-archived-without-alias.js.map +1 -0
- package/dist/validation/validators/referenced-asset-exists.d.ts +13 -0
- package/dist/validation/validators/referenced-asset-exists.d.ts.map +1 -0
- package/dist/validation/validators/referenced-asset-exists.js +80 -0
- package/dist/validation/validators/referenced-asset-exists.js.map +1 -0
- package/dist/validation/validators/referenced-fragment-exists.d.ts +9 -0
- package/dist/validation/validators/referenced-fragment-exists.d.ts.map +1 -0
- package/dist/validation/validators/referenced-fragment-exists.js +52 -0
- package/dist/validation/validators/referenced-fragment-exists.js.map +1 -0
- package/dist/validation/validators/referenced-template-exists.d.ts +10 -0
- package/dist/validation/validators/referenced-template-exists.d.ts.map +1 -0
- package/dist/validation/validators/referenced-template-exists.js +74 -0
- package/dist/validation/validators/referenced-template-exists.js.map +1 -0
- package/dist/validation/validators/schema-conformance.d.ts +17 -0
- package/dist/validation/validators/schema-conformance.d.ts.map +1 -0
- package/dist/validation/validators/schema-conformance.js +94 -0
- package/dist/validation/validators/schema-conformance.js.map +1 -0
- package/dist/validation/validators/target-deploy-coverage.d.ts +3 -0
- package/dist/validation/validators/target-deploy-coverage.d.ts.map +1 -0
- package/dist/validation/validators/target-deploy-coverage.js +37 -0
- package/dist/validation/validators/target-deploy-coverage.js.map +1 -0
- package/dist/validation/validators/unused-fragment.d.ts +16 -0
- package/dist/validation/validators/unused-fragment.d.ts.map +1 -0
- package/dist/validation/validators/unused-fragment.js +86 -0
- package/dist/validation/validators/unused-fragment.js.map +1 -0
- package/package.json +54 -31
- package/admin-dist/assets/index-BO9-CXmW.css +0 -1
- package/admin-dist/assets/index-Ufu8zZH_.js +0 -668
- package/admin-dist/assets/rolldown-runtime-COnpUsM8.js +0 -1
- package/admin-dist/assets/vendor-rjsf-HKBAjOmQ.js +0 -32
- package/admin-dist/assets/vendor-tiptap-IyO99U4R.js +0 -142
- package/admin-dist/assets/vendor-vue-D3wBSmDf.js +0 -1
- package/dist/publish-locale.d.ts +0 -44
- package/dist/publish-locale.d.ts.map +0 -1
- package/dist/publish-locale.js +0 -103
- package/dist/publish-locale.js.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Save — kind-specific wrapper around `saveManifestCore`.
|
|
3
|
+
*
|
|
4
|
+
* Owns the bits unique to Page Manifest writes:
|
|
5
|
+
* - Locale resolution (default vs `page.{locale}.json` variant)
|
|
6
|
+
* using `site.pages` + `site.pageLocales`
|
|
7
|
+
* - Component-ID auto-assignment via `ensureComponentIds`
|
|
8
|
+
* - Filename composition (`page.json` vs `page.{locale}.json`)
|
|
9
|
+
* - Manifest assembly (template/content/components/metadata, plus
|
|
10
|
+
* route preservation for locale variants)
|
|
11
|
+
* - The `route` field in `etagExtras` (folder-derived; not stored
|
|
12
|
+
* in the file but part of the etag projection chain per
|
|
13
|
+
* `design-offline.md` Q3)
|
|
14
|
+
* - Per-kind cache prefix `pages:`
|
|
15
|
+
*
|
|
16
|
+
* Everything downstream — etag check, validators, beforeSave hooks,
|
|
17
|
+
* history, write, sidecars, cache invalidate, audit, afterSave hooks,
|
|
18
|
+
* scanner — is `saveManifestCore`'s spine. This wrapper is the
|
|
19
|
+
* Page-flavored thin entry point routes (and the future CLI / plugin
|
|
20
|
+
* routes) call.
|
|
21
|
+
*
|
|
22
|
+
* Per Q3 lock: two fns + shared core. The 5 page-specific diffs
|
|
23
|
+
* (route field, locale lookup in `site.pages`, page-cache prefix,
|
|
24
|
+
* filename, route preservation in locale variants) live here in
|
|
25
|
+
* one file the reader can scan top-to-bottom.
|
|
26
|
+
*/
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
import { ensureComponentIds } from '../component-ids.js';
|
|
29
|
+
import { isValidLocale } from '../locale.js';
|
|
30
|
+
import { saveManifestCore, } from '../manifest-save.js';
|
|
31
|
+
/**
|
|
32
|
+
* Page-name-not-found error. The route projects this to a 404; the
|
|
33
|
+
* pipeline can't compose the full save without a `before` manifest
|
|
34
|
+
* (etag check, validators, sidecar diffs all need it). Distinct
|
|
35
|
+
* from the typed `SaveResult` variants because absence-of-target is
|
|
36
|
+
* a route-level precondition, not a save-pipeline outcome.
|
|
37
|
+
*/
|
|
38
|
+
export class PageNotFoundError extends Error {
|
|
39
|
+
name;
|
|
40
|
+
constructor(name) {
|
|
41
|
+
super(`Page "${name}" not found`);
|
|
42
|
+
this.name = name;
|
|
43
|
+
this.name = 'PageNotFoundError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Invalid locale code per `isValidLocale`. Routes project to 400.
|
|
48
|
+
*/
|
|
49
|
+
export class InvalidLocaleError extends Error {
|
|
50
|
+
raw;
|
|
51
|
+
constructor(raw) {
|
|
52
|
+
super(`Invalid locale code: "${raw}"`);
|
|
53
|
+
this.raw = raw;
|
|
54
|
+
this.name = 'InvalidLocaleError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Save a Page Manifest. Wraps `saveManifestCore` with the Page-specific
|
|
59
|
+
* resolution + assembly. Throws `PageNotFoundError` / `InvalidLocaleError`
|
|
60
|
+
* for route-level preconditions; returns `SaveResult` for save outcomes.
|
|
61
|
+
*
|
|
62
|
+
* Caller responsibilities:
|
|
63
|
+
* - Capability check (`requireCapability('edit:pages')`) before calling
|
|
64
|
+
* - HTTP projection of `SaveResult` (200 success, 409 STALE /
|
|
65
|
+
* VALIDATION_FAILED / HOOK_CANCELLED with appropriate body shape)
|
|
66
|
+
* - Setting the `ETag` response header on success from `result.etag`
|
|
67
|
+
*/
|
|
68
|
+
export async function savePage(input) {
|
|
69
|
+
// Locale validation — surface invalid codes as a typed error so
|
|
70
|
+
// routes can project to 400 without parsing the message. Mirrors
|
|
71
|
+
// pages.ts:292-294.
|
|
72
|
+
let locale;
|
|
73
|
+
if (input.locale !== undefined) {
|
|
74
|
+
if (!isValidLocale(input.locale))
|
|
75
|
+
throw new InvalidLocaleError(input.locale);
|
|
76
|
+
locale = input.locale.toLowerCase();
|
|
77
|
+
}
|
|
78
|
+
// Resolve the page to update — locale variant or default. Mirrors
|
|
79
|
+
// pages.ts:300-304. The default page MUST exist (creates go through
|
|
80
|
+
// a separate `createPage` entry point — Cut 5).
|
|
81
|
+
const defaultPage = input.site.pages.get(input.name);
|
|
82
|
+
if (!defaultPage)
|
|
83
|
+
throw new PageNotFoundError(input.name);
|
|
84
|
+
const localeVariant = locale ? input.site.pageLocales.get(input.name)?.locales.get(locale) : undefined;
|
|
85
|
+
const page = localeVariant ?? defaultPage;
|
|
86
|
+
// Component-ID auto-assignment. Existing IDs preserved; ID-less
|
|
87
|
+
// components get NanoIDs. Per `design-collaboration.md` IDs are the
|
|
88
|
+
// load-bearing anchor for inline comments — running this on every
|
|
89
|
+
// save migrates pre-existing pages without a separate migration
|
|
90
|
+
// step. Mirrors pages.ts:349.
|
|
91
|
+
const components = ensureComponentIds(input.body.components ?? page.components);
|
|
92
|
+
// Manifest assembly — body fields override page fields; route
|
|
93
|
+
// preserved for locale variants (so preview resolution works).
|
|
94
|
+
// Mirrors pages.ts:350-358.
|
|
95
|
+
const manifest = {
|
|
96
|
+
template: input.body.template ?? page.template,
|
|
97
|
+
content: input.body.content ?? page.content,
|
|
98
|
+
components,
|
|
99
|
+
};
|
|
100
|
+
if (input.body.metadata !== undefined)
|
|
101
|
+
manifest.metadata = input.body.metadata;
|
|
102
|
+
else if (page.metadata)
|
|
103
|
+
manifest.metadata = page.metadata;
|
|
104
|
+
// Locale variants store their route for preview resolution
|
|
105
|
+
if (locale && page.route)
|
|
106
|
+
manifest.route = page.route;
|
|
107
|
+
// Filename + path composition. Default → `page.json`; locale
|
|
108
|
+
// variant → `page.{locale}.json`. Both live in the default page's
|
|
109
|
+
// dir (locale variants don't get their own folder).
|
|
110
|
+
const filename = locale ? `page.${locale}.json` : 'page.json';
|
|
111
|
+
const manifestPath = join(defaultPage.dir, filename);
|
|
112
|
+
// Hand off to the spine. Page-specific extras:
|
|
113
|
+
// - cacheInvalidatePrefixes: ['pages:'] only (Page Saves don't
|
|
114
|
+
// dirty fragments)
|
|
115
|
+
// - etagExtras: { route } — folder-derived, not stored in the
|
|
116
|
+
// file but part of the etag projection chain
|
|
117
|
+
return saveManifestCore({
|
|
118
|
+
kind: 'page',
|
|
119
|
+
name: input.name,
|
|
120
|
+
locale,
|
|
121
|
+
manifest,
|
|
122
|
+
before: page,
|
|
123
|
+
manifestPath,
|
|
124
|
+
ifMatch: input.ifMatch,
|
|
125
|
+
site: input.site,
|
|
126
|
+
cacheInvalidatePrefixes: ['pages:'],
|
|
127
|
+
etagExtras: { route: page.route },
|
|
128
|
+
source: input.source,
|
|
129
|
+
audit: input.audit,
|
|
130
|
+
principal: input.principal,
|
|
131
|
+
hookAuditEmit: input.hookAuditEmit,
|
|
132
|
+
validators: input.validators,
|
|
133
|
+
hooks: input.hooks,
|
|
134
|
+
scanner: input.scanner,
|
|
135
|
+
requestId: input.requestId,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/pages/save.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { StorageProvider } from '../types.js';
|
|
2
|
+
/** @internal — used by the config loader. Not part of the operator API. */
|
|
3
|
+
export declare function setConfigAnchor(absolutePath: string | null): void;
|
|
4
|
+
/** @internal — derive a config anchor from a config file path. */
|
|
5
|
+
export declare function configAnchorFromFile(filePath: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Operator-facing storage provider factories. Operators import these into
|
|
8
|
+
* `site.config.ts` and call them inline; the field's value IS the constructed
|
|
9
|
+
* `StorageProvider` instance (Path X — see `design-provider-config.md`).
|
|
10
|
+
*
|
|
11
|
+
* Each factory:
|
|
12
|
+
* 1. Validates required options at construction; throws Error with a message
|
|
13
|
+
* naming the missing/invalid field.
|
|
14
|
+
* 2. Delegates to the internal `create*Provider` factory for the actual
|
|
15
|
+
* construction. Internal factories stay public for tests + advanced wiring.
|
|
16
|
+
*
|
|
17
|
+
* Optional SDK dependencies (Azure, AWS S3) are loaded lazily on first method
|
|
18
|
+
* call so sites that don't use those providers don't pay the install cost.
|
|
19
|
+
*
|
|
20
|
+
* Filesystem path semantics: paths are resolved by Node's filesystem APIs
|
|
21
|
+
* relative to `process.cwd()` (which is the project root when CLI commands
|
|
22
|
+
* run). Default `path` is `./targets/local`; operators wanting per-target
|
|
23
|
+
* paths specify them explicitly per the locked Phase 1 contract.
|
|
24
|
+
*/
|
|
25
|
+
export interface FilesystemStorageOptions {
|
|
26
|
+
/** Storage root path. Relative paths resolve against CWD (project root
|
|
27
|
+
* when invoked via `gazetta` CLI). Absolute paths are used as-is.
|
|
28
|
+
* Default: `./targets/local`. */
|
|
29
|
+
path?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Filesystem storage. Defaults `path` to `./targets/local`. Relative paths
|
|
32
|
+
* resolve against the directory of the `site.config.ts` (or
|
|
33
|
+
* `gazetta.config.ts`) that called this factory. Absolute paths are used
|
|
34
|
+
* as-is. Outside config-evaluation (tests, advanced wiring), relative
|
|
35
|
+
* paths fall back to CWD-relative resolution. */
|
|
36
|
+
export declare function filesystemStorage(opts?: FilesystemStorageOptions): StorageProvider;
|
|
37
|
+
export interface R2StorageOptions {
|
|
38
|
+
accountId: string;
|
|
39
|
+
bucket: string;
|
|
40
|
+
accessKeyId: string;
|
|
41
|
+
secretAccessKey: string;
|
|
42
|
+
/** Optional S3 region. Defaults to 'auto' for R2 per the SDK. */
|
|
43
|
+
region?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Cloudflare R2 storage (S3-compatible). Requires `@aws-sdk/client-s3` +
|
|
46
|
+
* `@aws-sdk/lib-storage` as optional peer deps. */
|
|
47
|
+
export declare function r2Storage(opts: R2StorageOptions): StorageProvider;
|
|
48
|
+
export interface S3StorageOptions {
|
|
49
|
+
endpoint: string;
|
|
50
|
+
bucket: string;
|
|
51
|
+
accessKeyId: string;
|
|
52
|
+
secretAccessKey: string;
|
|
53
|
+
region?: string;
|
|
54
|
+
}
|
|
55
|
+
/** AWS S3 / MinIO / S3-compatible storage. Requires `@aws-sdk/client-s3` +
|
|
56
|
+
* `@aws-sdk/lib-storage`. */
|
|
57
|
+
export declare function s3Storage(opts: S3StorageOptions): StorageProvider;
|
|
58
|
+
export interface AzureBlobStorageOptions {
|
|
59
|
+
connectionString: string;
|
|
60
|
+
container: string;
|
|
61
|
+
}
|
|
62
|
+
/** Azure Blob storage. Requires `@azure/storage-blob`. Use
|
|
63
|
+
* `connectionString: 'UseDevelopmentStorage=true'` for the Azurite emulator. */
|
|
64
|
+
export declare function azureBlobStorage(opts: AzureBlobStorageOptions): StorageProvider;
|
|
65
|
+
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/providers/factories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AA0BlD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEjE;AAMD,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,wBAAwB;IACvC;;sCAEkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;kDAIkD;AAClD,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,wBAA6B,GAAG,eAAe,CAKtF;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;oDACoD;AACpD,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAwBjE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;8BAC8B;AAC9B,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAiBjE;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;iFACiF;AACjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,eAAe,CAI/E"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { dirname, isAbsolute, resolve } from 'node:path';
|
|
2
|
+
import { createFilesystemProvider } from './filesystem.js';
|
|
3
|
+
/**
|
|
4
|
+
* Anchor for relative filesystem paths during config evaluation. The config
|
|
5
|
+
* loader sets this to the directory of the config file currently being
|
|
6
|
+
* evaluated; `filesystemStorage()` reads it to resolve relative `path:`
|
|
7
|
+
* arguments against the config file's directory rather than CWD.
|
|
8
|
+
*
|
|
9
|
+
* Why `globalThis` rather than a module-level variable: jiti loads the
|
|
10
|
+
* operator's `site.config.ts` in a separate module graph from the host
|
|
11
|
+
* process. The `gazetta` package the operator imports inside the config
|
|
12
|
+
* is a different module instance from the one the loader imports — so
|
|
13
|
+
* a module-level variable set by the loader doesn't reach the factory
|
|
14
|
+
* called from the config. `globalThis` is shared across module graphs in
|
|
15
|
+
* the same process, so the state crosses the boundary.
|
|
16
|
+
*
|
|
17
|
+
* Cleared in a `finally` block by the loader after evaluation completes,
|
|
18
|
+
* preventing test harnesses + concurrent loads from leaking state.
|
|
19
|
+
*/
|
|
20
|
+
const ANCHOR_KEY = '__gazettaConfigAnchor__';
|
|
21
|
+
/** @internal — used by the config loader. Not part of the operator API. */
|
|
22
|
+
export function setConfigAnchor(absolutePath) {
|
|
23
|
+
;
|
|
24
|
+
globalThis[ANCHOR_KEY] = absolutePath;
|
|
25
|
+
}
|
|
26
|
+
function getConfigAnchor() {
|
|
27
|
+
return globalThis[ANCHOR_KEY] ?? null;
|
|
28
|
+
}
|
|
29
|
+
/** @internal — derive a config anchor from a config file path. */
|
|
30
|
+
export function configAnchorFromFile(filePath) {
|
|
31
|
+
return dirname(filePath);
|
|
32
|
+
}
|
|
33
|
+
/** Filesystem storage. Defaults `path` to `./targets/local`. Relative paths
|
|
34
|
+
* resolve against the directory of the `site.config.ts` (or
|
|
35
|
+
* `gazetta.config.ts`) that called this factory. Absolute paths are used
|
|
36
|
+
* as-is. Outside config-evaluation (tests, advanced wiring), relative
|
|
37
|
+
* paths fall back to CWD-relative resolution. */
|
|
38
|
+
export function filesystemStorage(opts = {}) {
|
|
39
|
+
const path = opts.path ?? './targets/local';
|
|
40
|
+
if (isAbsolute(path))
|
|
41
|
+
return createFilesystemProvider(path);
|
|
42
|
+
const anchor = getConfigAnchor();
|
|
43
|
+
return createFilesystemProvider(anchor ? resolve(anchor, path) : resolve(path));
|
|
44
|
+
}
|
|
45
|
+
/** Cloudflare R2 storage (S3-compatible). Requires `@aws-sdk/client-s3` +
|
|
46
|
+
* `@aws-sdk/lib-storage` as optional peer deps. */
|
|
47
|
+
export function r2Storage(opts) {
|
|
48
|
+
if (!opts.accountId)
|
|
49
|
+
throw new Error('r2Storage: "accountId" is required');
|
|
50
|
+
if (!opts.bucket)
|
|
51
|
+
throw new Error('r2Storage: "bucket" is required');
|
|
52
|
+
if (!opts.accessKeyId) {
|
|
53
|
+
throw new Error('r2Storage: "accessKeyId" is required. Set R2_ACCESS_KEY_ID and pass `process.env.R2_ACCESS_KEY_ID!`.\n' +
|
|
54
|
+
' Create an R2 API token at https://dash.cloudflare.com/<account>/r2/api-tokens');
|
|
55
|
+
}
|
|
56
|
+
if (!opts.secretAccessKey) {
|
|
57
|
+
throw new Error('r2Storage: "secretAccessKey" is required. Set R2_SECRET_ACCESS_KEY in your env.');
|
|
58
|
+
}
|
|
59
|
+
return lazyS3Provider('r2Storage', {
|
|
60
|
+
endpoint: `https://${opts.accountId}.r2.cloudflarestorage.com`,
|
|
61
|
+
bucket: opts.bucket,
|
|
62
|
+
accessKeyId: opts.accessKeyId,
|
|
63
|
+
secretAccessKey: opts.secretAccessKey,
|
|
64
|
+
region: opts.region,
|
|
65
|
+
}, 'R2 storage requires @aws-sdk/client-s3 and @aws-sdk/lib-storage. ' +
|
|
66
|
+
'Install them: npm install @aws-sdk/client-s3 @aws-sdk/lib-storage');
|
|
67
|
+
}
|
|
68
|
+
/** AWS S3 / MinIO / S3-compatible storage. Requires `@aws-sdk/client-s3` +
|
|
69
|
+
* `@aws-sdk/lib-storage`. */
|
|
70
|
+
export function s3Storage(opts) {
|
|
71
|
+
if (!opts.endpoint)
|
|
72
|
+
throw new Error('s3Storage: "endpoint" is required');
|
|
73
|
+
if (!opts.bucket)
|
|
74
|
+
throw new Error('s3Storage: "bucket" is required');
|
|
75
|
+
if (!opts.accessKeyId)
|
|
76
|
+
throw new Error('s3Storage: "accessKeyId" is required');
|
|
77
|
+
if (!opts.secretAccessKey)
|
|
78
|
+
throw new Error('s3Storage: "secretAccessKey" is required');
|
|
79
|
+
return lazyS3Provider('s3Storage', {
|
|
80
|
+
endpoint: opts.endpoint,
|
|
81
|
+
bucket: opts.bucket,
|
|
82
|
+
accessKeyId: opts.accessKeyId,
|
|
83
|
+
secretAccessKey: opts.secretAccessKey,
|
|
84
|
+
region: opts.region,
|
|
85
|
+
}, 'S3 storage requires @aws-sdk/client-s3 and @aws-sdk/lib-storage. ' +
|
|
86
|
+
'Install them: npm install @aws-sdk/client-s3 @aws-sdk/lib-storage');
|
|
87
|
+
}
|
|
88
|
+
/** Azure Blob storage. Requires `@azure/storage-blob`. Use
|
|
89
|
+
* `connectionString: 'UseDevelopmentStorage=true'` for the Azurite emulator. */
|
|
90
|
+
export function azureBlobStorage(opts) {
|
|
91
|
+
if (!opts.connectionString)
|
|
92
|
+
throw new Error('azureBlobStorage: "connectionString" is required');
|
|
93
|
+
if (!opts.container)
|
|
94
|
+
throw new Error('azureBlobStorage: "container" is required');
|
|
95
|
+
return lazyAzureProvider(opts.connectionString, opts.container);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Wraps the internal S3 factory in a lazy-init proxy: the SDK is imported on
|
|
99
|
+
* the first method call, not at construction time. Construction always
|
|
100
|
+
* succeeds with valid options; auth + connectivity errors surface on first
|
|
101
|
+
* use (per Path X's construction-timing convention — see
|
|
102
|
+
* `design-provider-config.md` "Construction timing").
|
|
103
|
+
*/
|
|
104
|
+
function lazyS3Provider(factoryName, args, missingSdkMessage) {
|
|
105
|
+
let real = null;
|
|
106
|
+
const ensure = async () => {
|
|
107
|
+
if (real)
|
|
108
|
+
return real;
|
|
109
|
+
let createS3Provider;
|
|
110
|
+
try {
|
|
111
|
+
;
|
|
112
|
+
({ createS3Provider } = await import('./s3.js'));
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
throw new Error(`${factoryName}: ${missingSdkMessage}`);
|
|
116
|
+
}
|
|
117
|
+
real = createS3Provider(args);
|
|
118
|
+
return real;
|
|
119
|
+
};
|
|
120
|
+
return makeLazyStorageProxy(ensure);
|
|
121
|
+
}
|
|
122
|
+
function lazyAzureProvider(connectionString, container) {
|
|
123
|
+
let real = null;
|
|
124
|
+
const ensure = async () => {
|
|
125
|
+
if (real)
|
|
126
|
+
return real;
|
|
127
|
+
let createAzureBlobProvider;
|
|
128
|
+
try {
|
|
129
|
+
;
|
|
130
|
+
({ createAzureBlobProvider } = await import('./azure-blob.js'));
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
throw new Error('azureBlobStorage: Azure Blob storage requires @azure/storage-blob. Install it: npm install @azure/storage-blob');
|
|
134
|
+
}
|
|
135
|
+
real = createAzureBlobProvider({ connectionString, container });
|
|
136
|
+
return real;
|
|
137
|
+
};
|
|
138
|
+
return makeLazyStorageProxy(ensure);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Returns a `StorageProvider` whose methods all defer to a real provider
|
|
142
|
+
* resolved on first invocation via `ensure()`. Per-method passthrough means
|
|
143
|
+
* the proxy contract matches `StorageProvider` exactly without inheritance.
|
|
144
|
+
*
|
|
145
|
+
* `init()` is exposed because the internal S3 + Azure providers offer it for
|
|
146
|
+
* connectivity probes (target registry's parallel-init pattern); the proxy
|
|
147
|
+
* forwards to the real provider's `init` when present.
|
|
148
|
+
*/
|
|
149
|
+
function makeLazyStorageProxy(ensure) {
|
|
150
|
+
return {
|
|
151
|
+
async readFile(path) {
|
|
152
|
+
return (await ensure()).readFile(path);
|
|
153
|
+
},
|
|
154
|
+
async readDir(path) {
|
|
155
|
+
return (await ensure()).readDir(path);
|
|
156
|
+
},
|
|
157
|
+
async exists(path) {
|
|
158
|
+
return (await ensure()).exists(path);
|
|
159
|
+
},
|
|
160
|
+
async writeFile(path, content) {
|
|
161
|
+
return (await ensure()).writeFile(path, content);
|
|
162
|
+
},
|
|
163
|
+
async readBytes(path) {
|
|
164
|
+
return (await ensure()).readBytes(path);
|
|
165
|
+
},
|
|
166
|
+
async writeBytes(path, content) {
|
|
167
|
+
return (await ensure()).writeBytes(path, content);
|
|
168
|
+
},
|
|
169
|
+
async mkdir(path) {
|
|
170
|
+
return (await ensure()).mkdir(path);
|
|
171
|
+
},
|
|
172
|
+
async rm(path) {
|
|
173
|
+
return (await ensure()).rm(path);
|
|
174
|
+
},
|
|
175
|
+
async readStream(path, range) {
|
|
176
|
+
return (await ensure()).readStream(path, range);
|
|
177
|
+
},
|
|
178
|
+
async writeStream(path, stream) {
|
|
179
|
+
return (await ensure()).writeStream(path, stream);
|
|
180
|
+
},
|
|
181
|
+
async init() {
|
|
182
|
+
const real = await ensure();
|
|
183
|
+
const initFn = real.init;
|
|
184
|
+
if (typeof initFn === 'function')
|
|
185
|
+
await initFn.call(real);
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=factories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/providers/factories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Publish pipeline (per-item) — orchestrator for one Page or Fragment
|
|
3
|
+
* write to one Target.
|
|
4
|
+
*
|
|
5
|
+
* Today's `publish-rendered.ts` has 5 publish-* exports
|
|
6
|
+
* (`publishPageRendered`, `publishPageStatic`, `publishFragmentRendered`,
|
|
7
|
+
* `publishArchiveMarker`, `publishSiteManifest`) each repeating the same
|
|
8
|
+
* 13-step sequence: archive precheck → resolve → render → assemble →
|
|
9
|
+
* list-old-files → write-new → cleanup → write hash sidecar → write
|
|
10
|
+
* publish-state sidecar. Adding the soft-delete archive marker (Cut 3)
|
|
11
|
+
* had to land in three places. Adding scheduled-publish or review-state
|
|
12
|
+
* gates would too.
|
|
13
|
+
*
|
|
14
|
+
* `publishItemCore` is the seam that hides the orchestration. Per-kind
|
|
15
|
+
* wrappers (`publishPage`, `publishFragment` in pages/publish.ts +
|
|
16
|
+
* fragments/publish.ts — Cut 4) own kind-specific dispatch:
|
|
17
|
+
* page resolves render-mode from target.type (static vs esi vs dynamic);
|
|
18
|
+
* fragment has only one mode; archive short-circuit applies to both.
|
|
19
|
+
*
|
|
20
|
+
* Pipeline order is locked semantics, not configuration. Per-item:
|
|
21
|
+
*
|
|
22
|
+
* 1. (RESERVED) review-state precheck — Review Cut 5 (pending-review
|
|
23
|
+
* behavior at publish time)
|
|
24
|
+
* 2. archive precheck (isArchived → route to archive-marker renderer)
|
|
25
|
+
* 3. resolve item from preloadedSite (locale variant if applicable)
|
|
26
|
+
* 4. (RESERVED) dispatchBeforePublishItem hooks
|
|
27
|
+
* 5. invoke renderer (page-rendered / page-static / fragment-rendered /
|
|
28
|
+
* archive-marker)
|
|
29
|
+
* 6. assemble HTML + CSS + JS (per renderer's output)
|
|
30
|
+
* 7. list old hashed files at item dir
|
|
31
|
+
* 8. write new hashed files (per-file atomic via storage.writeFile;
|
|
32
|
+
* transient failures retry inline 3x with backoff)
|
|
33
|
+
* 9. write item HTML + content-hash sidecar (.{8hex}.hash)
|
|
34
|
+
* 10. cleanup oldFiles − newFiles
|
|
35
|
+
* 11. write publish-state sidecar (.pub-{ts}, includes noindex flag)
|
|
36
|
+
* 12. (RESERVED) dispatchAfterPublishItem hooks
|
|
37
|
+
* 13. return PublishItemResult
|
|
38
|
+
*
|
|
39
|
+
* Throws are reserved for storage transport failures after retries
|
|
40
|
+
* exhausted, AND for prerequisite breaches (caller must supply a
|
|
41
|
+
* preloadedSite and target init must have completed). Expected
|
|
42
|
+
* outcomes — NOT_FOUND / RENDER_FAILED / TEMPLATE_INVALID /
|
|
43
|
+
* VALIDATION_FAILED — are typed `PublishItemResult` variants.
|
|
44
|
+
*/
|
|
45
|
+
import type { CacheConfig, StorageProvider } from './types.js';
|
|
46
|
+
import type { Site } from './site-loader.js';
|
|
47
|
+
import type { ContentRoot } from './content-root.js';
|
|
48
|
+
import type { Issue } from './validation/types.js';
|
|
49
|
+
/**
|
|
50
|
+
* Discriminator for the kind of item being published. Spine is the
|
|
51
|
+
* same per kind; per-kind wrappers in `pages/publish.ts` and
|
|
52
|
+
* `fragments/publish.ts` carry the kind through to dispatch +
|
|
53
|
+
* sidecar + audit calls.
|
|
54
|
+
*/
|
|
55
|
+
export type PublishItemKind = 'page' | 'fragment';
|
|
56
|
+
/**
|
|
57
|
+
* Render mode the item is being published with. Resolved by
|
|
58
|
+
* per-kind wrappers from target.type + archive state:
|
|
59
|
+
* - `'page-rendered'` — ESI placeholders for `@fragment` refs;
|
|
60
|
+
* fragments composed at request time. Used for `esi` targets.
|
|
61
|
+
* - `'page-static'` — full-bake; fragments inlined into page HTML.
|
|
62
|
+
* Used for `static` targets and as the static fallback for
|
|
63
|
+
* `dynamic` targets.
|
|
64
|
+
* - `'fragment-rendered'` — fragment rendered standalone for ESI
|
|
65
|
+
* composition. Used for ALL fragment publishes regardless of
|
|
66
|
+
* target type.
|
|
67
|
+
* - `'archive-marker'` — body-skip; emit ONLY the HTML comment
|
|
68
|
+
* marker line so the worker reads first 200 bytes and
|
|
69
|
+
* short-circuits to 301/410 per design-soft-delete.md Q10.
|
|
70
|
+
*/
|
|
71
|
+
export type PublishRenderMode = 'page-rendered' | 'page-static' | 'fragment-rendered' | 'archive-marker';
|
|
72
|
+
/**
|
|
73
|
+
* Successful publish outcome. `files` and `removed` mirror today's
|
|
74
|
+
* publish-rendered return shape so consumers (CLI progress, admin
|
|
75
|
+
* SSE) need no projection.
|
|
76
|
+
*/
|
|
77
|
+
export interface PublishItemOk {
|
|
78
|
+
readonly kind: PublishItemKind;
|
|
79
|
+
readonly name: string;
|
|
80
|
+
readonly locale?: string;
|
|
81
|
+
readonly ok: true;
|
|
82
|
+
readonly mode: PublishRenderMode;
|
|
83
|
+
readonly files: number;
|
|
84
|
+
readonly removed: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Item not found at the source — caller passed a name that
|
|
88
|
+
* doesn't exist in the preloaded site. Routes/CLI project to a
|
|
89
|
+
* 404 / non-zero exit; orchestrator continues to next item per
|
|
90
|
+
* Q4 fail-soft.
|
|
91
|
+
*/
|
|
92
|
+
export interface PublishItemNotFound {
|
|
93
|
+
readonly kind: PublishItemKind;
|
|
94
|
+
readonly name: string;
|
|
95
|
+
readonly locale?: string;
|
|
96
|
+
readonly ok: false;
|
|
97
|
+
readonly code: 'NOT_FOUND';
|
|
98
|
+
readonly reason: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Renderer threw OR returned malformed output (non-string html,
|
|
102
|
+
* missing required field). Per design-rendering.md the renderer
|
|
103
|
+
* is best-effort; one bad page doesn't abort the run.
|
|
104
|
+
*/
|
|
105
|
+
export interface PublishItemRenderFailed {
|
|
106
|
+
readonly kind: PublishItemKind;
|
|
107
|
+
readonly name: string;
|
|
108
|
+
readonly locale?: string;
|
|
109
|
+
readonly ok: false;
|
|
110
|
+
readonly code: 'RENDER_FAILED';
|
|
111
|
+
readonly reason: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Template the item references is invalid (didn't pass scan).
|
|
115
|
+
* Run-level template scan happens once at boot per Q5 step 3;
|
|
116
|
+
* surface here for items that reference a scan-failed template.
|
|
117
|
+
*/
|
|
118
|
+
export interface PublishItemTemplateInvalid {
|
|
119
|
+
readonly kind: PublishItemKind;
|
|
120
|
+
readonly name: string;
|
|
121
|
+
readonly locale?: string;
|
|
122
|
+
readonly ok: false;
|
|
123
|
+
readonly code: 'TEMPLATE_INVALID';
|
|
124
|
+
readonly reason: string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Pre-publish validators (per validation Cut 4) emitted blocking
|
|
128
|
+
* issues for this item. Caller (orchestrator) decides whether to
|
|
129
|
+
* include validators in the per-item run; today admin's POST
|
|
130
|
+
* /api/publish/audit gates separately.
|
|
131
|
+
*/
|
|
132
|
+
export interface PublishItemValidationFailed {
|
|
133
|
+
readonly kind: PublishItemKind;
|
|
134
|
+
readonly name: string;
|
|
135
|
+
readonly locale?: string;
|
|
136
|
+
readonly ok: false;
|
|
137
|
+
readonly code: 'VALIDATION_FAILED';
|
|
138
|
+
readonly issues: readonly Issue[];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Storage write retries exhausted (transport blip). Item-level
|
|
142
|
+
* fail-soft per Q4; run continues with next item.
|
|
143
|
+
*/
|
|
144
|
+
export interface PublishItemStorageWriteFailed {
|
|
145
|
+
readonly kind: PublishItemKind;
|
|
146
|
+
readonly name: string;
|
|
147
|
+
readonly locale?: string;
|
|
148
|
+
readonly ok: false;
|
|
149
|
+
readonly code: 'STORAGE_WRITE_FAILED';
|
|
150
|
+
readonly reason: string;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Typed union of expected per-item publish outcomes. Routes/CLI
|
|
154
|
+
* `switch` exhaustively to project to wire shape (HTTP / SSE /
|
|
155
|
+
* stdout). Adding a variant produces a TS error at every
|
|
156
|
+
* consumer — intentional, per Q1 lock.
|
|
157
|
+
*/
|
|
158
|
+
export type PublishItemResult = PublishItemOk | PublishItemNotFound | PublishItemRenderFailed | PublishItemTemplateInvalid | PublishItemValidationFailed | PublishItemStorageWriteFailed;
|
|
159
|
+
/**
|
|
160
|
+
* Inputs to `publishItemCore`. Carries the resolved render-mode
|
|
161
|
+
* decision (per-kind wrappers compute it from target.type +
|
|
162
|
+
* archive state) plus the renderer strategy that owns mode-specific
|
|
163
|
+
* assembly.
|
|
164
|
+
*/
|
|
165
|
+
export interface PublishItemInput {
|
|
166
|
+
readonly kind: PublishItemKind;
|
|
167
|
+
readonly name: string;
|
|
168
|
+
readonly locale?: string;
|
|
169
|
+
/** Render mode resolved by per-kind wrapper before calling core. */
|
|
170
|
+
readonly mode: PublishRenderMode;
|
|
171
|
+
/** Loaded site, shared across the publish run (loaded ONCE in publishRun). */
|
|
172
|
+
readonly site: Site;
|
|
173
|
+
/** Source content tree the item is read from. */
|
|
174
|
+
readonly sourceRoot: ContentRoot;
|
|
175
|
+
/** Target storage being published TO. */
|
|
176
|
+
readonly target: PublishTarget;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Per-target context. Mirrors the relevant subset of `TargetConfig`
|
|
180
|
+
* + provider handle without importing the admin-api boundary type.
|
|
181
|
+
* `publishRun` builds this once per target during boot phase 6
|
|
182
|
+
* (init target storage); per-item core consumes it.
|
|
183
|
+
*/
|
|
184
|
+
export interface PublishTarget {
|
|
185
|
+
readonly name: string;
|
|
186
|
+
readonly storage: StorageProvider;
|
|
187
|
+
/** Target type resolved per design-rendering.md (static / esi / dynamic). */
|
|
188
|
+
readonly type: 'static' | 'esi' | 'dynamic';
|
|
189
|
+
/**
|
|
190
|
+
* Optional per-target manifest content hash for the item being
|
|
191
|
+
* published. publishRun precomputes via hashManifest so per-item
|
|
192
|
+
* core doesn't recompute.
|
|
193
|
+
*/
|
|
194
|
+
readonly manifestHash?: string;
|
|
195
|
+
/** Optional SEO context for fallback-chain rendering. */
|
|
196
|
+
readonly seo?: import('./seo.js').SeoContext;
|
|
197
|
+
/** Optional target-level cache config (browser / edge TTL); page-level overrides win in renderer. */
|
|
198
|
+
readonly cache?: CacheConfig;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Publish pipeline orchestrator (per-item) — Cut 3.
|
|
202
|
+
*
|
|
203
|
+
* Ports the 13-step spine from `publish-rendered.ts`'s 5 publish-*
|
|
204
|
+
* functions. Mode dispatch (page-rendered / page-static /
|
|
205
|
+
* fragment-rendered / archive-marker) consumes pure-fn renderers
|
|
206
|
+
* from `publish-renderers.ts` (Cut 2). Storage I/O + sidecar writes
|
|
207
|
+
* + cleanup live here.
|
|
208
|
+
*
|
|
209
|
+
* Pipeline sequence (locked per Q5):
|
|
210
|
+
*
|
|
211
|
+
* 1. (RESERVED) review-state precheck — Review Cut 5
|
|
212
|
+
* 2. archive precheck — `mode: 'archive-marker'` → renderArchiveMarker
|
|
213
|
+
* 3. resolve item from preloadedSite (NOT_FOUND if missing)
|
|
214
|
+
* 4. (RESERVED) dispatchBeforePublishItem hooks
|
|
215
|
+
* 5. invoke renderer (mode dispatch)
|
|
216
|
+
* 6-7. (renderer produces RenderOutput; assembly + hashing internal)
|
|
217
|
+
* 8. list old hashed files
|
|
218
|
+
* 9. mkdir + write index file + write hashed files
|
|
219
|
+
* 10. cleanup oldFiles − newFiles
|
|
220
|
+
* 11. write content-hash + publish-state sidecars
|
|
221
|
+
* 12. (RESERVED) dispatchAfterPublishItem hooks
|
|
222
|
+
* 13. return PublishItemResult
|
|
223
|
+
*/
|
|
224
|
+
export declare function publishItemCore(input: PublishItemInput): Promise<PublishItemResult>;
|
|
225
|
+
//# sourceMappingURL=publish-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-item.d.ts","sourceRoot":"","sources":["../src/publish-item.ts"],"names":[],"mappings":"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"}
|