diff --git a/packages/core/src/client/call-server-error.ts b/packages/core/src/client/call-server-error.ts new file mode 100644 index 0000000..b02d55e --- /dev/null +++ b/packages/core/src/client/call-server-error.ts @@ -0,0 +1,12 @@ +export class CallServerError extends Error { + #statusCode: number; + + constructor(message: string, statusCode: number) { + super(message); + this.#statusCode = statusCode; + } + + get statusCode(): number { + return this.#statusCode; + } +} diff --git a/packages/core/src/client/call-server.ts b/packages/core/src/client/call-server.ts index da4abc9..fac420e 100644 --- a/packages/core/src/client/call-server.ts +++ b/packages/core/src/client/call-server.ts @@ -1,5 +1,6 @@ import type {ReactServerValue} from 'react-server-dom-webpack'; import ReactServerDOMClient from 'react-server-dom-webpack/client.browser'; +import {CallServerError} from './call-server-error.js'; export async function callServer( id: string, @@ -10,6 +11,12 @@ export async function callServer( method: `POST`, headers: {'accept': `text/x-component`, 'x-rsc-action': id}, body: await ReactServerDOMClient.encodeReply(args), + }).then((response) => { + if (response.ok) { + return response; + } + + throw new CallServerError(response.statusText, response.status); }), ); } diff --git a/packages/core/src/client/index.ts b/packages/core/src/client/index.ts index 2d90346..9a29cec 100644 --- a/packages/core/src/client/index.ts +++ b/packages/core/src/client/index.ts @@ -1,2 +1,3 @@ +export * from './call-server-error.js'; export * from './link.js'; export * from './use-router.js';