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
package/dist/manifest.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
import yaml from 'js-yaml';
|
|
2
|
-
function parseYaml(content, filePath) {
|
|
3
|
-
try {
|
|
4
|
-
const parsed = yaml.load(content);
|
|
5
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
6
|
-
throw new Error(`Expected a YAML object in ${filePath}, got ${typeof parsed}`);
|
|
7
|
-
}
|
|
8
|
-
return parsed;
|
|
9
|
-
}
|
|
10
|
-
catch (err) {
|
|
11
|
-
if (err instanceof yaml.YAMLException) {
|
|
12
|
-
throw new Error(`YAML parse error in ${filePath}: ${err.message}`);
|
|
13
|
-
}
|
|
14
|
-
throw err;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
1
|
function parseJson(content, filePath) {
|
|
18
2
|
try {
|
|
19
3
|
const parsed = JSON.parse(content);
|
|
@@ -29,6 +13,38 @@ function parseJson(content, filePath) {
|
|
|
29
13
|
throw err;
|
|
30
14
|
}
|
|
31
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Pick the archive fields off a parsed manifest, projecting only the
|
|
18
|
+
* locked four (per design-soft-delete.md Q1). Stale or unknown fields
|
|
19
|
+
* are dropped — the manifest projection layer is the boundary that
|
|
20
|
+
* defines which manifest properties Gazetta consumes.
|
|
21
|
+
*/
|
|
22
|
+
function parseArchiveFields(raw) {
|
|
23
|
+
const out = {};
|
|
24
|
+
if (typeof raw.archived === 'boolean')
|
|
25
|
+
out.archived = raw.archived;
|
|
26
|
+
if (typeof raw.archivedAt === 'string')
|
|
27
|
+
out.archivedAt = raw.archivedAt;
|
|
28
|
+
if (typeof raw.archivedBy === 'string')
|
|
29
|
+
out.archivedBy = raw.archivedBy;
|
|
30
|
+
if (typeof raw.aliasOf === 'string')
|
|
31
|
+
out.aliasOf = raw.aliasOf;
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Forward-compat passthrough for review-workflow's `reviewState`
|
|
36
|
+
* field (per design-soft-delete.md Cut 14). The review-workflow
|
|
37
|
+
* foundation will lock the field's shape when it ships; until then,
|
|
38
|
+
* the parser passes through any string value so archive-time logic
|
|
39
|
+
* (auto-withdraw on pending-review, restore-to-draft on unarchive)
|
|
40
|
+
* has the field to read. Spread directly into the parsed object so
|
|
41
|
+
* it's `reviewState?: string | undefined`.
|
|
42
|
+
*/
|
|
43
|
+
function parseReviewFields(raw) {
|
|
44
|
+
if (typeof raw.reviewState === 'string')
|
|
45
|
+
return { reviewState: raw.reviewState };
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
32
48
|
function parseComponents(raw) {
|
|
33
49
|
if (!Array.isArray(raw))
|
|
34
50
|
return undefined;
|
|
@@ -37,43 +53,22 @@ function parseComponents(raw) {
|
|
|
37
53
|
return entry;
|
|
38
54
|
if (typeof entry === 'object' && entry !== null && typeof entry.template === 'string') {
|
|
39
55
|
const comp = entry;
|
|
40
|
-
|
|
56
|
+
const parsed = {
|
|
41
57
|
name: comp.name,
|
|
42
58
|
template: comp.template,
|
|
43
59
|
content: comp.content,
|
|
44
60
|
components: parseComponents(comp.components),
|
|
45
61
|
};
|
|
62
|
+
// Preserve component IDs (per design-collaboration.md Cut 1).
|
|
63
|
+
// IDs are written by the save handlers and must round-trip
|
|
64
|
+
// through read so inline anchors stay valid.
|
|
65
|
+
if (typeof comp.id === 'string')
|
|
66
|
+
parsed.id = comp.id;
|
|
67
|
+
return parsed;
|
|
46
68
|
}
|
|
47
69
|
return entry;
|
|
48
70
|
});
|
|
49
71
|
}
|
|
50
|
-
export async function parseSiteManifest(storage, filePath) {
|
|
51
|
-
const raw = parseYaml(await storage.readFile(filePath), filePath);
|
|
52
|
-
if (typeof raw.name !== 'string') {
|
|
53
|
-
throw new Error(`Invalid site.yaml at ${filePath}: missing required "name" field`);
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
name: raw.name,
|
|
57
|
-
version: raw.version,
|
|
58
|
-
locale: raw.locale,
|
|
59
|
-
locales: parseLocalesConfig(raw.locales),
|
|
60
|
-
defaultOgImage: raw.defaultOgImage,
|
|
61
|
-
systemPages: Array.isArray(raw.systemPages) ? raw.systemPages : undefined,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
function parseLocalesConfig(raw) {
|
|
65
|
-
if (!raw || typeof raw !== 'object')
|
|
66
|
-
return undefined;
|
|
67
|
-
const obj = raw;
|
|
68
|
-
if (!Array.isArray(obj.supported) || obj.supported.length === 0)
|
|
69
|
-
return undefined;
|
|
70
|
-
return {
|
|
71
|
-
supported: obj.supported,
|
|
72
|
-
fallbacks: obj.fallbacks,
|
|
73
|
-
defaultPrefix: typeof obj.defaultPrefix === 'boolean' ? obj.defaultPrefix : undefined,
|
|
74
|
-
detection: typeof obj.detection === 'boolean' ? obj.detection : undefined,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
72
|
export async function parsePageManifest(storage, filePath) {
|
|
78
73
|
const raw = parseJson(await storage.readFile(filePath), filePath);
|
|
79
74
|
if (typeof raw.template !== 'string') {
|
|
@@ -86,6 +81,8 @@ export async function parsePageManifest(storage, filePath) {
|
|
|
86
81
|
components: parseComponents(raw.components),
|
|
87
82
|
metadata: raw.metadata,
|
|
88
83
|
cache: raw.cache,
|
|
84
|
+
...parseArchiveFields(raw),
|
|
85
|
+
...parseReviewFields(raw),
|
|
89
86
|
};
|
|
90
87
|
}
|
|
91
88
|
export async function parseFragmentManifest(storage, filePath) {
|
|
@@ -97,6 +94,8 @@ export async function parseFragmentManifest(storage, filePath) {
|
|
|
97
94
|
template: raw.template,
|
|
98
95
|
content: raw.content,
|
|
99
96
|
components: parseComponents(raw.components),
|
|
97
|
+
...parseArchiveFields(raw),
|
|
98
|
+
...parseReviewFields(raw),
|
|
100
99
|
};
|
|
101
100
|
}
|
|
102
101
|
//# sourceMappingURL=manifest.js.map
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-floor.d.ts","sourceRoot":"","sources":["../src/node-floor.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-floor.js","sourceRoot":"","sources":["../src/node-floor.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Create — POST handler logic for `/api/pages`.
|
|
3
|
+
*
|
|
4
|
+
* Different from `savePage`:
|
|
5
|
+
* - No etag precheck (nothing to compare against; new page)
|
|
6
|
+
* - No locale variant lookup (creates the default Page Manifest)
|
|
7
|
+
* - Name conflict resolution per `design-soft-delete.md` Q5 I3:
|
|
8
|
+
* - Live name in use → typed `LIVE_CONFLICT` outcome
|
|
9
|
+
* - Archived name in use, no `?onConflict` flag → typed
|
|
10
|
+
* `ARCHIVED_CONFLICT` outcome with archive details
|
|
11
|
+
* - Archived name in use, with mode → delegate to
|
|
12
|
+
* `resolveArchivedNameConflict` (restore / replace / moveAside)
|
|
13
|
+
* - Folder creation (`storage.mkdir(pageDir)`)
|
|
14
|
+
* - Initial sidecar wiring (`rebuildAssetRefs` /
|
|
15
|
+
* `rebuildFragmentDeps` against `null` → empty manifest)
|
|
16
|
+
* - Cache invalidation (`pages:`)
|
|
17
|
+
*
|
|
18
|
+
* Same as `savePage` for the post-resolution-or-create write itself —
|
|
19
|
+
* eventually creates pass through `saveManifestCore` once the
|
|
20
|
+
* "before is null" path lands. v1 keeps the create-time path
|
|
21
|
+
* separate because it doesn't need validators / hooks / scanner /
|
|
22
|
+
* audit-on-failure (a new empty page has no validation surface to
|
|
23
|
+
* exercise yet).
|
|
24
|
+
*
|
|
25
|
+
* Per Q6 lock: separate `createPage` instead of folding into
|
|
26
|
+
* `savePage` — Create has its own pre-write phase (conflict prompt,
|
|
27
|
+
* mkdir, route derive) that update doesn't. Branchy A would merge
|
|
28
|
+
* two distinct intents.
|
|
29
|
+
*/
|
|
30
|
+
import { type ArchivedNameConflictResult } from '../admin-api/archived-name-conflict.js';
|
|
31
|
+
import type { SourceContext } from '../admin-api/source-context.js';
|
|
32
|
+
import type { SaveAuditRecorder, SavePrincipal } from '../manifest-save.js';
|
|
33
|
+
/**
|
|
34
|
+
* Inputs to `createPage`. The body's already been Zod-validated by
|
|
35
|
+
* the route — caller passes the parsed shape.
|
|
36
|
+
*/
|
|
37
|
+
export interface CreatePageInput {
|
|
38
|
+
/** Page name (folder name under `pages/`). */
|
|
39
|
+
readonly name: string;
|
|
40
|
+
/** Template the new page uses. */
|
|
41
|
+
readonly template: string;
|
|
42
|
+
/** Optional initial content; defaults to `{ title: name }` when absent. */
|
|
43
|
+
readonly content?: Record<string, unknown>;
|
|
44
|
+
/**
|
|
45
|
+
* `?onConflict` query param: `'restore' | 'replace' | 'moveAside'`
|
|
46
|
+
* or undefined. When undefined and an archived name conflict is
|
|
47
|
+
* detected, returns `ARCHIVED_CONFLICT` so the route prompts the
|
|
48
|
+
* client. When set, delegates to `resolveArchivedNameConflict`.
|
|
49
|
+
*/
|
|
50
|
+
readonly onConflict?: string;
|
|
51
|
+
/** Source wiring + admin-api SourceContext (for archived-conflict resolver). */
|
|
52
|
+
readonly source: SourceContext;
|
|
53
|
+
/** Authenticated principal driving this create. */
|
|
54
|
+
readonly principal: SavePrincipal;
|
|
55
|
+
/** Audit recorder bound to the request. */
|
|
56
|
+
readonly audit: SaveAuditRecorder;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Successful create — fresh page or restored-from-archive.
|
|
60
|
+
* `resolution` is set when the create resolved an archive conflict;
|
|
61
|
+
* absent for plain creates.
|
|
62
|
+
*/
|
|
63
|
+
export interface CreatePageOk {
|
|
64
|
+
readonly ok: true;
|
|
65
|
+
readonly name: string;
|
|
66
|
+
readonly resolution?: ArchivedNameConflictResult['kind'];
|
|
67
|
+
}
|
|
68
|
+
/** Live (non-archived) page already exists at `name`. */
|
|
69
|
+
export interface CreatePageLiveConflict {
|
|
70
|
+
readonly ok: false;
|
|
71
|
+
readonly code: 'LIVE_CONFLICT';
|
|
72
|
+
readonly name: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Archived page exists at `name`. Caller hadn't sent `?onConflict`
|
|
76
|
+
* → return the archive details so the client can prompt
|
|
77
|
+
* Restore / Replace / Move-aside per Soft-Delete Q5 I3.
|
|
78
|
+
*/
|
|
79
|
+
export interface CreatePageArchivedConflict {
|
|
80
|
+
readonly ok: false;
|
|
81
|
+
readonly code: 'ARCHIVED_CONFLICT';
|
|
82
|
+
readonly archive: {
|
|
83
|
+
readonly kind: 'page';
|
|
84
|
+
readonly name: string;
|
|
85
|
+
readonly archivedAt?: string;
|
|
86
|
+
readonly archivedBy?: string;
|
|
87
|
+
readonly aliasOf?: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Caller sent `?onConflict=<unknown>`. Routes project to 400. */
|
|
91
|
+
export interface CreatePageInvalidMode {
|
|
92
|
+
readonly ok: false;
|
|
93
|
+
readonly code: 'INVALID_CONFLICT_MODE';
|
|
94
|
+
readonly mode: string;
|
|
95
|
+
}
|
|
96
|
+
export type CreatePageResult = CreatePageOk | CreatePageLiveConflict | CreatePageArchivedConflict | CreatePageInvalidMode;
|
|
97
|
+
/**
|
|
98
|
+
* Create a Page. Wraps the conflict-resolution decision tree + the
|
|
99
|
+
* fresh-create write path. Routes project the typed `CreatePageResult`
|
|
100
|
+
* to HTTP (200 / 400 / 409).
|
|
101
|
+
*/
|
|
102
|
+
export declare function createPage(input: CreatePageInput): Promise<CreatePageResult>;
|
|
103
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/pages/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAKnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAE3E;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAA;CACzD;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF;AAED,kEAAkE;AAClE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,sBAAsB,GACtB,0BAA0B,GAC1B,qBAAqB,CAAA;AAEzB;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmFlF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Create — POST handler logic for `/api/pages`.
|
|
3
|
+
*
|
|
4
|
+
* Different from `savePage`:
|
|
5
|
+
* - No etag precheck (nothing to compare against; new page)
|
|
6
|
+
* - No locale variant lookup (creates the default Page Manifest)
|
|
7
|
+
* - Name conflict resolution per `design-soft-delete.md` Q5 I3:
|
|
8
|
+
* - Live name in use → typed `LIVE_CONFLICT` outcome
|
|
9
|
+
* - Archived name in use, no `?onConflict` flag → typed
|
|
10
|
+
* `ARCHIVED_CONFLICT` outcome with archive details
|
|
11
|
+
* - Archived name in use, with mode → delegate to
|
|
12
|
+
* `resolveArchivedNameConflict` (restore / replace / moveAside)
|
|
13
|
+
* - Folder creation (`storage.mkdir(pageDir)`)
|
|
14
|
+
* - Initial sidecar wiring (`rebuildAssetRefs` /
|
|
15
|
+
* `rebuildFragmentDeps` against `null` → empty manifest)
|
|
16
|
+
* - Cache invalidation (`pages:`)
|
|
17
|
+
*
|
|
18
|
+
* Same as `savePage` for the post-resolution-or-create write itself —
|
|
19
|
+
* eventually creates pass through `saveManifestCore` once the
|
|
20
|
+
* "before is null" path lands. v1 keeps the create-time path
|
|
21
|
+
* separate because it doesn't need validators / hooks / scanner /
|
|
22
|
+
* audit-on-failure (a new empty page has no validation surface to
|
|
23
|
+
* exercise yet).
|
|
24
|
+
*
|
|
25
|
+
* Per Q6 lock: separate `createPage` instead of folding into
|
|
26
|
+
* `savePage` — Create has its own pre-write phase (conflict prompt,
|
|
27
|
+
* mkdir, route derive) that update doesn't. Branchy A would merge
|
|
28
|
+
* two distinct intents.
|
|
29
|
+
*/
|
|
30
|
+
import { join } from 'node:path';
|
|
31
|
+
import { resolveArchivedNameConflict, } from '../admin-api/archived-name-conflict.js';
|
|
32
|
+
import { rebuildAssetRefs } from '../assets/asset-deps.js';
|
|
33
|
+
import { rebuildFragmentDeps } from '../fragment-deps.js';
|
|
34
|
+
import { loadSiteFromSource } from '../admin-api/source-context.js';
|
|
35
|
+
/**
|
|
36
|
+
* Create a Page. Wraps the conflict-resolution decision tree + the
|
|
37
|
+
* fresh-create write path. Routes project the typed `CreatePageResult`
|
|
38
|
+
* to HTTP (200 / 400 / 409).
|
|
39
|
+
*/
|
|
40
|
+
export async function createPage(input) {
|
|
41
|
+
const { source, name, template, content, onConflict, principal, audit } = input;
|
|
42
|
+
const { storage } = source;
|
|
43
|
+
const pageDir = source.contentRoot.path('pages', name);
|
|
44
|
+
const manifestPath = join(pageDir, 'page.json');
|
|
45
|
+
// Conflict path — manifest already exists at the target name.
|
|
46
|
+
if (await storage.exists(manifestPath)) {
|
|
47
|
+
const site = await loadSiteFromSource(source);
|
|
48
|
+
const existing = site.pages.get(name);
|
|
49
|
+
const isArchived = existing?.archived === true;
|
|
50
|
+
if (!isArchived) {
|
|
51
|
+
return { ok: false, code: 'LIVE_CONFLICT', name };
|
|
52
|
+
}
|
|
53
|
+
// Archived conflict, no resolution flag → return structured
|
|
54
|
+
// body so the client can prompt the author per Q5 I3.
|
|
55
|
+
if (!onConflict) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
code: 'ARCHIVED_CONFLICT',
|
|
59
|
+
archive: {
|
|
60
|
+
kind: 'page',
|
|
61
|
+
name,
|
|
62
|
+
...(existing?.archivedAt ? { archivedAt: existing.archivedAt } : {}),
|
|
63
|
+
...(existing?.archivedBy ? { archivedBy: existing.archivedBy } : {}),
|
|
64
|
+
...(existing?.aliasOf ? { aliasOf: existing.aliasOf } : {}),
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Archived conflict + mode → delegate to the resolver.
|
|
69
|
+
const result = await resolveArchivedNameConflict({
|
|
70
|
+
source,
|
|
71
|
+
kind: 'page',
|
|
72
|
+
name,
|
|
73
|
+
existing: existing,
|
|
74
|
+
mode: onConflict,
|
|
75
|
+
newTemplate: template,
|
|
76
|
+
newContent: content,
|
|
77
|
+
actorId: principal.id,
|
|
78
|
+
});
|
|
79
|
+
if (result.kind === 'invalid-mode') {
|
|
80
|
+
return { ok: false, code: 'INVALID_CONFLICT_MODE', mode: onConflict };
|
|
81
|
+
}
|
|
82
|
+
// Audit one event per logical mode — mirror existing route shape.
|
|
83
|
+
const action = result.kind === 'restored' ? 'unarchive' : result.kind === 'replaced' ? 'archive' : 'rename';
|
|
84
|
+
await audit.record({
|
|
85
|
+
// The audit recorder's typed shape limits action to save-flow values;
|
|
86
|
+
// the resolver's audit events use the soft-delete vocabulary. Cast
|
|
87
|
+
// through `unknown` keeps the recorder shape narrow without forcing a
|
|
88
|
+
// wider union into the save pipeline's contract.
|
|
89
|
+
action: action,
|
|
90
|
+
outcome: 'success',
|
|
91
|
+
scope: { kind: 'page', name },
|
|
92
|
+
metadata: { onConflict },
|
|
93
|
+
});
|
|
94
|
+
await source.cache.invalidatePrefix('pages:');
|
|
95
|
+
return { ok: true, name, resolution: result.kind };
|
|
96
|
+
}
|
|
97
|
+
// Fresh create path — no existing manifest at the target name.
|
|
98
|
+
await storage.mkdir(pageDir);
|
|
99
|
+
const manifest = {
|
|
100
|
+
template,
|
|
101
|
+
content: content ?? { title: name },
|
|
102
|
+
components: [],
|
|
103
|
+
};
|
|
104
|
+
await storage.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
105
|
+
// Sidecar wiring — fresh manifest has empty components[] so the
|
|
106
|
+
// diff against null is mostly a no-op today; wires the dep tracking
|
|
107
|
+
// for the moment templates ship initial content with `_asset` or
|
|
108
|
+
// `@fragment` refs.
|
|
109
|
+
const item = { source: 'page', name };
|
|
110
|
+
await Promise.all([
|
|
111
|
+
rebuildAssetRefs(source.contentRoot, item, null, manifest),
|
|
112
|
+
rebuildFragmentDeps(source.contentRoot, item, null, manifest),
|
|
113
|
+
]);
|
|
114
|
+
await source.cache.invalidatePrefix('pages:');
|
|
115
|
+
return { ok: true, name };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/pages/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Publish — kind-specific wrapper around `publishItemCore`.
|
|
3
|
+
*
|
|
4
|
+
* Owns the bits unique to Page publishes:
|
|
5
|
+
* - Render-mode resolution from target.type + archive state:
|
|
6
|
+
* - archived → 'archive-marker' regardless of target type
|
|
7
|
+
* - target.type === 'esi' → 'page-rendered' (ESI placeholders)
|
|
8
|
+
* - target.type === 'static' → 'page-static' (full-bake)
|
|
9
|
+
* - target.type === 'dynamic' → 'page-static' (static fallback;
|
|
10
|
+
* dynamic origin handles per-request render)
|
|
11
|
+
* - Page-cache config flow-through (target → page → spine renderer
|
|
12
|
+
* reads it for the cache-control comment)
|
|
13
|
+
*
|
|
14
|
+
* Everything downstream — archive precheck, render dispatch, storage
|
|
15
|
+
* I/O, sidecar writes, cleanup — is `publishItemCore`'s spine.
|
|
16
|
+
*
|
|
17
|
+
* Per Q3 lock: two fns + shared core. The 5 page-vs-fragment diffs
|
|
18
|
+
* (mode resolution, page-cache, sidecar pub-state, etc.) live here in
|
|
19
|
+
* one file the reader can scan top-to-bottom.
|
|
20
|
+
*/
|
|
21
|
+
import { type PublishItemResult, type PublishRenderMode, type PublishTarget } from '../publish-item.js';
|
|
22
|
+
import type { ContentRoot } from '../content-root.js';
|
|
23
|
+
import type { Site } from '../site-loader.js';
|
|
24
|
+
/**
|
|
25
|
+
* Inputs to `publishPage`. Routes / CLI / orchestrator destructure
|
|
26
|
+
* their context and pass the parts the pipeline needs.
|
|
27
|
+
*/
|
|
28
|
+
export interface PublishPageInput {
|
|
29
|
+
/** Page name (folder name under `pages/`). */
|
|
30
|
+
readonly name: string;
|
|
31
|
+
/** Locale variant being published; undefined = default locale. */
|
|
32
|
+
readonly locale?: string;
|
|
33
|
+
/** Loaded site (caller does `loadSite()` once for the publish run). */
|
|
34
|
+
readonly site: Site;
|
|
35
|
+
/** Source content root (typically not used by core today; reserved for hooks). */
|
|
36
|
+
readonly sourceRoot: ContentRoot;
|
|
37
|
+
/** Target context (storage, type, optional manifestHash, seo, cache). */
|
|
38
|
+
readonly target: PublishTarget;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the render mode for a page on a target. Pure dispatch
|
|
42
|
+
* function — exported for tests + per-kind reuse.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolvePageRenderMode(page: {
|
|
45
|
+
archived?: boolean;
|
|
46
|
+
}, targetType: PublishTarget['type']): PublishRenderMode;
|
|
47
|
+
/**
|
|
48
|
+
* Publish a page to a target. Wraps `publishItemCore` with the
|
|
49
|
+
* page-specific mode resolution. Returns one of `PublishItemResult`'s
|
|
50
|
+
* typed variants — caller projects to wire shape (HTTP / SSE / CLI
|
|
51
|
+
* stdout / aggregate result).
|
|
52
|
+
*
|
|
53
|
+
* Caller responsibilities (handled by per-run orchestrator in Cut 5):
|
|
54
|
+
* - Capability check (`requireCapability('publish:...')`)
|
|
55
|
+
* - Template scan + loadSite (shared across run)
|
|
56
|
+
* - Per-target init + capability gates
|
|
57
|
+
*/
|
|
58
|
+
export declare function publishPage(input: PublishPageInput): Promise<PublishItemResult>;
|
|
59
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/pages/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAmB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAE7C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;IAChC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5B,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,iBAAiB,CAcnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBrF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Publish — kind-specific wrapper around `publishItemCore`.
|
|
3
|
+
*
|
|
4
|
+
* Owns the bits unique to Page publishes:
|
|
5
|
+
* - Render-mode resolution from target.type + archive state:
|
|
6
|
+
* - archived → 'archive-marker' regardless of target type
|
|
7
|
+
* - target.type === 'esi' → 'page-rendered' (ESI placeholders)
|
|
8
|
+
* - target.type === 'static' → 'page-static' (full-bake)
|
|
9
|
+
* - target.type === 'dynamic' → 'page-static' (static fallback;
|
|
10
|
+
* dynamic origin handles per-request render)
|
|
11
|
+
* - Page-cache config flow-through (target → page → spine renderer
|
|
12
|
+
* reads it for the cache-control comment)
|
|
13
|
+
*
|
|
14
|
+
* Everything downstream — archive precheck, render dispatch, storage
|
|
15
|
+
* I/O, sidecar writes, cleanup — is `publishItemCore`'s spine.
|
|
16
|
+
*
|
|
17
|
+
* Per Q3 lock: two fns + shared core. The 5 page-vs-fragment diffs
|
|
18
|
+
* (mode resolution, page-cache, sidecar pub-state, etc.) live here in
|
|
19
|
+
* one file the reader can scan top-to-bottom.
|
|
20
|
+
*/
|
|
21
|
+
import { isArchived } from '../archive-helpers.js';
|
|
22
|
+
import { publishItemCore } from '../publish-item.js';
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the render mode for a page on a target. Pure dispatch
|
|
25
|
+
* function — exported for tests + per-kind reuse.
|
|
26
|
+
*/
|
|
27
|
+
export function resolvePageRenderMode(page, targetType) {
|
|
28
|
+
// Archive precheck wins regardless of target type. The spine's
|
|
29
|
+
// archive-marker renderer body-skips and emits the marker line so
|
|
30
|
+
// the worker reads first 200 bytes and short-circuits to 301/410
|
|
31
|
+
// per design-soft-delete.md Q10.
|
|
32
|
+
if (isArchived(page))
|
|
33
|
+
return 'archive-marker';
|
|
34
|
+
// ESI mode: pages compose ESI placeholders for `@fragment` refs
|
|
35
|
+
// at request time on a worker-served target.
|
|
36
|
+
if (targetType === 'esi')
|
|
37
|
+
return 'page-rendered';
|
|
38
|
+
// Static + dynamic targets bake the full page. Dynamic targets'
|
|
39
|
+
// origin handles per-request rendering for dynamic FRAGMENTS only;
|
|
40
|
+
// pages themselves still get a static fallback (per
|
|
41
|
+
// design-rendering.md compatibility matrix).
|
|
42
|
+
return 'page-static';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Publish a page to a target. Wraps `publishItemCore` with the
|
|
46
|
+
* page-specific mode resolution. Returns one of `PublishItemResult`'s
|
|
47
|
+
* typed variants — caller projects to wire shape (HTTP / SSE / CLI
|
|
48
|
+
* stdout / aggregate result).
|
|
49
|
+
*
|
|
50
|
+
* Caller responsibilities (handled by per-run orchestrator in Cut 5):
|
|
51
|
+
* - Capability check (`requireCapability('publish:...')`)
|
|
52
|
+
* - Template scan + loadSite (shared across run)
|
|
53
|
+
* - Per-target init + capability gates
|
|
54
|
+
*/
|
|
55
|
+
export async function publishPage(input) {
|
|
56
|
+
const page = input.site.pages.get(input.name);
|
|
57
|
+
if (!page) {
|
|
58
|
+
return {
|
|
59
|
+
kind: 'page',
|
|
60
|
+
name: input.name,
|
|
61
|
+
locale: input.locale,
|
|
62
|
+
ok: false,
|
|
63
|
+
code: 'NOT_FOUND',
|
|
64
|
+
reason: `Page "${input.name}" not found in source`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const mode = resolvePageRenderMode(page, input.target.type);
|
|
68
|
+
return publishItemCore({
|
|
69
|
+
kind: 'page',
|
|
70
|
+
name: input.name,
|
|
71
|
+
locale: input.locale,
|
|
72
|
+
mode,
|
|
73
|
+
site: input.site,
|
|
74
|
+
sourceRoot: input.sourceRoot,
|
|
75
|
+
target: input.target,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/pages/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAsE,MAAM,oBAAoB,CAAA;AAqBxH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA4B,EAC5B,UAAiC;IAEjC,+DAA+D;IAC/D,kEAAkE;IAClE,iEAAiE;IACjE,iCAAiC;IACjC,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAC7C,gEAAgE;IAChE,6CAA6C;IAC7C,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,eAAe,CAAA;IAChD,gEAAgE;IAChE,mEAAmE;IACnE,oDAAoD;IACpD,6CAA6C;IAC7C,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,uBAAuB;SACnD,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,eAAe,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI;QACJ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
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 { type SaveAuditRecorder, type SaveResult, type SavePrincipal, type SaveSourceWiring } from '../manifest-save.js';
|
|
28
|
+
import type { PageManifest } from '../types.js';
|
|
29
|
+
import type { Site } from '../site-loader.js';
|
|
30
|
+
import type { ValidatorRegistry } from '../validation/registry.js';
|
|
31
|
+
import type { ValidationScanner } from '../validation/scanner.js';
|
|
32
|
+
import type { HookFiringEmitter, HookRegistry } from '../hooks/index.js';
|
|
33
|
+
/**
|
|
34
|
+
* Inputs to `savePage`. Routes destructure their request and pass
|
|
35
|
+
* the parts the pipeline needs; CLI / plugin callers do the same
|
|
36
|
+
* without an HTTP shell. Returns one of `SaveResult`'s typed
|
|
37
|
+
* variants — caller projects to HTTP (200 / 409) or CLI exit code.
|
|
38
|
+
*/
|
|
39
|
+
export interface SavePageInput {
|
|
40
|
+
/** Page name (folder name under `pages/`). */
|
|
41
|
+
readonly name: string;
|
|
42
|
+
/** BCP-47 locale when saving a Locale Variant; undefined for default. */
|
|
43
|
+
readonly locale?: string;
|
|
44
|
+
/** Incoming manifest body (template/content/components/metadata). */
|
|
45
|
+
readonly body: Partial<PageManifest> & Record<string, unknown>;
|
|
46
|
+
/** Optional save-etag for concurrency check. */
|
|
47
|
+
readonly ifMatch?: string;
|
|
48
|
+
/** Loaded site (caller does `loadSiteFromSource(source)` once). */
|
|
49
|
+
readonly site: Site;
|
|
50
|
+
/** Source wiring (cache, history, storage, contentRoot, manifest, targetName). */
|
|
51
|
+
readonly source: SaveSourceWiring;
|
|
52
|
+
/** Authenticated principal driving this save. */
|
|
53
|
+
readonly principal: SavePrincipal;
|
|
54
|
+
/** Audit recorder bound to the request. */
|
|
55
|
+
readonly audit: SaveAuditRecorder;
|
|
56
|
+
/** Validator registry built once at admin boot. */
|
|
57
|
+
readonly validators: ValidatorRegistry;
|
|
58
|
+
/** Hook registry; absent when no hooks contributed. */
|
|
59
|
+
readonly hooks?: HookRegistry;
|
|
60
|
+
/** Audit-firing emitter for hook dispatch. */
|
|
61
|
+
readonly hookAuditEmit?: HookFiringEmitter;
|
|
62
|
+
/** Background scanner; absent when scanner not enabled. */
|
|
63
|
+
readonly scanner?: ValidationScanner;
|
|
64
|
+
/** Per-request correlation id; fresh UUID when absent. */
|
|
65
|
+
readonly requestId?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Page-name-not-found error. The route projects this to a 404; the
|
|
69
|
+
* pipeline can't compose the full save without a `before` manifest
|
|
70
|
+
* (etag check, validators, sidecar diffs all need it). Distinct
|
|
71
|
+
* from the typed `SaveResult` variants because absence-of-target is
|
|
72
|
+
* a route-level precondition, not a save-pipeline outcome.
|
|
73
|
+
*/
|
|
74
|
+
export declare class PageNotFoundError extends Error {
|
|
75
|
+
readonly name: string;
|
|
76
|
+
constructor(name: string);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Invalid locale code per `isValidLocale`. Routes project to 400.
|
|
80
|
+
*/
|
|
81
|
+
export declare class InvalidLocaleError extends Error {
|
|
82
|
+
readonly raw: string;
|
|
83
|
+
constructor(raw: string);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Save a Page Manifest. Wraps `saveManifestCore` with the Page-specific
|
|
87
|
+
* resolution + assembly. Throws `PageNotFoundError` / `InvalidLocaleError`
|
|
88
|
+
* for route-level preconditions; returns `SaveResult` for save outcomes.
|
|
89
|
+
*
|
|
90
|
+
* Caller responsibilities:
|
|
91
|
+
* - Capability check (`requireCapability('edit:pages')`) before calling
|
|
92
|
+
* - HTTP projection of `SaveResult` (200 success, 409 STALE /
|
|
93
|
+
* VALIDATION_FAILED / HOOK_CANCELLED with appropriate body shape)
|
|
94
|
+
* - Setting the `ETag` response header on success from `result.etag`
|
|
95
|
+
*/
|
|
96
|
+
export declare function savePage(input: SavePageInput): Promise<SaveResult>;
|
|
97
|
+
//# sourceMappingURL=save.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/pages/save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAExE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9D,gDAAgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAA;IACtC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAA;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAC1C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aACd,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAIzC;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aACf,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;CAIxC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAqExE"}
|