starpc 0.32.14 → 0.32.15

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.
@@ -0,0 +1,42 @@
1
+ import { describe, it, beforeEach } from 'vitest';
2
+ import { pipe } from 'it-pipe';
3
+ import { createHandler, createMux, Server, Client, StreamConn, ChannelStream, combineUint8ArrayListTransform, } from '../srpc/index.js';
4
+ import { EchoerDefinition, EchoerServer, runClientTest } from '../echo/index.js';
5
+ import { runAbortControllerTest, runRpcStreamTest, } from '../echo/client-test.js';
6
+ describe('srpc server', () => {
7
+ let client;
8
+ beforeEach(async () => {
9
+ const mux = createMux();
10
+ const server = new Server(mux.lookupMethodFunc);
11
+ const echoer = new EchoerServer(server);
12
+ mux.register(createHandler(EchoerDefinition, echoer));
13
+ // StreamConn is unnecessary since ChannelStream has packet framing.
14
+ // Use it here to include yamux in this e2e test.
15
+ const clientConn = new StreamConn();
16
+ const serverConn = new StreamConn(server, { direction: 'inbound' });
17
+ // pipe clientConn -> messageStream -> serverConn -> messageStream -> clientConn
18
+ const { port1: clientPort, port2: serverPort } = new MessageChannel();
19
+ const opts = {}; // { idleTimeoutMs: 250, keepAliveMs: 100 }
20
+ const clientChannelStream = new ChannelStream('client', clientPort, opts);
21
+ const serverChannelStream = new ChannelStream('server', serverPort, opts);
22
+ // Pipe the client traffic via the client end of the MessageChannel.
23
+ pipe(clientChannelStream, clientConn, combineUint8ArrayListTransform(), clientChannelStream)
24
+ .catch((err) => clientConn.close(err))
25
+ .then(() => clientConn.close());
26
+ // Pipe the server traffic via the server end of the MessageChannel.
27
+ pipe(serverChannelStream, serverConn, combineUint8ArrayListTransform(), serverChannelStream)
28
+ .catch((err) => serverConn.close(err))
29
+ .then(() => serverConn.close());
30
+ // Build the client
31
+ client = new Client(clientConn.buildOpenStreamFunc());
32
+ });
33
+ it('should pass client tests', async () => {
34
+ await runClientTest(client);
35
+ });
36
+ it('should pass abort controller tests', async () => {
37
+ await runAbortControllerTest(client);
38
+ });
39
+ it('should pass rpc stream tests', async () => {
40
+ await runRpcStreamTest(client);
41
+ });
42
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starpc",
3
- "version": "0.32.14",
3
+ "version": "0.32.15",
4
4
  "description": "Streaming protobuf RPC service protocol over any two-way channel.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -30,7 +30,7 @@
30
30
  "!**/*.tsbuildinfo",
31
31
  "Makefile",
32
32
  "dist",
33
- "e2e",
33
+ "mock",
34
34
  "echo",
35
35
  "go.mod",
36
36
  "go.sum",
@@ -57,7 +57,7 @@
57
57
  "test": "npm run test:js && npm run test:go",
58
58
  "test:go": "make test",
59
59
  "build:e2e": "npm run build && cd e2e && esbuild e2e.ts --sourcemap --outfile=e2e.cjs --bundle --platform=node",
60
- "test:js": "npm run build:e2e && cd e2e && node ./e2e.cjs",
60
+ "test:js": "vitest",
61
61
  "debug:js": "npm run build:e2e && cd e2e && node --inspect --inspect-brk ./e2e.cjs",
62
62
  "test:integration": "make integration",
63
63
  "integration": "npm run test:integration",
@@ -85,7 +85,7 @@
85
85
  "@typescript-eslint/eslint-plugin": "^7.14.1",
86
86
  "@typescript-eslint/parser": "^7.14.1",
87
87
  "depcheck": "^1.4.6",
88
- "esbuild": "^0.21.3",
88
+ "esbuild": "^0.22.0",
89
89
  "eslint": "^9.1.1",
90
90
  "eslint-config-prettier": "^9.1.0",
91
91
  "lint-staged": "^15.2.2",
@@ -93,11 +93,12 @@
93
93
  "prettier": "^3.2.4",
94
94
  "rimraf": "^5.0.7",
95
95
  "tsx": "^4.15.7",
96
- "typescript": "^5.5.2"
96
+ "typescript": "^5.5.2",
97
+ "vitest": "^1.6.0"
97
98
  },
98
99
  "dependencies": {
99
100
  "@aptre/it-ws": "^1.0.1",
100
- "@aptre/protobuf-es-lite": "^0.4.5",
101
+ "@aptre/protobuf-es-lite": "^0.4.6",
101
102
  "@chainsafe/libp2p-yamux": "^6.0.2",
102
103
  "@libp2p/interface": "^1.3.1",
103
104
  "@libp2p/logger": "^4.0.12",
@@ -111,6 +112,6 @@
111
112
  "ws": "^8.17.0"
112
113
  },
113
114
  "resolutions": {
114
- "@aptre/protobuf-es-lite": "0.4.5"
115
+ "@aptre/protobuf-es-lite": "0.4.6"
115
116
  }
116
117
  }
