@whatwg-node/server 0.1.2 → 0.3.0-alpha-20220912131745-0b53401
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.
- package/index.d.ts +2 -1
- package/index.js +43 -3
- package/index.mjs +43 -3
- package/package.json +3 -3
package/index.d.ts
CHANGED
|
@@ -43,8 +43,9 @@ export interface ServerAdapterObject<TServerContext> extends EventListenerObject
|
|
|
43
43
|
*/
|
|
44
44
|
handle: RequestListener;
|
|
45
45
|
}
|
|
46
|
-
export declare type ServerAdapter<TServerContext, TBaseObject> = TBaseObject & RequestListener & ServerAdapterObject<TServerContext>;
|
|
46
|
+
export declare type ServerAdapter<TServerContext, TBaseObject> = TBaseObject & RequestListener & ServerAdapterObject<TServerContext>['fetch'] & ServerAdapterObject<TServerContext>;
|
|
47
47
|
export declare function createServerAdapter<TServerContext = {
|
|
48
48
|
req: NodeRequest;
|
|
49
49
|
res: ServerResponse;
|
|
50
|
+
waitUntil(promise: Promise<unknown>): void;
|
|
50
51
|
}, TBaseObject = unknown>({ Request: RequestCtor, handleRequest, baseObject, }: CreateServerAdapterOptions<TServerContext, TBaseObject>): ServerAdapter<TServerContext, TBaseObject>;
|
package/index.js
CHANGED
|
@@ -156,6 +156,13 @@ async function sendNodeResponse({ headers, status, statusText, body }, serverRes
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
/// <reference lib="webworker" />
|
|
159
|
+
function handleWaitUntils(waitUntilPromises) {
|
|
160
|
+
return Promise.allSettled(waitUntilPromises).then(waitUntils => waitUntils.forEach(waitUntil => {
|
|
161
|
+
if (waitUntil.status === 'rejected') {
|
|
162
|
+
console.error(waitUntil.reason);
|
|
163
|
+
}
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
159
166
|
function createServerAdapter({ Request: RequestCtor = fetch.Request, handleRequest, baseObject, }) {
|
|
160
167
|
function fetchFn(input, init, ...ctx) {
|
|
161
168
|
if (typeof input === 'string' || input instanceof URL) {
|
|
@@ -168,14 +175,24 @@ function createServerAdapter({ Request: RequestCtor = fetch.Request, handleReque
|
|
|
168
175
|
return handleRequest(request, serverContext);
|
|
169
176
|
}
|
|
170
177
|
async function requestListener(nodeRequest, serverResponse) {
|
|
178
|
+
const waitUntilPromises = [];
|
|
171
179
|
const response = await handleNodeRequest(nodeRequest, {
|
|
172
180
|
req: nodeRequest,
|
|
173
181
|
res: serverResponse,
|
|
174
182
|
waitUntil(p) {
|
|
175
|
-
|
|
183
|
+
waitUntilPromises.push(p);
|
|
176
184
|
},
|
|
177
185
|
});
|
|
178
|
-
|
|
186
|
+
if (response) {
|
|
187
|
+
await sendNodeResponse(response, serverResponse);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
await new Promise(resolve => {
|
|
191
|
+
serverResponse.statusCode = 404;
|
|
192
|
+
serverResponse.end(resolve);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
await handleWaitUntils(waitUntilPromises);
|
|
179
196
|
}
|
|
180
197
|
function handleEvent(event) {
|
|
181
198
|
if (!event.respondWith || !event.request) {
|
|
@@ -192,7 +209,12 @@ function createServerAdapter({ Request: RequestCtor = fetch.Request, handleReque
|
|
|
192
209
|
handleEvent,
|
|
193
210
|
handle: requestListener,
|
|
194
211
|
};
|
|
195
|
-
function genericRequestHandler(input, ctx) {
|
|
212
|
+
function genericRequestHandler(input, ctx, ...rest) {
|
|
213
|
+
var _a;
|
|
214
|
+
if ('process' in globalThis && ((_a = process.versions) === null || _a === void 0 ? void 0 : _a['bun']) != null) {
|
|
215
|
+
// This is required for bun
|
|
216
|
+
input.text();
|
|
217
|
+
}
|
|
196
218
|
// If it is a Node request
|
|
197
219
|
if (isReadable(input) && ctx != null && isServerResponse(ctx)) {
|
|
198
220
|
return requestListener(input, ctx);
|
|
@@ -208,6 +230,24 @@ function createServerAdapter({ Request: RequestCtor = fetch.Request, handleReque
|
|
|
208
230
|
}
|
|
209
231
|
// Or is it Request itself?
|
|
210
232
|
// Then ctx is present and it is the context
|
|
233
|
+
if ((rest === null || rest === void 0 ? void 0 : rest.length) > 0) {
|
|
234
|
+
ctx = Object.assign({}, ctx, ...rest);
|
|
235
|
+
}
|
|
236
|
+
if (!ctx.waitUntil) {
|
|
237
|
+
const waitUntilPromises = [];
|
|
238
|
+
ctx.waitUntil = (p) => {
|
|
239
|
+
waitUntilPromises.push(p);
|
|
240
|
+
};
|
|
241
|
+
const response$ = handleRequest(input, {
|
|
242
|
+
...ctx,
|
|
243
|
+
waitUntil(p) {
|
|
244
|
+
waitUntilPromises.push(p);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
if (waitUntilPromises.length > 0) {
|
|
248
|
+
return handleWaitUntils(waitUntilPromises).then(() => response$);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
211
251
|
return handleRequest(input, ctx);
|
|
212
252
|
}
|
|
213
253
|
return new Proxy(genericRequestHandler, {
|
package/index.mjs
CHANGED
|
@@ -152,6 +152,13 @@ async function sendNodeResponse({ headers, status, statusText, body }, serverRes
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
/// <reference lib="webworker" />
|
|
155
|
+
function handleWaitUntils(waitUntilPromises) {
|
|
156
|
+
return Promise.allSettled(waitUntilPromises).then(waitUntils => waitUntils.forEach(waitUntil => {
|
|
157
|
+
if (waitUntil.status === 'rejected') {
|
|
158
|
+
console.error(waitUntil.reason);
|
|
159
|
+
}
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
155
162
|
function createServerAdapter({ Request: RequestCtor = Request, handleRequest, baseObject, }) {
|
|
156
163
|
function fetchFn(input, init, ...ctx) {
|
|
157
164
|
if (typeof input === 'string' || input instanceof URL) {
|
|
@@ -164,14 +171,24 @@ function createServerAdapter({ Request: RequestCtor = Request, handleRequest, ba
|
|
|
164
171
|
return handleRequest(request, serverContext);
|
|
165
172
|
}
|
|
166
173
|
async function requestListener(nodeRequest, serverResponse) {
|
|
174
|
+
const waitUntilPromises = [];
|
|
167
175
|
const response = await handleNodeRequest(nodeRequest, {
|
|
168
176
|
req: nodeRequest,
|
|
169
177
|
res: serverResponse,
|
|
170
178
|
waitUntil(p) {
|
|
171
|
-
|
|
179
|
+
waitUntilPromises.push(p);
|
|
172
180
|
},
|
|
173
181
|
});
|
|
174
|
-
|
|
182
|
+
if (response) {
|
|
183
|
+
await sendNodeResponse(response, serverResponse);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
await new Promise(resolve => {
|
|
187
|
+
serverResponse.statusCode = 404;
|
|
188
|
+
serverResponse.end(resolve);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
await handleWaitUntils(waitUntilPromises);
|
|
175
192
|
}
|
|
176
193
|
function handleEvent(event) {
|
|
177
194
|
if (!event.respondWith || !event.request) {
|
|
@@ -188,7 +205,12 @@ function createServerAdapter({ Request: RequestCtor = Request, handleRequest, ba
|
|
|
188
205
|
handleEvent,
|
|
189
206
|
handle: requestListener,
|
|
190
207
|
};
|
|
191
|
-
function genericRequestHandler(input, ctx) {
|
|
208
|
+
function genericRequestHandler(input, ctx, ...rest) {
|
|
209
|
+
var _a;
|
|
210
|
+
if ('process' in globalThis && ((_a = process.versions) === null || _a === void 0 ? void 0 : _a['bun']) != null) {
|
|
211
|
+
// This is required for bun
|
|
212
|
+
input.text();
|
|
213
|
+
}
|
|
192
214
|
// If it is a Node request
|
|
193
215
|
if (isReadable(input) && ctx != null && isServerResponse(ctx)) {
|
|
194
216
|
return requestListener(input, ctx);
|
|
@@ -204,6 +226,24 @@ function createServerAdapter({ Request: RequestCtor = Request, handleRequest, ba
|
|
|
204
226
|
}
|
|
205
227
|
// Or is it Request itself?
|
|
206
228
|
// Then ctx is present and it is the context
|
|
229
|
+
if ((rest === null || rest === void 0 ? void 0 : rest.length) > 0) {
|
|
230
|
+
ctx = Object.assign({}, ctx, ...rest);
|
|
231
|
+
}
|
|
232
|
+
if (!ctx.waitUntil) {
|
|
233
|
+
const waitUntilPromises = [];
|
|
234
|
+
ctx.waitUntil = (p) => {
|
|
235
|
+
waitUntilPromises.push(p);
|
|
236
|
+
};
|
|
237
|
+
const response$ = handleRequest(input, {
|
|
238
|
+
...ctx,
|
|
239
|
+
waitUntil(p) {
|
|
240
|
+
waitUntilPromises.push(p);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
if (waitUntilPromises.length > 0) {
|
|
244
|
+
return handleWaitUntils(waitUntilPromises).then(() => response$);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
207
247
|
return handleRequest(input, ctx);
|
|
208
248
|
}
|
|
209
249
|
return new Proxy(genericRequestHandler, {
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whatwg-node/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-alpha-20220912131745-0b53401",
|
|
4
4
|
"description": "Fetch API compliant HTTP Server adapter",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@types/node": "^18.0.6"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@whatwg-node/fetch": "^0.
|
|
10
|
+
"@whatwg-node/fetch": "^0.4.0",
|
|
11
11
|
"tslib": "^2.3.1"
|
|
12
12
|
},
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "ardatan/whatwg-node",
|
|
16
|
-
"directory": "packages/
|
|
16
|
+
"directory": "packages/server"
|
|
17
17
|
},
|
|
18
18
|
"author": "Arda TANRIKULU <ardatanrikulu@gmail.com>",
|
|
19
19
|
"license": "MIT",
|