Skip to content

Commit

Permalink
upstreams Fix server functions hanging on edge functions solidjs/soli…
Browse files Browse the repository at this point in the history
  • Loading branch information
nksaraf committed Jan 14, 2024
1 parent 432013c commit b290022
Showing 1 changed file with 53 additions and 3 deletions.
56 changes: 53 additions & 3 deletions packages/vinxi/runtime/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ import {
toNodeListener,
toPlainHandler,
toWebHandler,
toWebRequest as toWebRequestH3,
unsealSession, // updateSession,
use,
useBase, // useSession,
Expand Down Expand Up @@ -132,14 +131,65 @@ export function defineMiddleware(options) {
return options;
}



/**
* The web request utils are copied from `h3` with a few bug fixes regaring multiple access to
* `readBody` and when the body is an ArrayBuffer, such as in Deno, Edge Functions, etc.
*
* We intend to remove this section once this is upstreamed in h3.
*/

function toWebRequestH3(/** @type {import('h3').H3Event} */ event) {
/**
* @type {ReadableStream | undefined}
*/
let readableStream;

const url = getRequestURL(event);
const base = {
// @ts-ignore Undici option
duplex: "half",
method: event.method,
headers: event.headers,
};

if (event.node.req.body instanceof ArrayBuffer) {
return new Request(url, {
...base,
body: event.node.req.body,
});
}

return new Request(url, {
...base,
get body() {
if (readableStream) {
return readableStream;
}
readableStream = getRequestWebStream(event);
return readableStream;
},
});
}

export function toWebRequest(/** @type {import('h3').H3Event} */ event) {
event.web ??= {
request: toWebRequestH3(event),
const request = toWebRequestH3(event);
event.web ??= {
request,
url: getRequestURL(event),
};
return event.web.request;
}

/**
* The session utils are copied from `h3` with a few bug fixe regaring locking when sealing happens
* so things dont get stuck.
*
* We intend to remove this section once this is upstreamed in h3.
*
*/

const DEFAULT_NAME = "h3";
const DEFAULT_COOKIE = {
path: "/",
Expand Down

0 comments on commit b290022

Please sign in to comment.