@whatwg-node/server 0.9.37-alpha-20240717115453-841375873174d7ac5a1bce22dc9ea9c5ee6d9060 → 0.10.0-alpha-20240717144117-bd4f5ec01a4aad17e92fdec7e69a1ffe5d619225

Sign up to get free protection for your applications and to get access to all the features.
@@ -99,30 +99,24 @@ function createServerAdapter(serverAdapterBaseObject, options) {
99
99
  return handleEarlyResponse();
100
100
  }
101
101
  : givenHandleRequest;
102
- // TODO: Remove this on the next major version
103
- function handleNodeRequest(nodeRequest, ...ctx) {
104
- const serverContext = ctx.length > 1 ? (0, utils_js_1.completeAssign)(...ctx) : ctx[0] || {};
105
- const request = (0, utils_js_1.normalizeNodeRequest)(nodeRequest, fetchAPI.Request);
106
- return handleRequest(request, serverContext);
107
- }
108
102
  function handleNodeRequestAndResponse(nodeRequest, nodeResponseOrContainer, ...ctx) {
109
103
  const nodeResponse = nodeResponseOrContainer.raw || nodeResponseOrContainer;
110
- utils_js_1.nodeRequestResponseMap.set(nodeRequest, nodeResponse);
111
- return handleNodeRequest(nodeRequest, ...ctx);
104
+ const serverContext = ctx.length > 1 ? (0, utils_js_1.completeAssign)(...ctx) : ctx[0] || {};
105
+ const request = (0, utils_js_1.normalizeNodeRequest)(nodeRequest, nodeResponse, fetchAPI.Request);
106
+ return handleRequest(request, serverContext);
112
107
  }
