Skip to content

Commit

Permalink
feat(remix-server-runtime): pass AppLoadContext to handleRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
fernandojbf committed Mar 22, 2023
1 parent 074b5e8 commit 1df3065
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 4 deletions.
1 change: 1 addition & 0 deletions contributors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@
- F3n67u
- federicoestevez
- fergusmeiklejohn
- fernandojbf
- fgiuliani
- fishel-feng
- francisudeji
Expand Down
41 changes: 41 additions & 0 deletions packages/remix-server-runtime/__tests__/server-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1748,4 +1748,45 @@ describe("shared server runtime", () => {
expect(spy.console.mock.calls.length).toBe(1 * DATA_CALL_MULTIPIER);
});
});
test("provides load context to server entrypoint", async () => {
let rootLoader = jest.fn(() => {
return "root";
});
let indexLoader = jest.fn(() => {
return "index";
});
let build = mockServerBuild({
root: {
default: {},
loader: rootLoader,
ErrorBoundary: {},
},
"routes/index": {
parentId: "root",
default: {},
loader: indexLoader,
},
});

build.entry.module.default = jest.fn(
async (
request,
responseStatusCode,
responseHeaders,
entryContext,
loadContext
) =>
new Response(JSON.stringify(loadContext), {
status: responseStatusCode,
headers: responseHeaders,
})
);

let handler = createRequestHandler(build, ServerMode.Development);
let request = new Request(`${baseUrl}/`, { method: "get" });
let loadContext = { "load-context": "load-value" };

let result = await handler(request, loadContext);
expect(await result.text()).toBe(JSON.stringify(loadContext));
});
});
8 changes: 7 additions & 1 deletion packages/remix-server-runtime/__tests__/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,13 @@ export function mockServerBuild(
entry: {
module: {
default: jest.fn(
async (request, responseStatusCode, responseHeaders, entryContext) =>
async (
request,
responseStatusCode,
responseHeaders,
entryContext,
loadContext
) =>
new Response(null, {
status: responseStatusCode,
headers: responseHeaders,
Expand Down
4 changes: 3 additions & 1 deletion packages/remix-server-runtime/build.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { DataFunctionArgs } from "./routeModules";
import type { AssetsManifest, EntryContext, FutureConfig } from "./entry";
import type { ServerRouteManifest } from "./routes";
import type { AppLoadContext } from "./data";

/**
* The output of the compiler for the server build.
Expand All @@ -22,7 +23,8 @@ export interface HandleDocumentRequestFunction {
request: Request,
responseStatusCode: number,
responseHeaders: Headers,
context: EntryContext
context: EntryContext,
loadContext: AppLoadContext
): Promise<Response> | Response;
}

Expand Down
6 changes: 4 additions & 2 deletions packages/remix-server-runtime/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,8 @@ async function handleDocumentRequestRR(
request,
context.statusCode,
headers,
entryContext
entryContext,
loadContext
);
} catch (error: unknown) {
// Get a new StaticHandlerContext that contains the error at the right boundary
Expand Down Expand Up @@ -340,7 +341,8 @@ async function handleDocumentRequestRR(
request,
context.statusCode,
headers,
entryContext
entryContext,
loadContext
);
} catch (error: any) {
logServerErrorIfNotAborted(error, request, serverMode);
Expand Down

0 comments on commit 1df3065

Please sign in to comment.