@react-native-harness/bridge 1.3.0 → 1.4.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 (69) hide show
  1. package/dist/__tests__/client.test.d.ts +2 -0
  2. package/dist/__tests__/client.test.d.ts.map +1 -0
  3. package/dist/__tests__/client.test.js +81 -0
  4. package/dist/__tests__/heartbeat.test.d.ts +2 -0
  5. package/dist/__tests__/heartbeat.test.d.ts.map +1 -0
  6. package/dist/__tests__/heartbeat.test.js +37 -0
  7. package/dist/__tests__/protocol.test.d.ts +2 -0
  8. package/dist/__tests__/protocol.test.d.ts.map +1 -0
  9. package/dist/__tests__/protocol.test.js +37 -0
  10. package/dist/__tests__/rpc-peer.test.d.ts +2 -0
  11. package/dist/__tests__/rpc-peer.test.d.ts.map +1 -0
  12. package/dist/__tests__/rpc-peer.test.js +144 -0
  13. package/dist/client.d.ts +8 -14
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +96 -42
  16. package/dist/errors.d.ts +5 -0
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/errors.js +23 -0
  19. package/dist/heartbeat.d.ts +13 -0
  20. package/dist/heartbeat.d.ts.map +1 -0
  21. package/dist/heartbeat.js +49 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -0
  25. package/dist/protocol.d.ts +51 -0
  26. package/dist/protocol.d.ts.map +1 -0
  27. package/dist/protocol.js +132 -0
  28. package/dist/rpc-peer.d.ts +28 -0
  29. package/dist/rpc-peer.d.ts.map +1 -0
  30. package/dist/rpc-peer.js +149 -0
  31. package/dist/server.d.ts +2 -20
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +123 -71
  34. package/dist/shared/test-collector.d.ts +2 -0
  35. package/dist/shared/test-collector.d.ts.map +1 -1
  36. package/dist/shared/test-runner.d.ts +23 -0
  37. package/dist/shared/test-runner.d.ts.map +1 -1
  38. package/dist/shared.d.ts +2 -2
  39. package/dist/shared.d.ts.map +1 -1
  40. package/dist/transport.d.ts +22 -0
  41. package/dist/transport.d.ts.map +1 -0
  42. package/dist/transport.js +22 -0
  43. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  44. package/dist/websocket-client-transport.d.ts +3 -0
  45. package/dist/websocket-client-transport.d.ts.map +1 -0
  46. package/dist/websocket-client-transport.js +45 -0
  47. package/dist/websocket-server-transport.d.ts +4 -0
  48. package/dist/websocket-server-transport.d.ts.map +1 -0
  49. package/dist/websocket-server-transport.js +43 -0
  50. package/eslint.config.mjs +5 -1
  51. package/package.json +6 -5
  52. package/src/__tests__/client.test.ts +99 -0
  53. package/src/__tests__/heartbeat.test.ts +47 -0
  54. package/src/__tests__/protocol.test.ts +51 -0
  55. package/src/__tests__/rpc-peer.test.ts +206 -0
  56. package/src/client.ts +147 -57
  57. package/src/errors.ts +32 -0
  58. package/src/heartbeat.ts +67 -0
  59. package/src/index.ts +1 -0
  60. package/src/protocol.ts +233 -0
  61. package/src/rpc-peer.ts +227 -0
  62. package/src/server.ts +181 -114
  63. package/src/shared/test-collector.ts +3 -0
  64. package/src/shared/test-runner.ts +24 -0
  65. package/src/shared.ts +2 -2
  66. package/src/transport.ts +47 -0
  67. package/src/websocket-client-transport.ts +85 -0
  68. package/src/websocket-server-transport.ts +54 -0
  69. package/vite.config.ts +18 -0
package/dist/server.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { WebSocketServer } from 'ws';
2
- import { createBirpc } from 'birpc';
3
2
  import { EventEmitter } from 'node:events';
4
3
  import fs from 'node:fs/promises';
5
4
  import os from 'node:os';
@@ -7,14 +6,16 @@ import path from 'node:path';
7
6
  import { randomUUID } from 'node:crypto';
8
7
  import { logger } from '@react-native-harness/tools';
9
8
  import { BinaryStore, parseBinaryFrame } from './binary-transfer.js';
