@syncular/testkit 0.0.2-139 → 0.0.2-143
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/dist/disposable.d.ts +10 -0
- package/dist/disposable.d.ts.map +1 -0
- package/dist/disposable.js +28 -0
- package/dist/disposable.js.map +1 -0
- package/dist/hono-node-server.d.ts +10 -0
- package/dist/hono-node-server.d.ts.map +1 -1
- package/dist/hono-node-server.js +27 -0
- package/dist/hono-node-server.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/realtime-ws.d.ts +8 -0
- package/dist/realtime-ws.d.ts.map +1 -1
- package/dist/realtime-ws.js +11 -0
- package/dist/realtime-ws.js.map +1 -1
- package/dist/resources.d.ts +25 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +64 -0
- package/dist/resources.js.map +1 -0
- package/dist/runtime-process.d.ts +3 -0
- package/dist/runtime-process.d.ts.map +1 -1
- package/dist/runtime-process.js +7 -0
- package/dist/runtime-process.js.map +1 -1
- package/package.json +12 -12
- package/src/disposable.ts +50 -0
- package/src/hono-node-server.ts +58 -0
- package/src/index.ts +2 -0
- package/src/realtime-ws.ts +33 -0
- package/src/resources.ts +186 -0
- package/src/runtime-process.ts +26 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface AsyncDisposableResource<T> {
|
|
2
|
+
value: T;
|
|
3
|
+
dispose: () => Promise<void>;
|
|
4
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export type ResourceRunner<T, TResult> = ((value: T) => Promise<TResult>) | ((value: T) => TResult);
|
|
7
|
+
export declare function createAsyncDisposableResource<T>(value: T, dispose: () => Promise<void> | void): AsyncDisposableResource<T>;
|
|
8
|
+
export declare function withAsyncDisposableResource<T, TResult>(resource: AsyncDisposableResource<T>, run: ResourceRunner<T, TResult>): Promise<TResult>;
|
|
9
|
+
export declare function withAsyncDisposableFactory<T, TResult>(create: () => Promise<AsyncDisposableResource<T>>, run: ResourceRunner<T, TResult>): Promise<TResult>;
|
|
10
|
+
//# sourceMappingURL=disposable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable.d.ts","sourceRoot":"","sources":["../src/disposable.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,OAAO,IACjC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAChC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;AAE5B,wBAAgB,6BAA6B,CAAC,CAAC,EAC7C,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAClC,uBAAuB,CAAC,CAAC,CAAC,CAiB5B;AAED,wBAAsB,2BAA2B,CAAC,CAAC,EAAE,OAAO,EAC1D,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACpC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,OAAO,EACzD,MAAM,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EACjD,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function createAsyncDisposableResource(value, dispose) {
|
|
2
|
+
let disposed = false;
|
|
3
|
+
const disposeOnce = async () => {
|
|
4
|
+
if (disposed) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
disposed = true;
|
|
8
|
+
await dispose();
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
value,
|
|
12
|
+
dispose: disposeOnce,
|
|
13
|
+
[Symbol.asyncDispose]: disposeOnce,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export async function withAsyncDisposableResource(resource, run) {
|
|
17
|
+
try {
|
|
18
|
+
return await run(resource.value);
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
await resource.dispose();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function withAsyncDisposableFactory(create, run) {
|
|
25
|
+
const resource = await create();
|
|
26
|
+
return withAsyncDisposableResource(resource, run);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=disposable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable.js","sourceRoot":"","sources":["../src/disposable.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,6BAA6B,CAC3C,KAAQ,EACR,OAAmC,EACP;IAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE,CAAC;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,OAAO,EAAE,CAAC;IAAA,CACjB,CAAC;IAEF,OAAO;QACL,KAAK;QACL,OAAO,EAAE,WAAW;QACpB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,WAAW;KACnC,CAAC;AAAA,CACH;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAAoC,EACpC,GAA+B,EACb;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;AAAA,CACF;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAiD,EACjD,GAA+B,EACb;IAClB,MAAM,QAAQ,GAAG,MAAM,MAAM,EAAE,CAAC;IAChC,OAAO,2BAA2B,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAAA,CACnD"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { type Server as NodeServer } from 'node:http';
|
|
2
2
|
import type { Hono } from 'hono';
|
|
3
|
+
import { type AsyncDisposableResource, type ResourceRunner } from './disposable';
|
|
3
4
|
export interface NodeHonoServerOptions {
|
|
4
5
|
cors?: boolean;
|
|
5
6
|
corsAllowMethods?: string;
|
|
6
7
|
corsAllowHeaders?: string;
|
|
7
8
|
corsMaxAgeSeconds?: number;
|
|
8
9
|
}
|
|
10
|
+
export interface CreateNodeHonoServerResourceOptions extends NodeHonoServerOptions {
|
|
11
|
+
listen?: boolean;
|
|
12
|
+
host?: string;
|
|
13
|
+
port?: number;
|
|
14
|
+
}
|
|
9
15
|
export declare function createNodeHonoServer(app: Hono, options?: NodeHonoServerOptions): NodeServer;
|
|
16
|
+
export declare function closeNodeServer(server: NodeServer): Promise<void>;
|
|
17
|
+
export declare function createNodeServerResource(server: NodeServer): AsyncDisposableResource<NodeServer>;
|
|
18
|
+
export declare function createNodeHonoServerResource(app: Hono, options?: CreateNodeHonoServerResourceOptions): Promise<AsyncDisposableResource<NodeServer>>;
|
|
19
|
+
export declare function withNodeHonoServer<TResult>(app: Hono, run: ResourceRunner<NodeServer, TResult>, options?: CreateNodeHonoServerResourceOptions): Promise<TResult>;
|
|
10
20
|
//# sourceMappingURL=hono-node-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono-node-server.d.ts","sourceRoot":"","sources":["../src/hono-node-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hono-node-server.d.ts","sourceRoot":"","sources":["../src/hono-node-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mCACf,SAAQ,qBAAqB;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,IAAI,EACT,OAAO,CAAC,EAAE,qBAAqB,GAC9B,UAAU,CAwEZ;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,GACjB,uBAAuB,CAAC,UAAU,CAAC,CAErC;AAED,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,IAAI,EACT,OAAO,GAAE,mCAAwC,GAChD,OAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAU9C;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAC9C,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,EACxC,OAAO,GAAE,mCAAwC,GAChD,OAAO,CAAC,OAAO,CAAC,CAKlB"}
|
package/dist/hono-node-server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
|
+
import { createAsyncDisposableResource, withAsyncDisposableFactory, } from './disposable.js';
|
|
2
3
|
export function createNodeHonoServer(app, options) {
|
|
3
4
|
const corsEnabled = options?.cors ?? true;
|
|
4
5
|
const corsAllowMethods = options?.corsAllowMethods ?? 'GET, POST, PUT, DELETE, OPTIONS';
|
|
@@ -60,4 +61,30 @@ export function createNodeHonoServer(app, options) {
|
|
|
60
61
|
res.end(bytes);
|
|
61
62
|
});
|
|
62
63
|
}
|
|
64
|
+
export async function closeNodeServer(server) {
|
|
65
|
+
await new Promise((resolve, reject) => {
|
|
66
|
+
server.close((error) => {
|
|
67
|
+
if (error) {
|
|
68
|
+
reject(error);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
resolve();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export function createNodeServerResource(server) {
|
|
76
|
+
return createAsyncDisposableResource(server, () => closeNodeServer(server));
|
|
77
|
+
}
|
|
78
|
+
export async function createNodeHonoServerResource(app, options = {}) {
|
|
79
|
+
const server = createNodeHonoServer(app, options);
|
|
80
|
+
if (options.listen ?? true) {
|
|
81
|
+
await new Promise((resolve) => {
|
|
82
|
+
server.listen(options.port ?? 0, options.host ?? '127.0.0.1', resolve);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return createNodeServerResource(server);
|
|
86
|
+
}
|
|
87
|
+
export async function withNodeHonoServer(app, run, options = {}) {
|
|
88
|
+
return withAsyncDisposableFactory(() => createNodeHonoServerResource(app, options), run);
|
|
89
|
+
}
|
|
63
90
|
//# sourceMappingURL=hono-node-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono-node-server.js","sourceRoot":"","sources":["../src/hono-node-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6B,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hono-node-server.js","sourceRoot":"","sources":["../src/hono-node-server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export * from './assertions';
|
|
2
2
|
export * from './deterministic';
|
|
3
|
+
export * from './disposable';
|
|
3
4
|
export * from './faults';
|
|
4
5
|
export * from './fixtures';
|
|
5
6
|
export * from './hono-node-server';
|
|
6
7
|
export * from './http-fixtures';
|
|
7
8
|
export * from './project-scoped-tasks';
|
|
8
9
|
export * from './realtime-ws';
|
|
10
|
+
export * from './resources';
|
|
9
11
|
export * from './runtime-process';
|
|
10
12
|
export * from './scenario-flow';
|
|
11
13
|
export * from './sync-builders';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export * from './assertions.js';
|
|
2
2
|
export * from './deterministic.js';
|
|
3
|
+
export * from './disposable.js';
|
|
3
4
|
export * from './faults.js';
|
|
4
5
|
export * from './fixtures.js';
|
|
5
6
|
export * from './hono-node-server.js';
|
|
6
7
|
export * from './http-fixtures.js';
|
|
7
8
|
export * from './project-scoped-tasks.js';
|
|
8
9
|
export * from './realtime-ws.js';
|
|
10
|
+
export * from './resources.js';
|
|
9
11
|
export * from './runtime-process.js';
|
|
10
12
|
export * from './scenario-flow.js';
|
|
11
13
|
export * from './sync-builders.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
package/dist/realtime-ws.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type AsyncDisposableResource, type ResourceRunner } from './disposable';
|
|
1
2
|
export type RealtimeWsQueryValue = string | number | boolean | null | undefined;
|
|
2
3
|
export interface CreateRealtimeWsUrlOptions {
|
|
3
4
|
baseUrl: string;
|
|
@@ -14,6 +15,11 @@ export interface OpenRealtimeWsOptions extends CreateRealtimeWsUrlOptions {
|
|
|
14
15
|
WebSocketCtor?: WebSocketConstructor;
|
|
15
16
|
protocols?: string | string[];
|
|
16
17
|
}
|
|
18
|
+
export interface OpenRealtimeWsResourceOptions extends OpenRealtimeWsOptions {
|
|
19
|
+
waitForOpen?: boolean;
|
|
20
|
+
openTimeoutMs?: number;
|
|
21
|
+
close?: CloseWsSafeOptions;
|
|
22
|
+
}
|
|
17
23
|
export declare function createRealtimeWsUrl(options: CreateRealtimeWsUrlOptions): string;
|
|
18
24
|
export declare function openRealtimeWs(options: OpenRealtimeWsOptions): WebSocket;
|
|
19
25
|
export interface WaitForWsOpenOptions {
|
|
@@ -37,4 +43,6 @@ export interface CloseWsSafeOptions {
|
|
|
37
43
|
timeoutMs?: number;
|
|
38
44
|
}
|
|
39
45
|
export declare function closeWsSafe(ws: WebSocket, options?: CloseWsSafeOptions): Promise<void>;
|
|
46
|
+
export declare function openRealtimeWsResource(options: OpenRealtimeWsResourceOptions): Promise<AsyncDisposableResource<WebSocket>>;
|
|
47
|
+
export declare function withRealtimeWs<TResult>(options: OpenRealtimeWsResourceOptions, run: ResourceRunner<WebSocket, TResult>): Promise<TResult>;
|
|
40
48
|
//# sourceMappingURL=realtime-ws.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-ws.d.ts","sourceRoot":"","sources":["../src/realtime-ws.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"realtime-ws.d.ts","sourceRoot":"","sources":["../src/realtime-ws.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,qBAAsB,SAAQ,0BAA0B;IACvE,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AA0BD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,0BAA0B,GAClC,MAAM,CAgBR;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAOxE;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,SAAS,EACb,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;CAC9C;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,SAAS,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,YAAY,CAAC,CA6CvB;AAoBD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhC;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;CAC3D;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,SAAS,EACb,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoDlC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAsB,WAAW,CAC/B,EAAE,EAAE,SAAS,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAU7C;AAED,wBAAsB,cAAc,CAAC,OAAO,EAC1C,OAAO,EAAE,6BAA6B,EACtC,GAAG,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,GACtC,OAAO,CAAC,OAAO,CAAC,CAElB"}
|
package/dist/realtime-ws.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isRecord } from '@syncular/core';
|
|
2
|
+
import { createAsyncDisposableResource, withAsyncDisposableFactory, } from './disposable.js';
|
|
2
3
|
function appendQueryParam(url, key, value) {
|
|
3
4
|
if (value === null || value === undefined) {
|
|
4
5
|
return;
|
|
@@ -189,4 +190,14 @@ export async function closeWsSafe(ws, options = {}) {
|
|
|
189
190
|
}
|
|
190
191
|
});
|
|
191
192
|
}
|
|
193
|
+
export async function openRealtimeWsResource(options) {
|
|
194
|
+
const ws = openRealtimeWs(options);
|
|
195
|
+
if (options.waitForOpen) {
|
|
196
|
+
await waitForWsOpen(ws, { timeoutMs: options.openTimeoutMs });
|
|
197
|
+
}
|
|
198
|
+
return createAsyncDisposableResource(ws, () => closeWsSafe(ws, options.close));
|
|
199
|
+
}
|
|
200
|
+
export async function withRealtimeWs(options, run) {
|
|
201
|
+
return withAsyncDisposableFactory(() => openRealtimeWsResource(options), run);
|
|
202
|
+
}
|
|
192
203
|
//# sourceMappingURL=realtime-ws.js.map
|
package/dist/realtime-ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-ws.js","sourceRoot":"","sources":["../src/realtime-ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime-ws.js","sourceRoot":"","sources":["../src/realtime-ws.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SyncClientDb } from '@syncular/client';
|
|
2
|
+
import type { SyncCoreDb } from '@syncular/server';
|
|
3
|
+
import { type AsyncDisposableResource, type ResourceRunner } from './disposable';
|
|
4
|
+
import { type CreateEngineTestClientOptions, type CreateSyncFixtureOptions, type CreateTestClientOptions, type EngineTestClient, type ServerDialect, type SyncFixture, type TestClient, type TestClientDialect, type TestServer, type TestSqliteDbDialect } from './fixtures';
|
|
5
|
+
import { type CreateHttpClientFixtureOptions, type CreateHttpServerFixtureOptions, type HttpClientFixture, type HttpServerFixture } from './http-fixtures';
|
|
6
|
+
export declare function createTestServerResource(serverDialect: ServerDialect): Promise<AsyncDisposableResource<TestServer>>;
|
|
7
|
+
export declare function withTestServer<TResult>(serverDialect: ServerDialect, run: ResourceRunner<TestServer, TResult>): Promise<TResult>;
|
|
8
|
+
export declare function createTestSqliteServerResource(dialect: TestSqliteDbDialect): Promise<AsyncDisposableResource<TestServer>>;
|
|
9
|
+
export declare function withTestSqliteServer<TResult>(dialect: TestSqliteDbDialect, run: ResourceRunner<TestServer, TResult>): Promise<TResult>;
|
|
10
|
+
export declare function createTestClientResource(clientDialect: TestClientDialect, server: TestServer, options: CreateTestClientOptions): Promise<AsyncDisposableResource<TestClient>>;
|
|
11
|
+
export declare function withTestClient<TResult>(clientDialect: TestClientDialect, server: TestServer, options: CreateTestClientOptions, run: ResourceRunner<TestClient, TResult>): Promise<TResult>;
|
|
12
|
+
export declare function createEngineTestClientResource(server: TestServer, options: CreateEngineTestClientOptions): Promise<AsyncDisposableResource<EngineTestClient>>;
|
|
13
|
+
export declare function withEngineTestClient<TResult>(server: TestServer, options: CreateEngineTestClientOptions, run: ResourceRunner<EngineTestClient, TResult>): Promise<TResult>;
|
|
14
|
+
export declare function createSyncFixtureResource(options: CreateSyncFixtureOptions): Promise<AsyncDisposableResource<SyncFixture>>;
|
|
15
|
+
export declare function withSyncFixture<TResult>(options: CreateSyncFixtureOptions, run: ResourceRunner<SyncFixture, TResult>): Promise<TResult>;
|
|
16
|
+
export declare function createHttpServerFixtureResource<DB extends SyncCoreDb>(options: CreateHttpServerFixtureOptions<DB>): Promise<AsyncDisposableResource<HttpServerFixture<DB>>>;
|
|
17
|
+
export declare function withHttpServerFixture<DB extends SyncCoreDb, TResult>(options: CreateHttpServerFixtureOptions<DB>, run: ResourceRunner<HttpServerFixture<DB>, TResult>): Promise<TResult>;
|
|
18
|
+
export declare function createHttpClientFixtureResource<DB extends SyncClientDb>(options: CreateHttpClientFixtureOptions<DB>): Promise<AsyncDisposableResource<HttpClientFixture<DB>>>;
|
|
19
|
+
export declare function withHttpClientFixture<DB extends SyncClientDb, TResult>(options: CreateHttpClientFixtureOptions<DB>, run: ResourceRunner<HttpClientFixture<DB>, TResult>): Promise<TResult>;
|
|
20
|
+
export interface EngineSessionResourceOptions {
|
|
21
|
+
start?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function createEngineSessionResource(client: EngineTestClient, options?: EngineSessionResourceOptions): Promise<AsyncDisposableResource<EngineTestClient>>;
|
|
24
|
+
export declare function withEngineSession<TResult>(client: EngineTestClient, run: ResourceRunner<EngineTestClient, TResult>, options?: EngineSessionResourceOptions): Promise<TResult>;
|
|
25
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createAsyncDisposableResource, withAsyncDisposableFactory, } from './disposable.js';
|
|
2
|
+
import { createEngineTestClient, createSyncFixture, createTestClient, createTestServer, createTestSqliteServer, } from './fixtures.js';
|
|
3
|
+
import { createHttpClientFixture, createHttpServerFixture, } from './http-fixtures.js';
|
|
4
|
+
export async function createTestServerResource(serverDialect) {
|
|
5
|
+
const server = await createTestServer(serverDialect);
|
|
6
|
+
return createAsyncDisposableResource(server, () => server.destroy());
|
|
7
|
+
}
|
|
8
|
+
export async function withTestServer(serverDialect, run) {
|
|
9
|
+
return withAsyncDisposableFactory(() => createTestServerResource(serverDialect), run);
|
|
10
|
+
}
|
|
11
|
+
export async function createTestSqliteServerResource(dialect) {
|
|
12
|
+
const server = await createTestSqliteServer(dialect);
|
|
13
|
+
return createAsyncDisposableResource(server, () => server.destroy());
|
|
14
|
+
}
|
|
15
|
+
export async function withTestSqliteServer(dialect, run) {
|
|
16
|
+
return withAsyncDisposableFactory(() => createTestSqliteServerResource(dialect), run);
|
|
17
|
+
}
|
|
18
|
+
export async function createTestClientResource(clientDialect, server, options) {
|
|
19
|
+
const client = await createTestClient(clientDialect, server, options);
|
|
20
|
+
return createAsyncDisposableResource(client, () => client.destroy());
|
|
21
|
+
}
|
|
22
|
+
export async function withTestClient(clientDialect, server, options, run) {
|
|
23
|
+
return withAsyncDisposableFactory(() => createTestClientResource(clientDialect, server, options), run);
|
|
24
|
+
}
|
|
25
|
+
export async function createEngineTestClientResource(server, options) {
|
|
26
|
+
const client = await createEngineTestClient(server, options);
|
|
27
|
+
return createAsyncDisposableResource(client, () => client.destroy());
|
|
28
|
+
}
|
|
29
|
+
export async function withEngineTestClient(server, options, run) {
|
|
30
|
+
return withAsyncDisposableFactory(() => createEngineTestClientResource(server, options), run);
|
|
31
|
+
}
|
|
32
|
+
export async function createSyncFixtureResource(options) {
|
|
33
|
+
const fixture = await createSyncFixture(options);
|
|
34
|
+
return createAsyncDisposableResource(fixture, () => fixture.destroyAll());
|
|
35
|
+
}
|
|
36
|
+
export async function withSyncFixture(options, run) {
|
|
37
|
+
return withAsyncDisposableFactory(() => createSyncFixtureResource(options), run);
|
|
38
|
+
}
|
|
39
|
+
export async function createHttpServerFixtureResource(options) {
|
|
40
|
+
const fixture = await createHttpServerFixture(options);
|
|
41
|
+
return createAsyncDisposableResource(fixture, () => fixture.destroy());
|
|
42
|
+
}
|
|
43
|
+
export async function withHttpServerFixture(options, run) {
|
|
44
|
+
return withAsyncDisposableFactory(() => createHttpServerFixtureResource(options), run);
|
|
45
|
+
}
|
|
46
|
+
export async function createHttpClientFixtureResource(options) {
|
|
47
|
+
const fixture = await createHttpClientFixture(options);
|
|
48
|
+
return createAsyncDisposableResource(fixture, () => fixture.destroy());
|
|
49
|
+
}
|
|
50
|
+
export async function withHttpClientFixture(options, run) {
|
|
51
|
+
return withAsyncDisposableFactory(() => createHttpClientFixtureResource(options), run);
|
|
52
|
+
}
|
|
53
|
+
export async function createEngineSessionResource(client, options = {}) {
|
|
54
|
+
if (options.start ?? true) {
|
|
55
|
+
await client.startEngine();
|
|
56
|
+
}
|
|
57
|
+
return createAsyncDisposableResource(client, () => {
|
|
58
|
+
client.stopEngine();
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export async function withEngineSession(client, run, options = {}) {
|
|
62
|
+
return withAsyncDisposableFactory(() => createEngineSessionResource(client, options), run);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ChildProcess } from 'node:child_process';
|
|
2
|
+
import { type AsyncDisposableResource, type ResourceRunner } from './disposable';
|
|
2
3
|
export interface WaitForJsonPortOptions {
|
|
3
4
|
timeoutMs?: number;
|
|
4
5
|
processName?: string;
|
|
@@ -8,4 +9,6 @@ export interface StopChildProcessOptions {
|
|
|
8
9
|
gracePeriodMs?: number;
|
|
9
10
|
}
|
|
10
11
|
export declare function stopChildProcess(process: ChildProcess, options?: StopChildProcessOptions): Promise<void>;
|
|
12
|
+
export declare function createChildProcessResource(process: ChildProcess, options?: StopChildProcessOptions): AsyncDisposableResource<ChildProcess>;
|
|
13
|
+
export declare function withChildProcess<TResult>(process: ChildProcess, run: ResourceRunner<ChildProcess, TResult>, options?: StopChildProcessOptions): Promise<TResult>;
|
|
11
14
|
//# sourceMappingURL=runtime-process.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-process.d.ts","sourceRoot":"","sources":["../src/runtime-process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-process.d.ts","sourceRoot":"","sources":["../src/runtime-process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAiFjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,uBAA4B,GACpC,uBAAuB,CAAC,YAAY,CAAC,CAIvC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAC5C,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,EAC1C,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,OAAO,CAAC,CAKlB"}
|
package/dist/runtime-process.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createAsyncDisposableResource, withAsyncDisposableFactory, } from './disposable.js';
|
|
1
2
|
export async function waitForJsonPortFromStdout(process, options = {}) {
|
|
2
3
|
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
3
4
|
const processName = options.processName ?? 'Child process';
|
|
@@ -89,4 +90,10 @@ export async function stopChildProcess(process, options = {}) {
|
|
|
89
90
|
process.on('exit', onExit);
|
|
90
91
|
});
|
|
91
92
|
}
|
|
93
|
+
export function createChildProcessResource(process, options = {}) {
|
|
94
|
+
return createAsyncDisposableResource(process, () => stopChildProcess(process, options));
|
|
95
|
+
}
|
|
96
|
+
export async function withChildProcess(process, run, options = {}) {
|
|
97
|
+
return withAsyncDisposableFactory(async () => createChildProcessResource(process, options), run);
|
|
98
|
+
}
|
|
92
99
|
//# sourceMappingURL=runtime-process.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-process.js","sourceRoot":"","sources":["../src/runtime-process.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-process.js","sourceRoot":"","sources":["../src/runtime-process.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/testkit",
|
|
3
|
-
"version": "0.0.2-
|
|
3
|
+
"version": "0.0.2-143",
|
|
4
4
|
"description": "Testing fixtures and utilities for Syncular",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Benjamin Kniffler",
|
|
@@ -41,17 +41,17 @@
|
|
|
41
41
|
"release": "bunx syncular-publish"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@syncular/client": "0.0.2-
|
|
45
|
-
"@syncular/core": "0.0.2-
|
|
46
|
-
"@syncular/dialect-bun-sqlite": "0.0.2-
|
|
47
|
-
"@syncular/dialect-libsql": "0.0.2-
|
|
48
|
-
"@syncular/dialect-pglite": "0.0.2-
|
|
49
|
-
"@syncular/dialect-sqlite3": "0.0.2-
|
|
50
|
-
"@syncular/server": "0.0.2-
|
|
51
|
-
"@syncular/server-dialect-postgres": "0.0.2-
|
|
52
|
-
"@syncular/server-dialect-sqlite": "0.0.2-
|
|
53
|
-
"@syncular/server-hono": "0.0.2-
|
|
54
|
-
"@syncular/transport-http": "0.0.2-
|
|
44
|
+
"@syncular/client": "0.0.2-143",
|
|
45
|
+
"@syncular/core": "0.0.2-143",
|
|
46
|
+
"@syncular/dialect-bun-sqlite": "0.0.2-143",
|
|
47
|
+
"@syncular/dialect-libsql": "0.0.2-143",
|
|
48
|
+
"@syncular/dialect-pglite": "0.0.2-143",
|
|
49
|
+
"@syncular/dialect-sqlite3": "0.0.2-143",
|
|
50
|
+
"@syncular/server": "0.0.2-143",
|
|
51
|
+
"@syncular/server-dialect-postgres": "0.0.2-143",
|
|
52
|
+
"@syncular/server-dialect-sqlite": "0.0.2-143",
|
|
53
|
+
"@syncular/server-hono": "0.0.2-143",
|
|
54
|
+
"@syncular/transport-http": "0.0.2-143",
|
|
55
55
|
"hono": "^4.11.9"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface AsyncDisposableResource<T> {
|
|
2
|
+
value: T;
|
|
3
|
+
dispose: () => Promise<void>;
|
|
4
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export type ResourceRunner<T, TResult> =
|
|
8
|
+
| ((value: T) => Promise<TResult>)
|
|
9
|
+
| ((value: T) => TResult);
|
|
10
|
+
|
|
11
|
+
export function createAsyncDisposableResource<T>(
|
|
12
|
+
value: T,
|
|
13
|
+
dispose: () => Promise<void> | void
|
|
14
|
+
): AsyncDisposableResource<T> {
|
|
15
|
+
let disposed = false;
|
|
16
|
+
|
|
17
|
+
const disposeOnce = async () => {
|
|
18
|
+
if (disposed) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
disposed = true;
|
|
23
|
+
await dispose();
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
value,
|
|
28
|
+
dispose: disposeOnce,
|
|
29
|
+
[Symbol.asyncDispose]: disposeOnce,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export async function withAsyncDisposableResource<T, TResult>(
|
|
34
|
+
resource: AsyncDisposableResource<T>,
|
|
35
|
+
run: ResourceRunner<T, TResult>
|
|
36
|
+
): Promise<TResult> {
|
|
37
|
+
try {
|
|
38
|
+
return await run(resource.value);
|
|
39
|
+
} finally {
|
|
40
|
+
await resource.dispose();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function withAsyncDisposableFactory<T, TResult>(
|
|
45
|
+
create: () => Promise<AsyncDisposableResource<T>>,
|
|
46
|
+
run: ResourceRunner<T, TResult>
|
|
47
|
+
): Promise<TResult> {
|
|
48
|
+
const resource = await create();
|
|
49
|
+
return withAsyncDisposableResource(resource, run);
|
|
50
|
+
}
|
package/src/hono-node-server.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { createServer, type Server as NodeServer } from 'node:http';
|
|
2
2
|
import type { Hono } from 'hono';
|
|
3
|
+
import {
|
|
4
|
+
type AsyncDisposableResource,
|
|
5
|
+
createAsyncDisposableResource,
|
|
6
|
+
type ResourceRunner,
|
|
7
|
+
withAsyncDisposableFactory,
|
|
8
|
+
} from './disposable';
|
|
3
9
|
|
|
4
10
|
export interface NodeHonoServerOptions {
|
|
5
11
|
cors?: boolean;
|
|
@@ -8,6 +14,13 @@ export interface NodeHonoServerOptions {
|
|
|
8
14
|
corsMaxAgeSeconds?: number;
|
|
9
15
|
}
|
|
10
16
|
|
|
17
|
+
export interface CreateNodeHonoServerResourceOptions
|
|
18
|
+
extends NodeHonoServerOptions {
|
|
19
|
+
listen?: boolean;
|
|
20
|
+
host?: string;
|
|
21
|
+
port?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
11
24
|
export function createNodeHonoServer(
|
|
12
25
|
app: Hono,
|
|
13
26
|
options?: NodeHonoServerOptions
|
|
@@ -84,3 +97,48 @@ export function createNodeHonoServer(
|
|
|
84
97
|
res.end(bytes);
|
|
85
98
|
});
|
|
86
99
|
}
|
|
100
|
+
|
|
101
|
+
export async function closeNodeServer(server: NodeServer): Promise<void> {
|
|
102
|
+
await new Promise<void>((resolve, reject) => {
|
|
103
|
+
server.close((error) => {
|
|
104
|
+
if (error) {
|
|
105
|
+
reject(error);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
resolve();
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function createNodeServerResource(
|
|
115
|
+
server: NodeServer
|
|
116
|
+
): AsyncDisposableResource<NodeServer> {
|
|
117
|
+
return createAsyncDisposableResource(server, () => closeNodeServer(server));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export async function createNodeHonoServerResource(
|
|
121
|
+
app: Hono,
|
|
122
|
+
options: CreateNodeHonoServerResourceOptions = {}
|
|
123
|
+
): Promise<AsyncDisposableResource<NodeServer>> {
|
|
124
|
+
const server = createNodeHonoServer(app, options);
|
|
125
|
+
|
|
126
|
+
if (options.listen ?? true) {
|
|
127
|
+
await new Promise<void>((resolve) => {
|
|
128
|
+
server.listen(options.port ?? 0, options.host ?? '127.0.0.1', resolve);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return createNodeServerResource(server);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export async function withNodeHonoServer<TResult>(
|
|
136
|
+
app: Hono,
|
|
137
|
+
run: ResourceRunner<NodeServer, TResult>,
|
|
138
|
+
options: CreateNodeHonoServerResourceOptions = {}
|
|
139
|
+
): Promise<TResult> {
|
|
140
|
+
return withAsyncDisposableFactory(
|
|
141
|
+
() => createNodeHonoServerResource(app, options),
|
|
142
|
+
run
|
|
143
|
+
);
|
|
144
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export * from './assertions';
|
|
2
2
|
export * from './deterministic';
|
|
3
|
+
export * from './disposable';
|
|
3
4
|
export * from './faults';
|
|
4
5
|
export * from './fixtures';
|
|
5
6
|
export * from './hono-node-server';
|
|
6
7
|
export * from './http-fixtures';
|
|
7
8
|
export * from './project-scoped-tasks';
|
|
8
9
|
export * from './realtime-ws';
|
|
10
|
+
export * from './resources';
|
|
9
11
|
export * from './runtime-process';
|
|
10
12
|
export * from './scenario-flow';
|
|
11
13
|
export * from './sync-builders';
|
package/src/realtime-ws.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { isRecord } from '@syncular/core';
|
|
2
|
+
import {
|
|
3
|
+
type AsyncDisposableResource,
|
|
4
|
+
createAsyncDisposableResource,
|
|
5
|
+
type ResourceRunner,
|
|
6
|
+
withAsyncDisposableFactory,
|
|
7
|
+
} from './disposable';
|
|
2
8
|
|
|
3
9
|
export type RealtimeWsQueryValue = string | number | boolean | null | undefined;
|
|
4
10
|
|
|
@@ -20,6 +26,12 @@ export interface OpenRealtimeWsOptions extends CreateRealtimeWsUrlOptions {
|
|
|
20
26
|
protocols?: string | string[];
|
|
21
27
|
}
|
|
22
28
|
|
|
29
|
+
export interface OpenRealtimeWsResourceOptions extends OpenRealtimeWsOptions {
|
|
30
|
+
waitForOpen?: boolean;
|
|
31
|
+
openTimeoutMs?: number;
|
|
32
|
+
close?: CloseWsSafeOptions;
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
function appendQueryParam(
|
|
24
36
|
url: URL,
|
|
25
37
|
key: string,
|
|
@@ -319,3 +331,24 @@ export async function closeWsSafe(
|
|
|
319
331
|
}
|
|
320
332
|
});
|
|
321
333
|
}
|
|
334
|
+
|
|
335
|
+
export async function openRealtimeWsResource(
|
|
336
|
+
options: OpenRealtimeWsResourceOptions
|
|
337
|
+
): Promise<AsyncDisposableResource<WebSocket>> {
|
|
338
|
+
const ws = openRealtimeWs(options);
|
|
339
|
+
|
|
340
|
+
if (options.waitForOpen) {
|
|
341
|
+
await waitForWsOpen(ws, { timeoutMs: options.openTimeoutMs });
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
return createAsyncDisposableResource(ws, () =>
|
|
345
|
+
closeWsSafe(ws, options.close)
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export async function withRealtimeWs<TResult>(
|
|
350
|
+
options: OpenRealtimeWsResourceOptions,
|
|
351
|
+
run: ResourceRunner<WebSocket, TResult>
|
|
352
|
+
): Promise<TResult> {
|
|
353
|
+
return withAsyncDisposableFactory(() => openRealtimeWsResource(options), run);
|
|
354
|
+
}
|
package/src/resources.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { SyncClientDb } from '@syncular/client';
|
|
2
|
+
import type { SyncCoreDb } from '@syncular/server';
|
|
3
|
+
import {
|
|
4
|
+
type AsyncDisposableResource,
|
|
5
|
+
createAsyncDisposableResource,
|
|
6
|
+
type ResourceRunner,
|
|
7
|
+
withAsyncDisposableFactory,
|
|
8
|
+
} from './disposable';
|
|
9
|
+
import {
|
|
10
|
+
type CreateEngineTestClientOptions,
|
|
11
|
+
type CreateSyncFixtureOptions,
|
|
12
|
+
type CreateTestClientOptions,
|
|
13
|
+
createEngineTestClient,
|
|
14
|
+
createSyncFixture,
|
|
15
|
+
createTestClient,
|
|
16
|
+
createTestServer,
|
|
17
|
+
createTestSqliteServer,
|
|
18
|
+
type EngineTestClient,
|
|
19
|
+
type ServerDialect,
|
|
20
|
+
type SyncFixture,
|
|
21
|
+
type TestClient,
|
|
22
|
+
type TestClientDialect,
|
|
23
|
+
type TestServer,
|
|
24
|
+
type TestSqliteDbDialect,
|
|
25
|
+
} from './fixtures';
|
|
26
|
+
import {
|
|
27
|
+
type CreateHttpClientFixtureOptions,
|
|
28
|
+
type CreateHttpServerFixtureOptions,
|
|
29
|
+
createHttpClientFixture,
|
|
30
|
+
createHttpServerFixture,
|
|
31
|
+
type HttpClientFixture,
|
|
32
|
+
type HttpServerFixture,
|
|
33
|
+
} from './http-fixtures';
|
|
34
|
+
|
|
35
|
+
export async function createTestServerResource(
|
|
36
|
+
serverDialect: ServerDialect
|
|
37
|
+
): Promise<AsyncDisposableResource<TestServer>> {
|
|
38
|
+
const server = await createTestServer(serverDialect);
|
|
39
|
+
return createAsyncDisposableResource(server, () => server.destroy());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function withTestServer<TResult>(
|
|
43
|
+
serverDialect: ServerDialect,
|
|
44
|
+
run: ResourceRunner<TestServer, TResult>
|
|
45
|
+
): Promise<TResult> {
|
|
46
|
+
return withAsyncDisposableFactory(
|
|
47
|
+
() => createTestServerResource(serverDialect),
|
|
48
|
+
run
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export async function createTestSqliteServerResource(
|
|
53
|
+
dialect: TestSqliteDbDialect
|
|
54
|
+
): Promise<AsyncDisposableResource<TestServer>> {
|
|
55
|
+
const server = await createTestSqliteServer(dialect);
|
|
56
|
+
return createAsyncDisposableResource(server, () => server.destroy());
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function withTestSqliteServer<TResult>(
|
|
60
|
+
dialect: TestSqliteDbDialect,
|
|
61
|
+
run: ResourceRunner<TestServer, TResult>
|
|
62
|
+
): Promise<TResult> {
|
|
63
|
+
return withAsyncDisposableFactory(
|
|
64
|
+
() => createTestSqliteServerResource(dialect),
|
|
65
|
+
run
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export async function createTestClientResource(
|
|
70
|
+
clientDialect: TestClientDialect,
|
|
71
|
+
server: TestServer,
|
|
72
|
+
options: CreateTestClientOptions
|
|
73
|
+
): Promise<AsyncDisposableResource<TestClient>> {
|
|
74
|
+
const client = await createTestClient(clientDialect, server, options);
|
|
75
|
+
return createAsyncDisposableResource(client, () => client.destroy());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export async function withTestClient<TResult>(
|
|
79
|
+
clientDialect: TestClientDialect,
|
|
80
|
+
server: TestServer,
|
|
81
|
+
options: CreateTestClientOptions,
|
|
82
|
+
run: ResourceRunner<TestClient, TResult>
|
|
83
|
+
): Promise<TResult> {
|
|
84
|
+
return withAsyncDisposableFactory(
|
|
85
|
+
() => createTestClientResource(clientDialect, server, options),
|
|
86
|
+
run
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export async function createEngineTestClientResource(
|
|
91
|
+
server: TestServer,
|
|
92
|
+
options: CreateEngineTestClientOptions
|
|
93
|
+
): Promise<AsyncDisposableResource<EngineTestClient>> {
|
|
94
|
+
const client = await createEngineTestClient(server, options);
|
|
95
|
+
return createAsyncDisposableResource(client, () => client.destroy());
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export async function withEngineTestClient<TResult>(
|
|
99
|
+
server: TestServer,
|
|
100
|
+
options: CreateEngineTestClientOptions,
|
|
101
|
+
run: ResourceRunner<EngineTestClient, TResult>
|
|
102
|
+
): Promise<TResult> {
|
|
103
|
+
return withAsyncDisposableFactory(
|
|
104
|
+
() => createEngineTestClientResource(server, options),
|
|
105
|
+
run
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export async function createSyncFixtureResource(
|
|
110
|
+
options: CreateSyncFixtureOptions
|
|
111
|
+
): Promise<AsyncDisposableResource<SyncFixture>> {
|
|
112
|
+
const fixture = await createSyncFixture(options);
|
|
113
|
+
return createAsyncDisposableResource(fixture, () => fixture.destroyAll());
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export async function withSyncFixture<TResult>(
|
|
117
|
+
options: CreateSyncFixtureOptions,
|
|
118
|
+
run: ResourceRunner<SyncFixture, TResult>
|
|
119
|
+
): Promise<TResult> {
|
|
120
|
+
return withAsyncDisposableFactory(
|
|
121
|
+
() => createSyncFixtureResource(options),
|
|
122
|
+
run
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export async function createHttpServerFixtureResource<DB extends SyncCoreDb>(
|
|
127
|
+
options: CreateHttpServerFixtureOptions<DB>
|
|
128
|
+
): Promise<AsyncDisposableResource<HttpServerFixture<DB>>> {
|
|
129
|
+
const fixture = await createHttpServerFixture(options);
|
|
130
|
+
return createAsyncDisposableResource(fixture, () => fixture.destroy());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export async function withHttpServerFixture<DB extends SyncCoreDb, TResult>(
|
|
134
|
+
options: CreateHttpServerFixtureOptions<DB>,
|
|
135
|
+
run: ResourceRunner<HttpServerFixture<DB>, TResult>
|
|
136
|
+
): Promise<TResult> {
|
|
137
|
+
return withAsyncDisposableFactory(
|
|
138
|
+
() => createHttpServerFixtureResource(options),
|
|
139
|
+
run
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export async function createHttpClientFixtureResource<DB extends SyncClientDb>(
|
|
144
|
+
options: CreateHttpClientFixtureOptions<DB>
|
|
145
|
+
): Promise<AsyncDisposableResource<HttpClientFixture<DB>>> {
|
|
146
|
+
const fixture = await createHttpClientFixture(options);
|
|
147
|
+
return createAsyncDisposableResource(fixture, () => fixture.destroy());
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export async function withHttpClientFixture<DB extends SyncClientDb, TResult>(
|
|
151
|
+
options: CreateHttpClientFixtureOptions<DB>,
|
|
152
|
+
run: ResourceRunner<HttpClientFixture<DB>, TResult>
|
|
153
|
+
): Promise<TResult> {
|
|
154
|
+
return withAsyncDisposableFactory(
|
|
155
|
+
() => createHttpClientFixtureResource(options),
|
|
156
|
+
run
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface EngineSessionResourceOptions {
|
|
161
|
+
start?: boolean;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export async function createEngineSessionResource(
|
|
165
|
+
client: EngineTestClient,
|
|
166
|
+
options: EngineSessionResourceOptions = {}
|
|
167
|
+
): Promise<AsyncDisposableResource<EngineTestClient>> {
|
|
168
|
+
if (options.start ?? true) {
|
|
169
|
+
await client.startEngine();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return createAsyncDisposableResource(client, () => {
|
|
173
|
+
client.stopEngine();
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export async function withEngineSession<TResult>(
|
|
178
|
+
client: EngineTestClient,
|
|
179
|
+
run: ResourceRunner<EngineTestClient, TResult>,
|
|
180
|
+
options: EngineSessionResourceOptions = {}
|
|
181
|
+
): Promise<TResult> {
|
|
182
|
+
return withAsyncDisposableFactory(
|
|
183
|
+
() => createEngineSessionResource(client, options),
|
|
184
|
+
run
|
|
185
|
+
);
|
|
186
|
+
}
|
package/src/runtime-process.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { ChildProcess } from 'node:child_process';
|
|
2
|
+
import {
|
|
3
|
+
type AsyncDisposableResource,
|
|
4
|
+
createAsyncDisposableResource,
|
|
5
|
+
type ResourceRunner,
|
|
6
|
+
withAsyncDisposableFactory,
|
|
7
|
+
} from './disposable';
|
|
2
8
|
|
|
3
9
|
export interface WaitForJsonPortOptions {
|
|
4
10
|
timeoutMs?: number;
|
|
@@ -131,3 +137,23 @@ export async function stopChildProcess(
|
|
|
131
137
|
process.on('exit', onExit);
|
|
132
138
|
});
|
|
133
139
|
}
|
|
140
|
+
|
|
141
|
+
export function createChildProcessResource(
|
|
142
|
+
process: ChildProcess,
|
|
143
|
+
options: StopChildProcessOptions = {}
|
|
144
|
+
): AsyncDisposableResource<ChildProcess> {
|
|
145
|
+
return createAsyncDisposableResource(process, () =>
|
|
146
|
+
stopChildProcess(process, options)
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export async function withChildProcess<TResult>(
|
|
151
|
+
process: ChildProcess,
|
|
152
|
+
run: ResourceRunner<ChildProcess, TResult>,
|
|
153
|
+
options: StopChildProcessOptions = {}
|
|
154
|
+
): Promise<TResult> {
|
|
155
|
+
return withAsyncDisposableFactory(
|
|
156
|
+
async () => createChildProcessResource(process, options),
|
|
157
|
+
run
|
|
158
|
+
);
|
|
159
|
+
}
|