@whatwg-node/server 0.2.0 → 0.3.0-alpha-20220912131329-1c53d82
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 +1 -0
- package/index.js +38 -3
- package/index.mjs +38 -3
- package/package.json +2 -2
package/index.d.ts
CHANGED
|
@@ -47,4 +47,5 @@ export declare type ServerAdapter<TServerContext, TBaseObject> = TBaseObject & R
|
|
|
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,7 @@ 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) {
|
|
196
213
|
var _a;
|
|
197
214
|
if ('process' in globalThis && ((_a = process.versions) === null || _a === void 0 ? void 0 : _a['bun']) != null) {
|
|
198
215
|
// This is required for bun
|
|
@@ -213,6 +230,24 @@ function createServerAdapter({ Request: RequestCtor = fetch.Request, handleReque
|
|
|
213
230
|
}
|
|
214
231
|
// Or is it Request itself?
|
|
215
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
|
+
}
|
|
216
251
|
return handleRequest(input, ctx);
|
|
217
252
|
}
|
|
218
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,7 @@ 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) {
|
|
192
209
|
var _a;
|
|
193
210
|
if ('process' in globalThis && ((_a = process.versions) === null || _a === void 0 ? void 0 : _a['bun']) != null) {
|
|
194
211
|
// This is required for bun
|
|
@@ -209,6 +226,24 @@ function createServerAdapter({ Request: RequestCtor = Request, handleRequest, ba
|
|
|
209
226
|
}
|
|
210
227
|
// Or is it Request itself?
|
|
211
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
|
+
}
|
|
212
247
|
return handleRequest(input, ctx);
|
|
213
248
|
}
|
|
214
249
|
return new Proxy(genericRequestHandler, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whatwg-node/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-alpha-20220912131329-1c53d82",
|
|
4
4
|
"description": "Fetch API compliant HTTP Server adapter",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"peerDependencies": {
|
|
@@ -13,7 +13,7 @@
|
|
|
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",
|