diff options
author | 2025-03-21 11:02:21 +0100 | |
---|---|---|
committer | 2025-03-21 11:02:21 +0100 | |
commit | 9721f4a69f0fca389f146a5b8051cc17a34cdb0f (patch) | |
tree | e6029943507106d210a7a4375c739a1f124f4e8b | |
parent | 3bc2c094c995c47bd3e1e0e046e60db45de7a02c (diff) | |
download | astro-9721f4a69f0fca389f146a5b8051cc17a34cdb0f.tar.gz astro-9721f4a69f0fca389f146a5b8051cc17a34cdb0f.tar.zst astro-9721f4a69f0fca389f146a5b8051cc17a34cdb0f.zip |
feat(cloudflare): global env (#13444)
* feat(cloudflare): global env
* fix: test
-rw-r--r-- | .changeset/cold-news-hope.md | 9 | ||||
-rw-r--r-- | packages/integrations/cloudflare/env.d.ts | 1 | ||||
-rw-r--r-- | packages/integrations/cloudflare/package.json | 4 | ||||
-rw-r--r-- | packages/integrations/cloudflare/src/entrypoints/server.ts | 5 | ||||
-rw-r--r-- | packages/integrations/cloudflare/tsconfig.json | 2 | ||||
-rw-r--r-- | pnpm-lock.yaml | 156 |
6 files changed, 130 insertions, 47 deletions
diff --git a/.changeset/cold-news-hope.md b/.changeset/cold-news-hope.md new file mode 100644 index 000000000..6c371cf17 --- /dev/null +++ b/.changeset/cold-news-hope.md @@ -0,0 +1,9 @@ +--- +'@astrojs/cloudflare': minor +--- + +Adds global `astro:env` support + +Cloudflare workers [now support importing `env` in the global scope](https://developers.cloudflare.com/changelog/2025-03-17-importable-env/). Until now, calling `astro:env` APIs had to be done within request scope or the values were `undefined`. + +With this release, they can be called anywhere server-side, like any other official adapter.
\ No newline at end of file diff --git a/packages/integrations/cloudflare/env.d.ts b/packages/integrations/cloudflare/env.d.ts new file mode 100644 index 000000000..32878acf3 --- /dev/null +++ b/packages/integrations/cloudflare/env.d.ts @@ -0,0 +1 @@ +/// <reference types="@cloudflare/workers-types" />
\ No newline at end of file diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json index 825a566fe..3bdf9c1bf 100644 --- a/packages/integrations/cloudflare/package.json +++ b/packages/integrations/cloudflare/package.json @@ -36,14 +36,14 @@ "dependencies": { "@astrojs/internal-helpers": "workspace:*", "@astrojs/underscore-redirects": "workspace:*", - "@cloudflare/workers-types": "^4.20250310.0", + "@cloudflare/workers-types": "^4.20250317.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "miniflare": "^4.20250317.0", "tinyglobby": "^0.2.12", "vite": "^6.2.1", - "wrangler": "^3.112.0" + "wrangler": "^4.2.0" }, "peerDependencies": { "astro": "^5.0.0" diff --git a/packages/integrations/cloudflare/src/entrypoints/server.ts b/packages/integrations/cloudflare/src/entrypoints/server.ts index d9ae17be0..7a7ba66b5 100644 --- a/packages/integrations/cloudflare/src/entrypoints/server.ts +++ b/packages/integrations/cloudflare/src/entrypoints/server.ts @@ -6,8 +6,11 @@ import type { import type { SSRManifest } from 'astro'; import { App } from 'astro/app'; import { setGetEnv } from 'astro/env/setup'; +import { env as globalEnv } from 'cloudflare:workers'; import { createGetEnv } from '../utils/env.js'; +setGetEnv(createGetEnv(globalEnv as Env)); + type Env = { [key: string]: unknown; ASSETS: { fetch: (req: Request | string) => Promise<Response> }; @@ -79,8 +82,6 @@ export function createExports(manifest: SSRManifest) { }, }; - setGetEnv(createGetEnv(env)); - const response = await app.render(request, { routeData, locals }); if (app.setCookieHeaders) { diff --git a/packages/integrations/cloudflare/tsconfig.json b/packages/integrations/cloudflare/tsconfig.json index 1504b4b6d..e4f591679 100644 --- a/packages/integrations/cloudflare/tsconfig.json +++ b/packages/integrations/cloudflare/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../../tsconfig.base.json", - "include": ["src"], + "include": ["env.d.ts", "src"], "compilerOptions": { "outDir": "./dist" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4733b3bd..ddcedba68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4295,7 +4295,7 @@ importers: version: 1.0.2 drizzle-orm: specifier: ^0.31.2 - version: 0.31.4(@cloudflare/workers-types@4.20250310.0)(@libsql/client@0.14.0)(@types/react@18.3.19)(react@19.0.0) + version: 0.31.4(@cloudflare/workers-types@4.20250320.0)(@libsql/client@0.14.0)(@types/react@18.3.19)(react@19.0.0) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -4556,8 +4556,8 @@ importers: specifier: workspace:* version: link:../../underscore-redirects '@cloudflare/workers-types': - specifier: ^4.20250310.0 - version: 4.20250310.0 + specifier: ^4.20250317.0 + version: 4.20250320.0 esbuild: specifier: ^0.25.0 version: 0.25.0 @@ -4569,7 +4569,7 @@ importers: version: 0.30.17 miniflare: specifier: ^4.20250317.0 - version: 4.20250317.0 + version: 4.20250319.0 tinyglobby: specifier: ^0.2.12 version: 0.2.12 @@ -4577,8 +4577,8 @@ importers: specifier: ^6.2.1 version: 6.2.2(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.5.1) wrangler: - specifier: ^3.112.0 - version: 3.112.0(@cloudflare/workers-types@4.20250310.0) + specifier: ^4.2.0 + version: 4.3.0(@cloudflare/workers-types@4.20250320.0) devDependencies: astro: specifier: workspace:* @@ -4610,7 +4610,7 @@ importers: devDependencies: wrangler: specifier: ^3.112.0 - version: 3.112.0(@cloudflare/workers-types@4.20250310.0) + version: 3.112.0(@cloudflare/workers-types@4.20250320.0) packages/integrations/cloudflare/test/fixtures/astro-env: dependencies: @@ -4623,7 +4623,7 @@ importers: devDependencies: wrangler: specifier: ^3.112.0 - version: 3.112.0(@cloudflare/workers-types@4.20250310.0) + version: 3.112.0(@cloudflare/workers-types@4.20250320.0) packages/integrations/cloudflare/test/fixtures/compile-image-service: dependencies: @@ -6658,14 +6658,27 @@ packages: resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} + + '@cloudflare/unenv-preset@2.2.0': + resolution: {integrity: sha512-U5/TQBjJN/HQ1JA4mzt5sTbvdT9aoucHYGbokY2JWwDkYbgoaTygYBshZpXHUo8lDppsAGdUf3pGlOc6U09HAg==} + peerDependencies: + unenv: 2.0.0-rc.15 + workerd: ^1.20250310.0 + peerDependenciesMeta: + workerd: + optional: true + '@cloudflare/workerd-darwin-64@1.20250214.0': resolution: {integrity: sha512-cDvvedWDc5zrgDnuXe2qYcz/TwBvzmweO55C7XpPuAWJ9Oqxv81PkdekYxD8mH989aQ/GI5YD0Fe6fDYlM+T3Q==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-64@1.20250317.0': - resolution: {integrity: sha512-ZnpF+MP/azHJ7sUOW9Ut/5pqeijsEOSmRUpONDXImv/DiHgtCd2BA/He11srp8nG2XeWav3jk+Ob84NKrrXXHg==} + '@cloudflare/workerd-darwin-64@1.20250319.0': + resolution: {integrity: sha512-8B08kYAp1rEgXRe+YV3uCAGYa65KS8V/pajmgh5U4yULLmHryd4OPo8wf3RYl4uk5ZNbtUKR1GUNLkIraTL6Rw==} engines: {node: '>=16'} cpu: [x64] os: [darwin] @@ -6676,8 +6689,8 @@ packages: cpu: [arm64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250317.0': - resolution: {integrity: sha512-ypn2/SIK7LAouYx5oB0NNhzb3h+ZdXtDh94VCcsNV81xAVdDXKp6xvTnqY8CWjGfuKWJocbRZVZvU+Lquhuujg==} + '@cloudflare/workerd-darwin-arm64@1.20250319.0': + resolution: {integrity: sha512-UW1c15oFYRPxwt4qEQufA/XlK5AnbVJFs7PwXo2suLXhxAdTZUKk0Mg1DgDTN65wmqQimRt4ayLVbfxFpzt0bA==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] @@ -6688,8 +6701,8 @@ packages: cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-64@1.20250317.0': - resolution: {integrity: sha512-KfAHN9VHF2NxGjDjj7udLAatZ72GIg4xmN9r2AZ6N1/hsGDlbn+NbVkSJtWjpXBcCoWYxQqtAdpHyO4eb7nIvQ==} + '@cloudflare/workerd-linux-64@1.20250319.0': + resolution: {integrity: sha512-oYrTq/FP74IxaEwqHZep8sPoy5btrb8x9ubt6aYy+A1s8IHqma3bYzDmRJ8AMDl9d5+ASFqkAqB/Cj8HN1agPA==} engines: {node: '>=16'} cpu: [x64] os: [linux] @@ -6700,8 +6713,8 @@ packages: cpu: [arm64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250317.0': - resolution: {integrity: sha512-o7a3poQ4vzw553xGudUWm8yGsfdRWSGxqDEdYyuzT5k3z4qjsYMGsZgW9Yw8x3f1SSpPgYpdLlc8IKg9n7eukA==} + '@cloudflare/workerd-linux-arm64@1.20250319.0': + resolution: {integrity: sha512-n9Qy+iA6SQSL3dRLXlkTQEHP65/i6Mk4UOFh67BOlrFJlov+/u77pyGG4koPLcuts0SnGxA0eDNlua6CN/GGAg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] @@ -6712,14 +6725,14 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workerd-windows-64@1.20250317.0': - resolution: {integrity: sha512-tfDSioKY5OKP0nZ7Mkc6bLcwY2fIrROwoq2WjekQ62x91KRbKCJwjkOSvyFJYbshDATK90GutYoblqV80e34jw==} + '@cloudflare/workerd-windows-64@1.20250319.0': + resolution: {integrity: sha512-MUYzPZiz3wbLtHjfc0RdO0tETTDJF9OcRPNzw8RpWba98Z1uhMX2hQ5gNQNgQJ+Y5TDMlcKHZVIJU/5E7/qcZw==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20250310.0': - resolution: {integrity: sha512-SNE2ohlL9/VxFbcHQc28n3Nj70FiS1Ea0wrUhCXUIbR2lsr4ceRVndNxhuzhcF9EZd2UXm2wwow34RIS1mm+Mg==} + '@cloudflare/workers-types@4.20250320.0': + resolution: {integrity: sha512-0qYPnnF36eEzes/uLBrIE7pbyOucnyNVTlcPY4zgakZT0BBdrHYoTDGH+9VqwfcMW7mLu2PY2daYGIFsgycX2A==} '@codspeed/core@4.0.0': resolution: {integrity: sha512-B3zwdwLG8rcV0ORfYKX1wDP6ZCWf9C6ySidSf61q2vm9v5Lj2cWwRvj7vX+w/UyFHWKjp/zSyWTEed/r3Fv4Tg==} @@ -9574,6 +9587,9 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -10593,8 +10609,8 @@ packages: engines: {node: '>=16.13'} hasBin: true - miniflare@4.20250317.0: - resolution: {integrity: sha512-fCyFTa3G41Vyo24QUZD5xgdm+6RMKT6VC3vk9Usmr+Pwf/15HcH1AVLPVgzmJaJosWVb8r4S0HQ9a/+bmmZx0Q==} + miniflare@4.20250319.0: + resolution: {integrity: sha512-xBBsl1TOkelBcSXikhvu5bQMZucXy8lXNGUgix4Fi0Fuz3d9flMpyIM7XVI5Br1BPqQ3hwwLASMOBBahAJYWag==} engines: {node: '>=18.0.0'} hasBin: true @@ -10792,6 +10808,9 @@ packages: ohash@1.1.4: resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -12110,6 +12129,9 @@ packages: unenv@2.0.0-rc.1: resolution: {integrity: sha512-PU5fb40H8X149s117aB4ytbORcCvlASdtF97tfls4BPIyj4PeVxvpSuy1jAptqYHqB0vb2w2sHvzM0XWcp2OKg==} + unenv@2.0.0-rc.15: + resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -12583,8 +12605,8 @@ packages: engines: {node: '>=16'} hasBin: true - workerd@1.20250317.0: - resolution: {integrity: sha512-m+aqA4RS/jsIaml0KuTi96UBlkx1vC0mcLClGKPFNPiMStK75hVQxUhupXEMI4knHtb/vgNQyPFMKAJtxW5c6w==} + workerd@1.20250319.0: + resolution: {integrity: sha512-/+JfU0Iq+L2DWpJeBCvQIY88OkxoEV5IPbTpa+FFkBTW3eAyE7pV+DpvcvXfG94DFrA3D4z0EE9ZNwVKO5w42A==} engines: {node: '>=16'} hasBin: true @@ -12598,6 +12620,16 @@ packages: '@cloudflare/workers-types': optional: true + wrangler@4.3.0: + resolution: {integrity: sha512-eGSj/Og4cxMF2jwstPswayU2aj9fN4FSX7rF3p+Pqe/EEVrCrs/38YsBXePbAjTs+4F8K/VvWtXYRzZ1xtZRuA==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20250319.0 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -13266,37 +13298,47 @@ snapshots: dependencies: mime: 3.0.0 + '@cloudflare/kv-asset-handler@0.4.0': + dependencies: + mime: 3.0.0 + + '@cloudflare/unenv-preset@2.2.0(unenv@2.0.0-rc.15)(workerd@1.20250319.0)': + dependencies: + unenv: 2.0.0-rc.15 + optionalDependencies: + workerd: 1.20250319.0 + '@cloudflare/workerd-darwin-64@1.20250214.0': optional: true - '@cloudflare/workerd-darwin-64@1.20250317.0': + '@cloudflare/workerd-darwin-64@1.20250319.0': optional: true '@cloudflare/workerd-darwin-arm64@1.20250214.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250317.0': + '@cloudflare/workerd-darwin-arm64@1.20250319.0': optional: true '@cloudflare/workerd-linux-64@1.20250214.0': optional: true - '@cloudflare/workerd-linux-64@1.20250317.0': + '@cloudflare/workerd-linux-64@1.20250319.0': optional: true '@cloudflare/workerd-linux-arm64@1.20250214.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250317.0': + '@cloudflare/workerd-linux-arm64@1.20250319.0': optional: true '@cloudflare/workerd-windows-64@1.20250214.0': optional: true - '@cloudflare/workerd-windows-64@1.20250317.0': + '@cloudflare/workerd-windows-64@1.20250319.0': optional: true - '@cloudflare/workers-types@4.20250310.0': {} + '@cloudflare/workers-types@4.20250320.0': {} '@codspeed/core@4.0.0': dependencies: @@ -15657,9 +15699,9 @@ snapshots: dotenv@8.6.0: {} - drizzle-orm@0.31.4(@cloudflare/workers-types@4.20250310.0)(@libsql/client@0.14.0)(@types/react@18.3.19)(react@19.0.0): + drizzle-orm@0.31.4(@cloudflare/workers-types@4.20250320.0)(@libsql/client@0.14.0)(@types/react@18.3.19)(react@19.0.0): optionalDependencies: - '@cloudflare/workers-types': 4.20250310.0 + '@cloudflare/workers-types': 4.20250320.0 '@libsql/client': 0.14.0 '@types/react': 18.3.19 react: 19.0.0 @@ -16029,6 +16071,8 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.4: {} + extend@3.0.2: {} extendable-error@0.1.7: {} @@ -17401,7 +17445,7 @@ snapshots: - bufferutil - utf-8-validate - miniflare@4.20250317.0: + miniflare@4.20250319.0: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -17410,7 +17454,7 @@ snapshots: glob-to-regexp: 0.4.1 stoppable: 1.1.0 undici: 5.28.5 - workerd: 1.20250317.0 + workerd: 1.20250319.0 ws: 8.18.0 youch: 3.2.3 zod: 3.22.3 @@ -17578,6 +17622,8 @@ snapshots: ohash@1.1.4: {} + ohash@2.0.11: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -19109,6 +19155,14 @@ snapshots: pathe: 1.1.2 ufo: 1.5.4 + unenv@2.0.0-rc.15: + dependencies: + defu: 6.1.4 + exsolve: 1.0.4 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.5.4 + unicorn-magic@0.3.0: {} unified@11.0.5: @@ -19581,15 +19635,15 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250214.0 '@cloudflare/workerd-windows-64': 1.20250214.0 - workerd@1.20250317.0: + workerd@1.20250319.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250317.0 - '@cloudflare/workerd-darwin-arm64': 1.20250317.0 - '@cloudflare/workerd-linux-64': 1.20250317.0 - '@cloudflare/workerd-linux-arm64': 1.20250317.0 - '@cloudflare/workerd-windows-64': 1.20250317.0 + '@cloudflare/workerd-darwin-64': 1.20250319.0 + '@cloudflare/workerd-darwin-arm64': 1.20250319.0 + '@cloudflare/workerd-linux-64': 1.20250319.0 + '@cloudflare/workerd-linux-arm64': 1.20250319.0 + '@cloudflare/workerd-windows-64': 1.20250319.0 - wrangler@3.112.0(@cloudflare/workers-types@4.20250310.0): + wrangler@3.112.0(@cloudflare/workers-types@4.20250320.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) @@ -19601,7 +19655,25 @@ snapshots: unenv: 2.0.0-rc.1 workerd: 1.20250214.0 optionalDependencies: - '@cloudflare/workers-types': 4.20250310.0 + '@cloudflare/workers-types': 4.20250320.0 + fsevents: 2.3.3 + sharp: 0.33.5 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + wrangler@4.3.0(@cloudflare/workers-types@4.20250320.0): + dependencies: + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.2.0(unenv@2.0.0-rc.15)(workerd@1.20250319.0) + blake3-wasm: 2.1.5 + esbuild: 0.24.2 + miniflare: 4.20250319.0 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.15 + workerd: 1.20250319.0 + optionalDependencies: + '@cloudflare/workers-types': 4.20250320.0 fsevents: 2.3.3 sharp: 0.33.5 transitivePeerDependencies: |