@delight-rpc/child-process 0.7.3 → 0.7.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/lib/client.js +25 -2
- package/lib/client.js.map +1 -1
- package/lib/server.js +13 -1
- package/lib/server.js.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +26 -2
- package/src/server.ts +13 -1
package/lib/client.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as DelightRPC from 'delight-rpc';
|
|
2
|
+
import { ChildProcess } from 'child_process';
|
|
2
3
|
import { Deferred } from 'extra-promise';
|
|
3
4
|
import { CustomError } from '@blackglory/errors';
|
|
4
5
|
import { raceAbortSignals, timeoutSignal, withAbortSignal } from 'extra-abort';
|
|
@@ -10,6 +11,14 @@ export function createClient(process, { parameterValidators, expectedVersion, ch
|
|
|
10
11
|
destructor.defer(abortAllPendings);
|
|
11
12
|
process.on('message', receive);
|
|
12
13
|
destructor.defer(() => process.off('message', receive));
|
|
14
|
+
if (process instanceof ChildProcess) {
|
|
15
|
+
process.on('exit', close);
|
|
16
|
+
destructor.defer(() => process.off('exit', close));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
process.on('exit', close);
|
|
20
|
+
destructor.defer(() => process.off('exit', close));
|
|
21
|
+
}
|
|
13
22
|
process.on('disconnect', abortAllPendings);
|
|
14
23
|
destructor.defer(() => process.off('disconnect', abortAllPendings));
|
|
15
24
|
const client = DelightRPC.createClient(async function send(request, signal) {
|
|
@@ -39,7 +48,10 @@ export function createClient(process, { parameterValidators, expectedVersion, ch
|
|
|
39
48
|
expectedVersion,
|
|
40
49
|
channel
|
|
41
50
|
});
|
|
42
|
-
return [client,
|
|
51
|
+
return [client, close];
|
|
52
|
+
function close() {
|
|
53
|
+
destructor.execute();
|
|
54
|
+
}
|
|
43
55
|
function abortAllPendings() {
|
|
44
56
|
for (const deferred of pendings.values()) {
|
|
45
57
|
deferred.reject(new ClientClosed());
|
|
@@ -59,6 +71,14 @@ export function createBatchClient(process, { expectedVersion, channel, timeout }
|
|
|
59
71
|
destructor.defer(abortAllPendings);
|
|
60
72
|
process.on('message', receive);
|
|
61
73
|
destructor.defer(() => process.off('message', receive));
|
|
74
|
+
if (process instanceof ChildProcess) {
|
|
75
|
+
process.on('exit', close);
|
|
76
|
+
destructor.defer(() => process.off('exit', close));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
process.on('exit', close);
|
|
80
|
+
destructor.defer(() => process.off('exit', close));
|
|
81
|
+
}
|
|
62
82
|
process.on('disconnect', abortAllPendings);
|
|
63
83
|
destructor.defer(() => process.off('disconnect', abortAllPendings));
|
|
64
84
|
const client = new DelightRPC.BatchClient(async function send(request) {
|
|
@@ -86,7 +106,10 @@ export function createBatchClient(process, { expectedVersion, channel, timeout }
|
|
|
86
106
|
expectedVersion,
|
|
87
107
|
channel
|
|
88
108
|
});
|
|
89
|
-
return [client,
|
|
109
|
+
return [client, close];
|
|
110
|
+
function close() {
|
|
111
|
+
destructor.execute();
|
|
112
|
+
}
|
|
90
113
|
function abortAllPendings() {
|
|
91
114
|
for (const deferred of pendings.values()) {
|
|
92
115
|
deferred.reject(new ClientClosed());
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as DelightRPC from 'delight-rpc';
|
|
2
|
+
import { ChildProcess } from 'child_process';
|
|
2
3
|
import { isntNull, pass } from '@blackglory/prelude';
|
|
3
4
|
import { AbortController } from 'extra-abort';
|
|
4
5
|
import { HashMap } from '@blackglory/structures';
|
|
@@ -9,9 +10,20 @@ export function createServer(api, process, { parameterValidators, version, chann
|
|
|
9
10
|
destructor.defer(abortAllPendings);
|
|
10
11
|
process.on('message', receive);
|
|
11
12
|
destructor.defer(() => process.off('message', receive));
|
|
13
|
+
if (process instanceof ChildProcess) {
|
|
14
|
+
process.on('exit', close);
|
|
15
|
+
destructor.defer(() => process.off('exit', close));
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
process.on('exit', close);
|
|
19
|
+
destructor.defer(() => process.off('exit', close));
|
|
20
|
+
}
|
|
12
21
|
process.on('disconnect', abortAllPendings);
|
|
13
22
|
destructor.defer(() => process.off('disconnect', abortAllPendings));
|
|
14
|
-
return
|
|
23
|
+
return close;
|
|
24
|
+
function close() {
|
|
25
|
+
destructor.execute();
|
|
26
|
+
}
|
|
15
27
|
function abortAllPendings() {
|
|
16
28
|
for (const controller of channelIdToController.values()) {
|
|
17
29
|
controller.abort();
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -24,6 +24,14 @@ export function createClient<IAPI extends object>(
|
|
|
24
24
|
process.on('message', receive)
|
|
25
25
|
destructor.defer(() => process.off('message', receive))
|
|
26
26
|
|
|
27
|
+
if (process instanceof ChildProcess) {
|
|
28
|
+
process.on('exit', close)
|
|
29
|
+
destructor.defer(() => process.off('exit', close))
|
|
30
|
+
} else {
|
|
31
|
+
process.on('exit', close)
|
|
32
|
+
destructor.defer(() => process.off('exit', close))
|
|
33
|
+
}
|
|
34
|
+
|
|
27
35
|
process.on('disconnect', abortAllPendings)
|
|
28
36
|
destructor.defer(() => process.off('disconnect', abortAllPendings))
|
|
29
37
|
|
|
@@ -62,7 +70,11 @@ export function createClient<IAPI extends object>(
|
|
|
62
70
|
}
|
|
63
71
|
)
|
|
64
72
|
|
|
65
|
-
return [client,
|
|
73
|
+
return [client, close]
|
|
74
|
+
|
|
75
|
+
function close(): void {
|
|
76
|
+
destructor.execute()
|
|
77
|
+
}
|
|
66
78
|
|
|
67
79
|
function abortAllPendings(): void {
|
|
68
80
|
for (const deferred of pendings.values()) {
|
|
@@ -95,6 +107,14 @@ export function createBatchClient<DataType>(
|
|
|
95
107
|
process.on('message', receive)
|
|
96
108
|
destructor.defer(() => process.off('message', receive))
|
|
97
109
|
|
|
110
|
+
if (process instanceof ChildProcess) {
|
|
111
|
+
process.on('exit', close)
|
|
112
|
+
destructor.defer(() => process.off('exit', close))
|
|
113
|
+
} else {
|
|
114
|
+
process.on('exit', close)
|
|
115
|
+
destructor.defer(() => process.off('exit', close))
|
|
116
|
+
}
|
|
117
|
+
|
|
98
118
|
process.on('disconnect', abortAllPendings)
|
|
99
119
|
destructor.defer(() => process.off('disconnect', abortAllPendings))
|
|
100
120
|
|
|
@@ -131,7 +151,11 @@ export function createBatchClient<DataType>(
|
|
|
131
151
|
}
|
|
132
152
|
)
|
|
133
153
|
|
|
134
|
-
return [client,
|
|
154
|
+
return [client, close]
|
|
155
|
+
|
|
156
|
+
function close(): void {
|
|
157
|
+
destructor.execute()
|
|
158
|
+
}
|
|
135
159
|
|
|
136
160
|
function abortAllPendings(): void {
|
|
137
161
|
for (const deferred of pendings.values()) {
|
package/src/server.ts
CHANGED
|
@@ -29,10 +29,22 @@ export function createServer<IAPI extends object>(
|
|
|
29
29
|
process.on('message', receive)
|
|
30
30
|
destructor.defer(() => process.off('message', receive))
|
|
31
31
|
|
|
32
|
+
if (process instanceof ChildProcess) {
|
|
33
|
+
process.on('exit', close)
|
|
34
|
+
destructor.defer(() => process.off('exit', close))
|
|
35
|
+
} else {
|
|
36
|
+
process.on('exit', close)
|
|
37
|
+
destructor.defer(() => process.off('exit', close))
|
|
38
|
+
}
|
|
39
|
+
|
|
32
40
|
process.on('disconnect', abortAllPendings)
|
|
33
41
|
destructor.defer(() => process.off('disconnect', abortAllPendings))
|
|
34
42
|
|
|
35
|
-
return
|
|
43
|
+
return close
|
|
44
|
+
|
|
45
|
+
function close(): void {
|
|
46
|
+
destructor.execute()
|
|
47
|
+
}
|
|
36
48
|
|
|
37
49
|
function abortAllPendings(): void {
|
|
38
50
|
for (const controller of channelIdToController.values()) {
|