prool 0.0.3 → 0.0.5
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 +15 -0
- package/_lib/exports/index.d.ts +1 -1
- package/_lib/exports/processes.d.ts +2 -0
- package/_lib/exports/processes.d.ts.map +1 -0
- package/_lib/exports/processes.js +2 -0
- package/_lib/exports/processes.js.map +1 -0
- package/_lib/instance.d.ts +9 -6
- package/_lib/instance.d.ts.map +1 -1
- package/_lib/instance.js +22 -3
- package/_lib/instance.js.map +1 -1
- package/_lib/instances/anvil.d.ts +1 -5
- package/_lib/instances/anvil.d.ts.map +1 -1
- package/_lib/instances/anvil.js +18 -44
- package/_lib/instances/anvil.js.map +1 -1
- package/_lib/instances/stackup.d.ts +86 -0
- package/_lib/instances/stackup.d.ts.map +1 -0
- package/_lib/instances/stackup.js +89 -0
- package/_lib/instances/stackup.js.map +1 -0
- package/_lib/pool.d.ts +7 -6
- package/_lib/pool.d.ts.map +1 -1
- package/_lib/pool.js +60 -53
- package/_lib/pool.js.map +1 -1
- package/_lib/processes/execa.d.ts +27 -0
- package/_lib/processes/execa.d.ts.map +1 -0
- package/_lib/processes/execa.js +63 -0
- package/_lib/processes/execa.js.map +1 -0
- package/_lib/server.d.ts +3 -3
- package/_lib/server.d.ts.map +1 -1
- package/_lib/server.js +42 -34
- package/_lib/server.js.map +1 -1
- package/_lib/utils.d.ts +4 -3
- package/_lib/utils.d.ts.map +1 -1
- package/_lib/utils.js +2 -2
- package/_lib/utils.js.map +1 -1
- package/exports/index.ts +2 -2
- package/exports/processes.test.ts +10 -0
- package/exports/processes.ts +8 -0
- package/instance.test.ts +34 -2
- package/instance.ts +46 -13
- package/instances/anvil.test.ts +5 -3
- package/instances/anvil.ts +21 -49
- package/instances/stackup.test.ts +106 -0
- package/instances/stackup.ts +162 -0
- package/package.json +6 -2
- package/pool.test.ts +203 -138
- package/pool.ts +83 -66
- package/processes/execa.test.ts +143 -0
- package/processes/execa.ts +100 -0
- package/server.test.ts +162 -85
- package/server.ts +46 -38
- package/tsconfig.build.tsbuildinfo +1 -1
- package/utils.ts +11 -9
package/_lib/pool.js
CHANGED
|
@@ -14,7 +14,7 @@ import getPort from 'get-port';
|
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
16
|
export function definePool(parameters) {
|
|
17
|
-
const {
|
|
17
|
+
const { limit } = parameters;
|
|
18
18
|
const instances = new Map();
|
|
19
19
|
// Define promise instances for mutators to avoid race conditions, and return
|
|
20
20
|
// identical instances of the promises (instead of duplicating them).
|
|
@@ -23,102 +23,109 @@ export function definePool(parameters) {
|
|
|
23
23
|
const promises = {
|
|
24
24
|
destroy: new Map(),
|
|
25
25
|
destroyAll: undefined,
|
|
26
|
+
restart: new Map(),
|
|
26
27
|
start: new Map(),
|
|
27
28
|
stop: new Map(),
|
|
28
29
|
stopAll: undefined,
|
|
29
30
|
};
|
|
30
31
|
return {
|
|
31
32
|
_internal: {
|
|
32
|
-
instance,
|
|
33
|
+
instance: parameters.instance,
|
|
33
34
|
},
|
|
34
35
|
async destroy(key) {
|
|
35
36
|
const destroyPromise = promises.destroy.get(key);
|
|
36
37
|
if (destroyPromise)
|
|
37
38
|
return destroyPromise;
|
|
38
39
|
const resolver = Promise.withResolvers();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
promises.destroy.set(key, resolver.promise);
|
|
41
|
+
this.stop(key)
|
|
42
|
+
.then(() => {
|
|
42
43
|
instances.delete(key);
|
|
43
44
|
resolver.resolve();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
resolver.reject(error);
|
|
47
|
-
}
|
|
45
|
+
})
|
|
46
|
+
.catch(resolver.reject);
|
|
48
47
|
return resolver.promise;
|
|
49
48
|
},
|
|
50
49
|
async destroyAll() {
|
|
51
50
|
if (promises.destroyAll)
|
|
52
51
|
return promises.destroyAll;
|
|
53
52
|
const resolver = Promise.withResolvers();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
promises.destroyAll = resolver.promise;
|
|
54
|
+
Promise.all([...instances.keys()].map((key) => this.destroy(key)))
|
|
55
|
+
.then(() => {
|
|
57
56
|
promises.destroyAll = undefined;
|
|
58
57
|
resolver.resolve();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
})
|
|
59
|
+
.catch(resolver.reject);
|
|
60
|
+
return resolver.promise;
|
|
61
|
+
},
|
|
62
|
+
async restart(key) {
|
|
63
|
+
const restartPromise = promises.restart.get(key);
|
|
64
|
+
if (restartPromise)
|
|
65
|
+
return restartPromise;
|
|
66
|
+
const resolver = Promise.withResolvers();
|
|
67
|
+
const instance_ = instances.get(key);
|
|
68
|
+
if (!instance_)
|
|
69
|
+
return;
|
|
70
|
+
promises.restart.set(key, resolver.promise);
|
|
71
|
+
instance_
|
|
72
|
+
.restart()
|
|
73
|
+
.then(resolver.resolve)
|
|
74
|
+
.catch(resolver.reject)
|
|
75
|
+
.finally(() => promises.restart.delete(key));
|
|
76
|
+
return resolver.promise;
|
|
63
77
|
},
|
|
64
78
|
async start(key, options = {}) {
|
|
65
79
|
const startPromise = promises.start.get(key);
|
|
66
80
|
if (startPromise)
|
|
67
81
|
return startPromise;
|
|
68
82
|
const resolver = Promise.withResolvers();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
if (limit && instances.size >= limit)
|
|
84
|
+
throw new Error(`Instance limit of ${limit} reached.`);
|
|
85
|
+
promises.start.set(key, resolver.promise);
|
|
86
|
+
const instance = typeof parameters.instance === 'function'
|
|
87
|
+
? parameters.instance(key)
|
|
88
|
+
: parameters.instance;
|
|
89
|
+
const { port = await getPort() } = options;
|
|
90
|
+
const instance_ = instances.get(key) || instance.create({ port });
|
|
91
|
+
instance_
|
|
92
|
+
.start()
|
|
93
|
+
.then(() => {
|
|
76
94
|
instances.set(key, instance_);
|
|
77
95
|
resolver.resolve(instance_);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
promises.start.delete(key);
|
|
84
|
-
}
|
|
96
|
+
})
|
|
97
|
+
.catch(resolver.reject)
|
|
98
|
+
.finally(() => promises.start.delete(key));
|
|
85
99
|
return resolver.promise;
|
|
86
100
|
},
|
|
87
101
|
async stop(key) {
|
|
88
102
|
const stopPromise = promises.stop.get(key);
|
|
89
103
|
if (stopPromise)
|
|
90
104
|
return stopPromise;
|
|
105
|
+
const instance_ = instances.get(key);
|
|
106
|
+
if (!instance_)
|
|
107
|
+
return;
|
|
91
108
|
const resolver = Promise.withResolvers();
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
await instance_.stop();
|
|
100
|
-
resolver.resolve();
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
resolver.reject(error);
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
promises.stop.delete(key);
|
|
107
|
-
}
|
|
109
|
+
promises.stop.set(key, resolver.promise);
|
|
110
|
+
instance_
|
|
111
|
+
.stop()
|
|
112
|
+
.then(resolver.resolve)
|
|
113
|
+
.catch(resolver.reject)
|
|
114
|
+
.finally(() => promises.stop.delete(key));
|
|
115
|
+
return resolver.promise;
|
|
108
116
|
},
|
|
109
117
|
async stopAll() {
|
|
110
118
|
if (promises.stopAll)
|
|
111
119
|
return promises.stopAll;
|
|
112
120
|
const resolver = Promise.withResolvers();
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
121
|
+
promises.stopAll = resolver.promise;
|
|
122
|
+
Promise.all([...instances.keys()].map((key) => this.stop(key)))
|
|
123
|
+
.then(() => {
|
|
116
124
|
promises.stopAll = undefined;
|
|
117
125
|
resolver.resolve();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
126
|
+
})
|
|
127
|
+
.catch(resolver.reject);
|
|
128
|
+
return resolver.promise;
|
|
122
129
|
},
|
|
123
130
|
get size() {
|
|
124
131
|
return instances.size;
|
package/_lib/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../pool.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ResultPromise, execa as exec } from 'execa';
|
|
2
|
+
import type { InstanceStartOptions_internal } from '../instance.js';
|
|
3
|
+
export type Process_internal = ResultPromise<{
|
|
4
|
+
cleanup: true;
|
|
5
|
+
reject: false;
|
|
6
|
+
}>;
|
|
7
|
+
export type ExecaStartOptions = InstanceStartOptions_internal & {
|
|
8
|
+
resolver(options: {
|
|
9
|
+
process: Process_internal;
|
|
10
|
+
reject(data: string): Promise<void>;
|
|
11
|
+
resolve(): void;
|
|
12
|
+
}): void;
|
|
13
|
+
};
|
|
14
|
+
export type ExecaParameters = {
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
export type ExecaProcess = {
|
|
18
|
+
_internal: {
|
|
19
|
+
process: Process_internal;
|
|
20
|
+
};
|
|
21
|
+
name: string;
|
|
22
|
+
start(command: (x: typeof exec) => void, options: ExecaStartOptions): Promise<void>;
|
|
23
|
+
stop(): Promise<void>;
|
|
24
|
+
};
|
|
25
|
+
export type ExecaReturnType = ExecaProcess;
|
|
26
|
+
export declare function execa(parameters: ExecaParameters): ExecaReturnType;
|
|
27
|
+
//# sourceMappingURL=execa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execa.d.ts","sourceRoot":"","sources":["../../processes/execa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAA;AAGnE,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,iBAAiB,GAAG,6BAA6B,GAAG;IAC9D,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;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9C,MAAM,MAAM,YAAY,GAAG;IACzB,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,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAA;AAE1C,wBAAgB,KAAK,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,CAsElE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { execa as exec } from 'execa';
|
|
2
|
+
import { stripColors } from '../utils.js';
|
|
3
|
+
export function execa(parameters) {
|
|
4
|
+
const { name } = parameters;
|
|
5
|
+
let process;
|
|
6
|
+
async function stop() {
|
|
7
|
+
const killed = process.kill();
|
|
8
|
+
if (!killed)
|
|
9
|
+
return;
|
|
10
|
+
return new Promise((resolve) => process.on('close', resolve));
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
_internal: {
|
|
14
|
+
get process() {
|
|
15
|
+
return process;
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
name,
|
|
19
|
+
start(command, { emitter, resolver, status }) {
|
|
20
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
21
|
+
process = command(exec({
|
|
22
|
+
cleanup: true,
|
|
23
|
+
reject: false,
|
|
24
|
+
}));
|
|
25
|
+
resolver({
|
|
26
|
+
process,
|
|
27
|
+
async reject(data) {
|
|
28
|
+
await stop();
|
|
29
|
+
reject(new Error(`Failed to start process "${name}": ${data.toString()}`));
|
|
30
|
+
},
|
|
31
|
+
resolve() {
|
|
32
|
+
emitter.emit('listening');
|
|
33
|
+
return resolve();
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
process.stdout.on('data', (data) => {
|
|
37
|
+
const message = stripColors(data.toString());
|
|
38
|
+
emitter.emit('message', message);
|
|
39
|
+
emitter.emit('stdout', message);
|
|
40
|
+
});
|
|
41
|
+
process.stderr.on('data', async (data) => {
|
|
42
|
+
const message = stripColors(data.toString());
|
|
43
|
+
emitter.emit('message', message);
|
|
44
|
+
emitter.emit('stderr', message);
|
|
45
|
+
});
|
|
46
|
+
process.on('close', () => process.removeAllListeners());
|
|
47
|
+
process.on('exit', (code, signal) => {
|
|
48
|
+
emitter.emit('exit', code, signal);
|
|
49
|
+
if (!code) {
|
|
50
|
+
process.removeAllListeners();
|
|
51
|
+
if (status === 'starting')
|
|
52
|
+
reject(new Error(`Failed to start process "${name}": exited.`));
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return promise;
|
|
56
|
+
},
|
|
57
|
+
async stop() {
|
|
58
|
+
process.removeAllListeners();
|
|
59
|
+
await stop();
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=execa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execa.js","sourceRoot":"","sources":["../../processes/execa.ts"],"names":[],"mappings":"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"}
|
package/_lib/server.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { type IncomingMessage, type Server, type ServerResponse } from 'node:http';
|
|
4
4
|
import type { AddressInfo } from 'node:net';
|
|
5
5
|
import { type DefinePoolParameters } from './pool.js';
|
|
6
|
-
export type
|
|
6
|
+
export type CreateServerParameters = DefinePoolParameters<number> & ({
|
|
7
7
|
/** Host to run the server on. */
|
|
8
8
|
host?: string | undefined;
|
|
9
9
|
/** Port to run the server on. */
|
|
@@ -12,10 +12,10 @@ export type createServerParameters = DefinePoolParameters & ({
|
|
|
12
12
|
host?: undefined;
|
|
13
13
|
port?: undefined;
|
|
14
14
|
});
|
|
15
|
-
export type
|
|
15
|
+
export type CreateServerReturnType = Omit<Server<typeof IncomingMessage, typeof ServerResponse>, 'address'> & {
|
|
16
16
|
address(): AddressInfo | null;
|
|
17
17
|
start(): Promise<() => Promise<void>>;
|
|
18
18
|
stop(): Promise<void>;
|
|
19
19
|
};
|
|
20
|
-
export declare function createServer(parameters:
|
|
20
|
+
export declare function createServer(parameters: CreateServerParameters): CreateServerReturnType;
|
|
21
21
|
//# sourceMappingURL=server.d.ts.map
|
package/_lib/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EAEpB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAG3C,OAAO,EAAE,KAAK,oBAAoB,EAAc,MAAM,WAAW,CAAA;AAKjE,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EAEpB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAG3C,OAAO,EAAE,KAAK,oBAAoB,EAAc,MAAM,WAAW,CAAA;AAKjE,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,MAAM,CAAC,GAC/D,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,wBAAgB,YAAY,CAC1B,UAAU,EAAE,sBAAsB,GACjC,sBAAsB,CAmGxB"}
|
package/_lib/server.js
CHANGED
|
@@ -18,43 +18,46 @@ export function createServer(parameters) {
|
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
const { id, path } = extractPath(url);
|
|
21
|
-
if (typeof id === 'number'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
if (typeof id === 'number') {
|
|
22
|
+
if (path === '/') {
|
|
23
|
+
const { host, port } = pool.get(id) || (await pool.start(id));
|
|
24
|
+
return proxy.web(request, response, {
|
|
25
|
+
target: `http://${host}:${port}`,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (path === '/start') {
|
|
29
|
+
const { host, port } = await pool.start(id);
|
|
30
|
+
return done(response, 200, { host, port });
|
|
31
|
+
}
|
|
32
|
+
if (path === '/stop') {
|
|
33
|
+
await pool.stop(id);
|
|
34
|
+
return done(response, 200);
|
|
35
|
+
}
|
|
36
|
+
if (path === '/restart') {
|
|
37
|
+
await pool.restart(id);
|
|
38
|
+
return done(response, 200);
|
|
39
|
+
}
|
|
40
|
+
if (path === '/messages') {
|
|
41
|
+
const messages = pool.get(id)?.messages.get() || [];
|
|
42
|
+
return done(response, 200, messages);
|
|
43
|
+
}
|
|
26
44
|
}
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
.writeHead(200, { 'Content-Type': 'application/json' })
|
|
31
|
-
.end(JSON.stringify({ host, port }));
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (typeof id === 'number' && path === '/stop') {
|
|
35
|
-
await pool.stop(id);
|
|
36
|
-
response.writeHead(200, { 'Content-Type': 'application/json' }).end();
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (typeof id === 'number' && path === '/messages') {
|
|
40
|
-
const messages = pool.get(id)?.messages.get() || [];
|
|
41
|
-
response
|
|
42
|
-
.writeHead(200, { 'Content-Type': 'application/json' })
|
|
43
|
-
.end(JSON.stringify(messages));
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (path === '/healthcheck') {
|
|
47
|
-
response.writeHead(200, { 'Content-Type': 'application/json' }).end();
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
response.writeHead(404, { 'Content-Type': 'application/json' }).end();
|
|
51
|
-
return;
|
|
45
|
+
if (path === '/healthcheck')
|
|
46
|
+
return done(response, 200);
|
|
47
|
+
return done(response, 404);
|
|
52
48
|
}
|
|
53
49
|
catch (error) {
|
|
54
|
-
response
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
return done(response, 400, { message: error.message });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
proxy.on('proxyReq', (proxyReq, req) => {
|
|
54
|
+
;
|
|
55
|
+
req._proxyReq = proxyReq;
|
|
56
|
+
});
|
|
57
|
+
proxy.on('error', (err, req) => {
|
|
58
|
+
if (req.socket.destroyed && err.code === 'ECONNRESET') {
|
|
59
|
+
;
|
|
60
|
+
req._proxyReq.abort();
|
|
58
61
|
}
|
|
59
62
|
});
|
|
60
63
|
server.on('upgrade', async (request, socket, head) => {
|
|
@@ -91,4 +94,9 @@ export function createServer(parameters) {
|
|
|
91
94
|
},
|
|
92
95
|
});
|
|
93
96
|
}
|
|
97
|
+
function done(res, statusCode, json) {
|
|
98
|
+
return res
|
|
99
|
+
.writeHead(statusCode, { 'Content-Type': 'application/json' })
|
|
100
|
+
.end(json ? JSON.stringify(json) : undefined);
|
|
101
|
+
}
|
|
94
102
|
//# sourceMappingURL=server.js.map
|
package/_lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,IAAI,aAAa,GAC9B,MAAM,WAAW,CAAA;AAElB,OAAO,SAAS,MAAM,YAAY,CAAA;AAElC,OAAO,EAA6B,UAAU,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAA;AAyBvC,MAAM,UAAU,YAAY,CAC1B,UAAkC;IAElC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAA;IAEzD,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC;QAC9B,UAAU,EAAE,IAAI;QAChB,EAAE,EAAE,IAAI;KACT,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QACvD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,QAAQ,CAAC,GAAG,EAAE,CAAA;gBACd,OAAM;YACR,CAAC;YAED,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;YAErC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"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"}
|
package/_lib/utils.d.ts
CHANGED
|
@@ -16,15 +16,16 @@ 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 | boolean | number | bigint | undefined;
|
|
21
|
+
};
|
|
19
22
|
/**
|
|
20
23
|
* Converts an object of options to an array of command line arguments.
|
|
21
24
|
*
|
|
22
25
|
* @param options The options object.
|
|
23
26
|
* @returns The command line arguments.
|
|
24
27
|
*/
|
|
25
|
-
export declare function toArgs(
|
|
26
|
-
[key: string]: Record<string, string> | string | boolean | number | bigint | undefined;
|
|
27
|
-
}): string[];
|
|
28
|
+
export declare function toArgs(parameters: ToArgsParameters): string[];
|
|
28
29
|
/**
|
|
29
30
|
* Converts a camelCase string to a flag case string.
|
|
30
31
|
*
|
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,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,GAAG,EAAE,MAAM,GACR,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,CAAA;CACd,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,gBAAgB,YAsBlD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,UAErC"}
|
package/_lib/utils.js
CHANGED
|
@@ -36,8 +36,8 @@ 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
|
-
return Object.entries(
|
|
39
|
+
export function toArgs(parameters) {
|
|
40
|
+
return Object.entries(parameters).flatMap(([key, value]) => {
|
|
41
41
|
if (value === undefined)
|
|
42
42
|
return [];
|
|
43
43
|
if (typeof value === 'object' && value !== null)
|
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":"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;AAYD;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,UAA4B;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAA;QAElC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE;gBAC1D,IAAI,QAAQ,KAAK,SAAS;oBAAE,OAAO,EAAE,CAAA;gBACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;gBAC5B,MAAM,KAAK,GAAG,GAAG,MAAM,KAAK,QAAQ,EAAE,CAAA;gBACtC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;QAEJ,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAE5B,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,EAAE,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAEjC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QACpC,IAAI,WAAW,KAAK,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAErC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAA;AAC3E,CAAC"}
|
package/exports/index.ts
CHANGED
package/instance.test.ts
CHANGED
|
@@ -173,6 +173,38 @@ test('behavior: stop (error)', async () => {
|
|
|
173
173
|
expect(instance.status).toEqual('started')
|
|
174
174
|
})
|
|
175
175
|
|
|
176
|
+
test('behavior: restart', async () => {
|
|
177
|
+
let count = 0
|
|
178
|
+
const foo = defineInstance(() => {
|
|
179
|
+
return {
|
|
180
|
+
name: 'foo',
|
|
181
|
+
host: 'localhost',
|
|
182
|
+
port: 3000,
|
|
183
|
+
async start() {
|
|
184
|
+
count++
|
|
185
|
+
},
|
|
186
|
+
async stop() {},
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
const instance = foo()
|
|
191
|
+
await instance.start()
|
|
192
|
+
|
|
193
|
+
expect(instance.status).toEqual('started')
|
|
194
|
+
const promise_1 = instance.restart()
|
|
195
|
+
expect(instance.status).toEqual('restarting')
|
|
196
|
+
const promise_2 = instance.restart()
|
|
197
|
+
expect(instance.status).toEqual('restarting')
|
|
198
|
+
|
|
199
|
+
expect(promise_1).toStrictEqual(promise_2)
|
|
200
|
+
|
|
201
|
+
await promise_1
|
|
202
|
+
await promise_2
|
|
203
|
+
|
|
204
|
+
expect(instance.status).toEqual('started')
|
|
205
|
+
expect(count).toEqual(2)
|
|
206
|
+
})
|
|
207
|
+
|
|
176
208
|
test('behavior: events', async () => {
|
|
177
209
|
const foo = defineInstance(() => {
|
|
178
210
|
let count = 0
|
|
@@ -180,7 +212,7 @@ test('behavior: events', async () => {
|
|
|
180
212
|
name: 'foo',
|
|
181
213
|
host: 'localhost',
|
|
182
214
|
port: 3000,
|
|
183
|
-
async start({ emitter }) {
|
|
215
|
+
async start(_, { emitter }) {
|
|
184
216
|
emitter.emit('message', count.toString())
|
|
185
217
|
emitter.emit('listening')
|
|
186
218
|
if (count > 0) emitter.emit('stderr', 'stderr')
|
|
@@ -236,7 +268,7 @@ test('behavior: messages', async () => {
|
|
|
236
268
|
name: 'foo',
|
|
237
269
|
host: 'localhost',
|
|
238
270
|
port: 3000,
|
|
239
|
-
async start({ emitter }) {
|
|
271
|
+
async start(_, { emitter }) {
|
|
240
272
|
for (let i = 0; i < 50; i++) emitter.emit('message', i.toString())
|
|
241
273
|
},
|
|
242
274
|
async stop() {},
|