@rest-vir/run-service 1.6.0 → 1.7.1
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* node:coverage disable: this file is just types */
|
|
2
|
-
import { setResponseHeaders } from '../util/headers.js';
|
|
2
|
+
import { setRawResponseHeaders, setResponseHeaders } from '../util/headers.js';
|
|
3
3
|
/**
|
|
4
4
|
* Handle the output of a handler without sending the response. Similar to
|
|
5
5
|
* {@link handleHandlerOutput} but this one does not send the response.
|
|
@@ -11,6 +11,11 @@ import { setResponseHeaders } from '../util/headers.js';
|
|
|
11
11
|
export function handleHandlerOutputWithoutSending(result, response) {
|
|
12
12
|
if (result?.headers) {
|
|
13
13
|
setResponseHeaders(response, result.headers);
|
|
14
|
+
/**
|
|
15
|
+
* Also set headers on the raw Node response so they survive `response.hijack()`. Fastify
|
|
16
|
+
* headers set via `response.header()` are lost when the response is hijacked.
|
|
17
|
+
*/
|
|
18
|
+
setRawResponseHeaders(response.raw, result.headers);
|
|
14
19
|
}
|
|
15
20
|
if (result?.statusCode) {
|
|
16
21
|
response.statusCode = result.statusCode;
|
|
@@ -31,6 +36,11 @@ export function handleHandlerOutputWithoutSending(result, response) {
|
|
|
31
36
|
export function handleHandlerOutput(result, response) {
|
|
32
37
|
if (result?.headers) {
|
|
33
38
|
setResponseHeaders(response, result.headers);
|
|
39
|
+
/**
|
|
40
|
+
* Also set headers on the raw Node response so they survive `response.hijack()`. Fastify
|
|
41
|
+
* headers set via `response.header()` are lost when the response is hijacked.
|
|
42
|
+
*/
|
|
43
|
+
setRawResponseHeaders(response.raw, result.headers);
|
|
34
44
|
}
|
|
35
45
|
if (result?.statusCode) {
|
|
36
46
|
response.statusCode = result.statusCode;
|
package/dist/util/headers.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ServerResponse } from '@rest-vir/implement-service';
|
|
2
|
-
import { type OutgoingHttpHeaders } from 'node:http';
|
|
2
|
+
import { type ServerResponse as NodeServerResponse, type OutgoingHttpHeaders } from 'node:http';
|
|
3
3
|
/**
|
|
4
4
|
* Easily apply an object of headers to a Response object. Setting a header to `undefined` removes
|
|
5
5
|
* it.
|
|
@@ -9,3 +9,14 @@ import { type OutgoingHttpHeaders } from 'node:http';
|
|
|
9
9
|
* @package [`@rest-vir/run-service`](https://www.npmjs.com/package/@rest-vir/run-service)
|
|
10
10
|
*/
|
|
11
11
|
export declare function setResponseHeaders(response: Readonly<Pick<ServerResponse, 'removeHeader' | 'header'>>, headers: Readonly<OutgoingHttpHeaders>): void;
|
|
12
|
+
/**
|
|
13
|
+
* Sets headers directly on the raw Node.js `http.ServerResponse`. Unlike headers set via Fastify's
|
|
14
|
+
* `response.header()`, these survive `response.hijack()` because they are written to the underlying
|
|
15
|
+
* Node response. When an endpoint later calls `writeHead()`, these headers are merged in, with
|
|
16
|
+
* `writeHead()` headers taking precedence.
|
|
17
|
+
*
|
|
18
|
+
* @category Internal
|
|
19
|
+
* @category Package : @rest-vir/run-service
|
|
20
|
+
* @package [`@rest-vir/run-service`](https://www.npmjs.com/package/@rest-vir/run-service)
|
|
21
|
+
*/
|
|
22
|
+
export declare function setRawResponseHeaders(rawResponse: Readonly<Pick<NodeServerResponse, 'setHeader' | 'removeHeader'>>, headers: Readonly<OutgoingHttpHeaders>): void;
|
package/dist/util/headers.js
CHANGED
|
@@ -17,3 +17,23 @@ export function setResponseHeaders(response, headers) {
|
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Sets headers directly on the raw Node.js `http.ServerResponse`. Unlike headers set via Fastify's
|
|
22
|
+
* `response.header()`, these survive `response.hijack()` because they are written to the underlying
|
|
23
|
+
* Node response. When an endpoint later calls `writeHead()`, these headers are merged in, with
|
|
24
|
+
* `writeHead()` headers taking precedence.
|
|
25
|
+
*
|
|
26
|
+
* @category Internal
|
|
27
|
+
* @category Package : @rest-vir/run-service
|
|
28
|
+
* @package [`@rest-vir/run-service`](https://www.npmjs.com/package/@rest-vir/run-service)
|
|
29
|
+
*/
|
|
30
|
+
export function setRawResponseHeaders(rawResponse, headers) {
|
|
31
|
+
getObjectTypedEntries(headers).forEach(([name, value,]) => {
|
|
32
|
+
if (value == undefined) {
|
|
33
|
+
rawResponse.removeHeader(String(name));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
rawResponse.setHeader(String(name), value);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rest-vir/run-service",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "Run a service defined by @rest-vir/define-service and implemented by @rest-vir/implement-service.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rest",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"@augment-vir/node": "^31.68.2",
|
|
45
45
|
"@fastify/compress": "^8.3.1",
|
|
46
46
|
"@fastify/websocket": "^11.2.0",
|
|
47
|
-
"@rest-vir/define-service": "^1.
|
|
48
|
-
"@rest-vir/implement-service": "^1.
|
|
47
|
+
"@rest-vir/define-service": "^1.7.1",
|
|
48
|
+
"@rest-vir/implement-service": "^1.7.1",
|
|
49
49
|
"cluster-vir": "^1.0.1",
|
|
50
50
|
"date-vir": "^8.2.1",
|
|
51
51
|
"fastify": "^5.8.4",
|