@lvce-editor/about-view 2.5.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/aboutWorkerMain.js +670 -661
- package/package.json +1 -1
package/dist/aboutWorkerMain.js
CHANGED
@@ -1,747 +1,748 @@
|
|
1
|
-
const
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
const normalizeLine = line => {
|
2
|
+
if (line.startsWith('Error: ')) {
|
3
|
+
return line.slice('Error: '.length);
|
4
|
+
}
|
5
|
+
if (line.startsWith('VError: ')) {
|
6
|
+
return line.slice('VError: '.length);
|
7
|
+
}
|
8
|
+
return line;
|
9
|
+
};
|
10
|
+
const getCombinedMessage = (error, message) => {
|
11
|
+
const stringifiedError = normalizeLine(`${error}`);
|
12
|
+
if (message) {
|
13
|
+
return `${message}: ${stringifiedError}`;
|
14
|
+
}
|
15
|
+
return stringifiedError;
|
16
|
+
};
|
17
|
+
const NewLine$3 = '\n';
|
18
|
+
const getNewLineIndex$1 = (string, startIndex = undefined) => {
|
19
|
+
return string.indexOf(NewLine$3, startIndex);
|
20
|
+
};
|
21
|
+
const mergeStacks = (parent, child) => {
|
22
|
+
if (!child) {
|
23
|
+
return parent;
|
24
|
+
}
|
25
|
+
const parentNewLineIndex = getNewLineIndex$1(parent);
|
26
|
+
const childNewLineIndex = getNewLineIndex$1(child);
|
27
|
+
if (childNewLineIndex === -1) {
|
28
|
+
return parent;
|
29
|
+
}
|
30
|
+
const parentFirstLine = parent.slice(0, parentNewLineIndex);
|
31
|
+
const childRest = child.slice(childNewLineIndex);
|
32
|
+
const childFirstLine = normalizeLine(child.slice(0, childNewLineIndex));
|
33
|
+
if (parentFirstLine.includes(childFirstLine)) {
|
34
|
+
return parentFirstLine + childRest;
|
35
|
+
}
|
36
|
+
return child;
|
37
|
+
};
|
38
|
+
class VError extends Error {
|
39
|
+
constructor(error, message) {
|
40
|
+
const combinedMessage = getCombinedMessage(error, message);
|
41
|
+
super(combinedMessage);
|
42
|
+
this.name = 'VError';
|
43
|
+
if (error instanceof Error) {
|
44
|
+
this.stack = mergeStacks(this.stack, error.stack);
|
45
|
+
}
|
46
|
+
if (error.codeFrame) {
|
47
|
+
// @ts-ignore
|
48
|
+
this.codeFrame = error.codeFrame;
|
49
|
+
}
|
50
|
+
if (error.code) {
|
51
|
+
// @ts-ignore
|
52
|
+
this.code = error.code;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
const walkValue = (value, transferrables, isTransferrable) => {
|
58
|
+
if (!value) {
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
if (isTransferrable(value)) {
|
62
|
+
transferrables.push(value);
|
63
|
+
return;
|
64
|
+
}
|
65
|
+
if (Array.isArray(value)) {
|
66
|
+
for (const item of value) {
|
67
|
+
walkValue(item, transferrables, isTransferrable);
|
68
|
+
}
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
if (typeof value === 'object') {
|
72
|
+
for (const property of Object.values(value)) {
|
73
|
+
walkValue(property, transferrables, isTransferrable);
|
74
|
+
}
|
75
|
+
return;
|
76
|
+
}
|
77
|
+
};
|
78
|
+
const isMessagePort = value => {
|
79
|
+
return value && value instanceof MessagePort;
|
80
|
+
};
|
81
|
+
const isMessagePortMain = value => {
|
82
|
+
return value && value.constructor && value.constructor.name === 'MessagePortMain';
|
83
|
+
};
|
84
|
+
const isOffscreenCanvas = value => {
|
85
|
+
return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
|
86
|
+
};
|
87
|
+
const isInstanceOf = (value, constructorName) => {
|
88
|
+
return value?.constructor?.name === constructorName;
|
89
|
+
};
|
90
|
+
const isSocket = value => {
|
91
|
+
return isInstanceOf(value, 'Socket');
|
92
|
+
};
|
93
|
+
const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
|
94
|
+
const isTransferrable = value => {
|
95
|
+
for (const fn of transferrables) {
|
96
|
+
if (fn(value)) {
|
97
|
+
return true;
|
98
|
+
}
|
99
|
+
}
|
100
|
+
return false;
|
101
|
+
};
|
102
|
+
const getTransferrables = value => {
|
103
|
+
const transferrables = [];
|
104
|
+
walkValue(value, transferrables, isTransferrable);
|
105
|
+
return transferrables;
|
106
|
+
};
|
107
|
+
const attachEvents = that => {
|
108
|
+
const handleMessage = (...args) => {
|
109
|
+
const data = that.getData(...args);
|
110
|
+
that.dispatchEvent(new MessageEvent('message', {
|
111
|
+
data
|
112
|
+
}));
|
113
|
+
};
|
114
|
+
that.onMessage(handleMessage);
|
115
|
+
const handleClose = event => {
|
116
|
+
that.dispatchEvent(new Event('close'));
|
7
117
|
};
|
118
|
+
that.onClose(handleClose);
|
8
119
|
};
|
9
|
-
|
10
|
-
|
120
|
+
class Ipc extends EventTarget {
|
121
|
+
constructor(rawIpc) {
|
122
|
+
super();
|
123
|
+
this._rawIpc = rawIpc;
|
124
|
+
attachEvents(this);
|
125
|
+
}
|
126
|
+
}
|
127
|
+
const E_INCOMPATIBLE_NATIVE_MODULE = 'E_INCOMPATIBLE_NATIVE_MODULE';
|
128
|
+
const E_MODULES_NOT_SUPPORTED_IN_ELECTRON = 'E_MODULES_NOT_SUPPORTED_IN_ELECTRON';
|
129
|
+
const ERR_MODULE_NOT_FOUND = 'ERR_MODULE_NOT_FOUND';
|
130
|
+
const NewLine$2 = '\n';
|
131
|
+
const joinLines$2 = lines => {
|
132
|
+
return lines.join(NewLine$2);
|
11
133
|
};
|
12
|
-
const
|
13
|
-
|
134
|
+
const splitLines$1 = lines => {
|
135
|
+
return lines.split(NewLine$2);
|
14
136
|
};
|
15
|
-
const
|
16
|
-
return
|
137
|
+
const isModuleNotFoundMessage = line => {
|
138
|
+
return line.includes('[ERR_MODULE_NOT_FOUND]');
|
17
139
|
};
|
18
|
-
const
|
19
|
-
|
140
|
+
const getModuleNotFoundError = stderr => {
|
141
|
+
const lines = splitLines$1(stderr);
|
142
|
+
const messageIndex = lines.findIndex(isModuleNotFoundMessage);
|
143
|
+
const message = lines[messageIndex];
|
144
|
+
return {
|
145
|
+
message,
|
146
|
+
code: ERR_MODULE_NOT_FOUND
|
147
|
+
};
|
20
148
|
};
|
21
|
-
|
22
|
-
const
|
23
|
-
|
149
|
+
const RE_NATIVE_MODULE_ERROR = /^innerError Error: Cannot find module '.*.node'/;
|
150
|
+
const RE_NATIVE_MODULE_ERROR_2 = /was compiled against a different Node.js version/;
|
151
|
+
const RE_MESSAGE_CODE_BLOCK_START = /^Error: The module '.*'$/;
|
152
|
+
const RE_MESSAGE_CODE_BLOCK_END = /^\s* at/;
|
153
|
+
const RE_AT = /^\s+at/;
|
154
|
+
const RE_AT_PROMISE_INDEX = /^\s*at async Promise.all \(index \d+\)$/;
|
155
|
+
const isUnhelpfulNativeModuleError = stderr => {
|
156
|
+
return RE_NATIVE_MODULE_ERROR.test(stderr) && RE_NATIVE_MODULE_ERROR_2.test(stderr);
|
24
157
|
};
|
25
|
-
const
|
26
|
-
|
158
|
+
const isMessageCodeBlockStartIndex = line => {
|
159
|
+
return RE_MESSAGE_CODE_BLOCK_START.test(line);
|
27
160
|
};
|
28
|
-
const
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
161
|
+
const isMessageCodeBlockEndIndex = line => {
|
162
|
+
return RE_MESSAGE_CODE_BLOCK_END.test(line);
|
163
|
+
};
|
164
|
+
const getMessageCodeBlock = stderr => {
|
165
|
+
const lines = splitLines$1(stderr);
|
166
|
+
const startIndex = lines.findIndex(isMessageCodeBlockStartIndex);
|
167
|
+
const endIndex = startIndex + lines.slice(startIndex).findIndex(isMessageCodeBlockEndIndex, startIndex);
|
168
|
+
const relevantLines = lines.slice(startIndex, endIndex);
|
169
|
+
const relevantMessage = relevantLines.join(' ').slice('Error: '.length);
|
170
|
+
return relevantMessage;
|
171
|
+
};
|
172
|
+
const getNativeModuleErrorMessage = stderr => {
|
173
|
+
const message = getMessageCodeBlock(stderr);
|
35
174
|
return {
|
36
|
-
|
37
|
-
|
175
|
+
message: `Incompatible native node module: ${message}`,
|
176
|
+
code: E_INCOMPATIBLE_NATIVE_MODULE
|
38
177
|
};
|
39
178
|
};
|
40
|
-
const
|
41
|
-
|
42
|
-
|
43
|
-
console.log(response);
|
44
|
-
warn(`callback ${id} may already be disposed`);
|
45
|
-
return;
|
179
|
+
const isModulesSyntaxError = stderr => {
|
180
|
+
if (!stderr) {
|
181
|
+
return false;
|
46
182
|
}
|
47
|
-
|
48
|
-
remove(id);
|
183
|
+
return stderr.includes('SyntaxError: Cannot use import statement outside a module');
|
49
184
|
};
|
50
|
-
const
|
51
|
-
const {
|
52
|
-
id,
|
53
|
-
promise
|
54
|
-
} = registerPromise();
|
55
|
-
const message = {
|
56
|
-
jsonrpc: Two,
|
57
|
-
method,
|
58
|
-
params,
|
59
|
-
id
|
60
|
-
};
|
185
|
+
const getModuleSyntaxError = () => {
|
61
186
|
return {
|
62
|
-
message
|
63
|
-
|
187
|
+
message: `ES Modules are not supported in electron`,
|
188
|
+
code: E_MODULES_NOT_SUPPORTED_IN_ELECTRON
|
64
189
|
};
|
65
190
|
};
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
this.name = 'JsonRpcError';
|
191
|
+
const isModuleNotFoundError = stderr => {
|
192
|
+
if (!stderr) {
|
193
|
+
return false;
|
70
194
|
}
|
71
|
-
|
72
|
-
|
73
|
-
const
|
74
|
-
|
75
|
-
|
76
|
-
const
|
77
|
-
const
|
78
|
-
if (
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
default:
|
89
|
-
return Error;
|
195
|
+
return stderr.includes('ERR_MODULE_NOT_FOUND');
|
196
|
+
};
|
197
|
+
const isNormalStackLine = line => {
|
198
|
+
return RE_AT.test(line) && !RE_AT_PROMISE_INDEX.test(line);
|
199
|
+
};
|
200
|
+
const getDetails = lines => {
|
201
|
+
const index = lines.findIndex(isNormalStackLine);
|
202
|
+
if (index === -1) {
|
203
|
+
return {
|
204
|
+
actualMessage: joinLines$2(lines),
|
205
|
+
rest: []
|
206
|
+
};
|
207
|
+
}
|
208
|
+
let lastIndex = index - 1;
|
209
|
+
while (++lastIndex < lines.length) {
|
210
|
+
if (!isNormalStackLine(lines[lastIndex])) {
|
211
|
+
break;
|
90
212
|
}
|
91
213
|
}
|
92
|
-
|
93
|
-
|
214
|
+
return {
|
215
|
+
actualMessage: lines[index - 1],
|
216
|
+
rest: lines.slice(index, lastIndex)
|
217
|
+
};
|
218
|
+
};
|
219
|
+
const getHelpfulChildProcessError = (stdout, stderr) => {
|
220
|
+
if (isUnhelpfulNativeModuleError(stderr)) {
|
221
|
+
return getNativeModuleErrorMessage(stderr);
|
94
222
|
}
|
95
|
-
if (
|
96
|
-
return
|
223
|
+
if (isModulesSyntaxError(stderr)) {
|
224
|
+
return getModuleSyntaxError();
|
97
225
|
}
|
98
|
-
if (
|
99
|
-
return
|
226
|
+
if (isModuleNotFoundError(stderr)) {
|
227
|
+
return getModuleNotFoundError(stderr);
|
100
228
|
}
|
101
|
-
|
229
|
+
const lines = splitLines$1(stderr);
|
230
|
+
const {
|
231
|
+
actualMessage,
|
232
|
+
rest
|
233
|
+
} = getDetails(lines);
|
234
|
+
return {
|
235
|
+
message: `${actualMessage}`,
|
236
|
+
code: '',
|
237
|
+
stack: rest
|
238
|
+
};
|
102
239
|
};
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
240
|
+
class IpcError extends VError {
|
241
|
+
// @ts-ignore
|
242
|
+
constructor(betterMessage, stdout = '', stderr = '') {
|
243
|
+
if (stdout || stderr) {
|
244
|
+
// @ts-ignore
|
245
|
+
const {
|
246
|
+
message,
|
247
|
+
code,
|
248
|
+
stack
|
249
|
+
} = getHelpfulChildProcessError(stdout, stderr);
|
250
|
+
const cause = new Error(message);
|
251
|
+
// @ts-ignore
|
252
|
+
cause.code = code;
|
253
|
+
cause.stack = stack;
|
254
|
+
super(cause, betterMessage);
|
255
|
+
} else {
|
256
|
+
super(betterMessage);
|
112
257
|
}
|
113
|
-
|
258
|
+
// @ts-ignore
|
259
|
+
this.name = 'IpcError';
|
260
|
+
// @ts-ignore
|
261
|
+
this.stdout = stdout;
|
262
|
+
// @ts-ignore
|
263
|
+
this.stderr = stderr;
|
114
264
|
}
|
115
|
-
|
116
|
-
|
117
|
-
const
|
118
|
-
return
|
265
|
+
}
|
266
|
+
const readyMessage = 'ready';
|
267
|
+
const getData$2 = event => {
|
268
|
+
return event.data;
|
119
269
|
};
|
120
|
-
const
|
121
|
-
|
122
|
-
if (
|
123
|
-
|
270
|
+
const listen$6 = () => {
|
271
|
+
// @ts-ignore
|
272
|
+
if (typeof WorkerGlobalScope === 'undefined') {
|
273
|
+
throw new TypeError('module is not in web worker scope');
|
124
274
|
}
|
125
|
-
return
|
126
|
-
};
|
127
|
-
const joinLines$2 = lines => {
|
128
|
-
return lines.join(NewLine$3);
|
275
|
+
return globalThis;
|
129
276
|
};
|
130
|
-
const
|
131
|
-
|
132
|
-
const splitLines$1 = lines => {
|
133
|
-
return lines.split(NewLine$3);
|
277
|
+
const signal$6 = global => {
|
278
|
+
global.postMessage(readyMessage);
|
134
279
|
};
|
135
|
-
|
136
|
-
|
137
|
-
return
|
280
|
+
class IpcChildWithModuleWorker extends Ipc {
|
281
|
+
getData(event) {
|
282
|
+
return getData$2(event);
|
138
283
|
}
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
const parentStack = getParentStack(error);
|
143
|
-
restoredError.stack = parentStack + NewLine$3 + currentStack;
|
144
|
-
return restoredError;
|
284
|
+
send(message) {
|
285
|
+
// @ts-ignore
|
286
|
+
this._rawIpc.postMessage(message);
|
145
287
|
}
|
146
|
-
|
147
|
-
const
|
148
|
-
|
149
|
-
|
150
|
-
restoredError.stack = error.data.type + ': ' + error.message + NewLine$3 + error.data.stack + NewLine$3 + currentStack;
|
151
|
-
} else if (error.data.stack) {
|
152
|
-
restoredError.stack = error.data.stack;
|
153
|
-
}
|
154
|
-
if (error.data.codeFrame) {
|
155
|
-
// @ts-ignore
|
156
|
-
restoredError.codeFrame = error.data.codeFrame;
|
157
|
-
}
|
158
|
-
if (error.data.code) {
|
159
|
-
// @ts-ignore
|
160
|
-
restoredError.code = error.data.code;
|
161
|
-
}
|
162
|
-
if (error.data.type) {
|
163
|
-
// @ts-ignore
|
164
|
-
restoredError.name = error.data.type;
|
165
|
-
}
|
166
|
-
} else {
|
167
|
-
if (error.stack) {
|
168
|
-
const lowerStack = restoredError.stack || '';
|
169
|
-
// @ts-ignore
|
170
|
-
const indexNewLine = getNewLineIndex$1(lowerStack);
|
171
|
-
const parentStack = getParentStack(error);
|
172
|
-
// @ts-ignore
|
173
|
-
restoredError.stack = parentStack + lowerStack.slice(indexNewLine);
|
174
|
-
}
|
175
|
-
if (error.codeFrame) {
|
176
|
-
// @ts-ignore
|
177
|
-
restoredError.codeFrame = error.codeFrame;
|
178
|
-
}
|
179
|
-
}
|
180
|
-
return restoredError;
|
288
|
+
sendAndTransfer(message) {
|
289
|
+
const transfer = getTransferrables(message);
|
290
|
+
// @ts-ignore
|
291
|
+
this._rawIpc.postMessage(message, transfer);
|
181
292
|
}
|
182
|
-
|
183
|
-
|
293
|
+
dispose() {
|
294
|
+
// ignore
|
184
295
|
}
|
185
|
-
|
186
|
-
|
187
|
-
const unwrapJsonRpcResult = responseMessage => {
|
188
|
-
if ('error' in responseMessage) {
|
189
|
-
const restoredError = restoreJsonRpcError(responseMessage.error);
|
190
|
-
throw restoredError;
|
296
|
+
onClose(callback) {
|
297
|
+
// ignore
|
191
298
|
}
|
192
|
-
|
193
|
-
|
299
|
+
onMessage(callback) {
|
300
|
+
this._rawIpc.addEventListener('message', callback);
|
194
301
|
}
|
195
|
-
|
302
|
+
}
|
303
|
+
const wrap$d = global => {
|
304
|
+
return new IpcChildWithModuleWorker(global);
|
196
305
|
};
|
197
|
-
const
|
198
|
-
|
199
|
-
|
200
|
-
|
306
|
+
const withResolvers = () => {
|
307
|
+
let _resolve;
|
308
|
+
const promise = new Promise(resolve => {
|
309
|
+
_resolve = resolve;
|
310
|
+
});
|
311
|
+
return {
|
312
|
+
resolve: _resolve,
|
313
|
+
promise
|
314
|
+
};
|
315
|
+
};
|
316
|
+
const waitForFirstMessage = async port => {
|
317
|
+
const {
|
318
|
+
resolve,
|
319
|
+
promise
|
320
|
+
} = withResolvers();
|
321
|
+
port.addEventListener('message', resolve, {
|
322
|
+
once: true
|
323
|
+
});
|
324
|
+
const event = await promise;
|
325
|
+
// @ts-ignore
|
326
|
+
return event.data;
|
327
|
+
};
|
328
|
+
const listen$5 = async () => {
|
329
|
+
const parentIpcRaw = listen$6();
|
330
|
+
signal$6(parentIpcRaw);
|
331
|
+
const parentIpc = wrap$d(parentIpcRaw);
|
332
|
+
const firstMessage = await waitForFirstMessage(parentIpc);
|
333
|
+
if (firstMessage.method !== 'initialize') {
|
334
|
+
throw new IpcError('unexpected first message');
|
201
335
|
}
|
202
|
-
|
203
|
-
|
336
|
+
const type = firstMessage.params[0];
|
337
|
+
if (type === 'message-port') {
|
338
|
+
parentIpc.send({
|
339
|
+
jsonrpc: '2.0',
|
340
|
+
id: firstMessage.id,
|
341
|
+
result: null
|
342
|
+
});
|
343
|
+
parentIpc.dispose();
|
344
|
+
const port = firstMessage.params[1];
|
345
|
+
return port;
|
204
346
|
}
|
205
|
-
return
|
347
|
+
return globalThis;
|
206
348
|
};
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
349
|
+
class IpcChildWithModuleWorkerAndMessagePort extends Ipc {
|
350
|
+
constructor(port) {
|
351
|
+
super(port);
|
352
|
+
}
|
353
|
+
getData(event) {
|
354
|
+
return getData$2(event);
|
355
|
+
}
|
356
|
+
send(message) {
|
357
|
+
this._rawIpc.postMessage(message);
|
358
|
+
}
|
359
|
+
sendAndTransfer(message) {
|
360
|
+
const transfer = getTransferrables(message);
|
361
|
+
this._rawIpc.postMessage(message, transfer);
|
214
362
|
}
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
data: {
|
219
|
-
stack: prettyError.stack,
|
220
|
-
codeFrame: prettyError.codeFrame,
|
221
|
-
type: getErrorType(prettyError),
|
222
|
-
code: prettyError.code,
|
223
|
-
name: prettyError.name
|
363
|
+
dispose() {
|
364
|
+
if (this._rawIpc.close) {
|
365
|
+
this._rawIpc.close();
|
224
366
|
}
|
225
|
-
}
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
}
|
367
|
+
}
|
368
|
+
onClose(callback) {
|
369
|
+
// ignore
|
370
|
+
}
|
371
|
+
onMessage(callback) {
|
372
|
+
this._rawIpc.addEventListener('message', callback);
|
373
|
+
this._rawIpc.start();
|
374
|
+
}
|
375
|
+
}
|
376
|
+
const wrap$c = port => {
|
377
|
+
return new IpcChildWithModuleWorkerAndMessagePort(port);
|
233
378
|
};
|
234
|
-
const
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
return create$1$1(message, errorProperty);
|
379
|
+
const IpcChildWithModuleWorkerAndMessagePort$1 = {
|
380
|
+
__proto__: null,
|
381
|
+
listen: listen$5,
|
382
|
+
wrap: wrap$c
|
239
383
|
};
|
240
|
-
|
384
|
+
|
385
|
+
const Two = '2.0';
|
386
|
+
const create$4 = (method, params) => {
|
241
387
|
return {
|
242
388
|
jsonrpc: Two,
|
243
|
-
|
244
|
-
|
389
|
+
method,
|
390
|
+
params
|
245
391
|
};
|
246
392
|
};
|
247
|
-
const
|
248
|
-
|
249
|
-
return create(message, resultProperty);
|
393
|
+
const state$1 = {
|
394
|
+
callbacks: Object.create(null)
|
250
395
|
};
|
251
|
-
const
|
252
|
-
|
253
|
-
const result = requiresSocket(message.method) ? await execute(message.method, ipc, ...message.params) : await execute(message.method, ...message.params);
|
254
|
-
return getSuccessResponse(message, result);
|
255
|
-
} catch (error) {
|
256
|
-
return getErrorResponse(message, error, preparePrettyError, logError);
|
257
|
-
}
|
396
|
+
const set = (id, fn) => {
|
397
|
+
state$1.callbacks[id] = fn;
|
258
398
|
};
|
259
|
-
const
|
260
|
-
return
|
399
|
+
const get = id => {
|
400
|
+
return state$1.callbacks[id];
|
261
401
|
};
|
262
|
-
const
|
263
|
-
|
402
|
+
const remove = id => {
|
403
|
+
delete state$1.callbacks[id];
|
264
404
|
};
|
265
|
-
|
266
|
-
|
405
|
+
let id = 0;
|
406
|
+
const create$3 = () => {
|
407
|
+
return ++id;
|
267
408
|
};
|
268
|
-
const
|
269
|
-
|
270
|
-
// TODO maybe remove this in v6 or v7, only accept options object to simplify the code
|
271
|
-
const normalizeParams = args => {
|
272
|
-
if (args.length === 1) {
|
273
|
-
const options = args[0];
|
274
|
-
return {
|
275
|
-
ipc: options.ipc,
|
276
|
-
message: options.message,
|
277
|
-
execute: options.execute,
|
278
|
-
resolve: options.resolve || defaultResolve,
|
279
|
-
preparePrettyError: options.preparePrettyError || defaultPreparePrettyError,
|
280
|
-
logError: options.logError || defaultLogError,
|
281
|
-
requiresSocket: options.requiresSocket || defaultRequiresSocket
|
282
|
-
};
|
283
|
-
}
|
284
|
-
return {
|
285
|
-
ipc: args[0],
|
286
|
-
message: args[1],
|
287
|
-
execute: args[2],
|
288
|
-
resolve: args[3],
|
289
|
-
preparePrettyError: args[4],
|
290
|
-
logError: args[5],
|
291
|
-
requiresSocket: args[6]
|
292
|
-
};
|
409
|
+
const warn = (...args) => {
|
410
|
+
console.warn(...args);
|
293
411
|
};
|
294
|
-
const
|
295
|
-
const
|
412
|
+
const registerPromise = () => {
|
413
|
+
const id = create$3();
|
296
414
|
const {
|
297
|
-
message,
|
298
|
-
ipc,
|
299
|
-
execute,
|
300
415
|
resolve,
|
301
|
-
preparePrettyError,
|
302
|
-
logError,
|
303
|
-
requiresSocket
|
304
|
-
} = options;
|
305
|
-
if ('id' in message) {
|
306
|
-
if ('method' in message) {
|
307
|
-
const response = await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
|
308
|
-
try {
|
309
|
-
ipc.send(response);
|
310
|
-
} catch (error) {
|
311
|
-
const errorResponse = getErrorResponse(message, error, preparePrettyError, logError);
|
312
|
-
ipc.send(errorResponse);
|
313
|
-
}
|
314
|
-
return;
|
315
|
-
}
|
316
|
-
resolve(message.id, message);
|
317
|
-
return;
|
318
|
-
}
|
319
|
-
if ('method' in message) {
|
320
|
-
await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
|
321
|
-
return;
|
322
|
-
}
|
323
|
-
throw new JsonRpcError('unexpected message');
|
324
|
-
};
|
325
|
-
const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
|
326
|
-
const {
|
327
|
-
message,
|
328
416
|
promise
|
329
|
-
} =
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
}
|
335
|
-
const responseMessage = await promise;
|
336
|
-
return unwrapJsonRpcResult(responseMessage);
|
337
|
-
};
|
338
|
-
const send = (transport, method, ...params) => {
|
339
|
-
const message = create$4(method, params);
|
340
|
-
transport.send(message);
|
341
|
-
};
|
342
|
-
const invoke$1 = (ipc, method, ...params) => {
|
343
|
-
return invokeHelper(ipc, method, params, false);
|
344
|
-
};
|
345
|
-
const invokeAndTransfer = (ipc, method, ...params) => {
|
346
|
-
return invokeHelper(ipc, method, params, true);
|
347
|
-
};
|
348
|
-
|
349
|
-
const commands = Object.create(null);
|
350
|
-
const register = commandMap => {
|
351
|
-
Object.assign(commands, commandMap);
|
352
|
-
};
|
353
|
-
const getCommand = key => {
|
354
|
-
return commands[key];
|
417
|
+
} = Promise.withResolvers();
|
418
|
+
set(id, resolve);
|
419
|
+
return {
|
420
|
+
id,
|
421
|
+
promise
|
422
|
+
};
|
355
423
|
};
|
356
|
-
const
|
357
|
-
const fn =
|
424
|
+
const resolve = (id, response) => {
|
425
|
+
const fn = get(id);
|
358
426
|
if (!fn) {
|
359
|
-
|
427
|
+
console.log(response);
|
428
|
+
warn(`callback ${id} may already be disposed`);
|
429
|
+
return;
|
360
430
|
}
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
const getData$1 = event => {
|
365
|
-
return event.data;
|
431
|
+
fn(response);
|
432
|
+
remove(id);
|
366
433
|
};
|
367
|
-
const
|
368
|
-
const
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
434
|
+
const create$2 = (method, params) => {
|
435
|
+
const {
|
436
|
+
id,
|
437
|
+
promise
|
438
|
+
} = registerPromise();
|
439
|
+
const message = {
|
440
|
+
jsonrpc: Two,
|
441
|
+
method,
|
442
|
+
params,
|
443
|
+
id
|
373
444
|
};
|
374
|
-
|
375
|
-
|
376
|
-
|
445
|
+
return {
|
446
|
+
message,
|
447
|
+
promise
|
377
448
|
};
|
378
|
-
that.onClose(handleClose);
|
379
449
|
};
|
380
|
-
class
|
381
|
-
constructor(
|
382
|
-
super();
|
383
|
-
this.
|
384
|
-
attachEvents(this);
|
450
|
+
class JsonRpcError extends Error {
|
451
|
+
constructor(message) {
|
452
|
+
super(message);
|
453
|
+
this.name = 'JsonRpcError';
|
385
454
|
}
|
386
455
|
}
|
387
|
-
const
|
388
|
-
const
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
}
|
406
|
-
return;
|
407
|
-
}
|
408
|
-
};
|
409
|
-
const isMessagePort = value => {
|
410
|
-
return value && value instanceof MessagePort;
|
411
|
-
};
|
412
|
-
const isMessagePortMain = value => {
|
413
|
-
return value && value.constructor && value.constructor.name === 'MessagePortMain';
|
414
|
-
};
|
415
|
-
const isOffscreenCanvas = value => {
|
416
|
-
return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
|
417
|
-
};
|
418
|
-
const isInstanceOf = (value, constructorName) => {
|
419
|
-
return value?.constructor?.name === constructorName;
|
420
|
-
};
|
421
|
-
const isSocket = value => {
|
422
|
-
return isInstanceOf(value, 'Socket');
|
423
|
-
};
|
424
|
-
const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
|
425
|
-
const isTransferrable = value => {
|
426
|
-
for (const fn of transferrables) {
|
427
|
-
if (fn(value)) {
|
428
|
-
return true;
|
456
|
+
const NewLine$1 = '\n';
|
457
|
+
const DomException = 'DOMException';
|
458
|
+
const ReferenceError$1 = 'ReferenceError';
|
459
|
+
const SyntaxError$1 = 'SyntaxError';
|
460
|
+
const TypeError$1 = 'TypeError';
|
461
|
+
const getErrorConstructor = (message, type) => {
|
462
|
+
if (type) {
|
463
|
+
switch (type) {
|
464
|
+
case DomException:
|
465
|
+
return DOMException;
|
466
|
+
case TypeError$1:
|
467
|
+
return TypeError;
|
468
|
+
case SyntaxError$1:
|
469
|
+
return SyntaxError;
|
470
|
+
case ReferenceError$1:
|
471
|
+
return ReferenceError;
|
472
|
+
default:
|
473
|
+
return Error;
|
429
474
|
}
|
430
475
|
}
|
431
|
-
|
432
|
-
|
433
|
-
const getTransferrables = value => {
|
434
|
-
const transferrables = [];
|
435
|
-
walkValue(value, transferrables, isTransferrable);
|
436
|
-
return transferrables;
|
437
|
-
};
|
438
|
-
const listen$2 = () => {
|
439
|
-
// @ts-ignore
|
440
|
-
if (typeof WorkerGlobalScope === 'undefined') {
|
441
|
-
throw new TypeError('module is not in web worker scope');
|
442
|
-
}
|
443
|
-
return globalThis;
|
444
|
-
};
|
445
|
-
const signal$2 = global => {
|
446
|
-
global.postMessage(readyMessage);
|
447
|
-
};
|
448
|
-
class IpcChildWithModuleWorker extends Ipc {
|
449
|
-
getData(event) {
|
450
|
-
return getData$1(event);
|
476
|
+
if (message.startsWith('TypeError: ')) {
|
477
|
+
return TypeError;
|
451
478
|
}
|
452
|
-
|
453
|
-
|
454
|
-
this._rawIpc.postMessage(message);
|
479
|
+
if (message.startsWith('SyntaxError: ')) {
|
480
|
+
return SyntaxError;
|
455
481
|
}
|
456
|
-
|
457
|
-
|
458
|
-
// @ts-ignore
|
459
|
-
this._rawIpc.postMessage(message, transfer);
|
482
|
+
if (message.startsWith('ReferenceError: ')) {
|
483
|
+
return ReferenceError;
|
460
484
|
}
|
461
|
-
|
462
|
-
|
485
|
+
return Error;
|
486
|
+
};
|
487
|
+
const constructError = (message, type, name) => {
|
488
|
+
const ErrorConstructor = getErrorConstructor(message, type);
|
489
|
+
if (ErrorConstructor === DOMException && name) {
|
490
|
+
return new ErrorConstructor(message, name);
|
463
491
|
}
|
464
|
-
|
465
|
-
|
492
|
+
if (ErrorConstructor === Error) {
|
493
|
+
const error = new Error(message);
|
494
|
+
if (name && name !== 'VError') {
|
495
|
+
error.name = name;
|
496
|
+
}
|
497
|
+
return error;
|
466
498
|
}
|
467
|
-
|
468
|
-
|
499
|
+
return new ErrorConstructor(message);
|
500
|
+
};
|
501
|
+
const getNewLineIndex = (string, startIndex = undefined) => {
|
502
|
+
return string.indexOf(NewLine$1, startIndex);
|
503
|
+
};
|
504
|
+
const getParentStack = error => {
|
505
|
+
let parentStack = error.stack || error.data || error.message || '';
|
506
|
+
if (parentStack.startsWith(' at')) {
|
507
|
+
parentStack = error.message + NewLine$1 + parentStack;
|
469
508
|
}
|
470
|
-
|
471
|
-
const wrap$5 = global => {
|
472
|
-
return new IpcChildWithModuleWorker(global);
|
509
|
+
return parentStack;
|
473
510
|
};
|
474
|
-
const E_INCOMPATIBLE_NATIVE_MODULE = 'E_INCOMPATIBLE_NATIVE_MODULE';
|
475
|
-
const E_MODULES_NOT_SUPPORTED_IN_ELECTRON = 'E_MODULES_NOT_SUPPORTED_IN_ELECTRON';
|
476
|
-
const ERR_MODULE_NOT_FOUND = 'ERR_MODULE_NOT_FOUND';
|
477
|
-
const NewLine$1 = '\n';
|
478
511
|
const joinLines$1 = lines => {
|
479
512
|
return lines.join(NewLine$1);
|
480
513
|
};
|
514
|
+
const MethodNotFound = -32601;
|
515
|
+
const Custom = -32001;
|
481
516
|
const splitLines = lines => {
|
482
517
|
return lines.split(NewLine$1);
|
483
518
|
};
|
484
|
-
const
|
485
|
-
|
486
|
-
|
487
|
-
const getModuleNotFoundError = stderr => {
|
488
|
-
const lines = splitLines(stderr);
|
489
|
-
const messageIndex = lines.findIndex(isModuleNotFoundMessage);
|
490
|
-
const message = lines[messageIndex];
|
491
|
-
return {
|
492
|
-
message,
|
493
|
-
code: ERR_MODULE_NOT_FOUND
|
494
|
-
};
|
495
|
-
};
|
496
|
-
const RE_NATIVE_MODULE_ERROR = /^innerError Error: Cannot find module '.*.node'/;
|
497
|
-
const RE_NATIVE_MODULE_ERROR_2 = /was compiled against a different Node.js version/;
|
498
|
-
const RE_MESSAGE_CODE_BLOCK_START = /^Error: The module '.*'$/;
|
499
|
-
const RE_MESSAGE_CODE_BLOCK_END = /^\s* at/;
|
500
|
-
const RE_AT = /^\s+at/;
|
501
|
-
const RE_AT_PROMISE_INDEX = /^\s*at async Promise.all \(index \d+\)$/;
|
502
|
-
const isUnhelpfulNativeModuleError = stderr => {
|
503
|
-
return RE_NATIVE_MODULE_ERROR.test(stderr) && RE_NATIVE_MODULE_ERROR_2.test(stderr);
|
504
|
-
};
|
505
|
-
const isMessageCodeBlockStartIndex = line => {
|
506
|
-
return RE_MESSAGE_CODE_BLOCK_START.test(line);
|
507
|
-
};
|
508
|
-
const isMessageCodeBlockEndIndex = line => {
|
509
|
-
return RE_MESSAGE_CODE_BLOCK_END.test(line);
|
510
|
-
};
|
511
|
-
const getMessageCodeBlock = stderr => {
|
512
|
-
const lines = splitLines(stderr);
|
513
|
-
const startIndex = lines.findIndex(isMessageCodeBlockStartIndex);
|
514
|
-
const endIndex = startIndex + lines.slice(startIndex).findIndex(isMessageCodeBlockEndIndex, startIndex);
|
515
|
-
const relevantLines = lines.slice(startIndex, endIndex);
|
516
|
-
const relevantMessage = relevantLines.join(' ').slice('Error: '.length);
|
517
|
-
return relevantMessage;
|
518
|
-
};
|
519
|
-
const getNativeModuleErrorMessage = stderr => {
|
520
|
-
const message = getMessageCodeBlock(stderr);
|
521
|
-
return {
|
522
|
-
message: `Incompatible native node module: ${message}`,
|
523
|
-
code: E_INCOMPATIBLE_NATIVE_MODULE
|
524
|
-
};
|
525
|
-
};
|
526
|
-
const isModulesSyntaxError = stderr => {
|
527
|
-
if (!stderr) {
|
528
|
-
return false;
|
519
|
+
const restoreJsonRpcError = error => {
|
520
|
+
if (error && error instanceof Error) {
|
521
|
+
return error;
|
529
522
|
}
|
530
|
-
|
531
|
-
|
532
|
-
const
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
}
|
523
|
+
const currentStack = joinLines$1(splitLines(new Error().stack || '').slice(1));
|
524
|
+
if (error && error.code && error.code === MethodNotFound) {
|
525
|
+
const restoredError = new JsonRpcError(error.message);
|
526
|
+
const parentStack = getParentStack(error);
|
527
|
+
restoredError.stack = parentStack + NewLine$1 + currentStack;
|
528
|
+
return restoredError;
|
529
|
+
}
|
530
|
+
if (error && error.message) {
|
531
|
+
const restoredError = constructError(error.message, error.type, error.name);
|
532
|
+
if (error.data) {
|
533
|
+
if (error.data.stack && error.data.type && error.message) {
|
534
|
+
restoredError.stack = error.data.type + ': ' + error.message + NewLine$1 + error.data.stack + NewLine$1 + currentStack;
|
535
|
+
} else if (error.data.stack) {
|
536
|
+
restoredError.stack = error.data.stack;
|
537
|
+
}
|
538
|
+
if (error.data.codeFrame) {
|
539
|
+
// @ts-ignore
|
540
|
+
restoredError.codeFrame = error.data.codeFrame;
|
541
|
+
}
|
542
|
+
if (error.data.code) {
|
543
|
+
// @ts-ignore
|
544
|
+
restoredError.code = error.data.code;
|
545
|
+
}
|
546
|
+
if (error.data.type) {
|
547
|
+
// @ts-ignore
|
548
|
+
restoredError.name = error.data.type;
|
549
|
+
}
|
550
|
+
} else {
|
551
|
+
if (error.stack) {
|
552
|
+
const lowerStack = restoredError.stack || '';
|
553
|
+
// @ts-ignore
|
554
|
+
const indexNewLine = getNewLineIndex(lowerStack);
|
555
|
+
const parentStack = getParentStack(error);
|
556
|
+
// @ts-ignore
|
557
|
+
restoredError.stack = parentStack + lowerStack.slice(indexNewLine);
|
558
|
+
}
|
559
|
+
if (error.codeFrame) {
|
560
|
+
// @ts-ignore
|
561
|
+
restoredError.codeFrame = error.codeFrame;
|
562
|
+
}
|
563
|
+
}
|
564
|
+
return restoredError;
|
565
|
+
}
|
566
|
+
if (typeof error === 'string') {
|
567
|
+
return new Error(`JsonRpc Error: ${error}`);
|
568
|
+
}
|
569
|
+
return new Error(`JsonRpc Error: ${error}`);
|
537
570
|
};
|
538
|
-
const
|
539
|
-
if (
|
540
|
-
|
571
|
+
const unwrapJsonRpcResult = responseMessage => {
|
572
|
+
if ('error' in responseMessage) {
|
573
|
+
const restoredError = restoreJsonRpcError(responseMessage.error);
|
574
|
+
throw restoredError;
|
541
575
|
}
|
542
|
-
|
576
|
+
if ('result' in responseMessage) {
|
577
|
+
return responseMessage.result;
|
578
|
+
}
|
579
|
+
throw new JsonRpcError('unexpected response message');
|
543
580
|
};
|
544
|
-
const
|
545
|
-
|
581
|
+
const E_COMMAND_NOT_FOUND = 'E_COMMAND_NOT_FOUND';
|
582
|
+
const getErrorType = prettyError => {
|
583
|
+
if (prettyError && prettyError.type) {
|
584
|
+
return prettyError.type;
|
585
|
+
}
|
586
|
+
if (prettyError && prettyError.constructor && prettyError.constructor.name) {
|
587
|
+
return prettyError.constructor.name;
|
588
|
+
}
|
589
|
+
return undefined;
|
546
590
|
};
|
547
|
-
const
|
548
|
-
|
549
|
-
if (index === -1) {
|
591
|
+
const getErrorProperty = (error, prettyError) => {
|
592
|
+
if (error && error.code === E_COMMAND_NOT_FOUND) {
|
550
593
|
return {
|
551
|
-
|
552
|
-
|
594
|
+
code: MethodNotFound,
|
595
|
+
message: error.message,
|
596
|
+
data: error.stack
|
553
597
|
};
|
554
598
|
}
|
555
|
-
let lastIndex = index - 1;
|
556
|
-
while (++lastIndex < lines.length) {
|
557
|
-
if (!isNormalStackLine(lines[lastIndex])) {
|
558
|
-
break;
|
559
|
-
}
|
560
|
-
}
|
561
599
|
return {
|
562
|
-
|
563
|
-
|
600
|
+
code: Custom,
|
601
|
+
message: prettyError.message,
|
602
|
+
data: {
|
603
|
+
stack: prettyError.stack,
|
604
|
+
codeFrame: prettyError.codeFrame,
|
605
|
+
type: getErrorType(prettyError),
|
606
|
+
code: prettyError.code,
|
607
|
+
name: prettyError.name
|
608
|
+
}
|
564
609
|
};
|
565
610
|
};
|
566
|
-
const
|
567
|
-
if (isUnhelpfulNativeModuleError(stderr)) {
|
568
|
-
return getNativeModuleErrorMessage(stderr);
|
569
|
-
}
|
570
|
-
if (isModulesSyntaxError(stderr)) {
|
571
|
-
return getModuleSyntaxError();
|
572
|
-
}
|
573
|
-
if (isModuleNotFoundError(stderr)) {
|
574
|
-
return getModuleNotFoundError(stderr);
|
575
|
-
}
|
576
|
-
const lines = splitLines(stderr);
|
577
|
-
const {
|
578
|
-
actualMessage,
|
579
|
-
rest
|
580
|
-
} = getDetails(lines);
|
611
|
+
const create$1 = (message, error) => {
|
581
612
|
return {
|
582
|
-
|
583
|
-
|
584
|
-
|
613
|
+
jsonrpc: Two,
|
614
|
+
id: message.id,
|
615
|
+
error
|
585
616
|
};
|
586
617
|
};
|
587
|
-
const
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
return
|
618
|
+
const getErrorResponse = (message, error, preparePrettyError, logError) => {
|
619
|
+
const prettyError = preparePrettyError(error);
|
620
|
+
logError(error, prettyError);
|
621
|
+
const errorProperty = getErrorProperty(error, prettyError);
|
622
|
+
return create$1(message, errorProperty);
|
623
|
+
};
|
624
|
+
const create$5 = (message, result) => {
|
625
|
+
return {
|
626
|
+
jsonrpc: Two,
|
627
|
+
id: message.id,
|
628
|
+
result: result ?? null
|
629
|
+
};
|
595
630
|
};
|
596
|
-
const
|
597
|
-
const
|
598
|
-
|
599
|
-
|
631
|
+
const getSuccessResponse = (message, result) => {
|
632
|
+
const resultProperty = result ?? null;
|
633
|
+
return create$5(message, resultProperty);
|
634
|
+
};
|
635
|
+
const getResponse = async (message, ipc, execute, preparePrettyError, logError, requiresSocket) => {
|
636
|
+
try {
|
637
|
+
const result = requiresSocket(message.method) ? await execute(message.method, ipc, ...message.params) : await execute(message.method, ...message.params);
|
638
|
+
return getSuccessResponse(message, result);
|
639
|
+
} catch (error) {
|
640
|
+
return getErrorResponse(message, error, preparePrettyError, logError);
|
600
641
|
}
|
601
|
-
return stringifiedError;
|
602
642
|
};
|
603
|
-
const
|
604
|
-
|
605
|
-
return string.indexOf(NewLine$2, startIndex);
|
643
|
+
const defaultPreparePrettyError = error => {
|
644
|
+
return error;
|
606
645
|
};
|
607
|
-
const
|
608
|
-
|
609
|
-
return parent;
|
610
|
-
}
|
611
|
-
const parentNewLineIndex = getNewLineIndex(parent);
|
612
|
-
const childNewLineIndex = getNewLineIndex(child);
|
613
|
-
if (childNewLineIndex === -1) {
|
614
|
-
return parent;
|
615
|
-
}
|
616
|
-
const parentFirstLine = parent.slice(0, parentNewLineIndex);
|
617
|
-
const childRest = child.slice(childNewLineIndex);
|
618
|
-
const childFirstLine = normalizeLine(child.slice(0, childNewLineIndex));
|
619
|
-
if (parentFirstLine.includes(childFirstLine)) {
|
620
|
-
return parentFirstLine + childRest;
|
621
|
-
}
|
622
|
-
return child;
|
646
|
+
const defaultLogError = () => {
|
647
|
+
// ignore
|
623
648
|
};
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
}
|
642
|
-
class IpcError extends VError {
|
643
|
-
// @ts-ignore
|
644
|
-
constructor(betterMessage, stdout = '', stderr = '') {
|
645
|
-
if (stdout || stderr) {
|
646
|
-
// @ts-ignore
|
647
|
-
const {
|
648
|
-
message,
|
649
|
-
code,
|
650
|
-
stack
|
651
|
-
} = getHelpfulChildProcessError(stdout, stderr);
|
652
|
-
const cause = new Error(message);
|
653
|
-
// @ts-ignore
|
654
|
-
cause.code = code;
|
655
|
-
cause.stack = stack;
|
656
|
-
super(cause, betterMessage);
|
657
|
-
} else {
|
658
|
-
super(betterMessage);
|
659
|
-
}
|
660
|
-
// @ts-ignore
|
661
|
-
this.name = 'IpcError';
|
662
|
-
// @ts-ignore
|
663
|
-
this.stdout = stdout;
|
664
|
-
// @ts-ignore
|
665
|
-
this.stderr = stderr;
|
649
|
+
const defaultRequiresSocket = () => {
|
650
|
+
return false;
|
651
|
+
};
|
652
|
+
const defaultResolve = resolve;
|
653
|
+
|
654
|
+
// TODO maybe remove this in v6 or v7, only accept options object to simplify the code
|
655
|
+
const normalizeParams = args => {
|
656
|
+
if (args.length === 1) {
|
657
|
+
const options = args[0];
|
658
|
+
return {
|
659
|
+
ipc: options.ipc,
|
660
|
+
message: options.message,
|
661
|
+
execute: options.execute,
|
662
|
+
resolve: options.resolve || defaultResolve,
|
663
|
+
preparePrettyError: options.preparePrettyError || defaultPreparePrettyError,
|
664
|
+
logError: options.logError || defaultLogError,
|
665
|
+
requiresSocket: options.requiresSocket || defaultRequiresSocket
|
666
|
+
};
|
666
667
|
}
|
667
|
-
}
|
668
|
-
const withResolvers = () => {
|
669
|
-
let _resolve;
|
670
|
-
const promise = new Promise(resolve => {
|
671
|
-
_resolve = resolve;
|
672
|
-
});
|
673
668
|
return {
|
674
|
-
|
675
|
-
|
669
|
+
ipc: args[0],
|
670
|
+
message: args[1],
|
671
|
+
execute: args[2],
|
672
|
+
resolve: args[3],
|
673
|
+
preparePrettyError: args[4],
|
674
|
+
logError: args[5],
|
675
|
+
requiresSocket: args[6]
|
676
676
|
};
|
677
677
|
};
|
678
|
-
const
|
678
|
+
const handleJsonRpcMessage = async (...args) => {
|
679
|
+
const options = normalizeParams(args);
|
679
680
|
const {
|
681
|
+
message,
|
682
|
+
ipc,
|
683
|
+
execute,
|
680
684
|
resolve,
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
if (firstMessage.method !== 'initialize') {
|
696
|
-
throw new IpcError('unexpected first message');
|
697
|
-
}
|
698
|
-
const type = firstMessage.params[0];
|
699
|
-
if (type === 'message-port') {
|
700
|
-
parentIpc.send({
|
701
|
-
jsonrpc: '2.0',
|
702
|
-
id: firstMessage.id,
|
703
|
-
result: null
|
704
|
-
});
|
705
|
-
parentIpc.dispose();
|
706
|
-
const port = firstMessage.params[1];
|
707
|
-
return port;
|
708
|
-
}
|
709
|
-
return globalThis;
|
710
|
-
};
|
711
|
-
class IpcChildWithModuleWorkerAndMessagePort extends Ipc {
|
712
|
-
constructor(port) {
|
713
|
-
super(port);
|
714
|
-
}
|
715
|
-
getData(event) {
|
716
|
-
return getData$1(event);
|
717
|
-
}
|
718
|
-
send(message) {
|
719
|
-
this._rawIpc.postMessage(message);
|
720
|
-
}
|
721
|
-
sendAndTransfer(message) {
|
722
|
-
const transfer = getTransferrables(message);
|
723
|
-
this._rawIpc.postMessage(message, transfer);
|
724
|
-
}
|
725
|
-
dispose() {
|
726
|
-
if (this._rawIpc.close) {
|
727
|
-
this._rawIpc.close();
|
685
|
+
preparePrettyError,
|
686
|
+
logError,
|
687
|
+
requiresSocket
|
688
|
+
} = options;
|
689
|
+
if ('id' in message) {
|
690
|
+
if ('method' in message) {
|
691
|
+
const response = await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
|
692
|
+
try {
|
693
|
+
ipc.send(response);
|
694
|
+
} catch (error) {
|
695
|
+
const errorResponse = getErrorResponse(message, error, preparePrettyError, logError);
|
696
|
+
ipc.send(errorResponse);
|
697
|
+
}
|
698
|
+
return;
|
728
699
|
}
|
700
|
+
resolve(message.id, message);
|
701
|
+
return;
|
729
702
|
}
|
730
|
-
|
731
|
-
|
703
|
+
if ('method' in message) {
|
704
|
+
await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
|
705
|
+
return;
|
732
706
|
}
|
733
|
-
|
734
|
-
|
735
|
-
|
707
|
+
throw new JsonRpcError('unexpected message');
|
708
|
+
};
|
709
|
+
const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
|
710
|
+
const {
|
711
|
+
message,
|
712
|
+
promise
|
713
|
+
} = create$2(method, params);
|
714
|
+
if (useSendAndTransfer && ipc.sendAndTransfer) {
|
715
|
+
ipc.sendAndTransfer(message);
|
716
|
+
} else {
|
717
|
+
ipc.send(message);
|
736
718
|
}
|
737
|
-
|
738
|
-
|
739
|
-
return new IpcChildWithModuleWorkerAndMessagePort(port);
|
719
|
+
const responseMessage = await promise;
|
720
|
+
return unwrapJsonRpcResult(responseMessage);
|
740
721
|
};
|
741
|
-
const
|
742
|
-
|
743
|
-
|
744
|
-
|
722
|
+
const send = (transport, method, ...params) => {
|
723
|
+
const message = create$4(method, params);
|
724
|
+
transport.send(message);
|
725
|
+
};
|
726
|
+
const invoke$1 = (ipc, method, ...params) => {
|
727
|
+
return invokeHelper(ipc, method, params, false);
|
728
|
+
};
|
729
|
+
const invokeAndTransfer = (ipc, method, ...params) => {
|
730
|
+
return invokeHelper(ipc, method, params, true);
|
731
|
+
};
|
732
|
+
|
733
|
+
const commands = Object.create(null);
|
734
|
+
const register = commandMap => {
|
735
|
+
Object.assign(commands, commandMap);
|
736
|
+
};
|
737
|
+
const getCommand = key => {
|
738
|
+
return commands[key];
|
739
|
+
};
|
740
|
+
const execute = (command, ...args) => {
|
741
|
+
const fn = getCommand(command);
|
742
|
+
if (!fn) {
|
743
|
+
throw new Error(`command not found ${command}`);
|
744
|
+
}
|
745
|
+
return fn(...args);
|
745
746
|
};
|
746
747
|
|
747
748
|
const createRpc = ipc => {
|
@@ -771,32 +772,38 @@ const logError = () => {
|
|
771
772
|
// handled by renderer worker
|
772
773
|
};
|
773
774
|
const handleMessage = event => {
|
774
|
-
|
775
|
+
const actualRequiresSocket = event?.target?.requiresSocket || requiresSocket;
|
776
|
+
return handleJsonRpcMessage(event.target, event.data, execute, resolve, preparePrettyError, logError, actualRequiresSocket);
|
775
777
|
};
|
776
778
|
const handleIpc = ipc => {
|
777
|
-
|
779
|
+
if ('addEventListener' in ipc) {
|
780
|
+
ipc.addEventListener('message', handleMessage);
|
781
|
+
} else if ('on' in ipc) {
|
782
|
+
// deprecated
|
783
|
+
ipc.on('message', handleMessage);
|
784
|
+
}
|
778
785
|
};
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
786
|
+
const listen$1 = async (module, options) => {
|
787
|
+
const rawIpc = await module.listen(options);
|
788
|
+
if (module.signal) {
|
789
|
+
module.signal(rawIpc);
|
790
|
+
}
|
784
791
|
const ipc = module.wrap(rawIpc);
|
785
792
|
return ipc;
|
786
793
|
};
|
787
|
-
const create
|
794
|
+
const create = async ({
|
788
795
|
commandMap
|
789
796
|
}) => {
|
790
797
|
// TODO create a commandMap per rpc instance
|
791
798
|
register(commandMap);
|
792
|
-
const ipc = await listen$1();
|
799
|
+
const ipc = await listen$1(IpcChildWithModuleWorkerAndMessagePort$1);
|
793
800
|
handleIpc(ipc);
|
794
801
|
const rpc = createRpc(ipc);
|
795
802
|
return rpc;
|
796
803
|
};
|
797
804
|
const WebWorkerRpcClient = {
|
798
805
|
__proto__: null,
|
799
|
-
create
|
806
|
+
create
|
800
807
|
};
|
801
808
|
|
802
809
|
const None = 0;
|
@@ -1140,17 +1147,29 @@ const joinLines = lines => {
|
|
1140
1147
|
return lines.join(NewLine);
|
1141
1148
|
};
|
1142
1149
|
|
1150
|
+
const state = {
|
1151
|
+
rpc: undefined
|
1152
|
+
};
|
1153
|
+
const invoke = (method, ...params) => {
|
1154
|
+
const rpc = state.rpc;
|
1155
|
+
// @ts-ignore
|
1156
|
+
return rpc.invoke(method, ...params);
|
1157
|
+
};
|
1158
|
+
const setRpc = rpc => {
|
1159
|
+
state.rpc = rpc;
|
1160
|
+
};
|
1161
|
+
|
1143
1162
|
const version = '0.0.0-dev';
|
1144
1163
|
const commit = 'unknown commit';
|
1145
1164
|
const date = '';
|
1146
1165
|
const getElectronVersion = () => {
|
1147
|
-
return '';
|
1166
|
+
return invoke('Process.getElectronVersion');
|
1148
1167
|
};
|
1149
1168
|
const getNodeVersion = () => {
|
1150
|
-
return '';
|
1169
|
+
return invoke('Process.getNodeVersion');
|
1151
1170
|
};
|
1152
1171
|
const getChromeVersion = () => {
|
1153
|
-
return '';
|
1172
|
+
return invoke('Process.getChromeVersion');
|
1154
1173
|
};
|
1155
1174
|
const getVersion = () => {
|
1156
1175
|
return version;
|
@@ -1237,6 +1256,7 @@ const renderLine = (line, index) => {
|
|
1237
1256
|
}
|
1238
1257
|
return [br, text(line)];
|
1239
1258
|
};
|
1259
|
+
|
1240
1260
|
const getAboutContentVirtualDom = lines => {
|
1241
1261
|
const dom = [{
|
1242
1262
|
type: Div,
|
@@ -1268,6 +1288,7 @@ const getPrimaryButtonVirtualDom = (message, onClick, name) => {
|
|
1268
1288
|
name
|
1269
1289
|
}, text(message)];
|
1270
1290
|
};
|
1291
|
+
|
1271
1292
|
const getSecondaryButtonVirtualDom = (message, onClick, name) => {
|
1272
1293
|
return [{
|
1273
1294
|
type: Button$1,
|
@@ -1452,7 +1473,7 @@ const doRender = (oldState, newState) => {
|
|
1452
1473
|
return commands;
|
1453
1474
|
};
|
1454
1475
|
|
1455
|
-
const
|
1476
|
+
const renderEventListeners = () => {
|
1456
1477
|
return [{
|
1457
1478
|
name: HandleClickOk,
|
1458
1479
|
params: ['handleClickOk']
|
@@ -1472,18 +1493,6 @@ const renderEventListers = () => {
|
|
1472
1493
|
}];
|
1473
1494
|
};
|
1474
1495
|
|
1475
|
-
const state = {
|
1476
|
-
rpc: undefined
|
1477
|
-
};
|
1478
|
-
const invoke = (method, ...params) => {
|
1479
|
-
const rpc = state.rpc;
|
1480
|
-
// @ts-ignore
|
1481
|
-
return rpc.invoke(method, ...params);
|
1482
|
-
};
|
1483
|
-
const setRpc = rpc => {
|
1484
|
-
state.rpc = rpc;
|
1485
|
-
};
|
1486
|
-
|
1487
1496
|
const writeText = async text => {
|
1488
1497
|
await invoke('ClipBoard.writeText', /* text */text);
|
1489
1498
|
};
|
@@ -1538,7 +1547,7 @@ const commandMap = {
|
|
1538
1547
|
'About.getVirtualDom': getAboutVirtualDom,
|
1539
1548
|
'About.loadContent': loadContent,
|
1540
1549
|
'About.render': doRender,
|
1541
|
-
'About.renderEventListeners':
|
1550
|
+
'About.renderEventListeners': renderEventListeners,
|
1542
1551
|
'About.showAboutElectron': showAboutElectron
|
1543
1552
|
};
|
1544
1553
|
|