113
- function requestListener(nodeRequest, serverResponse, ...ctx) {
108
+ function requestListener(nodeRequest, nodeResponse, ...ctx) {
114
109
  const waitUntilPromises = [];
115
110
  const defaultServerContext = {
116
111
  req: nodeRequest,
117
- res: serverResponse,
112
+ res: nodeResponse,
118
113
  waitUntil(cb) {
119
114
  waitUntilPromises.push(cb.catch(err => console.error(err)));
120
115
  },
121
116
  };
122
- utils_js_1.nodeRequestResponseMap.set(nodeRequest, serverResponse);
123
117
  let response$;
124
118
  try {
125
- response$ = handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
119
+ response$ = handleNodeRequestAndResponse(nodeRequest, nodeResponse, defaultServerContext, ...ctx);
126
120
  }
127
121
  catch (err) {
128
122
  response$ = (0, utils_js_1.handleErrorFromRequestHandler)(err, fetchAPI.Response);
@@ -130,13 +124,13 @@ function createServerAdapter(serverAdapterBaseObject, options) {
130
124
  if ((0, utils_js_1.isPromise)(response$)) {
131
125
  return response$
132
126
  .catch((e) => (0, utils_js_1.handleErrorFromRequestHandler)(e, fetchAPI.Response))
133
- .then(response => (0, utils_js_1.sendNodeResponse)(response, serverResponse, nodeRequest))
127
+ .then(response => (0, utils_js_1.sendNodeResponse)(response, nodeResponse, nodeRequest))
134
128
  .catch(err => {
135
129
  console.error(`Unexpected error while handling request: ${err.message || err}`);
136
130
  });
137
131
  }
138
132
  try {
139
- return (0, utils_js_1.sendNodeResponse)(response$, serverResponse, nodeRequest);
133
+ return (0, utils_js_1.sendNodeResponse)(response$, nodeResponse, nodeRequest);
140
134
  }
141
135
  catch (err) {
142
136
  console.error(`Unexpected error while handling request: ${err.message || err}`);
@@ -271,9 +265,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
271
265
  return fetchFn(input, ...maybeCtx);
272
266
  };
273
267
  const adapterObj = {
274
- handleRequest,
268
+ handleRequest: handleRequestWithWaitUntil,
275
269
  fetch: fetchFn,
276
- handleNodeRequest,
277
270
  handleNodeRequestAndResponse,
278
271
  requestListener,
279
272
  handleEvent,
package/cjs/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.nodeRequestResponseMap = exports.ServerAdapterRequestAbortSignal = void 0;
3
+ exports.ServerAdapterRequestAbortSignal = void 0;
4
4
  exports.isAsyncIterable = isAsyncIterable;
5
5
  exports.normalizeNodeRequest = normalizeNodeRequest;
6
6
  exports.isReadable = isReadable;
@@ -101,8 +101,7 @@ class ServerAdapterRequestAbortSignal extends EventTarget {
101
101
  }
102
102
  exports.ServerAdapterRequestAbortSignal = ServerAdapterRequestAbortSignal;
103
103
  let bunNodeCompatModeWarned = false;
104
- exports.nodeRequestResponseMap = new WeakMap();
105
- function normalizeNodeRequest(nodeRequest, RequestCtor) {
104
+ function normalizeNodeRequest(nodeRequest, nodeResponse, RequestCtor) {
106
105
  const rawRequest = nodeRequest.raw || nodeRequest.req || nodeRequest;
107
106
  let fullUrl = buildFullUrl(rawRequest);
108
107
  if (nodeRequest.query) {
@@ -113,9 +112,7 @@ function normalizeNodeRequest(nodeRequest, RequestCtor) {
113
112
  fullUrl = url.toString();
114
113
  }
115
114
  let signal;
116
- const nodeResponse = exports.nodeRequestResponseMap.get(nodeRequest);
117
- exports.nodeRequestResponseMap.delete(nodeRequest);
118
- if (nodeResponse?.once) {
115
+ if (nodeResponse.once) {
119
116
  let sendAbortSignal;
120
117
  // If ponyfilled
121
118
  if (RequestCtor !== globalThis.Request) {
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/ban-types */
2
2
  import * as DefaultFetchAPI from '@whatwg-node/fetch';
3
- import { completeAssign, handleAbortSignalAndPromiseResponse, handleErrorFromRequestHandler, isFetchEvent, isNodeRequest, isolateObject, isPromise, isRequestInit, isServerResponse, iterateAsyncVoid, nodeRequestResponseMap, normalizeNodeRequest, sendNodeResponse, ServerAdapterRequestAbortSignal, } from './utils.js';
3
+ import { completeAssign, handleAbortSignalAndPromiseResponse, handleErrorFromRequestHandler, isFetchEvent, isNodeRequest, isolateObject, isPromise, isRequestInit, isServerResponse, iterateAsyncVoid, normalizeNodeRequest, sendNodeResponse, ServerAdapterRequestAbortSignal, } from './utils.js';
4
4
  import { getRequestFromUWSRequest, isUWSResponse, sendResponseToUwsOpts, } from './uwebsockets.js';
5
5
  async function handleWaitUntils(waitUntilPromises) {
6
6
  await Promise.allSettled(waitUntilPromises);
@@ -95,30 +95,24 @@ function createServerAdapter(serverAdapterBaseObject, options) {
95
95
  return handleEarlyResponse();
96
96
  }
97
97
  : givenHandleRequest;
98
- // TODO: Remove this on the next major version
99
- function handleNodeRequest(nodeRequest, ...ctx) {
100
- const serverContext = ctx.length > 1 ? completeAssign(...ctx) : ctx[0] || {};
101
- const request = normalizeNodeRequest(nodeRequest, fetchAPI.Request);
102
- return handleRequest(request, serverContext);
103
- }
104
98
  function handleNodeRequestAndResponse(nodeRequest, nodeResponseOrContainer, ...ctx) {
105
99
  const nodeResponse = nodeResponseOrContainer.raw || nodeResponseOrContainer;
106
- nodeRequestResponseMap.set(nodeRequest, nodeResponse);
107
- return handleNodeRequest(nodeRequest, ...ctx);
100
+ const serverContext = ctx.length > 1 ? completeAssign(...ctx) : ctx[0] || {};
101
+ const request = normalizeNodeRequest(nodeRequest, nodeResponse, fetchAPI.Request);
102
+ return handleRequest(request, serverContext);
108
103
  }
109
- function requestListener(nodeRequest, serverResponse, ...ctx) {
104
+ function requestListener(nodeRequest, nodeResponse, ...ctx) {
110
105
  const waitUntilPromises = [];
111
106
  const defaultServerContext = {
112
107
  req: nodeRequest,
113
- res: serverResponse,
108
+ res: nodeResponse,
114
109
  waitUntil(cb) {
115
110
  waitUntilPromises.push(cb.catch(err => console.error(err)));
116
111
  },
117
112
  };
118
- nodeRequestResponseMap.set(nodeRequest, serverResponse);
119
113
  let response$;
120
114
  try {
121
- response$ = handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
115
+ response$ = handleNodeRequestAndResponse(nodeRequest, nodeResponse, defaultServerContext, ...ctx);
122
116
  }
123
117
  catch (err) {
124
118
  response$ = handleErrorFromRequestHandler(err, fetchAPI.Response);
@@ -126,13 +120,13 @@ function createServerAdapter(serverAdapterBaseObject, options) {
126
120
  if (isPromise(response$)) {
127
121
  return response$
128
122
  .catch((e) => handleErrorFromRequestHandler(e, fetchAPI.Response))
129
- .then(response => sendNodeResponse(response, serverResponse, nodeRequest))
123
+ .then(response => sendNodeResponse(response, nodeResponse, nodeRequest))
130
124
  .catch(err => {
131
125
  console.error(`Unexpected error while handling request: ${err.message || err}`);
132
126
  });
133
127
  }
134
128
  try {
135
- return sendNodeResponse(response$, serverResponse, nodeRequest);
129
+ return sendNodeResponse(response$, nodeResponse, nodeRequest);
136
130
  }
137
131
  catch (err) {
138
132
  console.error(`Unexpected error while handling request: ${err.message || err}`);
@@ -267,9 +261,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
267
261
  return fetchFn(input, ...maybeCtx);
268
262
  };
269
263
  const adapterObj = {
270
- handleRequest,
264
+ handleRequest: handleRequestWithWaitUntil,
271
265
  fetch: fetchFn,
272
- handleNodeRequest,
273
266
  handleNodeRequestAndResponse,
274
267
  requestListener,
275
268
  handleEvent,
package/esm/utils.js CHANGED
@@ -81,8 +81,7 @@ export class ServerAdapterRequestAbortSignal extends EventTarget {
81
81
  }
82
82
  }
83
83
  let bunNodeCompatModeWarned = false;
84
- export const nodeRequestResponseMap = new WeakMap();
85
- export function normalizeNodeRequest(nodeRequest, RequestCtor) {
84
+ export function normalizeNodeRequest(nodeRequest, nodeResponse, RequestCtor) {
86
85
  const rawRequest = nodeRequest.raw || nodeRequest.req || nodeRequest;
87
86
  let fullUrl = buildFullUrl(rawRequest);
88
87
  if (nodeRequest.query) {
@@ -93,9 +92,7 @@ export function normalizeNodeRequest(nodeRequest, RequestCtor) {
93
92
  fullUrl = url.toString();
94
93
  }
95
94
  let signal;
96
- const nodeResponse = nodeRequestResponseMap.get(nodeRequest);
97
- nodeRequestResponseMap.delete(nodeRequest);
98
- if (nodeResponse?.once) {
95
+ if (nodeResponse.once) {
99
96
  let sendAbortSignal;
100
97
  // If ponyfilled
101
98
  if (RequestCtor !== globalThis.Request) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whatwg-node/server",
3
- "version": "0.9.37-alpha-20240717115453-841375873174d7ac5a1bce22dc9ea9c5ee6d9060",
3
+ "version": "0.10.0-alpha-20240717144117-bd4f5ec01a4aad17e92fdec7e69a1ffe5d619225",
4
4
  "description": "Fetch API compliant HTTP Server adapter",
5
5
  "sideEffects": false,
6
6
  "dependencies": {
@@ -17,7 +17,7 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
17
17
  /**
18
18
  * A basic request listener that takes a `Request` with the server context and returns a `Response`.
19
19
  */
20
- handleRequest: (request: Request, ctx: TServerContext & ServerAdapterInitialContext) => Promise<Response> | Response;
20
+ handleRequest: (request: Request, ctx: TServerContext & Partial<ServerAdapterInitialContext>) => Promise<Response> | Response;
21
21
  /**
22
22
  * WHATWG Fetch spec compliant `fetch` function that can be used for testing purposes.
23
23
  */
@@ -31,10 +31,6 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
31
31
  fetch(url: URL, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
32
32
  fetch(url: URL, init: RequestInit, ctx: TServerContext): Promise<Response> | Response;
33
33
  fetch(url: URL, init: RequestInit, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
34
- /**
35
- * This function takes Node's request object and returns a WHATWG Fetch spec compliant `Response` object.
36
- **/
37
- handleNodeRequest(nodeRequest: NodeRequest, ...ctx: Partial<TServerContext & ServerAdapterInitialContext>[]): Promise<Response> | Response;
38
34
  /**
39
35
  * This function takes Node's request and response objects and returns a WHATWG Fetch spec compliant `Response` object.
40
36
  */
@@ -17,7 +17,7 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
17
17
  /**
18
18
  * A basic request listener that takes a `Request` with the server context and returns a `Response`.
19
19
  */
20
- handleRequest: (request: Request, ctx: TServerContext & ServerAdapterInitialContext) => Promise<Response> | Response;
20
+ handleRequest: (request: Request, ctx: TServerContext & Partial<ServerAdapterInitialContext>) => Promise<Response> | Response;
21
21
  /**
22
22
  * WHATWG Fetch spec compliant `fetch` function that can be used for testing purposes.
23
23
  */
@@ -31,10 +31,6 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
31
31
  fetch(url: URL, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
32
32
  fetch(url: URL, init: RequestInit, ctx: TServerContext): Promise<Response> | Response;
33
33
  fetch(url: URL, init: RequestInit, ...ctx: Partial<TServerContext>[]): Promise<Response> | Response;
34
- /**
35
- * This function takes Node's request object and returns a WHATWG Fetch spec compliant `Response` object.
36
- **/
37
- handleNodeRequest(nodeRequest: NodeRequest, ...ctx: Partial<TServerContext & ServerAdapterInitialContext>[]): Promise<Response> | Response;
38
34
  /**
39
35
  * This function takes Node's request and response objects and returns a WHATWG Fetch spec compliant `Response` object.
40
36
  */
@@ -30,8 +30,7 @@ export declare class ServerAdapterRequestAbortSignal extends EventTarget impleme
30
30
  set onabort(value: ((this: AbortSignal, ev: Event) => any) | null);
31
31
  any(signals: Iterable<AbortSignal>): AbortSignal;
32
32
  }
33
- export declare const nodeRequestResponseMap: WeakMap<NodeRequest, NodeResponse>;
34
- export declare function normalizeNodeRequest(nodeRequest: NodeRequest, RequestCtor: typeof Request): Request;
33
+ export declare function normalizeNodeRequest(nodeRequest: NodeRequest, nodeResponse: NodeResponse, RequestCtor: typeof Request): Request;
35
34
  export declare function isReadable(stream: any): stream is Readable;
36
35
  export declare function isNodeRequest(request: any): request is NodeRequest;
37
36
  export declare function isServerResponse(stream: any): stream is NodeResponse;
@@ -30,8 +30,7 @@ export declare class ServerAdapterRequestAbortSignal extends EventTarget impleme
30
30
  set onabort(value: ((this: AbortSignal, ev: Event) => any) | null);
31
31
  any(signals: Iterable<AbortSignal>): AbortSignal;
32
32
  }
33
- export declare const nodeRequestResponseMap: WeakMap<NodeRequest, NodeResponse>;
34
- export declare function normalizeNodeRequest(nodeRequest: NodeRequest, RequestCtor: typeof Request): Request;
33
+ export declare function normalizeNodeRequest(nodeRequest: NodeRequest, nodeResponse: NodeResponse, RequestCtor: typeof Request): Request;
35
34
  export declare function isReadable(stream: any): stream is Readable;
36
35
  export declare function isNodeRequest(request: any): request is NodeRequest;
37
36
  export declare function isServerResponse(stream: any): stream is NodeResponse;