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,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walks a JSON Schema (converted from a template's Zod schema) and returns
|
|
3
|
+
* the field paths where `assetOptions.altRequired === true`.
|
|
4
|
+
*
|
|
5
|
+
* Field paths use dot notation; arrays use `[]`:
|
|
6
|
+
* - `hero` — top-level field
|
|
7
|
+
* - `cards.image` — nested object field
|
|
8
|
+
* - `gallery[].image` — field inside an array's items
|
|
9
|
+
*
|
|
10
|
+
* Pure function — no I/O. Tested in isolation; the validator wraps it.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Return every JSON-pointer-style path within `schema` whose subschema has
|
|
14
|
+
* `assetOptions.altRequired === true`. Paths join nested object keys with
|
|
15
|
+
* `.`; array items are indicated by `[]`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function findAltRequiredPaths(schema: unknown): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Read the value at a JSON-pointer-style path within `value`. Returns the
|
|
20
|
+
* raw JS object/array/primitive. For array paths (`gallery[]`), returns the
|
|
21
|
+
* array; the caller iterates elements.
|
|
22
|
+
*
|
|
23
|
+
* Symmetric with `findAltRequiredPaths` — paths produced by the walker are
|
|
24
|
+
* resolvable here.
|
|
25
|
+
*/
|
|
26
|
+
export declare function readAtPath(value: unknown, path: string): unknown[];
|
|
27
|
+
//# sourceMappingURL=alt-required-walker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alt-required-walker.d.ts","sourceRoot":"","sources":["../../src/validation/alt-required-walker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAI9D;AAqCD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAIlE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walks a JSON Schema (converted from a template's Zod schema) and returns
|
|
3
|
+
* the field paths where `assetOptions.altRequired === true`.
|
|
4
|
+
*
|
|
5
|
+
* Field paths use dot notation; arrays use `[]`:
|
|
6
|
+
* - `hero` — top-level field
|
|
7
|
+
* - `cards.image` — nested object field
|
|
8
|
+
* - `gallery[].image` — field inside an array's items
|
|
9
|
+
*
|
|
10
|
+
* Pure function — no I/O. Tested in isolation; the validator wraps it.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Return every JSON-pointer-style path within `schema` whose subschema has
|
|
14
|
+
* `assetOptions.altRequired === true`. Paths join nested object keys with
|
|
15
|
+
* `.`; array items are indicated by `[]`.
|
|
16
|
+
*/
|
|
17
|
+
export function findAltRequiredPaths(schema) {
|
|
18
|
+
const out = [];
|
|
19
|
+
walk(schema, '', out);
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
function walk(schema, path, out) {
|
|
23
|
+
if (!schema || typeof schema !== 'object')
|
|
24
|
+
return;
|
|
25
|
+
// Hit on this node.
|
|
26
|
+
if (schema.assetOptions?.altRequired === true) {
|
|
27
|
+
out.push(path || '<root>');
|
|
28
|
+
// Don't descend further — the embeddedAsset() shape is a leaf in walker
|
|
29
|
+
// semantics. Anything below is the asset reference's own structure.
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Object properties.
|
|
33
|
+
if (schema.properties) {
|
|
34
|
+
for (const [key, sub] of Object.entries(schema.properties)) {
|
|
35
|
+
walk(sub, path ? `${path}.${key}` : key, out);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Array items.
|
|
39
|
+
if (schema.items) {
|
|
40
|
+
const items = Array.isArray(schema.items) ? schema.items : [schema.items];
|
|
41
|
+
for (const sub of items) {
|
|
42
|
+
walk(sub, `${path}[]`, out);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Union schemas (oneOf / anyOf / allOf) — descend into every branch since
|
|
46
|
+
// any branch could carry altRequired metadata.
|
|
47
|
+
for (const key of ['oneOf', 'anyOf', 'allOf']) {
|
|
48
|
+
const arr = schema[key];
|
|
49
|
+
if (!Array.isArray(arr))
|
|
50
|
+
continue;
|
|
51
|
+
for (const sub of arr)
|
|
52
|
+
walk(sub, path, out);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Read the value at a JSON-pointer-style path within `value`. Returns the
|
|
57
|
+
* raw JS object/array/primitive. For array paths (`gallery[]`), returns the
|
|
58
|
+
* array; the caller iterates elements.
|
|
59
|
+
*
|
|
60
|
+
* Symmetric with `findAltRequiredPaths` — paths produced by the walker are
|
|
61
|
+
* resolvable here.
|
|
62
|
+
*/
|
|
63
|
+
export function readAtPath(value, path) {
|
|
64
|
+
if (path === '<root>')
|
|
65
|
+
return value === undefined ? [] : [value];
|
|
66
|
+
const segments = parsePath(path);
|
|
67
|
+
return resolve(value, segments);
|
|
68
|
+
}
|
|
69
|
+
function parsePath(path) {
|
|
70
|
+
const out = [];
|
|
71
|
+
let i = 0;
|
|
72
|
+
while (i < path.length) {
|
|
73
|
+
if (path[i] === '.') {
|
|
74
|
+
i++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (path[i] === '[' && path[i + 1] === ']') {
|
|
78
|
+
out.push({ kind: 'array' });
|
|
79
|
+
i += 2;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
let j = i;
|
|
83
|
+
while (j < path.length && path[j] !== '.' && path[j] !== '[')
|
|
84
|
+
j++;
|
|
85
|
+
out.push({ kind: 'key', name: path.slice(i, j) });
|
|
86
|
+
i = j;
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
function resolve(value, segments, depth = 0) {
|
|
91
|
+
if (depth === segments.length) {
|
|
92
|
+
return value === undefined || value === null ? [] : [value];
|
|
93
|
+
}
|
|
94
|
+
const seg = segments[depth];
|
|
95
|
+
if (seg.kind === 'array') {
|
|
96
|
+
if (!Array.isArray(value))
|
|
97
|
+
return [];
|
|
98
|
+
const out = [];
|
|
99
|
+
for (const item of value)
|
|
100
|
+
out.push(...resolve(item, segments, depth + 1));
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
if (typeof value !== 'object' || value === null)
|
|
104
|
+
return [];
|
|
105
|
+
const next = value[seg.name];
|
|
106
|
+
return resolve(next, segments, depth + 1);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=alt-required-walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alt-required-walker.js","sourceRoot":"","sources":["../../src/validation/alt-required-walker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ValidatorRegistry } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default validator registry — Cut 1 (ref-existence) + Cut 2 (background-
|
|
4
|
+
* only) + Cut 3 (quality: a11y, html-validity, altRequired) + Cut 4
|
|
5
|
+
* (broken-links).
|
|
6
|
+
*
|
|
7
|
+
* Each validator declares its own stage support, so adding entries here is
|
|
8
|
+
* safe: validators that don't apply to a given stage are filtered out by
|
|
9
|
+
* `registry.forStage(stage)`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function defaultValidatorRegistry(): ValidatorRegistry;
|
|
12
|
+
//# sourceMappingURL=default-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-registry.d.ts","sourceRoot":"","sources":["../../src/validation/default-registry.ts"],"names":[],"mappings":"AAmBA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE/E;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,CAwB5D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { accessibility } from './validators/accessibility.js';
|
|
2
|
+
import { aliasOfPointsToArchived } from './validators/aliasof-points-to-archived.js';
|
|
3
|
+
import { altRequired } from './validators/alt-required.js';
|
|
4
|
+
import { archiveNotSupportedOnTarget } from './validators/archive-not-supported-on-target.js';
|
|
5
|
+
import { brokenLinks } from './validators/broken-links.js';
|
|
6
|
+
import { circularAlias } from './validators/circular-alias.js';
|
|
7
|
+
import { circularFragment } from './validators/circular-fragment.js';
|
|
8
|
+
import { danglingAlias } from './validators/dangling-alias.js';
|
|
9
|
+
import { deployTargetTypeSupported } from './validators/deploy-target-type-supported.js';
|
|
10
|
+
import { dynamicRouteConflict } from './validators/dynamic-route-conflict.js';
|
|
11
|
+
import { htmlValidity } from './validators/html-validity.js';
|
|
12
|
+
import { orphanedLocaleFile } from './validators/orphaned-locale-file.js';
|
|
13
|
+
import { referencedArchivedWithoutAlias } from './validators/referenced-archived-without-alias.js';
|
|
14
|
+
import { referencedAssetExists } from './validators/referenced-asset-exists.js';
|
|
15
|
+
import { referencedFragmentExists } from './validators/referenced-fragment-exists.js';
|
|
16
|
+
import { referencedTemplateExists } from './validators/referenced-template-exists.js';
|
|
17
|
+
import { schemaConformance } from './validators/schema-conformance.js';
|
|
18
|
+
import { targetDeployCoverage } from './validators/target-deploy-coverage.js';
|
|
19
|
+
import { unusedFragment } from './validators/unused-fragment.js';
|
|
20
|
+
import { createValidatorRegistry } from './registry.js';
|
|
21
|
+
/**
|
|
22
|
+
* Default validator registry — Cut 1 (ref-existence) + Cut 2 (background-
|
|
23
|
+
* only) + Cut 3 (quality: a11y, html-validity, altRequired) + Cut 4
|
|
24
|
+
* (broken-links).
|
|
25
|
+
*
|
|
26
|
+
* Each validator declares its own stage support, so adding entries here is
|
|
27
|
+
* safe: validators that don't apply to a given stage are filtered out by
|
|
28
|
+
* `registry.forStage(stage)`.
|
|
29
|
+
*/
|
|
30
|
+
export function defaultValidatorRegistry() {
|
|
31
|
+
return createValidatorRegistry([
|
|
32
|
+
referencedAssetExists,
|
|
33
|
+
referencedFragmentExists,
|
|
34
|
+
referencedTemplateExists,
|
|
35
|
+
circularFragment,
|
|
36
|
+
dynamicRouteConflict,
|
|
37
|
+
schemaConformance,
|
|
38
|
+
orphanedLocaleFile,
|
|
39
|
+
unusedFragment,
|
|
40
|
+
altRequired,
|
|
41
|
+
htmlValidity,
|
|
42
|
+
accessibility,
|
|
43
|
+
brokenLinks,
|
|
44
|
+
// Soft-delete validators per design-soft-delete.md Q11 (P1-P5).
|
|
45
|
+
referencedArchivedWithoutAlias,
|
|
46
|
+
danglingAlias,
|
|
47
|
+
circularAlias,
|
|
48
|
+
archiveNotSupportedOnTarget,
|
|
49
|
+
aliasOfPointsToArchived,
|
|
50
|
+
// Deploy validators per design-deploy.md Cut 2.
|
|
51
|
+
deployTargetTypeSupported,
|
|
52
|
+
targetDeployCoverage,
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=default-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-registry.js","sourceRoot":"","sources":["../../src/validation/default-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAA;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAA;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAA0B,MAAM,eAAe,CAAA;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,uBAAuB,CAAC;QAC7B,qBAAqB;QACrB,wBAAwB;QACxB,wBAAwB;QACxB,gBAAgB;QAChB,oBAAoB;QACpB,iBAAiB;QACjB,kBAAkB;QAClB,cAAc;QACd,WAAW;QACX,YAAY;QACZ,aAAa;QACb,WAAW;QACX,gEAAgE;QAChE,8BAA8B;QAC9B,aAAa;QACb,aAAa;QACb,2BAA2B;QAC3B,uBAAuB;QACvB,gDAAgD;QAChD,yBAAyB;QACzB,oBAAoB;KACrB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-publish audit orchestrator (Validation Cut 4).
|
|
3
|
+
*
|
|
4
|
+
* Runs every `pre-publish`-stage validator against the items the operator
|
|
5
|
+
* is about to publish. Applies `publishAudit.strict` promotion (warns →
|
|
6
|
+
* errors) when the target opts in. Returns the consolidated Issue[].
|
|
7
|
+
*
|
|
8
|
+
* This is the shared core that both the audit endpoint
|
|
9
|
+
* (`POST /api/publish/audit`) and the publish gate
|
|
10
|
+
* (server-side enforcement at `POST /api/publish`) call. Same code, same
|
|
11
|
+
* results — operator can't bypass the gate by skipping the audit endpoint
|
|
12
|
+
* because the publish handler runs the audit itself.
|
|
13
|
+
*
|
|
14
|
+
* # SOLID lenses
|
|
15
|
+
*
|
|
16
|
+
* - SRP: this module orchestrates one pre-publish pass. Validators stay
|
|
17
|
+
* in their files; rendering stays in render-for-analysis.
|
|
18
|
+
* - DIP: depends on `ValidatorRegistry`, `AdminCache`, `Site` interfaces.
|
|
19
|
+
* - OCP: adding new pre-publish validators is one entry in the default
|
|
20
|
+
* registry; this module unchanged.
|
|
21
|
+
*/
|
|
22
|
+
import type { AdminCache } from '../cache/types.js';
|
|
23
|
+
import type { ContentRoot } from '../content-root.js';
|
|
24
|
+
import type { Site } from '../site-loader.js';
|
|
25
|
+
import type { StorageProvider } from '../types.js';
|
|
26
|
+
import type { ValidatorRegistry } from './registry.js';
|
|
27
|
+
import type { Issue } from './types.js';
|
|
28
|
+
export interface RunPublishAuditOptions {
|
|
29
|
+
items: ReadonlyArray<{
|
|
30
|
+
kind: 'page' | 'fragment';
|
|
31
|
+
name: string;
|
|
32
|
+
}>;
|
|
33
|
+
site: Site;
|
|
34
|
+
contentRoot: ContentRoot;
|
|
35
|
+
storage: StorageProvider;
|
|
36
|
+
registry: ValidatorRegistry;
|
|
37
|
+
/** Reused render-for-analysis cache. When omitted, each call re-renders. */
|
|
38
|
+
cache?: AdminCache;
|
|
39
|
+
/** Per-target strict flag — promotes warns to errors when true. */
|
|
40
|
+
strict: boolean;
|
|
41
|
+
templatesDir?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function runPublishAudit(opts: RunPublishAuditOptions): Promise<Issue[]>;
|
|
44
|
+
//# sourceMappingURL=publish-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-audit.d.ts","sourceRoot":"","sources":["../../src/validation/publish-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAA;AAExE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjE,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,eAAe,CAAA;IACxB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CA4DpF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { renderPageForAnalysis } from '../render-for-analysis.js';
|
|
2
|
+
export async function runPublishAudit(opts) {
|
|
3
|
+
const { items, site, contentRoot, storage, registry, cache, strict, templatesDir } = opts;
|
|
4
|
+
const validators = registry.forStage('pre-publish');
|
|
5
|
+
if (validators.length === 0)
|
|
6
|
+
return [];
|
|
7
|
+
// Map the request items to SavedItem with itemPath. Pages + fragments only;
|
|
8
|
+
// anything else is rejected by the route's body schema, but be defensive.
|
|
9
|
+
const savedItems = [];
|
|
10
|
+
for (const i of items) {
|
|
11
|
+
if (i.kind === 'page') {
|
|
12
|
+
const page = site.pages.get(i.name);
|
|
13
|
+
if (!page)
|
|
14
|
+
continue;
|
|
15
|
+
savedItems.push({ kind: 'page', name: i.name, itemPath: `${page.dir}/page.json` });
|
|
16
|
+
}
|
|
17
|
+
else if (i.kind === 'fragment') {
|
|
18
|
+
const frag = site.fragments.get(i.name);
|
|
19
|
+
if (!frag)
|
|
20
|
+
continue;
|
|
21
|
+
savedItems.push({ kind: 'fragment', name: i.name, itemPath: `${frag.dir}/fragment.json` });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (savedItems.length === 0)
|
|
25
|
+
return [];
|
|
26
|
+
const renderedOutput = cache && templatesDir
|
|
27
|
+
? {
|
|
28
|
+
async htmlFor(item) {
|
|
29
|
+
if (item.kind !== 'page')
|
|
30
|
+
return null;
|
|
31
|
+
const out = await renderPageForAnalysis(item.name, { site, cache, templatesDir });
|
|
32
|
+
return out?.html ?? null;
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
: undefined;
|
|
36
|
+
const out = [];
|
|
37
|
+
for (const v of validators) {
|
|
38
|
+
try {
|
|
39
|
+
const issues = await v.validate({
|
|
40
|
+
stage: 'pre-publish',
|
|
41
|
+
site,
|
|
42
|
+
contentRoot,
|
|
43
|
+
storage,
|
|
44
|
+
scope: { kind: 'pre-publish', items: savedItems },
|
|
45
|
+
renderedOutput,
|
|
46
|
+
});
|
|
47
|
+
out.push(...issues);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
out.push({
|
|
51
|
+
validator: v.name,
|
|
52
|
+
severity: 'info',
|
|
53
|
+
message: `Validator "${v.name}" failed: ${err.message}`,
|
|
54
|
+
itemPath: savedItems[0]?.itemPath ?? 'site',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Strict promotion: warns become errors at the publish gate.
|
|
59
|
+
if (strict) {
|
|
60
|
+
return out.map(issue => (issue.severity === 'warn' ? { ...issue, severity: 'error' } : issue));
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=publish-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-audit.js","sourceRoot":"","sources":["../../src/validation/publish-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ValidationStage, Validator } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry of validators keyed by stage. Cut 1 ships with 5 reference-existence
|
|
4
|
+
* validators; Cut 2 adds background-only validators (orphaned-locale-file,
|
|
5
|
+
* unused-fragment); Cut 3 adds quality validators (axe-core, html-validate).
|
|
6
|
+
*
|
|
7
|
+
* The registry is the single dispatch surface — `runSaveDelta` /
|
|
8
|
+
* `runBackgroundScan` / publish-gate / `gazetta validate` all consume the same
|
|
9
|
+
* registry, filtering by stage. Adding a new validator is one new file + one
|
|
10
|
+
* line in `defaultRegistry()`.
|
|
11
|
+
*
|
|
12
|
+
* DIP: orchestrators depend on this abstraction, not on individual validators.
|
|
13
|
+
*/
|
|
14
|
+
export interface ValidatorRegistry {
|
|
15
|
+
/** All registered validators. */
|
|
16
|
+
all(): readonly Validator[];
|
|
17
|
+
/** Validators that declare support for `stage`. */
|
|
18
|
+
forStage(stage: ValidationStage): readonly Validator[];
|
|
19
|
+
/** Add a validator at runtime — used by tests and (future) plugin consumers. */
|
|
20
|
+
register(validator: Validator): void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createValidatorRegistry(initial?: readonly Validator[]): ValidatorRegistry;
|
|
23
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/validation/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE5D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,GAAG,IAAI,SAAS,SAAS,EAAE,CAAA;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,SAAS,EAAE,CAAA;IACtD,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CACrC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,SAAS,SAAS,EAAO,GAAG,iBAAiB,CAa7F"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function createValidatorRegistry(initial = []) {
|
|
2
|
+
const validators = [...initial];
|
|
3
|
+
return {
|
|
4
|
+
all() {
|
|
5
|
+
return validators;
|
|
6
|
+
},
|
|
7
|
+
forStage(stage) {
|
|
8
|
+
return validators.filter(v => v.stages.includes(stage));
|
|
9
|
+
},
|
|
10
|
+
register(validator) {
|
|
11
|
+
validators.push(validator);
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/validation/registry.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,uBAAuB,CAAC,UAAgC,EAAE;IACxE,MAAM,UAAU,GAAgB,CAAC,GAAG,OAAO,CAAC,CAAA;IAC5C,OAAO;QACL,GAAG;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,QAAQ,CAAC,KAAK;YACZ,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,QAAQ,CAAC,SAAS;YAChB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC5B,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { FragmentManifest, PageManifest, StorageProvider } from '../types.js';
|
|
2
|
+
import type { Site } from '../site-loader.js';
|
|
3
|
+
import type { ContentRoot } from '../content-root.js';
|
|
4
|
+
import type { Issue, SavedItem } from './types.js';
|
|
5
|
+
import type { ValidatorRegistry } from './registry.js';
|
|
6
|
+
/**
|
|
7
|
+
* Inputs to runSaveDelta. All required — orchestrator does no I/O on the
|
|
8
|
+
* caller's behalf. The save handler reads the existing manifest from storage
|
|
9
|
+
* (when updating) or passes null (when creating) and provides the in-memory
|
|
10
|
+
* site state.
|
|
11
|
+
*/
|
|
12
|
+
export interface SaveDeltaInput {
|
|
13
|
+
/** What's being saved — page or fragment. */
|
|
14
|
+
item: SavedItem;
|
|
15
|
+
/** On-disk manifest before this save (null when creating a new item). */
|
|
16
|
+
before: PageManifest | FragmentManifest | null;
|
|
17
|
+
/** The incoming manifest being saved. */
|
|
18
|
+
after: PageManifest | FragmentManifest;
|
|
19
|
+
/** Site context loaded by the route handler. */
|
|
20
|
+
site: Site;
|
|
21
|
+
contentRoot: ContentRoot;
|
|
22
|
+
storage: StorageProvider;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Run all save-delta-stage validators against the saved manifest.
|
|
26
|
+
*
|
|
27
|
+
* Returns the union of issues across all save-delta validators. Validators
|
|
28
|
+
* that don't apply to the item's kind (e.g., circular-fragment on a page)
|
|
29
|
+
* silently produce zero issues. Errors from one validator do not affect
|
|
30
|
+
* others.
|
|
31
|
+
*
|
|
32
|
+
* The route handler decides what to do with the result — typically:
|
|
33
|
+
* non-empty `error` issues → 409 with `{ code, issues }`; otherwise proceed
|
|
34
|
+
* to write the manifest.
|
|
35
|
+
*
|
|
36
|
+
* DIP: orchestrator depends on the registry abstraction. Adding a new
|
|
37
|
+
* save-delta validator is one new file + one entry in `defaultValidatorRegistry()`,
|
|
38
|
+
* with no change here.
|
|
39
|
+
*/
|
|
40
|
+
export declare function runSaveDelta(input: SaveDeltaInput, registry: ValidatorRegistry): Promise<Issue[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Convenience helper — true when any issue is `error`-severity. Save handlers
|
|
43
|
+
* use this to decide between 409 (block) and proceed.
|
|
44
|
+
*/
|
|
45
|
+
export declare function hasBlockingIssues(issues: readonly Issue[]): boolean;
|
|
46
|
+
//# sourceMappingURL=save-delta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save-delta.d.ts","sourceRoot":"","sources":["../../src/validation/save-delta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,IAAI,EAAE,SAAS,CAAA;IACf,yEAAyE;IACzE,MAAM,EAAE,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAA;IAC9C,yCAAyC;IACzC,KAAK,EAAE,YAAY,GAAG,gBAAgB,CAAA;IACtC,gDAAgD;IAChD,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,eAAe,CAAA;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAkCvG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,OAAO,CAEnE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run all save-delta-stage validators against the saved manifest.
|
|
3
|
+
*
|
|
4
|
+
* Returns the union of issues across all save-delta validators. Validators
|
|
5
|
+
* that don't apply to the item's kind (e.g., circular-fragment on a page)
|
|
6
|
+
* silently produce zero issues. Errors from one validator do not affect
|
|
7
|
+
* others.
|
|
8
|
+
*
|
|
9
|
+
* The route handler decides what to do with the result — typically:
|
|
10
|
+
* non-empty `error` issues → 409 with `{ code, issues }`; otherwise proceed
|
|
11
|
+
* to write the manifest.
|
|
12
|
+
*
|
|
13
|
+
* DIP: orchestrator depends on the registry abstraction. Adding a new
|
|
14
|
+
* save-delta validator is one new file + one entry in `defaultValidatorRegistry()`,
|
|
15
|
+
* with no change here.
|
|
16
|
+
*/
|
|
17
|
+
export async function runSaveDelta(input, registry) {
|
|
18
|
+
const validatorInput = {
|
|
19
|
+
stage: 'save-delta',
|
|
20
|
+
site: input.site,
|
|
21
|
+
contentRoot: input.contentRoot,
|
|
22
|
+
storage: input.storage,
|
|
23
|
+
scope: {
|
|
24
|
+
kind: 'save-delta',
|
|
25
|
+
item: input.item,
|
|
26
|
+
before: input.before,
|
|
27
|
+
after: input.after,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
const validators = registry.forStage('save-delta');
|
|
31
|
+
const results = await Promise.all(validators.map(async (v) => {
|
|
32
|
+
try {
|
|
33
|
+
return await v.validate(validatorInput);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
// Infrastructure error — log and surface as a synthetic issue so the
|
|
37
|
+
// save flow can continue and the author sees something.
|
|
38
|
+
return [
|
|
39
|
+
{
|
|
40
|
+
validator: v.name,
|
|
41
|
+
severity: 'error',
|
|
42
|
+
message: `Validator "${v.name}" failed: ${err.message}`,
|
|
43
|
+
itemPath: input.item.itemPath,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
return results.flat();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Convenience helper — true when any issue is `error`-severity. Save handlers
|
|
52
|
+
* use this to decide between 409 (block) and proceed.
|
|
53
|
+
*/
|
|
54
|
+
export function hasBlockingIssues(issues) {
|
|
55
|
+
return issues.some(i => i.severity === 'error');
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=save-delta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save-delta.js","sourceRoot":"","sources":["../../src/validation/save-delta.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAqB,EAAE,QAA2B;IACnF,MAAM,cAAc,GAAmB;QACrC,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE;YACL,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB;KACF,CAAA;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,wDAAwD;YACxD,OAAO;gBACL;oBACE,SAAS,EAAE,CAAC,CAAC,IAAI;oBACjB,QAAQ,EAAE,OAAgB;oBAC1B,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,aAAc,GAAa,CAAC,OAAO,EAAE;oBAClE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;iBAC9B;aACF,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { AdminCache } from '../cache/types.js';
|
|
2
|
+
import type { ContentRoot } from '../content-root.js';
|
|
3
|
+
import type { Site, LoadSiteOptions } from '../site-loader.js';
|
|
4
|
+
import type { StorageProvider } from '../types.js';
|
|
5
|
+
import type { ValidatorRegistry } from './registry.js';
|
|
6
|
+
import type { Issue, SavedItem } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Source of an incremental rescan. Drives which dependents the scanner
|
|
9
|
+
* pulls in.
|
|
10
|
+
*/
|
|
11
|
+
export type RescanCause =
|
|
12
|
+
/** Manifest of a page or fragment was saved/edited. */
|
|
13
|
+
{
|
|
14
|
+
kind: 'manifest';
|
|
15
|
+
item: SavedItem;
|
|
16
|
+
}
|
|
17
|
+
/** Fragment edited — the scanner walks dependents transitively. */
|
|
18
|
+
| {
|
|
19
|
+
kind: 'fragment';
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
/** Asset edited — the scanner walks the asset's referrers. */
|
|
23
|
+
| {
|
|
24
|
+
kind: 'asset';
|
|
25
|
+
name: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Template source changed — full-site rescan is the fallback.
|
|
29
|
+
* After the rescan, the scanner populates `affectedItemCount` on the
|
|
30
|
+
* emitted `ScanEvent.cause` (count of items using the template that
|
|
31
|
+
* have any issue after the pass). The TemplateChangedBanner reads
|
|
32
|
+
* this for its "N items affected" message.
|
|
33
|
+
*/
|
|
34
|
+
| {
|
|
35
|
+
kind: 'template';
|
|
36
|
+
name: string;
|
|
37
|
+
affectedItemCount?: number;
|
|
38
|
+
}
|
|
39
|
+
/** Out-of-band change detected by file watcher; full-site rescan. */
|
|
40
|
+
| {
|
|
41
|
+
kind: 'full';
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Event published when a scan pass finishes. SSE consumers receive these.
|
|
45
|
+
*
|
|
46
|
+
* `cause` carries the rescan trigger when known. The initial `scanAll()`
|
|
47
|
+
* pass at boot omits it (full-site scan with no specific trigger). The
|
|
48
|
+
* file watcher's incremental rescans pass through their `RescanCause`
|
|
49
|
+
* so consumers can react differently per kind — e.g., the
|
|
50
|
+
* template-developer banner (Cut 6) only surfaces when
|
|
51
|
+
* `cause.kind === 'template'`.
|
|
52
|
+
*/
|
|
53
|
+
export interface ScanEvent {
|
|
54
|
+
/** Wall-clock duration of the scan, ms. */
|
|
55
|
+
durationMs: number;
|
|
56
|
+
/** Number of items the scan touched. 0 means cache-hit-only or no items. */
|
|
57
|
+
scanned: number;
|
|
58
|
+
/** Total number of issues across the site after this scan. */
|
|
59
|
+
totalIssues: number;
|
|
60
|
+
/** Trigger that caused the rescan, when known. Omitted for boot scans. */
|
|
61
|
+
cause?: RescanCause;
|
|
62
|
+
}
|
|
63
|
+
export type ScanSubscriber = (event: ScanEvent) => void;
|
|
64
|
+
export interface ValidationScanner {
|
|
65
|
+
/** Run a full-site scan; updates store + cache. Idempotent. */
|
|
66
|
+
scanAll(): Promise<void>;
|
|
67
|
+
/** Incremental rescan triggered by `cause`. */
|
|
68
|
+
rescan(cause: RescanCause): Promise<void>;
|
|
69
|
+
/** All current issues. */
|
|
70
|
+
allIssues(): readonly Issue[];
|
|
71
|
+
/** Current issues for one item; empty if clean. */
|
|
72
|
+
issuesFor(itemPath: string): readonly Issue[];
|
|
73
|
+
/** Subscribe to scan-completed events. Returns disposer. */
|
|
74
|
+
subscribe(handler: ScanSubscriber): () => void;
|
|
75
|
+
}
|
|
76
|
+
export interface CreateScannerOptions {
|
|
77
|
+
storage: StorageProvider;
|
|
78
|
+
contentRoot: ContentRoot;
|
|
79
|
+
registry: ValidatorRegistry;
|
|
80
|
+
cache: AdminCache;
|
|
81
|
+
/** Hook to load the site (extracted so tests can stub). */
|
|
82
|
+
loadSiteImpl?: (opts: LoadSiteOptions) => Promise<Site>;
|
|
83
|
+
/** Site loader options used at every refresh. */
|
|
84
|
+
siteOptions: Omit<LoadSiteOptions, 'contentRoot'>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Construct a scanner. The scanner doesn't kick off `scanAll()` automatically;
|
|
88
|
+
* callers (CLI boot path) call it after constructing.
|
|
89
|
+
*/
|
|
90
|
+
export declare function createValidationScanner(opts: CreateScannerOptions): ValidationScanner;
|
|
91
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/validation/scanner.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,KAAK,EAAkC,eAAe,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAwB,SAAS,EAAE,MAAM,YAAY,CAAA;AAExE;;;GAGG;AACH,MAAM,MAAM,WAAW;AACrB,uDAAuD;AACrD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE;AACvC,mEAAmE;GACjE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACpC,8DAA8D;GAC5D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACjC;;;;;;GAMG;GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE;AAChE,qEAAqE;GACnE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpB;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;AAEvD,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,+CAA+C;IAC/C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,0BAA0B;IAC1B,SAAS,IAAI,SAAS,KAAK,EAAE,CAAA;IAC7B,mDAAmD;IACnD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,EAAE,CAAA;IAC7C,4DAA4D;IAC5D,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,KAAK,EAAE,UAAU,CAAA;IACjB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,iDAAiD;IACjD,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;CAClD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,CA2NrF"}
|