summaryrefslogtreecommitdiff
path: root/packages/integrations/cloudflare/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/cloudflare/src')
-rw-r--r--packages/integrations/cloudflare/src/runtime.ts28
-rw-r--r--packages/integrations/cloudflare/src/server.advanced.ts4
-rw-r--r--packages/integrations/cloudflare/src/server.directory.ts9
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) {