@orpc/standard-server-node 0.0.0-next.6e7c532 → 0.0.0-next.6f39534

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 CHANGED
@@ -49,14 +49,12 @@ You can find the full documentation [here](https://orpc.unnoq.com).
49
49
  - [@orpc/contract](https://www.npmjs.com/package/@orpc/contract): Build your API contract.
50
50
  - [@orpc/server](https://www.npmjs.com/package/@orpc/server): Build your API or implement API contract.
51
51
  - [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume your API on the client with type-safety.
52
- - [@orpc/nest](https://www.npmjs.com/package/@orpc/nest): Deeply integrate oRPC with NestJS.
52
+ - [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Generate OpenAPI specs and handle OpenAPI requests.
53
+ - [@orpc/nest](https://www.npmjs.com/package/@orpc/nest): Deeply integrate oRPC with [NestJS](https://nestjs.com/).
53
54
  - [@orpc/react](https://www.npmjs.com/package/@orpc/react): Utilities for integrating oRPC with React and React Server Actions.
54
- - [@orpc/react-query](https://www.npmjs.com/package/@orpc/react-query): Integration with [React Query](https://tanstack.com/query/latest/docs/framework/react/overview).
55
- - [@orpc/vue-query](https://www.npmjs.com/package/@orpc/vue-query): Integration with [Vue Query](https://tanstack.com/query/latest/docs/framework/vue/overview).
56
- - [@orpc/solid-query](https://www.npmjs.com/package/@orpc/solid-query): Integration with [Solid Query](https://tanstack.com/query/latest/docs/framework/solid/overview).
57
- - [@orpc/svelte-query](https://www.npmjs.com/package/@orpc/svelte-query): Integration with [Svelte Query](https://tanstack.com/query/latest/docs/framework/svelte/overview).
55
+ - [@orpc/tanstack-query](https://www.npmjs.com/package/@orpc/tanstack-query): [TanStack Query](https://tanstack.com/query/latest) integration.
58
56
  - [@orpc/vue-colada](https://www.npmjs.com/package/@orpc/vue-colada): Integration with [Pinia Colada](https://pinia-colada.esm.dev/).
59
- - [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Generate OpenAPI specs and handle OpenAPI requests.
57
+ - [@orpc/hey-api](https://www.npmjs.com/package/@orpc/hey-api): [Hey API](https://heyapi.dev/) integration.
60
58
  - [@orpc/zod](https://www.npmjs.com/package/@orpc/zod): More schemas that [Zod](https://zod.dev/) doesn't support yet.
61
59
  - [@orpc/valibot](https://www.npmjs.com/package/@orpc/valibot): OpenAPI spec generation from [Valibot](https://valibot.dev/).
62
60
  - [@orpc/arktype](https://www.npmjs.com/package/@orpc/arktype): OpenAPI spec generation from [ArkType](https://arktype.io/).
package/dist/index.d.mts CHANGED
@@ -1,28 +1,11 @@
1
1
  import { StandardBody, StandardHeaders, StandardLazyRequest, StandardResponse } from '@orpc/standard-server';
2
+ import { ToEventStreamOptions as ToEventStreamOptions$1 } from '@orpc/standard-server-fetch';
2
3
  import Stream, { Readable } from 'node:stream';
3
4
  import { IncomingMessage, ServerResponse } from 'node:http';
4
5
  import { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
5
6
 
6
7
  declare function toEventIterator(stream: Readable): AsyncIteratorObject<unknown | void, unknown | void, void> & AsyncGenerator<unknown | void, unknown | void, void>;
7
- interface ToEventStreamOptions {
8
- /**
9
- * If true, a ping comment is sent periodically to keep the connection alive.
10
- *
11
- * @default true
12
- */
13
- eventIteratorKeepAliveEnabled?: boolean;
14
- /**
15
- * Interval (in milliseconds) between ping comments sent after the last event.
16
- *
17
- * @default 5000
18
- */
19
- eventIteratorKeepAliveInterval?: number;
20
- /**
21
- * The content of the ping comment. Must not include newline characters.
22
- *
23
- * @default ''
24
- */
25
- eventIteratorKeepAliveComment?: string;
8
+ interface ToEventStreamOptions extends ToEventStreamOptions$1 {
26
9
  }
27
10
  declare function toEventStream(iterator: AsyncIterator<unknown | void, unknown | void, void>, options?: ToEventStreamOptions): Readable;
28
11
 
package/dist/index.d.ts CHANGED
@@ -1,28 +1,11 @@
1
1
  import { StandardBody, StandardHeaders, StandardLazyRequest, StandardResponse } from '@orpc/standard-server';
2
+ import { ToEventStreamOptions as ToEventStreamOptions$1 } from '@orpc/standard-server-fetch';
2
3
  import Stream, { Readable } from 'node:stream';
3
4
  import { IncomingMessage, ServerResponse } from 'node:http';
4
5
  import { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
5
6
 
6
7
  declare function toEventIterator(stream: Readable): AsyncIteratorObject<unknown | void, unknown | void, void> & AsyncGenerator<unknown | void, unknown | void, void>;
7
- interface ToEventStreamOptions {
8
- /**
9
- * If true, a ping comment is sent periodically to keep the connection alive.
10
- *
11
- * @default true
12
- */
13
- eventIteratorKeepAliveEnabled?: boolean;
14
- /**
15
- * Interval (in milliseconds) between ping comments sent after the last event.
16
- *
17
- * @default 5000
18
- */
19
- eventIteratorKeepAliveInterval?: number;
20
- /**
21
- * The content of the ping comment. Must not include newline characters.
22
- *
23
- * @default ''
24
- */
25
- eventIteratorKeepAliveComment?: string;
8
+ interface ToEventStreamOptions extends ToEventStreamOptions$1 {
26
9
  }
27
10
  declare function toEventStream(iterator: AsyncIterator<unknown | void, unknown | void, void>, options?: ToEventStreamOptions): Readable;
28
11
 
package/dist/index.mjs CHANGED
@@ -1,96 +1,13 @@
1
1
  import { Readable } from 'node:stream';
2
- import { createAsyncIteratorObject, parseEmptyableJSON, isTypescriptObject, stringifyJSON, isAsyncIteratorObject, once } from '@orpc/shared';
3
- import { EventDecoderStream, withEventMeta, ErrorEvent, encodeEventMessage, getEventMeta, getFilenameFromContentDisposition, flattenHeader, generateContentDisposition } from '@orpc/standard-server';
2
+ import { parseEmptyableJSON, isAsyncIteratorObject, stringifyJSON, once } from '@orpc/shared';
3
+ import { getFilenameFromContentDisposition, flattenHeader, generateContentDisposition } from '@orpc/standard-server';
4
+ import { toEventIterator as toEventIterator$1, toEventStream as toEventStream$1 } from '@orpc/standard-server-fetch';
4
5
 
5
6
  function toEventIterator(stream) {
6
- const eventStream = Readable.toWeb(stream).pipeThrough(new TextDecoderStream()).pipeThrough(new EventDecoderStream());
7
- const reader = eventStream.getReader();
8
- return createAsyncIteratorObject(async () => {
9
- while (true) {
10
- const { done, value } = await reader.read();
11
- if (done) {
12
- return { done: true, value: void 0 };
13
- }
14
- switch (value.event) {
15
- case "message": {
16
- let message = parseEmptyableJSON(value.data);
17
- if (isTypescriptObject(message)) {
18
- message = withEventMeta(message, value);
19
- }
20
- return { done: false, value: message };
21
- }
22
- case "error": {
23
- let error = new ErrorEvent({
24
- data: parseEmptyableJSON(value.data)
25
- });
26
- error = withEventMeta(error, value);
27
- throw error;
28
- }
29
- case "done": {
30
- let done2 = parseEmptyableJSON(value.data);
31
- if (isTypescriptObject(done2)) {
32
- done2 = withEventMeta(done2, value);
33
- }
34
- return { done: true, value: done2 };
35
- }
36
- }
37
- }
38
- }, async () => {
39
- await reader.cancel();
40
- });
7
+ return toEventIterator$1(Readable.toWeb(stream));
41
8
  }
42
9
  function toEventStream(iterator, options = {}) {
43
- const keepAliveEnabled = options.eventIteratorKeepAliveEnabled ?? true;
44
- const keepAliveInterval = options.eventIteratorKeepAliveInterval ?? 5e3;
45
- const keepAliveComment = options.eventIteratorKeepAliveComment ?? "";
46
- let cancelled = false;
47
- let timeout;
48
- const stream = new ReadableStream({
49
- async pull(controller) {
50
- try {
51
- if (keepAliveEnabled) {
52
- timeout = setInterval(() => {
53
- controller.enqueue(encodeEventMessage({
54
- comments: [keepAliveComment]
55
- }));
56
- }, keepAliveInterval);
57
- }
58
- const value = await iterator.next();
59
- clearInterval(timeout);
60
- if (cancelled) {
61
- return;
62
- }
63
- const meta = getEventMeta(value.value);
64
- if (!value.done || value.value !== void 0 || meta !== void 0) {
65
- controller.enqueue(encodeEventMessage({
66
- ...meta,
67
- event: value.done ? "done" : "message",
68
- data: stringifyJSON(value.value)
69
- }));
70
- }
71
- if (value.done) {
72
- controller.close();
73
- }
74
- } catch (err) {
75
- clearInterval(timeout);
76
- if (cancelled) {
77
- return;
78
- }
79
- controller.enqueue(encodeEventMessage({
80
- ...getEventMeta(err),
81
- event: "error",
82
- data: err instanceof ErrorEvent ? stringifyJSON(err.data) : void 0
83
- }));
84
- controller.close();
85
- }
86
- },
87
- async cancel() {
88
- cancelled = true;
89
- clearInterval(timeout);
90
- await iterator.return?.();
91
- }
92
- });
93
- return Readable.fromWeb(stream);
10
+ return Readable.fromWeb(toEventStream$1(iterator, options));
94
11
  }
95
12
 
96
13
  async function toStandardBody(req) {
@@ -143,8 +60,6 @@ function toNodeHttpBody(body, headers, options = {}) {
143
60
  }
144
61
  if (isAsyncIteratorObject(body)) {
145
62
  headers["content-type"] = "text/event-stream";
146
- headers["cache-control"] = "no-cache";
147
- headers.connection = "keep-alive";
148
63
  return toEventStream(body, options);
149
64
  }
150
65
  headers["content-type"] = "application/json";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/standard-server-node",
3
3
  "type": "module",
4
- "version": "0.0.0-next.6e7c532",
4
+ "version": "0.0.0-next.6f39534",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -23,11 +23,12 @@
23
23
  "dist"
24
24
  ],
25
25
  "dependencies": {
26
- "@orpc/shared": "0.0.0-next.6e7c532",
27
- "@orpc/standard-server": "0.0.0-next.6e7c532"
26
+ "@orpc/standard-server": "0.0.0-next.6f39534",
27
+ "@orpc/standard-server-fetch": "0.0.0-next.6f39534",
28
+ "@orpc/shared": "0.0.0-next.6f39534"
28
29
  },
29
30
  "devDependencies": {
30
- "@types/node": "^22.15.17",
31
+ "@types/node": "^22.15.18",
31
32
  "@types/supertest": "^6.0.3",
32
33
  "supertest": "^7.1.0"
33
34
  },