@lvce-editor/json-rpc 0.1.0 → 0.2.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 +24 -1
- package/dist/index.js +190 -8
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const send: (ipc: any, method: string, ...params: any[]) => void
|
|
2
|
+
|
|
3
|
+
export const invoke: (
|
|
4
|
+
ipc: any,
|
|
5
|
+
method: string,
|
|
6
|
+
...params: any[]
|
|
7
|
+
) => Promise<any>
|
|
8
|
+
|
|
9
|
+
export const invokeAndTransfer: (
|
|
10
|
+
ipc: any,
|
|
11
|
+
transfer: any,
|
|
12
|
+
method: string,
|
|
13
|
+
...params: any[]
|
|
14
|
+
) => Promise<any>
|
|
2
15
|
|
|
3
16
|
export const resolve: (id: number, message: any) => void
|
|
17
|
+
|
|
18
|
+
export const handleJsonRpcMessage: (
|
|
19
|
+
ipc: any,
|
|
20
|
+
message: any,
|
|
21
|
+
execute: (method: string, ...params: any[]) => Promise<any>,
|
|
22
|
+
resolve: any,
|
|
23
|
+
preparePrettyError: (error: any) => Promise<any>,
|
|
24
|
+
logError: (error: any) => void,
|
|
25
|
+
requiresSocket: (method: string) => void,
|
|
26
|
+
) => Promise<void>
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const Two = '2.0';
|
|
2
2
|
|
|
3
|
-
const create$
|
|
3
|
+
const create$4 = (method, params) => {
|
|
4
4
|
return {
|
|
5
5
|
jsonrpc: Two,
|
|
6
6
|
method,
|
|
@@ -8,14 +8,55 @@ const create$2 = (method, params) => {
|
|
|
8
8
|
}
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
+
class AssertionError extends Error {
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'AssertionError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const getType = (value) => {
|
|
19
|
+
switch (typeof value) {
|
|
20
|
+
case 'number':
|
|
21
|
+
return 'number'
|
|
22
|
+
case 'function':
|
|
23
|
+
return 'function'
|
|
24
|
+
case 'string':
|
|
25
|
+
return 'string'
|
|
26
|
+
case 'object':
|
|
27
|
+
if (value === null) {
|
|
28
|
+
return 'null'
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(value)) {
|
|
31
|
+
return 'array'
|
|
32
|
+
}
|
|
33
|
+
return 'object'
|
|
34
|
+
case 'boolean':
|
|
35
|
+
return 'boolean'
|
|
36
|
+
default:
|
|
37
|
+
return 'unknown'
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const number = (value) => {
|
|
42
|
+
const type = getType(value);
|
|
43
|
+
if (type !== 'number') {
|
|
44
|
+
throw new AssertionError('expected value to be of type number')
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
11
48
|
const state$1 = {
|
|
12
49
|
id: 0,
|
|
13
50
|
};
|
|
14
51
|
|
|
15
|
-
const create$
|
|
52
|
+
const create$3 = () => {
|
|
16
53
|
return ++state$1.id
|
|
17
54
|
};
|
|
18
55
|
|
|
56
|
+
const warn = (...args) => {
|
|
57
|
+
console.warn(...args);
|
|
58
|
+
};
|
|
59
|
+
|
|
19
60
|
const withResolvers = () => {
|
|
20
61
|
/**
|
|
21
62
|
* @type {any}
|
|
@@ -41,13 +82,24 @@ const state = {
|
|
|
41
82
|
};
|
|
42
83
|
|
|
43
84
|
const registerPromise = () => {
|
|
44
|
-
const id = create$
|
|
85
|
+
const id = create$3();
|
|
45
86
|
const { resolve, promise } = withResolvers();
|
|
46
87
|
state.callbacks[id] = resolve;
|
|
47
88
|
return { id, promise }
|
|
48
89
|
};
|
|
49
90
|
|
|
50
|
-
const
|
|
91
|
+
const resolve = (id, args) => {
|
|
92
|
+
number(id);
|
|
93
|
+
if (!(id in state.callbacks)) {
|
|
94
|
+
console.log(args);
|
|
95
|
+
warn(`callback ${id} may already be disposed`);
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
state.callbacks[id](args);
|
|
99
|
+
delete state.callbacks[id];
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const create$2 = (method, params) => {
|
|
51
103
|
const { id, promise } = registerPromise();
|
|
52
104
|
const message = {
|
|
53
105
|
jsonrpc: Two,
|
|
@@ -117,6 +169,7 @@ const joinLines = (lines) => {
|
|
|
117
169
|
};
|
|
118
170
|
|
|
119
171
|
const MethodNotFound = -32601;
|
|
172
|
+
const Custom = -32001;
|
|
120
173
|
|
|
121
174
|
const splitLines = (lines) => {
|
|
122
175
|
return lines.split(NewLine)
|
|
@@ -210,13 +263,142 @@ const unwrapJsonRpcResult = (responseMessage) => {
|
|
|
210
263
|
throw new JsonRpcError('unexpected response message')
|
|
211
264
|
};
|
|
212
265
|
|
|
266
|
+
const create$1 = (message, error) => {
|
|
267
|
+
return {
|
|
268
|
+
jsonrpc: Two,
|
|
269
|
+
id: message.id,
|
|
270
|
+
error,
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
const E_COMMAND_NOT_FOUND = 'E_COMMAND_NOT_FOUND';
|
|
275
|
+
|
|
276
|
+
const getErrorProperty = (error, prettyError) => {
|
|
277
|
+
if (error && error.code === E_COMMAND_NOT_FOUND) {
|
|
278
|
+
return {
|
|
279
|
+
code: MethodNotFound,
|
|
280
|
+
message: error.message,
|
|
281
|
+
data: error.stack,
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
code: Custom,
|
|
286
|
+
message: prettyError.message,
|
|
287
|
+
data: {
|
|
288
|
+
stack: prettyError.stack,
|
|
289
|
+
codeFrame: prettyError.codeFrame,
|
|
290
|
+
type: prettyError.type,
|
|
291
|
+
code: prettyError.code,
|
|
292
|
+
},
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
const getErrorResponse = (
|
|
297
|
+
message,
|
|
298
|
+
error,
|
|
299
|
+
ipc,
|
|
300
|
+
preparePrettyError,
|
|
301
|
+
logError,
|
|
302
|
+
) => {
|
|
303
|
+
const prettyError = preparePrettyError(error);
|
|
304
|
+
logError(error, prettyError);
|
|
305
|
+
const errorProperty = getErrorProperty(error, prettyError);
|
|
306
|
+
return create$1(message, errorProperty)
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
const create = (message, result) => {
|
|
310
|
+
return {
|
|
311
|
+
jsonrpc: Two,
|
|
312
|
+
id: message.id,
|
|
313
|
+
result: result ?? null,
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
const getSuccessResponse = (message, result) => {
|
|
318
|
+
const resultProperty = result ?? null;
|
|
319
|
+
return create(message, resultProperty)
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
const getResponse = async (
|
|
323
|
+
message,
|
|
324
|
+
ipc,
|
|
325
|
+
execute,
|
|
326
|
+
preparePrettyError,
|
|
327
|
+
logError,
|
|
328
|
+
requiresSocket,
|
|
329
|
+
) => {
|
|
330
|
+
try {
|
|
331
|
+
const result = requiresSocket(message.method)
|
|
332
|
+
? await execute(message.method, ipc, ...message.params)
|
|
333
|
+
: await execute(message.method, ...message.params);
|
|
334
|
+
return getSuccessResponse(message, result)
|
|
335
|
+
} catch (error) {
|
|
336
|
+
return getErrorResponse(
|
|
337
|
+
message,
|
|
338
|
+
error,
|
|
339
|
+
ipc,
|
|
340
|
+
preparePrettyError,
|
|
341
|
+
logError,
|
|
342
|
+
)
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
const handleJsonRpcMessage = async (
|
|
347
|
+
ipc,
|
|
348
|
+
message,
|
|
349
|
+
execute,
|
|
350
|
+
resolve,
|
|
351
|
+
preparePrettyError,
|
|
352
|
+
logError,
|
|
353
|
+
requiresSocket,
|
|
354
|
+
) => {
|
|
355
|
+
if ('id' in message) {
|
|
356
|
+
if ('method' in message) {
|
|
357
|
+
const response = await getResponse(
|
|
358
|
+
message,
|
|
359
|
+
ipc,
|
|
360
|
+
execute,
|
|
361
|
+
preparePrettyError,
|
|
362
|
+
logError,
|
|
363
|
+
requiresSocket,
|
|
364
|
+
);
|
|
365
|
+
try {
|
|
366
|
+
ipc.send(response);
|
|
367
|
+
} catch (error) {
|
|
368
|
+
const errorResponse = getErrorResponse(
|
|
369
|
+
message,
|
|
370
|
+
error,
|
|
371
|
+
ipc,
|
|
372
|
+
preparePrettyError,
|
|
373
|
+
logError,
|
|
374
|
+
);
|
|
375
|
+
ipc.send(errorResponse);
|
|
376
|
+
}
|
|
377
|
+
return
|
|
378
|
+
}
|
|
379
|
+
resolve(message.id, message);
|
|
380
|
+
return
|
|
381
|
+
}
|
|
382
|
+
if ('method' in message) {
|
|
383
|
+
await getResponse(
|
|
384
|
+
message,
|
|
385
|
+
ipc,
|
|
386
|
+
execute,
|
|
387
|
+
preparePrettyError,
|
|
388
|
+
logError,
|
|
389
|
+
);
|
|
390
|
+
return
|
|
391
|
+
}
|
|
392
|
+
throw new JsonRpcError('unexpected message')
|
|
393
|
+
};
|
|
394
|
+
|
|
213
395
|
const send = (transport, method, ...params) => {
|
|
214
|
-
const message = create$
|
|
396
|
+
const message = create$4(method, params);
|
|
215
397
|
transport.send(message);
|
|
216
398
|
};
|
|
217
399
|
|
|
218
400
|
const invoke = async (ipc, method, ...params) => {
|
|
219
|
-
const { message, promise } = create(method, params);
|
|
401
|
+
const { message, promise } = create$2(method, params);
|
|
220
402
|
ipc.send(message);
|
|
221
403
|
const responseMessage = await promise;
|
|
222
404
|
const result = unwrapJsonRpcResult(responseMessage);
|
|
@@ -224,11 +406,11 @@ const invoke = async (ipc, method, ...params) => {
|
|
|
224
406
|
};
|
|
225
407
|
|
|
226
408
|
const invokeAndTransfer = async (ipc, handle, method, ...params) => {
|
|
227
|
-
const { message, promise } = create(method, params);
|
|
409
|
+
const { message, promise } = create$2(method, params);
|
|
228
410
|
ipc.sendAndTransfer(message, handle);
|
|
229
411
|
const responseMessage = await promise;
|
|
230
412
|
const result = unwrapJsonRpcResult(responseMessage);
|
|
231
413
|
return result
|
|
232
414
|
};
|
|
233
415
|
|
|
234
|
-
export { invoke, invokeAndTransfer, send };
|
|
416
|
+
export { handleJsonRpcMessage, invoke, invokeAndTransfer, resolve, send };
|