prool 0.0.24 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/{LICENSE → LICENSE.md} +1 -1
  2. package/README.md +46 -163
  3. package/{_lib/instance.d.ts → dist/Instance.d.ts} +28 -25
  4. package/dist/Instance.d.ts.map +1 -0
  5. package/{_lib/instance.js → dist/Instance.js} +9 -4
  6. package/dist/Instance.js.map +1 -0
  7. package/{_lib/pool.d.ts → dist/Pool.d.ts} +15 -13
  8. package/dist/Pool.d.ts.map +1 -0
  9. package/{_lib/pool.js → dist/Pool.js} +3 -3
  10. package/dist/Pool.js.map +1 -0
  11. package/{_lib/server.d.ts → dist/Server.d.ts} +7 -10
  12. package/dist/Server.d.ts.map +1 -0
  13. package/{_lib/server.js → dist/Server.js} +31 -10
  14. package/dist/Server.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +4 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/instances/alto.d.ts +452 -0
  20. package/dist/instances/alto.d.ts.map +1 -0
  21. package/{_lib → dist}/instances/alto.js +4 -4
  22. package/dist/instances/alto.js.map +1 -0
  23. package/dist/instances/anvil.d.ts +458 -0
  24. package/dist/instances/anvil.d.ts.map +1 -0
  25. package/{_lib → dist}/instances/anvil.js +4 -4
  26. package/dist/instances/anvil.js.map +1 -0
  27. package/dist/instances/tempo.d.ts +157 -0
  28. package/dist/instances/tempo.d.ts.map +1 -0
  29. package/dist/instances/tempo.js +187 -0
  30. package/dist/instances/tempo.js.map +1 -0
  31. package/dist/internal/utils.d.ts.map +1 -0
  32. package/{_lib → dist/internal}/utils.js +1 -1
  33. package/dist/internal/utils.js.map +1 -0
  34. package/{_lib → dist}/processes/execa.d.ts +11 -10
  35. package/dist/processes/execa.d.ts.map +1 -0
  36. package/{_lib → dist}/processes/execa.js +1 -1
  37. package/dist/processes/execa.js.map +1 -0
  38. package/package.json +17 -16
  39. package/{instance.test.ts → src/Instance.test.ts} +12 -12
  40. package/{instance.ts → src/Instance.ts} +51 -42
  41. package/{pool.test.ts → src/Pool.test.ts} +41 -55
  42. package/{pool.ts → src/Pool.ts} +21 -19
  43. package/{server.test.ts → src/Server.test.ts} +26 -149
  44. package/{server.ts → src/Server.ts} +34 -12
  45. package/src/index.ts +3 -0
  46. package/{instances → src/instances}/alto.test.ts +8 -11
  47. package/src/instances/alto.ts +289 -0
  48. package/{instances → src/instances}/anvil.test.ts +5 -6
  49. package/src/instances/anvil.ts +306 -0
  50. package/{instances/silius.test.ts → src/instances/tempo.test.ts} +20 -44
  51. package/src/instances/tempo.ts +278 -0
  52. package/{utils.test.ts → src/internal/utils.test.ts} +6 -6
  53. package/{utils.ts → src/internal/utils.ts} +1 -1
  54. package/{processes → src/processes}/execa.test.ts +6 -11
  55. package/{processes → src/processes}/execa.ts +19 -15
  56. package/src/processes/index.ts +1 -0
  57. package/CHANGELOG.md +0 -148
  58. package/_lib/exports/index.d.ts +0 -5
  59. package/_lib/exports/index.d.ts.map +0 -1
  60. package/_lib/exports/index.js +0 -5
  61. package/_lib/exports/index.js.map +0 -1
  62. package/_lib/exports/instances.d.ts +0 -7
  63. package/_lib/exports/instances.d.ts.map +0 -1
  64. package/_lib/exports/instances.js +0 -7
  65. package/_lib/exports/instances.js.map +0 -1
  66. package/_lib/exports/processes.d.ts +0 -2
  67. package/_lib/exports/processes.d.ts.map +0 -1
  68. package/_lib/exports/processes.js +0 -2
  69. package/_lib/exports/processes.js.map +0 -1
  70. package/_lib/instance.d.ts.map +0 -1
  71. package/_lib/instance.js.map +0 -1
  72. package/_lib/instances/alto.d.ts +0 -449
  73. package/_lib/instances/alto.d.ts.map +0 -1
  74. package/_lib/instances/alto.js.map +0 -1
  75. package/_lib/instances/anvil.d.ts +0 -455
  76. package/_lib/instances/anvil.d.ts.map +0 -1
  77. package/_lib/instances/anvil.js.map +0 -1
  78. package/_lib/instances/rundler.d.ts +0 -604
  79. package/_lib/instances/rundler.d.ts.map +0 -1
  80. package/_lib/instances/rundler.js +0 -86
  81. package/_lib/instances/rundler.js.map +0 -1
  82. package/_lib/instances/silius.d.ts +0 -224
  83. package/_lib/instances/silius.d.ts.map +0 -1
  84. package/_lib/instances/silius.js +0 -117
  85. package/_lib/instances/silius.js.map +0 -1
  86. package/_lib/instances/stackup.d.ts +0 -86
  87. package/_lib/instances/stackup.d.ts.map +0 -1
  88. package/_lib/instances/stackup.js +0 -89
  89. package/_lib/instances/stackup.js.map +0 -1
  90. package/_lib/pool.d.ts.map +0 -1
  91. package/_lib/pool.js.map +0 -1
  92. package/_lib/processes/execa.d.ts.map +0 -1
  93. package/_lib/processes/execa.js.map +0 -1
  94. package/_lib/server.d.ts.map +0 -1
  95. package/_lib/server.js.map +0 -1
  96. package/_lib/utils.d.ts.map +0 -1
  97. package/_lib/utils.js.map +0 -1
  98. package/exports/index.test.ts +0 -16
  99. package/exports/index.ts +0 -29
  100. package/exports/instances.test.ts +0 -15
  101. package/exports/instances.ts +0 -13
  102. package/exports/processes.test.ts +0 -10
  103. package/exports/processes.ts +0 -8
  104. package/instances/alto.ts +0 -280
  105. package/instances/anvil.ts +0 -304
  106. package/instances/package.json +0 -5
  107. package/instances/rundler.test.ts +0 -111
  108. package/instances/rundler.ts +0 -451
  109. package/instances/silius.ts +0 -347
  110. package/instances/stackup.test.ts +0 -106
  111. package/instances/stackup.ts +0 -162
  112. package/processes/package.json +0 -5
  113. package/tsconfig.build.tsbuildinfo +0 -1
  114. /package/{_lib → dist/internal}/utils.d.ts +0 -0