10
- import { deserialize, serialize } from './serializer.js';
11
- import { DeviceNotRespondingError } from './errors.js';
9
+ import { AppBridgeDisconnectedError, DeviceNotRespondingError, } from './errors.js';
10
+ import { createHeartbeat } from './heartbeat.js';
12
11
  import { matchImageSnapshot } from './image-snapshot.js';
13
- export { DeviceNotRespondingError } from './errors.js';
12
+ import { serializeBridgeMessage } from './protocol.js';
13
+ import { createRpcPeer } from './rpc-peer.js';
14
+ import { createRpcTransport, } from './transport.js';
15
+ import { createNodeWebSocketTransport } from './websocket-server-transport.js';
16
+ export { AppBridgeDisconnectedError, DeviceNotRespondingError, } from './errors.js';
14
17
  const bridgeLogger = logger.child('bridge');
15
- // ---------------------------------------------------------------------------
16
- // Helpers
17
- // ---------------------------------------------------------------------------
18
+ const noop = () => undefined;
18
19
  const createWss = (transport) => {
19
20
  if ('port' in transport) {
20
21
  return new Promise((resolve) => {
@@ -35,91 +36,142 @@ const receiveScreenshot = async (binaryStore, reference) => {
35
36
  await fs.writeFile(file, data);
36
37
  return { path: file };
37
38
  };
38
- // ---------------------------------------------------------------------------
39
- // Factory
40
- // ---------------------------------------------------------------------------
41
39
  export const createHarnessBridge = async (options) => {
42
- const { timeout, context, ...transport } = options;
43
- const wss = await createWss(transport);
40
+ const { timeout, context, ...transportOptions } = options;
41
+ const wss = await createWss(transportOptions);
44
42
  bridgeLogger.debug('bridge server ready');
45
43
  const emitter = new EventEmitter();
46
44
  let currentConnection = null;
45
+ let activeSession = null;
47
46
  const connectionWaiters = [];
48
47
  wss.on('connection', (ws) => {
48
+ if (activeSession) {
49
+ bridgeLogger.info('replacing existing app connection with a newer client');
50
+ activeSession.disconnect(new AppBridgeDisconnectedError('app-replaced'));
51
+ }
49
52
  bridgeLogger.debug('app connected');
53
+ const transport = createNodeWebSocketTransport(ws);
50
54
  const binaryStore = new BinaryStore();
51
55
  let readyConnection = null;
52
56
  let disconnected = false;
53
- const serverFunctions = {
54
- reportReady: (device) => {
55
- const conn = {
56
- device,
57
- runTests: (testPath, opts) => rpc.runTests(testPath, opts),
58
- };
59
- readyConnection = conn;
60
- currentConnection = conn;
61
- bridgeLogger.debug('app ready: platform=%s model=%s', device.platform, device.model);
62
- emitter.emit('connected', conn);
63
- for (const { resolve } of connectionWaiters.splice(0))
64
- resolve(conn);
57
+ let offMessage = noop;
58
+ let offClose = noop;
59
+ let offError = noop;
60
+ const closeTransport = () => {
61
+ if (transport.state === 'closing' || transport.state === 'closed') {
62
+ return;
63
+ }
64
+ transport.close(1012);
65
+ };
66
+ const rpc = createRpcPeer({
67
+ localMethods: {
68
+ 'device.screenshot.receive': (ref) => receiveScreenshot(binaryStore, ref),
69
+ 'test.matchImageSnapshot': (screenshot, testPath, opts) => matchImageSnapshot(screenshot, testPath, opts, context.platform.name),
65
70
  },
66
- emitEvent: (_, data) => {
67
- emitter.emit('event', data);
71
+ transport: createRpcTransport(transport),
72
+ onEvent: (event) => {
73
+ emitter.emit('event', event);
68
74
  },
69
- 'device.screenshot.receive': (ref) => receiveScreenshot(binaryStore, ref),
70
- 'test.matchImageSnapshot': (screenshot, testPath, opts) => matchImageSnapshot(screenshot, testPath, opts, context.platform.name),
71
- };
72
- const rpc = createBirpc(serverFunctions, {
73
- post: (data) => ws.send(data),
74
- on: (handler) => {
75
- ws.on('message', (msg, isBinary) => {
76
- if (isBinary) {
77
- try {
78
- const messageBuffer = Array.isArray(msg)
79
- ? Buffer.concat(msg)
80
- : Buffer.isBuffer(msg)
81
- ? msg
82
- : Buffer.from(msg);
83
- const { transferId, data } = parseBinaryFrame(new Uint8Array(messageBuffer));
84
- binaryStore.add(transferId, data);
85
- }
86
- catch (err) {
87
- bridgeLogger.warn('failed to parse binary frame: %s', err);
88
- }
89
- }
90
- else {
91
- handler(msg.toString());
92
- }
93
- });
75
+ callTimeoutMs: (method) => method === 'runTests' ? undefined : timeout,
76
+ createTimeoutError: (functionName, args) => {
77
+ return new DeviceNotRespondingError(functionName, args);
94
78
  },
95
- serialize,
96
- deserialize,
97
- timeout,
98
- onFunctionError: (error, functionName, args) => {
99
- bridgeLogger.error('rpc function failed: %s args=%o', functionName, args);
100
- throw error;
79
+ });
80
+ const heartbeat = createHeartbeat({
81
+ sendPing: (id) => {
82
+ transport.send(serializeBridgeMessage({ type: 'ping', id }));
101
83
  },
102
- onTimeoutError: (fn, args) => {
103
- throw new DeviceNotRespondingError(fn, args);
84
+ onTimeout: () => {
85
+ bridgeLogger.warn('app heartbeat timed out');
86
+ disconnect(new AppBridgeDisconnectedError('heartbeat-timeout'));
104
87
  },
105
88
  });
106
89
  const disconnect = (reason) => {
107
- if (disconnected)
90
+ if (disconnected) {
108
91
  return;
92
+ }
109
93
  disconnected = true;
94
+ offMessage();
95
+ offClose();
96
+ offError();
110
97
  bridgeLogger.debug('app disconnected');
98
+ heartbeat.dispose();
111
99
  binaryStore.dispose();
100
+ if (activeSession?.transport === transport) {
101
+ activeSession = null;
102
+ }
112
103
  if (currentConnection === readyConnection) {
113
104
  currentConnection = null;
114
105
  }
115
- rpc.$close(reason ?? new Error('App bridge disconnected'));
116
- emitter.emit('disconnected');
106
+ rpc.close(reason ?? new AppBridgeDisconnectedError('app-disconnected'));
107
+ closeTransport();
108
+ if (readyConnection) {
109
+ emitter.emit('disconnected');
110
+ }
117
111
  };
118
- ws.on('close', () => {
112
+ activeSession = { disconnect, transport };
113
+ const handleControlMessage = async (message) => {
114
+ const controlMessage = await rpc.handleMessage(message);
115
+ if (!controlMessage) {
116
+ return;
117
+ }
118
+ switch (controlMessage.type) {
119
+ case 'ready': {
120
+ if (readyConnection) {
121
+ return;
122
+ }
123
+ const conn = {
124
+ device: controlMessage.device,
125
+ runTests: (testPath, opts) => rpc.invoke('runTests', testPath, opts),
126
+ resetEnvironment: () => rpc.invoke('resetEnvironment'),
127
+ };
128
+ readyConnection = conn;
129
+ currentConnection = conn;
130
+ bridgeLogger.debug('app ready: platform=%s model=%s', controlMessage.device.platform, controlMessage.device.model);
131
+ emitter.emit('connected', conn);
132
+ for (const { resolve } of connectionWaiters.splice(0)) {
133
+ resolve(conn);
134
+ }
135
+ return;
136
+ }
137
+ case 'ping': {
138
+ transport.send(serializeBridgeMessage({ type: 'pong', id: controlMessage.id }));
139
+ return;
140
+ }
141
+ case 'pong': {
142
+ heartbeat.notifyPong(controlMessage.id);
143
+ return;
144
+ }
145
+ }
146
+ };
147
+ const handleBinaryMessage = (message) => {
148
+ try {
149
+ const { transferId, data } = parseBinaryFrame(message);
150
+ binaryStore.add(transferId, data);
151
+ }
152
+ catch (error) {
153
+ bridgeLogger.warn('failed to parse binary frame: %s', error);
154
+ }
155
+ };
156
+ offMessage = transport.onMessage((message) => {
157
+ if (typeof message !== 'string') {
158
+ handleBinaryMessage(message);
159
+ return;
160
+ }
161
+ void handleControlMessage(message).catch((error) => {
162
+ bridgeLogger.warn('failed to handle bridge message: %s', error);
163
+ disconnect(error instanceof Error
164
+ ? error
165
+ : new Error('Received invalid app bridge message'));
166
+ });
167
+ });
168
+ offClose = transport.onClose(() => {
119
169
  disconnect();
120
170
  });
121
- ws.on('error', (error) => {
122
- disconnect(error instanceof Error ? error : new Error('App bridge socket error'));
171
+ offError = transport.onError((error) => {
172
+ disconnect(error instanceof Error
173
+ ? error
174
+ : new AppBridgeDisconnectedError('socket-error'));
123
175
  });
124
176
  });
125
177
  return {
@@ -133,9 +185,6 @@ export const createHarnessBridge = async (options) => {
133
185
  if (signal?.aborted) {
134
186
  return Promise.reject(signal.reason ?? new DOMException('Aborted', 'AbortError'));
135
187
  }
136
- // If the app already connected before this call (e.g. fast simulator
137
- // startup between startAttempt and waitForReady), return it immediately
138
- // rather than waiting for a second reportReady that will never come.
139
188
  if (currentConnection) {
140
189
  return Promise.resolve(currentConnection);
141
190
  }
@@ -144,8 +193,9 @@ export const createHarnessBridge = async (options) => {
144
193
  connectionWaiters.push(entry);
145
194
  signal?.addEventListener('abort', () => {
146
195
  const idx = connectionWaiters.indexOf(entry);
147
- if (idx !== -1)
196
+ if (idx !== -1) {
148
197
  connectionWaiters.splice(idx, 1);
198
+ }
149
199
  reject(signal.reason ?? new DOMException('Aborted', 'AbortError'));
150
200
  }, { once: true });
151
201
  });
@@ -155,10 +205,12 @@ export const createHarnessBridge = async (options) => {
155
205
  dispose: () => {
156
206
  bridgeLogger.debug('disposing bridge');
157
207
  for (const { reject } of connectionWaiters.splice(0)) {
158
- reject(new Error('Bridge disposed'));
208
+ reject(new AppBridgeDisconnectedError('bridge-disposed'));
159
209
  }
160
- for (const client of wss.clients)
210
+ activeSession?.disconnect(new AppBridgeDisconnectedError('bridge-disposed'));
211
+ for (const client of wss.clients) {
161
212
  client.terminate();
213
+ }
162
214
  wss.close();
163
215
  emitter.removeAllListeners();
164
216
  },
@@ -1,11 +1,13 @@
1
1
  import type { HarnessTestContext } from './test-context.js';
2
2
  export type TestStatus = 'active' | 'skipped' | 'todo';
3
+ export type TestDeclarationMode = 'only' | 'skip' | 'todo';
3
4
  export type TestFn = (context: HarnessTestContext) => void | Promise<void>;
4
5
  export type SuiteHookFn = () => void | Promise<void>;
5
6
  export type TestCase = {
6
7
  name: string;
7
8
  fn: TestFn;
8
9
  status: TestStatus;
10
+ declarationMode?: TestDeclarationMode;
9
11
  };
10
12
  export type TestSuite = {
11
13
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"test-collector.d.ts","sourceRoot":"","sources":["../../src/shared/test-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,uFAAuF;IACvF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,0BAA0B,GAC1B,2BAA2B,CAAC"}
1
+ {"version":3,"file":"test-collector.d.ts","sourceRoot":"","sources":["../../src/shared/test-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,uFAAuF;IACvF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,0BAA0B,GAC1B,2BAA2B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { TestDeclarationMode } from './test-collector.js';
1
2
  export type CodeFrame = {
2
3
  content: string;
3
4
  location?: {
@@ -11,6 +12,16 @@ export type SerializedError = {
11
12
  name: string;
12
13
  message: string;
13
14
  codeFrame?: CodeFrame;
15
+ diagnostics?: {
16
+ pendingPromises?: {
17
+ total: number;
18
+ items: Array<{
19
+ id: number;
20
+ createdAt: number;
21
+ stack?: string;
22
+ }>;
23
+ };
24
+ };
14
25
  };
15
26
  export type TestRunnerFileStartedEvent = {
16
27
  type: 'file-started';
@@ -31,12 +42,20 @@ export type TestRunnerTestStartedEvent = {
31
42
  name: string;
32
43
  suite: string;
33
44
  file: string;
45
+ ancestorTitles: string[];
46
+ fullName: string;
47
+ startedAt: number;
48
+ declarationMode?: TestDeclarationMode;
34
49
  };
35
50
  export type TestRunnerTestFinishedEvent = {
36
51
  type: 'test-finished';
37
52
  name: string;
38
53
  suite: string;
39
54
  file: string;
55
+ ancestorTitles: string[];
56
+ fullName: string;
57
+ startedAt: number;
58
+ declarationMode?: TestDeclarationMode;
40
59
  duration: number;
41
60
  error?: SerializedError;
42
61
  status: TestResultStatus;
@@ -55,6 +74,10 @@ export type TestResult = {
55
74
  status: TestResultStatus;
56
75
  error?: SerializedError;
57
76
  duration: number;
77
+ ancestorTitles?: string[];
78
+ fullName?: string;
79
+ startedAt?: number;
80
+ declarationMode?: TestDeclarationMode;
58
81
  };
59
82
  export type TestSuiteResult = {
60
83
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/shared/test-runner.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,2BAA2B,GAC3B,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,4BAA4B,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/shared/test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,eAAe,CAAC,EAAE;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,KAAK,CAAC;gBACX,EAAE,EAAE,MAAM,CAAC;gBACX,SAAS,EAAE,MAAM,CAAC;gBAClB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,2BAA2B,GAC3B,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,4BAA4B,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC"}
package/dist/shared.d.ts CHANGED
@@ -87,10 +87,12 @@ export type TestExecutionOptions = {
87
87
  testNamePattern?: string;
88
88
  setupFiles?: string[];
89
89
  setupFilesAfterEnv?: string[];
90
+ testTimeout?: number;
90
91
  runner: string;
91
92
  };
92
93
  export type BridgeClientFunctions = {
93
94
  runTests: (path: string, options: TestExecutionOptions) => Promise<TestSuiteResult>;
95
+ resetEnvironment: () => Promise<void>;
94
96
  };
95
97
  export type BinaryDataReference = {
96
98
  type: 'binary';
@@ -100,8 +102,6 @@ export type BinaryDataReference = {
100
102
  };
101
103
  export type ScreenshotData = BinaryDataReference;
102
104
  export type BridgeServerFunctions = {
103
- reportReady: (device: DeviceDescriptor) => void;
104
- emitEvent: (event: BridgeEvents['type'], data: BridgeEvents) => void;
105
105
  'device.screenshot.receive': (reference: BinaryDataReference, metadata: {
106
106
  width: number;
107
107
  height: number;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,gBAAgB,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IACzC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAAC;AAEF,YAAY,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,4BAA4B,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,aAAa,CAAC;AAElB,MAAM,MAAM,eAAe,GAAG;KAC3B,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAC3B,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,KACtC,IAAI;CACV,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,eAAe,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACrE,2BAA2B,EAAE,CAC3B,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACxC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,yBAAyB,EAAE,CACzB,UAAU,EAAE,aAAa,EACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export type BridgeTransportState = 'connecting' | 'open' | 'closing' | 'closed';
2
+ export type BridgeTransportMessage = string | Uint8Array;
3
+ export type BridgeTransportCloseEvent = {
4
+ code: number;
5
+ reason: string;
6
+ };
7
+ export type BridgeTransport = {
8
+ readonly state: BridgeTransportState;
9
+ send: (message: BridgeTransportMessage) => void;
10
+ close: (code?: number, reason?: string) => void;
11
+ onOpen: (listener: () => void) => () => void;
12
+ onMessage: (listener: (message: BridgeTransportMessage) => void) => () => void;
13
+ onClose: (listener: (event: BridgeTransportCloseEvent) => void) => () => void;
14
+ onError: (listener: (error: Error) => void) => () => void;
15
+ };
16
+ export type RpcTransport = {
17
+ readonly state: BridgeTransportState;
18
+ send: (message: string) => void;
19
+ };
20
+ export declare const toTransportState: (readyState: number) => BridgeTransportState;
21
+ export declare const createRpcTransport: (transport: BridgeTransport) => RpcTransport;
22
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzD,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC/E,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC9E,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,oBAWrD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,WAAW,eAAe,KAAG,YAS/D,CAAC"}
@@ -0,0 +1,22 @@
1
+ export const toTransportState = (readyState) => {
2
+ switch (readyState) {
3
+ case 0:
4
+ return 'connecting';
5
+ case 1:
6
+ return 'open';
7
+ case 2:
8
+ return 'closing';
9
+ default:
10
+ return 'closed';
11
+ }
12
+ };
13
+ export const createRpcTransport = (transport) => {
14
+ return {
15
+ get state() {
16
+ return transport.state;
17
+ },
18
+ send: (message) => {
19
+ transport.send(message);
20
+ },
21
+ };
22
+ };