@lvce-editor/json-rpc 1.0.0 → 1.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.
Files changed (2) hide show
  1. package/dist/index.js +132 -174
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -4,14 +4,14 @@ const create$4 = (method, params) => {
4
4
  return {
5
5
  jsonrpc: Two,
6
6
  method,
7
- params,
8
- }
7
+ params
8
+ };
9
9
  };
10
10
 
11
- var JsonRpcEvent = /*#__PURE__*/Object.freeze({
11
+ const JsonRpcEvent = {
12
12
  __proto__: null,
13
13
  create: create$4
14
- });
14
+ };
15
15
 
16
16
  class AssertionError extends Error {
17
17
  constructor(message) {
@@ -19,43 +19,53 @@ class AssertionError extends Error {
19
19
  this.name = 'AssertionError';
20
20
  }
21
21
  }
22
-
23
- const getType = (value) => {
22
+ const getType = value => {
24
23
  switch (typeof value) {
25
24
  case 'number':
26
- return 'number'
25
+ return 'number';
27
26
  case 'function':
28
- return 'function'
27
+ return 'function';
29
28
  case 'string':
30
- return 'string'
29
+ return 'string';
31
30
  case 'object':
32
31
  if (value === null) {
33
- return 'null'
32
+ return 'null';
34
33
  }
35
34
  if (Array.isArray(value)) {
36
- return 'array'
35
+ return 'array';
37
36
  }
38
- return 'object'
37
+ return 'object';
39
38
  case 'boolean':
40
- return 'boolean'
39
+ return 'boolean';
41
40
  default:
42
- return 'unknown'
41
+ return 'unknown';
43
42
  }
44
43
  };
45
-
46
- const number = (value) => {
44
+ const number = value => {
47
45
  const type = getType(value);
48
46
  if (type !== 'number') {
49
- throw new AssertionError('expected value to be of type number')
47
+ throw new AssertionError('expected value to be of type number');
50
48
  }
51
49
  };
52
50
 
53
51
  const state$1 = {
54
- id: 0,
52
+ callbacks: Object.create(null)
53
+ };
54
+ const set = (id, fn) => {
55
+ state$1.callbacks[id] = fn;
56
+ };
57
+ const get = id => {
58
+ return state$1.callbacks[id];
59
+ };
60
+ const remove = id => {
61
+ delete state$1.callbacks[id];
55
62
  };
56
63
 
64
+ const state = {
65
+ id: 0
66
+ };
57
67
  const create$3 = () => {
58
- return ++state$1.id
68
+ return ++state.id;
59
69
  };
60
70
 
61
71
  const warn = (...args) => {
@@ -67,61 +77,60 @@ const withResolvers = () => {
67
77
  * @type {any}
68
78
  */
69
79
  let _resolve;
70
- /**
71
- * @type {any}
72
- */
73
- let _reject;
74
- const promise = new Promise((resolve, reject) => {
80
+ const promise = new Promise(resolve => {
75
81
  _resolve = resolve;
76
- _reject = reject;
77
82
  });
78
83
  return {
79
84
  resolve: _resolve,
80
- reject: _reject,
81
- promise,
82
- }
83
- };
84
-
85
- const state = {
86
- callbacks: Object.create(null),
85
+ promise
86
+ };
87
87
  };
88
88
 
89
89
  const registerPromise = () => {
90
90
  const id = create$3();
91
- const { resolve, promise } = withResolvers();
92
- state.callbacks[id] = resolve;
93
- return { id, promise }
91
+ const {
92
+ resolve,
93
+ promise
94
+ } = withResolvers();
95
+ set(id, resolve);
96
+ return {
97
+ id,
98
+ promise
99
+ };
94
100
  };
95
-
96
101
  const resolve = (id, args) => {
97
102
  number(id);
98
- if (!(id in state.callbacks)) {
103
+ const fn = get(id);
104
+ if (!fn) {
99
105
  console.log(args);
100
106
  warn(`callback ${id} may already be disposed`);
101
- return
107
+ return;
102
108
  }
103
- state.callbacks[id](args);
104
- delete state.callbacks[id];
109
+ fn(args);
110
+ remove(id);
105
111
  };
106
112
 
107
113
  const create$2 = (method, params) => {
108
- const { id, promise } = registerPromise();
114
+ const {
115
+ id,
116
+ promise
117
+ } = registerPromise();
109
118
  const message = {
110
119
  jsonrpc: Two,
111
120
  method,
112
121
  params,
113
- id,
122
+ id
114
123
  };
115
124
  return {
116
125
  message,
117
- promise,
118
- }
126
+ promise
127
+ };
119
128
  };
120
129
 
121
- var JsonRpcRequest = /*#__PURE__*/Object.freeze({
130
+ const JsonRpcRequest = {
122
131
  __proto__: null,
123
132
  create: create$2
124
- });
133
+ };
125
134
 
126
135
  class JsonRpcError extends Error {
127
136
  constructor(message) {
@@ -130,6 +139,8 @@ class JsonRpcError extends Error {
130
139
  }
131
140
  }
132
141
 
142
+ const NewLine = '\n';
143
+
133
144
  const DomException = 'DOMException';
134
145
  const ReferenceError$1 = 'ReferenceError';
135
146
  const SyntaxError$1 = 'SyntaxError';
@@ -139,85 +150,78 @@ const getErrorConstructor = (message, type) => {
139
150
  if (type) {
140
151
  switch (type) {
141
152
  case DomException:
142
- return DOMException
153
+ // @ts-ignore
154
+ return DOMException;
143
155
  case TypeError$1:
144
- return TypeError
156
+ return TypeError;
145
157
  case SyntaxError$1:
146
- return SyntaxError
158
+ return SyntaxError;
147
159
  case ReferenceError$1:
148
- return ReferenceError
160
+ return ReferenceError;
149
161
  default:
150
- return Error
162
+ return Error;
151
163
  }
152
164
  }
153
165
  if (message.startsWith('TypeError: ')) {
154
- return TypeError
166
+ return TypeError;
155
167
  }
156
168
  if (message.startsWith('SyntaxError: ')) {
157
- return SyntaxError
169
+ return SyntaxError;
158
170
  }
159
171
  if (message.startsWith('ReferenceError: ')) {
160
- return ReferenceError
172
+ return ReferenceError;
161
173
  }
162
- return Error
163
- };
164
-
165
- const NewLine = '\n';
166
-
167
- /**
168
- *
169
- * @param {string} string
170
- * @param {number|undefined} startIndex
171
- * @returns
172
- */
173
- const getNewLineIndex = (string, startIndex = undefined) => {
174
- return string.indexOf(NewLine, startIndex)
175
- };
176
-
177
- const joinLines = (lines) => {
178
- return lines.join(NewLine)
179
- };
180
-
181
- const MethodNotFound = -32601;
182
- const Custom = -32001;
183
-
184
- const splitLines = (lines) => {
185
- return lines.split(NewLine)
174
+ return Error;
186
175
  };
187
176
 
188
177
  const constructError = (message, type, name) => {
189
178
  const ErrorConstructor = getErrorConstructor(message, type);
179
+ // @ts-ignore
190
180
  if (ErrorConstructor === DOMException && name) {
191
- return new ErrorConstructor(message, name)
181
+ return new ErrorConstructor(message, name);
192
182
  }
193
183
  if (ErrorConstructor === Error) {
194
184
  const error = new Error(message);
195
185
  if (name && name !== 'VError') {
196
186
  error.name = name;
197
187
  }
198
- return error
188
+ return error;
199
189
  }
200
- return new ErrorConstructor(message)
190
+ return new ErrorConstructor(message);
201
191
  };
202
192
 
203
- const getParentStack = (error) => {
193
+ const getNewLineIndex = (string, startIndex = undefined) => {
194
+ return string.indexOf(NewLine, startIndex);
195
+ };
196
+
197
+ const joinLines = lines => {
198
+ return lines.join(NewLine);
199
+ };
200
+
201
+ const MethodNotFound = -32601;
202
+ const Custom = -32001;
203
+
204
+ const splitLines = lines => {
205
+ return lines.split(NewLine);
206
+ };
207
+
208
+ const getParentStack = error => {
204
209
  let parentStack = error.stack || error.data || error.message || '';
205
210
  if (parentStack.startsWith(' at')) {
206
211
  parentStack = error.message + NewLine + parentStack;
207
212
  }
208
- return parentStack
213
+ return parentStack;
209
214
  };
210
-
211
- const restoreJsonRpcError = (error) => {
215
+ const restoreJsonRpcError = error => {
212
216
  if (error && error instanceof Error) {
213
- return error
217
+ return error;
214
218
  }
215
219
  const currentStack = joinLines(splitLines(new Error().stack).slice(1));
216
220
  if (error && error.code && error.code === MethodNotFound) {
217
221
  const restoredError = new JsonRpcError(error.message);
218
222
  const parentStack = getParentStack(error);
219
223
  restoredError.stack = parentStack + NewLine + currentStack;
220
- return restoredError
224
+ return restoredError;
221
225
  }
222
226
  if (error && error.message) {
223
227
  const restoredError = constructError(error.message, error.type, error.name);
@@ -254,31 +258,31 @@ const restoreJsonRpcError = (error) => {
254
258
  restoredError.codeFrame = error.codeFrame;
255
259
  }
256
260
  }
257
- return restoredError
261
+ return restoredError;
258
262
  }
259
263
  if (typeof error === 'string') {
260
- return new Error(`JsonRpc Error: ${error}`)
264
+ return new Error(`JsonRpc Error: ${error}`);
261
265
  }
262
- return new Error(`JsonRpc Error: ${error}`)
266
+ return new Error(`JsonRpc Error: ${error}`);
263
267
  };
264
268
 
265
- const unwrapJsonRpcResult = (responseMessage) => {
269
+ const unwrapJsonRpcResult = responseMessage => {
266
270
  if ('error' in responseMessage) {
267
271
  const restoredError = restoreJsonRpcError(responseMessage.error);
268
- throw restoredError
272
+ throw restoredError;
269
273
  }
270
274
  if ('result' in responseMessage) {
271
- return responseMessage.result
275
+ return responseMessage.result;
272
276
  }
273
- throw new JsonRpcError('unexpected response message')
277
+ throw new JsonRpcError('unexpected response message');
274
278
  };
275
279
 
276
280
  const create$1 = (message, error) => {
277
281
  return {
278
282
  jsonrpc: Two,
279
283
  id: message.id,
280
- error,
281
- }
284
+ error
285
+ };
282
286
  };
283
287
 
284
288
  const E_COMMAND_NOT_FOUND = 'E_COMMAND_NOT_FOUND';
@@ -288,8 +292,8 @@ const getErrorProperty = (error, prettyError) => {
288
292
  return {
289
293
  code: MethodNotFound,
290
294
  message: error.message,
291
- data: error.stack,
292
- }
295
+ data: error.stack
296
+ };
293
297
  }
294
298
  return {
295
299
  code: Custom,
@@ -298,130 +302,84 @@ const getErrorProperty = (error, prettyError) => {
298
302
  stack: prettyError.stack,
299
303
  codeFrame: prettyError.codeFrame,
300
304
  type: prettyError.type,
301
- code: prettyError.code,
302
- },
303
- }
305
+ code: prettyError.code
306
+ }
307
+ };
304
308
  };
305
-
306
- const getErrorResponse = (
307
- message,
308
- error,
309
- ipc,
310
- preparePrettyError,
311
- logError,
312
- ) => {
309
+ const getErrorResponse = (message, error, ipc, preparePrettyError, logError) => {
313
310
  const prettyError = preparePrettyError(error);
314
311
  logError(error, prettyError);
315
312
  const errorProperty = getErrorProperty(error, prettyError);
316
- return create$1(message, errorProperty)
313
+ return create$1(message, errorProperty);
317
314
  };
318
315
 
319
316
  const create = (message, result) => {
320
317
  return {
321
318
  jsonrpc: Two,
322
319
  id: message.id,
323
- result: result ?? null,
324
- }
320
+ result: result ?? null
321
+ };
325
322
  };
326
323
 
327
324
  const getSuccessResponse = (message, result) => {
328
325
  const resultProperty = result ?? null;
329
- return create(message, resultProperty)
326
+ return create(message, resultProperty);
330
327
  };
331
328
 
332
- const getResponse = async (
333
- message,
334
- ipc,
335
- execute,
336
- preparePrettyError,
337
- logError,
338
- requiresSocket,
339
- ) => {
329
+ const getResponse = async (message, ipc, execute, preparePrettyError, logError, requiresSocket) => {
340
330
  try {
341
- const result = requiresSocket(message.method)
342
- ? await execute(message.method, ipc, ...message.params)
343
- : await execute(message.method, ...message.params);
344
- return getSuccessResponse(message, result)
331
+ const result = requiresSocket(message.method) ? await execute(message.method, ipc, ...message.params) : await execute(message.method, ...message.params);
332
+ return getSuccessResponse(message, result);
345
333
  } catch (error) {
346
- return getErrorResponse(
347
- message,
348
- error,
349
- ipc,
350
- preparePrettyError,
351
- logError,
352
- )
334
+ return getErrorResponse(message, error, ipc, preparePrettyError, logError);
353
335
  }
354
336
  };
355
337
 
356
- const handleJsonRpcMessage = async (
357
- ipc,
358
- message,
359
- execute,
360
- resolve,
361
- preparePrettyError,
362
- logError,
363
- requiresSocket,
364
- ) => {
338
+ const handleJsonRpcMessage = async (ipc, message, execute, resolve, preparePrettyError, logError, requiresSocket) => {
365
339
  if ('id' in message) {
366
340
  if ('method' in message) {
367
- const response = await getResponse(
368
- message,
369
- ipc,
370
- execute,
371
- preparePrettyError,
372
- logError,
373
- requiresSocket,
374
- );
341
+ const response = await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
375
342
  try {
376
343
  ipc.send(response);
377
344
  } catch (error) {
378
- const errorResponse = getErrorResponse(
379
- message,
380
- error,
381
- ipc,
382
- preparePrettyError,
383
- logError,
384
- );
345
+ const errorResponse = getErrorResponse(message, error, ipc, preparePrettyError, logError);
385
346
  ipc.send(errorResponse);
386
347
  }
387
- return
348
+ return;
388
349
  }
389
350
  resolve(message.id, message);
390
- return
351
+ return;
391
352
  }
392
353
  if ('method' in message) {
393
- await getResponse(
394
- message,
395
- ipc,
396
- execute,
397
- preparePrettyError,
398
- logError,
399
- requiresSocket,
400
- );
401
- return
354
+ await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
355
+ return;
402
356
  }
403
- throw new JsonRpcError('unexpected message')
357
+ throw new JsonRpcError('unexpected message');
404
358
  };
405
359
 
406
360
  const send = (transport, method, ...params) => {
407
361
  const message = create$4(method, params);
408
362
  transport.send(message);
409
363
  };
410
-
411
364
  const invoke = async (ipc, method, ...params) => {
412
- const { message, promise } = create$2(method, params);
365
+ const {
366
+ message,
367
+ promise
368
+ } = create$2(method, params);
413
369
  ipc.send(message);
414
370
  const responseMessage = await promise;
415
371
  const result = unwrapJsonRpcResult(responseMessage);
416
- return result
372
+ return result;
417
373
  };
418
-
419
374
  const invokeAndTransfer = async (ipc, handle, method, ...params) => {
420
- const { message, promise } = create$2(method, params);
375
+ const {
376
+ message,
377
+ promise
378
+ } = create$2(method, params);
421
379
  ipc.sendAndTransfer(message, handle);
422
380
  const responseMessage = await promise;
423
381
  const result = unwrapJsonRpcResult(responseMessage);
424
- return result
382
+ return result;
425
383
  };
426
384
 
427
385
  export { JsonRpcEvent, JsonRpcRequest, getErrorResponse, getSuccessResponse, handleJsonRpcMessage, invoke, invokeAndTransfer, resolve, send };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/json-rpc",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "JsonRpc implementation",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -11,6 +11,6 @@
11
11
  "author": "Lvce Editor",
12
12
  "license": "MIT",
13
13
  "dependencies": {
14
- "@lvce-editor/assert": "^1.0.1"
14
+ "@lvce-editor/assert": "^1.2.0"
15
15
  }
16
16
  }