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/targets.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { resolve, join } from 'node:path';
|
|
2
1
|
import { isEditable } from './types.js';
|
|
3
|
-
import { createFilesystemProvider } from './providers/filesystem.js';
|
|
4
2
|
export class UnknownTargetError extends Error {
|
|
5
3
|
constructor(name) {
|
|
6
4
|
super(`Unknown target: ${name}`);
|
|
@@ -9,14 +7,15 @@ export class UnknownTargetError extends Error {
|
|
|
9
7
|
}
|
|
10
8
|
export class NoEditableTargetError extends Error {
|
|
11
9
|
constructor() {
|
|
12
|
-
super('No editable target is configured. At least one target in site.
|
|
10
|
+
super('No editable target is configured. At least one target in site.config.ts must be editable.');
|
|
13
11
|
this.name = 'NoEditableTargetError';
|
|
14
12
|
}
|
|
15
13
|
}
|
|
16
14
|
/**
|
|
17
15
|
* Build a TargetRegistry from already-initialized providers and their configs.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* Per Phase 1 (Path X), storage providers are constructed by operator-facing
|
|
17
|
+
* factories at config-eval time; the registry consumes the resulting
|
|
18
|
+
* `StorageProvider` instances directly. Tests pass in-memory providers.
|
|
20
19
|
*/
|
|
21
20
|
export function createTargetRegistryView(providers, configs) {
|
|
22
21
|
const orderedNames = Object.keys(configs);
|
|
@@ -49,94 +48,19 @@ export function listEditableTargets(configs) {
|
|
|
49
48
|
.filter(([, cfg]) => isEditable(cfg))
|
|
50
49
|
.map(([name]) => name);
|
|
51
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Expand `${VAR}` placeholders in a string by reading from `process.env`.
|
|
53
|
+
* Empty or undefined input passes through. Used by purge-config resolution
|
|
54
|
+
* (`PurgeConfig.apiToken`, `zoneId`) where operators may reference env
|
|
55
|
+
* vars without writing `process.env.X!` directly. Storage credentials
|
|
56
|
+
* use `process.env.X!` at the factory call site (Path X) and don't go
|
|
57
|
+
* through this helper.
|
|
58
|
+
*/
|
|
52
59
|
export function resolveEnvVars(value) {
|
|
53
60
|
if (!value)
|
|
54
61
|
return value;
|
|
55
62
|
return value.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] ?? '');
|
|
56
63
|
}
|
|
57
|
-
/**
|
|
58
|
-
* Build a storage provider from config.
|
|
59
|
-
*
|
|
60
|
-
* For filesystem targets, `path` defaults to `./targets/<targetName>` (relative
|
|
61
|
-
* to the site dir). Users can override by setting `path` explicitly in
|
|
62
|
-
* site.yaml — useful for shared drives, existing layouts, or multi-site setups
|
|
63
|
-
* that need custom paths. If neither `path` nor `targetName` is available for
|
|
64
|
-
* a filesystem target, throws.
|
|
65
|
-
*/
|
|
66
|
-
export async function createStorageProvider(config, siteDir, targetName) {
|
|
67
|
-
switch (config.type) {
|
|
68
|
-
case 'filesystem': {
|
|
69
|
-
const path = config.path ?? (targetName ? join('targets', targetName) : undefined);
|
|
70
|
-
if (!path)
|
|
71
|
-
throw new Error('Filesystem storage requires "path" (or a target name to derive the default from)');
|
|
72
|
-
return createFilesystemProvider(resolve(siteDir, path));
|
|
73
|
-
}
|
|
74
|
-
case 'azure-blob': {
|
|
75
|
-
const connectionString = resolveEnvVars(config.connectionString);
|
|
76
|
-
if (!connectionString)
|
|
77
|
-
throw new Error('Azure Blob storage requires "connectionString"');
|
|
78
|
-
if (!config.container)
|
|
79
|
-
throw new Error('Azure Blob storage requires "container"');
|
|
80
|
-
try {
|
|
81
|
-
const { createAzureBlobProvider } = await import('./providers/azure-blob.js');
|
|
82
|
-
return createAzureBlobProvider({ connectionString, container: config.container });
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
throw new Error('Azure Blob storage requires @azure/storage-blob. Install it: npm install @azure/storage-blob');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
case 's3': {
|
|
89
|
-
const endpoint = resolveEnvVars(config.endpoint);
|
|
90
|
-
if (!endpoint)
|
|
91
|
-
throw new Error('S3 storage requires "endpoint"');
|
|
92
|
-
if (!config.bucket)
|
|
93
|
-
throw new Error('S3 storage requires "bucket"');
|
|
94
|
-
try {
|
|
95
|
-
const { createS3Provider } = await import('./providers/s3.js');
|
|
96
|
-
return createS3Provider({
|
|
97
|
-
endpoint,
|
|
98
|
-
bucket: config.bucket,
|
|
99
|
-
accessKeyId: resolveEnvVars(config.accessKeyId) ?? 'minioadmin',
|
|
100
|
-
secretAccessKey: resolveEnvVars(config.secretAccessKey) ?? 'minioadmin',
|
|
101
|
-
region: config.region,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
throw new Error('S3 storage requires @aws-sdk/client-s3 and @aws-sdk/lib-storage. ' +
|
|
106
|
-
'Install them: npm install @aws-sdk/client-s3 @aws-sdk/lib-storage');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
case 'r2': {
|
|
110
|
-
if (!config.accountId)
|
|
111
|
-
throw new Error('R2 storage requires "accountId"');
|
|
112
|
-
if (!config.bucket)
|
|
113
|
-
throw new Error('R2 storage requires "bucket"');
|
|
114
|
-
const accessKeyId = resolveEnvVars(config.accessKeyId);
|
|
115
|
-
const secretAccessKey = resolveEnvVars(config.secretAccessKey);
|
|
116
|
-
if (!accessKeyId || !secretAccessKey) {
|
|
117
|
-
throw new Error('R2 storage requires accessKeyId and secretAccessKey.\n' +
|
|
118
|
-
' Set R2_ACCESS_KEY_ID and R2_SECRET_ACCESS_KEY environment variables, or\n' +
|
|
119
|
-
' create an R2 API token at https://dash.cloudflare.com/<account>/r2/api-tokens');
|
|
120
|
-
}
|
|
121
|
-
try {
|
|
122
|
-
const { createS3Provider } = await import('./providers/s3.js');
|
|
123
|
-
return createS3Provider({
|
|
124
|
-
endpoint: `https://${config.accountId}.r2.cloudflarestorage.com`,
|
|
125
|
-
bucket: config.bucket,
|
|
126
|
-
accessKeyId,
|
|
127
|
-
secretAccessKey,
|
|
128
|
-
region: config.region,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
throw new Error('R2 storage requires @aws-sdk/client-s3 and @aws-sdk/lib-storage. ' +
|
|
133
|
-
'Install them: npm install @aws-sdk/client-s3 @aws-sdk/lib-storage');
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
default:
|
|
137
|
-
throw new Error(`Unknown storage type: ${config.type}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
64
|
/**
|
|
141
65
|
* Per-target init timeout — guards against SDKs that hang on unreachable
|
|
142
66
|
* endpoints instead of surfacing the connection error. 10s is generous for
|
|
@@ -144,17 +68,25 @@ export async function createStorageProvider(config, siteDir, targetName) {
|
|
|
144
68
|
* missing local emulator doesn't wedge the dev server for long.
|
|
145
69
|
*/
|
|
146
70
|
const TARGET_INIT_TIMEOUT_MS = 10000;
|
|
147
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Initialize all target providers in parallel, calling each provider's
|
|
73
|
+
* optional `init()` method (used for connectivity probes by S3 / Azure).
|
|
74
|
+
* Returns a `Map<targetName, StorageProvider>` ready for
|
|
75
|
+
* `createTargetRegistryView`.
|
|
76
|
+
*
|
|
77
|
+
* Failed inits are logged and skipped — callers see a partial registry.
|
|
78
|
+
* Slow inits time out at `TARGET_INIT_TIMEOUT_MS` so a hanging SDK doesn't
|
|
79
|
+
* stall the whole boot.
|
|
80
|
+
*/
|
|
81
|
+
export async function createTargetRegistry(targets) {
|
|
148
82
|
const registry = new Map();
|
|
149
|
-
// Init targets in parallel — a slow/failing target must not serialize
|
|
150
|
-
// behind the others. Each has its own timeout so a hang doesn't stall the
|
|
151
|
-
// registry indefinitely.
|
|
152
83
|
await Promise.all(Object.entries(targets).map(async ([name, config]) => {
|
|
153
84
|
try {
|
|
154
85
|
const initOne = async () => {
|
|
155
|
-
const provider =
|
|
156
|
-
|
|
157
|
-
|
|
86
|
+
const provider = config.storage;
|
|
87
|
+
const initFn = provider.init;
|
|
88
|
+
if (typeof initFn === 'function') {
|
|
89
|
+
await initFn.call(provider);
|
|
158
90
|
}
|
|
159
91
|
return provider;
|
|
160
92
|
};
|
package/dist/targets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA0BvC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,IAAY;QACtB,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AACD,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C;QACE,KAAK,CAAC,2FAA2F,CAAC,CAAA;QAClG,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAuC,EACvC,OAAqC;IAErC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO;QACL,GAAG,CAAC,IAAI;YACN,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAC1C,OAAO,CAAC,CAAA;QACV,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;QACD,IAAI;YACF,OAAO,CAAC,GAAG,YAAY,CAAC,CAAA;QAC1B,CAAC;QACD,eAAe;YACb,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBACzB,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAA;YACzC,CAAC;YACD,MAAM,IAAI,qBAAqB,EAAE,CAAA;QACnC,CAAC;KACF,CAAA;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAC,OAAqC;IACvE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAEpC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAqC;IAErC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAA;IACnD,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;gBACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAA;gBAC/B,MAAM,MAAM,GAAI,QAA6D,CAAC,IAAI,CAAA;gBAClF,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,QAAQ,CAAA;YACjB,CAAC,CAAA;YACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/C,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,sBAAsB,IAAI,CAAC,CAAC,EAC3E,sBAAsB,CACvB,CACF,CAAA;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;YACzD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AdminCache } from '../cache/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Factory shape — each test gets a fresh provider instance. Providers
|
|
4
|
+
* with module-level state should construct fresh per call so tests
|
|
5
|
+
* don't leak across each other.
|
|
6
|
+
*/
|
|
7
|
+
export type AdminCacheFactory = () => AdminCache | Promise<AdminCache>;
|
|
8
|
+
export interface AdminCacheContractOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Whether the provider honors TTL on `set(key, value, { ttl })`.
|
|
11
|
+
* Default false (matches `MemoryCache` v1's LRU-only eviction).
|
|
12
|
+
* When true, the suite includes a TTL-expiry test that waits for
|
|
13
|
+
* the configured `ttlSeconds` to elapse.
|
|
14
|
+
*/
|
|
15
|
+
supportsTtl?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* TTL in seconds used by the TTL test. Default 1 second — long
|
|
18
|
+
* enough to be observable, short enough to keep the test fast.
|
|
19
|
+
* Only consulted when `supportsTtl` is true.
|
|
20
|
+
*/
|
|
21
|
+
ttlSeconds?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Whether `subscribe()` delivers events from a sibling instance
|
|
24
|
+
* (true for shared-backing providers like RedisCache after Cut 4
|
|
25
|
+
* of cache-impl ships SSE; false for single-instance MemoryCache
|
|
26
|
+
* v1). When true, the suite includes a cross-instance notification
|
|
27
|
+
* test.
|
|
28
|
+
*/
|
|
29
|
+
supportsCrossInstanceSubscribe?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Whether the provider fails open on transport errors per Universal
|
|
32
|
+
* Provider Requirement #5. Tests a synthetic transport failure
|
|
33
|
+
* surfaced via a wrapper; only meaningful for providers that have
|
|
34
|
+
* a transport layer (Redis, Azure). MemoryCache has no transport.
|
|
35
|
+
*/
|
|
36
|
+
supportsTransportFailureSimulation?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Run the contract suite against a provider factory. Call from a
|
|
40
|
+
* `describe` block in the provider's own test file:
|
|
41
|
+
*
|
|
42
|
+
* import { adminCacheContractTests } from 'gazetta/testing'
|
|
43
|
+
*
|
|
44
|
+
* describe('RedisCache', () => {
|
|
45
|
+
* adminCacheContractTests(
|
|
46
|
+
* () => createRedisCache({ url: 'redis://localhost:6379' }),
|
|
47
|
+
* { supportsTtl: true, supportsCrossInstanceSubscribe: true },
|
|
48
|
+
* )
|
|
49
|
+
* })
|
|
50
|
+
*/
|
|
51
|
+
export declare function adminCacheContractTests(factory: AdminCacheFactory, options?: AdminCacheContractOptions): void;
|
|
52
|
+
//# sourceMappingURL=admin-cache-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-cache-contract.d.ts","sourceRoot":"","sources":["../../src/testing/admin-cache-contract.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAEtE,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;OAMG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAA;IACxC;;;;;OAKG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAA;CAC7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,GAAE,yBAA8B,GAAG,IAAI,CAsKjH"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract tests for `AdminCache` providers, exported from
|
|
3
|
+
* `gazetta/testing`.
|
|
4
|
+
*
|
|
5
|
+
* Plugin authors and future built-in providers (RedisCache,
|
|
6
|
+
* AzureCache, FileCache, IndexedDBCache, etc.) run this suite
|
|
7
|
+
* against their implementation. The helper proves baseline LSP
|
|
8
|
+
* correctness — every provider must round-trip values, isolate
|
|
9
|
+
* keys, support prefix invalidation, and report honest stats.
|
|
10
|
+
*
|
|
11
|
+
* Capability-specific behaviors (TTL expiry, cross-instance
|
|
12
|
+
* subscribe, transport fail-open) are gated by per-test opt-ins on
|
|
13
|
+
* the options object. Providers that don't support a capability skip
|
|
14
|
+
* those tests cleanly — no LSP lies.
|
|
15
|
+
*
|
|
16
|
+
* # SOLID lenses
|
|
17
|
+
*
|
|
18
|
+
* - SRP: this module owns "test the AdminCache contract." Provider
|
|
19
|
+
* mechanics live with each provider; this helper exercises the
|
|
20
|
+
* interface uniformly.
|
|
21
|
+
* - LSP: every provider that opts in to the helper passes the same
|
|
22
|
+
* baseline. Failures here mean the provider violates the contract,
|
|
23
|
+
* not that the test is wrong.
|
|
24
|
+
* - OCP: adding a new capability check (e.g., `etag` support when
|
|
25
|
+
* `EtagCapableCache` ships) is one new option + one new test
|
|
26
|
+
* block; no rewrite of existing tests.
|
|
27
|
+
* - DIP: the helper depends on the `AdminCache` interface, not on
|
|
28
|
+
* any specific provider.
|
|
29
|
+
*
|
|
30
|
+
* # Why this isn't a vitest snapshot test
|
|
31
|
+
*
|
|
32
|
+
* Cache stats are non-deterministic over time and providers vary in
|
|
33
|
+
* which optional fields they track. Snapshot tests would create a
|
|
34
|
+
* brittle coupling between every provider's stats() shape and a
|
|
35
|
+
* shared snapshot. Behavior assertions ("hits incremented after a
|
|
36
|
+
* get-hit") are stable across providers.
|
|
37
|
+
*/
|
|
38
|
+
import { describe, expect, it } from 'vitest';
|
|
39
|
+
/**
|
|
40
|
+
* Run the contract suite against a provider factory. Call from a
|
|
41
|
+
* `describe` block in the provider's own test file:
|
|
42
|
+
*
|
|
43
|
+
* import { adminCacheContractTests } from 'gazetta/testing'
|
|
44
|
+
*
|
|
45
|
+
* describe('RedisCache', () => {
|
|
46
|
+
* adminCacheContractTests(
|
|
47
|
+
* () => createRedisCache({ url: 'redis://localhost:6379' }),
|
|
48
|
+
* { supportsTtl: true, supportsCrossInstanceSubscribe: true },
|
|
49
|
+
* )
|
|
50
|
+
* })
|
|
51
|
+
*/
|
|
52
|
+
export function adminCacheContractTests(factory, options = {}) {
|
|
53
|
+
describe('AdminCache contract — get/set/invalidate', () => {
|
|
54
|
+
it('round-trips a value through get/set', async () => {
|
|
55
|
+
const cache = await factory();
|
|
56
|
+
await cache.set('item:home', { title: 'Home' });
|
|
57
|
+
expect(await cache.get('item:home')).toEqual({ title: 'Home' });
|
|
58
|
+
});
|
|
59
|
+
it('returns null on a miss', async () => {
|
|
60
|
+
const cache = await factory();
|
|
61
|
+
expect(await cache.get('item:never-set')).toBeNull();
|
|
62
|
+
});
|
|
63
|
+
it('preserves the JSON-serializable contract — strings round-trip', async () => {
|
|
64
|
+
const cache = await factory();
|
|
65
|
+
await cache.set('item:str', 'hello');
|
|
66
|
+
expect(await cache.get('item:str')).toBe('hello');
|
|
67
|
+
});
|
|
68
|
+
it('preserves arrays and nested objects', async () => {
|
|
69
|
+
const cache = await factory();
|
|
70
|
+
const value = { items: [1, 2, 3], nested: { a: { b: 'c' } } };
|
|
71
|
+
await cache.set('item:complex', value);
|
|
72
|
+
expect(await cache.get('item:complex')).toEqual(value);
|
|
73
|
+
});
|
|
74
|
+
it('overwrites an existing value', async () => {
|
|
75
|
+
const cache = await factory();
|
|
76
|
+
await cache.set('item:k', 'first');
|
|
77
|
+
await cache.set('item:k', 'second');
|
|
78
|
+
expect(await cache.get('item:k')).toBe('second');
|
|
79
|
+
});
|
|
80
|
+
it('invalidate removes a single key', async () => {
|
|
81
|
+
const cache = await factory();
|
|
82
|
+
await cache.set('item:a', 1);
|
|
83
|
+
await cache.set('item:b', 2);
|
|
84
|
+
await cache.invalidate('item:a');
|
|
85
|
+
expect(await cache.get('item:a')).toBeNull();
|
|
86
|
+
expect(await cache.get('item:b')).toBe(2);
|
|
87
|
+
});
|
|
88
|
+
it('invalidate is a no-op on a missing key', async () => {
|
|
89
|
+
const cache = await factory();
|
|
90
|
+
await expect(cache.invalidate('item:never-set')).resolves.toBeUndefined();
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('AdminCache contract — invalidatePrefix', () => {
|
|
94
|
+
it('removes all keys matching the prefix', async () => {
|
|
95
|
+
const cache = await factory();
|
|
96
|
+
await cache.set('group-a:home', 1);
|
|
97
|
+
await cache.set('group-a:about', 2);
|
|
98
|
+
await cache.set('group-b:home', 3);
|
|
99
|
+
const cleared = await cache.invalidatePrefix('group-a:');
|
|
100
|
+
expect(cleared).toBe(2);
|
|
101
|
+
expect(await cache.get('group-a:home')).toBeNull();
|
|
102
|
+
expect(await cache.get('group-a:about')).toBeNull();
|
|
103
|
+
expect(await cache.get('group-b:home')).toBe(3);
|
|
104
|
+
});
|
|
105
|
+
it('returns 0 when no keys match', async () => {
|
|
106
|
+
const cache = await factory();
|
|
107
|
+
await cache.set('group-a:home', 1);
|
|
108
|
+
const cleared = await cache.invalidatePrefix('group-c:');
|
|
109
|
+
expect(cleared).toBe(0);
|
|
110
|
+
});
|
|
111
|
+
it('does not match sibling prefixes (trailing colon discipline)', async () => {
|
|
112
|
+
// `'pages:'` should NOT match `'pages-archived:'` — the trailing
|
|
113
|
+
// colon prevents that. Consumers that omit the trailing colon
|
|
114
|
+
// are responsible for the consequences.
|
|
115
|
+
const cache = await factory();
|
|
116
|
+
await cache.set('pages:home', 1);
|
|
117
|
+
await cache.set('pages-archived:home', 2);
|
|
118
|
+
const cleared = await cache.invalidatePrefix('pages:');
|
|
119
|
+
expect(cleared).toBe(1);
|
|
120
|
+
expect(await cache.get('pages-archived:home')).toBe(2);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('AdminCache contract — subscribe', () => {
|
|
124
|
+
it('returns a disposer that does not throw when called', async () => {
|
|
125
|
+
const cache = await factory();
|
|
126
|
+
const disposer = cache.subscribe(() => undefined);
|
|
127
|
+
expect(() => disposer()).not.toThrow();
|
|
128
|
+
});
|
|
129
|
+
it('disposer is idempotent', async () => {
|
|
130
|
+
const cache = await factory();
|
|
131
|
+
const disposer = cache.subscribe(() => undefined);
|
|
132
|
+
disposer();
|
|
133
|
+
expect(() => disposer()).not.toThrow();
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('AdminCache contract — stats', () => {
|
|
137
|
+
it('returns the required floor when stats() is implemented', async () => {
|
|
138
|
+
const cache = await factory();
|
|
139
|
+
// stats is optional on the contract — providers that don't
|
|
140
|
+
// expose it skip this test entirely.
|
|
141
|
+
if (!cache.stats)
|
|
142
|
+
return;
|
|
143
|
+
const result = await cache.stats();
|
|
144
|
+
expect(result).toMatchObject({
|
|
145
|
+
hits: expect.any(Number),
|
|
146
|
+
misses: expect.any(Number),
|
|
147
|
+
size: expect.any(Number),
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
it('size reflects the number of stored entries', async () => {
|
|
151
|
+
const cache = await factory();
|
|
152
|
+
if (!cache.stats)
|
|
153
|
+
return;
|
|
154
|
+
await cache.set('item:a', 1);
|
|
155
|
+
await cache.set('item:b', 2);
|
|
156
|
+
const result = await cache.stats();
|
|
157
|
+
expect(result.size).toBeGreaterThanOrEqual(2);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
if (options.supportsTtl) {
|
|
161
|
+
const ttlSeconds = options.ttlSeconds ?? 1;
|
|
162
|
+
describe('AdminCache contract — TTL', () => {
|
|
163
|
+
it(`expires entries after ${ttlSeconds}s`, async () => {
|
|
164
|
+
const cache = await factory();
|
|
165
|
+
await cache.set('item:ttl', 'value', { ttl: ttlSeconds });
|
|
166
|
+
// Wait slightly past the TTL boundary.
|
|
167
|
+
await new Promise(r => setTimeout(r, (ttlSeconds + 0.2) * 1000));
|
|
168
|
+
expect(await cache.get('item:ttl')).toBeNull();
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (options.supportsCrossInstanceSubscribe) {
|
|
173
|
+
describe('AdminCache contract — cross-instance subscribe', () => {
|
|
174
|
+
it('delivers invalidation events from a sibling instance', async () => {
|
|
175
|
+
const a = await factory();
|
|
176
|
+
const b = await factory();
|
|
177
|
+
const events = [];
|
|
178
|
+
b.subscribe(event => events.push({ prefix: event.prefix }));
|
|
179
|
+
await a.set('shared:k', 1);
|
|
180
|
+
await a.invalidatePrefix('shared:');
|
|
181
|
+
// Allow async fan-out (provider-specific transport latency).
|
|
182
|
+
await new Promise(r => setTimeout(r, 100));
|
|
183
|
+
expect(events.some(e => e.prefix.includes('shared:'))).toBe(true);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (options.supportsTransportFailureSimulation) {
|
|
188
|
+
describe('AdminCache contract — fail-open', () => {
|
|
189
|
+
it('treats transport failure on get as a miss (returns null, no throw)', async () => {
|
|
190
|
+
// Providers that opt in must expose a way to inject a
|
|
191
|
+
// transport failure. The contract assertion: under failure,
|
|
192
|
+
// get must NOT throw and must return null. Providers
|
|
193
|
+
// implement the injection mechanism in their own test setup.
|
|
194
|
+
const cache = await factory();
|
|
195
|
+
// The factory closure is the operator's hook — opt-in
|
|
196
|
+
// providers wire the failure into the returned instance and
|
|
197
|
+
// the test exercises whatever the provider's docs say.
|
|
198
|
+
await expect(cache.get('item:transport-failure')).resolves.not.toThrow();
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=admin-cache-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-cache-contract.js","sourceRoot":"","sources":["../../src/testing/admin-cache-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gazetta/testing` — test helpers for plugin authors and contributors.
|
|
3
|
+
*
|
|
4
|
+
* Imports here pull in `vitest` as a peer dependency. Plugin authors
|
|
5
|
+
* who use this barrel must have vitest in their devDependencies.
|
|
6
|
+
*
|
|
7
|
+
* Why a separate subpath: keeps vitest off the main `gazetta` import
|
|
8
|
+
* graph, so production deployments never bundle test-only code.
|
|
9
|
+
*/
|
|
10
|
+
export { adminCacheContractTests, type AdminCacheContractOptions, type AdminCacheFactory, } from './admin-cache-contract.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,uBAAuB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gazetta/testing` — test helpers for plugin authors and contributors.
|
|
3
|
+
*
|
|
4
|
+
* Imports here pull in `vitest` as a peer dependency. Plugin authors
|
|
5
|
+
* who use this barrel must have vitest in their devDependencies.
|
|
6
|
+
*
|
|
7
|
+
* Why a separate subpath: keeps vitest off the main `gazetta` import
|
|
8
|
+
* graph, so production deployments never bundle test-only code.
|
|
9
|
+
*/
|
|
10
|
+
export { adminCacheContractTests, } from './admin-cache-contract.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,uBAAuB,GAGxB,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TransformAdapter } from './adapter.js';
|
|
2
|
+
import { type CloudflareAdapterOptions } from './cloudflare.js';
|
|
3
|
+
import { type SharpAdapterOptions } from './sharp.js';
|
|
4
|
+
/**
|
|
5
|
+
* Operator-facing transform adapter factories. Operators import these
|
|
6
|
+
* into `site.config.ts` and call them inline at the `transforms:` field;
|
|
7
|
+
* the field's value IS the constructed `TransformAdapter` instance
|
|
8
|
+
* (Path X — see `design-provider-config.md`).
|
|
9
|
+
*/
|
|
10
|
+
/** Default sharp-based adapter: origin bytes + pre-generated variant ladder. */
|
|
11
|
+
export declare function sharpAdapter(opts?: SharpAdapterOptions): TransformAdapter;
|
|
12
|
+
/** Cloudflare CDN adapter: routes URLs through `/cdn-cgi/image/` on the
|
|
13
|
+
* given zone for on-the-fly transforms (format=auto, width ladder). */
|
|
14
|
+
export declare function cloudflareAdapter(opts: CloudflareAdapterOptions): TransformAdapter;
|
|
15
|
+
export type { SharpAdapterOptions, CloudflareAdapterOptions };
|
|
16
|
+
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/transforms/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAA2B,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEzE;;;;;GAKG;AAEH,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,gBAAgB,CAE7E;AAED;wEACwE;AACxE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,gBAAgB,CAElF;AAED,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createCloudflareAdapter } from './cloudflare.js';
|
|
2
|
+
import { createSharpAdapter } from './sharp.js';
|
|
3
|
+
/**
|
|
4
|
+
* Operator-facing transform adapter factories. Operators import these
|
|
5
|
+
* into `site.config.ts` and call them inline at the `transforms:` field;
|
|
6
|
+
* the field's value IS the constructed `TransformAdapter` instance
|
|
7
|
+
* (Path X — see `design-provider-config.md`).
|
|
8
|
+
*/
|
|
9
|
+
/** Default sharp-based adapter: origin bytes + pre-generated variant ladder. */
|
|
10
|
+
export function sharpAdapter(opts = {}) {
|
|
11
|
+
return createSharpAdapter(opts);
|
|
12
|
+
}
|
|
13
|
+
/** Cloudflare CDN adapter: routes URLs through `/cdn-cgi/image/` on the
|
|
14
|
+
* given zone for on-the-fly transforms (format=auto, width ladder). */
|
|
15
|
+
export function cloudflareAdapter(opts) {
|
|
16
|
+
return createCloudflareAdapter(opts);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=factories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/transforms/factories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAiC,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAAE,kBAAkB,EAA4B,MAAM,YAAY,CAAA;AAEzE;;;;;GAKG;AAEH,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,OAA4B,EAAE;IACzD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC;AAED;wEACwE;AACxE,MAAM,UAAU,iBAAiB,CAAC,IAA8B;IAC9D,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Transform-adapter
|
|
2
|
+
* Transform-adapter barrel.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Path X (per `design-provider-config.md`): operators construct
|
|
5
|
+
* `TransformAdapter` instances via factory calls inline in
|
|
6
|
+
* `site.config.ts`; `target.transforms` IS the constructed adapter.
|
|
7
|
+
* The resolver reads it directly — no factory dispatch in the runtime.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Operator-facing factories (`sharpAdapter`, `cloudflareAdapter`) live
|
|
10
|
+
* in `factories.ts` and are re-exported below for the `gazetta/transforms`
|
|
11
|
+
* subpath.
|
|
12
12
|
*/
|
|
13
|
-
import type { TargetConfig } from '../types.js';
|
|
14
|
-
import type { TransformAdapter } from './adapter.js';
|
|
15
|
-
/**
|
|
16
|
-
* Construct a `TransformAdapter` from a target's config. Throws on
|
|
17
|
-
* unknown adapter names so misconfiguration surfaces at boot, not
|
|
18
|
-
* silently at render time.
|
|
19
|
-
*/
|
|
20
|
-
export declare function buildTransformAdapter(target: TargetConfig): TransformAdapter;
|
|
21
13
|
export type { AssetUrlInput, CachePolicy, TransformAdapter } from './adapter.js';
|
|
22
|
-
export {
|
|
14
|
+
export { createSharpAdapter, defaultSharpAdapter, type SharpAdapterOptions } from './sharp.js';
|
|
23
15
|
export { createCloudflareAdapter, type CloudflareAdapterOptions } from './cloudflare.js';
|
|
16
|
+
export { sharpAdapter, cloudflareAdapter } from './factories.js';
|
|
24
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGhF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAGxF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/transforms/index.js
CHANGED
|
@@ -1,30 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Construct a `TransformAdapter` from a target's config. Throws on
|
|
5
|
-
* unknown adapter names so misconfiguration surfaces at boot, not
|
|
6
|
-
* silently at render time.
|
|
7
|
-
*/
|
|
8
|
-
export function buildTransformAdapter(target) {
|
|
9
|
-
const config = target.transforms;
|
|
10
|
-
if (!config || config.adapter === 'sharp')
|
|
11
|
-
return sharpAdapter;
|
|
12
|
-
switch (config.adapter) {
|
|
13
|
-
case 'cloudflare': {
|
|
14
|
-
if (!config.zone) {
|
|
15
|
-
throw new Error('transforms.adapter "cloudflare" requires a `zone` field (e.g. "cdn.example.com")');
|
|
16
|
-
}
|
|
17
|
-
return createCloudflareAdapter({ zone: config.zone });
|
|
18
|
-
}
|
|
19
|
-
default: {
|
|
20
|
-
// Exhaustive check — TypeScript ensures we don't miss a known adapter.
|
|
21
|
-
// Runtime fallthrough is for when site.yaml carries an adapter name
|
|
22
|
-
// this build doesn't know.
|
|
23
|
-
const unknown = config.adapter;
|
|
24
|
-
throw new Error(`Unknown transforms.adapter "${unknown}". Supported: sharp, cloudflare.`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export { sharpAdapter } from './sharp.js';
|
|
1
|
+
// Internal factories — kept public for tests + advanced wiring.
|
|
2
|
+
export { createSharpAdapter, defaultSharpAdapter } from './sharp.js';
|
|
29
3
|
export { createCloudflareAdapter } from './cloudflare.js';
|
|
4
|
+
// Operator-facing factories.
|
|
5
|
+
export { sharpAdapter, cloudflareAdapter } from './factories.js';
|
|
30
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAcA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAcA,gEAAgE;AAChE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAA4B,MAAM,YAAY,CAAA;AAC9F,OAAO,EAAE,uBAAuB,EAAiC,MAAM,iBAAiB,CAAA;AAExF,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import type { TransformAdapter } from './adapter.js';
|
|
2
|
-
export
|
|
2
|
+
export interface SharpAdapterOptions {
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Internal factory — constructs the runtime adapter. Operator-facing
|
|
6
|
+
* `sharpAdapter()` wraps this. Kept public for tests and advanced wiring.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createSharpAdapter(_opts?: SharpAdapterOptions): TransformAdapter;
|
|
9
|
+
/**
|
|
10
|
+
* Singleton sharp adapter shared by internal callers that need a default
|
|
11
|
+
* (resolver fallback when target has no `transforms` configured). Operator
|
|
12
|
+
* code should call the operator-facing `sharpAdapter()` factory exported
|
|
13
|
+
* from `gazetta` — both produce the same instance shape; this constant
|
|
14
|
+
* exists so the resolver doesn't construct a new one per render.
|
|
15
|
+
*/
|
|
16
|
+
export declare const defaultSharpAdapter: TransformAdapter;
|
|
3
17
|
//# sourceMappingURL=sharp.d.ts.map
|