@rest-vir/define-service 1.0.0 → 1.2.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.
- package/dist/frontend-connect/generate-api.d.ts +2 -1
- package/dist/frontend-connect/generate-api.js +4 -1
- package/dist/service/match-url.js +1 -1
- package/dist/util/merge-headers.d.ts +38 -0
- package/dist/util/merge-headers.js +73 -0
- package/dist/util/mock-fetch.d.ts +1 -1
- package/dist/util/origin.d.ts +4 -0
- package/dist/web-socket/overwrite-web-socket-methods.js +1 -0
- package/package.json +5 -5
|
@@ -5,7 +5,7 @@ import { type CommonWebSocket } from '../web-socket/common-web-socket.js';
|
|
|
5
5
|
import { type ClientWebSocket, type GenericConnectWebSocketParams } from '../web-socket/overwrite-web-socket-methods.js';
|
|
6
6
|
import { type GenericWebSocketDefinition } from '../web-socket/web-socket-definition.js';
|
|
7
7
|
import { type CollapsedConnectWebSocketParams } from './connect-web-socket.js';
|
|
8
|
-
import { type CollapsedFetchEndpointParams, type FetchEndpointOutput, type GenericFetchEndpointParams } from './fetch-endpoint.js';
|
|
8
|
+
import { buildEndpointUrl, type CollapsedFetchEndpointParams, type FetchEndpointOutput, type GenericFetchEndpointParams } from './fetch-endpoint.js';
|
|
9
9
|
/**
|
|
10
10
|
* An API generated by {@link generateApi}. This can be easily mocked by wrapping this API in
|
|
11
11
|
* {@link makeMockApi}.
|
|
@@ -23,6 +23,7 @@ export declare class RestVirApi<SpecificService extends ServiceDefinition> {
|
|
|
23
23
|
[EndpointPath in keyof SpecificService['endpoints']]: SpecificService['endpoints'][EndpointPath] extends GenericEndpointDefinition ? SpecificService['endpoints'][EndpointPath] & {
|
|
24
24
|
/** Send a fetch request to this endpoint. */
|
|
25
25
|
fetch(...params: CollapsedFetchEndpointParams<SpecificService['endpoints'][EndpointPath]>): Promise<FetchEndpointOutput<SpecificService['endpoints'][EndpointPath]>>;
|
|
26
|
+
buildUrl(params: Parameters<typeof buildEndpointUrl<SpecificService['endpoints'][EndpointPath]>>[1]): string;
|
|
26
27
|
} : never;
|
|
27
28
|
};
|
|
28
29
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mapObjectValues, } from '@augment-vir/common';
|
|
2
2
|
import { connectWebSocket } from './connect-web-socket.js';
|
|
3
|
-
import { fetchEndpoint, } from './fetch-endpoint.js';
|
|
3
|
+
import { buildEndpointUrl, fetchEndpoint, } from './fetch-endpoint.js';
|
|
4
4
|
/**
|
|
5
5
|
* An API generated by {@link generateApi}. This can be easily mocked by wrapping this API in
|
|
6
6
|
* {@link makeMockApi}.
|
|
@@ -46,6 +46,9 @@ export class RestVirApi {
|
|
|
46
46
|
...params[0],
|
|
47
47
|
});
|
|
48
48
|
},
|
|
49
|
+
buildUrl(params) {
|
|
50
|
+
return buildEndpointUrl(endpointDefinition, params);
|
|
51
|
+
},
|
|
49
52
|
};
|
|
50
53
|
});
|
|
51
54
|
this.webSockets = mapObjectValues(service.webSockets, (webSocketPath, webSocketDefinition) => {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type IncomingHttpHeaders, type OutgoingHttpHeaders } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* Allowed header types for header manipulation utilities:
|
|
4
|
+
*
|
|
5
|
+
* - {@link mergeHeaders}
|
|
6
|
+
* - {@link consolidateHeaders}
|
|
7
|
+
* - {@link headersToObject}
|
|
8
|
+
*
|
|
9
|
+
* @category Internal
|
|
10
|
+
* @category Package : @rest-vir/define-service
|
|
11
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
12
|
+
*/
|
|
13
|
+
export type AllowedHeaders = HeadersInit | Record<string, string | string[]> | [string, string | string[]][] | IncomingHttpHeaders | OutgoingHttpHeaders;
|
|
14
|
+
/**
|
|
15
|
+
* Merges multiple headers containers into a single `Headers` instance.
|
|
16
|
+
*
|
|
17
|
+
* @category Internal
|
|
18
|
+
* @category Package : @rest-vir/define-service
|
|
19
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
20
|
+
*/
|
|
21
|
+
export declare function mergeHeaders(...headers: AllowedHeaders[]): Headers;
|
|
22
|
+
/**
|
|
23
|
+
* Consolidate the headers input of whatever valid headers container into a `Headers` instance.
|
|
24
|
+
*
|
|
25
|
+
* @category Internal
|
|
26
|
+
* @category Package : @rest-vir/define-service
|
|
27
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
28
|
+
*/
|
|
29
|
+
export declare function consolidateHeaders(headers: AllowedHeaders): Headers;
|
|
30
|
+
/**
|
|
31
|
+
* Consolidate the headers input of whatever valid headers container into an object of header
|
|
32
|
+
* values.
|
|
33
|
+
*
|
|
34
|
+
* @category Internal
|
|
35
|
+
* @category Package : @rest-vir/define-service
|
|
36
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
37
|
+
*/
|
|
38
|
+
export declare function headersToObject(headers: AllowedHeaders): Record<string, string | string[]>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { check } from '@augment-vir/assert';
|
|
2
|
+
/**
|
|
3
|
+
* Merges multiple headers containers into a single `Headers` instance.
|
|
4
|
+
*
|
|
5
|
+
* @category Internal
|
|
6
|
+
* @category Package : @rest-vir/define-service
|
|
7
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
8
|
+
*/
|
|
9
|
+
export function mergeHeaders(...headers) {
|
|
10
|
+
const finalHeaders = new Headers();
|
|
11
|
+
headers.forEach((headersInit) => {
|
|
12
|
+
const consolidatedHeadersInit = consolidateHeaders(headersInit);
|
|
13
|
+
Array.from(consolidatedHeadersInit.entries()).forEach(([key, value,]) => {
|
|
14
|
+
finalHeaders.append(key, value);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
return finalHeaders;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Consolidate the headers input of whatever valid headers container into a `Headers` instance.
|
|
21
|
+
*
|
|
22
|
+
* @category Internal
|
|
23
|
+
* @category Package : @rest-vir/define-service
|
|
24
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
25
|
+
*/
|
|
26
|
+
export function consolidateHeaders(headers) {
|
|
27
|
+
const newHeaders = new Headers();
|
|
28
|
+
const headersArray = headers instanceof Headers
|
|
29
|
+
? Array.from(headers.entries())
|
|
30
|
+
: check.isArray(headers)
|
|
31
|
+
? headers
|
|
32
|
+
: Object.entries(headers);
|
|
33
|
+
headersArray.forEach(([key, value,]) => {
|
|
34
|
+
if (value == undefined) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (check.isArray(value)) {
|
|
38
|
+
value.forEach((innerValue) => newHeaders.append(key, innerValue));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
newHeaders.append(key, String(value));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return newHeaders;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Consolidate the headers input of whatever valid headers container into an object of header
|
|
48
|
+
* values.
|
|
49
|
+
*
|
|
50
|
+
* @category Internal
|
|
51
|
+
* @category Package : @rest-vir/define-service
|
|
52
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
53
|
+
*/
|
|
54
|
+
export function headersToObject(headers) {
|
|
55
|
+
const consolidatedHeaders = consolidateHeaders(headers);
|
|
56
|
+
const headersObject = {};
|
|
57
|
+
Array.from(consolidatedHeaders.entries()).forEach(([key, value,]) => {
|
|
58
|
+
const existingValue = headersObject[key];
|
|
59
|
+
if (existingValue == undefined) {
|
|
60
|
+
headersObject[key] = value;
|
|
61
|
+
}
|
|
62
|
+
else if (check.isArray(existingValue)) {
|
|
63
|
+
existingValue.push(value);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
headersObject[key] = [
|
|
67
|
+
existingValue,
|
|
68
|
+
value,
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return headersObject;
|
|
73
|
+
}
|
|
@@ -43,7 +43,7 @@ export type MockResponseParams = Overwrite<Partial<Pick<Response, 'redirected' |
|
|
|
43
43
|
* @category Package : @rest-vir/define-service
|
|
44
44
|
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
45
45
|
*/
|
|
46
|
-
export declare class MockResponseBodyStream extends ReadableStream<Uint8Array
|
|
46
|
+
export declare class MockResponseBodyStream extends ReadableStream<Uint8Array<ArrayBuffer>> {
|
|
47
47
|
private getReaderCalled;
|
|
48
48
|
constructor(body: unknown, getReaderCalled: () => void);
|
|
49
49
|
getReader(...args: any): any;
|
package/dist/util/origin.d.ts
CHANGED
|
@@ -60,6 +60,10 @@ export declare const originRequirementShape: import("object-shape-tester").Shape
|
|
|
60
60
|
* - `boolean`: the origin was explicitly checked and passed (`true`) or failed (`false`)
|
|
61
61
|
* - `undefined`: no origin checking occurred
|
|
62
62
|
* - `AnyOrigin`: requirements explicitly allow any origin.
|
|
63
|
+
*
|
|
64
|
+
* @category Internal
|
|
65
|
+
* @category Package : @rest-vir/define-service
|
|
66
|
+
* @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
|
|
63
67
|
*/
|
|
64
68
|
export type OriginRequirementResult = boolean | undefined | AnyOrigin;
|
|
65
69
|
/**
|
|
@@ -133,6 +133,7 @@ export function overwriteWebSocketMethods(webSocketDefinition, rawWebSocket, web
|
|
|
133
133
|
send(message) {
|
|
134
134
|
originalSend.call(webSocket,
|
|
135
135
|
/** The extra `String()` wrapper is to convert `undefined` into `'undefined'`. */
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion
|
|
136
137
|
String(JSON.stringify(verifyWebSocketMessage(webSocketDefinition, message, webSocketLocation))));
|
|
137
138
|
},
|
|
138
139
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rest-vir/define-service",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Define an connect to a declarative and type safe REST and WebSocket service.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rest",
|
|
@@ -40,14 +40,14 @@
|
|
|
40
40
|
"test:update": "npm test update"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@augment-vir/assert": "^31.
|
|
44
|
-
"@augment-vir/common": "^31.
|
|
43
|
+
"@augment-vir/assert": "^31.32.2",
|
|
44
|
+
"@augment-vir/common": "^31.32.2",
|
|
45
45
|
"date-vir": "^7.4.0",
|
|
46
46
|
"type-fest": "^4.41.0",
|
|
47
47
|
"url-vir": "^2.1.3"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@augment-vir/test": "^31.
|
|
50
|
+
"@augment-vir/test": "^31.32.2",
|
|
51
51
|
"@web/dev-server-esbuild": "^1.0.4",
|
|
52
52
|
"@web/test-runner": "^0.20.2",
|
|
53
53
|
"@web/test-runner-commands": "^0.9.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"istanbul-smart-text-reporter": "^1.1.5",
|
|
57
57
|
"markdown-code-example-inserter": "^3.0.3",
|
|
58
58
|
"object-shape-tester": "^5.3.0",
|
|
59
|
-
"typedoc": "^0.28.
|
|
59
|
+
"typedoc": "^0.28.10",
|
|
60
60
|
"ws": "^8.18.3"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|