@lvce-editor/completion-worker 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.
- package/dist/completionWorkerMain.js +230 -77
- package/package.json +1 -1
|
@@ -403,9 +403,103 @@ const IpcChildWithModuleWorkerAndMessagePort$1 = {
|
|
|
403
403
|
listen: listen$6,
|
|
404
404
|
wrap: wrap$e
|
|
405
405
|
};
|
|
406
|
+
const addListener = (emitter, type, callback) => {
|
|
407
|
+
if ('addEventListener' in emitter) {
|
|
408
|
+
emitter.addEventListener(type, callback);
|
|
409
|
+
} else {
|
|
410
|
+
emitter.on(type, callback);
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
const removeListener = (emitter, type, callback) => {
|
|
414
|
+
if ('removeEventListener' in emitter) {
|
|
415
|
+
emitter.removeEventListener(type, callback);
|
|
416
|
+
} else {
|
|
417
|
+
emitter.off(type, callback);
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
const getFirstEvent = (eventEmitter, eventMap) => {
|
|
421
|
+
const {
|
|
422
|
+
resolve,
|
|
423
|
+
promise
|
|
424
|
+
} = Promise.withResolvers();
|
|
425
|
+
const listenerMap = Object.create(null);
|
|
426
|
+
const cleanup = value => {
|
|
427
|
+
for (const event of Object.keys(eventMap)) {
|
|
428
|
+
removeListener(eventEmitter, event, listenerMap[event]);
|
|
429
|
+
}
|
|
430
|
+
resolve(value);
|
|
431
|
+
};
|
|
432
|
+
for (const [event, type] of Object.entries(eventMap)) {
|
|
433
|
+
const listener = event => {
|
|
434
|
+
cleanup({
|
|
435
|
+
type,
|
|
436
|
+
event
|
|
437
|
+
});
|
|
438
|
+
};
|
|
439
|
+
addListener(eventEmitter, event, listener);
|
|
440
|
+
listenerMap[event] = listener;
|
|
441
|
+
}
|
|
442
|
+
return promise;
|
|
443
|
+
};
|
|
444
|
+
const Message$1 = 3;
|
|
445
|
+
const create$5$1 = async ({
|
|
446
|
+
messagePort,
|
|
447
|
+
isMessagePortOpen
|
|
448
|
+
}) => {
|
|
449
|
+
if (!isMessagePort(messagePort)) {
|
|
450
|
+
throw new IpcError('port must be of type MessagePort');
|
|
451
|
+
}
|
|
452
|
+
if (isMessagePortOpen) {
|
|
453
|
+
return messagePort;
|
|
454
|
+
}
|
|
455
|
+
const eventPromise = getFirstEvent(messagePort, {
|
|
456
|
+
message: Message$1
|
|
457
|
+
});
|
|
458
|
+
messagePort.start();
|
|
459
|
+
const {
|
|
460
|
+
type,
|
|
461
|
+
event
|
|
462
|
+
} = await eventPromise;
|
|
463
|
+
if (type !== Message$1) {
|
|
464
|
+
throw new IpcError('Failed to wait for ipc message');
|
|
465
|
+
}
|
|
466
|
+
if (event.data !== readyMessage) {
|
|
467
|
+
throw new IpcError('unexpected first message');
|
|
468
|
+
}
|
|
469
|
+
return messagePort;
|
|
470
|
+
};
|
|
471
|
+
const signal$1 = messagePort => {
|
|
472
|
+
messagePort.start();
|
|
473
|
+
};
|
|
474
|
+
class IpcParentWithMessagePort extends Ipc {
|
|
475
|
+
getData = getData$2;
|
|
476
|
+
send(message) {
|
|
477
|
+
this._rawIpc.postMessage(message);
|
|
478
|
+
}
|
|
479
|
+
sendAndTransfer(message) {
|
|
480
|
+
const transfer = getTransferrables(message);
|
|
481
|
+
this._rawIpc.postMessage(message, transfer);
|
|
482
|
+
}
|
|
483
|
+
dispose() {
|
|
484
|
+
this._rawIpc.close();
|
|
485
|
+
}
|
|
486
|
+
onMessage(callback) {
|
|
487
|
+
this._rawIpc.addEventListener('message', callback);
|
|
488
|
+
}
|
|
489
|
+
onClose(callback) {}
|
|
490
|
+
}
|
|
491
|
+
const wrap$5 = messagePort => {
|
|
492
|
+
return new IpcParentWithMessagePort(messagePort);
|
|
493
|
+
};
|
|
494
|
+
const IpcParentWithMessagePort$1 = {
|
|
495
|
+
__proto__: null,
|
|
496
|
+
create: create$5$1,
|
|
497
|
+
signal: signal$1,
|
|
498
|
+
wrap: wrap$5
|
|
499
|
+
};
|
|
406
500
|
|
|
407
501
|
const Two = '2.0';
|
|
408
|
-
const create$4 = (method, params) => {
|
|
502
|
+
const create$4$1 = (method, params) => {
|
|
409
503
|
return {
|
|
410
504
|
jsonrpc: Two,
|
|
411
505
|
method,
|
|
@@ -413,7 +507,7 @@ const create$4 = (method, params) => {
|
|
|
413
507
|
};
|
|
414
508
|
};
|
|
415
509
|
const callbacks = Object.create(null);
|
|
416
|
-
const set$
|
|
510
|
+
const set$3 = (id, fn) => {
|
|
417
511
|
callbacks[id] = fn;
|
|
418
512
|
};
|
|
419
513
|
const get$2 = id => {
|
|
@@ -432,13 +526,13 @@ const registerPromise = () => {
|
|
|
432
526
|
resolve,
|
|
433
527
|
promise
|
|
434
528
|
} = Promise.withResolvers();
|
|
435
|
-
set$
|
|
529
|
+
set$3(id, resolve);
|
|
436
530
|
return {
|
|
437
531
|
id,
|
|
438
532
|
promise
|
|
439
533
|
};
|
|
440
534
|
};
|
|
441
|
-
const create$2$
|
|
535
|
+
const create$2$2 = (method, params) => {
|
|
442
536
|
const {
|
|
443
537
|
id,
|
|
444
538
|
promise
|
|
@@ -730,7 +824,7 @@ const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
|
|
|
730
824
|
const {
|
|
731
825
|
message,
|
|
732
826
|
promise
|
|
733
|
-
} = create$2$
|
|
827
|
+
} = create$2$2(method, params);
|
|
734
828
|
if (useSendAndTransfer && ipc.sendAndTransfer) {
|
|
735
829
|
ipc.sendAndTransfer(message);
|
|
736
830
|
} else {
|
|
@@ -740,13 +834,13 @@ const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
|
|
|
740
834
|
return unwrapJsonRpcResult(responseMessage);
|
|
741
835
|
};
|
|
742
836
|
const send = (transport, method, ...params) => {
|
|
743
|
-
const message = create$4(method, params);
|
|
837
|
+
const message = create$4$1(method, params);
|
|
744
838
|
transport.send(message);
|
|
745
839
|
};
|
|
746
|
-
const invoke$
|
|
840
|
+
const invoke$2 = (ipc, method, ...params) => {
|
|
747
841
|
return invokeHelper(ipc, method, params, false);
|
|
748
842
|
};
|
|
749
|
-
const invokeAndTransfer = (ipc, method, ...params) => {
|
|
843
|
+
const invokeAndTransfer$1 = (ipc, method, ...params) => {
|
|
750
844
|
return invokeHelper(ipc, method, params, true);
|
|
751
845
|
};
|
|
752
846
|
|
|
@@ -776,10 +870,10 @@ const createRpc = ipc => {
|
|
|
776
870
|
send(ipc, method, ...params);
|
|
777
871
|
},
|
|
778
872
|
invoke(method, ...params) {
|
|
779
|
-
return invoke$
|
|
873
|
+
return invoke$2(ipc, method, ...params);
|
|
780
874
|
},
|
|
781
875
|
invokeAndTransfer(method, ...params) {
|
|
782
|
-
return invokeAndTransfer(ipc, method, ...params);
|
|
876
|
+
return invokeAndTransfer$1(ipc, method, ...params);
|
|
783
877
|
},
|
|
784
878
|
async dispose() {
|
|
785
879
|
await ipc?.dispose();
|
|
@@ -818,6 +912,35 @@ const listen$1 = async (module, options) => {
|
|
|
818
912
|
return ipc;
|
|
819
913
|
};
|
|
820
914
|
const create$3 = async ({
|
|
915
|
+
commandMap,
|
|
916
|
+
messagePort
|
|
917
|
+
}) => {
|
|
918
|
+
// TODO create a commandMap per rpc instance
|
|
919
|
+
register(commandMap);
|
|
920
|
+
const rawIpc = await IpcParentWithMessagePort$1.create({
|
|
921
|
+
messagePort,
|
|
922
|
+
isMessagePortOpen: true
|
|
923
|
+
});
|
|
924
|
+
const ipc = IpcParentWithMessagePort$1.wrap(rawIpc);
|
|
925
|
+
handleIpc(ipc);
|
|
926
|
+
const rpc = createRpc(ipc);
|
|
927
|
+
messagePort.start();
|
|
928
|
+
return rpc;
|
|
929
|
+
};
|
|
930
|
+
const create$2$1 = async ({
|
|
931
|
+
commandMap,
|
|
932
|
+
messagePort
|
|
933
|
+
}) => {
|
|
934
|
+
return create$3({
|
|
935
|
+
commandMap,
|
|
936
|
+
messagePort
|
|
937
|
+
});
|
|
938
|
+
};
|
|
939
|
+
const PlainMessagePortRpcParent = {
|
|
940
|
+
__proto__: null,
|
|
941
|
+
create: create$2$1
|
|
942
|
+
};
|
|
943
|
+
const create$4 = async ({
|
|
821
944
|
commandMap
|
|
822
945
|
}) => {
|
|
823
946
|
// TODO create a commandMap per rpc instance
|
|
@@ -829,7 +952,7 @@ const create$3 = async ({
|
|
|
829
952
|
};
|
|
830
953
|
const WebWorkerRpcClient = {
|
|
831
954
|
__proto__: null,
|
|
832
|
-
create: create$
|
|
955
|
+
create: create$4
|
|
833
956
|
};
|
|
834
957
|
|
|
835
958
|
const create$2 = () => {
|
|
@@ -893,11 +1016,11 @@ const create$2 = () => {
|
|
|
893
1016
|
|
|
894
1017
|
const {
|
|
895
1018
|
get: get$1,
|
|
896
|
-
set: set$
|
|
1019
|
+
set: set$2,
|
|
897
1020
|
wrapCommand
|
|
898
1021
|
} = create$2();
|
|
899
1022
|
|
|
900
|
-
const create$1 = (uid, x, y, width, height,
|
|
1023
|
+
const create$1 = (uid, x, y, width, height, editorUid, editorLanguageId) => {
|
|
901
1024
|
const state = {
|
|
902
1025
|
uid,
|
|
903
1026
|
items: [],
|
|
@@ -916,9 +1039,11 @@ const create$1 = (uid, x, y, width, height, parentUid) => {
|
|
|
916
1039
|
headerHeight: 0,
|
|
917
1040
|
leadingWord: '',
|
|
918
1041
|
unfilteredItems: [],
|
|
919
|
-
version: 0
|
|
1042
|
+
version: 0,
|
|
1043
|
+
editorUid,
|
|
1044
|
+
editorLanguageId
|
|
920
1045
|
};
|
|
921
|
-
set$
|
|
1046
|
+
set$2(uid, state, state);
|
|
922
1047
|
};
|
|
923
1048
|
|
|
924
1049
|
const modules = [];
|
|
@@ -950,14 +1075,17 @@ const getCommandIds = () => {
|
|
|
950
1075
|
return commandIds;
|
|
951
1076
|
};
|
|
952
1077
|
|
|
953
|
-
const
|
|
954
|
-
|
|
1078
|
+
const getPortTuple = () => {
|
|
1079
|
+
const {
|
|
1080
|
+
port1,
|
|
1081
|
+
port2
|
|
1082
|
+
} = new MessageChannel();
|
|
1083
|
+
return {
|
|
1084
|
+
port1,
|
|
1085
|
+
port2
|
|
1086
|
+
};
|
|
955
1087
|
};
|
|
956
1088
|
|
|
957
|
-
const OnCompletion = 'onCompletion';
|
|
958
|
-
|
|
959
|
-
const CompletionExecute = 'ExtensionHostCompletion.execute';
|
|
960
|
-
|
|
961
1089
|
const rpcs = Object.create(null);
|
|
962
1090
|
const set$9 = (id, rpc) => {
|
|
963
1091
|
rpcs[id] = rpc;
|
|
@@ -989,56 +1117,98 @@ const create = rpcId => {
|
|
|
989
1117
|
};
|
|
990
1118
|
const EditorWorker$1 = 99;
|
|
991
1119
|
const ExtensionHostWorker = 44;
|
|
992
|
-
const RendererWorker$1 = 1;
|
|
993
1120
|
const {
|
|
994
|
-
invoke: invoke$8
|
|
1121
|
+
invoke: invoke$8,
|
|
1122
|
+
invokeAndTransfer: invokeAndTransfer$8,
|
|
1123
|
+
set: set$8
|
|
1124
|
+
} = create(EditorWorker$1);
|
|
995
1125
|
const EditorWorker = {
|
|
996
1126
|
__proto__: null,
|
|
997
|
-
invoke: invoke$8
|
|
1127
|
+
invoke: invoke$8,
|
|
1128
|
+
invokeAndTransfer: invokeAndTransfer$8,
|
|
1129
|
+
set: set$8
|
|
1130
|
+
};
|
|
998
1131
|
const {
|
|
999
|
-
invoke: invoke$6
|
|
1132
|
+
invoke: invoke$6,
|
|
1133
|
+
set: set$6
|
|
1134
|
+
} = create(ExtensionHostWorker);
|
|
1000
1135
|
const ExtensionHost = {
|
|
1001
1136
|
__proto__: null,
|
|
1002
|
-
invoke: invoke$6
|
|
1137
|
+
invoke: invoke$6,
|
|
1138
|
+
set: set$6
|
|
1139
|
+
};
|
|
1140
|
+
|
|
1003
1141
|
const {
|
|
1004
|
-
invoke: invoke$
|
|
1005
|
-
set: set$
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1142
|
+
invoke: invoke$1,
|
|
1143
|
+
set: set$1,
|
|
1144
|
+
invokeAndTransfer
|
|
1145
|
+
} = EditorWorker;
|
|
1146
|
+
|
|
1147
|
+
const sendMessagePortToExtensionHostWorker = async port => {
|
|
1148
|
+
const command = 'HandleMessagePort.handleMessagePort2';
|
|
1149
|
+
// @ts-ignore
|
|
1150
|
+
await invokeAndTransfer(
|
|
1151
|
+
// @ts-ignore
|
|
1152
|
+
'SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionHostWorker', port, command, 0 // TODO
|
|
1153
|
+
);
|
|
1154
|
+
};
|
|
1155
|
+
|
|
1156
|
+
const createExtensionHostRpc = async () => {
|
|
1157
|
+
try {
|
|
1158
|
+
const {
|
|
1159
|
+
port1,
|
|
1160
|
+
port2
|
|
1161
|
+
} = getPortTuple();
|
|
1162
|
+
await sendMessagePortToExtensionHostWorker(port2);
|
|
1163
|
+
const rpc = await PlainMessagePortRpcParent.create({
|
|
1164
|
+
commandMap: {},
|
|
1165
|
+
messagePort: port1
|
|
1166
|
+
});
|
|
1167
|
+
return rpc;
|
|
1168
|
+
} catch (error) {
|
|
1169
|
+
throw new VError(error, `Failed to create extension host rpc`);
|
|
1170
|
+
}
|
|
1011
1171
|
};
|
|
1012
1172
|
|
|
1013
1173
|
const {
|
|
1014
|
-
|
|
1015
|
-
|
|
1174
|
+
invoke,
|
|
1175
|
+
set
|
|
1176
|
+
} = ExtensionHost;
|
|
1177
|
+
|
|
1178
|
+
const initialize = async () => {
|
|
1179
|
+
const rpc = await createExtensionHostRpc();
|
|
1180
|
+
set(rpc);
|
|
1181
|
+
};
|
|
1182
|
+
|
|
1183
|
+
const OnCompletion = 'onCompletion';
|
|
1184
|
+
|
|
1185
|
+
const CompletionExecute = 'ExtensionHostCompletion.execute';
|
|
1016
1186
|
|
|
1017
1187
|
// TODO add tests for this
|
|
1018
1188
|
const activateByEvent = async event => {
|
|
1019
|
-
|
|
1189
|
+
// @ts-ignore
|
|
1190
|
+
await invoke$1('ActivateByEvent.activateByEvent', event);
|
|
1020
1191
|
};
|
|
1021
1192
|
|
|
1022
|
-
const {
|
|
1023
|
-
invoke: invoke$1} = ExtensionHost;
|
|
1024
|
-
|
|
1025
1193
|
const execute = async ({
|
|
1026
|
-
|
|
1194
|
+
editorLanguageId,
|
|
1195
|
+
editorUid,
|
|
1027
1196
|
args,
|
|
1028
1197
|
event,
|
|
1029
1198
|
method,
|
|
1030
1199
|
noProviderFoundMessage,
|
|
1031
1200
|
noProviderFoundResult = undefined
|
|
1032
1201
|
}) => {
|
|
1033
|
-
const fullEvent = `${event}:${
|
|
1202
|
+
const fullEvent = `${event}:${editorLanguageId}`;
|
|
1034
1203
|
await activateByEvent(fullEvent);
|
|
1035
|
-
const result = await invoke
|
|
1204
|
+
const result = await invoke(method, editorUid, ...args);
|
|
1036
1205
|
return result;
|
|
1037
1206
|
};
|
|
1038
1207
|
|
|
1039
|
-
const executeCompletionProvider = async (
|
|
1208
|
+
const executeCompletionProvider = async (editorUid, editorLanguageId, offset) => {
|
|
1040
1209
|
return execute({
|
|
1041
|
-
|
|
1210
|
+
editorUid,
|
|
1211
|
+
editorLanguageId,
|
|
1042
1212
|
event: OnCompletion,
|
|
1043
1213
|
method: CompletionExecute,
|
|
1044
1214
|
args: [offset],
|
|
@@ -1046,15 +1216,15 @@ const executeCompletionProvider = async (editor, offset) => {
|
|
|
1046
1216
|
noProviderFoundResult: []});
|
|
1047
1217
|
};
|
|
1048
1218
|
|
|
1049
|
-
const getOffsetAtCursor =
|
|
1050
|
-
// TODO
|
|
1219
|
+
const getOffsetAtCursor = editorUid => {
|
|
1220
|
+
// TODO ask editor worker
|
|
1051
1221
|
return 0;
|
|
1052
1222
|
};
|
|
1053
1223
|
|
|
1054
1224
|
// TODO possible to do this with events/state machine instead of promises -> enables canceling operations / concurrent calls
|
|
1055
|
-
const getCompletions = async
|
|
1225
|
+
const getCompletions = async (editorUid, editorLanguageId) => {
|
|
1056
1226
|
const offset = getOffsetAtCursor();
|
|
1057
|
-
const completions = await executeCompletionProvider(
|
|
1227
|
+
const completions = await executeCompletionProvider(editorUid, editorLanguageId, offset);
|
|
1058
1228
|
return completions;
|
|
1059
1229
|
};
|
|
1060
1230
|
|
|
@@ -1271,49 +1441,33 @@ const getListHeight = (itemsLength, itemHeight, maxHeight) => {
|
|
|
1271
1441
|
return Math.min(totalHeight, maxHeight);
|
|
1272
1442
|
};
|
|
1273
1443
|
|
|
1274
|
-
const {
|
|
1275
|
-
invoke} = EditorWorker;
|
|
1276
|
-
|
|
1277
1444
|
const getPositionAtCursor = async parentUid => {
|
|
1278
|
-
const position = await invoke('Editor.getPositionAtCursor', parentUid);
|
|
1445
|
+
const position = await invoke$1('Editor.getPositionAtCursor', parentUid);
|
|
1279
1446
|
return position;
|
|
1280
1447
|
};
|
|
1281
1448
|
|
|
1282
|
-
const
|
|
1283
|
-
|
|
1284
|
-
const {
|
|
1285
|
-
lines,
|
|
1286
|
-
selections
|
|
1287
|
-
} = editor;
|
|
1288
|
-
const rowIndex = selections[0];
|
|
1289
|
-
const columnIndex = selections[1];
|
|
1290
|
-
const line = lines[rowIndex];
|
|
1291
|
-
const part = line.slice(0, columnIndex);
|
|
1292
|
-
const wordMatch = part.match(RE_WORD);
|
|
1293
|
-
if (wordMatch) {
|
|
1294
|
-
return wordMatch[0];
|
|
1295
|
-
}
|
|
1449
|
+
const getWordAtOffset = async editorUid => {
|
|
1450
|
+
// TODO ask editor worker
|
|
1296
1451
|
return '';
|
|
1297
1452
|
};
|
|
1298
1453
|
|
|
1299
1454
|
const loadContent = async state => {
|
|
1300
|
-
const editor = {}; // TODO
|
|
1301
1455
|
const {
|
|
1302
1456
|
itemHeight,
|
|
1303
|
-
maxHeight
|
|
1457
|
+
maxHeight,
|
|
1458
|
+
editorUid,
|
|
1459
|
+
editorLanguageId
|
|
1304
1460
|
} = state;
|
|
1305
|
-
const unfilteredItems = await getCompletions(
|
|
1306
|
-
const wordAtOffset = getWordAtOffset(
|
|
1461
|
+
const unfilteredItems = await getCompletions(editorUid, editorLanguageId);
|
|
1462
|
+
const wordAtOffset = await getWordAtOffset();
|
|
1307
1463
|
const items = filterCompletionItems(unfilteredItems, wordAtOffset);
|
|
1308
1464
|
const {
|
|
1309
1465
|
rowIndex,
|
|
1310
1466
|
columnIndex,
|
|
1311
1467
|
x,
|
|
1312
1468
|
y
|
|
1313
|
-
} = await getPositionAtCursor(
|
|
1469
|
+
} = await getPositionAtCursor(editorUid);
|
|
1314
1470
|
const newMaxLineY = Math.min(items.length, 8);
|
|
1315
|
-
editor.widgets = editor.widgets || [];
|
|
1316
|
-
// editor.widgets.push(ViewletModuleId.EditorCompletion)
|
|
1317
1471
|
const itemsLength = items.length;
|
|
1318
1472
|
const newFocusedIndex = itemsLength === 0 ? -1 : 0;
|
|
1319
1473
|
const total = items.length;
|
|
@@ -1333,7 +1487,6 @@ const loadContent = async state => {
|
|
|
1333
1487
|
// @ts-ignore
|
|
1334
1488
|
rowIndex,
|
|
1335
1489
|
columnIndex,
|
|
1336
|
-
// editorUid,
|
|
1337
1490
|
width: 200
|
|
1338
1491
|
};
|
|
1339
1492
|
};
|
|
@@ -1373,7 +1526,7 @@ const render2 = (uid, diffResult) => {
|
|
|
1373
1526
|
oldState,
|
|
1374
1527
|
newState
|
|
1375
1528
|
} = get$1(uid);
|
|
1376
|
-
set$
|
|
1529
|
+
set$2(uid, newState, newState);
|
|
1377
1530
|
const commands = applyRender(oldState, newState, diffResult);
|
|
1378
1531
|
return commands;
|
|
1379
1532
|
};
|
|
@@ -1389,14 +1542,14 @@ const commandMap = {
|
|
|
1389
1542
|
'Completions.loadContent': wrapCommand(loadContent),
|
|
1390
1543
|
'Completions.render2': render2,
|
|
1391
1544
|
'Completions.terminate': terminate,
|
|
1392
|
-
'Completions.
|
|
1545
|
+
'Completions.initialize': initialize
|
|
1393
1546
|
};
|
|
1394
1547
|
|
|
1395
1548
|
const listen = async () => {
|
|
1396
1549
|
const rpc = await WebWorkerRpcClient.create({
|
|
1397
1550
|
commandMap: commandMap
|
|
1398
1551
|
});
|
|
1399
|
-
set(rpc);
|
|
1552
|
+
set$1(rpc);
|
|
1400
1553
|
};
|
|
1401
1554
|
|
|
1402
1555
|
const main = async () => {
|