@trevrpc/trevrpc-js 0.2.3 → 1.1.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.
Files changed (47) hide show
  1. package/README.md +127 -46
  2. package/package.json +12 -45
  3. package/src/bytes.js +10 -0
  4. package/src/call.js +520 -0
  5. package/src/channel.js +258 -288
  6. package/src/client.js +543 -1254
  7. package/src/datagram.js +336 -0
  8. package/src/framing.js +151 -548
  9. package/src/generator.js +66 -109
  10. package/src/index.d.ts +235 -463
  11. package/src/index.js +4 -3
  12. package/src/qmux/frames.js +262 -0
  13. package/src/qmux/params.js +104 -0
  14. package/src/qmux/session.js +739 -0
  15. package/src/race.js +90 -0
  16. package/src/status.js +24 -70
  17. package/src/varint.js +73 -0
  18. package/src/wire.js +21 -89
  19. package/examples/greeter/README.md +0 -35
  20. package/examples/greeter/client.js +0 -172
  21. package/examples/greeter/greeter.node.trevrpc.d.ts +0 -53
  22. package/examples/greeter/greeter.node.trevrpc.js +0 -9
  23. package/examples/greeter/greeter.proto +0 -18
  24. package/examples/greeter/greeter.trevrpc.d.ts +0 -55
  25. package/examples/greeter/greeter.trevrpc.js +0 -103
  26. package/examples/greeter/index.html +0 -140
  27. package/examples/greeter/static-server.js +0 -168
  28. package/src/advanced.d.ts +0 -29
  29. package/src/advanced.js +0 -1
  30. package/src/browser-channel.js +0 -49
  31. package/src/connect.js +0 -6
  32. package/src/connect.node.js +0 -6
  33. package/src/index.node.d.ts +0 -10
  34. package/src/index.node.js +0 -3
  35. package/src/native-loader.js +0 -118
  36. package/src/node-advanced.d.ts +0 -27
  37. package/src/node-advanced.js +0 -1
  38. package/src/node-generated.d.ts +0 -24
  39. package/src/node-generated.js +0 -126
  40. package/src/node-index.d.ts +0 -1
  41. package/src/node-index.js +0 -7
  42. package/src/node.d.ts +0 -298
  43. package/src/node.js +0 -1456
  44. package/src/runtime.js +0 -66
  45. package/src/server-response.js +0 -49
  46. package/src/timer.js +0 -29
  47. package/src/webtransport.js +0 -639