@@ -0,0 +1,74 @@
1
+ import { describe, it, beforeEach } from 'vitest'
2
+ import { pipe } from 'it-pipe'
3
+ import {
4
+ createHandler,
5
+ createMux,
6
+ Server,
7
+ Client,
8
+ StreamConn,
9
+ ChannelStream,
10
+ combineUint8ArrayListTransform,
11
+ ChannelStreamOpts,
12
+ } from '../srpc/index.js'
13
+ import { EchoerDefinition, EchoerServer, runClientTest } from '../echo/index.js'
14
+ import {
15
+ runAbortControllerTest,
16
+ runRpcStreamTest,
17
+ } from '../echo/client-test.js'
18
+
19
+ describe('srpc server', () => {
20
+ let client: Client
21
+
22
+ beforeEach(async () => {
23
+ const mux = createMux()
24
+ const server = new Server(mux.lookupMethodFunc)
25
+ const echoer = new EchoerServer(server)
26
+ mux.register(createHandler(EchoerDefinition, echoer))
27
+
28
+ // StreamConn is unnecessary since ChannelStream has packet framing.
29
+ // Use it here to include yamux in this e2e test.
30
+ const clientConn = new StreamConn()
31
+ const serverConn = new StreamConn(server, { direction: 'inbound' })
32
+
33
+ // pipe clientConn -> messageStream -> serverConn -> messageStream -> clientConn
34
+ const { port1: clientPort, port2: serverPort } = new MessageChannel()
35
+ const opts: ChannelStreamOpts = {} // { idleTimeoutMs: 250, keepAliveMs: 100 }
36
+ const clientChannelStream = new ChannelStream('client', clientPort, opts)
37
+ const serverChannelStream = new ChannelStream('server', serverPort, opts)
38
+
39
+ // Pipe the client traffic via the client end of the MessageChannel.
40
+ pipe(
41
+ clientChannelStream,
42
+ clientConn,
43
+ combineUint8ArrayListTransform(),
44
+ clientChannelStream,
45
+ )
46
+ .catch((err: Error) => clientConn.close(err))
47
+ .then(() => clientConn.close())
48
+
49
+ // Pipe the server traffic via the server end of the MessageChannel.
50
+ pipe(
51
+ serverChannelStream,
52
+ serverConn,
53
+ combineUint8ArrayListTransform(),
54
+ serverChannelStream,
55
+ )
56
+ .catch((err: Error) => serverConn.close(err))
57
+ .then(() => serverConn.close())
58
+
59
+ // Build the client
60
+ client = new Client(clientConn.buildOpenStreamFunc())
61
+ })
62
+
63
+ it('should pass client tests', async () => {
64
+ await runClientTest(client)
65
+ })
66
+
67
+ it('should pass abort controller tests', async () => {
68
+ await runAbortControllerTest(client)
69
+ })
70
+
71
+ it('should pass rpc stream tests', async () => {
72
+ await runRpcStreamTest(client)
73
+ })
74
+ })
@@ -1,4 +1,4 @@
1
- package e2e
1
+ package srpc_test
2
2
 
