prool 0.0.12 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +341 -0
- package/_lib/exports/instances.d.ts +4 -3
- package/_lib/exports/instances.d.ts.map +1 -1
- package/_lib/exports/instances.js +1 -0
- package/_lib/exports/instances.js.map +1 -1
- package/_lib/instances/rundler.d.ts +604 -0
- package/_lib/instances/rundler.d.ts.map +1 -0
- package/_lib/instances/rundler.js +86 -0
- package/_lib/instances/rundler.js.map +1 -0
- package/_lib/utils.d.ts +7 -11
- package/_lib/utils.d.ts.map +1 -1
- package/_lib/utils.js +21 -15
- package/_lib/utils.js.map +1 -1
- package/exports/instances.test.ts +1 -0
- package/exports/instances.ts +4 -3
- package/instances/anvil.test.ts +1 -1
- package/instances/package.json +5 -0
- package/instances/rundler.test.ts +115 -0
- package/instances/rundler.ts +451 -0
- package/package.json +4 -2
- package/pool.test.ts +5 -1
- package/processes/package.json +5 -0
- package/server.test.ts +40 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/utils.test.ts +29 -14
- package/utils.ts +37 -26
package/_lib/utils.d.ts
CHANGED
|
@@ -16,21 +16,17 @@ export declare function extractPath(request: string): ExtractPathReturnType;
|
|
|
16
16
|
* @returns The stripped string.
|
|
17
17
|
*/
|
|
18
18
|
export declare function stripColors(message: string): string;
|
|
19
|
-
export type ToArgsParameters = {
|
|
20
|
-
[key: string]: Record<string, string> | string | readonly string[] | boolean | number | bigint | undefined;
|
|
21
|
-
};
|
|
22
19
|
/**
|
|
23
20
|
* Converts an object of options to an array of command line arguments.
|
|
24
21
|
*
|
|
25
22
|
* @param options The options object.
|
|
26
23
|
* @returns The command line arguments.
|
|
27
24
|
*/
|
|
28
|
-
export declare function toArgs(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
export declare function toFlagCase(key: string): string;
|
|
25
|
+
export declare function toArgs(obj: {
|
|
26
|
+
[key: string]: Record<string, any> | string | readonly string[] | boolean | number | bigint | undefined;
|
|
27
|
+
}, options?: {
|
|
28
|
+
casing: 'kebab' | 'snake';
|
|
29
|
+
}): any[];
|
|
30
|
+
/** Converts to a --flag-case string. */
|
|
31
|
+
export declare function toFlagCase(str: string, separator?: string): string;
|
|
36
32
|
//# sourceMappingURL=utils.d.ts.map
|
package/_lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../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,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../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"}
|
package/_lib/utils.js
CHANGED
|
@@ -36,21 +36,22 @@ export function stripColors(message) {
|
|
|
36
36
|
* @param options The options object.
|
|
37
37
|
* @returns The command line arguments.
|
|
38
38
|
*/
|
|
39
|
-
export function toArgs(
|
|
40
|
-
|
|
39
|
+
export function toArgs(obj, options = { casing: 'kebab' }) {
|
|
40
|
+
const { casing } = options;
|
|
41
|
+
return Object.entries(obj).flatMap(([key, value]) => {
|
|
41
42
|
if (value === undefined)
|
|
42
43
|
return [];
|
|
43
44
|
if (Array.isArray(value))
|
|
44
45
|
return [toFlagCase(key), value.join(',')];
|
|
45
|
-
if (typeof value === 'object' && value !== null)
|
|
46
|
+
if (typeof value === 'object' && value !== null) {
|
|
46
47
|
return Object.entries(value).flatMap(([subKey, subValue]) => {
|
|
47
48
|
if (subValue === undefined)
|
|
48
49
|
return [];
|
|
49
|
-
const flag = toFlagCase(key);
|
|
50
|
-
|
|
51
|
-
return [flag, value];
|
|
50
|
+
const flag = toFlagCase(`${key}.${subKey}`, casing === 'kebab' ? '-' : '_');
|
|
51
|
+
return [flag, subValue];
|
|
52
52
|
});
|
|
53
|
-
|
|
53
|
+
}
|
|
54
|
+
const flag = toFlagCase(key, casing === 'kebab' ? '-' : '_');
|
|
54
55
|
if (value === false)
|
|
55
56
|
return [flag, 'false'];
|
|
56
57
|
if (value === true)
|
|
@@ -61,13 +62,18 @@ export function toArgs(parameters) {
|
|
|
61
62
|
return [flag, stringified];
|
|
62
63
|
});
|
|
63
64
|
}
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
/** Converts to a --flag-case string. */
|
|
66
|
+
export function toFlagCase(str, separator = '-') {
|
|
67
|
+
const keys = [];
|
|
68
|
+
for (let i = 0; i < str.split('.').length; i++) {
|
|
69
|
+
const key = str.split('.')[i];
|
|
70
|
+
if (!key)
|
|
71
|
+
continue;
|
|
72
|
+
keys.push(key
|
|
73
|
+
.replace(/\s+/g, separator)
|
|
74
|
+
.replace(/([a-z])([A-Z])/g, `$1${separator}$2`)
|
|
75
|
+
.toLowerCase());
|
|
76
|
+
}
|
|
77
|
+
return `--${keys.join('.')}`;
|
|
72
78
|
}
|
|
73
79
|
//# sourceMappingURL=utils.js.map
|
package/_lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,IAAI,GAAG,kBAAkB,CAAA,CAAC,kCAAkC;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAA;IAC/C,MAAM,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ;SACzC,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;IAEhC,MAAM,EAAE,GACN,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QACrD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClB,CAAC,CAAC,SAAS,CAAA;IACf,MAAM,IAAI,GAAG,IACX,OAAO,EAAE,KAAK,QAAQ;QACpB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACpB,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CACtC,EAAE,CAAA;IAEF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,cAAc;AAClB,yEAAyE;AACzE,6EAA6E,CAAA;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AAC5C,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
|
package/exports/instances.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { type AltoParameters
|
|
2
|
-
export { type AnvilParameters
|
|
3
|
-
export { type
|
|
1
|
+
export { alto, type AltoParameters } from '../instances/alto.js'
|
|
2
|
+
export { anvil, type AnvilParameters } from '../instances/anvil.js'
|
|
3
|
+
export { rundler, type RundlerParameters } from '../instances/rundler.js'
|
|
4
|
+
export { stackup, type StackupParameters } from '../instances/stackup.js'
|
package/instances/anvil.test.ts
CHANGED
|
@@ -86,7 +86,7 @@ test('behavior: can subscribe to stderr', async () => {
|
|
|
86
86
|
)
|
|
87
87
|
})
|
|
88
88
|
|
|
89
|
-
test('behavior: starts anvil with custom options', async () => {
|
|
89
|
+
test.skip('behavior: starts anvil with custom options', async () => {
|
|
90
90
|
const instance = defineInstance({
|
|
91
91
|
timestamp,
|
|
92
92
|
chainId: 123,
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { afterEach, expect, test } from 'vitest'
|
|
2
|
+
import type { Instance } from '../instance.js'
|
|
3
|
+
import { type RundlerParameters, rundler } from './rundler.js'
|
|
4
|
+
|
|
5
|
+
const instances: Instance[] = []
|
|
6
|
+
|
|
7
|
+
const defineInstance = (parameters: RundlerParameters = {}) => {
|
|
8
|
+
const instance = rundler(parameters)
|
|
9
|
+
instances.push(instance)
|
|
10
|
+
return instance
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
for (const instance of instances) await instance.stop()
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('default', async () => {
|
|
18
|
+
const messages: string[] = []
|
|
19
|
+
const stdouts: string[] = []
|
|
20
|
+
|
|
21
|
+
const instance = defineInstance()
|
|
22
|
+
|
|
23
|
+
instance.on('message', (m) => messages.push(m))
|
|
24
|
+
instance.on('stdout', (m) => stdouts.push(m))
|
|
25
|
+
|
|
26
|
+
expect(instance.messages.get()).toMatchInlineSnapshot('[]')
|
|
27
|
+
|
|
28
|
+
await instance.start()
|
|
29
|
+
expect(instance.status).toEqual('started')
|
|
30
|
+
|
|
31
|
+
expect(messages.join('')).toBeDefined()
|
|
32
|
+
expect(stdouts.join('')).toBeDefined()
|
|
33
|
+
expect(instance.messages.get().join('')).toBeDefined()
|
|
34
|
+
|
|
35
|
+
await instance.stop()
|
|
36
|
+
expect(instance.status).toEqual('stopped')
|
|
37
|
+
|
|
38
|
+
expect(messages.join('')).toBeDefined()
|
|
39
|
+
expect(stdouts.join('')).toBeDefined()
|
|
40
|
+
expect(instance.messages.get()).toMatchInlineSnapshot('[]')
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
test('behavior: instance errored (duplicate ports)', async () => {
|
|
44
|
+
const instance_1 = defineInstance({
|
|
45
|
+
rpc: {
|
|
46
|
+
port: 1337,
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
const instance_2 = defineInstance({
|
|
50
|
+
rpc: {
|
|
51
|
+
port: 1337,
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
await instance_1.start()
|
|
56
|
+
await expect(() =>
|
|
57
|
+
instance_2.start(),
|
|
58
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
59
|
+
`[Error: Failed to start process "rundler": exited]`,
|
|
60
|
+
)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('behavior: start and stop multiple times', async () => {
|
|
64
|
+
const instance = defineInstance()
|
|
65
|
+
|
|
66
|
+
await instance.start()
|
|
67
|
+
await instance.stop()
|
|
68
|
+
await instance.start()
|
|
69
|
+
await instance.stop()
|
|
70
|
+
await instance.start()
|
|
71
|
+
await instance.stop()
|
|
72
|
+
await instance.start()
|
|
73
|
+
await instance.stop()
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('behavior: can subscribe to stderr', async () => {
|
|
77
|
+
const messages: string[] = []
|
|
78
|
+
|
|
79
|
+
const instance_1 = defineInstance({
|
|
80
|
+
rpc: {
|
|
81
|
+
port: 1338,
|
|
82
|
+
},
|
|
83
|
+
})
|
|
84
|
+
const instance_2 = defineInstance({
|
|
85
|
+
rpc: {
|
|
86
|
+
port: 1338,
|
|
87
|
+
},
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
await instance_1.start()
|
|
91
|
+
instance_2.on('stderr', (message) => messages.push(message))
|
|
92
|
+
await expect(() =>
|
|
93
|
+
instance_2.start(),
|
|
94
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
95
|
+
`[Error: Failed to start process "rundler": exited]`,
|
|
96
|
+
)
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
test('behavior: exit', async () => {
|
|
100
|
+
const instance = defineInstance()
|
|
101
|
+
|
|
102
|
+
let exitCode: number | null | undefined = undefined
|
|
103
|
+
instance.on('exit', (code) => {
|
|
104
|
+
exitCode = code
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
await instance.start()
|
|
108
|
+
expect(instance.status).toEqual('started')
|
|
109
|
+
|
|
110
|
+
instance._internal.process.kill()
|
|
111
|
+
|
|
112
|
+
await new Promise<void>((res) => setTimeout(res, 100))
|
|
113
|
+
expect(instance.status).toEqual('stopped')
|
|
114
|
+
expect(typeof exitCode !== 'undefined').toBeTruthy()
|
|
115
|
+
})
|