@delight-rpc/child-process 0.6.6 → 0.7.1
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.d.ts +0 -2
- package/lib/client.js.map +1 -1
- package/lib/server.d.ts +0 -2
- package/lib/server.js +18 -12
- package/lib/server.js.map +1 -1
- package/package.json +24 -28
- package/src/server.ts +27 -13
package/lib/client.d.ts
CHANGED
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;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,UAAU,YAAY,CAC1B,OAAsC,EACtC,EAAE,mBAAmB,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,KAKpD,EAAE;IAEN,MAAM,QAAQ,GAA8C,IAAI,GAAG,EAAE,CAAA;IAErE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAE9B,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CACpC,KAAK,UAAU,IAAI,CAAC,OAAO,EAAE,MAAM;QACjC,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAsB,CAAA;QAC9C,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7B,IAAI;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/server.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import * as DelightRPC from 'delight-rpc';
|
|
4
2
|
import { ChildProcess } from 'child_process';
|
|
5
3
|
export declare function createServer<IAPI extends object>(api: DelightRPC.ImplementationOf<IAPI>, process: ChildProcess | NodeJS.Process, { parameterValidators, version, channel, ownPropsOnly }?: {
|
package/lib/server.js
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
import * as DelightRPC from 'delight-rpc';
|
|
2
2
|
import { isntNull, pass } from '@blackglory/prelude';
|
|
3
3
|
import { AbortController } from 'extra-abort';
|
|
4
|
+
import { HashMap } from '@blackglory/structures';
|
|
4
5
|
export function createServer(api, process, { parameterValidators, version, channel, ownPropsOnly } = {}) {
|
|
5
|
-
const
|
|
6
|
-
process.on('message',
|
|
7
|
-
process.on('disconnect',
|
|
8
|
-
|
|
6
|
+
const channelIdToController = new HashMap(({ channel, id }) => JSON.stringify([channel, id]));
|
|
7
|
+
process.on('message', handleMessage);
|
|
8
|
+
process.on('disconnect', abortAllPendings);
|
|
9
|
+
return () => {
|
|
10
|
+
process.off('message', handleMessage);
|
|
11
|
+
process.off('disconnect', abortAllPendings);
|
|
12
|
+
abortAllPendings();
|
|
13
|
+
};
|
|
14
|
+
function abortAllPendings() {
|
|
15
|
+
for (const controller of channelIdToController.values()) {
|
|
9
16
|
controller.abort();
|
|
10
17
|
}
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async function handler(message) {
|
|
18
|
+
channelIdToController.clear();
|
|
19
|
+
}
|
|
20
|
+
async function handleMessage(message) {
|
|
15
21
|
var _a;
|
|
16
22
|
if (DelightRPC.isRequest(message) || DelightRPC.isBatchRequest(message)) {
|
|
17
23
|
const controller = new AbortController();
|
|
18
|
-
|
|
24
|
+
channelIdToController.set(message, controller);
|
|
19
25
|
try {
|
|
20
26
|
const result = await DelightRPC.createResponse(api, message, {
|
|
21
27
|
parameterValidators,
|
|
@@ -38,13 +44,13 @@ export function createServer(api, process, { parameterValidators, version, chann
|
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
finally {
|
|
41
|
-
|
|
47
|
+
channelIdToController.delete(message);
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
else if (DelightRPC.isAbort(message)) {
|
|
45
51
|
if (DelightRPC.matchChannel(message, channel)) {
|
|
46
|
-
(_a =
|
|
47
|
-
|
|
52
|
+
(_a = channelIdToController.get(message)) === null || _a === void 0 ? void 0 : _a.abort();
|
|
53
|
+
channelIdToController.delete(message);
|
|
48
54
|
}
|
|
49
55
|
}
|
|
50
56
|
}
|
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;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,MAAM,UAAU,YAAY,CAC1B,GAAsC,EACtC,OAAsC,EACtC,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,KAKjD,EAAE;IAEN,MAAM,qBAAqB,GAMvB,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAEnE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACpC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;IAC1C,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;QAC3C,gBAAgB,EAAE,CAAA;IACpB,CAAC,CAAA;IAED,SAAS,gBAAgB;QACvB,KAAK,MAAM,UAAU,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YACxD,UAAU,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC;QAED,qBAAqB,CAAC,KAAK,EAAE,CAAA;IAC/B,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,OAAgB;;QAC3C,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;YACxC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAE9C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,cAAc,CAC5C,GAAG,EACH,OAAO,EACP;oBACE,mBAAmB;oBACnB,OAAO;oBACP,OAAO;oBACP,YAAY;oBACZ,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CACF,CAAA;gBAED,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAErB,OAAO,CAAC,IAAK,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;wBAC1B,IAAI,GAAG,EAAE,CAAC;4BACR,IAAK,GAA6B,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;gCACrE,IAAI,EAAE,CAAA;4BACR,CAAC;iCAAM,CAAC;gCACN,MAAM,GAAG,CAAA;4BACX,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9C,MAAA,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,0CAAE,KAAK,EAAE,CAAA;gBAC3C,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delight-rpc/child-process",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"files": [
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"types": "lib/index.d.ts",
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"engines": {
|
|
15
|
-
"node": ">=
|
|
15
|
+
"node": ">=22"
|
|
16
16
|
},
|
|
17
17
|
"repository": "git@github.com:delight-rpc/child-process.git",
|
|
18
18
|
"author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
|
|
@@ -20,8 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"prepare": "ts-patch install -s",
|
|
22
22
|
"lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src",
|
|
23
|
-
"test": "
|
|
24
|
-
"test:debug": "cross-env NODE_OPTIONS='--experimental-vm-modules --loader ts-node/esm' node --inspect-brk node_modules/.bin/jest --runInBand --config jest.config.cjs",
|
|
23
|
+
"test": "vitest run",
|
|
25
24
|
"prepublishOnly": "run-s prepare clean build",
|
|
26
25
|
"clean": "rimraf lib",
|
|
27
26
|
"build": "tsc --project tsconfig.build.json",
|
|
@@ -34,37 +33,34 @@
|
|
|
34
33
|
}
|
|
35
34
|
},
|
|
36
35
|
"devDependencies": {
|
|
37
|
-
"@
|
|
38
|
-
"@commitlint/
|
|
39
|
-
"@
|
|
40
|
-
"@types/
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"@typescript-eslint/parser": "^5.55.0",
|
|
44
|
-
"cross-env": "^7.0.3",
|
|
45
|
-
"delight-rpc": "^6.0.0",
|
|
46
|
-
"eslint": "8.36.0",
|
|
36
|
+
"@commitlint/cli": "^20.4.2",
|
|
37
|
+
"@commitlint/config-conventional": "^20.4.2",
|
|
38
|
+
"@eslint/js": "^10.0.1",
|
|
39
|
+
"@types/node": "22",
|
|
40
|
+
"delight-rpc": "^7.0.0",
|
|
41
|
+
"eslint": "^10.0.2",
|
|
47
42
|
"husky": "4",
|
|
48
|
-
"jest": "^29.5.0",
|
|
49
|
-
"jest-resolve": "^29.5.0",
|
|
50
43
|
"npm-run-all": "^4.1.5",
|
|
51
|
-
"return-style": "^
|
|
52
|
-
"rimraf": "^
|
|
44
|
+
"return-style": "^4.0.0",
|
|
45
|
+
"rimraf": "^6.1.3",
|
|
53
46
|
"standard-version": "^9.5.0",
|
|
54
|
-
"ts-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"typescript": "
|
|
58
|
-
"
|
|
47
|
+
"ts-patch": "^3.3.0",
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"typescript-eslint": "^8.56.1",
|
|
50
|
+
"typescript-transform-paths": "^3.5.6",
|
|
51
|
+
"vite": "^7.3.1",
|
|
52
|
+
"vite-tsconfig-paths": "^6.1.1",
|
|
53
|
+
"vitest": "^4.0.18"
|
|
59
54
|
},
|
|
60
55
|
"dependencies": {
|
|
61
|
-
"@blackglory/errors": "^3.
|
|
62
|
-
"@blackglory/prelude": "^0.
|
|
56
|
+
"@blackglory/errors": "^3.1.0",
|
|
57
|
+
"@blackglory/prelude": "^0.4.0",
|
|
58
|
+
"@blackglory/structures": "^0.14.13",
|
|
63
59
|
"@delight-rpc/protocol": "^4.0.0",
|
|
64
|
-
"extra-abort": "^0.
|
|
65
|
-
"extra-promise": "^
|
|
60
|
+
"extra-abort": "^0.4.1",
|
|
61
|
+
"extra-promise": "^7.1.1"
|
|
66
62
|
},
|
|
67
63
|
"peerDependencies": {
|
|
68
|
-
"delight-rpc": "^5.0.0 || ^6.0.0"
|
|
64
|
+
"delight-rpc": "^5.0.0 || ^6.0.0 || ^7.0.0"
|
|
69
65
|
}
|
|
70
66
|
}
|
package/src/server.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as DelightRPC from 'delight-rpc'
|
|
2
2
|
import { ChildProcess } from 'child_process'
|
|
3
|
-
import {
|
|
3
|
+
import { isntNull, pass } from '@blackglory/prelude'
|
|
4
4
|
import { AbortController } from 'extra-abort'
|
|
5
|
+
import { HashMap } from '@blackglory/structures'
|
|
5
6
|
|
|
6
7
|
export function createServer<IAPI extends object>(
|
|
7
8
|
api: DelightRPC.ImplementationOf<IAPI>
|
|
@@ -13,22 +14,34 @@ export function createServer<IAPI extends object>(
|
|
|
13
14
|
ownPropsOnly?: boolean
|
|
14
15
|
} = {}
|
|
15
16
|
): () => void {
|
|
16
|
-
const
|
|
17
|
+
const channelIdToController: HashMap<
|
|
18
|
+
{
|
|
19
|
+
channel?: string
|
|
20
|
+
, id: string
|
|
21
|
+
}
|
|
22
|
+
, AbortController
|
|
23
|
+
> = new HashMap(({ channel, id }) => JSON.stringify([channel, id]))
|
|
24
|
+
|
|
25
|
+
process.on('message', handleMessage)
|
|
26
|
+
process.on('disconnect', abortAllPendings)
|
|
27
|
+
return () => {
|
|
28
|
+
process.off('message', handleMessage)
|
|
29
|
+
process.off('disconnect', abortAllPendings)
|
|
30
|
+
abortAllPendings()
|
|
31
|
+
}
|
|
17
32
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
for (const controller of idToController.values()) {
|
|
33
|
+
function abortAllPendings(): void {
|
|
34
|
+
for (const controller of channelIdToController.values()) {
|
|
21
35
|
controller.abort()
|
|
22
36
|
}
|
|
23
37
|
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
return () => process.off('message', handler)
|
|
38
|
+
channelIdToController.clear()
|
|
39
|
+
}
|
|
27
40
|
|
|
28
|
-
async function
|
|
41
|
+
async function handleMessage(message: unknown): Promise<void> {
|
|
29
42
|
if (DelightRPC.isRequest(message) || DelightRPC.isBatchRequest(message)) {
|
|
30
43
|
const controller = new AbortController()
|
|
31
|
-
|
|
44
|
+
channelIdToController.set(message, controller)
|
|
32
45
|
|
|
33
46
|
try {
|
|
34
47
|
const result = await DelightRPC.createResponse(
|
|
@@ -44,6 +57,7 @@ export function createServer<IAPI extends object>(
|
|
|
44
57
|
)
|
|
45
58
|
|
|
46
59
|
if (isntNull(result)) {
|
|
60
|
+
// @ts-expect-error TypeScript无法正确合并`ChildProcess` 和 `NodeJS.Process`的send方法.
|
|
47
61
|
process.send!(result, err => {
|
|
48
62
|
if (err) {
|
|
49
63
|
if ((err as NodeJS.ErrnoException).code === 'ERR_IPC_CHANNEL_CLOSED') {
|
|
@@ -55,12 +69,12 @@ export function createServer<IAPI extends object>(
|
|
|
55
69
|
})
|
|
56
70
|
}
|
|
57
71
|
} finally {
|
|
58
|
-
|
|
72
|
+
channelIdToController.delete(message)
|
|
59
73
|
}
|
|
60
74
|
} else if (DelightRPC.isAbort(message)) {
|
|
61
75
|
if (DelightRPC.matchChannel(message, channel)) {
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
channelIdToController.get(message)?.abort()
|
|
77
|
+
channelIdToController.delete(message)
|
|
64
78
|
}
|
|
65
79
|
}
|
|
66
80
|
}
|