@@ -0,0 +1,187 @@
1
+ import * as os from 'node:os';
2
+ import * as path from 'node:path';
3
+ import { GenericContainer, Wait, } from 'testcontainers';
4
+ import * as Instance from '../Instance.js';
5
+ import { execa } from '../processes/execa.js';
6
+ export function command(parameters) {
7
+ const { faucet, port } = parameters;
8
+ const dataDir = path.join(os.tmpdir(), '.prool', `tempo.${port}`);
9
+ return [
10
+ 'node',
11
+ `--authrpc.port=${port + 30}`,
12
+ `--datadir=${dataDir}`,
13
+ '--dev',
14
+ `--dev.block-time=${parameters?.blockTime ?? '50ms'}`,
15
+ '--engine.disable-precompile-cache',
16
+ '--engine.legacy-state-root',
17
+ '--faucet.address',
18
+ ...(faucet?.addresses ?? [
19
+ '0x20c0000000000000000000000000000000000000',
20
+ '0x20c0000000000000000000000000000000000001',
21
+ '0x20c0000000000000000000000000000000000002',
22
+ '0x20c0000000000000000000000000000000000003',
23
+ ]),
24
+ `--faucet.amount=${faucet?.amount ?? '1000000000000'}`,
25
+ '--faucet.enabled',
26
+ `--faucet.private-key=${faucet?.privateKey ?? '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'}`,
27
+ '--http',
28
+ '--http.addr=0.0.0.0',
29
+ '--http.api=all',
30
+ '--http.corsdomain=*',
31
+ `--http.port=${port}`,
32
+ `--port=${port + 10}`,
33
+ '--txpool.basefee-max-count=10000000000000',
34
+ '--txpool.basefee-max-size=10000',
35
+ '--txpool.max-account-slots=500000',
36
+ '--txpool.pending-max-count=10000000000000',
37
+ '--txpool.pending-max-size=10000',
38
+ '--txpool.queued-max-count=10000000000000',
39
+ '--txpool.queued-max-size=10000',
40
+ `--ws.port=${port + 20}`,
41
+ ];
42
+ }
43
+ /**
44
+ * Defines a Tempo instance.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const instance = Instance.tempo({ port: 8545 })
49
+ * await instance.start()
50
+ * // ...
51
+ * await instance.stop()
52
+ * ```
53
+ */
54
+ export const tempo = Instance.define((parameters) => {
55
+ const { binary = 'tempo', log: log_, ...args } = parameters || {};
56
+ const log = (() => {
57
+ try {
58
+ return JSON.parse(log_);
59
+ }
60
+ catch {
61
+ return log_;
62
+ }
63
+ })();
64
+ const RUST_LOG = log && typeof log !== 'boolean' ? log : '';
65
+ const name = 'tempo';
66
+ const process = execa({ name });
67
+ return {
68
+ _internal: {
69
+ args,
70
+ get process() {
71
+ return process._internal.process;
72
+ },
73
+ },
74
+ host: args.host ?? 'localhost',
75
+ name,
76
+ port: args.port ?? 8545,
77
+ async start({ port = args.port }, options) {
78
+ return await process.start(($) => $({
79
+ env: {
80
+ RUST_LOG,
81
+ },
82
+ }) `${[binary, ...command({ ...parameters, port })]}`, {
83
+ ...options,
84
+ // Resolve when the process is listening via "RPC HTTP server started" message.
85
+ resolver({ process, reject, resolve }) {
86
+ process.stdout.on('data', (data) => {
87
+ const message = data.toString();
88
+ if (log)
89
+ console.log(message);
90
+ if (message.includes('RPC HTTP server started'))
91
+ resolve();
92
+ if (message.includes('shutting down'))
93
+ reject('shutting down');
94
+ });
95
+ process.stderr.on('data', (data) => {
96
+ const message = data.toString();
97
+ if (log)
98
+ console.error(message);
99
+ });
100
+ },
101
+ });
102
+ },
103
+ async stop() {
104
+ await process.stop();
105
+ },
106
+ };
107
+ });
108
+ /**
109
+ * Defines a Tempo instance.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * const instance = Instance.tempoDocker({ port: 8545 })
114
+ * await instance.start()
115
+ * // ...
116
+ * await instance.stop()
117
+ * ```
118
+ */
119
+ export const tempoDocker = Instance.define((parameters) => {
120
+ const { containerName = `tempo.${crypto.randomUUID()}`, image = 'ghcr.io/tempoxyz/tempo:latest', log: log_, ...args } = parameters || {};
121
+ const log = (() => {
122
+ try {
123
+ return JSON.parse(log_);
124
+ }
125
+ catch {
126
+ return log_;
127
+ }
128
+ })();
129
+ const RUST_LOG = log && typeof log !== 'boolean' ? log : '';
130
+ const name = 'tempo';
131
+ let container;
132
+ return {
133
+ _internal: {
134
+ args,
135
+ },
136
+ host: args.host ?? 'localhost',
137
+ name,
138
+ port: args.port ?? 8545,
139
+ async start({ port = args.port }, { emitter }) {
140
+ const promise = Promise.withResolvers();
141
+ const c = new GenericContainer(image)
142
+ .withPlatform('linux/x86_64')
143
+ .withNetworkMode('host')
144
+ .withExtraHosts([
145
+ { host: 'host.docker.internal', ipAddress: 'host-gateway' },
146
+ { host: 'localhost', ipAddress: 'host-gateway' },
147
+ ])
148
+ .withName(containerName)
149
+ .withEnvironment({ RUST_LOG })
150
+ .withCommand(command({ ...parameters, port }))
151
+ .withWaitStrategy(Wait.forLogMessage(/RPC HTTP server started/))
152
+ .withLogConsumer((stream) => {
153
+ stream.on('data', (data) => {
154
+ const message = data.toString();
155
+ emitter.emit('message', message);
156
+ emitter.emit('stdout', message);
157
+ if (log)
158
+ console.log(message);
159
+ if (message.includes('shutting down'))
160
+ promise.reject(new Error(`Failed to start: ${message}`));
161
+ });
162
+ stream.on('error', (error) => {
163
+ if (log)
164
+ console.error(error.message);
165
+ emitter.emit('message', error.message);
166
+ emitter.emit('stderr', error.message);
167
+ promise.reject(new Error(`Failed to start: ${error.message}`));
168
+ });
169
+ })
170
+ .withStartupTimeout(10_000);
171
+ c.start()
172
+ .then((c) => {
173
+ container = c;
174
+ promise.resolve();
175
+ })
176
+ .catch(promise.reject);
177
+ return promise.promise;
178
+ },
179
+ async stop() {
180
+ if (!container)
181
+ return;
182
+ await container.stop();
183
+ container = undefined;
184
+ },
185
+ };
186
+ });
187
+ //# sourceMappingURL=tempo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAkBlE;AAMD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,UAE1C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE;IACH,CAAC,GAAG,EAAE,MAAM,GACR,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACnB,MAAM,GACN,SAAS,MAAM,EAAE,GACjB,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,CAAA;CACd,EACD,OAAO,GAAE;IAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAA;CAAwB,SA6B7D;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,UAatD"}
@@ -19,7 +19,7 @@ export function extractPath(request) {
19
19
  return { id, path };
20
20
  }
