opencodekit 0.15.4 → 0.15.5
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/dist/index.js +1 -1
- package/dist/template/.opencode/command/cloudflare.md +70 -0
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
- package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
- package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
- package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
- package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
- package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
- package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
- package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
- package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
- package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
- package/package.json +1 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Functions API
|
|
2
|
+
|
|
3
|
+
## File-Based Routing
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
/functions
|
|
7
|
+
/index.ts → example.com/
|
|
8
|
+
/api
|
|
9
|
+
/users.ts → example.com/api/users
|
|
10
|
+
/users
|
|
11
|
+
/[id].ts → example.com/api/users/:id
|
|
12
|
+
/[[catchall]].ts → example.com/api/users/*
|
|
13
|
+
/_middleware.ts → Runs before all routes
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Rules**: `[param]` = single segment, `[[param]]` = multi-segment wildcard, more specific wins, falls back to static assets.
|
|
17
|
+
|
|
18
|
+
## Request Handlers
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import type { PagesFunction } from '@cloudflare/workers-types';
|
|
22
|
+
|
|
23
|
+
interface Env {
|
|
24
|
+
DB: D1Database;
|
|
25
|
+
KV: KVNamespace;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// All methods
|
|
29
|
+
export const onRequest: PagesFunction<Env> = async (context) => {
|
|
30
|
+
return new Response('All methods');
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// Method-specific
|
|
34
|
+
export const onRequestGet: PagesFunction<Env> = async (context) => {
|
|
35
|
+
const { request, env, params, data } = context;
|
|
36
|
+
|
|
37
|
+
const user = await env.DB.prepare(
|
|
38
|
+
'SELECT * FROM users WHERE id = ?'
|
|
39
|
+
).bind(params.id).first();
|
|
40
|
+
|
|
41
|
+
return Response.json(user);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const onRequestPost: PagesFunction<Env> = async (context) => {
|
|
45
|
+
const body = await context.request.json();
|
|
46
|
+
return Response.json({ success: true });
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Also: onRequestPut, onRequestPatch, onRequestDelete, onRequestHead, onRequestOptions
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Context Object
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
interface EventContext<Env, Params, Data> {
|
|
56
|
+
request: Request; // Incoming HTTP request
|
|
57
|
+
env: Env; // Bindings (KV, D1, R2, etc.)
|
|
58
|
+
params: Params; // Dynamic route parameters
|
|
59
|
+
data: Data; // Shared data from middleware
|
|
60
|
+
functionPath: string; // Current function path
|
|
61
|
+
waitUntil: (promise: Promise<any>) => void; // Background tasks
|
|
62
|
+
next: (input?: RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
63
|
+
passThroughOnException: () => void; // Fallback on error (not in advanced mode)
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Dynamic Routes
|
|
68
|
+
|
|
69
|
+
### Single Segment
|
|
70
|
+
```typescript
|
|
71
|
+
// functions/users/[id].ts
|
|
72
|
+
export const onRequestGet: PagesFunction = async ({ params }) => {
|
|
73
|
+
// /users/123 → params.id = "123"
|
|
74
|
+
return Response.json({ userId: params.id });
|
|
75
|
+
};
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Multi-Segment
|
|
79
|
+
```typescript
|
|
80
|
+
// functions/files/[[path]].ts
|
|
81
|
+
export const onRequestGet: PagesFunction = async ({ params }) => {
|
|
82
|
+
// /files/docs/api/v1.md → params.path = ["docs", "api", "v1.md"]
|
|
83
|
+
const filePath = (params.path as string[]).join('/');
|
|
84
|
+
return new Response(filePath);
|
|
85
|
+
};
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Middleware
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// functions/_middleware.ts
|
|
92
|
+
import type { PagesFunction } from '@cloudflare/workers-types';
|
|
93
|
+
|
|
94
|
+
// Single
|
|
95
|
+
export const onRequest: PagesFunction = async (context) => {
|
|
96
|
+
const response = await context.next();
|
|
97
|
+
response.headers.set('X-Custom-Header', 'value');
|
|
98
|
+
return response;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// Chained (runs in order)
|
|
102
|
+
const errorHandler: PagesFunction = async (context) => {
|
|
103
|
+
try {
|
|
104
|
+
return await context.next();
|
|
105
|
+
} catch (err) {
|
|
106
|
+
return new Response(err.message, { status: 500 });
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const auth: PagesFunction = async (context) => {
|
|
111
|
+
const token = context.request.headers.get('Authorization');
|
|
112
|
+
if (!token) return new Response('Unauthorized', { status: 401 });
|
|
113
|
+
|
|
114
|
+
context.data.userId = await verifyToken(token);
|
|
115
|
+
return context.next();
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export const onRequest = [errorHandler, auth];
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Scope**:
|
|
122
|
+
- `functions/_middleware.ts` → ALL requests (including static)
|
|
123
|
+
- `functions/api/_middleware.ts` → `/api/*` only
|
|
124
|
+
|
|
125
|
+
## Bindings Usage
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
export const onRequestGet: PagesFunction<Env> = async ({ env, request }) => {
|
|
129
|
+
// KV
|
|
130
|
+
const cached = await env.KV.get('key', 'json');
|
|
131
|
+
await env.KV.put('key', JSON.stringify({ data: 'value' }), {
|
|
132
|
+
expirationTtl: 3600
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// D1
|
|
136
|
+
const result = await env.DB.prepare(
|
|
137
|
+
'SELECT * FROM users WHERE id = ?'
|
|
138
|
+
).bind(userId).first();
|
|
139
|
+
|
|
140
|
+
// R2
|
|
141
|
+
const object = await env.BUCKET.get('file.txt');
|
|
142
|
+
const content = await object?.text();
|
|
143
|
+
|
|
144
|
+
// Queue
|
|
145
|
+
await env.QUEUE.send({ event: 'user.signup', userId: 123 });
|
|
146
|
+
|
|
147
|
+
// AI
|
|
148
|
+
const aiResponse = await env.AI.run('@cf/meta/llama-2-7b-chat-int8', {
|
|
149
|
+
prompt: 'Hello world'
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
return Response.json({ success: true });
|
|
153
|
+
};
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Advanced Mode
|
|
157
|
+
|
|
158
|
+
Full Workers API, bypasses file-based routing:
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
// functions/_worker.js
|
|
162
|
+
export default {
|
|
163
|
+
async fetch(request, env, ctx) {
|
|
164
|
+
const url = new URL(request.url);
|
|
165
|
+
|
|
166
|
+
// Custom routing
|
|
167
|
+
if (url.pathname.startsWith('/api/')) {
|
|
168
|
+
return new Response('API response');
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// REQUIRED: Serve static assets
|
|
172
|
+
return env.ASSETS.fetch(request);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**When to use**: WebSockets, complex routing, scheduled handlers, email handlers.
|
|
178
|
+
|
|
179
|
+
## getRequestContext (Framework SSR)
|
|
180
|
+
|
|
181
|
+
Access bindings in framework code (Next.js, SvelteKit, etc.):
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
import { getRequestContext } from '@cloudflare/next-on-pages';
|
|
185
|
+
|
|
186
|
+
export async function GET(request: Request) {
|
|
187
|
+
const { env, cf, ctx } = getRequestContext();
|
|
188
|
+
|
|
189
|
+
const data = await env.DB.prepare(
|
|
190
|
+
'SELECT * FROM users'
|
|
191
|
+
).all();
|
|
192
|
+
|
|
193
|
+
return Response.json(data);
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Note**: Adapter-specific. Check framework docs:
|
|
198
|
+
- Next.js: `@cloudflare/next-on-pages`
|
|
199
|
+
- SvelteKit: `@sveltejs/adapter-cloudflare`
|
|
200
|
+
- Remix: `@remix-run/cloudflare-pages`
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## wrangler.toml
|
|
4
|
+
|
|
5
|
+
```toml
|
|
6
|
+
name = "my-pages-project"
|
|
7
|
+
pages_build_output_dir = "./dist"
|
|
8
|
+
compatibility_date = "2024-01-01"
|
|
9
|
+
compatibility_flags = ["nodejs_compat"]
|
|
10
|
+
|
|
11
|
+
# Bindings
|
|
12
|
+
[[kv_namespaces]]
|
|
13
|
+
binding = "KV"
|
|
14
|
+
id = "abcd1234..."
|
|
15
|
+
|
|
16
|
+
[[d1_databases]]
|
|
17
|
+
binding = "DB"
|
|
18
|
+
database_id = "xxxx-xxxx-xxxx-xxxx"
|
|
19
|
+
database_name = "production-db"
|
|
20
|
+
|
|
21
|
+
[[r2_buckets]]
|
|
22
|
+
binding = "BUCKET"
|
|
23
|
+
bucket_name = "my-bucket"
|
|
24
|
+
|
|
25
|
+
[[durable_objects.bindings]]
|
|
26
|
+
name = "COUNTER"
|
|
27
|
+
class_name = "Counter"
|
|
28
|
+
script_name = "counter-worker"
|
|
29
|
+
|
|
30
|
+
[[services]]
|
|
31
|
+
binding = "API"
|
|
32
|
+
service = "api-worker"
|
|
33
|
+
|
|
34
|
+
[[queues.producers]]
|
|
35
|
+
binding = "QUEUE"
|
|
36
|
+
queue = "my-queue"
|
|
37
|
+
|
|
38
|
+
[[vectorize]]
|
|
39
|
+
binding = "VECTORIZE"
|
|
40
|
+
index_name = "my-index"
|
|
41
|
+
|
|
42
|
+
[ai]
|
|
43
|
+
binding = "AI"
|
|
44
|
+
|
|
45
|
+
[[analytics_engine_datasets]]
|
|
46
|
+
binding = "ANALYTICS"
|
|
47
|
+
|
|
48
|
+
# Vars (non-sensitive)
|
|
49
|
+
[vars]
|
|
50
|
+
API_URL = "https://api.example.com"
|
|
51
|
+
ENVIRONMENT = "production"
|
|
52
|
+
|
|
53
|
+
# Environment overrides
|
|
54
|
+
[env.preview]
|
|
55
|
+
[env.preview.vars]
|
|
56
|
+
API_URL = "https://staging-api.example.com"
|
|
57
|
+
|
|
58
|
+
[[env.preview.kv_namespaces]]
|
|
59
|
+
binding = "KV"
|
|
60
|
+
id = "preview-namespace-id"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Build Config
|
|
64
|
+
|
|
65
|
+
**Git deployment**: Dashboard → Project → Settings → Build settings
|
|
66
|
+
- Build command: `npm run build`
|
|
67
|
+
- Output directory: `dist` / `out` / `build`
|
|
68
|
+
- Environment variables: Set per environment (preview/production)
|
|
69
|
+
|
|
70
|
+
**Framework detection**: Auto-configures build command + output dir for common frameworks
|
|
71
|
+
|
|
72
|
+
## Environment Variables
|
|
73
|
+
|
|
74
|
+
### Local Secrets (.dev.vars)
|
|
75
|
+
```bash
|
|
76
|
+
# .dev.vars (never commit)
|
|
77
|
+
SECRET_KEY="local-secret-key"
|
|
78
|
+
API_TOKEN="dev-token-123"
|
|
79
|
+
DATABASE_URL="http://localhost:5432"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Production Secrets
|
|
83
|
+
```bash
|
|
84
|
+
# Interactive
|
|
85
|
+
echo "super-secret-value" | npx wrangler pages secret put SECRET_KEY --project-name=my-project
|
|
86
|
+
|
|
87
|
+
# Per environment
|
|
88
|
+
echo "prod-secret" | npx wrangler pages secret put SECRET_KEY --project-name=my-project --env=production
|
|
89
|
+
|
|
90
|
+
# List
|
|
91
|
+
npx wrangler pages secret list --project-name=my-project
|
|
92
|
+
|
|
93
|
+
# Delete
|
|
94
|
+
npx wrangler pages secret delete SECRET_KEY --project-name=my-project
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Access like bindings: `env.SECRET_KEY`
|
|
98
|
+
|
|
99
|
+
## Static Config Files
|
|
100
|
+
|
|
101
|
+
### _redirects
|
|
102
|
+
Place in build output (e.g., `dist/_redirects`):
|
|
103
|
+
|
|
104
|
+
```txt
|
|
105
|
+
# Simple (302)
|
|
106
|
+
/old-page /new-page
|
|
107
|
+
|
|
108
|
+
# Permanent (301)
|
|
109
|
+
/old-page /new-page 301
|
|
110
|
+
|
|
111
|
+
# External
|
|
112
|
+
/blog https://blog.example.com
|
|
113
|
+
|
|
114
|
+
# Splat wildcard
|
|
115
|
+
/blog/* /news/:splat 301
|
|
116
|
+
|
|
117
|
+
# Placeholders
|
|
118
|
+
/users/:id /members/:id 301
|
|
119
|
+
|
|
120
|
+
# Proxying (200)
|
|
121
|
+
/api/* /api-v2/:splat 200
|
|
122
|
+
|
|
123
|
+
# Limits: 2,100 total (2,000 static + 100 dynamic), 1,000 char/line
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Important**: Redirects don't apply to Functions routes. Functions take precedence.
|
|
127
|
+
|
|
128
|
+
### _headers
|
|
129
|
+
```txt
|
|
130
|
+
# Security
|
|
131
|
+
/secure/*
|
|
132
|
+
X-Frame-Options: DENY
|
|
133
|
+
X-Content-Type-Options: nosniff
|
|
134
|
+
Referrer-Policy: no-referrer
|
|
135
|
+
|
|
136
|
+
# CORS
|
|
137
|
+
/api/*
|
|
138
|
+
Access-Control-Allow-Origin: *
|
|
139
|
+
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
|
|
140
|
+
|
|
141
|
+
# Cache
|
|
142
|
+
/static/*
|
|
143
|
+
Cache-Control: public, max-age=31536000, immutable
|
|
144
|
+
|
|
145
|
+
# Prevent indexing previews
|
|
146
|
+
https://:project.pages.dev/*
|
|
147
|
+
X-Robots-Tag: noindex
|
|
148
|
+
|
|
149
|
+
# Remove header
|
|
150
|
+
/special-page
|
|
151
|
+
! X-Frame-Options
|
|
152
|
+
|
|
153
|
+
# Limits: 100 rules, 2,000 char/line
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Important**: Headers don't apply to Functions responses. Set in Response object.
|
|
157
|
+
|
|
158
|
+
### _routes.json
|
|
159
|
+
Controls which requests invoke Functions (auto-generated for most frameworks):
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"version": 1,
|
|
164
|
+
"include": ["/*"],
|
|
165
|
+
"exclude": [
|
|
166
|
+
"/build/*",
|
|
167
|
+
"/static/*",
|
|
168
|
+
"/assets/*",
|
|
169
|
+
"/*.ico",
|
|
170
|
+
"/*.png",
|
|
171
|
+
"/*.jpg",
|
|
172
|
+
"/*.css",
|
|
173
|
+
"/*.js"
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Purpose**: Functions are metered; static requests are free. `exclude` takes precedence. Max 100 rules, 100 char/rule.
|
|
179
|
+
|
|
180
|
+
## TypeScript
|
|
181
|
+
|
|
182
|
+
Generate types:
|
|
183
|
+
```bash
|
|
184
|
+
npx wrangler types --path='./functions/types.d.ts'
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
```json
|
|
188
|
+
// functions/tsconfig.json
|
|
189
|
+
{
|
|
190
|
+
"compilerOptions": {
|
|
191
|
+
"target": "esnext",
|
|
192
|
+
"module": "esnext",
|
|
193
|
+
"lib": ["esnext"],
|
|
194
|
+
"types": ["./types.d.ts"]
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Local Dev
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Basic
|
|
203
|
+
npx wrangler pages dev ./dist
|
|
204
|
+
|
|
205
|
+
# With bindings
|
|
206
|
+
npx wrangler pages dev ./dist --kv KV --d1 DB=local-db-id --r2 BUCKET
|
|
207
|
+
|
|
208
|
+
# Persistence
|
|
209
|
+
npx wrangler pages dev ./dist --persist-to=./.wrangler/state/v3
|
|
210
|
+
|
|
211
|
+
# Custom port
|
|
212
|
+
npx wrangler pages dev ./dist --port=3000
|
|
213
|
+
|
|
214
|
+
# Live reload
|
|
215
|
+
npx wrangler pages dev ./dist --live-reload
|
|
216
|
+
|
|
217
|
+
# Proxy mode (SSR frameworks)
|
|
218
|
+
npx wrangler pages dev -- npm run dev
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Limits
|
|
222
|
+
|
|
223
|
+
- **Functions**: 100k req/day (Free), 10ms CPU, 128MB memory, 1MB script
|
|
224
|
+
- **Deployments**: 500/month (Free), 20k files, 25MB/file
|
|
225
|
+
- **Config**: 2,100 redirects, 100 header rules, 100 route rules
|
|
226
|
+
- **Build**: 20min timeout, no Docker
|
|
227
|
+
|
|
228
|
+
[Full limits](https://developers.cloudflare.com/pages/platform/limits/)
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Gotchas
|
|
2
|
+
|
|
3
|
+
## Functions Not Running
|
|
4
|
+
|
|
5
|
+
1. **Check `_routes.json`**: May be excluding Function routes
|
|
6
|
+
2. **Verify file naming**: Must be `.js` or `.ts`, NOT `.jsx` or `.tsx`
|
|
7
|
+
3. **Check build output**: Functions dir must be at root of output dir
|
|
8
|
+
4. **Functions precedence**: Functions always override redirects/static
|
|
9
|
+
|
|
10
|
+
## 404 on Static Assets
|
|
11
|
+
|
|
12
|
+
1. **Build output dir**: Verify setting matches actual build output
|
|
13
|
+
2. **Functions catching requests**: Use `_routes.json` to exclude static paths
|
|
14
|
+
3. **Advanced mode**: Must call `env.ASSETS.fetch()` or static won't serve
|
|
15
|
+
|
|
16
|
+
## Bindings Not Working
|
|
17
|
+
|
|
18
|
+
1. **wrangler.toml syntax**: Check for TOML errors
|
|
19
|
+
2. **Binding IDs**: Verify correct (especially for KV/D1/R2)
|
|
20
|
+
3. **Local dev**: Check `.dev.vars` exists and has correct values
|
|
21
|
+
4. **Regenerate types**: `npx wrangler types --path='./functions/types.d.ts'`
|
|
22
|
+
5. **Environment**: Production bindings ≠ preview bindings (set separately)
|
|
23
|
+
|
|
24
|
+
## Build Failures
|
|
25
|
+
|
|
26
|
+
1. **Build logs**: Check in Dashboard → Deployments → Build log
|
|
27
|
+
2. **Build command**: Verify correct for framework
|
|
28
|
+
3. **Output directory**: Must match actual build output
|
|
29
|
+
4. **Node version**: Check compatibility (set via `.nvmrc` or env var)
|
|
30
|
+
5. **Environment variables**: Review in Settings → Environment variables
|
|
31
|
+
6. **Timeout**: 20min max. Long builds may fail.
|
|
32
|
+
7. **Memory**: Build can OOM on large projects
|
|
33
|
+
|
|
34
|
+
## Deployment Fails
|
|
35
|
+
|
|
36
|
+
1. **File count**: Max 20,000 files per deployment
|
|
37
|
+
2. **File size**: Max 25MB per file
|
|
38
|
+
3. **Build errors**: Check build output in logs
|
|
39
|
+
4. **wrangler.toml validation**: `npx wrangler pages project validate`
|
|
40
|
+
5. **Bindings**: Verify all referenced bindings exist
|
|
41
|
+
|
|
42
|
+
## Middleware Not Running
|
|
43
|
+
|
|
44
|
+
1. **File location**: Must be `_middleware.ts` (underscore prefix)
|
|
45
|
+
2. **Export**: Must export `onRequest` or method-specific handlers
|
|
46
|
+
3. **Must call `next()`**: Or return Response directly
|
|
47
|
+
4. **Scope**: `functions/_middleware.ts` applies to ALL (including static)
|
|
48
|
+
5. **Order**: Array order matters: `[errorHandler, auth, logging]`
|
|
49
|
+
|
|
50
|
+
## Headers Not Applied
|
|
51
|
+
|
|
52
|
+
1. **Functions responses**: `_headers` only applies to static assets
|
|
53
|
+
2. **Set in code**: Functions must set headers via Response object
|
|
54
|
+
3. **Syntax**: Check `_headers` file syntax (path, then indented headers)
|
|
55
|
+
4. **Limits**: Max 100 header rules
|
|
56
|
+
|
|
57
|
+
## Redirects Not Working
|
|
58
|
+
|
|
59
|
+
1. **Functions take precedence**: Redirects don't apply to Function routes
|
|
60
|
+
2. **Syntax**: Check `_redirects` file format
|
|
61
|
+
3. **Limits**: Max 2,100 redirects (2,000 static + 100 dynamic)
|
|
62
|
+
4. **Query strings**: Preserved automatically
|
|
63
|
+
5. **Testing**: Preview deployments to test before production
|
|
64
|
+
|
|
65
|
+
## TypeScript Errors
|
|
66
|
+
|
|
67
|
+
1. **Generate types**: `npx wrangler types` before dev
|
|
68
|
+
2. **tsconfig**: Point `types` to generated file
|
|
69
|
+
3. **Env interface**: Must match wrangler.toml bindings
|
|
70
|
+
4. **Type imports**: `import type { PagesFunction } from '@cloudflare/workers-types'`
|
|
71
|
+
|
|
72
|
+
## Local Dev Issues
|
|
73
|
+
|
|
74
|
+
1. **Port conflicts**: Use `--port=3000` to change
|
|
75
|
+
2. **Bindings**: Must pass via CLI flags or wrangler.toml
|
|
76
|
+
3. **Persistence**: Use `--persist-to` to keep data between restarts
|
|
77
|
+
4. **Hot reload**: May need manual restart for some changes
|
|
78
|
+
5. **HTTPS**: Local dev uses HTTP, production uses HTTPS (affects cookies, etc.)
|
|
79
|
+
|
|
80
|
+
## Preview vs Production
|
|
81
|
+
|
|
82
|
+
1. **Different bindings**: Set separately in Dashboard
|
|
83
|
+
2. **Different env vars**: Configure per environment
|
|
84
|
+
3. **Branch deploys**: Every branch gets preview deployment
|
|
85
|
+
4. **URLs**: `https://branch.project.pages.dev` vs `https://project.pages.dev`
|
|
86
|
+
|
|
87
|
+
## Performance Issues
|
|
88
|
+
|
|
89
|
+
1. **Function invocations**: Exclude static assets via `_routes.json`
|
|
90
|
+
2. **Cold starts**: First request after deploy may be slower
|
|
91
|
+
3. **CPU time**: 10ms limit per request (can hit on complex operations)
|
|
92
|
+
4. **Memory**: 128MB limit (watch for large JSON parsing)
|
|
93
|
+
5. **Bundle size**: Keep Functions < 1MB compressed
|
|
94
|
+
|
|
95
|
+
## Framework-Specific
|
|
96
|
+
|
|
97
|
+
### Next.js
|
|
98
|
+
- Use `@cloudflare/next-on-pages` adapter
|
|
99
|
+
- Some features unsupported (ISR, Middleware with waitUntil in body)
|
|
100
|
+
- Check [compatibility](https://github.com/cloudflare/next-on-pages/blob/main/docs/compatibility.md)
|
|
101
|
+
|
|
102
|
+
### SvelteKit
|
|
103
|
+
- Use `@sveltejs/adapter-cloudflare`
|
|
104
|
+
- Set `platform: 'cloudflare'` in svelte.config.js
|
|
105
|
+
|
|
106
|
+
### Remix
|
|
107
|
+
- Use `@remix-run/cloudflare-pages`
|
|
108
|
+
- Check server context for bindings
|
|
109
|
+
|
|
110
|
+
## Debugging
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Log everything
|
|
114
|
+
console.log('Request:', {
|
|
115
|
+
method: request.method,
|
|
116
|
+
url: request.url,
|
|
117
|
+
headers: Object.fromEntries(request.headers),
|
|
118
|
+
});
|
|
119
|
+
console.log('Env:', Object.keys(env));
|
|
120
|
+
console.log('Params:', params);
|
|
121
|
+
console.log('Data:', data);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**View logs**:
|
|
125
|
+
```bash
|
|
126
|
+
npx wrangler pages deployment tail --project-name=my-project
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Common Errors
|
|
130
|
+
|
|
131
|
+
**"Module not found"**: Check build output, ensure dependencies bundled
|
|
132
|
+
|
|
133
|
+
**"Binding not found"**: Verify wrangler.toml and regenerate types
|
|
134
|
+
|
|
135
|
+
**"Request exceeded CPU limit"**: Optimize hot paths, use Workers for heavy compute
|
|
136
|
+
|
|
137
|
+
**"Script too large"**: Tree-shake, dynamic imports, code-split
|
|
138
|
+
|
|
139
|
+
**"Too many subrequests"**: Max 50 subreqs per request, batch where possible
|
|
140
|
+
|
|
141
|
+
**"KV key not found"**: Check namespaces match (production vs preview)
|
|
142
|
+
|
|
143
|
+
**"D1 error"**: Verify database_id, check migrations applied
|
|
144
|
+
|
|
145
|
+
## Limits Reference
|
|
146
|
+
|
|
147
|
+
- **Functions**: 100k req/day (Free), 10ms CPU, 128MB memory, 1MB script
|
|
148
|
+
- **Deployments**: 500/month (Free), 20k files, 25MB/file
|
|
149
|
+
- **Config**: 2,100 redirects, 100 headers, 100 routes
|
|
150
|
+
- **Build**: 20min timeout
|
|
151
|
+
- **Subrequests**: 50/request
|
|
152
|
+
- **Request size**: 100MB
|
|
153
|
+
|
|
154
|
+
[Full limits](https://developers.cloudflare.com/pages/platform/limits/)
|
|
155
|
+
|
|
156
|
+
## Getting Help
|
|
157
|
+
|
|
158
|
+
1. Check [Pages Docs](https://developers.cloudflare.com/pages/)
|
|
159
|
+
2. Search [Discord #functions](https://discord.com/channels/595317990191398933/910978223968518144)
|
|
160
|
+
3. Review [Workers Examples](https://developers.cloudflare.com/workers/examples/)
|
|
161
|
+
4. Check framework-specific docs/adapters
|