@lvce-editor/json-rpc 0.1.1 → 0.2.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/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) => 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,143 @@ 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
+ requiresSocket,
390
+ );
391
+ return
392
+ }
393
+ throw new JsonRpcError('unexpected message')
394
+ };
395
+
265
396
  const send = (transport, method, ...params) => {
266
- const message = create$2(method, params);
397
+ const message = create$4(method, params);
267
398
  transport.send(message);
268
399
  };
269
400
 
270
401
  const invoke = async (ipc, method, ...params) => {
271
- const { message, promise } = create(method, params);
402
+ const { message, promise } = create$2(method, params);
272
403
  ipc.send(message);
273
404
  const responseMessage = await promise;
274
405
  const result = unwrapJsonRpcResult(responseMessage);
@@ -276,11 +407,11 @@ const invoke = async (ipc, method, ...params) => {
276
407
  };
277
408
 
278
409
  const invokeAndTransfer = async (ipc, handle, method, ...params) => {
279
- const { message, promise } = create(method, params);
410
+ const { message, promise } = create$2(method, params);
280
411
  ipc.sendAndTransfer(message, handle);
281
412
  const responseMessage = await promise;
282
413
  const result = unwrapJsonRpcResult(responseMessage);
283
414
  return result
284
415
  };
285
416
 
286
- export { invoke, invokeAndTransfer, resolve, send };
417
+ 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.1",
4
4
  "description": "JsonRpc implementation",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",