-
+
{children}
diff --git a/experiments/cutl/src/app/pages/auth/LoginPage.tsx b/experiments/cutl/src/app/pages/auth/LoginPage.tsx
index c68b78684..d1823b8cc 100644
--- a/experiments/cutl/src/app/pages/auth/LoginPage.tsx
+++ b/experiments/cutl/src/app/pages/auth/LoginPage.tsx
@@ -16,7 +16,7 @@ import {
} from "../../components/ui/input-otp";
import { link } from "../../shared/links";
-export function LoginPage({ ctx }: RouteOptions) {
+export function LoginPage({ appContext }: RouteOptions) {
const [email, setEmail] = useState("her.stander@gmail.com");
const [isPending, startTransition] = useTransition();
const [success, setSuccess] = useState(false);
@@ -30,7 +30,7 @@ export function LoginPage({ ctx }: RouteOptions) {
};
return (
-
+
Continue with Email Address
diff --git a/experiments/cutl/src/app/pages/project/DetailPage/CutlistDetailPage.tsx b/experiments/cutl/src/app/pages/project/DetailPage/CutlistDetailPage.tsx
index 66d29fb2c..af8f0efe8 100644
--- a/experiments/cutl/src/app/pages/project/DetailPage/CutlistDetailPage.tsx
+++ b/experiments/cutl/src/app/pages/project/DetailPage/CutlistDetailPage.tsx
@@ -11,9 +11,9 @@ import { findOptimalPacking, calculateFreeSpaces } from "./clientFunctions";
export default async function CutlistDetailPage({
params,
- ctx,
+ appContext,
}: RouteOptions<{ id: string }>) {
- const project = await getProject(params.id, ctx.user.id);
+ const project = await getProject(params.id, appContext.user.id);
const cutlistItems = JSON.parse(
project.cutlistItems as string,
) as ProjectItem[];
@@ -72,7 +72,7 @@ export default async function CutlistDetailPage({
// boards?
return (
-
+
Projects
diff --git a/experiments/cutl/src/app/pages/project/DetailPage/ProjectDetailPage.tsx b/experiments/cutl/src/app/pages/project/DetailPage/ProjectDetailPage.tsx
index 2f00537ec..03ed6f0ab 100644
--- a/experiments/cutl/src/app/pages/project/DetailPage/ProjectDetailPage.tsx
+++ b/experiments/cutl/src/app/pages/project/DetailPage/ProjectDetailPage.tsx
@@ -51,12 +51,12 @@ export async function updateProject(
export default async function ProjectDetailPage({
params,
- ctx,
+ appContext,
}: RouteOptions<{ id: string }>) {
- const project = await getProject(params.id, ctx.user.id);
+ const project = await getProject(params.id, appContext.user.id);
return (
-
+
Projects
diff --git a/experiments/cutl/src/app/pages/project/ListPage/ProjectListPage.tsx b/experiments/cutl/src/app/pages/project/ListPage/ProjectListPage.tsx
index e4565581d..b4d675f99 100644
--- a/experiments/cutl/src/app/pages/project/ListPage/ProjectListPage.tsx
+++ b/experiments/cutl/src/app/pages/project/ListPage/ProjectListPage.tsx
@@ -61,10 +61,10 @@ async function getProjectListSummary(userId: string) {
});
}
-export default async function ProjectListPage({ ctx }: RouteOptions) {
- const projects = await getProjectListSummary(ctx.user.id);
+export default async function ProjectListPage({ appContext }: RouteOptions) {
+ const projects = await getProjectListSummary(appContext.user.id);
return (
-
+
diff --git a/experiments/cutl/src/app/pages/project/ListPage/functions.ts b/experiments/cutl/src/app/pages/project/ListPage/functions.ts
index 82a6101e3..7b95fa411 100644
--- a/experiments/cutl/src/app/pages/project/ListPage/functions.ts
+++ b/experiments/cutl/src/app/pages/project/ListPage/functions.ts
@@ -1,15 +1,15 @@
-'use server';
-
+"use server";
import { db } from "../../../../db";
import { getContext } from "../../../../worker";
-
-
// We need to pass the context to these somehow?
-export async function createProject({ ctx }: { ctx: Awaited>}) {
-
- const userId = ctx.user.id
+export async function createProject({
+ appContext,
+}: {
+ appContext: Awaited>;
+}) {
+ const userId = appContext.user.id;
const newProject = await db.project.create({
data: {
@@ -22,15 +22,14 @@ export async function createProject({ ctx }: { ctx: Awaited> = {
request: Request;
params: TParams;
env: Env;
- ctx?: any;
+ appContext?: any;
};
type RouteMiddleware = (
@@ -70,19 +70,19 @@ export function defineRoutes(routes: RouteDefinition[]): {
routes: RouteDefinition[];
handle: ({
request,
- ctx,
+ appContext,
env,
renderPage,
}: {
request: Request;
- ctx: any;
+ appContext: any;
env: Env;
renderPage: (page: any, props: Record) => Promise;
}) => Response | Promise;
} {
return {
routes,
- async handle({ request, ctx, env, renderPage }) {
+ async handle({ request, appContext, env, renderPage }) {
try {
const url = new URL(request.url);
let path = url.pathname;
@@ -122,7 +122,7 @@ export function defineRoutes(routes: RouteDefinition[]): {
);
}
- const r = await h({ request, params, ctx, env });
+ const r = await h({ request, params, appContext, env });
if (r instanceof Response) {
return r;
}
@@ -131,12 +131,15 @@ export function defineRoutes(routes: RouteDefinition[]): {
if (isRouteComponent(handler)) {
// TODO(peterp, 2025-01-30): Serialize the request
- return await renderPage(handler as RouteComponent, { params, ctx });
+ return await renderPage(handler as RouteComponent, {
+ params,
+ appContext,
+ });
} else {
return await (handler({
request,
params,
- ctx,
+ appContext,
env,
}) as Promise);
}
diff --git a/experiments/cutl/src/register/worker.ts b/experiments/cutl/src/register/worker.ts
index 70f5c6bc7..ff090dbd6 100644
--- a/experiments/cutl/src/register/worker.ts
+++ b/experiments/cutl/src/register/worker.ts
@@ -17,18 +17,22 @@ export function registerServerReference(
return baseRegisterServerReference(action, id, name);
}
-export function registerClientReference>(id: string, exportName: string, target: Target) {
+export function registerClientReference>(
+ id: string,
+ exportName: string,
+ target: Target,
+) {
const reference = baseRegisterClientReference({}, id, exportName);
- return Object.defineProperties(
- target,
- {
- ...Object.getOwnPropertyDescriptors(reference),
- $$async: { value: true },
- },
- );
+ return Object.defineProperties(target, {
+ ...Object.getOwnPropertyDescriptors(reference),
+ $$async: { value: true },
+ });
}
-export async function rscActionHandler(req: Request, ctx: any): Promise {
+export async function rscActionHandler(
+ req: Request,
+ appContext: any,
+): Promise {
const url = new URL(req.url);
const contentType = req.headers.get("content-type");
@@ -44,5 +48,5 @@ export async function rscActionHandler(req: Request, ctx: any): Promise
throw new Error(`Action ${actionId} is not a function`);
}
- return action(...args, { ctx });
+ return action(...args, { appContext });
}
diff --git a/experiments/cutl/src/session.tsx b/experiments/cutl/src/session.tsx
index 01e8ee3e2..212289176 100644
--- a/experiments/cutl/src/session.tsx
+++ b/experiments/cutl/src/session.tsx
@@ -1,9 +1,9 @@
import { DurableObject } from "cloudflare:workers";
-import { MAX_TOKEN_DURATION } from './constants';
+import { MAX_TOKEN_DURATION } from "./constants";
interface Session {
userId: string;
- createdAt: number
+ createdAt: number;
}
export class SessionDO extends DurableObject {
@@ -17,7 +17,7 @@ export class SessionDO extends DurableObject {
const session: Session = {
userId,
createdAt: Date.now(),
- }
+ };
await this.ctx.storage.put("session", session);
this.session = session;
@@ -36,16 +36,16 @@ export class SessionDO extends DurableObject {
// has been revoked.
if (!session) {
return {
- error: 'Invalid session'
- }
+ error: "Invalid session",
+ };
}
// context(justinvdm, 2025-01-15): If the session is expired, we need to revoke it.
if (session.createdAt + MAX_TOKEN_DURATION < Date.now()) {
await this.revokeSession();
return {
- error: 'Session expired'
- }
+ error: "Session expired",
+ };
}
this.session = session;
diff --git a/experiments/cutl/src/worker.tsx b/experiments/cutl/src/worker.tsx
index 011614fdb..19db494db 100644
--- a/experiments/cutl/src/worker.tsx
+++ b/experiments/cutl/src/worker.tsx
@@ -35,8 +35,8 @@ export const getContext = async (
};
};
-function authRequired({ ctx }: any) {
- if (!ctx.user) {
+function authRequired({ appContext }: any) {
+ if (!appContext.user) {
return new Response("Unauthorized", { status: 401 });
}
}
@@ -47,8 +47,8 @@ export default {
const router = defineRoutes([
// index([
- // function ({ ctx }) {
- // if (ctx.user.id) {
+ // function ({ appContext }) {
+ // if (appContext.user.id) {
// return new Response(null, {
// status: 302,
// headers: { Location: link('/project/list') },
@@ -63,7 +63,6 @@ export default {
// ...prefix("/project", projectRoutes),
]);
-
try {
setupDb(env);
setupEnv(env);
@@ -80,13 +79,13 @@ export default {
// the request will not hang. This makes this issue particularly hard to debug.
await db.$queryRaw`SELECT 1`;
- let ctx: Awaited> = {
- user: { id: '', email: '' }
+ let appContext: Awaited> = {
+ user: { id: "", email: "" },
};
let session: Awaited> | undefined;
try {
session = await getSession(request, env);
- ctx = await getContext(session);
+ appContext = await getContext(session);
} catch (e) {
console.error("Error getting session", e);
}
@@ -96,7 +95,7 @@ export default {
const isRSCActionHandler = url.searchParams.has("__rsc_action_id");
let actionResult: any;
if (isRSCActionHandler) {
- actionResult = await rscActionHandler(request, ctx); // maybe we should include params and ctx in the action handler?
+ actionResult = await rscActionHandler(request, appContext); // maybe we should include params and appContext in the action handler?
}
if (url.pathname.startsWith("/assets/")) {
@@ -131,7 +130,7 @@ export default {
const response = await router.handle({
request,
- ctx,
+ appContext,
env,
renderPage,
});
diff --git a/experiments/realtime-poc/src/app/pages/note/functions.ts b/experiments/realtime-poc/src/app/pages/note/functions.ts
index 308ae2327..a3fe218a5 100644
--- a/experiments/realtime-poc/src/app/pages/note/functions.ts
+++ b/experiments/realtime-poc/src/app/pages/note/functions.ts
@@ -2,18 +2,18 @@
import { RouteOptions } from "@redwoodjs/sdk/router";
-export const getContent = async (key: string, ctx?: RouteOptions) => {
- const doId = ctx!.env.NOTE_DURABLE_OBJECT.idFromName(key);
- const noteDO = ctx!.env.NOTE_DURABLE_OBJECT.get(doId);
+export const getContent = async (key: string, opts?: RouteOptions) => {
+ const doId = opts!.env.NOTE_DURABLE_OBJECT.idFromName(key);
+ const noteDO = opts!.env.NOTE_DURABLE_OBJECT.get(doId);
return noteDO.getContent();
};
export const updateContent = async (
key: string,
content: string,
- ctx?: RouteOptions,
+ opts?: RouteOptions,
) => {
- const doId = ctx!.env.NOTE_DURABLE_OBJECT.idFromName(key);
- const noteDO = ctx!.env.NOTE_DURABLE_OBJECT.get(doId);
+ const doId = opts!.env.NOTE_DURABLE_OBJECT.idFromName(key);
+ const noteDO = opts!.env.NOTE_DURABLE_OBJECT.get(doId);
await noteDO.setContent(content);
};
diff --git a/experiments/realtime-poc/src/worker.tsx b/experiments/realtime-poc/src/worker.tsx
index 9da6adbfd..54a54ffd2 100644
--- a/experiments/realtime-poc/src/worker.tsx
+++ b/experiments/realtime-poc/src/worker.tsx
@@ -1,5 +1,5 @@
import { defineApp } from "@redwoodjs/sdk/worker";
-import { route, document } from "@redwoodjs/sdk/router";
+import { route, render } from "@redwoodjs/sdk/router";
import { Document } from "@/app/Document";
import { setCommonHeaders } from "@/app/headers";
import {
@@ -15,12 +15,12 @@ import Note from "./app/pages/note/Note";
export { RealtimeDurableObject } from "@redwoodjs/sdk/realtime/durableObject";
export { NoteDurableObject } from "@/noteDurableObject";
-export type Context = {};
+export type AppContext = {};
-export default defineApp([
+export default defineApp([
setCommonHeaders(),
realtimeRoute((env) => env.REALTIME_DURABLE_OBJECT),
- document(Document, [
+ render(Document, [
route("/", () => {
const randomName = uniqueNamesGenerator({
dictionaries: [adjectives, colors, animals],
diff --git a/experiments/yt-dos/src/worker.tsx b/experiments/yt-dos/src/worker.tsx
index 652607455..6b4add0c4 100644
--- a/experiments/yt-dos/src/worker.tsx
+++ b/experiments/yt-dos/src/worker.tsx
@@ -1,19 +1,19 @@
import { defineApp } from "@redwoodjs/sdk/worker";
-import { index, document, route } from "@redwoodjs/sdk/router";
+import { index, render, route } from "@redwoodjs/sdk/router";
import { Document } from "src/Document";
import { HomePage } from "src/pages/Home";
import { fetchYoutubeVideos } from "src/pages/serverFunctions";
-type Context = {
+type AppContext = {
YT_API_KEY: string;
};
-export default defineApp([
- ({ ctx }) => {
- // setup ctx here
- ctx;
+export default defineApp([
+ ({ appContext }) => {
+ // setup appContext here
+ appContext;
},
// @ts-ignore
- document(Document, [
+ render(Document, [
index([HomePage]),
route("/sitemap.xml", async () => {
const sitemap = `
diff --git a/experiments/zoomshare/src/app/pages/auth/functions.ts b/experiments/zoomshare/src/app/pages/auth/functions.ts
index d98b74daf..9d4ee675d 100644
--- a/experiments/zoomshare/src/app/pages/auth/functions.ts
+++ b/experiments/zoomshare/src/app/pages/auth/functions.ts
@@ -15,9 +15,9 @@ import { db } from "@/db";
export async function startPasskeyRegistration(
username: string,
- ctx?: RouteOptions,
+ appContext?: RouteOptions,
) {
- const { headers, env } = ctx!;
+ const { headers, env } = appContext!;
const options = await generateRegistrationOptions({
rpName: env.APP_NAME,
@@ -39,9 +39,9 @@ export async function startPasskeyRegistration(
export async function finishPasskeyRegistration(
username: string,
registration: RegistrationResponseJSON,
- ctx?: RouteOptions,
+ appContext?: RouteOptions,
) {
- const { request, headers, env } = ctx!;
+ const { request, headers, env } = appContext!;
const { origin } = new URL(request.url);
const session = await sessions.load(request);
@@ -82,8 +82,8 @@ export async function finishPasskeyRegistration(
return true;
}
-export async function startPasskeyLogin(ctx?: RouteOptions) {
- const { request, headers, env } = ctx!;
+export async function startPasskeyLogin(appContext?: RouteOptions) {
+ const { request, headers, env } = appContext!;
const options = await generateAuthenticationOptions({
rpID: env.RP_ID,
@@ -98,9 +98,9 @@ export async function startPasskeyLogin(ctx?: RouteOptions) {
export async function finishPasskeyLogin(
login: AuthenticationResponseJSON,
- ctx?: RouteOptions,
+ appContext?: RouteOptions,
) {
- const { request, headers, env } = ctx!;
+ const { request, headers, env } = appContext!;
const { origin } = new URL(request.url);
const session = await sessions.load(request);
diff --git a/experiments/zoomshare/src/app/pages/meetings/MeetingList.tsx b/experiments/zoomshare/src/app/pages/meetings/MeetingList.tsx
index 2221a4045..5e91f2ce8 100644
--- a/experiments/zoomshare/src/app/pages/meetings/MeetingList.tsx
+++ b/experiments/zoomshare/src/app/pages/meetings/MeetingList.tsx
@@ -1,7 +1,7 @@
-import type { Context } from "@/worker";
+import type { AppContext } from "@/worker";
import { db } from "@/db";
-export async function MeetingList({ ctx }: { ctx: Context }) {
+export async function MeetingList({ appContext }: { appContext: AppContext }) {
const meetings = await db.meeting.findMany({
orderBy: {
createdAt: "desc",
diff --git a/experiments/zoomshare/src/worker.tsx b/experiments/zoomshare/src/worker.tsx
index 71a4b4dd5..5b97df629 100644
--- a/experiments/zoomshare/src/worker.tsx
+++ b/experiments/zoomshare/src/worker.tsx
@@ -1,5 +1,5 @@
import { defineApp } from "@redwoodjs/sdk/worker";
-import { document, prefix, route } from "@redwoodjs/sdk/router";
+import { render, prefix, route } from "@redwoodjs/sdk/router";
import { Document } from "@/app/Document";
import { authRoutes } from "@/app/pages/auth/routes";
import { Session } from "./session/durableObject";
@@ -10,7 +10,7 @@ export { SessionDurableObject } from "./session/durableObject";
import crypto from "node:crypto";
import { meetingRoutes } from "./app/pages/meetings/routes";
-export type Context = {
+export type AppContext = {
session: Session | null;
user: User;
};
@@ -36,12 +36,12 @@ async function validateZoomWebhook(body: any, env: Env) {
}
}
-const app = defineApp([
- async ({ env, ctx, request }) => {
+const app = defineApp([
+ async ({ env, appContext, request }) => {
await setupDb(env);
},
- document(Document, [
+ render(Document, [
route("/", function () {
return new Response("Hello World");
}),
@@ -49,7 +49,7 @@ const app = defineApp([
]),
prefix("/webhook", [
route("/meeting.recording.completed", [
- async function ({ request, env, ctx }) {
+ async function ({ request, env, appContext }) {
if (
request.method !== "POST" &&
request.headers.get("Content-Type") !== "application/json"
diff --git a/sdk/src/runtime/lib/router.ts b/sdk/src/runtime/lib/router.ts
index 33375ec21..e6fb35814 100644
--- a/sdk/src/runtime/lib/router.ts
+++ b/sdk/src/runtime/lib/router.ts
@@ -1,88 +1,94 @@
import { isValidElementType } from "react-is";
import { ExecutionContext } from "@cloudflare/workers-types";
-export type HandlerOptions> = {
+export type HandlerOptions> = {
request: Request;
env: Env;
cf: ExecutionContext;
- ctx: TContext;
+ appContext: TAppContext;
headers: Headers;
- rw: RwContext;
+ rw: RwContext;
};
-export type RouteOptions, TParams = any> = {
+export type RouteOptions, TParams = any> = {
cf: ExecutionContext;
request: Request;
params: TParams;
env: Env;
- ctx: TContext;
+ appContext: TAppContext;
headers: Headers;
- rw: RwContext;
+ rw: RwContext;
};
-export type PageProps = Omit<
- RouteOptions,
+export type PageProps = Omit<
+ RouteOptions,
"request" | "headers" | "rw" | "cf"
> & { rw: { nonce: string } };
-export type DocumentProps = PageProps & {
+export type DocumentProps = PageProps & {
children: React.ReactNode;
};
-export type RenderPageParams = {
+export type RenderPageParams = {
Page: React.FC>;
- props: PageProps;
+ props: PageProps;
actionResult: unknown;
- Document: React.FC>;
+ Document: React.FC>;
};
-export type RenderPage = (
- params: RenderPageParams,
+export type RenderPage = (
+ params: RenderPageParams,
) => Promise;
-export type RwContext = {
+export type RwContext = {
nonce: string;
- Document: React.FC>;
- renderPage: RenderPage;
- handleAction: (opts: RouteOptions) => Promise;
+ Document: React.FC>;
+ renderPage: RenderPage;
+ handleAction: (opts: RouteOptions) => Promise;
};
-export type RouteMiddleware = (
- opts: RouteOptions,
+export type RouteMiddleware = (
+ opts: RouteOptions,
) =>
| Response
| Promise
| void
| Promise
| Promise;
-type RouteFunction = (
- opts: RouteOptions,
+type RouteFunction = (
+ opts: RouteOptions,
) => Response | Promise;
-type RouteComponent = (
- opts: RouteOptions,
+type RouteComponent = (
+ opts: RouteOptions,
) => JSX.Element | Promise;
-type RouteHandler =
- | RouteFunction
- | RouteComponent
+type RouteHandler =
+ | RouteFunction
+ | RouteComponent
| [
- ...RouteMiddleware[],
- RouteFunction | RouteComponent,
+ ...RouteMiddleware[],
+ (
+ | RouteFunction
+ | RouteComponent
+ ),
];
-export type Route =
- | RouteMiddleware
- | RouteDefinition
- | Array>;
+export type Route =
+ | RouteMiddleware
+ | RouteDefinition
+ | Array>;
-export type RouteDefinition, TParams = any> = {
+export type RouteDefinition<
+ TAppContext = Record,
+ TParams = any,
+> = {
path: string;
- handler: RouteHandler;
+ handler: RouteHandler;
};
-type RouteMatch, TParams = any> = {
+type RouteMatch, TParams = any> = {
params: TParams;
- handler: RouteHandler;
+ handler: RouteHandler;
};
function matchPath(
@@ -121,41 +127,41 @@ function matchPath(
return params;
}
-function flattenRoutes(
- routes: Route[],
-): (RouteMiddleware | RouteDefinition)[] {
- return routes.reduce((acc: Route[], route) => {
+function flattenRoutes(
+ routes: Route[],
+): (RouteMiddleware | RouteDefinition)[] {
+ return routes.reduce((acc: Route[], route) => {
if (Array.isArray(route)) {
return [...acc, ...flattenRoutes(route)];
}
return [...acc, route];
- }, []) as (RouteMiddleware | RouteDefinition)[];
+ }, []) as (RouteMiddleware | RouteDefinition)[];
}
-export function defineRoutes>(
- routes: Route[],
+export function defineRoutes>(
+ routes: Route[],
): {
- routes: Route[];
+ routes: Route[];
handle: ({
cf,
request,
- ctx,
+ appContext,
env,
rw,
headers,
}: {
cf: ExecutionContext;
request: Request;
- ctx: TContext;
+ appContext: TAppContext;
env: Env;
- rw: RwContext;
+ rw: RwContext;
headers: Headers;
}) => Response | Promise;
} {
const flattenedRoutes = flattenRoutes(routes);
return {
routes: flattenedRoutes,
- async handle({ cf, request, ctx, env, rw, headers }) {
+ async handle({ cf, request, appContext, env, rw, headers }) {
const url = new URL(request.url);
let path = url.pathname;
@@ -165,12 +171,12 @@ export function defineRoutes>(
}
// Find matching route
- let match: RouteMatch | null = null;
- const routeOptions: RouteOptions = {
+ let match: RouteMatch | null = null;
+ const routeOptions: RouteOptions = {
cf,
request,
params: {},
- ctx,
+ appContext,
env,
rw,
headers,
@@ -209,7 +215,7 @@ export function defineRoutes>(
const props = {
params,
env,
- ctx,
+ appContext,
rw: { nonce: rw.nonce },
};
return await rw.renderPage({
@@ -234,10 +240,10 @@ export function defineRoutes>(
};
}
-export function route(
+export function route(
path: string,
- handler: RouteHandler,
-): RouteDefinition {
+ handler: RouteHandler,
+): RouteDefinition {
if (!path.endsWith("/")) {
path = path + "/";
}
@@ -248,16 +254,16 @@ export function route(
};
}
-export function index(
- handler: RouteHandler,
-): RouteDefinition {
+export function index(
+ handler: RouteHandler,
+): RouteDefinition {
return route("/", handler);
}
-export function prefix(
+export function prefix(
prefix: string,
- routes: ReturnType>[],
-): RouteDefinition[] {
+ routes: ReturnType>[],
+): RouteDefinition[] {
return routes.map((r) => {
return {
path: prefix + r.path,
@@ -266,11 +272,11 @@ export function prefix(
});
}
-export function document(
+export function render(
Document: React.FC<{ children: React.ReactNode }>,
- routes: Route[],
-): Route[] {
- const documentMiddleware: RouteMiddleware = ({ rw }) => {
+ routes: Route[],
+): Route[] {
+ const documentMiddleware: RouteMiddleware = ({ rw }) => {
rw.Document = Document;
};
diff --git a/sdk/src/runtime/register/worker.ts b/sdk/src/runtime/register/worker.ts
index f1ae24817..9ea97e8fc 100644
--- a/sdk/src/runtime/register/worker.ts
+++ b/sdk/src/runtime/register/worker.ts
@@ -31,9 +31,9 @@ export function registerClientReference>(
});
}
-export async function rscActionHandler(
+export async function rscActionHandler(
req: Request,
- opts: HandlerOptions,
+ opts: HandlerOptions,
): Promise {
const url = new URL(req.url);
const contentType = req.headers.get("content-type");
diff --git a/sdk/src/runtime/worker.tsx b/sdk/src/runtime/worker.tsx
index aa9d0067a..0e25da1b4 100644
--- a/sdk/src/runtime/worker.tsx
+++ b/sdk/src/runtime/worker.tsx
@@ -24,7 +24,7 @@ declare global {
};
}
-export const defineApp = (routes: Route[]) => {
+export const defineApp = (routes: Route[]) => {
return {
fetch: async (request: Request, env: Env, cf: ExecutionContext) => {
globalThis.__webpack_require__ = ssrWebpackRequire;
@@ -54,12 +54,12 @@ export const defineApp = (routes: Route[]) => {
const isRSCRequest = url.searchParams.has("__rsc");
const handleAction = async (
- opts: RouteOptions>,
+ opts: RouteOptions>,
) => {
const isRSCActionHandler = url.searchParams.has("__rsc_action_id");
if (isRSCActionHandler) {
- return await rscActionHandler(request, opts); // maybe we should include params and ctx in the action handler?
+ return await rscActionHandler(request, opts); // maybe we should include params and appContext in the action handler?
}
};
@@ -68,7 +68,7 @@ export const defineApp = (routes: Route[]) => {
props: fullPageProps,
actionResult,
Document,
- }: RenderPageParams) => {
+ }: RenderPageParams) => {
let props = fullPageProps;
let documentProps = fullPageProps;
@@ -77,8 +77,8 @@ export const defineApp = (routes: Route[]) => {
if (
Object.prototype.hasOwnProperty.call(Page, "$$isClientReference")
) {
- const { ctx, params } = fullPageProps;
- props = { ctx, params } as PageProps;
+ const { appContext, params } = fullPageProps;
+ props = { appContext, params } as PageProps;
}
if (
@@ -87,8 +87,8 @@ export const defineApp = (routes: Route[]) => {
"$$isClientReference",
)
) {
- const { ctx, params } = fullPageProps;
- documentProps = { ctx, params } as DocumentProps;
+ const { appContext, params } = fullPageProps;
+ documentProps = { appContext, params } as DocumentProps;
}
const nonce = fullPageProps.rw.nonce;
@@ -133,7 +133,7 @@ export const defineApp = (routes: Route[]) => {
cf,
request,
headers: userHeaders,
- ctx: {} as Context,
+ appContext: {} as AppContext,
env,
rw: {
Document: DefaultDocument,
diff --git a/starters/drizzle/src/app/pages/Home.tsx b/starters/drizzle/src/app/pages/Home.tsx
index 1cc90f797..cb70166b2 100644
--- a/starters/drizzle/src/app/pages/Home.tsx
+++ b/starters/drizzle/src/app/pages/Home.tsx
@@ -1,9 +1,9 @@
import { users } from "../../db/schema";
import { RouteOptions } from "@redwoodjs/sdk/router";
-import { Context } from "@/worker";
+import { AppContext } from "@/worker";
-export async function Home({ ctx }: RouteOptions) {
- const allUsers = await ctx.db.select().from(users).all();
+export async function Home({ appContext }: RouteOptions) {
+ const allUsers = await appContext.db.select().from(users).all();
return (
Hello World
diff --git a/starters/drizzle/src/worker.tsx b/starters/drizzle/src/worker.tsx
index 50c846541..371e027c9 100644
--- a/starters/drizzle/src/worker.tsx
+++ b/starters/drizzle/src/worker.tsx
@@ -1,5 +1,5 @@
import { defineApp } from "@redwoodjs/sdk/worker";
-import { index, document } from "@redwoodjs/sdk/router";
+import { index, render } from "@redwoodjs/sdk/router";
import { Document } from "src/Document";
import { Home } from "src/pages/Home";
import { setCommonHeaders } from "src/headers";
@@ -9,15 +9,15 @@ export interface Env {
DB: D1Database;
}
-export type Context = {
+export type AppContext = {
db: ReturnType
;
};
-export default defineApp([
+export default defineApp([
setCommonHeaders(),
- ({ ctx, env }) => {
- // setup db in ctx
- ctx.db = drizzle(env.DB);
+ ({ appContext, env }) => {
+ // setup db in appContext
+ appContext.db = drizzle(env.DB);
},
- document(Document, [index([Home])]),
+ render(Document, [index([Home])]),
]);
diff --git a/starters/minimal/src/worker.tsx b/starters/minimal/src/worker.tsx
index 74d3679d4..c98f17083 100644
--- a/starters/minimal/src/worker.tsx
+++ b/starters/minimal/src/worker.tsx
@@ -1,16 +1,16 @@
import { defineApp } from "@redwoodjs/sdk/worker";
-import { index, document } from "@redwoodjs/sdk/router";
+import { index, render } from "@redwoodjs/sdk/router";
import { Document } from "src/Document";
import { Home } from "src/pages/Home";
import { setCommonHeaders } from "src/headers";
-type Context = {};
+type AppContext = {};
-export default defineApp([
+export default defineApp([
setCommonHeaders(),
- ({ ctx }) => {
- // setup ctx here
- ctx;
+ ({ appContext }) => {
+ // setup appContext here
+ appContext;
},
- document(Document, [index([Home])]),
+ render(Document, [index([Home])]),
]);
diff --git a/starters/passkey-auth/src/app/pages/Home.tsx b/starters/passkey-auth/src/app/pages/Home.tsx
index 1294c68d2..032763d12 100644
--- a/starters/passkey-auth/src/app/pages/Home.tsx
+++ b/starters/passkey-auth/src/app/pages/Home.tsx
@@ -1,11 +1,11 @@
-import { Context } from "@/worker";
+import { AppContext } from "@/worker";
-export function Home({ ctx }: { ctx: Context }) {
+export function Home({ appContext }: { appContext: AppContext }) {
return (