@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,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MessagePortClient = void 0;
|
|
7
|
+
const guard_1 = require("@3fv/guard");
|
|
8
|
+
const guards_1 = require("./guards");
|
|
9
|
+
const tracer_1 = __importDefault(require("tracer"));
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
const deferred_1 = require("@3fv/deferred");
|
|
12
|
+
const log = tracer_1.default.colorConsole();
|
|
13
|
+
/**
|
|
14
|
+
* Generic `MessagePort` client implementation, which
|
|
15
|
+
* is functional in any process.
|
|
16
|
+
*
|
|
17
|
+
* > NOTE: Aside from the main & renderer processes,
|
|
18
|
+
* > an `utilityProcess` could potentially also
|
|
19
|
+
* > use this client to communicate with a separate
|
|
20
|
+
* > `utilityProcess`
|
|
21
|
+
*/
|
|
22
|
+
class MessagePortClient {
|
|
23
|
+
/**
|
|
24
|
+
* Get the next `messageId`
|
|
25
|
+
*
|
|
26
|
+
* @returns {number}
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
generateMessageId() {
|
|
30
|
+
return this.idSequence_++;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Remove a pending message mapping based on supplied ID
|
|
34
|
+
*
|
|
35
|
+
* @param {number} messageId
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
removePendingMessage(messageId) {
|
|
39
|
+
const pending = this.pendingMessages_.get(messageId);
|
|
40
|
+
if (!pending) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
clearTimeout(pending.timeoutId);
|
|
44
|
+
if (!pending.deferred.isSettled()) {
|
|
45
|
+
pending.deferred.reject("The pending message is being removed before promise is settled");
|
|
46
|
+
}
|
|
47
|
+
this.pendingMessages_.delete(messageId);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handle messages posted by the `utilityProcess` via
|
|
51
|
+
* either `process.parentPort` or a specific `MessagePort`
|
|
52
|
+
*
|
|
53
|
+
* @param payloadOrEnvelopeOrData
|
|
54
|
+
* @private
|
|
55
|
+
*/
|
|
56
|
+
onMessage(payloadOrEnvelopeOrData) {
|
|
57
|
+
var _a;
|
|
58
|
+
const
|
|
59
|
+
// FIND THE `Message | NodeMessage` DEPENDING
|
|
60
|
+
// ON THE PROCESS AND TRANSPORT
|
|
61
|
+
payloadOrEnvelope = ((0, guard_1.isDefined)(payloadOrEnvelopeOrData === null || payloadOrEnvelopeOrData === void 0 ? void 0 : payloadOrEnvelopeOrData["data"]) ?
|
|
62
|
+
payloadOrEnvelopeOrData["data"] :
|
|
63
|
+
payloadOrEnvelopeOrData),
|
|
64
|
+
// FIND THE CHANNEL & PAYLOAD DEPENDING ON THE PROCESS & TRANSPORT
|
|
65
|
+
[channel, payload] = ((0, guard_1.isDefined)(payloadOrEnvelope === null || payloadOrEnvelope === void 0 ? void 0 : payloadOrEnvelope["payload"]) ?
|
|
66
|
+
[(_a = payloadOrEnvelope["channel"]) !== null && _a !== void 0 ? _a : types_1.IPCChannel.UPMServiceMessage, payloadOrEnvelope["payload"]] :
|
|
67
|
+
[types_1.IPCChannel.UPMServiceMessage, payloadOrEnvelope]), { messageId, result, error } = payload;
|
|
68
|
+
try {
|
|
69
|
+
const pending = this.pendingMessages_.get(messageId);
|
|
70
|
+
if (!pending) {
|
|
71
|
+
log.info(`Unable to find pending record ${messageId}`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (pending.deferred.isSettled()) {
|
|
75
|
+
log.error(`Already settled record ${messageId}`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!!error) {
|
|
79
|
+
log.error(error);
|
|
80
|
+
pending.deferred.reject(new Error(error));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
pending.deferred.resolve(result);
|
|
84
|
+
this.removePendingMessage(messageId);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
log.error(`Failed to handle message`, err);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
sendEvent(data) {
|
|
91
|
+
const messageId = this.generateMessageId();
|
|
92
|
+
const payload = {
|
|
93
|
+
channel: types_1.IPCChannel.UPMServiceMessage,
|
|
94
|
+
payload: { messageId, data, kind: types_1.MessageKind.Event }
|
|
95
|
+
};
|
|
96
|
+
this.port.postMessage(payload);
|
|
97
|
+
}
|
|
98
|
+
async executeRequest(type, ...args) {
|
|
99
|
+
const messageId = this.generateMessageId(), pending = {
|
|
100
|
+
deferred: new deferred_1.Deferred(),
|
|
101
|
+
messageId,
|
|
102
|
+
timeoutId: setTimeout(() => this.removePendingMessage(messageId), types_1.Defaults.RequestTimeout)
|
|
103
|
+
};
|
|
104
|
+
this.pendingMessages_.set(messageId, pending);
|
|
105
|
+
const payload = {
|
|
106
|
+
channel: types_1.IPCChannel.UPMServiceMessage,
|
|
107
|
+
payload: { type, messageId, args, kind: types_1.MessageKind.Request }
|
|
108
|
+
};
|
|
109
|
+
this.port.postMessage(payload);
|
|
110
|
+
try {
|
|
111
|
+
const result = await pending.deferred.promise;
|
|
112
|
+
log.debug(`Completed utility request (messageId=${messageId})`);
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
log.error(`Failed utility request (messageId=${messageId})`, err);
|
|
117
|
+
throw err;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
close() {
|
|
121
|
+
}
|
|
122
|
+
whenReady() {
|
|
123
|
+
return Promise.resolve(this);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Return a simple proxy facade wrapping
|
|
127
|
+
* `executeRequest` into individual methods
|
|
128
|
+
*/
|
|
129
|
+
getServiceClient() {
|
|
130
|
+
return new Proxy({}, {
|
|
131
|
+
get: (_target, prop) => {
|
|
132
|
+
if (prop === "then") {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return (...args) => this.whenReady()
|
|
136
|
+
.then(client => client.executeRequest(prop, ...args));
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create a new `MessagePortClient`
|
|
142
|
+
*
|
|
143
|
+
* @param clientId
|
|
144
|
+
* @param port
|
|
145
|
+
*/
|
|
146
|
+
constructor(clientId, port) {
|
|
147
|
+
this.clientId = clientId;
|
|
148
|
+
this.port = port;
|
|
149
|
+
/**
|
|
150
|
+
* Used to generate IDS
|
|
151
|
+
*
|
|
152
|
+
* @private
|
|
153
|
+
*/
|
|
154
|
+
this.idSequence_ = 0;
|
|
155
|
+
/**
|
|
156
|
+
* A `Map` responsible for mapping `messageId`
|
|
157
|
+
* values to a `PendingRequestMessage`
|
|
158
|
+
*
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
this.pendingMessages_ = new Map();
|
|
162
|
+
if ((0, guards_1.isMessagePort)(port) || (0, guards_1.isUtilityProcess)(port)) {
|
|
163
|
+
if ((0, guard_1.isFunction)(port === null || port === void 0 ? void 0 : port["addEventListener"])) {
|
|
164
|
+
;
|
|
165
|
+
port.addEventListener("message", this.onMessage.bind(this));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
port.on("message", this.onMessage.bind(this));
|
|
169
|
+
}
|
|
170
|
+
if ((0, guards_1.isMessagePort)(port))
|
|
171
|
+
port.start();
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
log.error("Invalid port", port);
|
|
175
|
+
throw new Error("Invalid port");
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.MessagePortClient = MessagePortClient;
|
|
180
|
+
//# 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,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isMessagePort = isMessagePort;
|
|
4
|
+
exports.isUtilityProcess = isUtilityProcess;
|
|
5
|
+
const guard_1 = require("@3fv/guard");
|
|
6
|
+
function isMessagePort(port) {
|
|
7
|
+
return (0, guard_1.isFunction)(port === null || port === void 0 ? void 0 : port["close"]);
|
|
8
|
+
}
|
|
9
|
+
function isUtilityProcess(port) {
|
|
10
|
+
return !!port && !isMessagePort(port);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../src/common/guards.ts"],"names":[],"mappings":";;AAIA,sCAEC;AAED,4CAEC;AATD,sCAAuC;AAGvC,SAAgB,aAAa,CAAC,IAAU;IACtC,OAAO,IAAA,kBAAU,EAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,OAAO,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAU;IACzC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./guards"), exports);
|
|
19
|
+
__exportStar(require("./clients"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,2CAAwB;AACxB,4CAAyB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { UtilityProcess } from "electron";
|
|
2
|
+
import { Deferred } from "@3fv/deferred";
|
|
3
|
+
export declare const Defaults: {
|
|
4
|
+
RequestTimeout: number;
|
|
5
|
+
};
|
|
6
|
+
export declare enum MessageKind {
|
|
7
|
+
Event = "Event",
|
|
8
|
+
Request = "Request",
|
|
9
|
+
Response = "Response"
|
|
10
|
+
}
|
|
11
|
+
export declare enum IPCChannel {
|
|
12
|
+
UPMServiceMessage = "UPMServiceMessage",
|
|
13
|
+
UPMServiceNewClient = "UPMServiceNewClient"
|
|
14
|
+
}
|
|
15
|
+
export declare enum NodeMessageType {
|
|
16
|
+
UPMNodeEventMessage = "UPMNodeEventMessage",
|
|
17
|
+
UPMNodeRequestResponse = "UPMNodeRequestResponseMessage"
|
|
18
|
+
}
|
|
19
|
+
export type MessageRequestFnBase = (...args: any[]) => Promise<any>;
|
|
20
|
+
export type MessageRequestMap = {};
|
|
21
|
+
export type MessageRequestNames<ReqMap extends MessageRequestMap> = keyof ReqMap;
|
|
22
|
+
export type MessageRequestFn<ReqMap extends MessageRequestMap, Name extends MessageRequestNames<ReqMap>> = ReqMap[Name] extends MessageRequestFnBase ? ReqMap[Name] : never;
|
|
23
|
+
export type MessageRequestParams<ReqMap extends MessageRequestMap, Name extends MessageRequestNames<ReqMap>> = ReqMap[Name] extends MessageRequestFnBase ? Parameters<ReqMap[Name]> : never;
|
|
24
|
+
export type MessageRequestReturnType<ReqMap extends MessageRequestMap, Name extends MessageRequestNames<ReqMap>> = ReqMap[Name] extends MessageRequestFnBase ? ReturnType<ReqMap[Name]> : never;
|
|
25
|
+
export interface Message<ReqMap extends MessageRequestMap = any, Type extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>, Args extends MessageRequestParams<ReqMap, Type> = MessageRequestParams<ReqMap, Type>, R extends MessageRequestReturnType<ReqMap, Type> = MessageRequestReturnType<ReqMap, Type>> {
|
|
26
|
+
type: Type;
|
|
27
|
+
kind: MessageKind;
|
|
28
|
+
messageId: number;
|
|
29
|
+
eventData?: any;
|
|
30
|
+
args?: Args;
|
|
31
|
+
result?: R;
|
|
32
|
+
error?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface NodeEnvelope<Payload extends {} = any> {
|
|
35
|
+
channel: IPCChannel;
|
|
36
|
+
payload: Payload;
|
|
37
|
+
}
|
|
38
|
+
export type RequestHandler<ReqMap extends MessageRequestMap = any, Type extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>, Args extends MessageRequestParams<ReqMap, Type> = MessageRequestParams<ReqMap, Type>, R extends MessageRequestReturnType<ReqMap, Type> = MessageRequestReturnType<ReqMap, Type>> = (type: Type, messageId: number, ...args: Args) => Promise<R>;
|
|
39
|
+
export type NodeMessage<ReqMap extends MessageRequestMap = any, Type extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>> = NodeEnvelope<Message<ReqMap, Type>>;
|
|
40
|
+
export interface PendingRequestMessage<ReqMap extends MessageRequestMap = any, Type extends MessageRequestNames<ReqMap> = MessageRequestNames<ReqMap>, R extends MessageRequestReturnType<ReqMap, Type> = MessageRequestReturnType<ReqMap, Type>> {
|
|
41
|
+
deferred: Deferred<R>;
|
|
42
|
+
timeoutId: ReturnType<typeof setTimeout>;
|
|
43
|
+
messageId: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @returns true if payload was handled, false if not
|
|
47
|
+
*/
|
|
48
|
+
export type EventHandler = (clientId: string, port: Port, payload: any) => boolean;
|
|
49
|
+
export type Port = MessagePort | Electron.MessagePortMain | Electron.ParentPort | UtilityProcess;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NodeMessageType = exports.IPCChannel = exports.MessageKind = exports.Defaults = void 0;
|
|
4
|
+
exports.Defaults = { RequestTimeout: 120000 };
|
|
5
|
+
var MessageKind;
|
|
6
|
+
(function (MessageKind) {
|
|
7
|
+
MessageKind["Event"] = "Event";
|
|
8
|
+
MessageKind["Request"] = "Request";
|
|
9
|
+
MessageKind["Response"] = "Response";
|
|
10
|
+
})(MessageKind || (exports.MessageKind = MessageKind = {}));
|
|
11
|
+
var IPCChannel;
|
|
12
|
+
(function (IPCChannel) {
|
|
13
|
+
IPCChannel["UPMServiceMessage"] = "UPMServiceMessage";
|
|
14
|
+
IPCChannel["UPMServiceNewClient"] = "UPMServiceNewClient";
|
|
15
|
+
})(IPCChannel || (exports.IPCChannel = IPCChannel = {}));
|
|
16
|
+
var NodeMessageType;
|
|
17
|
+
(function (NodeMessageType) {
|
|
18
|
+
NodeMessageType["UPMNodeEventMessage"] = "UPMNodeEventMessage";
|
|
19
|
+
NodeMessageType["UPMNodeRequestResponse"] = "UPMNodeRequestResponseMessage";
|
|
20
|
+
})(NodeMessageType || (exports.NodeMessageType = NodeMessageType = {}));
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":";;;AAKa,QAAA,QAAQ,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,CAAA;AAElD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;AACvB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,qDAAuC,CAAA;IACvC,yDAA2C,CAAA;AAC7C,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,8DAA2C,CAAA;IAC3C,2EAAwD,CAAA;AAC1D,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B"}
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.UPM = void 0;
|
|
30
|
+
__exportStar(require("./common"), exports);
|
|
31
|
+
const UPM = __importStar(require("./common"));
|
|
32
|
+
exports.UPM = UPM;
|
|
33
|
+
exports.default = UPM;
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,8CAA+B;AAG7B,kBAAG;AAGL,kBAAe,GAAG,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { MessagePortMain } from "electron";
|
|
2
|
+
import * as UPM from "../common";
|
|
3
|
+
import { IServiceClient } from "../common";
|
|
4
|
+
export interface UPMMainServiceConfig {
|
|
5
|
+
}
|
|
6
|
+
export type UPMMainServiceOptions = Partial<UPMMainServiceConfig>;
|
|
7
|
+
export declare class UPMMainService<ReqMap extends UPM.MessageRequestMap = any, MType extends UPM.MessageRequestNames<ReqMap> = UPM.MessageRequestNames<ReqMap>> implements UPM.IMessageClient<ReqMap, MType> {
|
|
8
|
+
readonly serviceName: string;
|
|
9
|
+
readonly entryFile: string;
|
|
10
|
+
private readonly config_;
|
|
11
|
+
private readyDeferred_;
|
|
12
|
+
private killDeferred_;
|
|
13
|
+
private lastMessageId_;
|
|
14
|
+
private childProcess_;
|
|
15
|
+
private pendingMessages_;
|
|
16
|
+
private messageChannels_;
|
|
17
|
+
private init;
|
|
18
|
+
private onMessage;
|
|
19
|
+
/**
|
|
20
|
+
* Resolves when ready
|
|
21
|
+
*
|
|
22
|
+
* @returns {any}
|
|
23
|
+
*/
|
|
24
|
+
whenReady(): Promise<UPM.IMessageClient<ReqMap, MType>>;
|
|
25
|
+
/**
|
|
26
|
+
* Return a simple proxy facade wrapping
|
|
27
|
+
* `executeRequest` into individual methods
|
|
28
|
+
*/
|
|
29
|
+
getServiceClient(): IServiceClient<ReqMap, MType>;
|
|
30
|
+
/**
|
|
31
|
+
* Returned client side port (for Renderer)
|
|
32
|
+
* @param clientId
|
|
33
|
+
*/
|
|
34
|
+
createMessageChannel(clientId: string): MessagePortMain;
|
|
35
|
+
/**
|
|
36
|
+
* Create a port client for the main process
|
|
37
|
+
* (useful to avoid congestion on default child_process channel)
|
|
38
|
+
*
|
|
39
|
+
* @param {string} clientId
|
|
40
|
+
* @returns {UPM.MessagePortClient<MessageRequestMap, MessageType>}
|
|
41
|
+
*/
|
|
42
|
+
createMainClient(clientId: string): UPM.MessagePortClient<ReqMap, MType>;
|
|
43
|
+
private onPortClose;
|
|
44
|
+
private closeMessageChannel;
|
|
45
|
+
close(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Send an event as `fire-and-forget`
|
|
48
|
+
*
|
|
49
|
+
* @param data
|
|
50
|
+
* @param port
|
|
51
|
+
*/
|
|
52
|
+
sendEvent(data: any, port?: UPM.Port): void;
|
|
53
|
+
/**
|
|
54
|
+
* Send request
|
|
55
|
+
*
|
|
56
|
+
* @param type
|
|
57
|
+
* @param args
|
|
58
|
+
*/
|
|
59
|
+
executeRequest<Type extends MType, R extends UPM.MessageRequestReturnType<ReqMap, Type> = UPM.MessageRequestReturnType<ReqMap, Type>>(type: Type, ...args: UPM.MessageRequestParams<ReqMap, Type>): Promise<R>;
|
|
60
|
+
stop(): Promise<void>;
|
|
61
|
+
private kill;
|
|
62
|
+
private removeAllMessageChannels;
|
|
63
|
+
private cancelAllPendingMessages;
|
|
64
|
+
constructor(serviceName: string, entryFile: string, options?: UPMMainServiceOptions);
|
|
65
|
+
private removePendingMessage;
|
|
66
|
+
private generateMessageId;
|
|
67
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
export default UPMMainService;
|