21
21
  const ansiColorRegex =
22
- // biome-ignore lint/suspicious/noControlCharactersInRegex: <explanation>
22
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: _
23
23
  /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
24
24
  /**
25
25
  * Strips ANSI color codes from a string.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,18 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { SignalConstants } from 'node:os';
3
- import { type ResultPromise, execa as exec } from 'execa';
4
- import type { InstanceStartOptions_internal } from '../instance.js';
2
+ import { execa as exec, type ResultPromise } from 'execa';
3
+ import type * as Instance from '../Instance.js';
5
4
  export type Process_internal = ResultPromise<{
6
5
  cleanup: true;
7
6
  reject: false;
8
7
  }>;
9
- export type ExecaStartOptions = InstanceStartOptions_internal & {
8
+ export type ExecaStartOptions = Instance.define.InstanceStartOptions_internal & {
10
9
  resolver(options: {
11
10
  process: Process_internal;
12
11
  reject(data: string): Promise<void>;
13
12
  resolve(): void;
14
13
  }): void;
15
14
  };
16
- export type ExecaParameters = {
17
- name: string;
18
- };
19
- export type ExecaProcess = {
15
+ export type Process = {
20
16
  _internal: {
21
17
  process: Process_internal;
22
18
  };
@@ -24,6 +20,11 @@ export type ExecaProcess = {
24
20
  start(command: (x: typeof exec) => void, options: ExecaStartOptions): Promise<void>;
25
21
  stop(signal?: keyof SignalConstants | number): Promise<void>;
26
22
  };
27
- export type ExecaReturnType = ExecaProcess;
28
- export declare function execa(parameters: ExecaParameters): ExecaReturnType;
23
+ export declare function execa(parameters: execa.Parameters): execa.ReturnType;
24
+ export declare namespace execa {
25
+ type Parameters = {
26
+ name: string;
27
+ };
28
+ type ReturnType = Process;
29
+ }
29
30
  //# sourceMappingURL=execa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execa.d.ts","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG/C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,iBAAiB,GAC3B,QAAQ,CAAC,MAAM,CAAC,6BAA6B,GAAG;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,gBAAgB,CAAA;QACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,IAAI,CAAA;KAChB,GAAG,IAAI,CAAA;CACT,CAAA;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,gBAAgB,CAAA;KAC1B,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CACH,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D,CAAA;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAmFpE;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAEzC,KAAY,UAAU,GAAG,OAAO,CAAA;CACjC"}
@@ -1,5 +1,5 @@
1
1
  import { execa as exec } from 'execa';
2
- import { stripColors } from '../utils.js';
2
+ import { stripColors } from '../internal/utils.js';
3
3
  export function execa(parameters) {
4
4
  const { name } = parameters;
5
5
  const errorMessages = [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execa.js","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,27 +1,21 @@
1
1
  {
2
2
  "name": "prool",
3
3
  "description": "HTTP testing instances for Ethereum",
4
- "version": "0.0.24",
4
+ "version": "0.1.0",
5
5
  "type": "module",
6
- "module": "_lib/exports/index.mjs",
7
- "types": "_lib/exports/index.d.ts",
8
- "typings": "_lib/exports/index.d.ts",
9
6
  "sideEffects": false,
7
+ "files": [
8
+ "src",
9
+ "dist"
10
+ ],
10
11
  "engines": {
11
12
  "node": ">=22"
12
13
  },
13
14
  "exports": {
14
15
  ".": {
15
- "types": "./_lib/exports/index.d.ts",
16
- "default": "./_lib/exports/index.js"
17
- },
18
- "./processes": {
19
- "types": "./_lib/exports/processes.d.ts",
20
- "default": "./_lib/exports/processes.js"
21
- },
22
- "./instances": {
23
- "types": "./_lib/exports/instances.d.ts",
24
- "default": "./_lib/exports/instances.js"
16
+ "src": "./src/index.ts",
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
25
19
  }
26
20
  },
27
21
  "dependencies": {
@@ -33,11 +27,15 @@
33
27
  "tar": "7.2.0"
34
28
  },
35
29
  "peerDependencies": {
36
- "@pimlico/alto": "*"
30
+ "@pimlico/alto": "*",
31
+ "testcontainers": ">=11.10.0"
37
32
  },
38
33
  "peerDependenciesMeta": {
39
34
  "@pimlico/alto": {
40
35
  "optional": true
36
+ },
37
+ "testcontainers": {
38
+ "optional": true
41
39
  }
42
40
  },
43
41
  "license": "MIT",
@@ -53,5 +51,8 @@
53
51
  "url": "https://github.com/sponsors/wevm"
54
52
  }
55
53
  ],
56
- "keywords": []
54
+ "keywords": [],
55
+ "main": "./dist/index.js",
56
+ "module": "./dist/index.js",
57
+ "types": "./dist/index.d.ts"
57
58
  }
@@ -1,9 +1,9 @@
1
+ import { Instance } from 'prool'
1
2
  import { expect, test } from 'vitest'
2
- import { defineInstance } from './instance.js'
3
3
 
4
4
  test('default', async () => {
5
5
  let started = false
6
- const foo = defineInstance(() => {
6
+ const foo = Instance.define(() => {
7
7
  return {
8
8
  name: 'foo',
9
9
  host: 'localhost',
@@ -28,7 +28,7 @@ test('default', async () => {
28
28
 
29
29
  test('behavior: parameters', async () => {
30
30
  let started = [false, {}]
31
- const foo = defineInstance((parameters: { bar: string }) => {
31
+ const foo = Instance.define((parameters: { bar: string }) => {
32
32
  return {
33
33
  name: 'foo',
34
34
  host: 'localhost',
@@ -53,7 +53,7 @@ test('behavior: parameters', async () => {
53
53
 
54
54
  test('behavior: start', async () => {
55
55
  let count = 0
56
- const foo = defineInstance(() => {
56
+ const foo = Instance.define(() => {
57
57
  return {
58
58
  name: 'foo',
59
59
  host: 'localhost',
@@ -91,7 +91,7 @@ test('behavior: start', async () => {
91
91
  })
92
92
 
93
93
  test('behavior: start (error)', async () => {
94
- const foo = defineInstance(() => {
94
+ const foo = Instance.define(() => {
95
95
  return {
96
96
  name: 'foo',
97
97
  host: 'localhost',
@@ -114,7 +114,7 @@ test('behavior: start (error)', async () => {
114
114
 
115
115
  test('behavior: stop', async () => {
116
116
  let count = 0
117
- const foo = defineInstance(() => {
117
+ const foo = Instance.define(() => {
118
118
  return {
119
119
  name: 'foo',
120
120
  host: 'localhost',
@@ -150,7 +150,7 @@ test('behavior: stop', async () => {
150
150
  })
151
151
 
152
152
  test('behavior: stop (error)', async () => {
153
- const foo = defineInstance(() => {
153
+ const foo = Instance.define(() => {
154
154
  return {
155
155
  name: 'foo',
156
156
  host: 'localhost',
@@ -175,7 +175,7 @@ test('behavior: stop (error)', async () => {
175
175
 
176
176
  test('behavior: restart', async () => {
177
177
  let count = 0
178
- const foo = defineInstance(() => {
178
+ const foo = Instance.define(() => {
179
179
  return {
180
180
  name: 'foo',
181
181
  host: 'localhost',
@@ -206,7 +206,7 @@ test('behavior: restart', async () => {
206
206
  })
207
207
 
208
208
  test('behavior: events', async () => {
209
- const foo = defineInstance(() => {
209
+ const foo = Instance.define(() => {
210
210
  let count = 0
211
211
  return {
212
212
  name: 'foo',
@@ -263,7 +263,7 @@ test('behavior: events', async () => {
263
263
  })
264
264
 
265
265
  test('behavior: messages', async () => {
266
- const foo = defineInstance(() => {
266
+ const foo = Instance.define(() => {
267
267
  return {
268
268
  name: 'foo',
269
269
  host: 'localhost',
@@ -306,7 +306,7 @@ test('behavior: messages', async () => {
306
306
  })
307
307
 
308
308
  test('options: timeout', async () => {
309
- const foo = defineInstance(() => {
309
+ const foo = Instance.define(() => {
310
310
  return {
311
311
  name: 'foo',
312
312
  host: 'localhost',
@@ -323,7 +323,7 @@ test('options: timeout', async () => {
323
323
  'Instance "foo" failed to start in time',
324
324
  )
325
325
 
326
- const bar = defineInstance(() => {
326
+ const bar = Instance.define(() => {
327
327
  return {
328
328
  name: 'bar',
329
329
  host: 'localhost',
@@ -1,5 +1,9 @@
1
1
  import { EventEmitter } from 'eventemitter3'
2
2
 
3
+ export { alto } from './instances/alto.js'
4
+ export { anvil } from './instances/anvil.js'
5
+ export { tempo, tempoDocker } from './instances/tempo.js'
6
+
3
7
  type EventTypes = {
4
8
  exit: [code: number | null, signal: NodeJS.Signals | null]
5
9
  listening: []
@@ -8,34 +12,6 @@ type EventTypes = {
8
12
  stdout: [message: string]
9
13
  }
10
14
 
11
- export type InstanceStartOptions_internal = {
12
- emitter: EventEmitter<EventTypes>
13
- status: Instance['status']
14
- }
15
- export type InstanceStopOptions_internal = {
16
- emitter: EventEmitter<EventTypes>
17
- status: Instance['status']
18
- }
19
-
20
- export type InstanceStartOptions = {
21
- /**
22
- * Port to start the instance on.
23
- */
24
- port?: number | undefined
25
- }
26
-
27
- export type DefineInstanceFn<
28
- parameters,
29
- _internal extends object | undefined = object | undefined,
30
- > = (parameters: parameters) => Pick<Instance, 'host' | 'name' | 'port'> & {
31
- _internal?: _internal | undefined
32
- start(
33
- options: InstanceStartOptions,
34
- options_internal: InstanceStartOptions_internal,
35
- ): Promise<void>
36
- stop(options_internal: InstanceStopOptions_internal): Promise<void>
37
- }
38
-
39
15
  export type Instance<
