prool 0.0.25 → 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} +8 -9
  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} +9 -11
  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 -154
  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
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
package/README.md CHANGED
@@ -38,27 +38,21 @@ Prool is a library that provides programmatic HTTP testing instances for Ethereu
38
38
 
39
39
  Prool contains a set of pre-configured instances that can be used to simulate Ethereum server environments, being:
40
40
 
41
- - **Local Execution Nodes:** [`anvil`](#anvil-execution-node)
42
- - **Bundler Nodes:** [`alto`](#alto-bundler-node), [`rundler`](#rundler-bundler-node), [`silius`](#silius-bundler-node), [`stackup`](#stackup-bundler-node)
43
- - **Indexer Nodes:** `ponder`⚠️
41
+ - **Local Execution Nodes:** [`anvil`](#anvil-execution-node), [`tempo`](#tempo-execution-node)
42
+ - **ERC-4337 Bundler Nodes:** [`alto`](#alto-bundler-node)
44
43
 
45
- ⚠️ = soon
46
-
47
- You can also create your own custom instances by using the [`defineInstance` function](#defineinstance).
44
+ You can also create your own custom instances by using the [`Instance.define` function](#instancedefine).
48
45
 
49
46
  ## Table of Contents
50
47
 
51
48
  - [Install](#install)
52
49
  - [Getting Started](#getting-started)
53
50
  - [Anvil (Execution Node)](#anvil-execution-node)
54
- - [Alto (Bundler Node)](#alto-bundler-node)
55
- - [Rundler (Bundler Node)](#rundler-bundler-node)
56
- - [Silius (Bundler Node)](#silius-bundler-node)
57
- - [Stackup (Bundler Node)](#stackup-bundler-node)
51
+ - [Alto (ERC-4337 Bundler Node)](#alto-bundler-node)
58
52
  - [Reference](#reference)
59
- - [`createServer`](#createserver)
60
- - [`defineInstance`](#defineinstance)
61
- - [`definePool`](#definepool)
53
+ - [`Server.create`](#servercreate)
54
+ - [`Instance.define`](#instancedefine)
55
+ - [`Pool.define`](#pooldefine)
62
56
 
63
57
 
64
58
  ## Install
@@ -81,17 +75,17 @@ bun i prool
81
75
 
82
76
  #### Requirements
83
77
 
84
- - [Foundry](https://getfoundry.sh/) binary installed
85
- - Download: `curl -L https://foundry.paradigm.xyz | bash`
78
+ ```bash
79
+ curl -L https://foundry.paradigm.xyz | bash # Install Foundry
80
+ ```
86
81
 
87
82
  #### Usage
88
83
 
89
84
  ```ts
90
- import { createServer } from 'prool'
91
- import { anvil } from 'prool/instances'
85
+ import { Instance, Server } from 'prool'
92
86
 
93
- const server = createServer({
94
- instance: anvil(),
87
+ const server = Server.create({
88
+ instance: Instance.anvil(),
95
89
  })
96
90
 
97
91
  await server.start()
@@ -102,67 +96,44 @@ await server.start()
102
96
  // "http://localhost:8545/n"
103
97
  ```
104
98
 
105
- #### Parameters
106
-
107
- See [`AnvilParameters`](https://github.com/wevm/prool/blob/801ede06ded8b2cb2d59c95294aae795e548897c/src/instances/anvil.ts#L5).
108
-
109
- ### Alto (Bundler Node)
99
+ ### Tempo (Execution Node)
110
100
 
111
101
  #### Requirements
112
102
 
113
- - [`@pimlico/alto`](npm.im/@pimlico/alto): `npm i @pimlico/alto`
103
+ ```bash
104
+ curl -L https://tempo.xyz/install | bash # Install Tempo
105
+ ```
114
106
 
115
107
  #### Usage
116
108
 
117
109
  ```ts
118
- import { createServer } from 'prool'
119
- import { anvil, alto } from 'prool/instances'
110
+ import { Instance, Server } from 'prool'
120
111
 
121
- const executionServer = createServer({
122
- instance: anvil(),
123
- port: 8545
112
+ const server = Server.create({
113
+ instance: Instance.tempo(),
124
114
  })
125
- await executionServer.start()
115
+
116
+ await server.start()
126
117
  // Instances accessible at:
127
118
  // "http://localhost:8545/1"
128
119
  // "http://localhost:8545/2"
129
120
  // "http://localhost:8545/3"
130
121
  // "http://localhost:8545/n"
131
-
132
- const bundlerServer = createServer({
133
- instance: (key) => alto({
134
- entrypoints: ['0x0000000071727De22E5E9d8BAf0edAc6f37da032'],
135
- rpcUrl: `http://localhost:8545/${key}`,
136
- executorPrivateKeys: ['0x...'],
137
- })
138
- })
139
- await bundlerServer.start()
140
- // Instances accessible at:
141
- // "http://localhost:3000/1" (→ http://localhost:8545/1)
142
- // "http://localhost:3000/2" (→ http://localhost:8545/2)
143
- // "http://localhost:3000/3" (→ http://localhost:8545/3)
144
- // "http://localhost:3000/n" (→ http://localhost:8545/n)
145
122
  ```
146
123
 
147
- #### Parameters
148
-
149
- See [`AltoParameters`](https://github.com/wevm/prool/blob/801ede06ded8b2cb2d59c95294aae795e548897c/src/instances/alto.ts#L7).
150
-
151
- ### Rundler (Bundler Node)
124
+ ### Alto (Bundler Node)
152
125
 
153
126
  #### Requirements
154
127
 
155
- - [Rundler](https://github.com/alchemyplatform/rundler) binary installed
156
- - [Download](https://github.com/alchemyplatform/rundler/releases)
128
+ - [`@pimlico/alto`](npm.im/@pimlico/alto): `npm i @pimlico/alto`
157
129
 
158
130
  #### Usage
159
131
 
160
132
  ```ts
161
- import { createServer } from 'prool'
162
- import { anvil, rundler } from 'prool/instances'
133
+ import { Instance, Server } from 'prool'
163
134
 
164
- const executionServer = createServer({
165
- instance: anvil(),
135
+ const executionServer = Server.create({
136
+ instance: Instance.anvil(),
166
137
  port: 8545
167
138
  })
168
139
  await executionServer.start()
@@ -172,9 +143,11 @@ await executionServer.start()
172
143
  // "http://localhost:8545/3"
173
144
  // "http://localhost:8545/n"
174
145
 
175
- const bundlerServer = createServer({
176
- instance: (key) => rundler({
177
- nodeHttp: `http://localhost:8545/${key}`,
146
+ const bundlerServer = Server.create({
147
+ instance: (key) => Instance.alto({
148
+ entrypoints: ['0x0000000071727De22E5E9d8BAf0edAc6f37da032'],
149
+ rpcUrl: `http://localhost:8545/${key}`,
150
+ executorPrivateKeys: ['0x...'],
178
151
  })
179
152
  })
180
153
  await bundlerServer.start()
@@ -185,108 +158,19 @@ await bundlerServer.start()
185
158
  // "http://localhost:3000/n" (→ http://localhost:8545/n)
186
159
  ```
187
160
 
188
- #### Parameters
189
-
190
- See [RundlerParameters]().
191
-
192
- ### Silius (Bundler Node)
193
-
194
- #### Requirements
195
-
196
- - [Docker](https://docs.docker.com/get-docker/)
197
- - Silius Docker Image: `docker pull silius-rs/silius`
198
-
199
- #### Usage
200
-
201
- ```ts
202
- import { createServer } from 'prool'
203
- import { anvil, silius } from 'prool/instances'
204
-
205
- const executionServer = createServer({
206
- instance: anvil(),
207
- port: 8545
208
- })
209
- await executionServer.start()
210
- // Instances accessible at:
211
- // "http://localhost:8545/1"
212
- // "http://localhost:8545/2"
213
- // "http://localhost:8545/3"
214
- // "http://localhost:8545/n"
215
-
216
- const bundlerServer = createServer({
217
- instance: (key) => silius({
218
- ethClientAddress: `http://localhost:8545/${key}`,
219
- mnemonicPath: './keys/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
220
- })
221
- })
222
- await bundlerServer.start()
223
- // Instances accessible at:
224
- // "http://localhost:4000/1" (→ http://localhost:8545/1)
225
- // "http://localhost:4000/2" (→ http://localhost:8545/2)
226
- // "http://localhost:4000/3" (→ http://localhost:8545/3)
227
- // "http://localhost:4000/n" (→ http://localhost:8545/n)
228
- ```
229
-
230
- #### Parameters
231
-
232
- See [`SiliusParameters`]().
233
-
234
- ### Stackup (Bundler Node)
235
-
236
- #### Requirements
237
-
238
- - [Docker](https://docs.docker.com/get-docker/)
239
- - Stackup Docker Image: `docker pull stackupwallet/stackup-bundler:latest`
240
-
241
- #### Usage
242
-
243
- ```ts
244
- import { createServer } from 'prool'
245
- import { anvil, stackup } from 'prool/instances'
246
-
247
- const executionServer = createServer({
248
- instance: anvil(),
249
- port: 8545
250
- })
251
- await executionServer.start()
252
- // Instances accessible at:
253
- // "http://localhost:8545/1"
254
- // "http://localhost:8545/2"
255
- // "http://localhost:8545/3"
256
- // "http://localhost:8545/n"
257
-
258
- const bundlerServer = createServer({
259
- instance: (key) => stackup({
260
- ethClientUrl: `http://localhost:8545/${key}`,
261
- privateKey: '0x...',
262
- })
263
- })
264
- await bundlerServer.start()
265
- // Instances accessible at:
266
- // "http://localhost:4337/1" (→ http://localhost:8545/1)
267
- // "http://localhost:4337/2" (→ http://localhost:8545/2)
268
- // "http://localhost:4337/3" (→ http://localhost:8545/3)
269
- // "http://localhost:4337/n" (→ http://localhost:8545/n)
270
- ```
271
-
272
- #### Parameters
273
-
274
- See [`StackupParameters`](https://github.com/wevm/prool/blob/801ede06ded8b2cb2d59c95294aae795e548897c/src/instances/stackup.ts#L5).
275
-
276
161
  ## Reference
277
162
 
278
- ### `createServer`
163
+ ### `Server.create`
279
164
 
280
165
  Creates a server that manages a pool of instances via a proxy.
281
166
 
282
167
  #### Usage
283
168
 
284
169
  ```ts
285
- import { createServer } from 'prool'
286
- import { anvil } from 'prool/instances'
170
+ import { Instance, Server } from 'prool'
287
171
 
288
- const executionServer = createServer({
289
- instance: anvil(),
172
+ const executionServer = Server.create({
173
+ instance: Instance.anvil(),
290
174
  })
291
175
  await executionServer.start()
292
176
  // Instances accessible at:
@@ -315,18 +199,18 @@ await executionServer.start()
315
199
  | `limit` | Number of instances that can be instantiated in the pool | `number` |
316
200
  | `host` | Host for the server. | `string` |
317
201
  | `port` | Port for the server. | `number` |
318
- | returns | Server | `CreateServerReturnType` |
202
+ | returns | Server | `Server.Server` |
319
203
 
320
- ### `defineInstance`
204
+ ### `Instance.define`
321
205
 
322
- Creates an instance definition, that can be used with [`createServer`](#createserver) or [`definePool`](#definepool).
206
+ Creates an instance definition, that can be used with [`Server.create`](#servercreate) or [`Pool.define`](#pooldefine).
323
207
 
324
208
  #### Usage
325
209
 
326
210
  ```ts
327
- import { defineInstance } from 'prool'
211
+ import { Instance } from 'prool'
328
212
 
329
- const foo = defineInstance((parameters: FooParameters) => {
213
+ const foo = Instance.define((parameters: FooParameters) => {
330
214
  return {
331
215
  name: 'foo',
332
216
  host: 'localhost',
@@ -348,18 +232,17 @@ const foo = defineInstance((parameters: FooParameters) => {
348
232
  | `fn` | Instance definition. | `DefineInstanceFn` |
349
233
  | returns | Instance. | `Instance` |
350
234
 
351
- ### `definePool`
235
+ ### `Pool.define`
352
236
 
353
237
  Defines a pool of instances. Instances can be started, cached, and stopped against an identifier.
354
238
 
355
239
  #### Usage
356
240
 
357
241
  ```ts
358
- import { definePool } from 'prool'
359
- import { anvil } from 'prool/instances'
242
+ import { Instance, Pool } from 'prool'
360
243
 
361
- const pool = definePool({
362
- instance: anvil(),
244
+ const pool = Pool.define({
245
+ instance: Instance.anvil(),
363
246
  })
364
247
  const instance_1 = await pool.start(1)
365
248
  const instance_2 = await pool.start(2)
@@ -381,4 +264,4 @@ const instance_3 = await pool.start(3)
381
264
 
382
265
  ## License
383
266
 
384
- [MIT](/LICENSE) License
267
+ [MIT](/LICENSE) License
@@ -1,5 +1,7 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { EventEmitter } from 'eventemitter3';
2
+ export { alto } from './instances/alto.js';
3
+ export { anvil } from './instances/anvil.js';
4
+ export { tempo, tempoDocker } from './instances/tempo.js';
3
5
  type EventTypes = {
4
6
  exit: [code: number | null, signal: NodeJS.Signals | null];
5
7
  listening: [];
@@ -7,25 +9,6 @@ type EventTypes = {
7
9
  stderr: [message: string];
8
10
  stdout: [message: string];
9
11
  };
10
- export type InstanceStartOptions_internal = {
11
- emitter: EventEmitter<EventTypes>;
12
- status: Instance['status'];
13
- };
14
- export type InstanceStopOptions_internal = {
15
- emitter: EventEmitter<EventTypes>;
16
- status: Instance['status'];
17
- };
18
- export type InstanceStartOptions = {
19
- /**
20
- * Port to start the instance on.
21
- */
22
- port?: number | undefined;
23
- };
24
- export type DefineInstanceFn<parameters, _internal extends object | undefined = object | undefined> = (parameters: parameters) => Pick<Instance, 'host' | 'name' | 'port'> & {
25
- _internal?: _internal | undefined;
26
- start(options: InstanceStartOptions, options_internal: InstanceStartOptions_internal): Promise<void>;
27
- stop(options_internal: InstanceStopOptions_internal): Promise<void>;
28
- };
29
12
  export type Instance<_internal extends object | undefined = object | undefined> = Pick<EventEmitter<EventTypes>, 'addListener' | 'off' | 'on' | 'once' | 'removeAllListeners' | 'removeListener'> & {
30
13
  _internal: _internal;
31
14
  /**
@@ -86,7 +69,6 @@ export type InstanceOptions = {
86
69
  /** Timeout (in milliseconds) for starting and stopping the instance. @default 10_000 */
87
70
  timeout?: number;
88
71
  };
89
- export type DefineInstanceReturnType<_internal extends object | undefined = object | undefined, parameters = undefined> = (...parameters: parameters extends undefined ? [options?: InstanceOptions] : [parameters: parameters, options?: InstanceOptions]) => Instance<_internal>;
90
72
  /**
91
73
  * Creates an instance definition.
92
74
  *
@@ -94,7 +76,7 @@ export type DefineInstanceReturnType<_internal extends object | undefined = obje
94
76
  *
95
77
  * @example
96
78
  * ```ts
97
- * const foo = defineInstance((parameters: FooParameters) => {
79
+ * const foo = Instance.define((parameters: FooParameters) => {
98
80
  * return {
99
81
  * name: 'foo',
100
82
  * host: 'localhost',
@@ -109,6 +91,27 @@ export type DefineInstanceReturnType<_internal extends object | undefined = obje
109
91
  * })
110
92
  * ```
111
93
  */
112
- export declare function defineInstance<_internal extends object | undefined, parameters = undefined>(fn: DefineInstanceFn<parameters, _internal>): DefineInstanceReturnType<_internal, parameters>;
113
- export {};
114
- //# sourceMappingURL=instance.d.ts.map
94
+ export declare function define<_internal extends object | undefined, parameters = undefined>(fn: define.DefineFn<parameters, _internal>): define.ReturnType<_internal, parameters>;
95
+ export declare namespace define {
96
+ type DefineFn<parameters, _internal extends object | undefined = object | undefined> = (parameters: parameters) => Pick<Instance, 'host' | 'name' | 'port'> & {
97
+ _internal?: _internal | undefined;
98
+ start(options: InstanceStartOptions, options_internal: InstanceStartOptions_internal): Promise<void>;
99
+ stop(options_internal: InstanceStopOptions_internal): Promise<void>;
100
+ };
101
+ type ReturnType<_internal extends object | undefined = object | undefined, parameters = undefined> = (...parameters: parameters extends undefined ? [options?: InstanceOptions] : [parameters: parameters, options?: InstanceOptions]) => Instance<_internal>;
102
+ type InstanceStartOptions_internal = {
103
+ emitter: EventEmitter<EventTypes>;
104
+ status: Instance['status'];
105
+ };
106
+ type InstanceStopOptions_internal = {
107
+ emitter: EventEmitter<EventTypes>;
108
+ status: Instance['status'];
109
+ };
110
+ type InstanceStartOptions = {
111
+ /**
112
+ * Port to start the instance on.
113
+ */
114
+ port?: number | undefined;
115
+ };
116
+ }
117
+ //# sourceMappingURL=Instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  import { EventEmitter } from 'eventemitter3';
2
+ export { alto } from './instances/alto.js';
3
+ export { anvil } from './instances/anvil.js';
4
+ export { tempo, tempoDocker } from './instances/tempo.js';
2
5
  /**
3
6
  * Creates an instance definition.
4
7
  *
@@ -6,7 +9,7 @@ import { EventEmitter } from 'eventemitter3';
6
9
  *
7
10
  * @example
8
11
  * ```ts
9
- * const foo = defineInstance((parameters: FooParameters) => {
12
+ * const foo = Instance.define((parameters: FooParameters) => {
10
13
  * return {
11
14
  * name: 'foo',
12
15
  * host: 'localhost',
@@ -21,14 +24,16 @@ import { EventEmitter } from 'eventemitter3';
21
24
  * })
22
25
  * ```
23
26
  */
24
- export function defineInstance(fn) {
27
+ export function define(fn) {
25
28
  return (...[parametersOrOptions, options_]) => {
26
29
  function create(createParameters = {}) {
27
30
  const parameters = parametersOrOptions;
28
31
  const options = options_ || parametersOrOptions || {};
32
+ const instance = fn(parameters);
29
33
  const { _internal, host, name, port, start, stop } = {
30
- ...fn(parameters),
34
+ ...instance,
31
35
  ...createParameters,
36
+ port: createParameters.port ?? instance.port,
32
37
  };
33
38
  const { messageBuffer = 20, timeout } = options;
34
39
  let restartResolver = Promise.withResolvers();
@@ -157,4 +162,4 @@ export function defineInstance(fn) {
157
162
  return Object.assign(create(), { create });
158
163
  };
159
164
  }
160
- //# sourceMappingURL=instance.js.map
165
+ //# sourceMappingURL=Instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.js","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Instance } from './instance.js';
1
+ import type { Instance } from './Instance.js';
2
2
  type Instance_ = Omit<Instance, 'create'>;
3
3
  export type Pool<key extends number | string = number | string> = Pick<Map<key, Instance_>, 'entries' | 'keys' | 'forEach' | 'get' | 'has' | 'size' | 'values'> & {
4
4
  _internal: {
@@ -8,24 +8,17 @@ export type Pool<key extends number | string = number | string> = Pick<Map<key,
8
8
  destroyAll(): Promise<void>;
9
9
  restart(key: key): Promise<void>;
10
10
  start(key: key, options?: {
11
- port?: number;
12
- }): Promise<Instance_>;
11
+ port?: number | undefined;
12
+ } | undefined): Promise<Instance_>;
13
13
  stop(key: key): Promise<void>;
14
14
  stopAll(): Promise<void>;
15
15
  };
16
- export type DefinePoolParameters<key extends number | string = number | string> = {
17
- /** Instance for the pool. */
18
- instance: Instance | ((key: key) => Instance);
19
- /** The maximum number of instances that can be started. */
20
- limit?: number | number;
21
- };
22
- export type DefinePoolReturnType<key extends number | string = number | string> = Pool<key>;
23
16
  /**
24
17
  * Defines an instance pool. Instances can be started, cached, and stopped against an identifier.
25
18
  *
26
19
  * @example
27
20
  * ```
28
- * const pool = definePool({
21
+ * const pool = Pool.define({
29
22
  * instance: anvil(),
30
23
  * })
31
24
  *
@@ -34,6 +27,15 @@ export type DefinePoolReturnType<key extends number | string = number | string>
34
27
  * const instance_3 = await pool.start(3)
35
28
  * ```
36
29
  */
37
- export declare function definePool<key extends number | string = number>(parameters: DefinePoolParameters<key>): DefinePoolReturnType<key>;
30
+ export declare function define<key extends number | string = number>(parameters: define.Parameters<key>): define.ReturnType<key>;
31
+ export declare namespace define {
32
+ type Parameters<key extends number | string = number | string> = {
33
+ /** Instance for the pool. */
34
+ instance: Instance | ((key: key) => Instance);
35
+ /** The maximum number of instances that can be started. */
36
+ limit?: number | undefined;
37
+ };
38
+ type ReturnType<key extends number | string = number | string> = Pool<key>;
39
+ }
38
40
  export {};
39
- //# sourceMappingURL=pool.d.ts.map
41
+ //# sourceMappingURL=Pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pool.d.ts","sourceRoot":"","sources":["../src/Pool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAEzC,MAAM,MAAM,IAAI,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,IAAI,CACpE,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,EACnB,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CACnE,GAAG;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC,CAAA;KAChD,CAAA;IACD,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,KAAK,CACH,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GAClD,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACzD,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GACjC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAqJxB;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,UAAU,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;QACtE,6BAA6B;QAC7B,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;QAC7C,2DAA2D;QAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,CAAA;IAED,KAAY,UAAU,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAClE,IAAI,CAAC,GAAG,CAAC,CAAA;CACZ"}
@@ -4,7 +4,7 @@ import getPort from 'get-port';
4
4
  *
5
5
  * @example
6
6
  * ```
7
- * const pool = definePool({
7
+ * const pool = Pool.define({
8
8
  * instance: anvil(),
9
9
  * })
10
10
  *
@@ -13,7 +13,7 @@ import getPort from 'get-port';
13
13
  * const instance_3 = await pool.start(3)
14
14
  * ```
15
15
  */
16
- export function definePool(parameters) {
16
+ export function define(parameters) {
17
17
  const { limit } = parameters;
18
18
  const instances = new Map();
19
19
  // Define promise instances for mutators to avoid race conditions, and return
@@ -138,4 +138,4 @@ export function definePool(parameters) {
138
138
  values: instances.values.bind(instances),
139
139
  };
140
140
  }
141
- //# sourceMappingURL=pool.js.map
141
+ //# sourceMappingURL=Pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pool.js","sourceRoot":"","sources":["../src/Pool.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { type IncomingMessage, type Server, type ServerResponse } from 'node:http';
4
2
  import type { AddressInfo } from 'node:net';
5
- import { type DefinePoolParameters } from './pool.js';
6
- export type CreateServerParameters = DefinePoolParameters<number> & ({
3
+ import * as Pool from './Pool.js';
4
+ export type CreateServerParameters = Pool.define.Parameters<number> & ({
7
5
  /** Host to run the server on. */
8
6
  host?: string | undefined;
9
7
  /** Port to run the server on. */
@@ -22,11 +20,10 @@ export type CreateServerReturnType = Omit<Server<typeof IncomingMessage, typeof
22
20
  *
23
21
  * @example
24
22
  * ```
25
- * import { createServer } from 'prool'
26
- * import { anvil } from 'prool/instances'
23
+ * import { Instance, Server } from 'prool'
27
24
  *
28
- * const server = createServer({
29
- * instance: anvil(),
25
+ * const server = Server.create({
26
+ * instance: Instance.anvil(),
30
27
  * })
31
28
  *
32
29
  * const server = await server.start()
@@ -41,5 +38,5 @@ export type CreateServerReturnType = Omit<Server<typeof IncomingMessage, typeof
41
38
  * // "http://localhost:8545/healthcheck"
42
39
  * ```
43
40
  */
44
- export declare function createServer(parameters: CreateServerParameters): CreateServerReturnType;
45
- //# sourceMappingURL=server.d.ts.map
41
+ export declare function create(parameters: CreateServerParameters): CreateServerReturnType;
42
+ //# sourceMappingURL=Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAG3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAIjC,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GACjE,CACI;IACE,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CACJ,CAAA;AAEH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,MAAM,CAAC,OAAO,eAAe,EAAE,OAAO,cAAc,CAAC,EACrD,SAAS,CACV,GAAG;IACF,OAAO,IAAI,WAAW,GAAG,IAAI,CAAA;IAC7B,KAAK,IAAI,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,MAAM,CACpB,UAAU,EAAE,sBAAsB,GACjC,sBAAsB,CA0HxB"}
@@ -1,18 +1,17 @@
1
1
  import { createServer as createServer_, } from 'node:http';
2
2
  import httpProxy from 'http-proxy';
3
- import { definePool } from './pool.js';
4
- import { extractPath } from './utils.js';
3
+ import { extractPath } from './internal/utils.js';
4
+ import * as Pool from './Pool.js';
5
5
  const { createProxyServer } = httpProxy;
6
6
  /**
7
7
  * Creates a server that manages a pool of instances via a proxy.
8
8
  *
9
9
  * @example
10
10
  * ```
11
- * import { createServer } from 'prool'
12
- * import { anvil } from 'prool/instances'
11
+ * import { Instance, Server } from 'prool'
13
12
  *
14
- * const server = createServer({
15
- * instance: anvil(),
13
+ * const server = Server.create({
14
+ * instance: Instance.anvil(),
16
15
  * })
17
16
  *
18
17
  * const server = await server.start()
@@ -27,9 +26,9 @@ const { createProxyServer } = httpProxy;
27
26
  * // "http://localhost:8545/healthcheck"
28
27
  * ```
29
28
  */
30
- export function createServer(parameters) {
29
+ export function create(parameters) {
31
30
  const { host = '::', instance, limit, port } = parameters;
32
- const pool = definePool({ instance, limit });
31
+ const pool = Pool.define({ instance, limit });
33
32
  const proxy = createProxyServer({
34
33
  ignorePath: true,
35
34
  ws: true,
@@ -149,4 +148,4 @@ function done(res, statusCode, json) {
149
148
  })
150
149
  .end(json ? JSON.stringify(json) : undefined);
151
150
  }
152
- //# sourceMappingURL=server.js.map
151
+ //# sourceMappingURL=Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"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"}