@rest-vir/run-service 1.2.5 → 1.3.0
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,7 +1,8 @@
|
|
|
1
1
|
import { assert, assertWrap } from '@augment-vir/assert';
|
|
2
|
-
import { ensureErrorAndPrependMessage,
|
|
2
|
+
import { ensureErrorAndPrependMessage, isErrorHttpStatus } from '@augment-vir/common';
|
|
3
3
|
import { createRestVirHandlerErrorPrefix, HttpMethod, RestVirHandlerError, } from '@rest-vir/implement-service';
|
|
4
4
|
import { assertValidShape } from 'object-shape-tester';
|
|
5
|
+
import { buildHandlerParams } from './handler-params.js';
|
|
5
6
|
/**
|
|
6
7
|
* Handles an endpoint's implementation execution.
|
|
7
8
|
*
|
|
@@ -18,18 +19,18 @@ export async function handleEndpointRequest({ endpoint, request, response, attac
|
|
|
18
19
|
const requestData = restVirContext.requestData;
|
|
19
20
|
const searchParams = restVirContext.searchParams;
|
|
20
21
|
const endpointParams = {
|
|
21
|
-
|
|
22
|
+
...buildHandlerParams({
|
|
23
|
+
request,
|
|
24
|
+
requestData,
|
|
25
|
+
response,
|
|
26
|
+
server,
|
|
27
|
+
}),
|
|
22
28
|
method: assertWrap.isEnumValue(request.method.toUpperCase(), HttpMethod),
|
|
23
|
-
request,
|
|
24
|
-
requestData,
|
|
25
|
-
requestHeaders: request.headers,
|
|
26
|
-
response,
|
|
27
29
|
service: endpoint.service,
|
|
28
30
|
endpoint,
|
|
29
31
|
log: endpoint.service.logger,
|
|
30
32
|
context,
|
|
31
33
|
searchParams,
|
|
32
|
-
server,
|
|
33
34
|
};
|
|
34
35
|
const endpointResult = (await endpoint.implementation(endpointParams));
|
|
35
36
|
/** If the dev forgets to set a status code. */
|
|
@@ -56,13 +57,13 @@ export async function handleEndpointRequest({ endpoint, request, response, attac
|
|
|
56
57
|
'content-type': endpointResult.dataType || 'application/json',
|
|
57
58
|
...endpointResult.headers,
|
|
58
59
|
},
|
|
59
|
-
statusCode:
|
|
60
|
+
statusCode: endpointResult.statusCode,
|
|
60
61
|
body: endpointResult.responseData,
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
64
|
else {
|
|
64
65
|
return {
|
|
65
|
-
statusCode:
|
|
66
|
+
statusCode: endpointResult.statusCode,
|
|
66
67
|
headers: endpointResult.headers,
|
|
67
68
|
};
|
|
68
69
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type RunningServerInfo, type ServerRequest, type ServerResponse } from '@rest-vir/implement-service';
|
|
2
|
+
export declare function buildHandlerParams({ request, response, requestData, server, }: {
|
|
3
|
+
server: Readonly<RunningServerInfo>;
|
|
4
|
+
request: ServerRequest;
|
|
5
|
+
response: ServerResponse;
|
|
6
|
+
requestData: any;
|
|
7
|
+
}): {
|
|
8
|
+
pathParams: Record<string, string>;
|
|
9
|
+
wildcard: string | undefined;
|
|
10
|
+
request: ServerRequest;
|
|
11
|
+
requestData: any;
|
|
12
|
+
requestHeaders: import("http").IncomingHttpHeaders;
|
|
13
|
+
response: ServerResponse;
|
|
14
|
+
server: Readonly<RunningServerInfo>;
|
|
15
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { filterObject } from '@augment-vir/common';
|
|
2
|
+
export function buildHandlerParams({ request, response, requestData, server, }) {
|
|
3
|
+
return {
|
|
4
|
+
pathParams: filterObject(request.params, (key) => {
|
|
5
|
+
return !String(key).startsWith('*');
|
|
6
|
+
}),
|
|
7
|
+
wildcard: request.params['*'],
|
|
8
|
+
request,
|
|
9
|
+
requestData,
|
|
10
|
+
requestHeaders: request.headers,
|
|
11
|
+
response,
|
|
12
|
+
server,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -7,6 +7,7 @@ import { handleHandlerOutputWithoutSending } from './endpoint-handler.js';
|
|
|
7
7
|
import { handleCors } from './handle-cors.js';
|
|
8
8
|
import { handleRequestMethod } from './handle-request-method.js';
|
|
9
9
|
import { handleSearchParams } from './handle-search-params.js';
|
|
10
|
+
import { buildHandlerParams } from './handler-params.js';
|
|
10
11
|
/**
|
|
11
12
|
* Handles a request before it gets to the actual route handlers.
|
|
12
13
|
*
|
|
@@ -79,16 +80,16 @@ export async function preHandler({ request, response, service, server, attachId,
|
|
|
79
80
|
}
|
|
80
81
|
attachedRestVirContext.searchParams = searchParams.data;
|
|
81
82
|
const contextParams = {
|
|
82
|
-
|
|
83
|
+
...buildHandlerParams({
|
|
84
|
+
request,
|
|
85
|
+
requestData,
|
|
86
|
+
response,
|
|
87
|
+
server,
|
|
88
|
+
}),
|
|
83
89
|
method: assertWrap.isEnumValue(request.method.toUpperCase(), HttpMethod),
|
|
84
|
-
request,
|
|
85
|
-
requestData,
|
|
86
|
-
requestHeaders: request.headers,
|
|
87
|
-
response,
|
|
88
90
|
service,
|
|
89
91
|
endpointDefinition,
|
|
90
92
|
webSocketDefinition,
|
|
91
|
-
server,
|
|
92
93
|
searchParams: searchParams.data,
|
|
93
94
|
};
|
|
94
95
|
try {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { assert, checkWrap } from '@augment-vir/assert';
|
|
2
2
|
import { matchUrlToService } from '@rest-vir/define-service';
|
|
3
3
|
import { HttpMethod, } from '@rest-vir/implement-service';
|
|
4
|
+
import { buildHandlerParams } from './handler-params.js';
|
|
4
5
|
export async function runPostHook({ request, response, attachId, server, postHook, service, originalBody, originalStatus, }) {
|
|
5
6
|
const method = checkWrap.isEnumValue(request.method.toUpperCase(), HttpMethod);
|
|
6
7
|
if (!method) {
|
|
@@ -23,18 +24,18 @@ export async function runPostHook({ request, response, attachId, server, postHoo
|
|
|
23
24
|
? service.webSockets[pathMatch.webSocketPath]
|
|
24
25
|
: undefined;
|
|
25
26
|
const postHookParams = {
|
|
26
|
-
|
|
27
|
+
...buildHandlerParams({
|
|
28
|
+
request,
|
|
29
|
+
requestData,
|
|
30
|
+
response,
|
|
31
|
+
server,
|
|
32
|
+
}),
|
|
27
33
|
method,
|
|
28
|
-
request,
|
|
29
|
-
requestData,
|
|
30
|
-
requestHeaders: request.headers,
|
|
31
|
-
response,
|
|
32
34
|
service,
|
|
33
35
|
endpointDefinition,
|
|
34
36
|
webSocketDefinition,
|
|
35
37
|
context,
|
|
36
38
|
searchParams,
|
|
37
|
-
server,
|
|
38
39
|
originalResponseData: originalBody,
|
|
39
40
|
originalStatus,
|
|
40
41
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rest-vir/run-service",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
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",
|
|
@@ -39,31 +39,31 @@
|
|
|
39
39
|
"test:update": "npm test update"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@augment-vir/assert": "^31.
|
|
43
|
-
"@augment-vir/common": "^31.
|
|
44
|
-
"@augment-vir/node": "^31.
|
|
42
|
+
"@augment-vir/assert": "^31.48.0",
|
|
43
|
+
"@augment-vir/common": "^31.48.0",
|
|
44
|
+
"@augment-vir/node": "^31.48.0",
|
|
45
45
|
"@fastify/compress": "^8.1.0",
|
|
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.3.0",
|
|
48
|
+
"@rest-vir/implement-service": "^1.3.0",
|
|
49
49
|
"cluster-vir": "^1.0.1",
|
|
50
50
|
"date-vir": "^8.0.0",
|
|
51
51
|
"fastify": "^5.6.1",
|
|
52
52
|
"light-my-request": "^6.6.0",
|
|
53
53
|
"portfinder": "^1.0.38",
|
|
54
|
-
"type-fest": "^5.
|
|
54
|
+
"type-fest": "^5.2.0",
|
|
55
55
|
"url-vir": "^2.1.6"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@augment-vir/test": "^31.
|
|
59
|
-
"@fastify/multipart": "^9.
|
|
58
|
+
"@augment-vir/test": "^31.48.0",
|
|
59
|
+
"@fastify/multipart": "^9.3.0",
|
|
60
60
|
"@types/connect": "^3.4.38",
|
|
61
|
-
"@types/node": "^24.
|
|
61
|
+
"@types/node": "^24.10.0",
|
|
62
62
|
"@types/ws": "^8.18.1",
|
|
63
63
|
"c8": "^10.1.3",
|
|
64
64
|
"istanbul-smart-text-reporter": "^1.1.5",
|
|
65
65
|
"markdown-code-example-inserter": "^3.0.3",
|
|
66
|
-
"object-shape-tester": "^6.9.
|
|
66
|
+
"object-shape-tester": "^6.9.3"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@augment-vir/test": ">=30",
|