@syncular/testkit 0.0.2-139 → 0.0.2-140

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,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;AAEjC,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,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,IAAI,EACT,OAAO,CAAC,EAAE,qBAAqB,GAC9B,UAAU,CAwEZ"}
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"}
@@ -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;AAUpE,MAAM,UAAU,oBAAoB,CAClC,GAAS,EACT,OAA+B,EACnB;IACZ,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;IAC1C,MAAM,gBAAgB,GACpB,OAAO,EAAE,gBAAgB,IAAI,iCAAiC,CAAC;IACjE,MAAM,gBAAgB,GACpB,OAAO,EAAE,gBAAgB;QACzB,gEAAgE,CAAC;IACnE,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,KAAK,CAAC;IAE9D,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAEhD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,6BAA6B,EAAE,GAAG;gBAClC,8BAA8B,EAAE,gBAAgB;gBAChD,8BAA8B,EAAE,gBAAgB;gBAChD,wBAAwB,EAAE,MAAM,CAAC,iBAAiB,CAAC;aACpD,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO;YAClB,CAAC,CAAC,MAAM,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAiB,EAAE,CAAC;gBAChC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1D,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;oBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBACnE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,MAAM,GAAG,CAAC,CAAC;oBACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;wBAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;oBACzB,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,CAAC;gBAAA,CACjB,CAAC,CAAC;YAAA,CACJ,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO;YACP,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,eAAe,GAA2B,EAAE,CAAC;QACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;YACvC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAAA,CAC9B,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,eAAe,CAAC,6BAA6B,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAAA,CAChB,CAAC,CAAC;AAAA,CACJ"}
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';
@@ -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"}
@@ -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":"AAEA,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;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"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-ws.js","sourceRoot":"","sources":["../src/realtime-ws.ts"],"names":[],"mappings":"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"}
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;AAEvD,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"}
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"}
@@ -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":"AAOA,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAqB,EACrB,OAAO,GAA2B,EAAE,EACnB;IACjB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;IAE3D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,WAAW,6BAA6B,CAAC,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,YAAY,GAAG,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;YACpB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAA,CAC7B,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QAAA,CACf,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAAA,CACf,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC;YAC/C,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEjC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;oBACxD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBACnC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACzB,OAAO;oBACT,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,kDAAkD;gBACpD,CAAC;YACH,CAAC;QAAA,CACF,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC;YAC/C,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAAA,CAClC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAE,MAA6B,EAAE,EAAE,CAAC;YACrE,UAAU,CACR,IAAI,KAAK,CACP,GAAG,WAAW,uCAAuC,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,cAAc,YAAY,EAAE,CACvH,CACF,CAAC;QAAA,CACH,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAC/B,UAAU,CACR,IAAI,KAAK,CACP,GAAG,WAAW,4BAA4B,SAAS,eAAe,YAAY,EAAE,CACjF,CACF,CAAC;QAAA,CACH,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAA,CAC5B,CAAC,CAAC;AAAA,CACJ;AAMD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAqB,EACrB,OAAO,GAA4B,EAAE,EACtB;IACf,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAEpD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,EAAE,CAAC;QAAA,CACX,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,EAAE,CAAC;QAAA,CACX,EAAE,aAAa,CAAC,CAAC;QAElB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAA,CAC5B,CAAC,CAAC;AAAA,CACJ"}
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-139",
3
+ "version": "0.0.2-140",
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-139",
45
- "@syncular/core": "0.0.2-139",
46
- "@syncular/dialect-bun-sqlite": "0.0.2-139",
47
- "@syncular/dialect-libsql": "0.0.2-139",
48
- "@syncular/dialect-pglite": "0.0.2-139",
49
- "@syncular/dialect-sqlite3": "0.0.2-139",
50
- "@syncular/server": "0.0.2-139",
51
- "@syncular/server-dialect-postgres": "0.0.2-139",
52
- "@syncular/server-dialect-sqlite": "0.0.2-139",
53
- "@syncular/server-hono": "0.0.2-139",
54
- "@syncular/transport-http": "0.0.2-139",
44
+ "@syncular/client": "0.0.2-140",
45
+ "@syncular/core": "0.0.2-140",
46
+ "@syncular/dialect-bun-sqlite": "0.0.2-140",
47
+ "@syncular/dialect-libsql": "0.0.2-140",
48
+ "@syncular/dialect-pglite": "0.0.2-140",
49
+ "@syncular/dialect-sqlite3": "0.0.2-140",
50
+ "@syncular/server": "0.0.2-140",
51
+ "@syncular/server-dialect-postgres": "0.0.2-140",
52
+ "@syncular/server-dialect-sqlite": "0.0.2-140",
53
+ "@syncular/server-hono": "0.0.2-140",
54
+ "@syncular/transport-http": "0.0.2-140",
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
+ }
@@ -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';
@@ -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
+ }
@@ -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
+ }
@@ -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
+ }