@3fv/electron-utility-process-manager 1.0.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/.prettierrc.js +14 -0
- package/README.md +166 -0
- package/examples/lib-examples/complex/complex-main.d.ts +1 -0
- package/examples/lib-examples/complex/complex-main.js +108 -0
- package/examples/lib-examples/complex/complex-main.js.map +1 -0
- package/examples/lib-examples/complex/complex-node.d.ts +1 -0
- package/examples/lib-examples/complex/complex-node.js +17 -0
- package/examples/lib-examples/complex/complex-node.js.map +1 -0
- package/examples/lib-examples/complex/complex-renderer.d.ts +1 -0
- package/examples/lib-examples/complex/complex-renderer.js +18 -0
- package/examples/lib-examples/complex/complex-renderer.js.map +1 -0
- package/examples/lib-examples/complex/complex-types.d.ts +3 -0
- package/examples/lib-examples/complex/complex-types.js +3 -0
- package/examples/lib-examples/complex/complex-types.js.map +1 -0
- package/examples/lib-examples/simple/simple-main.d.ts +1 -0
- package/examples/lib-examples/simple/simple-main.js +106 -0
- package/examples/lib-examples/simple/simple-main.js.map +1 -0
- package/examples/lib-examples/simple/simple-node.d.ts +1 -0
- package/examples/lib-examples/simple/simple-node.js +17 -0
- package/examples/lib-examples/simple/simple-node.js.map +1 -0
- package/examples/lib-examples/simple/simple-renderer.d.ts +1 -0
- package/examples/lib-examples/simple/simple-renderer.js +17 -0
- package/examples/lib-examples/simple/simple-renderer.js.map +1 -0
- package/jest.config.js +20 -0
- package/lib/cjs/common/clients.d.ts +103 -0
- package/lib/cjs/common/clients.js +180 -0
- package/lib/cjs/common/clients.js.map +1 -0
- package/lib/cjs/common/guards.d.ts +4 -0
- package/lib/cjs/common/guards.js +12 -0
- package/lib/cjs/common/guards.js.map +1 -0
- package/lib/cjs/common/index.d.ts +3 -0
- package/lib/cjs/common/index.js +20 -0
- package/lib/cjs/common/index.js.map +1 -0
- package/lib/cjs/common/types.d.ts +49 -0
- package/lib/cjs/common/types.js +21 -0
- package/lib/cjs/common/types.js.map +1 -0
- package/lib/cjs/index.d.ts +4 -0
- package/lib/cjs/index.js +34 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/main/UPMMainService.d.ts +69 -0
- package/lib/cjs/main/UPMMainService.js +292 -0
- package/lib/cjs/main/UPMMainService.js.map +1 -0
- package/lib/cjs/main/UPMMainServiceManager.d.ts +58 -0
- package/lib/cjs/main/UPMMainServiceManager.js +168 -0
- package/lib/cjs/main/UPMMainServiceManager.js.map +1 -0
- package/lib/cjs/main/index.d.ts +2 -0
- package/lib/cjs/main/index.js +19 -0
- package/lib/cjs/main/index.js.map +1 -0
- package/lib/cjs/node/UPMNodeProcess.d.ts +25 -0
- package/lib/cjs/node/UPMNodeProcess.js +155 -0
- package/lib/cjs/node/UPMNodeProcess.js.map +1 -0
- package/lib/cjs/node/index.d.ts +3 -0
- package/lib/cjs/node/index.js +23 -0
- package/lib/cjs/node/index.js.map +1 -0
- package/lib/cjs/renderer/UPMRendererClientFactory.d.ts +5 -0
- package/lib/cjs/renderer/UPMRendererClientFactory.js +77 -0
- package/lib/cjs/renderer/UPMRendererClientFactory.js.map +1 -0
- package/lib/cjs/renderer/index.d.ts +3 -0
- package/lib/cjs/renderer/index.js +23 -0
- package/lib/cjs/renderer/index.js.map +1 -0
- package/lib/mjs/common/clients.d.ts +103 -0
- package/lib/mjs/common/clients.js +173 -0
- package/lib/mjs/common/clients.js.map +1 -0
- package/lib/mjs/common/guards.d.ts +4 -0
- package/lib/mjs/common/guards.js +8 -0
- package/lib/mjs/common/guards.js.map +1 -0
- package/lib/mjs/common/index.d.ts +3 -0
- package/lib/mjs/common/index.js +4 -0
- package/lib/mjs/common/index.js.map +1 -0
- package/lib/mjs/common/types.d.ts +49 -0
- package/lib/mjs/common/types.js +18 -0
- package/lib/mjs/common/types.js.map +1 -0
- package/lib/mjs/index.d.ts +4 -0
- package/lib/mjs/index.js +5 -0
- package/lib/mjs/index.js.map +1 -0
- package/lib/mjs/main/UPMMainService.d.ts +69 -0
- package/lib/mjs/main/UPMMainService.js +262 -0
- package/lib/mjs/main/UPMMainService.js.map +1 -0
- package/lib/mjs/main/UPMMainServiceManager.d.ts +58 -0
- package/lib/mjs/main/UPMMainServiceManager.js +138 -0
- package/lib/mjs/main/UPMMainServiceManager.js.map +1 -0
- package/lib/mjs/main/index.d.ts +2 -0
- package/lib/mjs/main/index.js +3 -0
- package/lib/mjs/main/index.js.map +1 -0
- package/lib/mjs/node/UPMNodeProcess.d.ts +25 -0
- package/lib/mjs/node/UPMNodeProcess.js +125 -0
- package/lib/mjs/node/UPMNodeProcess.js.map +1 -0
- package/lib/mjs/node/index.d.ts +3 -0
- package/lib/mjs/node/index.js +4 -0
- package/lib/mjs/node/index.js.map +1 -0
- package/lib/mjs/renderer/UPMRendererClientFactory.d.ts +5 -0
- package/lib/mjs/renderer/UPMRendererClientFactory.js +47 -0
- package/lib/mjs/renderer/UPMRendererClientFactory.js.map +1 -0
- package/lib/mjs/renderer/index.d.ts +3 -0
- package/lib/mjs/renderer/index.js +4 -0
- package/lib/mjs/renderer/index.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.UPMNodeProcess = void 0;
|
|
30
|
+
const guard_1 = require("@3fv/guard");
|
|
31
|
+
const ts_pattern_1 = require("ts-pattern");
|
|
32
|
+
const UPM = __importStar(require("../common"));
|
|
33
|
+
const tracer_1 = __importDefault(require("tracer"));
|
|
34
|
+
const prelude_ts_1 = require("@3fv/prelude-ts");
|
|
35
|
+
const log = tracer_1.default.colorConsole();
|
|
36
|
+
class UPMNodeProcess {
|
|
37
|
+
onServiceClientPort(clientId, port) {
|
|
38
|
+
log.info(`Received new client port for clientId (${clientId})`);
|
|
39
|
+
(0, guard_1.assert)(!this.clientPorts_.has(clientId), `port already registered for clientId(${clientId})`);
|
|
40
|
+
port.on("message", (ev) => {
|
|
41
|
+
var _a, _b;
|
|
42
|
+
const envelope = ((_b = (_a = ev.data) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : ev.data), { channel, payload } = envelope;
|
|
43
|
+
log.info(`Message received on client port (${clientId})`, envelope);
|
|
44
|
+
(0, guard_1.assert)(channel === UPM.IPCChannel.UPMServiceMessage, `Only IPCChannel.UPMServiceMessage are allowed on client ports: ${channel}`);
|
|
45
|
+
prelude_ts_1.Future.of(this.onServiceMessage(clientId, port, payload))
|
|
46
|
+
.onFailure(err => log.error(`Unable to handle message`, err));
|
|
47
|
+
});
|
|
48
|
+
port.on("close", () => {
|
|
49
|
+
this.clientPorts_.delete(clientId);
|
|
50
|
+
});
|
|
51
|
+
port.start();
|
|
52
|
+
}
|
|
53
|
+
async onServiceMessage(clientId, port, payload) {
|
|
54
|
+
log.info(`onServiceMessage from (clientId=${clientId})`, payload);
|
|
55
|
+
const { messageId, kind, args, eventData, type } = payload;
|
|
56
|
+
await (0, ts_pattern_1.match)(kind)
|
|
57
|
+
.with(UPM.MessageKind.Request, async () => {
|
|
58
|
+
var _a;
|
|
59
|
+
try {
|
|
60
|
+
(0, guard_1.assert)(this.requestHandlers_.has(type), `Unknown request handler (${type})`);
|
|
61
|
+
const handler = this.requestHandlers_.get(type);
|
|
62
|
+
const result = await handler(type, messageId, ...args), msg = {
|
|
63
|
+
channel: UPM.IPCChannel.UPMServiceMessage,
|
|
64
|
+
payload: {
|
|
65
|
+
type,
|
|
66
|
+
kind: UPM.MessageKind.Response,
|
|
67
|
+
messageId,
|
|
68
|
+
result
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
port.postMessage(msg);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
log.error(`Unable to handle message`, err);
|
|
75
|
+
const msg = {
|
|
76
|
+
channel: UPM.IPCChannel.UPMServiceMessage,
|
|
77
|
+
payload: {
|
|
78
|
+
type,
|
|
79
|
+
kind: UPM.MessageKind.Response,
|
|
80
|
+
messageId,
|
|
81
|
+
result: null,
|
|
82
|
+
error: (_a = err.message) !== null && _a !== void 0 ? _a : err.toString()
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
port.postMessage(msg);
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
.with(UPM.MessageKind.Event, async () => {
|
|
89
|
+
try {
|
|
90
|
+
for (const handler of this.eventHandlers_) {
|
|
91
|
+
let res = handler(clientId, port, eventData);
|
|
92
|
+
if ((0, guard_1.isPromise)(res)) {
|
|
93
|
+
const resPromise = res;
|
|
94
|
+
res = await resPromise;
|
|
95
|
+
}
|
|
96
|
+
if (res === true) {
|
|
97
|
+
log.info(`Successfully handled (${messageId}) event`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
log.error(`Unable to handle event (${messageId})`, err);
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
.otherwise(async (kind) => {
|
|
107
|
+
log.error(`Message kind (${kind}) is invalid here`);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
onMessage(port, message) {
|
|
111
|
+
var _a, _b;
|
|
112
|
+
log.info(`Message received on utilityProcess`, message.data);
|
|
113
|
+
const { channel, payload } = ((_b = (_a = message.data) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : message.data);
|
|
114
|
+
(0, ts_pattern_1.match)(channel)
|
|
115
|
+
.when(c => c === UPM.IPCChannel.UPMServiceMessage, () => this.onServiceMessage("main", port, payload))
|
|
116
|
+
.when(c => c === UPM.IPCChannel.UPMServiceNewClient, () => this.onServiceClientPort(payload.clientId, message.ports[0]))
|
|
117
|
+
.otherwise(c => {
|
|
118
|
+
log.error(`Unknown channel (${c})`);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
constructor() {
|
|
122
|
+
this.processPort = process.parentPort;
|
|
123
|
+
this.clientPorts_ = new Map();
|
|
124
|
+
this.requestHandlers_ = new Map();
|
|
125
|
+
this.eventHandlers_ = Array();
|
|
126
|
+
this.processPort.on("message", (message) => this.onMessage(this.processPort, message));
|
|
127
|
+
}
|
|
128
|
+
addRequestHandler(type, handler) {
|
|
129
|
+
log.info(`Registering request handler for type (${type.toString()})`);
|
|
130
|
+
this.requestHandlers_.set(type, handler);
|
|
131
|
+
}
|
|
132
|
+
addEventHandler(handler) {
|
|
133
|
+
log.info(`Registering event handler`);
|
|
134
|
+
this.eventHandlers_.push(handler);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get singleton instance
|
|
138
|
+
*/
|
|
139
|
+
static get() {
|
|
140
|
+
if (!this.sInstance_) {
|
|
141
|
+
this.sInstance_ = new UPMNodeProcess();
|
|
142
|
+
}
|
|
143
|
+
return this.sInstance_;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.UPMNodeProcess = UPMNodeProcess;
|
|
147
|
+
/**
|
|
148
|
+
* Singleton instance
|
|
149
|
+
*
|
|
150
|
+
* @private
|
|
151
|
+
*/
|
|
152
|
+
UPMNodeProcess.sInstance_ = null;
|
|
153
|
+
const upmNodeProcess = UPMNodeProcess.get();
|
|
154
|
+
exports.default = upmNodeProcess;
|
|
155
|
+
//# sourceMappingURL=UPMNodeProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UPMNodeProcess.js","sourceRoot":"","sources":["../../../src/node/UPMNodeProcess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
const UPMNodeProcess_1 = __importDefault(require("./UPMNodeProcess"));
|
|
21
|
+
__exportStar(require("./UPMNodeProcess"), exports);
|
|
22
|
+
exports.default = UPMNodeProcess_1.default;
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,sEAA6C;AAC7C,mDAAgC;AAChC,kBAAe,wBAAc,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as UPM from "../common";
|
|
2
|
+
export declare class UPMRendererClientFactory {
|
|
3
|
+
static createClient<ReqMap extends UPM.MessageRequestMap = any, MType extends UPM.MessageRequestNames<ReqMap> = UPM.MessageRequestNames<ReqMap>>(serviceName: string, clientId?: string): Promise<UPM.MessagePortClient<ReqMap, MType>>;
|
|
4
|
+
}
|
|
5
|
+
export default UPMRendererClientFactory;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.UPMRendererClientFactory = void 0;
|
|
30
|
+
const UPM = __importStar(require("../common"));
|
|
31
|
+
const deferred_1 = require("@3fv/deferred");
|
|
32
|
+
const electron_1 = require("electron");
|
|
33
|
+
const guard_1 = require("@3fv/guard");
|
|
34
|
+
const tracer_1 = __importDefault(require("tracer"));
|
|
35
|
+
const log = tracer_1.default.colorConsole();
|
|
36
|
+
class UPMRendererClientFactory {
|
|
37
|
+
static async createClient(serviceName, clientId = "renderer") {
|
|
38
|
+
const deferred = new deferred_1.Deferred();
|
|
39
|
+
const onNewClient = (ev, data) => {
|
|
40
|
+
try {
|
|
41
|
+
const { serviceName: portServiceName, clientId: portClientId } = data;
|
|
42
|
+
log.info(`Received new client & port for (service=${serviceName},portServiceName=${portServiceName},clientId=${clientId},portClientId=${portClientId})`);
|
|
43
|
+
if (serviceName === portServiceName && clientId === portClientId) {
|
|
44
|
+
log.info(`Matched client & service`);
|
|
45
|
+
if (ev.ports.length !== 1) {
|
|
46
|
+
deferred.reject(Error("A least 1 port must be transferred"));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const port = ev.ports[0];
|
|
50
|
+
deferred.resolve(new UPM.MessagePortClient(clientId, port));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
log.error(`OnNewClient error`, err);
|
|
56
|
+
deferred.reject(err);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
electron_1.ipcRenderer.on(UPM.IPCChannel.UPMServiceNewClient, onNewClient);
|
|
61
|
+
electron_1.ipcRenderer.send(UPM.IPCChannel.UPMServiceNewClient, serviceName, clientId);
|
|
62
|
+
const serviceClient = await deferred.promise;
|
|
63
|
+
(0, guard_1.assert)(!!serviceClient.port, "Port should be valid after new client resolve");
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
deferred.reject(err);
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
electron_1.ipcRenderer.off(UPM.IPCChannel.UPMServiceNewClient, onNewClient);
|
|
71
|
+
}
|
|
72
|
+
return deferred.promise;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.UPMRendererClientFactory = UPMRendererClientFactory;
|
|
76
|
+
exports.default = UPMRendererClientFactory;
|
|
77
|
+
//# sourceMappingURL=UPMRendererClientFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UPMRendererClientFactory.js","sourceRoot":"","sources":["../../../src/renderer/UPMRendererClientFactory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgC;AAChC,4CAAwC;AACxC,uCAAsC;AACtC,sCAAmC;AACnC,oDAA2B;AAE3B,MAAM,GAAG,GAAG,gBAAM,CAAC,YAAY,EAAE,CAAA;AAEjC,MAAa,wBAAwB;IAEnC,MAAM,CAAC,KAAK,CAAC,YAAY,CAGvB,WAAmB,EAAE,WAAmB,UAAU;QAClD,MAAM,QAAQ,GAAI,IAAI,mBAAQ,EAAuC,CAAA;QAErE,MAAM,WAAW,GAAG,CAAC,EAA6B,EAAE,IAA4C,EAAE,EAAE;YAClG,IAAI,CAAC;gBACH,MAAM,EAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAC,GAAG,IAAI,CAAA;gBAEnE,GAAG,CAAC,IAAI,CAAC,2CAA2C,WAAW,oBAAoB,eAAe,aAAa,QAAQ,iBAAiB,YAAY,GAAG,CAAC,CAAA;gBAGxJ,IAAI,WAAW,KAAK,eAAe,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;oBACpC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAA;oBAC9D,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBACxB,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAA;gBACnC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,CAAC;YACH,sBAAW,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;YAC/D,sBAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAE1E,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAA;YAC5C,IAAA,cAAM,EAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,+CAA+C,CAAC,CAAA;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpB,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,sBAAW,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAA;IACzB,CAAC;CAEF;AA9CD,4DA8CC;AAED,kBAAe,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
const UPMRendererClientFactory_1 = __importDefault(require("./UPMRendererClientFactory"));
|
|
21
|
+
__exportStar(require("./UPMRendererClientFactory"), exports);
|
|
22
|
+
exports.default = UPMRendererClientFactory_1.default;
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/renderer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,0FAAiE;AAEjE,6DAA0C;AAC1C,kBAAe,kCAAwB,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { MessageRequestFn, MessageRequestMap, MessageRequestNames, MessageRequestParams, MessageRequestReturnType, Port } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Service client interface maps a `MessageRequestMap`
|
|
4
|
+
* to its functional methods
|
|
5
|
+
*/
|
|
6
|
+
export type IServiceClient<ReqMap extends MessageRequestMap, MType extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>> = {
|
|
7
|
+
[Type in MType]: MessageRequestFn<ReqMap, Type>;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Messaging client interface
|
|
11
|
+
*/
|
|
12
|
+
export interface IMessageClient<ReqMap extends MessageRequestMap, MType extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>> {
|
|
13
|
+
/**
|
|
14
|
+
* A very low level function for sending `any` data
|
|
15
|
+
* to the `utilityProcess`
|
|
16
|
+
*
|
|
17
|
+
* @param data
|
|
18
|
+
*/
|
|
19
|
+
sendEvent(data: any): void;
|
|
20
|
+
/**
|
|
21
|
+
* Execute a request, with a response expected
|
|
22
|
+
*
|
|
23
|
+
* @param type
|
|
24
|
+
* @param args determined by the typed `MessageRequestMap` & `Type` parameters
|
|
25
|
+
*/
|
|
26
|
+
executeRequest<Type extends MType, R extends MessageRequestReturnType<ReqMap, Type> = MessageRequestReturnType<ReqMap, Type>>(type: Type, ...args: MessageRequestParams<ReqMap, Type>): Promise<R>;
|
|
27
|
+
/**
|
|
28
|
+
* Close the message client
|
|
29
|
+
*/
|
|
30
|
+
close(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve when client is ready to use
|
|
33
|
+
*/
|
|
34
|
+
whenReady(): Promise<IMessageClient<ReqMap, MType>>;
|
|
35
|
+
/**
|
|
36
|
+
* Get service client from message client
|
|
37
|
+
*/
|
|
38
|
+
getServiceClient(): IServiceClient<ReqMap, MType>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Generic `MessagePort` client implementation, which
|
|
42
|
+
* is functional in any process.
|
|
43
|
+
*
|
|
44
|
+
* > NOTE: Aside from the main & renderer processes,
|
|
45
|
+
* > an `utilityProcess` could potentially also
|
|
46
|
+
* > use this client to communicate with a separate
|
|
47
|
+
* > `utilityProcess`
|
|
48
|
+
*/
|
|
49
|
+
export declare class MessagePortClient<ReqMap extends MessageRequestMap, MType extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>> implements IMessageClient<ReqMap, MType> {
|
|
50
|
+
readonly clientId: string;
|
|
51
|
+
readonly port: Port;
|
|
52
|
+
/**
|
|
53
|
+
* Used to generate IDS
|
|
54
|
+
*
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
private idSequence_;
|
|
58
|
+
/**
|
|
59
|
+
* A `Map` responsible for mapping `messageId`
|
|
60
|
+
* values to a `PendingRequestMessage`
|
|
61
|
+
*
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
private readonly pendingMessages_;
|
|
65
|
+
/**
|
|
66
|
+
* Get the next `messageId`
|
|
67
|
+
*
|
|
68
|
+
* @returns {number}
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
private generateMessageId;
|
|
72
|
+
/**
|
|
73
|
+
* Remove a pending message mapping based on supplied ID
|
|
74
|
+
*
|
|
75
|
+
* @param {number} messageId
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
private removePendingMessage;
|
|
79
|
+
/**
|
|
80
|
+
* Handle messages posted by the `utilityProcess` via
|
|
81
|
+
* either `process.parentPort` or a specific `MessagePort`
|
|
82
|
+
*
|
|
83
|
+
* @param payloadOrEnvelopeOrData
|
|
84
|
+
* @private
|
|
85
|
+
*/
|
|
86
|
+
private onMessage;
|
|
87
|
+
sendEvent(data: any): void;
|
|
88
|
+
executeRequest<Type extends MType, R extends MessageRequestReturnType<ReqMap, Type> = MessageRequestReturnType<ReqMap, Type>>(type: Type, ...args: MessageRequestParams<ReqMap, Type>): Promise<R>;
|
|
89
|
+
close(): void;
|
|
90
|
+
whenReady(): Promise<this>;
|
|
91
|
+
/**
|
|
92
|
+
* Return a simple proxy facade wrapping
|
|
93
|
+
* `executeRequest` into individual methods
|
|
94
|
+
*/
|
|
95
|
+
getServiceClient(): IServiceClient<ReqMap, MType>;
|
|
96
|
+
/**
|
|
97
|
+
* Create a new `MessagePortClient`
|
|
98
|
+
*
|
|
99
|
+
* @param clientId
|
|
100
|
+
* @param port
|
|
101
|
+
*/
|
|
102
|
+
constructor(clientId: string, port: Port);
|
|
103
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { isDefined, isFunction } from "@3fv/guard";
|
|
2
|
+
import { isMessagePort, isUtilityProcess } from "./guards";
|
|
3
|
+
import Tracer from "tracer";
|
|
4
|
+
import { Defaults, IPCChannel, MessageKind } from "./types";
|
|
5
|
+
import { Deferred } from "@3fv/deferred";
|
|
6
|
+
const log = Tracer.colorConsole();
|
|
7
|
+
/**
|
|
8
|
+
* Generic `MessagePort` client implementation, which
|
|
9
|
+
* is functional in any process.
|
|
10
|
+
*
|
|
11
|
+
* > NOTE: Aside from the main & renderer processes,
|
|
12
|
+
* > an `utilityProcess` could potentially also
|
|
13
|
+
* > use this client to communicate with a separate
|
|
14
|
+
* > `utilityProcess`
|
|
15
|
+
*/
|
|
16
|
+
export class MessagePortClient {
|
|
17
|
+
/**
|
|
18
|
+
* Get the next `messageId`
|
|
19
|
+
*
|
|
20
|
+
* @returns {number}
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
generateMessageId() {
|
|
24
|
+
return this.idSequence_++;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Remove a pending message mapping based on supplied ID
|
|
28
|
+
*
|
|
29
|
+
* @param {number} messageId
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
removePendingMessage(messageId) {
|
|
33
|
+
const pending = this.pendingMessages_.get(messageId);
|
|
34
|
+
if (!pending) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
clearTimeout(pending.timeoutId);
|
|
38
|
+
if (!pending.deferred.isSettled()) {
|
|
39
|
+
pending.deferred.reject("The pending message is being removed before promise is settled");
|
|
40
|
+
}
|
|
41
|
+
this.pendingMessages_.delete(messageId);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Handle messages posted by the `utilityProcess` via
|
|
45
|
+
* either `process.parentPort` or a specific `MessagePort`
|
|
46
|
+
*
|
|
47
|
+
* @param payloadOrEnvelopeOrData
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
onMessage(payloadOrEnvelopeOrData) {
|
|
51
|
+
var _a;
|
|
52
|
+
const
|
|
53
|
+
// FIND THE `Message | NodeMessage` DEPENDING
|
|
54
|
+
// ON THE PROCESS AND TRANSPORT
|
|
55
|
+
payloadOrEnvelope = (isDefined(payloadOrEnvelopeOrData === null || payloadOrEnvelopeOrData === void 0 ? void 0 : payloadOrEnvelopeOrData["data"]) ?
|
|
56
|
+
payloadOrEnvelopeOrData["data"] :
|
|
57
|
+
payloadOrEnvelopeOrData),
|
|
58
|
+
// FIND THE CHANNEL & PAYLOAD DEPENDING ON THE PROCESS & TRANSPORT
|
|
59
|
+
[channel, payload] = (isDefined(payloadOrEnvelope === null || payloadOrEnvelope === void 0 ? void 0 : payloadOrEnvelope["payload"]) ?
|
|
60
|
+
[(_a = payloadOrEnvelope["channel"]) !== null && _a !== void 0 ? _a : IPCChannel.UPMServiceMessage, payloadOrEnvelope["payload"]] :
|
|
61
|
+
[IPCChannel.UPMServiceMessage, payloadOrEnvelope]), { messageId, result, error } = payload;
|
|
62
|
+
try {
|
|
63
|
+
const pending = this.pendingMessages_.get(messageId);
|
|
64
|
+
if (!pending) {
|
|
65
|
+
log.info(`Unable to find pending record ${messageId}`);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (pending.deferred.isSettled()) {
|
|
69
|
+
log.error(`Already settled record ${messageId}`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!!error) {
|
|
73
|
+
log.error(error);
|
|
74
|
+
pending.deferred.reject(new Error(error));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
pending.deferred.resolve(result);
|
|
78
|
+
this.removePendingMessage(messageId);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
log.error(`Failed to handle message`, err);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
sendEvent(data) {
|
|
85
|
+
const messageId = this.generateMessageId();
|
|
86
|
+
const payload = {
|
|
87
|
+
channel: IPCChannel.UPMServiceMessage,
|
|
88
|
+
payload: { messageId, data, kind: MessageKind.Event }
|
|
89
|
+
};
|
|
90
|
+
this.port.postMessage(payload);
|
|
91
|
+
}
|
|
92
|
+
async executeRequest(type, ...args) {
|
|
93
|
+
const messageId = this.generateMessageId(), pending = {
|
|
94
|
+
deferred: new Deferred(),
|
|
95
|
+
messageId,
|
|
96
|
+
timeoutId: setTimeout(() => this.removePendingMessage(messageId), Defaults.RequestTimeout)
|
|
97
|
+
};
|
|
98
|
+
this.pendingMessages_.set(messageId, pending);
|
|
99
|
+
const payload = {
|
|
100
|
+
channel: IPCChannel.UPMServiceMessage,
|
|
101
|
+
payload: { type, messageId, args, kind: MessageKind.Request }
|
|
102
|
+
};
|
|
103
|
+
this.port.postMessage(payload);
|
|
104
|
+
try {
|
|
105
|
+
const result = await pending.deferred.promise;
|
|
106
|
+
log.debug(`Completed utility request (messageId=${messageId})`);
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
log.error(`Failed utility request (messageId=${messageId})`, err);
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
close() {
|
|
115
|
+
}
|
|
116
|
+
whenReady() {
|
|
117
|
+
return Promise.resolve(this);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Return a simple proxy facade wrapping
|
|
121
|
+
* `executeRequest` into individual methods
|
|
122
|
+
*/
|
|
123
|
+
getServiceClient() {
|
|
124
|
+
return new Proxy({}, {
|
|
125
|
+
get: (_target, prop) => {
|
|
126
|
+
if (prop === "then") {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
return (...args) => this.whenReady()
|
|
130
|
+
.then(client => client.executeRequest(prop, ...args));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create a new `MessagePortClient`
|
|
136
|
+
*
|
|
137
|
+
* @param clientId
|
|
138
|
+
* @param port
|
|
139
|
+
*/
|
|
140
|
+
constructor(clientId, port) {
|
|
141
|
+
this.clientId = clientId;
|
|
142
|
+
this.port = port;
|
|
143
|
+
/**
|
|
144
|
+
* Used to generate IDS
|
|
145
|
+
*
|
|
146
|
+
* @private
|
|
147
|
+
*/
|
|
148
|
+
this.idSequence_ = 0;
|
|
149
|
+
/**
|
|
150
|
+
* A `Map` responsible for mapping `messageId`
|
|
151
|
+
* values to a `PendingRequestMessage`
|
|
152
|
+
*
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
this.pendingMessages_ = new Map();
|
|
156
|
+
if (isMessagePort(port) || isUtilityProcess(port)) {
|
|
157
|
+
if (isFunction(port === null || port === void 0 ? void 0 : port["addEventListener"])) {
|
|
158
|
+
;
|
|
159
|
+
port.addEventListener("message", this.onMessage.bind(this));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
port.on("message", this.onMessage.bind(this));
|
|
163
|
+
}
|
|
164
|
+
if (isMessagePort(port))
|
|
165
|
+
port.start();
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
log.error("Invalid port", port);
|
|
169
|
+
throw new Error("Invalid port");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=clients.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../src/common/clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { isFunction } from "@3fv/guard";
|
|
2
|
+
export function isMessagePort(port) {
|
|
3
|
+
return isFunction(port === null || port === void 0 ? void 0 : port["close"]);
|
|
4
|
+
}
|
|
5
|
+
export function isUtilityProcess(port) {
|
|
6
|
+
return !!port && !isMessagePort(port);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../src/common/guards.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvC,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,OAAO,UAAU,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,OAAO,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAU;IACzC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
|