40
16
  _internal extends object | undefined = object | undefined,
41
17
  > = Pick<
@@ -111,15 +87,6 @@ export type InstanceOptions = {
111
87
  timeout?: number
112
88
  }
113
89
 
114
- export type DefineInstanceReturnType<
115
- _internal extends object | undefined = object | undefined,
116
- parameters = undefined,
117
- > = (
118
- ...parameters: parameters extends undefined
119
- ? [options?: InstanceOptions]
120
- : [parameters: parameters, options?: InstanceOptions]
121
- ) => Instance<_internal>
122
-
123
90
  /**
124
91
  * Creates an instance definition.
125
92
  *
@@ -127,7 +94,7 @@ export type DefineInstanceReturnType<
127
94
  *
128
95
  * @example
129
96
  * ```ts
130
- * const foo = defineInstance((parameters: FooParameters) => {
97
+ * const foo = Instance.define((parameters: FooParameters) => {
131
98
  * return {
132
99
  * name: 'foo',
133
100
  * host: 'localhost',
@@ -142,20 +109,22 @@ export type DefineInstanceReturnType<
142
109
  * })
143
110
  * ```
144
111
  */
145
- export function defineInstance<
112
+ export function define<
146
113
  _internal extends object | undefined,
147
114
  parameters = undefined,
