@lvce-editor/json-rpc 1.3.0 → 2.0.0
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/dist/index.d.ts +37 -15
- package/dist/index.js +101 -5
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -6,24 +6,46 @@ export const invoke: (
|
|
|
6
6
|
...params: any[]
|
|
7
7
|
) => Promise<any>
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
ipc: any,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
interface InvokeAndTransfer {
|
|
10
|
+
(ipc: any, transfer: any, method: string, ...params: any[]): Promise<any>
|
|
11
|
+
(ipc: any, method: string, ...params: any[]): Promise<any>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const invokeAndTransfer: InvokeAndTransfer
|
|
15
15
|
|
|
16
16
|
export const resolve: (id: number, message: any) => void
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
) =>
|
|
18
|
+
interface HandleJsonRpcMessage {
|
|
19
|
+
(
|
|
20
|
+
ipc: any,
|
|
21
|
+
message: any,
|
|
22
|
+
execute: (method: string, ...params: any[]) => Promise<any>,
|
|
23
|
+
resolve: any,
|
|
24
|
+
preparePrettyError: (error: any) => any,
|
|
25
|
+
logError: (error: any) => void,
|
|
26
|
+
requiresSocket: (method: string) => void,
|
|
27
|
+
): Promise<void>
|
|
28
|
+
|
|
29
|
+
({
|
|
30
|
+
ipc,
|
|
31
|
+
message,
|
|
32
|
+
execute,
|
|
33
|
+
resolve,
|
|
34
|
+
preparePrettyError,
|
|
35
|
+
logError,
|
|
36
|
+
requiresSocket,
|
|
37
|
+
}: {
|
|
38
|
+
ipc: any
|
|
39
|
+
message: any
|
|
40
|
+
execute: (method: string, ...params: any[]) => Promise<any>
|
|
41
|
+
resolve?: any
|
|
42
|
+
preparePrettyError: (error: any) => any
|
|
43
|
+
logError: (error: any) => void
|
|
44
|
+
requiresSocket: (method: string) => void
|
|
45
|
+
}): Promise<void>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const handleJsonRpcMessage: HandleJsonRpcMessage
|
|
27
49
|
|
|
28
50
|
export const getErrorResponse: (
|
|
29
51
|
message: any,
|
package/dist/index.js
CHANGED
|
@@ -277,6 +277,58 @@ const unwrapJsonRpcResult = responseMessage => {
|
|
|
277
277
|
throw new JsonRpcError('unexpected response message');
|
|
278
278
|
};
|
|
279
279
|
|
|
280
|
+
const isInstanceOf = (value, constructorName) => {
|
|
281
|
+
return value?.constructor?.name === constructorName;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const isSocket = value => {
|
|
285
|
+
return isInstanceOf(value, 'Socket');
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
const isSingleTransferrable = value => {
|
|
289
|
+
return isSocket(value);
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
const isMessagePort = value => {
|
|
293
|
+
return typeof MessagePort !== 'undefined' && value instanceof MessagePort;
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
const isMessagePortMain = value => {
|
|
297
|
+
return isInstanceOf(value, 'MessagePortMain');
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
const isOffscreenCanvas = value => {
|
|
301
|
+
return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
|
|
305
|
+
|
|
306
|
+
const isTransferrable = value => {
|
|
307
|
+
for (const fn of transferrables) {
|
|
308
|
+
if (fn(value)) {
|
|
309
|
+
return true;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return false;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
const getTransferrableParams = value => {
|
|
316
|
+
if (isTransferrable(value)) {
|
|
317
|
+
return value;
|
|
318
|
+
}
|
|
319
|
+
if (Array.isArray(value)) {
|
|
320
|
+
const result = value.filter(isTransferrable);
|
|
321
|
+
if (result.length === 0) {
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
if (result.length === 1 && isSingleTransferrable(result[0])) {
|
|
325
|
+
return result[0];
|
|
326
|
+
}
|
|
327
|
+
return result;
|
|
328
|
+
}
|
|
329
|
+
return undefined;
|
|
330
|
+
};
|
|
331
|
+
|
|
280
332
|
const create$1 = (message, error) => {
|
|
281
333
|
return {
|
|
282
334
|
jsonrpc: Two,
|
|
@@ -306,7 +358,7 @@ const getErrorProperty = (error, prettyError) => {
|
|
|
306
358
|
}
|
|
307
359
|
};
|
|
308
360
|
};
|
|
309
|
-
const getErrorResponse = (message, error,
|
|
361
|
+
const getErrorResponse = (message, error, preparePrettyError, logError) => {
|
|
310
362
|
const prettyError = preparePrettyError(error);
|
|
311
363
|
logError(error, prettyError);
|
|
312
364
|
const errorProperty = getErrorProperty(error, prettyError);
|
|
@@ -331,18 +383,53 @@ const getResponse = async (message, ipc, execute, preparePrettyError, logError,
|
|
|
331
383
|
const result = requiresSocket(message.method) ? await execute(message.method, ipc, ...message.params) : await execute(message.method, ...message.params);
|
|
332
384
|
return getSuccessResponse(message, result);
|
|
333
385
|
} catch (error) {
|
|
334
|
-
return getErrorResponse(message, error,
|
|
386
|
+
return getErrorResponse(message, error, preparePrettyError, logError);
|
|
335
387
|
}
|
|
336
388
|
};
|
|
337
389
|
|
|
338
|
-
const
|
|
390
|
+
const defaultPreparePrettyError = error => {
|
|
391
|
+
return error;
|
|
392
|
+
};
|
|
393
|
+
const defaultLogError = () => {
|
|
394
|
+
// ignore
|
|
395
|
+
};
|
|
396
|
+
const defaultRequiresSocket = () => {
|
|
397
|
+
return false;
|
|
398
|
+
};
|
|
399
|
+
const defaultResolve = resolve;
|
|
400
|
+
const handleJsonRpcMessage = async (...args) => {
|
|
401
|
+
let message;
|
|
402
|
+
let ipc;
|
|
403
|
+
let execute;
|
|
404
|
+
let preparePrettyError;
|
|
405
|
+
let logError;
|
|
406
|
+
let resolve;
|
|
407
|
+
let requiresSocket;
|
|
408
|
+
if (args.length === 1) {
|
|
409
|
+
const arg = args[0];
|
|
410
|
+
message = arg.message;
|
|
411
|
+
ipc = arg.ipc;
|
|
412
|
+
execute = arg.execute;
|
|
413
|
+
preparePrettyError = arg.preparePrettyError || defaultPreparePrettyError;
|
|
414
|
+
logError = arg.logError || defaultLogError;
|
|
415
|
+
requiresSocket = arg.requiresSocket || defaultRequiresSocket;
|
|
416
|
+
resolve = arg.resolve || defaultResolve;
|
|
417
|
+
} else {
|
|
418
|
+
ipc = args[0];
|
|
419
|
+
message = args[1];
|
|
420
|
+
execute = args[2];
|
|
421
|
+
resolve = args[3];
|
|
422
|
+
preparePrettyError = args[4];
|
|
423
|
+
logError = args[5];
|
|
424
|
+
requiresSocket = args[6];
|
|
425
|
+
}
|
|
339
426
|
if ('id' in message) {
|
|
340
427
|
if ('method' in message) {
|
|
341
428
|
const response = await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
|
|
342
429
|
try {
|
|
343
430
|
ipc.send(response);
|
|
344
431
|
} catch (error) {
|
|
345
|
-
const errorResponse = getErrorResponse(message, error,
|
|
432
|
+
const errorResponse = getErrorResponse(message, error, preparePrettyError, logError);
|
|
346
433
|
ipc.send(errorResponse);
|
|
347
434
|
}
|
|
348
435
|
return;
|
|
@@ -371,12 +458,21 @@ const invoke = async (ipc, method, ...params) => {
|
|
|
371
458
|
const result = unwrapJsonRpcResult(responseMessage);
|
|
372
459
|
return result;
|
|
373
460
|
};
|
|
461
|
+
|
|
462
|
+
// TODO deprecated old typings,
|
|
463
|
+
// always use automatic transferrable detection
|
|
374
464
|
const invokeAndTransfer = async (ipc, handle, method, ...params) => {
|
|
465
|
+
let transfer = handle;
|
|
466
|
+
if (typeof handle === 'string') {
|
|
467
|
+
params = [method, ...params];
|
|
468
|
+
method = handle;
|
|
469
|
+
transfer = getTransferrableParams(params);
|
|
470
|
+
}
|
|
375
471
|
const {
|
|
376
472
|
message,
|
|
377
473
|
promise
|
|
378
474
|
} = create$2(method, params);
|
|
379
|
-
ipc.sendAndTransfer(message,
|
|
475
|
+
ipc.sendAndTransfer(message, transfer);
|
|
380
476
|
const responseMessage = await promise;
|
|
381
477
|
const result = unwrapJsonRpcResult(responseMessage);
|
|
382
478
|
return result;
|