@orpc/standard-server-fetch 0.0.0-next.ca29a36 → 0.0.0-next.cc8802c
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/README.md +1 -1
- package/dist/index.d.mts +56 -0
- package/dist/index.d.ts +56 -0
- package/dist/{index.js → index.mjs} +50 -45
- package/package.json +7 -12
- package/dist/src/body.d.ts +0 -8
- package/dist/src/event-source.d.ts +0 -3
- package/dist/src/headers.d.ts +0 -12
- package/dist/src/index.d.ts +0 -6
- package/dist/src/request.d.ts +0 -3
- package/dist/src/response.d.ts +0 -3
package/README.md
CHANGED
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { StandardBody, StandardHeaders, StandardLazyRequest, StandardRequest, StandardResponse, StandardLazyResponse } from '@orpc/standard-server';
|
|
2
|
+
|
|
3
|
+
declare function toEventIterator(stream: ReadableStream<Uint8Array>): AsyncGenerator<unknown | void, unknown | void, void>;
|
|
4
|
+
interface ToEventStreamOptions {
|
|
5
|
+
/**
|
|
6
|
+
* If true, a ping comment is sent periodically to keep the connection alive.
|
|
7
|
+
*
|
|
8
|
+
* @default true
|
|
9
|
+
*/
|
|
10
|
+
eventIteratorKeepAliveEnabled?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Interval (in milliseconds) between ping comments sent after the last event.
|
|
13
|
+
*
|
|
14
|
+
* @default 5000
|
|
15
|
+
*/
|
|
16
|
+
eventIteratorKeepAliveInterval?: number;
|
|
17
|
+
/**
|
|
18
|
+
* The content of the ping comment. Must not include newline characters.
|
|
19
|
+
*
|
|
20
|
+
* @default ''
|
|
21
|
+
*/
|
|
22
|
+
eventIteratorKeepAliveComment?: string;
|
|
23
|
+
}
|
|
24
|
+
declare function toEventStream(iterator: AsyncIterator<unknown | void, unknown | void, void>, options?: ToEventStreamOptions): ReadableStream<Uint8Array>;
|
|
25
|
+
|
|
26
|
+
declare function toStandardBody(re: Request | Response): Promise<StandardBody>;
|
|
27
|
+
interface ToFetchBodyOptions extends ToEventStreamOptions {
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @param body
|
|
31
|
+
* @param headers - The headers can be changed by the function and effects on the original headers.
|
|
32
|
+
*/
|
|
33
|
+
declare function toFetchBody(body: StandardBody, headers: Headers, options?: ToFetchBodyOptions): string | Blob | FormData | URLSearchParams | undefined | ReadableStream<Uint8Array>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @param headers
|
|
37
|
+
* @param standardHeaders - The base headers can be changed by the function and effects on the original headers.
|
|
38
|
+
*/
|
|
39
|
+
declare function toStandardHeaders(headers: Headers, standardHeaders?: StandardHeaders): StandardHeaders;
|
|
40
|
+
/**
|
|
41
|
+
* @param headers
|
|
42
|
+
* @param fetchHeaders - The base headers can be changed by the function and effects on the original headers.
|
|
43
|
+
*/
|
|
44
|
+
declare function toFetchHeaders(headers: StandardHeaders, fetchHeaders?: Headers): Headers;
|
|
45
|
+
|
|
46
|
+
declare function toStandardLazyRequest(request: Request): StandardLazyRequest;
|
|
47
|
+
interface ToFetchRequestOptions extends ToFetchBodyOptions {
|
|
48
|
+
}
|
|
49
|
+
declare function toFetchRequest(request: StandardRequest, options?: ToFetchRequestOptions): Request;
|
|
50
|
+
|
|
51
|
+
interface ToFetchResponseOptions extends ToFetchBodyOptions {
|
|
52
|
+
}
|
|
53
|
+
declare function toFetchResponse(response: StandardResponse, options?: ToFetchResponseOptions): Response;
|
|
54
|
+
declare function toStandardLazyResponse(response: Response): StandardLazyResponse;
|
|
55
|
+
|
|
56
|
+
export { type ToEventStreamOptions, type ToFetchBodyOptions, type ToFetchRequestOptions, type ToFetchResponseOptions, toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchRequest, toFetchResponse, toStandardBody, toStandardHeaders, toStandardLazyRequest, toStandardLazyResponse };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { StandardBody, StandardHeaders, StandardLazyRequest, StandardRequest, StandardResponse, StandardLazyResponse } from '@orpc/standard-server';
|
|
2
|
+
|
|
3
|
+
declare function toEventIterator(stream: ReadableStream<Uint8Array>): AsyncGenerator<unknown | void, unknown | void, void>;
|
|
4
|
+
interface ToEventStreamOptions {
|
|
5
|
+
/**
|
|
6
|
+
* If true, a ping comment is sent periodically to keep the connection alive.
|
|
7
|
+
*
|
|
8
|
+
* @default true
|
|
9
|
+
*/
|
|
10
|
+
eventIteratorKeepAliveEnabled?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Interval (in milliseconds) between ping comments sent after the last event.
|
|
13
|
+
*
|
|
14
|
+
* @default 5000
|
|
15
|
+
*/
|
|
16
|
+
eventIteratorKeepAliveInterval?: number;
|
|
17
|
+
/**
|
|
18
|
+
* The content of the ping comment. Must not include newline characters.
|
|
19
|
+
*
|
|
20
|
+
* @default ''
|
|
21
|
+
*/
|
|
22
|
+
eventIteratorKeepAliveComment?: string;
|
|
23
|
+
}
|
|
24
|
+
declare function toEventStream(iterator: AsyncIterator<unknown | void, unknown | void, void>, options?: ToEventStreamOptions): ReadableStream<Uint8Array>;
|
|
25
|
+
|
|
26
|
+
declare function toStandardBody(re: Request | Response): Promise<StandardBody>;
|
|
27
|
+
interface ToFetchBodyOptions extends ToEventStreamOptions {
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @param body
|
|
31
|
+
* @param headers - The headers can be changed by the function and effects on the original headers.
|
|
32
|
+
*/
|
|
33
|
+
declare function toFetchBody(body: StandardBody, headers: Headers, options?: ToFetchBodyOptions): string | Blob | FormData | URLSearchParams | undefined | ReadableStream<Uint8Array>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @param headers
|
|
37
|
+
* @param standardHeaders - The base headers can be changed by the function and effects on the original headers.
|
|
38
|
+
*/
|
|
39
|
+
declare function toStandardHeaders(headers: Headers, standardHeaders?: StandardHeaders): StandardHeaders;
|
|
40
|
+
/**
|
|
41
|
+
* @param headers
|
|
42
|
+
* @param fetchHeaders - The base headers can be changed by the function and effects on the original headers.
|
|
43
|
+
*/
|
|
44
|
+
declare function toFetchHeaders(headers: StandardHeaders, fetchHeaders?: Headers): Headers;
|
|
45
|
+
|
|
46
|
+
declare function toStandardLazyRequest(request: Request): StandardLazyRequest;
|
|
47
|
+
interface ToFetchRequestOptions extends ToFetchBodyOptions {
|
|
48
|
+
}
|
|
49
|
+
declare function toFetchRequest(request: StandardRequest, options?: ToFetchRequestOptions): Request;
|
|
50
|
+
|
|
51
|
+
interface ToFetchResponseOptions extends ToFetchBodyOptions {
|
|
52
|
+
}
|
|
53
|
+
declare function toFetchResponse(response: StandardResponse, options?: ToFetchResponseOptions): Response;
|
|
54
|
+
declare function toStandardLazyResponse(response: Response): StandardLazyResponse;
|
|
55
|
+
|
|
56
|
+
export { type ToEventStreamOptions, type ToFetchBodyOptions, type ToFetchRequestOptions, type ToFetchResponseOptions, toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchRequest, toFetchResponse, toStandardBody, toStandardHeaders, toStandardLazyRequest, toStandardLazyResponse };
|
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { contentDisposition, parseContentDisposition } from "@orpc/standard-server";
|
|
1
|
+
import { stringifyJSON, parseEmptyableJSON, isTypescriptObject, isAsyncIteratorObject, once } from '@orpc/shared';
|
|
2
|
+
import { EventDecoderStream, encodeEventMessage, getEventMeta, ErrorEvent, withEventMeta, parseContentDisposition, contentDisposition } from '@orpc/standard-server';
|
|
4
3
|
|
|
5
|
-
// src/event-source.ts
|
|
6
|
-
import { isTypescriptObject, parseEmptyableJSON, stringifyJSON } from "@orpc/shared";
|
|
7
|
-
import {
|
|
8
|
-
encodeEventMessage,
|
|
9
|
-
ErrorEvent,
|
|
10
|
-
EventDecoderStream,
|
|
11
|
-
getEventMeta,
|
|
12
|
-
UnknownEvent,
|
|
13
|
-
withEventMeta
|
|
14
|
-
} from "@orpc/standard-server";
|
|
15
4
|
function toEventIterator(stream) {
|
|
16
5
|
const eventStream = stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventDecoderStream());
|
|
17
6
|
const reader = eventStream.getReader();
|
|
@@ -45,14 +34,6 @@ function toEventIterator(stream) {
|
|
|
45
34
|
}
|
|
46
35
|
return done2;
|
|
47
36
|
}
|
|
48
|
-
default: {
|
|
49
|
-
let error = new UnknownEvent({
|
|
50
|
-
message: `Unknown event: ${value.event}`,
|
|
51
|
-
data: parseEmptyableJSON(value.data)
|
|
52
|
-
});
|
|
53
|
-
error = withEventMeta(error, value);
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
37
|
}
|
|
57
38
|
}
|
|
58
39
|
} finally {
|
|
@@ -61,11 +42,23 @@ function toEventIterator(stream) {
|
|
|
61
42
|
}
|
|
62
43
|
return gen();
|
|
63
44
|
}
|
|
64
|
-
function toEventStream(iterator) {
|
|
45
|
+
function toEventStream(iterator, options = {}) {
|
|
46
|
+
const keepAliveEnabled = options.eventIteratorKeepAliveEnabled ?? true;
|
|
47
|
+
const keepAliveInterval = options.eventIteratorKeepAliveInterval ?? 5e3;
|
|
48
|
+
const keepAliveComment = options.eventIteratorKeepAliveComment ?? "";
|
|
49
|
+
let timeout;
|
|
65
50
|
const stream = new ReadableStream({
|
|
66
51
|
async pull(controller) {
|
|
67
52
|
try {
|
|
53
|
+
if (keepAliveEnabled) {
|
|
54
|
+
timeout = setInterval(() => {
|
|
55
|
+
controller.enqueue(encodeEventMessage({
|
|
56
|
+
comments: [keepAliveComment]
|
|
57
|
+
}));
|
|
58
|
+
}, keepAliveInterval);
|
|
59
|
+
}
|
|
68
60
|
const value = await iterator.next();
|
|
61
|
+
clearInterval(timeout);
|
|
69
62
|
controller.enqueue(encodeEventMessage({
|
|
70
63
|
...getEventMeta(value.value),
|
|
71
64
|
event: value.done ? "done" : "message",
|
|
@@ -75,6 +68,7 @@ function toEventStream(iterator) {
|
|
|
75
68
|
controller.close();
|
|
76
69
|
}
|
|
77
70
|
} catch (err) {
|
|
71
|
+
clearInterval(timeout);
|
|
78
72
|
controller.enqueue(encodeEventMessage({
|
|
79
73
|
...getEventMeta(err),
|
|
80
74
|
event: "error",
|
|
@@ -94,7 +88,6 @@ function toEventStream(iterator) {
|
|
|
94
88
|
return stream;
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
// src/body.ts
|
|
98
91
|
async function toStandardBody(re) {
|
|
99
92
|
if (!re.body) {
|
|
100
93
|
return void 0;
|
|
@@ -112,7 +105,7 @@ async function toStandardBody(re) {
|
|
|
112
105
|
const contentType = re.headers.get("content-type");
|
|
113
106
|
if (!contentType || contentType.startsWith("application/json")) {
|
|
114
107
|
const text = await re.text();
|
|
115
|
-
return
|
|
108
|
+
return parseEmptyableJSON(text);
|
|
116
109
|
}
|
|
117
110
|
if (contentType.startsWith("multipart/form-data")) {
|
|
118
111
|
return await re.formData();
|
|
@@ -132,7 +125,7 @@ async function toStandardBody(re) {
|
|
|
132
125
|
type: blob.type
|
|
133
126
|
});
|
|
134
127
|
}
|
|
135
|
-
function toFetchBody(body, headers) {
|
|
128
|
+
function toFetchBody(body, headers, options = {}) {
|
|
136
129
|
headers.delete("content-type");
|
|
137
130
|
headers.delete("content-disposition");
|
|
138
131
|
if (body === void 0) {
|
|
@@ -157,13 +150,12 @@ function toFetchBody(body, headers) {
|
|
|
157
150
|
headers.set("content-type", "text/event-stream");
|
|
158
151
|
headers.set("cache-control", "no-cache");
|
|
159
152
|
headers.set("connection", "keep-alive");
|
|
160
|
-
return toEventStream(body);
|
|
153
|
+
return toEventStream(body, options);
|
|
161
154
|
}
|
|
162
155
|
headers.set("content-type", "application/json");
|
|
163
|
-
return
|
|
156
|
+
return stringifyJSON(body);
|
|
164
157
|
}
|
|
165
158
|
|
|
166
|
-
// src/headers.ts
|
|
167
159
|
function toStandardHeaders(headers, standardHeaders = {}) {
|
|
168
160
|
for (const [key, value] of headers) {
|
|
169
161
|
if (Array.isArray(standardHeaders[key])) {
|
|
@@ -189,9 +181,7 @@ function toFetchHeaders(headers, fetchHeaders = new Headers()) {
|
|
|
189
181
|
return fetchHeaders;
|
|
190
182
|
}
|
|
191
183
|
|
|
192
|
-
|
|
193
|
-
import { once } from "@orpc/shared";
|
|
194
|
-
function toStandardRequest(request) {
|
|
184
|
+
function toStandardLazyRequest(request) {
|
|
195
185
|
return {
|
|
196
186
|
raw: { request },
|
|
197
187
|
url: new URL(request.url),
|
|
@@ -208,21 +198,36 @@ function toStandardRequest(request) {
|
|
|
208
198
|
}
|
|
209
199
|
};
|
|
210
200
|
}
|
|
201
|
+
function toFetchRequest(request, options = {}) {
|
|
202
|
+
const headers = toFetchHeaders(request.headers);
|
|
203
|
+
const body = toFetchBody(request.body, headers, options);
|
|
204
|
+
return new Request(request.url, {
|
|
205
|
+
signal: request.signal,
|
|
206
|
+
method: request.method,
|
|
207
|
+
headers,
|
|
208
|
+
body
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
211
|
|
|
212
|
-
|
|
213
|
-
function toFetchResponse(response) {
|
|
212
|
+
function toFetchResponse(response, options = {}) {
|
|
214
213
|
const headers = toFetchHeaders(response.headers);
|
|
215
|
-
const body = toFetchBody(response.body, headers);
|
|
214
|
+
const body = toFetchBody(response.body, headers, options);
|
|
216
215
|
return new Response(body, { headers, status: response.status });
|
|
217
216
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
|
|
217
|
+
function toStandardLazyResponse(response) {
|
|
218
|
+
return {
|
|
219
|
+
raw: { response },
|
|
220
|
+
body: once(() => toStandardBody(response)),
|
|
221
|
+
status: response.status,
|
|
222
|
+
get headers() {
|
|
223
|
+
const headers = toStandardHeaders(response.headers);
|
|
224
|
+
Object.defineProperty(this, "headers", { value: headers, writable: true });
|
|
225
|
+
return headers;
|
|
226
|
+
},
|
|
227
|
+
set headers(value) {
|
|
228
|
+
Object.defineProperty(this, "headers", { value, writable: true });
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export { toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchRequest, toFetchResponse, toStandardBody, toStandardHeaders, toStandardLazyRequest, toStandardLazyResponse };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orpc/standard-server-fetch",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.0-next.
|
|
4
|
+
"version": "0.0.0-next.cc8802c",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://unnoq.com",
|
|
7
7
|
"repository": {
|
|
@@ -14,28 +14,23 @@
|
|
|
14
14
|
],
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
17
|
-
"types": "./dist/
|
|
18
|
-
"import": "./dist/index.
|
|
19
|
-
"default": "./dist/index.
|
|
20
|
-
},
|
|
21
|
-
"./🔒/*": {
|
|
22
|
-
"types": "./dist/src/*.d.ts"
|
|
17
|
+
"types": "./dist/index.d.mts",
|
|
18
|
+
"import": "./dist/index.mjs",
|
|
19
|
+
"default": "./dist/index.mjs"
|
|
23
20
|
}
|
|
24
21
|
},
|
|
25
22
|
"files": [
|
|
26
|
-
"!**/*.map",
|
|
27
|
-
"!**/*.tsbuildinfo",
|
|
28
23
|
"dist"
|
|
29
24
|
],
|
|
30
25
|
"dependencies": {
|
|
31
|
-
"@orpc/shared": "0.0.0-next.
|
|
32
|
-
"@orpc/standard-server": "0.0.0-next.
|
|
26
|
+
"@orpc/shared": "0.0.0-next.cc8802c",
|
|
27
|
+
"@orpc/standard-server": "0.0.0-next.cc8802c"
|
|
33
28
|
},
|
|
34
29
|
"devDependencies": {
|
|
35
30
|
"@hono/node-server": "^1.13.8"
|
|
36
31
|
},
|
|
37
32
|
"scripts": {
|
|
38
|
-
"build": "
|
|
33
|
+
"build": "unbuild",
|
|
39
34
|
"build:watch": "pnpm run build --watch",
|
|
40
35
|
"type:check": "tsc -b"
|
|
41
36
|
}
|
package/dist/src/body.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { StandardBody } from '@orpc/standard-server';
|
|
2
|
-
export declare function toStandardBody(re: Request | Response): Promise<StandardBody>;
|
|
3
|
-
/**
|
|
4
|
-
* @param body
|
|
5
|
-
* @param headers - The headers can be changed by the function and effects on the original headers.
|
|
6
|
-
*/
|
|
7
|
-
export declare function toFetchBody(body: StandardBody, headers: Headers): string | Blob | FormData | URLSearchParams | undefined | ReadableStream<Uint8Array>;
|
|
8
|
-
//# sourceMappingURL=body.d.ts.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export declare function toEventIterator(stream: ReadableStream<Uint8Array>): AsyncGenerator<unknown | void, unknown | void, void>;
|
|
2
|
-
export declare function toEventStream(iterator: AsyncIterator<unknown | void, unknown | void, void>): ReadableStream<Uint8Array>;
|
|
3
|
-
//# sourceMappingURL=event-source.d.ts.map
|
package/dist/src/headers.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { StandardHeaders } from '@orpc/standard-server';
|
|
2
|
-
/**
|
|
3
|
-
* @param headers
|
|
4
|
-
* @param standardHeaders - The base headers can be changed by the function and effects on the original headers.
|
|
5
|
-
*/
|
|
6
|
-
export declare function toStandardHeaders(headers: Headers, standardHeaders?: StandardHeaders): StandardHeaders;
|
|
7
|
-
/**
|
|
8
|
-
* @param headers
|
|
9
|
-
* @param fetchHeaders - The base headers can be changed by the function and effects on the original headers.
|
|
10
|
-
*/
|
|
11
|
-
export declare function toFetchHeaders(headers: StandardHeaders, fetchHeaders?: Headers): Headers;
|
|
12
|
-
//# sourceMappingURL=headers.d.ts.map
|
package/dist/src/index.d.ts
DELETED
package/dist/src/request.d.ts
DELETED
package/dist/src/response.d.ts
DELETED