memory-journal-mcp 7.7.0 → 8.0.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/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +7 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Cloudflare Pages Functions
|
|
2
|
+
|
|
3
|
+
Serverless functions on Cloudflare Pages using Workers runtime. Full-stack dev with file-based routing.
|
|
4
|
+
|
|
5
|
+
## Quick Navigation
|
|
6
|
+
|
|
7
|
+
**Need to...**
|
|
8
|
+
| Task | Go to |
|
|
9
|
+
|------|-------|
|
|
10
|
+
| Set up TypeScript types | [configuration.md](./configuration.md) - TypeScript Setup |
|
|
11
|
+
| Configure bindings (KV, D1, R2) | [configuration.md](./configuration.md) - wrangler.jsonc |
|
|
12
|
+
| Access request/env/params | [api.md](./api.md) - EventContext |
|
|
13
|
+
| Add middleware or auth | [patterns.md](./patterns.md) - Middleware, Auth |
|
|
14
|
+
| Background tasks (waitUntil) | [patterns.md](./patterns.md) - Background Tasks |
|
|
15
|
+
| Debug errors or check limits | [gotchas.md](./gotchas.md) - Common Errors, Limits |
|
|
16
|
+
|
|
17
|
+
## Decision Tree: Is This Pages Functions?
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Need serverless backend?
|
|
21
|
+
├─ Yes, for a static site → Pages Functions
|
|
22
|
+
├─ Yes, standalone API → Workers
|
|
23
|
+
└─ Just static hosting → Pages (no functions)
|
|
24
|
+
|
|
25
|
+
Have existing Worker?
|
|
26
|
+
├─ Complex routing logic → Use _worker.js (Advanced Mode)
|
|
27
|
+
└─ Simple routes → Migrate to /functions (File-Based)
|
|
28
|
+
|
|
29
|
+
Framework-based?
|
|
30
|
+
├─ Next.js/SvelteKit/Remix → Uses _worker.js automatically
|
|
31
|
+
└─ Vanilla/HTML/React SPA → Use /functions
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## File-Based Routing
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
/functions
|
|
38
|
+
├── index.js → /
|
|
39
|
+
├── api.js → /api
|
|
40
|
+
├── users/
|
|
41
|
+
│ ├── index.js → /users/
|
|
42
|
+
│ ├── [user].js → /users/:user
|
|
43
|
+
│ └── [[catchall]].js → /users/*
|
|
44
|
+
└── _middleware.js → runs on all routes
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Rules:**
|
|
48
|
+
|
|
49
|
+
- `index.js` → directory root
|
|
50
|
+
- Trailing slash optional
|
|
51
|
+
- Specific routes precede catch-alls
|
|
52
|
+
- Falls back to static if no match
|
|
53
|
+
|
|
54
|
+
## Dynamic Routes
|
|
55
|
+
|
|
56
|
+
**Single segment** `[param]` → string:
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
// /functions/users/[user].js
|
|
60
|
+
export function onRequest(context) {
|
|
61
|
+
return new Response(`Hello ${context.params.user}`)
|
|
62
|
+
}
|
|
63
|
+
// Matches: /users/nevi
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Multi-segment** `[[param]]` → array:
|
|
67
|
+
|
|
68
|
+
```js
|
|
69
|
+
// /functions/users/[[catchall]].js
|
|
70
|
+
export function onRequest(context) {
|
|
71
|
+
return new Response(JSON.stringify(context.params.catchall))
|
|
72
|
+
}
|
|
73
|
+
// Matches: /users/nevi/foobar → ["nevi", "foobar"]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Key Features
|
|
77
|
+
|
|
78
|
+
- **Method handlers:** `onRequestGet`, `onRequestPost`, etc.
|
|
79
|
+
- **Middleware:** `_middleware.js` for cross-cutting concerns
|
|
80
|
+
- **Bindings:** KV, D1, R2, Durable Objects, Workers AI, Service bindings
|
|
81
|
+
- **TypeScript:** Full type support via `wrangler types` command
|
|
82
|
+
- **Advanced mode:** Use `_worker.js` for custom routing logic
|
|
83
|
+
|
|
84
|
+
## Reading Order
|
|
85
|
+
|
|
86
|
+
**New to Pages Functions?** Start here:
|
|
87
|
+
|
|
88
|
+
1. [README.md](./README.md) - Overview, routing, decision tree (you are here)
|
|
89
|
+
2. [configuration.md](./configuration.md) - TypeScript setup, wrangler.jsonc, bindings
|
|
90
|
+
3. [api.md](./api.md) - EventContext, handlers, bindings reference
|
|
91
|
+
4. [patterns.md](./patterns.md) - Middleware, auth, CORS, rate limiting, caching
|
|
92
|
+
5. [gotchas.md](./gotchas.md) - Common errors, debugging, limits
|
|
93
|
+
|
|
94
|
+
**Quick reference lookup:**
|
|
95
|
+
|
|
96
|
+
- Bindings table → [api.md](./api.md)
|
|
97
|
+
- Error diagnosis → [gotchas.md](./gotchas.md)
|
|
98
|
+
- TypeScript setup → [configuration.md](./configuration.md)
|
|
99
|
+
|
|
100
|
+
## See Also
|
|
101
|
+
|
|
102
|
+
- [pages](../pages/) - Pages platform overview and static site deployment
|
|
103
|
+
- [workers](../workers/) - Workers runtime API reference
|
|
104
|
+
- [d1](../d1/) - D1 database integration with Pages Functions
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Function API
|
|
2
|
+
|
|
3
|
+
## EventContext
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
interface EventContext<Env = any> {
|
|
7
|
+
request: Request // Incoming request
|
|
8
|
+
functionPath: string // Request path
|
|
9
|
+
waitUntil(promise: Promise<any>): void // Background tasks (non-blocking)
|
|
10
|
+
passThroughOnException(): void // Fallback to static on error
|
|
11
|
+
next(input?: Request | string, init?: RequestInit): Promise<Response>
|
|
12
|
+
env: Env // Bindings, vars, secrets
|
|
13
|
+
params: Record<string, string | string[]> // Route params ([user] or [[catchall]])
|
|
14
|
+
data: any // Middleware shared state
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**TypeScript:** See [configuration.md](./configuration.md) for `wrangler types` setup
|
|
19
|
+
|
|
20
|
+
## Handlers
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// Generic (fallback for any method)
|
|
24
|
+
export async function onRequest(ctx: EventContext): Promise<Response> {
|
|
25
|
+
return new Response('Any method')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Method-specific (takes precedence over generic)
|
|
29
|
+
export async function onRequestGet(ctx: EventContext): Promise<Response> {
|
|
30
|
+
return Response.json({ message: 'GET' })
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export async function onRequestPost(ctx: EventContext): Promise<Response> {
|
|
34
|
+
const body = await ctx.request.json()
|
|
35
|
+
return Response.json({ received: body })
|
|
36
|
+
}
|
|
37
|
+
// Also: onRequestPut, onRequestPatch, onRequestDelete, onRequestHead, onRequestOptions
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Bindings Reference
|
|
41
|
+
|
|
42
|
+
| Binding Type | Interface | Config Key | Use Case |
|
|
43
|
+
| ---------------- | ------------------------ | --------------------------- | --------------------------------- |
|
|
44
|
+
| KV | `KVNamespace` | `kv_namespaces` | Key-value cache, sessions, config |
|
|
45
|
+
| D1 | `D1Database` | `d1_databases` | Relational data, SQL queries |
|
|
46
|
+
| R2 | `R2Bucket` | `r2_buckets` | Large files, user uploads, assets |
|
|
47
|
+
| Durable Objects | `DurableObjectNamespace` | `durable_objects.bindings` | Stateful coordination, websockets |
|
|
48
|
+
| Workers AI | `Ai` | `ai.binding` | LLM inference, embeddings |
|
|
49
|
+
| Vectorize | `VectorizeIndex` | `vectorize` | Vector search, embeddings |
|
|
50
|
+
| Service Binding | `Fetcher` | `services` | Worker-to-worker RPC |
|
|
51
|
+
| Analytics Engine | `AnalyticsEngineDataset` | `analytics_engine_datasets` | Event logging, metrics |
|
|
52
|
+
| Environment Vars | `string` | `vars` | Non-sensitive config |
|
|
53
|
+
|
|
54
|
+
See [configuration.md](./configuration.md) for wrangler.jsonc examples.
|
|
55
|
+
|
|
56
|
+
## Bindings
|
|
57
|
+
|
|
58
|
+
### KV
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
interface Env {
|
|
62
|
+
KV: KVNamespace
|
|
63
|
+
}
|
|
64
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
65
|
+
await ctx.env.KV.put('key', 'value', { expirationTtl: 3600 })
|
|
66
|
+
const val = await ctx.env.KV.get('key', { type: 'json' })
|
|
67
|
+
const keys = await ctx.env.KV.list({ prefix: 'user:' })
|
|
68
|
+
return Response.json({ val })
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### D1
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
interface Env {
|
|
76
|
+
DB: D1Database
|
|
77
|
+
}
|
|
78
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
79
|
+
const user = await ctx.env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(123).first()
|
|
80
|
+
return Response.json(user)
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### R2
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
interface Env {
|
|
88
|
+
BUCKET: R2Bucket
|
|
89
|
+
}
|
|
90
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
91
|
+
const obj = await ctx.env.BUCKET.get('file.txt')
|
|
92
|
+
if (!obj) return new Response('Not found', { status: 404 })
|
|
93
|
+
await ctx.env.BUCKET.put('file.txt', ctx.request.body)
|
|
94
|
+
return new Response(obj.body)
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Durable Objects
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
interface Env {
|
|
102
|
+
COUNTER: DurableObjectNamespace
|
|
103
|
+
}
|
|
104
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
105
|
+
const stub = ctx.env.COUNTER.get(ctx.env.COUNTER.idFromName('global'))
|
|
106
|
+
return stub.fetch(ctx.request)
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Workers AI
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
interface Env {
|
|
114
|
+
AI: Ai
|
|
115
|
+
}
|
|
116
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
117
|
+
const resp = await ctx.env.AI.run('@cf/meta/llama-3.1-8b-instruct', { prompt: 'Hello' })
|
|
118
|
+
return Response.json(resp)
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Service Bindings & Env Vars
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
interface Env {
|
|
126
|
+
AUTH: Fetcher
|
|
127
|
+
API_KEY: string
|
|
128
|
+
}
|
|
129
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
130
|
+
// Service binding: forward to another Worker
|
|
131
|
+
return ctx.env.AUTH.fetch(ctx.request)
|
|
132
|
+
|
|
133
|
+
// Environment variable
|
|
134
|
+
return Response.json({ key: ctx.env.API_KEY })
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Advanced Mode (env.ASSETS)
|
|
139
|
+
|
|
140
|
+
When using `_worker.js`, access static assets via `env.ASSETS.fetch()`:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
interface Env {
|
|
144
|
+
ASSETS: Fetcher
|
|
145
|
+
KV: KVNamespace
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export default {
|
|
149
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
150
|
+
const url = new URL(request.url)
|
|
151
|
+
if (url.pathname.startsWith('/api/')) {
|
|
152
|
+
return Response.json({ data: await env.KV.get('key') })
|
|
153
|
+
}
|
|
154
|
+
return env.ASSETS.fetch(request) // Fallback to static
|
|
155
|
+
},
|
|
156
|
+
} satisfies ExportedHandler<Env>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**See also:** [configuration.md](./configuration.md) for TypeScript setup and wrangler.jsonc | [patterns.md](./patterns.md) for middleware and auth patterns
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## TypeScript Setup
|
|
4
|
+
|
|
5
|
+
**Generate types from wrangler.jsonc** (replaces deprecated `@cloudflare/workers-types`):
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx wrangler types
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Creates `worker-configuration.d.ts` with typed `Env` interface based on your bindings.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// functions/api.ts
|
|
15
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
16
|
+
// ctx.env.KV, ctx.env.DB, etc. are fully typed
|
|
17
|
+
return Response.json({ ok: true })
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Manual types** (if not using wrangler types):
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
interface Env {
|
|
25
|
+
KV: KVNamespace
|
|
26
|
+
DB: D1Database
|
|
27
|
+
API_KEY: string
|
|
28
|
+
}
|
|
29
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
30
|
+
/* ... */
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## wrangler.jsonc
|
|
35
|
+
|
|
36
|
+
```jsonc
|
|
37
|
+
{
|
|
38
|
+
"$schema": "./node_modules/wrangler/config-schema.json",
|
|
39
|
+
"name": "my-pages-app",
|
|
40
|
+
"pages_build_output_dir": "./dist",
|
|
41
|
+
"compatibility_date": "2025-01-01",
|
|
42
|
+
"compatibility_flags": ["nodejs_compat"],
|
|
43
|
+
|
|
44
|
+
"vars": { "API_URL": "https://api.example.com" },
|
|
45
|
+
"kv_namespaces": [{ "binding": "KV", "id": "abc123" }],
|
|
46
|
+
"d1_databases": [{ "binding": "DB", "database_name": "prod-db", "database_id": "xyz789" }],
|
|
47
|
+
"r2_buckets": [{ "binding": "BUCKET", "bucket_name": "my-bucket" }],
|
|
48
|
+
"durable_objects": {
|
|
49
|
+
"bindings": [{ "name": "COUNTER", "class_name": "Counter", "script_name": "counter-worker" }],
|
|
50
|
+
},
|
|
51
|
+
"services": [{ "binding": "AUTH", "service": "auth-worker" }],
|
|
52
|
+
"ai": { "binding": "AI" },
|
|
53
|
+
"vectorize": [{ "binding": "VECTORIZE", "index_name": "my-index" }],
|
|
54
|
+
"analytics_engine_datasets": [{ "binding": "ANALYTICS" }],
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Environment Overrides
|
|
59
|
+
|
|
60
|
+
Top-level → local dev, `env.preview` → preview, `env.production` → production
|
|
61
|
+
|
|
62
|
+
```jsonc
|
|
63
|
+
{
|
|
64
|
+
"vars": { "API_URL": "http://localhost:8787" },
|
|
65
|
+
"env": {
|
|
66
|
+
"production": { "vars": { "API_URL": "https://api.example.com" } },
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Note:** If overriding `vars`, `kv_namespaces`, `d1_databases`, etc., ALL must be redefined (non-inheritable)
|
|
72
|
+
|
|
73
|
+
## Local Secrets (.dev.vars)
|
|
74
|
+
|
|
75
|
+
**Local dev only** - NOT deployed:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# .dev.vars (add to .gitignore)
|
|
79
|
+
SECRET_KEY="my-secret-value"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Accessed via `ctx.env.SECRET_KEY`. Set production secrets:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
echo "value" | npx wrangler pages secret put SECRET_KEY --project-name=my-app
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Static Config Files
|
|
89
|
+
|
|
90
|
+
**\_routes.json** - Custom routing:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{ "version": 1, "include": ["/api/*"], "exclude": ["/static/*"] }
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**\_headers** - Static headers:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
/static/*
|
|
100
|
+
Cache-Control: public, max-age=31536000
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**\_redirects** - Redirects:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
/old /new 301
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Local Dev & Deployment
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Dev server
|
|
113
|
+
npx wrangler pages dev ./dist
|
|
114
|
+
|
|
115
|
+
# With bindings
|
|
116
|
+
npx wrangler pages dev ./dist --kv=KV --d1=DB=db-id --r2=BUCKET
|
|
117
|
+
|
|
118
|
+
# Durable Objects (2 terminals)
|
|
119
|
+
cd do-worker && npx wrangler dev
|
|
120
|
+
cd pages-project && npx wrangler pages dev ./dist --do COUNTER=Counter@do-worker
|
|
121
|
+
|
|
122
|
+
# Deploy
|
|
123
|
+
npx wrangler pages deploy ./dist
|
|
124
|
+
npx wrangler pages deploy ./dist --branch preview
|
|
125
|
+
|
|
126
|
+
# Download config
|
|
127
|
+
npx wrangler pages download config my-project
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**See also:** [api.md](./api.md) for binding usage examples
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Gotchas & Debugging
|
|
2
|
+
|
|
3
|
+
## Error Diagnosis
|
|
4
|
+
|
|
5
|
+
| Symptom | Likely Cause | Solution |
|
|
6
|
+
| ---------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
7
|
+
| **Function not invoking** | Wrong `/functions` location, wrong extension, or `_routes.json` excludes path | Check `pages_build_output_dir`, use `.js`/`.ts`, verify `_routes.json` |
|
|
8
|
+
| **`ctx.env.BINDING` undefined** | Binding not configured or name mismatch | Add to `wrangler.jsonc`, verify exact name (case-sensitive), redeploy |
|
|
9
|
+
| **TypeScript errors on `ctx.env`** | Missing type definition | Run `wrangler types` or define `interface Env {}` |
|
|
10
|
+
| **Middleware not running** | Wrong filename/location or missing `ctx.next()` | Name exactly `_middleware.js`, export `onRequest`, call `ctx.next()` |
|
|
11
|
+
| **Secrets missing in production** | `.dev.vars` not deployed | `.dev.vars` is local only - set production secrets via dashboard or `wrangler secret put` |
|
|
12
|
+
| **Type mismatch on binding** | Wrong interface type | See [api.md](./api.md) bindings table for correct types |
|
|
13
|
+
| **"KV key not found" but exists** | Key in wrong namespace or env | Verify namespace binding, check preview vs production env |
|
|
14
|
+
| **Function times out** | Synchronous wait or missing `await` | All I/O must be async/await, use `ctx.waitUntil()` for background tasks |
|
|
15
|
+
|
|
16
|
+
## Common Errors
|
|
17
|
+
|
|
18
|
+
### TypeScript type errors
|
|
19
|
+
|
|
20
|
+
**Problem:** `ctx.env.MY_BINDING` shows type error
|
|
21
|
+
**Cause:** No type definition for `Env`
|
|
22
|
+
**Solution:** Run `npx wrangler types` or manually define:
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
interface Env {
|
|
26
|
+
MY_BINDING: KVNamespace
|
|
27
|
+
}
|
|
28
|
+
export const onRequest: PagesFunction<Env> = async (ctx) => {
|
|
29
|
+
/* ... */
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Secrets not available in production
|
|
34
|
+
|
|
35
|
+
**Problem:** `ctx.env.SECRET_KEY` is undefined in production
|
|
36
|
+
**Cause:** `.dev.vars` is local-only, not deployed
|
|
37
|
+
**Solution:** Set production secrets:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
echo "value" | npx wrangler pages secret put SECRET_KEY --project-name=my-app
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Debugging
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// Console logging
|
|
47
|
+
export async function onRequest(ctx) {
|
|
48
|
+
console.log('Request:', ctx.request.method, ctx.request.url)
|
|
49
|
+
const res = await ctx.next()
|
|
50
|
+
console.log('Status:', res.status)
|
|
51
|
+
return res
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Stream real-time logs
|
|
57
|
+
npx wrangler pages deployment tail
|
|
58
|
+
npx wrangler pages deployment tail --status error
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```jsonc
|
|
62
|
+
// Source maps (wrangler.jsonc)
|
|
63
|
+
{ "upload_source_maps": true }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Limits
|
|
67
|
+
|
|
68
|
+
| Resource | Free | Paid |
|
|
69
|
+
| ----------- | -------------------- | ------------------------- |
|
|
70
|
+
| CPU time | 10ms | 50ms |
|
|
71
|
+
| Memory | 128 MB | 128 MB |
|
|
72
|
+
| Script size | 10 MB compressed | 10 MB compressed |
|
|
73
|
+
| Env vars | 5 KB per var, 64 max | 5 KB per var, 64 max |
|
|
74
|
+
| Requests | 100k/day | Unlimited ($0.50/million) |
|
|
75
|
+
|
|
76
|
+
## Best Practices
|
|
77
|
+
|
|
78
|
+
**Performance:** Minimize deps (cold start), use KV for cache/D1 for relational/R2 for large files, set `Cache-Control` headers, batch DB ops, handle errors gracefully
|
|
79
|
+
|
|
80
|
+
**Security:** Never commit secrets (use `.dev.vars` + gitignore), validate input, sanitize before DB, implement auth middleware, set CORS headers, rate limit per-IP
|
|
81
|
+
|
|
82
|
+
## Migration
|
|
83
|
+
|
|
84
|
+
**Workers → Pages Functions:**
|
|
85
|
+
|
|
86
|
+
- `export default { fetch(req, env) {} }` → `export function onRequest(ctx) { const { request, env } = ctx; }`
|
|
87
|
+
- Use `_worker.js` for complex routing: `env.ASSETS.fetch(request)` for static files
|
|
88
|
+
|
|
89
|
+
**Other platforms → Pages:**
|
|
90
|
+
|
|
91
|
+
- File-based routing: `/functions/api/users.js` → `/api/users`
|
|
92
|
+
- Dynamic routes: `[param]` not `:param`
|
|
93
|
+
- Replace Node.js deps with Workers APIs or add `nodejs_compat` flag
|
|
94
|
+
|
|
95
|
+
## Resources
|
|
96
|
+
|
|
97
|
+
- [Official Docs](https://developers.cloudflare.com/pages/functions/)
|
|
98
|
+
- [Workers APIs](https://developers.cloudflare.com/workers/runtime-apis/)
|
|
99
|
+
- [Examples](https://github.com/cloudflare/pages-example-projects)
|
|
100
|
+
- [Discord](https://discord.gg/cloudflaredev)
|
|
101
|
+
|
|
102
|
+
**See also:** [configuration.md](./configuration.md) for TypeScript setup | [patterns.md](./patterns.md) for middleware/auth | [api.md](./api.md) for bindings
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Common Patterns
|
|
2
|
+
|
|
3
|
+
## Background Tasks (waitUntil)
|
|
4
|
+
|
|
5
|
+
Non-blocking tasks after response sent (analytics, cleanup, webhooks):
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
export async function onRequest(ctx: EventContext<Env>) {
|
|
9
|
+
const res = Response.json({ success: true })
|
|
10
|
+
|
|
11
|
+
ctx.waitUntil(ctx.env.KV.put('last-visit', new Date().toISOString()))
|
|
12
|
+
ctx.waitUntil(
|
|
13
|
+
Promise.all([
|
|
14
|
+
ctx.env.ANALYTICS.writeDataPoint({ event: 'view' }),
|
|
15
|
+
fetch('https://webhook.site/...', { method: 'POST' }),
|
|
16
|
+
])
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
return res // Returned immediately
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Middleware & Auth
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// functions/_middleware.js (global) or functions/users/_middleware.js (scoped)
|
|
27
|
+
export async function onRequest(ctx) {
|
|
28
|
+
try {
|
|
29
|
+
return await ctx.next()
|
|
30
|
+
} catch (err) {
|
|
31
|
+
return new Response(err.message, { status: 500 })
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Chained: export const onRequest = [errorHandler, auth, logger];
|
|
36
|
+
|
|
37
|
+
// Auth
|
|
38
|
+
async function auth(ctx: EventContext<Env>) {
|
|
39
|
+
const token = ctx.request.headers.get('authorization')?.replace('Bearer ', '')
|
|
40
|
+
if (!token) return new Response('Unauthorized', { status: 401 })
|
|
41
|
+
const session = await ctx.env.KV.get(`session:${token}`)
|
|
42
|
+
if (!session) return new Response('Invalid', { status: 401 })
|
|
43
|
+
ctx.data.user = JSON.parse(session)
|
|
44
|
+
return ctx.next()
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## CORS & Rate Limiting
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// CORS middleware
|
|
52
|
+
const cors = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST' }
|
|
53
|
+
export async function onRequestOptions() {
|
|
54
|
+
return new Response(null, { headers: cors })
|
|
55
|
+
}
|
|
56
|
+
export async function onRequest(ctx) {
|
|
57
|
+
const res = await ctx.next()
|
|
58
|
+
Object.entries(cors).forEach(([k, v]) => res.headers.set(k, v))
|
|
59
|
+
return res
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Rate limiting (KV-based)
|
|
63
|
+
async function rateLimit(ctx: EventContext<Env>) {
|
|
64
|
+
const ip = ctx.request.headers.get('CF-Connecting-IP') || 'unknown'
|
|
65
|
+
const count = parseInt((await ctx.env.KV.get(`rate:${ip}`)) || '0')
|
|
66
|
+
if (count >= 100) return new Response('Rate limited', { status: 429 })
|
|
67
|
+
await ctx.env.KV.put(`rate:${ip}`, (count + 1).toString(), { expirationTtl: 3600 })
|
|
68
|
+
return ctx.next()
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Forms, Caching, Redirects
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// JSON & file upload
|
|
76
|
+
export async function onRequestPost(ctx) {
|
|
77
|
+
const ct = ctx.request.headers.get('content-type') || ''
|
|
78
|
+
if (ct.includes('application/json')) return Response.json(await ctx.request.json())
|
|
79
|
+
if (ct.includes('multipart/form-data')) {
|
|
80
|
+
const file = (await ctx.request.formData()).get('file') as File
|
|
81
|
+
await ctx.env.BUCKET.put(file.name, file.stream())
|
|
82
|
+
return Response.json({ uploaded: file.name })
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Cache API
|
|
87
|
+
export async function onRequest(ctx) {
|
|
88
|
+
let res = await caches.default.match(ctx.request)
|
|
89
|
+
if (!res) {
|
|
90
|
+
res = new Response('Data')
|
|
91
|
+
res.headers.set('Cache-Control', 'public, max-age=3600')
|
|
92
|
+
ctx.waitUntil(caches.default.put(ctx.request, res.clone()))
|
|
93
|
+
}
|
|
94
|
+
return res
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Redirects
|
|
98
|
+
export async function onRequest(ctx) {
|
|
99
|
+
if (new URL(ctx.request.url).pathname === '/old') {
|
|
100
|
+
return Response.redirect(new URL('/new', ctx.request.url), 301)
|
|
101
|
+
}
|
|
102
|
+
return ctx.next()
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Testing
|
|
107
|
+
|
|
108
|
+
**Unit tests** (Vitest + cloudflare:test):
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { env } from 'cloudflare:test'
|
|
112
|
+
import { it, expect } from 'vitest'
|
|
113
|
+
import { onRequest } from '../functions/api'
|
|
114
|
+
|
|
115
|
+
it('returns JSON', async () => {
|
|
116
|
+
const req = new Request('http://localhost/api')
|
|
117
|
+
const ctx = { request: req, env, params: {}, data: {} } as EventContext
|
|
118
|
+
const res = await onRequest(ctx)
|
|
119
|
+
expect(res.status).toBe(200)
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Integration:** `wrangler pages dev` + Playwright/Cypress
|
|
124
|
+
|
|
125
|
+
## Advanced Mode (\_worker.js)
|
|
126
|
+
|
|
127
|
+
Use `_worker.js` for complex routing (replaces `/functions`):
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
interface Env {
|
|
131
|
+
ASSETS: Fetcher
|
|
132
|
+
KV: KVNamespace
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export default {
|
|
136
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
137
|
+
const url = new URL(request.url)
|
|
138
|
+
if (url.pathname.startsWith('/api/')) {
|
|
139
|
+
return Response.json({ data: await env.KV.get('key') })
|
|
140
|
+
}
|
|
141
|
+
return env.ASSETS.fetch(request) // Static files
|
|
142
|
+
},
|
|
143
|
+
} satisfies ExportedHandler<Env>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**When:** Existing Worker, framework-generated (Next.js/SvelteKit), custom routing logic
|
|
147
|
+
|
|
148
|
+
**See also:** [api.md](./api.md) for `env.ASSETS.fetch()` | [gotchas.md](./gotchas.md) for debugging
|