prool 0.0.3 → 0.0.4
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 +7 -0
- package/_lib/instance.d.ts +5 -2
- package/_lib/instance.d.ts.map +1 -1
- package/_lib/instance.js +19 -1
- package/_lib/instance.js.map +1 -1
- package/_lib/pool.d.ts +1 -0
- package/_lib/pool.d.ts.map +1 -1
- package/_lib/pool.js +55 -51
- package/_lib/pool.js.map +1 -1
- package/_lib/server.d.ts.map +1 -1
- package/_lib/server.js +42 -34
- package/_lib/server.js.map +1 -1
- package/instance.test.ts +32 -0
- package/instance.ts +31 -3
- package/package.json +1 -1
- package/pool.test.ts +41 -0
- package/pool.ts +66 -58
- package/server.test.ts +101 -18
- package/server.ts +42 -34
- package/tsconfig.build.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# prool
|
|
2
2
|
|
|
3
|
+
## 0.0.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`c208423`](https://github.com/wevm/prool/commit/c2084231b277cecb840e4f9957cc4fc2e5b0b7a2) Thanks [@jxom](https://github.com/jxom)! - Added `/restart` endpoint to the Pool Server.
|
|
8
|
+
Added `restart` method to pool instances.
|
|
9
|
+
|
|
3
10
|
## 0.0.3
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
package/_lib/instance.d.ts
CHANGED
|
@@ -59,16 +59,19 @@ export type Instance<_internal extends object | undefined = object | undefined>
|
|
|
59
59
|
clear(): void;
|
|
60
60
|
get(): string[];
|
|
61
61
|
};
|
|
62
|
+
/**
|
|
63
|
+
* Retarts the instance.
|
|
64
|
+
*/
|
|
65
|
+
restart(): Promise<void>;
|
|
62
66
|
/**
|
|
63
67
|
* Status of the instance.
|
|
64
68
|
*
|
|
65
69
|
* @default "idle"
|
|
66
70
|
*/
|
|
67
|
-
status: 'idle' | 'stopped' | 'starting' | 'started' | 'stopping';
|
|
71
|
+
status: 'idle' | 'restarting' | 'stopped' | 'starting' | 'started' | 'stopping';
|
|
68
72
|
/**
|
|
69
73
|
* Starts the instance.
|
|
70
74
|
*
|
|
71
|
-
* @param options - Options for starting the instance.
|
|
72
75
|
* @returns A function to stop the instance.
|
|
73
76
|
*/
|
|
74
77
|
start(): Promise<() => void>;
|
package/_lib/instance.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../instance.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC1D,SAAS,EAAE,EAAE,CAAA;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CAC1B,CAAA;AAED,KAAK,6BAA6B,GAAG;IACnC,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAA;IACjC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAC3B,CAAA;AACD,KAAK,4BAA4B,GAAG;IAClC,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAA;IACjC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,gBAAgB,CAC1B,UAAU,EACV,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACvD,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG;IACzE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACjC,KAAK,CACH,OAAO,EAAE,oBAAoB,GAAG,6BAA6B,GAC5D,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3D,CAAA;AAED,MAAM,MAAM,QAAQ,CAClB,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACvD,IAAI,CACN,YAAY,CAAC,UAAU,CAAC,EACtB,aAAa,GACb,KAAK,GACL,IAAI,GACJ,MAAM,GACN,oBAAoB,GACpB,gBAAgB,CACnB,GAAG;IACF,SAAS,EAAE,SAAS,CAAA;IACpB;;OAEG;IACH,MAAM,CACJ,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAA;IACtC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,QAAQ,EAAE;QAAE,KAAK,IAAI,IAAI,CAAC;QAAC,GAAG,IAAI,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C;;;;OAIG;IACH,MAAM,
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../instance.ts"],"names":[],"mappings":"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"}
|
package/_lib/instance.js
CHANGED
|
@@ -30,12 +30,14 @@ export function defineInstance(fn) {
|
|
|
30
30
|
...fn(parameters),
|
|
31
31
|
...createParameters,
|
|
32
32
|
};
|
|
33
|
-
const { messageBuffer = 20, timeout
|
|
33
|
+
const { messageBuffer = 20, timeout } = options;
|
|
34
|
+
let restartResolver = Promise.withResolvers();
|
|
34
35
|
let startResolver = Promise.withResolvers();
|
|
35
36
|
let stopResolver = Promise.withResolvers();
|
|
36
37
|
const emitter = new EventEmitter();
|
|
37
38
|
let messages = [];
|
|
38
39
|
let status = 'idle';
|
|
40
|
+
let restarting = false;
|
|
39
41
|
function onExit() {
|
|
40
42
|
status = 'stopped';
|
|
41
43
|
}
|
|
@@ -61,6 +63,8 @@ export function defineInstance(fn) {
|
|
|
61
63
|
name,
|
|
62
64
|
port,
|
|
63
65
|
get status() {
|
|
66
|
+
if (restarting)
|
|
67
|
+
return 'restarting';
|
|
64
68
|
return status;
|
|
65
69
|
},
|
|
66
70
|
async start() {
|
|
@@ -127,6 +131,20 @@ export function defineInstance(fn) {
|
|
|
127
131
|
});
|
|
128
132
|
return stopResolver.promise;
|
|
129
133
|
},
|
|
134
|
+
async restart() {
|
|
135
|
+
if (restarting)
|
|
136
|
+
return restartResolver.promise;
|
|
137
|
+
restarting = true;
|
|
138
|
+
this.stop()
|
|
139
|
+
.then(() => this.start.bind(this)())
|
|
140
|
+
.then(() => restartResolver.resolve())
|
|
141
|
+
.catch(restartResolver.reject)
|
|
142
|
+
.finally(() => {
|
|
143
|
+
restartResolver = Promise.withResolvers();
|
|
144
|
+
restarting = false;
|
|
145
|
+
});
|
|
146
|
+
return restartResolver.promise;
|
|
147
|
+
},
|
|
130
148
|
addListener: emitter.addListener.bind(emitter),
|
|
131
149
|
off: emitter.off.bind(emitter),
|
|
132
150
|
on: emitter.on.bind(emitter),
|
package/_lib/instance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../instance.ts"],"names":[],"mappings":"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"}
|
package/_lib/pool.d.ts
CHANGED
package/_lib/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../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,GAAG,MAAM,IAAI,IAAI,CACnC,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,CAAA;KACpB,CAAA;IACD,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;AAE1D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAG,MAAM,EACrC,UAAU,EAAE,oBAAoB,GAC/B,oBAAoB,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../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,GAAG,MAAM,IAAI,IAAI,CACnC,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,CAAA;KACpB,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,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;AAE1D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAG,MAAM,EACrC,UAAU,EAAE,oBAAoB,GAC/B,oBAAoB,CAAC,GAAG,CAAC,CAgJ3B"}
|
package/_lib/pool.js
CHANGED
|
@@ -23,6 +23,7 @@ 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,
|
|
@@ -36,89 +37,92 @@ export function definePool(parameters) {
|
|
|
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 { port = await getPort() } = options;
|
|
87
|
+
const instance_ = instances.get(key) || instance.create({ port });
|
|
88
|
+
instance_
|
|
89
|
+
.start()
|
|
90
|
+
.then(() => {
|
|
76
91
|
instances.set(key, instance_);
|
|
77
92
|
resolver.resolve(instance_);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
promises.start.delete(key);
|
|
84
|
-
}
|
|
93
|
+
})
|
|
94
|
+
.catch(resolver.reject)
|
|
95
|
+
.finally(() => promises.start.delete(key));
|
|
85
96
|
return resolver.promise;
|
|
86
97
|
},
|
|
87
98
|
async stop(key) {
|
|
88
99
|
const stopPromise = promises.stop.get(key);
|
|
89
100
|
if (stopPromise)
|
|
90
101
|
return stopPromise;
|
|
102
|
+
const instance_ = instances.get(key);
|
|
103
|
+
if (!instance_)
|
|
104
|
+
return;
|
|
91
105
|
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
|
-
}
|
|
106
|
+
promises.stop.set(key, resolver.promise);
|
|
107
|
+
instance_
|
|
108
|
+
.stop()
|
|
109
|
+
.then(resolver.resolve)
|
|
110
|
+
.catch(resolver.reject)
|
|
111
|
+
.finally(() => promises.stop.delete(key));
|
|
112
|
+
return resolver.promise;
|
|
108
113
|
},
|
|
109
114
|
async stopAll() {
|
|
110
115
|
if (promises.stopAll)
|
|
111
116
|
return promises.stopAll;
|
|
112
117
|
const resolver = Promise.withResolvers();
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
118
|
+
promises.stopAll = resolver.promise;
|
|
119
|
+
Promise.all([...instances.keys()].map((key) => this.stop(key)))
|
|
120
|
+
.then(() => {
|
|
116
121
|
promises.stopAll = undefined;
|
|
117
122
|
resolver.resolve();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
123
|
+
})
|
|
124
|
+
.catch(resolver.reject);
|
|
125
|
+
return resolver.promise;
|
|
122
126
|
},
|
|
123
127
|
get size() {
|
|
124
128
|
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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"}
|
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,GACvD,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,
|
|
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,GACvD,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/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
|
package/instance.ts
CHANGED
|
@@ -75,16 +75,25 @@ export type Instance<
|
|
|
75
75
|
* @example ["Listening on http://127.0.0.1", "Started successfully."]
|
|
76
76
|
*/
|
|
77
77
|
messages: { clear(): void; get(): string[] }
|
|
78
|
+
/**
|
|
79
|
+
* Retarts the instance.
|
|
80
|
+
*/
|
|
81
|
+
restart(): Promise<void>
|
|
78
82
|
/**
|
|
79
83
|
* Status of the instance.
|
|
80
84
|
*
|
|
81
85
|
* @default "idle"
|
|
82
86
|
*/
|
|
83
|
-
status:
|
|
87
|
+
status:
|
|
88
|
+
| 'idle'
|
|
89
|
+
| 'restarting'
|
|
90
|
+
| 'stopped'
|
|
91
|
+
| 'starting'
|
|
92
|
+
| 'started'
|
|
93
|
+
| 'stopping'
|
|
84
94
|
/**
|
|
85
95
|
* Starts the instance.
|
|
86
96
|
*
|
|
87
|
-
* @param options - Options for starting the instance.
|
|
88
97
|
* @returns A function to stop the instance.
|
|
89
98
|
*/
|
|
90
99
|
start(): Promise<() => void>
|
|
@@ -147,8 +156,9 @@ export function defineInstance<
|
|
|
147
156
|
...fn(parameters),
|
|
148
157
|
...createParameters,
|
|
149
158
|
}
|
|
150
|
-
const { messageBuffer = 20, timeout
|
|
159
|
+
const { messageBuffer = 20, timeout } = options
|
|
151
160
|
|
|
161
|
+
let restartResolver = Promise.withResolvers<void>()
|
|
152
162
|
let startResolver = Promise.withResolvers<() => void>()
|
|
153
163
|
let stopResolver = Promise.withResolvers<void>()
|
|
154
164
|
|
|
@@ -156,6 +166,7 @@ export function defineInstance<
|
|
|
156
166
|
|
|
157
167
|
let messages: string[] = []
|
|
158
168
|
let status: Instance['status'] = 'idle'
|
|
169
|
+
let restarting = false
|
|
159
170
|
|
|
160
171
|
function onExit() {
|
|
161
172
|
status = 'stopped'
|
|
@@ -182,6 +193,7 @@ export function defineInstance<
|
|
|
182
193
|
name,
|
|
183
194
|
port,
|
|
184
195
|
get status() {
|
|
196
|
+
if (restarting) return 'restarting'
|
|
185
197
|
return status
|
|
186
198
|
},
|
|
187
199
|
async start() {
|
|
@@ -262,6 +274,22 @@ export function defineInstance<
|
|
|
262
274
|
|
|
263
275
|
return stopResolver.promise
|
|
264
276
|
},
|
|
277
|
+
async restart() {
|
|
278
|
+
if (restarting) return restartResolver.promise
|
|
279
|
+
|
|
280
|
+
restarting = true
|
|
281
|
+
|
|
282
|
+
this.stop()
|
|
283
|
+
.then(() => this.start.bind(this)())
|
|
284
|
+
.then(() => restartResolver.resolve())
|
|
285
|
+
.catch(restartResolver.reject)
|
|
286
|
+
.finally(() => {
|
|
287
|
+
restartResolver = Promise.withResolvers<void>()
|
|
288
|
+
restarting = false
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
return restartResolver.promise
|
|
292
|
+
},
|
|
265
293
|
|
|
266
294
|
addListener: emitter.addListener.bind(emitter),
|
|
267
295
|
off: emitter.off.bind(emitter),
|
package/package.json
CHANGED
package/pool.test.ts
CHANGED
|
@@ -82,6 +82,26 @@ describe.each([{ instance: anvil() }])(
|
|
|
82
82
|
expect(pool.size).toEqual(0)
|
|
83
83
|
})
|
|
84
84
|
|
|
85
|
+
test('restart', async () => {
|
|
86
|
+
pool = definePool({
|
|
87
|
+
instance,
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
const instance_1 = await pool.start(1)
|
|
91
|
+
const instance_2 = await pool.start(2)
|
|
92
|
+
const instance_3 = await pool.start(3)
|
|
93
|
+
|
|
94
|
+
expect(instance_1.status).toBe('started')
|
|
95
|
+
expect(instance_2.status).toBe('started')
|
|
96
|
+
expect(instance_3.status).toBe('started')
|
|
97
|
+
expect(pool.size).toEqual(3)
|
|
98
|
+
|
|
99
|
+
const promise_1 = pool.restart(1)
|
|
100
|
+
expect(instance_1.status).toBe('restarting')
|
|
101
|
+
await promise_1
|
|
102
|
+
expect(instance_1.status).toBe('started')
|
|
103
|
+
})
|
|
104
|
+
|
|
85
105
|
test('start > stop > start', async () => {
|
|
86
106
|
pool = definePool({
|
|
87
107
|
instance,
|
|
@@ -160,6 +180,27 @@ describe.each([{ instance: anvil() }])(
|
|
|
160
180
|
await promise_2
|
|
161
181
|
})
|
|
162
182
|
|
|
183
|
+
test('behavior: restart more than once', async () => {
|
|
184
|
+
pool = definePool({
|
|
185
|
+
instance,
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
const instance_1 = await pool.start(1)
|
|
189
|
+
expect(instance_1.status).toBe('started')
|
|
190
|
+
|
|
191
|
+
const promise_1 = pool.restart(1)
|
|
192
|
+
expect(instance_1.status).toBe('restarting')
|
|
193
|
+
const promise_2 = pool.restart(1)
|
|
194
|
+
expect(instance_1.status).toBe('restarting')
|
|
195
|
+
|
|
196
|
+
expect(promise_1).toStrictEqual(promise_2)
|
|
197
|
+
|
|
198
|
+
await promise_1
|
|
199
|
+
expect(instance_1.status).toBe('started')
|
|
200
|
+
await promise_2
|
|
201
|
+
expect(instance_1.status).toBe('started')
|
|
202
|
+
})
|
|
203
|
+
|
|
163
204
|
test('behavior: stop more than once', async () => {
|
|
164
205
|
pool = definePool({
|
|
165
206
|
instance,
|