@@ -1,53 +0,0 @@
1
- // Code generated by protoc-gen-trevrpc-js. DO NOT EDIT.
2
-
3
- import type {
4
- NodeServer,
5
- NodeServerCall,
6
- StreamingServerResponse,
7
- UnaryServerResponse,
8
- } from "../../src/node-generated.js";
9
- import type { HelloRequest, HelloReply } from "./greeter.trevrpc.js";
10
-
11
- /** Typed Node handlers for the Greeter service. */
12
- export interface GreeterHandlers {
13
- sayHello?(
14
- request: HelloRequest,
15
- call: NodeServerCall,
16
- ):
17
- | HelloReply
18
- | UnaryServerResponse<HelloReply>
19
- | Promise<HelloReply | UnaryServerResponse<HelloReply>>;
20
- lotsOfReplies?(
21
- request: HelloRequest,
22
- call: NodeServerCall,
23
- ):
24
- | Iterable<HelloReply>
25
- | AsyncIterable<HelloReply>
26
- | StreamingServerResponse<HelloReply>
27
- | Promise<
28
- Iterable<HelloReply> | AsyncIterable<HelloReply> | StreamingServerResponse<HelloReply>
29
- >;
30
- lotsOfGreetings?(
31
- requests: AsyncIterable<HelloRequest>,
32
- call: NodeServerCall,
33
- ):
34
- | HelloReply
35
- | UnaryServerResponse<HelloReply>
36
- | Promise<HelloReply | UnaryServerResponse<HelloReply>>;
37
- bidiHello?(
38
- requests: AsyncIterable<HelloRequest>,
39
- call: NodeServerCall,
40
- ):
41
- | Iterable<HelloReply>
42
- | AsyncIterable<HelloReply>
43
- | StreamingServerResponse<HelloReply>
44
- | Promise<
45
- Iterable<HelloReply> | AsyncIterable<HelloReply> | StreamingServerResponse<HelloReply>
46
- >;
47
- }
48
-
49
- /** Registers typed Node handlers for the Greeter service. */
50
- export declare function registerGreeterServer(
51
- server: NodeServer,
52
- handlers: GreeterHandlers,
53
- ): NodeServer;
@@ -1,9 +0,0 @@
1
- // Code generated by protoc-gen-trevrpc-js. DO NOT EDIT.
2
-
3
- import { registerTypedService } from "../../src/node-generated.js";
4
- import { GreeterService, root } from "./greeter.trevrpc.js";
5
-
6
- /** Registers typed Node handlers for the Greeter service. */
7
- export function registerGreeterServer(server, handlers) {
8
- return registerTypedService(server, root, GreeterService, handlers);
9
- }
@@ -1,18 +0,0 @@
1
- syntax = "proto3";
2
-
3
- package example.greeter;
4
-
5
- service Greeter {
6
- rpc SayHello(HelloRequest) returns (HelloReply);
7
- rpc LotsOfReplies(HelloRequest) returns (stream HelloReply);
8
- rpc LotsOfGreetings(stream HelloRequest) returns (HelloReply);
9
- rpc BidiHello(stream HelloRequest) returns (stream HelloReply);
10
- }
11
-
12
- message HelloRequest {
13
- string name = 1;
14
- }
15
-
16
- message HelloReply {
17
- string message = 1;
18
- }
@@ -1,55 +0,0 @@
1
- // Code generated by protoc-gen-trevrpc-js. DO NOT EDIT.
2
-
3
- import type { Long, Root } from "protobufjs";
4
-
5
- import type {
6
- BidirectionalStreamingCall,
7
- CallOptions,
8
- ClientStreamingCall,
9
- ResponseAsyncIterable,
10
- RpcServiceDescriptor,
11
- Transport,
12
- UnaryResponse,
13
- } from "../../src/index.js";
14
-
15
- export declare const root: Root;
16
-
17
- export interface HelloRequest {
18
- name?: string;
19
- }
20
-
21
- export interface HelloReply {
22
- message?: string;
23
- }
24
-
25
- /** Service descriptor for the Greeter service. */
26
- export declare const GreeterService: RpcServiceDescriptor;
27
-
28
- /** Client for the Greeter service. */
29
- export declare class GreeterClient {
30
- /** Creates a client for the Greeter service. */
31
- constructor(transport: Transport, options?: CallOptions);
32
-
33
- /** Calls the SayHello RPC. */
34
- sayHello(request: HelloRequest, options?: CallOptions): Promise<HelloReply>;
35
- /** Calls the SayHello RPC and returns response metadata. */
36
- sayHelloWithResponse(
37
- request: HelloRequest,
38
- options?: CallOptions,
39
- ): Promise<UnaryResponse<HelloReply>>;
40
- /** Calls the LotsOfReplies RPC. */
41
- lotsOfReplies(
42
- request: HelloRequest,
43
- options?: CallOptions,
44
- ): Promise<ResponseAsyncIterable<HelloReply>>;
45
- /** Calls the LotsOfGreetings RPC. */
46
- lotsOfGreetings(options?: CallOptions): Promise<ClientStreamingCall<HelloRequest, HelloReply>>;
47
- /** Calls the BidiHello RPC. */
48
- bidiHello(options?: CallOptions): Promise<BidirectionalStreamingCall<HelloRequest, HelloReply>>;
49
- }
50
-
51
- /** Creates a client for the Greeter service. */
52
- export declare function createGreeterClient(
53
- transport: Transport,
54
- options?: CallOptions,
55
- ): GreeterClient;
@@ -1,103 +0,0 @@
1
- // Code generated by protoc-gen-trevrpc-js. DO NOT EDIT.
2
-
3
- import { createRoot, createServiceClient } from "../../src/index.js";
4
-
5
- export const root = createRoot({
6
- nested: {
7
- example: {
8
- nested: {
9
- greeter: {
10
- nested: {
11
- HelloRequest: {
12
- fields: {
13
- name: {
14
- type: "string",
15
- id: 1,
16
- },
17
- },
18
- },
19
- HelloReply: {
20
- fields: {
21
- message: {
22
- type: "string",
23
- id: 1,
24
- },
25
- },
26
- },
27
- },
28
- },
29
- },
30
- },
31
- },
32
- });
33
-
34
- /** Service descriptor for the Greeter service. */
35
- export const GreeterService = Object.freeze({
36
- name: "Greeter",
37
- fullName: "example.greeter.Greeter",
38
- exportName: "GreeterService",
39
- methods: {
40
- sayHello: {
41
- name: "SayHello",
42
- kind: "unary",
43
- inputType: "example.greeter.HelloRequest",
44
- outputType: "example.greeter.HelloReply",
45
- },
46
- lotsOfReplies: {
47
- name: "LotsOfReplies",
48
- kind: "serverStreaming",
49
- inputType: "example.greeter.HelloRequest",
50
- outputType: "example.greeter.HelloReply",
51
- },
52
- lotsOfGreetings: {
53
- name: "LotsOfGreetings",
54
- kind: "clientStreaming",
55
- inputType: "example.greeter.HelloRequest",
56
- outputType: "example.greeter.HelloReply",
57
- },
58
- bidiHello: {
59
- name: "BidiHello",
60
- kind: "bidirectionalStreaming",
61
- inputType: "example.greeter.HelloRequest",
62
- outputType: "example.greeter.HelloReply",
63
- },
64
- },
65
- });
66
-
67
- /** Client for the Greeter service. */
68
- export class GreeterClient {
69
- /** Creates a client for the Greeter service. */
70
- constructor(transport, options = {}) {
71
- this._client = createServiceClient(transport, GreeterService, root, options);
72
- }
73
-
74
- /** Calls the SayHello RPC. */
75
- sayHello(request, options = {}) {
76
- return this._client.sayHello(request, options);
77
- }
78
-
79
- /** Calls the SayHello RPC and returns response metadata. */
80
- sayHelloWithResponse(request, options = {}) {
81
- return this._client.sayHelloWithResponse(request, options);
82
- }
83
-
84
- /** Calls the LotsOfReplies RPC. */
85
- lotsOfReplies(request, options = {}) {
86
- return this._client.lotsOfReplies(request, options);
87
- }
88
-
89
- /** Calls the LotsOfGreetings RPC. */
90
- lotsOfGreetings(options = {}) {
91
- return this._client.lotsOfGreetings(options);
92
- }
93
-
94
- /** Calls the BidiHello RPC. */
95
- bidiHello(options = {}) {
96
- return this._client.bidiHello(options);
97
- }
98
- }
99
-
100
- /** Creates a client for the Greeter service. */
101
- export function createGreeterClient(transport, options = {}) {
102
- return new GreeterClient(transport, options);
103
- }
@@ -1,140 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>TrevRPC JavaScript Greeter Client</title>
7
- <style>
8
- :root {
9
- color-scheme: light dark;
10
- font-family:
11
- Inter,
12
- ui-sans-serif,
13
- system-ui,
14
- -apple-system,
15
- BlinkMacSystemFont,
16
- "Segoe UI",
17
- sans-serif;
18
- }
19
-
20
- body {
21
- margin: 0;
22
- min-height: 100vh;
23
- background:
24
- radial-gradient(circle at top left, rgb(80 80 180 / 30%), transparent 35rem), Canvas;
25
- color: CanvasText;
26
- }
27
-
28
- main {
29
- box-sizing: border-box;
30
- width: min(54rem, 100%);
31
- margin: 0 auto;
32
- padding: 3rem 1rem;
33
- }
34
-
35
- form,
36
- pre {
37
- border: 1px solid color-mix(in srgb, CanvasText 18%, transparent);
38
- border-radius: 1rem;
39
- background: color-mix(in srgb, Canvas 92%, CanvasText 8%);
40
- box-shadow: 0 1rem 3rem rgb(0 0 0 / 12%);
41
- }
42
-
43
- form {
44
- display: grid;
45
- gap: 1rem;
46
- padding: 1rem;
47
- }
48
-
49
- label {
50
- display: grid;
51
- gap: 0.35rem;
52
- font-weight: 700;
53
- }
54
-
55
- input,
56
- button {
57
- border: 1px solid color-mix(in srgb, CanvasText 22%, transparent);
58
- border-radius: 0.7rem;
59
- font: inherit;
60
- padding: 0.75rem;
61
- }
62
-
63
- button {
64
- cursor: pointer;
65
- font-weight: 800;
66
- }
67
-
68
- .actions {
69
- display: flex;
70
- flex-wrap: wrap;
71
- gap: 0.75rem;
72
- }
73
-
74
- #submit {
75
- background: #5b5bd6;
76
- color: white;
77
- }
78
-
79
- small {
80
- opacity: 0.75;
81
- }
82
-
83
- pre {
84
- min-height: 14rem;
85
- overflow: auto;
86
- padding: 1rem;
87
- white-space: pre-wrap;
88
- }
89
- </style>
90
- <script type="importmap">
91
- {
92
- "imports": {
93
- "protobufjs": "./vendor/protobufjs.js"
94
- }
95
- }
96
- </script>
97
- </head>
98
- <body>
99
- <main>
100
- <h1>TrevRPC JavaScript Greeter Client</h1>
101
- <p>
102
- Connect this page to a WebTransport-enabled TrevRPC Go or Rust greeter server and run all
103
- four RPC shapes from the browser.
104
- </p>
105
-
106
- <form id="client-form">
107
- <label>
108
- WebTransport URL
109
- <input name="url" required value="https://127.0.0.1:50051/trevrpc" />
110
- </label>
111
- <div class="actions">
112
- <button type="button" data-url="https://127.0.0.1:50051/trevrpc">Go default URL</button>
113
- <button type="button" data-url="https://127.0.0.1:5000/trevrpc">Rust default URL</button>
114
- </div>
115
- <label>
116
- Name
117
- <input name="name" value="TrevRPC" />
118
- </label>
119
- <label>
120
- Bearer token
121
- <input name="token" value="trevrpc-example-token" />
122
- </label>
123
- <label>
124
- Server certificate SHA-256 hash
125
- <input name="certificate-hash" placeholder="optional hex or base64 hash" />
126
- <small>
127
- The local static server loads this from
128
- <code>~/.config/trevrpc/trevrpc-example-cert.pem</code> when available. Leave empty when
129
- the browser already trusts the server certificate.
130
- </small>
131
- </label>
132
- <button id="submit" type="submit">Run RPCs</button>
133
- </form>
134
-
135
- <h2>Output</h2>
136
- <pre id="output" aria-live="polite"></pre>
137
- </main>
138
- <script type="module" src="./client.js"></script>
139
- </body>
140
- </html>
@@ -1,168 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import { readFile, stat } from "node:fs/promises";
4
- import { createServer } from "node:http";
5
- import { homedir } from "node:os";
6
- import { extname, join, normalize, resolve, sep } from "node:path";
7
- import { fileURLToPath } from "node:url";
8
-
9
- const root = resolve(fileURLToPath(new URL("../..", import.meta.url)));
10
- const port = Number.parseInt(process.env.PORT ?? "8080", 10);
11
- const authToken = "trevrpc-example-token";
12
- const protobufBundlePath = fileURLToPath(import.meta.resolve("protobufjs/dist/protobuf.min.js"));
13
-
14
- const contentTypes = new Map([
15
- [".html", "text/html; charset=utf-8"],
16
- [".js", "text/javascript; charset=utf-8"],
17
- [".json", "application/json; charset=utf-8"],
18
- [".md", "text/markdown; charset=utf-8"],
19
- [".proto", "text/plain; charset=utf-8"],
20
- ]);
21
-
22
- const server = createServer(async (request, response) => {
23
- try {
24
- const path = requestPath(request.url ?? "/");
25
-
26
- if (path === "/favicon.ico") {
27
- response.writeHead(204);
28
- response.end();
29
- return;
30
- }
31
-
32
- if (path === "/examples/greeter/certificate-hash.json") {
33
- await writeCertificateHash(response);
34
- return;
35
- }
36
-
37
- if (path === "/examples/greeter/vendor/protobufjs.js") {
38
- writeProtobufModule(response);
39
- return;
40
- }
41
-
42
- if (path === "/examples/greeter/vendor/protobuf.min.js") {
43
- await writeProtobufBundle(response);
44
- return;
45
- }
46
-
47
- const file = path.endsWith("/") ? join(path, "index.html") : path;
48
- await writeStaticFile(response, safePath(file));
49
- } catch (error) {
50
- if (error?.code === "ENOENT") {
51
- notFound(response);
52
- return;
53
- }
54
-
55
- response.writeHead(500, { "content-type": "text/plain; charset=utf-8" });
56
- response.end(error?.message ?? String(error));
57
- }
58
- });
59
-
60
- server.listen(port, "127.0.0.1", () => {
61
- console.log(`serving trevrpc-js from http://127.0.0.1:${port}/examples/greeter/`);
62
- });
63
-
64
- function requestPath(url) {
65
- return decodeURIComponent(new URL(url, "http://127.0.0.1").pathname);
66
- }
67
-
68
- async function writeStaticFile(response, absolute) {
69
- const info = await stat(absolute);
70
-
71
- if (!info.isFile()) {
72
- notFound(response);
73
- return;
74
- }
75
-
76
- response.writeHead(200, {
77
- "content-type": contentTypes.get(extname(absolute)) ?? "application/octet-stream",
78
- });
79
- createReadStream(absolute).pipe(response);
80
- }
81
-
82
- function safePath(path) {
83
- const absolute = normalize(join(root, path));
84
- if (absolute !== root && !absolute.startsWith(`${root}${sep}`)) {
85
- throw new Error("path escapes example root");
86
- }
87
-
88
- return absolute;
89
- }
90
-
91
- async function writeCertificateHash(response) {
92
- const path = certificatePath();
93
-
94
- try {
95
- const certificate = await readFile(path);
96
- const der = certificateDer(certificate);
97
- const hash = createHash("sha256").update(der).digest();
98
-
99
- response.writeHead(200, { "content-type": "application/json; charset=utf-8" });
100
- response.end(
101
- JSON.stringify({
102
- exists: true,
103
- path,
104
- bearerToken: authToken,
105
- sha256Base64: hash.toString("base64"),
106
- sha256Hex: hash.toString("hex"),
107
- }),
108
- );
109
- } catch (error) {
110
- response.writeHead(200, { "content-type": "application/json; charset=utf-8" });
111
- response.end(
112
- JSON.stringify({
113
- exists: false,
114
- path,
115
- bearerToken: authToken,
116
- error: error?.message ?? String(error),
117
- }),
118
- );
119
- }
120
- }
121
-
122
- function writeProtobufModule(response) {
123
- response.writeHead(200, { "content-type": "text/javascript; charset=utf-8" });
124
- response.end(`await new Promise((resolve, reject) => {
125
- if (globalThis.protobuf != null) {
126
- resolve();
127
- return;
128
- }
129
-
130
- const script = document.createElement("script");
131
- script.src = new URL("./protobuf.min.js", import.meta.url).href;
132
- script.onload = resolve;
133
- script.onerror = () => reject(new Error("failed to load protobuf.js browser bundle"));
134
- document.head.append(script);
135
- });
136
-
137
- export default globalThis.protobuf;
138
- export const protobuf = globalThis.protobuf;
139
- `);
140
- }
141
-
142
- async function writeProtobufBundle(response) {
143
- await writeStaticFile(response, protobufBundlePath);
144
- }
145
-
146
- function certificatePath() {
147
- return (
148
- process.env.TREVRPC_EXAMPLE_CERT ??
149
- join(homedir(), ".config", "trevrpc", "trevrpc-example-cert.pem")
150
- );
151
- }
152
-
153
- function certificateDer(certificate) {
154
- const text = certificate.toString("utf8");
155
- const match = /-----BEGIN CERTIFICATE-----([A-Za-z0-9+/=\s]+)-----END CERTIFICATE-----/.exec(
156
- text,
157
- );
158
- if (match == null) {
159
- return certificate;
160
- }
161
-
162
- return Buffer.from(match[1].replace(/\s/g, ""), "base64");
163
- }
164
-
165
- function notFound(response) {
166
- response.writeHead(404, { "content-type": "text/plain; charset=utf-8" });
167
- response.end("not found");
168
- }
package/src/advanced.d.ts DELETED
@@ -1,29 +0,0 @@
1
- import type {
2
- ResolvedCallOptions,
3
- RpcRequestMessage,
4
- RpcResponseMessage,
5
- RpcStreamFrameMessage,
6
- Transport,
7
- WebTransportBidirectionalStreamLike,
8
- WebTransportCloseInfoLike,
9
- WebTransportOptions,
10
- WebTransportSessionLike,
11
- } from "./index.js";
12
-
13
- /** Raw single-session TrevRPC transport for browser WebTransport. */
14
- export class RawWebTransport implements Transport {
15
- session: WebTransportSessionLike;
16
- maxFrameSize: number;
17
-
18
- constructor(session: WebTransportSessionLike, options?: WebTransportOptions);
19
- static connect(url: string | URL, options?: WebTransportOptions): Promise<RawWebTransport>;
20
- ready(): Promise<void>;
21
- close(closeInfo?: WebTransportCloseInfoLike): void;
22
- call(request: RpcRequestMessage, options?: ResolvedCallOptions): Promise<RpcResponseMessage>;
23
- streamingCall(
24
- request: RpcRequestMessage,
25
- requestBody: AsyncIterable<Uint8Array>,
26
- options?: ResolvedCallOptions,
27
- ): Promise<AsyncIterableIterator<RpcStreamFrameMessage>>;
28
- openBidirectionalStream(): Promise<WebTransportBidirectionalStreamLike>;
29
- }
package/src/advanced.js DELETED
@@ -1 +0,0 @@
1
- export { RawWebTransport } from "./webtransport.js";
@@ -1,49 +0,0 @@
1
- import { ChannelStateMachine, stripChannelOptions, waitForInitialReady } from "./channel.js";
2
- import { unavailable } from "./status.js";
3
- import {
4
- RawWebTransport,
5
- createWebTransportSession,
6
- waitForWebTransportReady,
7
- } from "./webtransport.js";
8
-
9
- /** Browser channel with background session reconnection. */
10
- export class Channel extends ChannelStateMachine {
11
- constructor(url, options = {}) {
12
- const retainedUrl = url instanceof URL ? url.href : url;
13
- const retainedOptions = Object.freeze({ ...options });
14
- const transportOptions = stripChannelOptions(retainedOptions);
15
- super(
16
- (signal) => connectWebTransport(retainedUrl, transportOptions, signal),
17
- retainedOptions,
18
- (transport) => transport.session.closed,
19
- );
20
- this.url = retainedUrl;
21
- this.options = retainedOptions;
22
- }
23
-
24
- /** Creates a channel and waits for its first ready generation. */
25
- static async connect(url, options = {}) {
26
- const channel = new Channel(url, options);
27
- await waitForInitialReady(channel, options);
28
- return channel;
29
- }
30
- }
31
-
32
- async function connectWebTransport(url, options, signal) {
33
- const session = createWebTransportSession(url, options);
34
- const onAbort = () => session.close?.();
35
- signal.addEventListener("abort", onAbort, { once: true });
36
-
37
- try {
38
- await waitForWebTransportReady(session);
39
- if (signal.aborted) {
40
- throw unavailable("channel is closed");
41
- }
42
- return new RawWebTransport(session, options);
43
- } catch (error) {
44
- session.close?.();
45
- throw error;
46
- } finally {
47
- signal.removeEventListener("abort", onAbort);
48
- }
49
- }
package/src/connect.js DELETED
@@ -1,6 +0,0 @@
1
- import { Channel } from "./browser-channel.js";
2
-
3
- /** Opens a TrevRPC client for the current JavaScript runtime. */
4
- export async function connect(url, options = {}) {
5
- return await Channel.connect(url, options);
6
- }
@@ -1,6 +0,0 @@
1
- import { Channel } from "./node.js";
2
-
3
- /** Opens a TrevRPC client backed by the native Node runtime. */
4
- export async function connect(urlOrOptions, options = {}) {
5
- return await Channel.connect(urlOrOptions, options);
6
- }
@@ -1,10 +0,0 @@
1
- export * from "./index.js";
2
- export { Channel } from "./node.js";
3
-
4
- import type { Channel, NodeChannelOptions, NodeChannelTarget } from "./node.js";
5
-
6
- /** Opens a native Node channel and waits for its first ready generation. */
7
- export function connect(
8
- target: string | URL | NodeChannelTarget,
9
- options?: NodeChannelOptions,
10
- ): Promise<Channel>;
package/src/index.node.js DELETED
@@ -1,3 +0,0 @@
1
- export * from "./runtime.js";
2
- export { connect } from "./connect.node.js";
3
- export { Channel } from "./node.js";