3
3
  import (
4
4
  "context"
@@ -7,8 +7,8 @@ import (
7
7
  "testing"
8
8
  "time"
9
9
 
10
- e2e_mock "github.com/aperturerobotics/starpc/e2e/mock"
11
10
  "github.com/aperturerobotics/starpc/echo"
11
+ e2e_mock "github.com/aperturerobotics/starpc/mock"
12
12
  "github.com/aperturerobotics/starpc/rpcstream"
13
13
  "github.com/aperturerobotics/starpc/srpc"
14
14
  "github.com/pkg/errors"
package/dist/e2e/e2e.js DELETED
@@ -1,49 +0,0 @@
1
- import { pipe } from 'it-pipe';
2
- import { createHandler, createMux, Server, Client, StreamConn, ChannelStream, combineUint8ArrayListTransform, } from '../srpc/index.js';
3
- import { EchoerDefinition, EchoerServer, runClientTest } from '../echo/index.js';
4
- import { runAbortControllerTest, runRpcStreamTest, } from '../echo/client-test.js';
5
- async function runRPC() {
6
- const mux = createMux();
7
- const server = new Server(mux.lookupMethodFunc);
8
- const echoer = new EchoerServer(server);
9
- mux.register(createHandler(EchoerDefinition, echoer));
10
- // StreamConn is unnecessary since ChannelStream has packet framing.
11
- // Use it here to include yamux in this e2e test.
12
- const clientConn = new StreamConn();
13
- const serverConn = new StreamConn(server, { direction: 'inbound' });
14
- // pipe clientConn -> messageStream -> serverConn -> messageStream -> clientConn
15
- const { port1: clientPort, port2: serverPort } = new MessageChannel();
16
- const opts = {}; // { idleTimeoutMs: 250, keepAliveMs: 100 }
17
- const clientChannelStream = new ChannelStream('client', clientPort, opts);
18
- const serverChannelStream = new ChannelStream('server', serverPort, opts);
19
- // Pipe the client traffic via the client end of the MessageChannel.
20
- pipe(clientChannelStream, clientConn, combineUint8ArrayListTransform(), clientChannelStream)
21
- .catch((err) => clientConn.close(err))
22
- .then(() => clientConn.close());
23
- // Pipe the server traffic via the server end of the MessageChannel.
24
- pipe(serverChannelStream, serverConn, combineUint8ArrayListTransform(), serverChannelStream)
25
- .catch((err) => serverConn.close(err))
26
- .then(() => serverConn.close());
27
- // Build the client
28
- const client = new Client(clientConn.buildOpenStreamFunc());
29
- // Run the tests
30
- await runClientTest(client);
31
- await runAbortControllerTest(client);
32
- await runRpcStreamTest(client);
33
- // Make sure we have no uncaught promises
34
- await new Promise((resolve) => {
35
- setTimeout(resolve, 500);
36
- });
37
- // Close cleanly
38
- clientConn.close();
39
- serverConn.close();
40
- }
41
- runRPC()
42
- .then(() => {
43
- console.log('finished successfully');
44
- process.exit(0);
45
- })
46
- .catch((err) => {
47
- console.error('e2e tests failed', err);
48
- process.exit(1);
49
- });
package/e2e/README.md DELETED
@@ -1,10 +0,0 @@
1
- # E2E
2
-
3
- E2E contains tests using the client and server written in the same language.
4
-
5
- For example:
6
-
7
- - Go Client calling Go server: "go test" or "yarn test:go"
8
- - TypeScript client calling TypeScript server: "yarn test:js"
9
-
10
- For cross-language tests, i.e. Ts <-> Go, see [integration](../integration).
package/e2e/e2e.go DELETED
@@ -1 +0,0 @@
1
- package e2e
package/e2e/e2e.ts DELETED
@@ -1,81 +0,0 @@
1
- import { pipe } from 'it-pipe'
2
- import {
3
- createHandler,
4
- createMux,
5
- Server,
6
- Client,
7
- StreamConn,
8
- ChannelStream,
9
- combineUint8ArrayListTransform,
10
- ChannelStreamOpts,
11
- } from '../srpc/index.js'
12
- import { EchoerDefinition, EchoerServer, runClientTest } from '../echo/index.js'
13
- import {
14
- runAbortControllerTest,
15
- runRpcStreamTest,
16
- } from '../echo/client-test.js'
17
-
18
- async function runRPC() {
19
- const mux = createMux()
20
- const server = new Server(mux.lookupMethodFunc)
21
- const echoer = new EchoerServer(server)
22
- mux.register(createHandler(EchoerDefinition, echoer))
23
-
24
- // StreamConn is unnecessary since ChannelStream has packet framing.
25
- // Use it here to include yamux in this e2e test.
26
- const clientConn = new StreamConn()
27
- const serverConn = new StreamConn(server, { direction: 'inbound' })
28
-
29
- // pipe clientConn -> messageStream -> serverConn -> messageStream -> clientConn
30
- const { port1: clientPort, port2: serverPort } = new MessageChannel()
31
- const opts: ChannelStreamOpts = {} // { idleTimeoutMs: 250, keepAliveMs: 100 }
32
- const clientChannelStream = new ChannelStream('client', clientPort, opts)
33
- const serverChannelStream = new ChannelStream('server', serverPort, opts)
34
-
35
- // Pipe the client traffic via the client end of the MessageChannel.
36
- pipe(
37
- clientChannelStream,
38
- clientConn,
39
- combineUint8ArrayListTransform(),
40
- clientChannelStream,
41
- )
42
- .catch((err: Error) => clientConn.close(err))
43
- .then(() => clientConn.close())
44
-
45
- // Pipe the server traffic via the server end of the MessageChannel.
46
- pipe(
47
- serverChannelStream,
48
- serverConn,
49
- combineUint8ArrayListTransform(),
50
- serverChannelStream,
51
- )
52
- .catch((err: Error) => serverConn.close(err))
53
- .then(() => serverConn.close())
54
-
55
- // Build the client
56
- const client = new Client(clientConn.buildOpenStreamFunc())
57
-
58
- // Run the tests
59
- await runClientTest(client)
60
- await runAbortControllerTest(client)
61
- await runRpcStreamTest(client)
62
-
63
- // Make sure we have no uncaught promises
64
- await new Promise<void>((resolve) => {
65
- setTimeout(resolve, 500)
66
- })
67
-
68
- // Close cleanly
69
- clientConn.close()
70
- serverConn.close()
71
- }
72
-
73
- runRPC()
74
- .then(() => {
75
- console.log('finished successfully')
76
- process.exit(0)
77
- })
78
- .catch((err) => {
79
- console.error('e2e tests failed', err)
80
- process.exit(1)
81
- })
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes