@lvce-editor/json-rpc 0.1.1 → 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 CHANGED
@@ -14,3 +14,13 @@ export const invokeAndTransfer: (
14
14
  ) => Promise<any>
15
15
 
16
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$2 = (method, params) => {
3
+ const create$4 = (method, params) => {
4
4
  return {
5
5
  jsonrpc: Two,
6
6
  method,
@@ -49,7 +49,7 @@ const state$1 = {
49
49
  id: 0,
50
50
  };
51
51
 
52
- const create$1 = () => {
52
+ const create$3 = () => {
53
53
  return ++state$1.id
54
54
  };
55
55
 
@@ -82,7 +82,7 @@ const state = {
82
82
  };
83
83
 
84
84
  const registerPromise = () => {
85
- const id = create$1();
85
+ const id = create$3();
86
86
  const { resolve, promise } = withResolvers();
87
87
  state.callbacks[id] = resolve;
88
88
  return { id, promise }
@@ -99,7 +99,7 @@ const resolve = (id, args) => {
99
99
  delete state.callbacks[id];
100
100
  };
101
101
 
102
- const create = (method, params) => {
102
+ const create$2 = (method, params) => {
103
103
  const { id, promise } = registerPromise();
104
104
  const message = {
105
105
  jsonrpc: Two,
@@ -169,6 +169,7 @@ const joinLines = (lines) => {
169
169
  };
170
170
 
171
171
  const MethodNotFound = -32601;
172
+ const Custom = -32001;
172
173
 
173
174
  const splitLines = (lines) => {
174
175
  return lines.split(NewLine)
@@ -262,13 +263,142 @@ const unwrapJsonRpcResult = (responseMessage) => {
262
263
  throw new JsonRpcError('unexpected response message')
263
264
  };
264
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
+
265
395
  const send = (transport, method, ...params) => {
266
- const message = create$2(method, params);
396
+ const message = create$4(method, params);
267
397
  transport.send(message);
268
398
  };
269
399
 
270
400
  const invoke = async (ipc, method, ...params) => {
271
- const { message, promise } = create(method, params);
401
+ const { message, promise } = create$2(method, params);
272
402
  ipc.send(message);
273
403
  const responseMessage = await promise;
274
404
  const result = unwrapJsonRpcResult(responseMessage);
@@ -276,11 +406,11 @@ const invoke = async (ipc, method, ...params) => {
276
406
  };
277
407
 
278
408
  const invokeAndTransfer = async (ipc, handle, method, ...params) => {
279
- const { message, promise } = create(method, params);
409
+ const { message, promise } = create$2(method, params);
280
410
  ipc.sendAndTransfer(message, handle);
281
411
  const responseMessage = await promise;
282
412
  const result = unwrapJsonRpcResult(responseMessage);
283
413
  return result
284
414
  };
285
415
 
286
- export { invoke, invokeAndTransfer, resolve, send };
416
+ export { handleJsonRpcMessage, invoke, invokeAndTransfer, resolve, send };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/json-rpc",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "JsonRpc implementation",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",