diff options
author | 2022-10-26 15:46:25 +0200 | |
---|---|---|
committer | 2022-10-26 09:46:25 -0400 | |
commit | d151d9f3f29c0a57c59b8029a18717808ccc7f8f (patch) | |
tree | d6ddc610bf46bbfe50eeb1bf3fe3362529d82f30 /packages/integrations/cloudflare/src | |
parent | 4efbfdd78d239f708a76eac38c2e971fc956a54e (diff) | |
download | astro-d151d9f3f29c0a57c59b8029a18717808ccc7f8f.tar.gz astro-d151d9f3f29c0a57c59b8029a18717808ccc7f8f.tar.zst astro-d151d9f3f29c0a57c59b8029a18717808ccc7f8f.zip |
enable access to cloudflare runtime (#5103)
* enable access to cloudflare runtime
* added get runtime api
added context to the runtime in "advanced" mode
* added typings and adjusted some return vars
* added default types
* added usage description to changeset and readme
Co-authored-by: AirBorne04 <unknown>
Co-authored-by: AirBorne04 <>
Diffstat (limited to 'packages/integrations/cloudflare/src')
-rw-r--r-- | packages/integrations/cloudflare/src/runtime.ts | 28 | ||||
-rw-r--r-- | packages/integrations/cloudflare/src/server.advanced.ts | 4 | ||||
-rw-r--r-- | packages/integrations/cloudflare/src/server.directory.ts | 9 |
3 files changed, 38 insertions, 3 deletions
diff --git a/packages/integrations/cloudflare/src/runtime.ts b/packages/integrations/cloudflare/src/runtime.ts new file mode 100644 index 000000000..ddf372cb4 --- /dev/null +++ b/packages/integrations/cloudflare/src/runtime.ts @@ -0,0 +1,28 @@ +export type WorkerRuntime<T = unknown> = { + name: 'cloudflare'; + env: T; + waitUntil(promise: Promise<any>): void; + passThroughOnException(): void; +}; + +export type PagesRuntime<T = unknown, U = unknown> = { + name: 'cloudflare'; + env: T; + functionPath: string; + params: Record<string, string>; + data: U; + waitUntil(promise: Promise<any>): void; + next(request: Request): void; +}; + +export function getRuntime<T = unknown, U = unknown>( + request: Request +): WorkerRuntime<T> | PagesRuntime<T, U> { + if (!!request) { + return Reflect.get(request, Symbol.for('runtime')); + } else { + throw new Error( + 'To retrieve the current cloudflare runtime you need to pass in the Astro request object' + ); + } +} diff --git a/packages/integrations/cloudflare/src/server.advanced.ts b/packages/integrations/cloudflare/src/server.advanced.ts index c285ccaba..502700e0b 100644 --- a/packages/integrations/cloudflare/src/server.advanced.ts +++ b/packages/integrations/cloudflare/src/server.advanced.ts @@ -5,12 +5,13 @@ import { App } from 'astro/app'; type Env = { ASSETS: { fetch: (req: Request) => Promise<Response> }; + name: string; }; export function createExports(manifest: SSRManifest) { const app = new App(manifest, false); - const fetch = async (request: Request, env: Env) => { + const fetch = async (request: Request, env: Env, context: any) => { const { origin, pathname } = new URL(request.url); // static assets @@ -26,6 +27,7 @@ export function createExports(manifest: SSRManifest) { Symbol.for('astro.clientAddress'), request.headers.get('cf-connecting-ip') ); + Reflect.set(request, Symbol.for('runtime'), { env, name: 'cloudflare', ...context }); let response = await app.render(request, routeData); if (app.setCookieHeaders) { diff --git a/packages/integrations/cloudflare/src/server.directory.ts b/packages/integrations/cloudflare/src/server.directory.ts index e51d0ea57..d31e2189f 100644 --- a/packages/integrations/cloudflare/src/server.directory.ts +++ b/packages/integrations/cloudflare/src/server.directory.ts @@ -9,12 +9,12 @@ export function createExports(manifest: SSRManifest) { const onRequest = async ({ request, next, + ...runtimeEnv }: { request: Request; next: (request: Request) => void; - }) => { + } & Record<string, unknown>) => { const { origin, pathname } = new URL(request.url); - // static assets if (manifest.assets.has(pathname)) { const assetRequest = new Request(`${origin}/static${pathname}`, request); @@ -28,6 +28,11 @@ export function createExports(manifest: SSRManifest) { Symbol.for('astro.clientAddress'), request.headers.get('cf-connecting-ip') ); + Reflect.set(request, Symbol.for('runtime'), { + ...runtimeEnv, + name: 'cloudflare', + next, + }); let response = await app.render(request, routeData); if (app.setCookieHeaders) { |