@orpc/standard-server-fetch 0.0.0-next.ca29a36 → 0.0.0-next.cd121e3
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 +52 -0
- package/dist/index.d.ts +52 -0
- package/dist/{index.js → index.mjs} +24 -44
- 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,52 @@
|
|
|
1
|
+
import { StandardBody, StandardHeaders, StandardRequest, StandardResponse } 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
|
+
eventSourcePingEnabled?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Interval (in milliseconds) between ping comments sent after the last event.
|
|
13
|
+
*
|
|
14
|
+
* @default 5000
|
|
15
|
+
*/
|
|
16
|
+
eventSourcePingInterval?: number;
|
|
17
|
+
/**
|
|
18
|
+
* The content of the ping comment. Must not include newline characters.
|
|
19
|
+
*
|
|
20
|
+
* @default ''
|
|
21
|
+
*/
|
|
22
|
+
eventSourcePingContent?: 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 toStandardRequest(request: Request): StandardRequest;
|
|
47
|
+
|
|
48
|
+
interface ToFetchResponseOptions extends ToFetchBodyOptions {
|
|
49
|
+
}
|
|
50
|
+
declare function toFetchResponse(response: StandardResponse, options?: ToFetchResponseOptions): Response;
|
|
51
|
+
|
|
52
|
+
export { type ToEventStreamOptions, type ToFetchBodyOptions, type ToFetchResponseOptions, toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchResponse, toStandardBody, toStandardHeaders, toStandardRequest };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { StandardBody, StandardHeaders, StandardRequest, StandardResponse } 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
|
+
eventSourcePingEnabled?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Interval (in milliseconds) between ping comments sent after the last event.
|
|
13
|
+
*
|
|
14
|
+
* @default 5000
|
|
15
|
+
*/
|
|
16
|
+
eventSourcePingInterval?: number;
|
|
17
|
+
/**
|
|
18
|
+
* The content of the ping comment. Must not include newline characters.
|
|
19
|
+
*
|
|
20
|
+
* @default ''
|
|
21
|
+
*/
|
|
22
|
+
eventSourcePingContent?: 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 toStandardRequest(request: Request): StandardRequest;
|
|
47
|
+
|
|
48
|
+
interface ToFetchResponseOptions extends ToFetchBodyOptions {
|
|
49
|
+
}
|
|
50
|
+
declare function toFetchResponse(response: StandardResponse, options?: ToFetchResponseOptions): Response;
|
|
51
|
+
|
|
52
|
+
export { type ToEventStreamOptions, type ToFetchBodyOptions, type ToFetchResponseOptions, toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchResponse, toStandardBody, toStandardHeaders, toStandardRequest };
|
|
@@ -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 pingEnabled = options.eventSourcePingEnabled ?? true;
|
|
47
|
+
const pingInterval = options.eventSourcePingInterval ?? 5e3;
|
|
48
|
+
const pingContent = options.eventSourcePingContent ?? "";
|
|
49
|
+
let timeout;
|
|
65
50
|
const stream = new ReadableStream({
|
|
66
51
|
async pull(controller) {
|
|
67
52
|
try {
|
|
53
|
+
if (pingEnabled) {
|
|
54
|
+
timeout = setInterval(() => {
|
|
55
|
+
controller.enqueue(encodeEventMessage({
|
|
56
|
+
comments: [pingContent]
|
|
57
|
+
}));
|
|
58
|
+
}, pingInterval);
|
|
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,8 +181,6 @@ function toFetchHeaders(headers, fetchHeaders = new Headers()) {
|
|
|
189
181
|
return fetchHeaders;
|
|
190
182
|
}
|
|
191
183
|
|
|
192
|
-
// src/request.ts
|
|
193
|
-
import { once } from "@orpc/shared";
|
|
194
184
|
function toStandardRequest(request) {
|
|
195
185
|
return {
|
|
196
186
|
raw: { request },
|
|
@@ -209,20 +199,10 @@ function toStandardRequest(request) {
|
|
|
209
199
|
};
|
|
210
200
|
}
|
|
211
201
|
|
|
212
|
-
|
|
213
|
-
function toFetchResponse(response) {
|
|
202
|
+
function toFetchResponse(response, options = {}) {
|
|
214
203
|
const headers = toFetchHeaders(response.headers);
|
|
215
|
-
const body = toFetchBody(response.body, headers);
|
|
204
|
+
const body = toFetchBody(response.body, headers, options);
|
|
216
205
|
return new Response(body, { headers, status: response.status });
|
|
217
206
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
toEventStream,
|
|
221
|
-
toFetchBody,
|
|
222
|
-
toFetchHeaders,
|
|
223
|
-
toFetchResponse,
|
|
224
|
-
toStandardBody,
|
|
225
|
-
toStandardHeaders,
|
|
226
|
-
toStandardRequest
|
|
227
|
-
};
|
|
228
|
-
//# sourceMappingURL=index.js.map
|
|
207
|
+
|
|
208
|
+
export { toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchResponse, toStandardBody, toStandardHeaders, toStandardRequest };
|
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.cd121e3",
|
|
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.cd121e3",
|
|
27
|
+
"@orpc/standard-server": "0.0.0-next.cd121e3"
|
|
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