Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 2 additions & 21 deletions packages/react-server/adapters/aws/functions/handler.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { readFileSync, statSync } from "node:fs";
import { join, extname } from "node:path";
import { reactServer } from "@lazarv/react-server/edge";
import { createContext } from "@lazarv/react-server/http";
import { finalizeResponse } from "../../shared/edge-handler.mjs";

let serverPromise = null;

Expand Down Expand Up @@ -195,27 +196,7 @@ async function handleRequest(event, context) {
});

const response = await handler(httpContext);

if (!response) {
return new Response("Not Found", {
status: 404,
headers: { "content-type": "text/plain" },
});
}

if (httpContext._setCookies?.length) {
const headers = new Headers(response.headers);
for (const c of httpContext._setCookies) {
headers.append("set-cookie", c);
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
}

return response;
return finalizeResponse(httpContext, response);
} catch (e) {
console.error(e);
return new Response(e.message || "Internal Server Error", {
Expand Down
66 changes: 11 additions & 55 deletions packages/react-server/adapters/azure-swa/functions/entry.mjs
Original file line number Diff line number Diff line change
@@ -1,55 +1,11 @@
import { reactServer } from "@lazarv/react-server/edge";
import { createContext } from "@lazarv/react-server/http";

let serverPromise = null;

export default async (request, context) => {
try {
if (!serverPromise) {
serverPromise = reactServer({
origin:
process.env.ORIGIN ||
`${new URL(request.url).protocol}//${new URL(request.url).host}`,
outDir: "../",
});
}

const { handler } = await serverPromise;

const origin =
process.env.ORIGIN ||
`${new URL(request.url).protocol}//${new URL(request.url).host}`;
const httpContext = createContext(request, {
origin,
runtime: "azure",
platformExtras: context ?? {},
});

const response = await handler(httpContext);

if (!response) {
return new Response("Not Found", { status: 404 });
}

// Add set-cookie headers
if (httpContext._setCookies?.length) {
const headers = new Headers(response.headers);
for (const c of httpContext._setCookies) {
headers.append("set-cookie", c);
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
}

return response;
} catch (e) {
console.error(e);
return new Response(e.message || "Internal Server Error", {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
};
import { createEdgeHandler } from "../../shared/edge-handler.mjs";

export default createEdgeHandler({
resolveOrigin: (request) =>
process.env.ORIGIN ||
`${new URL(request.url).protocol}//${new URL(request.url).host}`,
outDir: "../",
runtime: "azure",
resolvePlatformExtras: (context) => context ?? {},
onError: (e) => console.error(e),
});
61 changes: 10 additions & 51 deletions packages/react-server/adapters/azure/functions/entry.mjs
Original file line number Diff line number Diff line change
@@ -1,53 +1,12 @@
import { reactServer } from "@lazarv/react-server/edge";
import { createContext } from "@lazarv/react-server/http";
import { createEdgeHandler } from "../../shared/edge-handler.mjs";

let serverPromise = null;

export default async (request, context) => {
try {
export default createEdgeHandler({
resolveOrigin: (request) => {
const url = new URL(request.url);

if (!serverPromise) {
serverPromise = reactServer({
origin: process.env.ORIGIN || `${url.protocol}//${url.host}`,
outDir: "../",
});
}

const { handler } = await serverPromise;

const origin = process.env.ORIGIN || `${url.protocol}//${url.host}`;
const httpContext = createContext(request, {
origin,
runtime: "azure",
platformExtras: { invocationContext: context },
});

const response = await handler(httpContext);

if (!response) {
return new Response("Not Found", { status: 404 });
}

// Add set-cookie headers
if (httpContext._setCookies?.length) {
const headers = new Headers(response.headers);
for (const c of httpContext._setCookies) {
headers.append("set-cookie", c);
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
}

return response;
} catch (e) {
console.error("Request handler error:", e);
return new Response(e.message || "Internal Server Error", {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
};
return process.env.ORIGIN || `${url.protocol}//${url.host}`;
},
outDir: "../",
runtime: "azure",
resolvePlatformExtras: (context) => ({ invocationContext: context }),
onError: (e) => console.error("Request handler error:", e),
});
44 changes: 2 additions & 42 deletions packages/react-server/adapters/bun/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
const staticDir = join(__dirname, "static");

process.chdir(join(__dirname, "server/${reactServerOutDir}"));
const { handler, createContext, port, hostname } = await import("./server/${reactServerOutDir}/server/edge.mjs");

let origin;
const { handleRequest, port, hostname } = await import("./server/${reactServerOutDir}/server/edge.mjs");

Bun.serve({
port,
Expand All @@ -108,45 +106,7 @@ Bun.serve({
${staticEntries.join(",\n")}
},
async fetch(request) {
try {
const url = new URL(request.url);

origin =
origin ||
process.env.ORIGIN ||
\`\${url.protocol}//\${url.host}\`;

const httpContext = createContext(request, {
origin,
runtime: "bun",
});

const response = await handler(httpContext);

if (!response) {
return new Response("Not Found", { status: 404 });
}

if (httpContext._setCookies?.length) {
const headers = new Headers(response.headers);
for (const c of httpContext._setCookies) {
headers.append("set-cookie", c);
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
}

return response;
} catch (e) {
console.error(e);
return new Response(e.message || "Internal Server Error", {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
return handleRequest(request, { runtime: "bun" });
},
});

Expand Down
2 changes: 2 additions & 0 deletions packages/react-server/adapters/bun/server/entry.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { reactServer } from "@lazarv/react-server/edge";
import { createContext } from "@lazarv/react-server/http";
import { createRequestHandler } from "../../shared/edge-handler.mjs";

export const port = parseInt(process.env.PORT || "3000", 10);
export const hostname = process.env.HOST || "0.0.0.0";
Expand All @@ -10,3 +11,4 @@ export const { handler } = await reactServer({
});

export { createContext };
export const handleRequest = createRequestHandler(handler, createContext);
64 changes: 13 additions & 51 deletions packages/react-server/adapters/cloudflare/worker/edge.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import { reactServer } from "@lazarv/react-server/edge";
import { createContext } from "@lazarv/react-server/http";
import { createEdgeHandler } from "../../shared/edge-handler.mjs";

let serverPromise = null;
const handle = createEdgeHandler({
resolveOrigin: (request, env) =>
env.ORIGIN ||
`${new URL(request.url).protocol}//${new URL(request.url).host}`,
outDir: ".",
runtime: "cloudflare",
resolvePlatformExtras: (env, ctx) => ({ env, ctx }),
});

export default {
async fetch(request, env, ctx) {
Expand All @@ -13,54 +19,10 @@ export default {
return assetResponse;
}
}

if (!serverPromise) {
serverPromise = reactServer({
origin:
env.ORIGIN ||
`${new URL(request.url).protocol}//${new URL(request.url).host}`,
// Use "." because we're already inside the react-server output directory structure
// (base_dir in wrangler.toml points to .cloudflare/worker/<reactServerOutDir>)
outDir: ".",
});
}

const { handler } = await serverPromise;

const origin =
env.ORIGIN ||
`${new URL(request.url).protocol}//${new URL(request.url).host}`;
const httpContext = createContext(request, {
origin,
runtime: "cloudflare",
platformExtras: { env, ctx },
});

const response = await handler(httpContext);

if (!response) {
return new Response("Not Found", { status: 404 });
}

// Add set-cookie headers
if (httpContext._setCookies?.length) {
const headers = new Headers(response.headers);
for (const c of httpContext._setCookies) {
headers.append("set-cookie", c);
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
}

return response;
} catch (e) {
return new Response(e.message || "Internal Server Error", {
status: 500,
headers: { "Content-Type": "text/plain" },
});
} catch {
// Fall through to SSR handler
}

return handle(request, env, ctx);
},
};
Loading