148
115
  >(
149
- fn: DefineInstanceFn<parameters, _internal>,
150
- ): DefineInstanceReturnType<_internal, parameters> {
116
+ fn: define.DefineFn<parameters, _internal>,
117
+ ): define.ReturnType<_internal, parameters> {
151
118
  return (...[parametersOrOptions, options_]) => {
152
119
  function create(createParameters: Parameters<Instance['create']>[0] = {}) {
153
120
  const parameters = parametersOrOptions as parameters
154
121
  const options = options_ || parametersOrOptions || {}
155
122
 
123
+ const instance = fn(parameters)
156
124
  const { _internal, host, name, port, start, stop } = {
157
- ...fn(parameters),
125
+ ...instance,
158
126
  ...createParameters,
127
+ port: createParameters.port ?? instance.port,
159
128
  }
160
129
  const { messageBuffer = 20, timeout } = options
161
130
 
@@ -308,3 +277,43 @@ export function defineInstance<
308
277
  return Object.assign(create(), { create })
309
278
  }
310
279
  }
280
+
281
+ export declare namespace define {
282
+ export type DefineFn<
283
+ parameters,
284
+ _internal extends object | undefined = object | undefined,
285
+ > = (parameters: parameters) => Pick<Instance, 'host' | 'name' | 'port'> & {
286
+ _internal?: _internal | undefined
287
+ start(
288
+ options: InstanceStartOptions,
289
+ options_internal: InstanceStartOptions_internal,
290
+ ): Promise<void>
291
+ stop(options_internal: InstanceStopOptions_internal): Promise<void>
292
+ }
293
+
294
+ export type ReturnType<
295
+ _internal extends object | undefined = object | undefined,
296
+ parameters = undefined,
297
+ > = (
298
+ ...parameters: parameters extends undefined
299
+ ? [options?: InstanceOptions]
300
+ : [parameters: parameters, options?: InstanceOptions]
301
+ ) => Instance<_internal>
302
+
303
+ export type InstanceStartOptions_internal = {
304
+ emitter: EventEmitter<EventTypes>
305
+ status: Instance['status']
306
+ }
307
+
308
+ export type InstanceStopOptions_internal = {
309
+ emitter: EventEmitter<EventTypes>
310
+ status: Instance['status']
311
+ }
312
+
313
+ export type InstanceStartOptions = {
314
+ /**
315
+ * Port to start the instance on.
316
+ */
317
+ port?: number | undefined
318
+ }
319
+ }