@whatwg-node/server 0.9.3 → 0.9.4-alpha-20230717121215-bb27f02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,29 +95,31 @@ function createServerAdapter(serverAdapterBaseObject, options) {
95
95
  const request = (0, utils_js_1.normalizeNodeRequest)(nodeRequest, fetchAPI.Request);
96
96
  return handleRequest(request, serverContext);
97
97
  }
98
- async function requestListener(nodeRequest, serverResponse, ...ctx) {
98
+ function requestListener(nodeRequest, serverResponse, ...ctx) {
99
99
  const waitUntilPromises = [];
100
100
  const defaultServerContext = {
101
101
  req: nodeRequest,
102
102
  res: serverResponse,
103
103
  };
104
104
  addWaitUntil(defaultServerContext, waitUntilPromises);
105
- const response = await handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
106
- if (response) {
107
- await (0, utils_js_1.sendNodeResponse)(response, serverResponse, nodeRequest);
108
- }
109
- else {
110
- await new Promise(resolve => {
105
+ return handleNodeRequest(nodeRequest, defaultServerContext, ...ctx)
106
+ .then(response => {
107
+ if (response) {
108
+ return (0, utils_js_1.sendNodeResponse)(response, serverResponse, nodeRequest);
109
+ }
110
+ return new Promise(resolve => {
111
111
  serverResponse.statusCode = 404;
112
112
  serverResponse.once('end', resolve);
113
113
  serverResponse.end();
114
114
  });
115
- }
116
- if (waitUntilPromises.length > 0) {
117
- await handleWaitUntils(waitUntilPromises);
118
- }
115
+ })
116
+ .finally(() => {
117
+ if (waitUntilPromises.length > 0) {
118
+ return handleWaitUntils(waitUntilPromises);
119
+ }
120
+ });
119
121
  }
120
- async function handleUWS(res, req, ...ctx) {
122
+ function handleUWS(res, req, ...ctx) {
121
123
  const waitUntilPromises = [];
122
124
  const defaultServerContext = {
123
125
  res,
@@ -130,15 +132,16 @@ function createServerAdapter(serverAdapterBaseObject, options) {
130
132
  res,
131
133
  fetchAPI,
132
134
  });
133
- const response = await handleRequest(request, serverContext);
134
- if (!response) {
135
- res.writeStatus('404 Not Found');
136
- res.end();
137
- return;
138
- }
139
- return (0, uwebsockets_js_1.sendResponseToUwsOpts)({
140
- response,
141
- res,
135
+ return handleRequest(request, serverContext).then(response => {
136
+ if (!response) {
137
+ res.writeStatus('404 Not Found');
138
+ res.end();
139
+ return;
140
+ }
141
+ return (0, uwebsockets_js_1.sendResponseToUwsOpts)({
142
+ response,
143
+ res,
144
+ });
142
145
  });
143
146
  }
144
147
  function handleEvent(event, ...ctx) {
package/cjs/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.completeAssign = exports.isRequestInit = exports.sendNodeResponse = exports.isFetchEvent = exports.isReadableStream = exports.isServerResponse = exports.isNodeRequest = exports.isReadable = exports.normalizeNodeRequest = exports.isAsyncIterable = void 0;
3
+ exports.isPromise = exports.completeAssign = exports.isRequestInit = exports.sendNodeResponse = exports.isFetchEvent = exports.isReadableStream = exports.isServerResponse = exports.isNodeRequest = exports.isReadable = exports.normalizeNodeRequest = exports.isAsyncIterable = void 0;
4
4
  const fetch_1 = require("@whatwg-node/fetch");
5
5
  function isAsyncIterable(body) {
6
6
  return (body != null && typeof body === 'object' && typeof body[Symbol.asyncIterator] === 'function');
@@ -243,3 +243,7 @@ function completeAssign(...args) {
243
243
  return target;
244
244
  }
245
245
  exports.completeAssign = completeAssign;
246
+ function isPromise(val) {
247
+ return val != null && typeof val === 'object' && typeof val.then === 'function';
248
+ }
249
+ exports.isPromise = isPromise;
@@ -5,6 +5,34 @@ function isUWSResponse(res) {
5
5
  return !!res.onData;
6
6
  }
7
7
  exports.isUWSResponse = isUWSResponse;
8
+ class UWSAbortSignal extends EventTarget {
9
+ throwIfAborted() {
10
+ if (this.aborted) {
11
+ throw new DOMException('Aborted', 'AbortError');
12
+ }
13
+ }
14
+ constructor(res) {
15
+ super();
16
+ this.aborted = false;
17
+ this._onabort = null;
18
+ res.onAborted(() => {
19
+ this.aborted = true;
20
+ this.dispatchEvent(new Event('request aborted'));
21
+ });
22
+ }
23
+ get onabort() {
24
+ return this._onabort;
25
+ }
26
+ set onabort(value) {
27
+ this._onabort = value;
28
+ if (value) {
29
+ this.addEventListener('request aborted', value);
30
+ }
31
+ else {
32
+ this.removeEventListener('request aborted', value);
33
+ }
34
+ }
35
+ }
8
36
  function getRequestFromUWSRequest({ req, res, fetchAPI }) {
9
37
  let body;
10
38
  const method = req.getMethod();
@@ -38,6 +66,7 @@ function getRequestFromUWSRequest({ req, res, fetchAPI }) {
38
66
  method,
39
67
  headers,
40
68
  body: body,
69
+ signal: new UWSAbortSignal(res),
41
70
  });
42
71
  }
43
72
  exports.getRequestFromUWSRequest = getRequestFromUWSRequest;
@@ -91,29 +91,31 @@ function createServerAdapter(serverAdapterBaseObject, options) {
91
91
  const request = normalizeNodeRequest(nodeRequest, fetchAPI.Request);
92
92
  return handleRequest(request, serverContext);
93
93
  }
94
- async function requestListener(nodeRequest, serverResponse, ...ctx) {
94
+ function requestListener(nodeRequest, serverResponse, ...ctx) {
95
95
  const waitUntilPromises = [];
96
96
  const defaultServerContext = {
97
97
  req: nodeRequest,
98
98
  res: serverResponse,
99
99
  };
100
100
  addWaitUntil(defaultServerContext, waitUntilPromises);
101
- const response = await handleNodeRequest(nodeRequest, defaultServerContext, ...ctx);
102
- if (response) {
103
- await sendNodeResponse(response, serverResponse, nodeRequest);
104
- }
105
- else {
106
- await new Promise(resolve => {
101
+ return handleNodeRequest(nodeRequest, defaultServerContext, ...ctx)
102
+ .then(response => {
103
+ if (response) {
104
+ return sendNodeResponse(response, serverResponse, nodeRequest);
105
+ }
106
+ return new Promise(resolve => {
107
107
  serverResponse.statusCode = 404;
108
108
  serverResponse.once('end', resolve);
109
109
  serverResponse.end();
110
110
  });
111
- }
112
- if (waitUntilPromises.length > 0) {
113
- await handleWaitUntils(waitUntilPromises);
114
- }
111
+ })
112
+ .finally(() => {
113
+ if (waitUntilPromises.length > 0) {
114
+ return handleWaitUntils(waitUntilPromises);
115
+ }
116
+ });
115
117
  }
116
- async function handleUWS(res, req, ...ctx) {
118
+ function handleUWS(res, req, ...ctx) {
117
119
  const waitUntilPromises = [];
118
120
  const defaultServerContext = {
119
121
  res,
@@ -126,15 +128,16 @@ function createServerAdapter(serverAdapterBaseObject, options) {
126
128
  res,
127
129
  fetchAPI,
128
130
  });
129
- const response = await handleRequest(request, serverContext);
130
- if (!response) {
131
- res.writeStatus('404 Not Found');
132
- res.end();
133
- return;
134
- }
135
- return sendResponseToUwsOpts({
136
- response,
137
- res,
131
+ return handleRequest(request, serverContext).then(response => {
132
+ if (!response) {
133
+ res.writeStatus('404 Not Found');
134
+ res.end();
135
+ return;
136
+ }
137
+ return sendResponseToUwsOpts({
138
+ response,
139
+ res,
140
+ });
138
141
  });
139
142
  }
140
143
  function handleEvent(event, ...ctx) {
package/esm/utils.js CHANGED
@@ -230,3 +230,6 @@ export function completeAssign(...args) {
230
230
  });
231
231
  return target;
232
232
  }
233
+ export function isPromise(val) {
234
+ return val != null && typeof val === 'object' && typeof val.then === 'function';
235
+ }
@@ -1,6 +1,34 @@
1
1
  export function isUWSResponse(res) {
2
2
  return !!res.onData;
3
3
  }
4
+ class UWSAbortSignal extends EventTarget {
5
+ throwIfAborted() {
6
+ if (this.aborted) {
7
+ throw new DOMException('Aborted', 'AbortError');
8
+ }
9
+ }
10
+ constructor(res) {
11
+ super();
12
+ this.aborted = false;
13
+ this._onabort = null;
14
+ res.onAborted(() => {
15
+ this.aborted = true;
16
+ this.dispatchEvent(new Event('request aborted'));
17
+ });
18
+ }
19
+ get onabort() {
20
+ return this._onabort;
21
+ }
22
+ set onabort(value) {
23
+ this._onabort = value;
24
+ if (value) {
25
+ this.addEventListener('request aborted', value);
26
+ }
27
+ else {
28
+ this.removeEventListener('request aborted', value);
29
+ }
30
+ }
31
+ }
4
32
  export function getRequestFromUWSRequest({ req, res, fetchAPI }) {
5
33
  let body;
6
34
  const method = req.getMethod();
@@ -34,6 +62,7 @@ export function getRequestFromUWSRequest({ req, res, fetchAPI }) {
34
62
  method,
35
63
  headers,
36
64
  body: body,
65
+ signal: new UWSAbortSignal(res),
37
66
  });
38
67
  }
39
68
  export async function sendResponseToUwsOpts({ res, response }) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whatwg-node/server",
3
- "version": "0.9.3",
3
+ "version": "0.9.4-alpha-20230717121215-bb27f02",
4
4
  "description": "Fetch API compliant HTTP Server adapter",
5
5
  "sideEffects": false,
6
6
  "dependencies": {
@@ -31,3 +31,4 @@ export declare function isFetchEvent(event: any): event is FetchEvent;
31
31
  export declare function sendNodeResponse(fetchResponse: Response, serverResponse: NodeResponse, nodeRequest: NodeRequest): Promise<void> | undefined;
32
32
  export declare function isRequestInit(val: unknown): val is RequestInit;
33
33
  export declare function completeAssign(...args: any[]): any;
34
+ export declare function isPromise(val: unknown): val is Promise<unknown>;
@@ -31,3 +31,4 @@ export declare function isFetchEvent(event: any): event is FetchEvent;
31
31
  export declare function sendNodeResponse(fetchResponse: Response, serverResponse: NodeResponse, nodeRequest: NodeRequest): Promise<void> | undefined;
32
32
  export declare function isRequestInit(val: unknown): val is RequestInit;
33
33
  export declare function completeAssign(...args: any[]): any;
34
+ export declare function isPromise(val: unknown): val is Promise<unknown>;