@whatwg-node/server 0.10.0-alpha-20241125130609-2d42652904068bfd5c22714b7277b8c77917aeba → 0.10.0-alpha-20241125134618-c16c2cc24251a5902f85c9dcc0ecdd373f7568ff
Sign up to get free protection for your applications and to get access to all the features.
@@ -43,7 +43,11 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
43
43
|
});
|
44
44
|
disposableStack.defer(() => {
|
45
45
|
if (waitUntilPromises.size > 0) {
|
46
|
-
return Promise.allSettled(waitUntilPromises).then(() => {
|
46
|
+
return Promise.allSettled(waitUntilPromises).then(() => {
|
47
|
+
waitUntilPromises.clear();
|
48
|
+
}, () => {
|
49
|
+
waitUntilPromises.clear();
|
50
|
+
});
|
47
51
|
}
|
48
52
|
});
|
49
53
|
function waitUntil(promiseLike) {
|
@@ -51,12 +55,13 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
51
55
|
if (globalThis.process) {
|
52
56
|
(0, utils_js_1.ensureDisposableStackRegisteredForTerminateEvents)(disposableStack);
|
53
57
|
}
|
54
|
-
waitUntilPromises.add(promiseLike
|
58
|
+
waitUntilPromises.add(promiseLike);
|
59
|
+
promiseLike.then(() => {
|
55
60
|
waitUntilPromises.delete(promiseLike);
|
56
61
|
}, err => {
|
57
62
|
console.error(`Unexpected error while waiting: ${err.message || err}`);
|
58
63
|
waitUntilPromises.delete(promiseLike);
|
59
|
-
})
|
64
|
+
});
|
60
65
|
}
|
61
66
|
if (options?.plugins != null) {
|
62
67
|
for (const plugin of options.plugins) {
|
@@ -47,7 +47,6 @@ function useContentEncoding() {
|
|
47
47
|
}
|
48
48
|
},
|
49
49
|
onResponse({ request, response, setResponse, fetchAPI, serverContext }) {
|
50
|
-
const waitUntil = serverContext.waitUntil?.bind(serverContext) || (() => { });
|
51
50
|
// Hack for avoiding to create whatwg-node to create a readable stream until it's needed
|
52
51
|
if (response['bodyInit'] || response.body) {
|
53
52
|
const encodings = encodingMap.get(request);
|
@@ -61,8 +60,10 @@ function useContentEncoding() {
|
|
61
60
|
const bufOfRes = response._buffer;
|
62
61
|
if (bufOfRes) {
|
63
62
|
const writer = compressionStream.writable.getWriter();
|
64
|
-
|
65
|
-
waitUntil(
|
63
|
+
const write$ = writer.write(bufOfRes);
|
64
|
+
serverContext.waitUntil?.(write$);
|
65
|
+
const close$ = writer.close();
|
66
|
+
serverContext.waitUntil?.(close$);
|
66
67
|
const uint8Arrays$ = (0, utils_js_1.isReadable)(compressionStream.readable['readable'])
|
67
68
|
? collectReadableValues(compressionStream.readable['readable'])
|
68
69
|
: (0, utils_js_1.isAsyncIterable)(compressionStream.readable)
|
@@ -80,7 +81,8 @@ function useContentEncoding() {
|
|
80
81
|
});
|
81
82
|
utils_js_1.decompressedResponseMap.set(compressedResponse, response);
|
82
83
|
setResponse(compressedResponse);
|
83
|
-
|
84
|
+
const close$ = compressionStream.writable.close();
|
85
|
+
serverContext.waitUntil?.(close$);
|
84
86
|
});
|
85
87
|
}
|
86
88
|
}
|
@@ -39,7 +39,11 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
39
39
|
});
|
40
40
|
disposableStack.defer(() => {
|
41
41
|
if (waitUntilPromises.size > 0) {
|
42
|
-
return Promise.allSettled(waitUntilPromises).then(() => {
|
42
|
+
return Promise.allSettled(waitUntilPromises).then(() => {
|
43
|
+
waitUntilPromises.clear();
|
44
|
+
}, () => {
|
45
|
+
waitUntilPromises.clear();
|
46
|
+
});
|
43
47
|
}
|
44
48
|
});
|
45
49
|
function waitUntil(promiseLike) {
|
@@ -47,12 +51,13 @@ function createServerAdapter(serverAdapterBaseObject, options) {
|
|
47
51
|
if (globalThis.process) {
|
48
52
|
ensureDisposableStackRegisteredForTerminateEvents(disposableStack);
|
49
53
|
}
|
50
|
-
waitUntilPromises.add(promiseLike
|
54
|
+
waitUntilPromises.add(promiseLike);
|
55
|
+
promiseLike.then(() => {
|
51
56
|
waitUntilPromises.delete(promiseLike);
|
52
57
|
}, err => {
|
53
58
|
console.error(`Unexpected error while waiting: ${err.message || err}`);
|
54
59
|
waitUntilPromises.delete(promiseLike);
|
55
|
-
})
|
60
|
+
});
|
56
61
|
}
|
57
62
|
if (options?.plugins != null) {
|
58
63
|
for (const plugin of options.plugins) {
|
@@ -44,7 +44,6 @@ export function useContentEncoding() {
|
|
44
44
|
}
|
45
45
|
},
|
46
46
|
onResponse({ request, response, setResponse, fetchAPI, serverContext }) {
|
47
|
-
const waitUntil = serverContext.waitUntil?.bind(serverContext) || (() => { });
|
48
47
|
// Hack for avoiding to create whatwg-node to create a readable stream until it's needed
|
49
48
|
if (response['bodyInit'] || response.body) {
|
50
49
|
const encodings = encodingMap.get(request);
|
@@ -58,8 +57,10 @@ export function useContentEncoding() {
|
|
58
57
|
const bufOfRes = response._buffer;
|
59
58
|
if (bufOfRes) {
|
60
59
|
const writer = compressionStream.writable.getWriter();
|
61
|
-
|
62
|
-
waitUntil(
|
60
|
+
const write$ = writer.write(bufOfRes);
|
61
|
+
serverContext.waitUntil?.(write$);
|
62
|
+
const close$ = writer.close();
|
63
|
+
serverContext.waitUntil?.(close$);
|
63
64
|
const uint8Arrays$ = isReadable(compressionStream.readable['readable'])
|
64
65
|
? collectReadableValues(compressionStream.readable['readable'])
|
65
66
|
: isAsyncIterable(compressionStream.readable)
|
@@ -77,7 +78,8 @@ export function useContentEncoding() {
|
|
77
78
|
});
|
78
79
|
decompressedResponseMap.set(compressedResponse, response);
|
79
80
|
setResponse(compressedResponse);
|
80
|
-
|
81
|
+
const close$ = compressionStream.writable.close();
|
82
|
+
serverContext.waitUntil?.(close$);
|
81
83
|
});
|
82
84
|
}
|
83
85
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@whatwg-node/server",
|
3
|
-
"version": "0.10.0-alpha-
|
3
|
+
"version": "0.10.0-alpha-20241125134618-c16c2cc24251a5902f85c9dcc0ecdd373f7568ff",
|
4
4
|
"description": "Fetch API compliant HTTP Server adapter",
|
5
5
|
"sideEffects": false,
|
6
6
|
"dependencies": {
|