summaryrefslogtreecommitdiff
path: root/packages/integrations/cloudflare/src
diff options
context:
space:
mode:
authorGravatar Bjorn Lu <bjornlu.dev@gmail.com> 2022-11-08 21:54:49 +0800
committerGravatar GitHub <noreply@github.com> 2022-11-08 21:54:49 +0800
commita79a37cad549b21f91599ff86899e456d9dcc7df (patch)
treef1fe4c030558e505f06a95864ae780365cefebf4 /packages/integrations/cloudflare/src
parent7f3b0398e0350d268f5d07fa2d2520efed7af9be (diff)
downloadastro-a79a37cad549b21f91599ff86899e456d9dcc7df.tar.gz
astro-a79a37cad549b21f91599ff86899e456d9dcc7df.tar.zst
astro-a79a37cad549b21f91599ff86899e456d9dcc7df.zip
Support environment variables in Cloudflare and Netlify Edge functions (#5301)
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
Diffstat (limited to 'packages/integrations/cloudflare/src')
-rw-r--r--packages/integrations/cloudflare/src/server.advanced.ts7
-rw-r--r--packages/integrations/cloudflare/src/server.directory.ts7
-rw-r--r--packages/integrations/cloudflare/src/shim.ts4
-rw-r--r--packages/integrations/cloudflare/src/util.ts16
4 files changed, 26 insertions, 8 deletions
diff --git a/packages/integrations/cloudflare/src/server.advanced.ts b/packages/integrations/cloudflare/src/server.advanced.ts
index ac040c9b2..cb83dd994 100644
--- a/packages/integrations/cloudflare/src/server.advanced.ts
+++ b/packages/integrations/cloudflare/src/server.advanced.ts
@@ -1,7 +1,8 @@
-import './shim.js';
-
import type { SSRManifest } from 'astro';
import { App } from 'astro/app';
+import { getProcessEnvProxy } from './util.js';
+
+process.env = getProcessEnvProxy();
type Env = {
ASSETS: { fetch: (req: Request) => Promise<Response> };
@@ -12,6 +13,8 @@ export function createExports(manifest: SSRManifest) {
const app = new App(manifest, false);
const fetch = async (request: Request, env: Env, context: any) => {
+ process.env = env as any;
+
const { origin, pathname } = new URL(request.url);
// static assets
diff --git a/packages/integrations/cloudflare/src/server.directory.ts b/packages/integrations/cloudflare/src/server.directory.ts
index e7463b84c..321f37e18 100644
--- a/packages/integrations/cloudflare/src/server.directory.ts
+++ b/packages/integrations/cloudflare/src/server.directory.ts
@@ -1,7 +1,8 @@
-import './shim.js';
-
import type { SSRManifest } from 'astro';
import { App } from 'astro/app';
+import { getProcessEnvProxy } from './util.js';
+
+process.env = getProcessEnvProxy();
export function createExports(manifest: SSRManifest) {
const app = new App(manifest, false);
@@ -14,6 +15,8 @@ export function createExports(manifest: SSRManifest) {
request: Request;
next: (request: Request) => void;
} & Record<string, unknown>) => {
+ process.env = runtimeEnv.env as any;
+
const { origin, pathname } = new URL(request.url);
// static assets
if (manifest.assets.has(pathname)) {
diff --git a/packages/integrations/cloudflare/src/shim.ts b/packages/integrations/cloudflare/src/shim.ts
deleted file mode 100644
index 1a4a6ee9b..000000000
--- a/packages/integrations/cloudflare/src/shim.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-(globalThis as any).process = {
- argv: [],
- env: {},
-};
diff --git a/packages/integrations/cloudflare/src/util.ts b/packages/integrations/cloudflare/src/util.ts
new file mode 100644
index 000000000..a44780863
--- /dev/null
+++ b/packages/integrations/cloudflare/src/util.ts
@@ -0,0 +1,16 @@
+export function getProcessEnvProxy() {
+ return new Proxy(
+ {},
+ {
+ get: (target, prop) => {
+ console.warn(
+ // NOTE: \0 prevents Vite replacement
+ `Unable to access \`import.meta\0.env.${prop.toString()}\` on initialization ` +
+ `as the Cloudflare platform only provides the environment variables per request. ` +
+ `Please move the environment variable access inside a function ` +
+ `that's only called after a request has been received.`
+ );
+ },
+ }
+ );
+}