@lvce-editor/problems-view 1.8.0 → 1.9.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.
@@ -423,9 +423,103 @@ const IpcChildWithModuleWorkerAndMessagePort$1 = {
423
423
  listen: listen$6,
424
424
  wrap: wrap$e
425
425
  };
426
+ const addListener = (emitter, type, callback) => {
427
+ if ('addEventListener' in emitter) {
428
+ emitter.addEventListener(type, callback);
429
+ } else {
430
+ emitter.on(type, callback);
431
+ }
432
+ };
433
+ const removeListener = (emitter, type, callback) => {
434
+ if ('removeEventListener' in emitter) {
435
+ emitter.removeEventListener(type, callback);
436
+ } else {
437
+ emitter.off(type, callback);
438
+ }
439
+ };
440
+ const getFirstEvent = (eventEmitter, eventMap) => {
441
+ const {
442
+ resolve,
443
+ promise
444
+ } = Promise.withResolvers();
445
+ const listenerMap = Object.create(null);
446
+ const cleanup = value => {
447
+ for (const event of Object.keys(eventMap)) {
448
+ removeListener(eventEmitter, event, listenerMap[event]);
449
+ }
450
+ resolve(value);
451
+ };
452
+ for (const [event, type] of Object.entries(eventMap)) {
453
+ const listener = event => {
454
+ cleanup({
455
+ type,
456
+ event
457
+ });
458
+ };
459
+ addListener(eventEmitter, event, listener);
460
+ listenerMap[event] = listener;
461
+ }
462
+ return promise;
463
+ };
464
+ const Message$1$1 = 3;
465
+ const create$5$1 = async ({
466
+ messagePort,
467
+ isMessagePortOpen
468
+ }) => {
469
+ if (!isMessagePort(messagePort)) {
470
+ throw new IpcError('port must be of type MessagePort');
471
+ }
472
+ if (isMessagePortOpen) {
473
+ return messagePort;
474
+ }
475
+ const eventPromise = getFirstEvent(messagePort, {
476
+ message: Message$1$1
477
+ });
478
+ messagePort.start();
479
+ const {
480
+ type,
481
+ event
482
+ } = await eventPromise;
483
+ if (type !== Message$1$1) {
484
+ throw new IpcError('Failed to wait for ipc message');
485
+ }
486
+ if (event.data !== readyMessage) {
487
+ throw new IpcError('unexpected first message');
488
+ }
489
+ return messagePort;
490
+ };
491
+ const signal$1 = messagePort => {
492
+ messagePort.start();
493
+ };
494
+ class IpcParentWithMessagePort extends Ipc {
495
+ getData = getData$2;
496
+ send(message) {
497
+ this._rawIpc.postMessage(message);
498
+ }
499
+ sendAndTransfer(message) {
500
+ const transfer = getTransferrables(message);
501
+ this._rawIpc.postMessage(message, transfer);
502
+ }
503
+ dispose() {
504
+ this._rawIpc.close();
505
+ }
506
+ onMessage(callback) {
507
+ this._rawIpc.addEventListener('message', callback);
508
+ }
509
+ onClose(callback) {}
510
+ }
511
+ const wrap$5 = messagePort => {
512
+ return new IpcParentWithMessagePort(messagePort);
513
+ };
514
+ const IpcParentWithMessagePort$1 = {
515
+ __proto__: null,
516
+ create: create$5$1,
517
+ signal: signal$1,
518
+ wrap: wrap$5
519
+ };
426
520
 
427
521
  const Two = '2.0';
428
- const create$4 = (method, params) => {
522
+ const create$4$1 = (method, params) => {
429
523
  return {
430
524
  jsonrpc: Two,
431
525
  method,
@@ -433,7 +527,7 @@ const create$4 = (method, params) => {
433
527
  };
434
528
  };
435
529
  const callbacks = Object.create(null);
436
- const set$2 = (id, fn) => {
530
+ const set$4 = (id, fn) => {
437
531
  callbacks[id] = fn;
438
532
  };
439
533
  const get$2 = id => {
@@ -452,7 +546,7 @@ const registerPromise = () => {
452
546
  resolve,
453
547
  promise
454
548
  } = Promise.withResolvers();
455
- set$2(id, resolve);
549
+ set$4(id, resolve);
456
550
  return {
457
551
  id,
458
552
  promise
@@ -679,7 +773,7 @@ const getErrorResponse = (id, error, preparePrettyError, logError) => {
679
773
  const errorProperty = getErrorProperty(error, prettyError);
680
774
  return create$1$1(id, errorProperty);
681
775
  };
682
- const create$5 = (message, result) => {
776
+ const create$6 = (message, result) => {
683
777
  return {
684
778
  jsonrpc: Two,
685
779
  id: message.id,
@@ -688,7 +782,7 @@ const create$5 = (message, result) => {
688
782
  };
689
783
  const getSuccessResponse = (message, result) => {
690
784
  const resultProperty = result ?? null;
691
- return create$5(message, resultProperty);
785
+ return create$6(message, resultProperty);
692
786
  };
693
787
  const getErrorResponseSimple = (id, error) => {
694
788
  return {
@@ -792,11 +886,11 @@ const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
792
886
  const responseMessage = await promise;
793
887
  return unwrapJsonRpcResult(responseMessage);
794
888
  };
795
- const send = (transport, method, ...params) => {
796
- const message = create$4(method, params);
889
+ const send$1 = (transport, method, ...params) => {
890
+ const message = create$4$1(method, params);
797
891
  transport.send(message);
798
892
  };
799
- const invoke = (ipc, method, ...params) => {
893
+ const invoke$1 = (ipc, method, ...params) => {
800
894
  return invokeHelper(ipc, method, params, false);
801
895
  };
802
896
  const invokeAndTransfer = (ipc, method, ...params) => {
@@ -826,10 +920,10 @@ const createRpc = ipc => {
826
920
  * @deprecated
827
921
  */
828
922
  send(method, ...params) {
829
- send(ipc, method, ...params);
923
+ send$1(ipc, method, ...params);
830
924
  },
831
925
  invoke(method, ...params) {
832
- return invoke(ipc, method, ...params);
926
+ return invoke$1(ipc, method, ...params);
833
927
  },
834
928
  invokeAndTransfer(method, ...params) {
835
929
  return invokeAndTransfer(ipc, method, ...params);
@@ -870,7 +964,41 @@ const listen$1 = async (module, options) => {
870
964
  const ipc = module.wrap(rawIpc);
871
965
  return ipc;
872
966
  };
967
+ const create$5 = async ({
968
+ commandMap,
969
+ messagePort
970
+ }) => {
971
+ // TODO create a commandMap per rpc instance
972
+ register(commandMap);
973
+ const rawIpc = await IpcParentWithMessagePort$1.create({
974
+ messagePort,
975
+ isMessagePortOpen: true
976
+ });
977
+ const ipc = IpcParentWithMessagePort$1.wrap(rawIpc);
978
+ handleIpc(ipc);
979
+ const rpc = createRpc(ipc);
980
+ messagePort.start();
981
+ return rpc;
982
+ };
873
983
  const create$3 = async ({
984
+ commandMap,
985
+ send
986
+ }) => {
987
+ const {
988
+ port1,
989
+ port2
990
+ } = new MessageChannel();
991
+ await send(port1);
992
+ return create$5({
993
+ commandMap,
994
+ messagePort: port2
995
+ });
996
+ };
997
+ const TransferMessagePortRpcParent = {
998
+ __proto__: null,
999
+ create: create$3
1000
+ };
1001
+ const create$4 = async ({
874
1002
  commandMap
875
1003
  }) => {
876
1004
  // TODO create a commandMap per rpc instance
@@ -882,7 +1010,7 @@ const create$3 = async ({
882
1010
  };
883
1011
  const WebWorkerRpcClient = {
884
1012
  __proto__: null,
885
- create: create$3
1013
+ create: create$4
886
1014
  };
887
1015
 
888
1016
  const create$2 = () => {
@@ -980,22 +1108,38 @@ const create$1 = rpcId => {
980
1108
  }
981
1109
  };
982
1110
  };
1111
+ const EditorWorker$1 = 99;
983
1112
  const RendererWorker$1 = 1;
1113
+ const {
1114
+ invoke: invoke$c,
1115
+ set: set$c} = create$1(EditorWorker$1);
1116
+ const EditorWorker = {
1117
+ __proto__: null,
1118
+ invoke: invoke$c,
1119
+ set: set$c};
984
1120
  const {
985
1121
  invoke: invoke$3,
1122
+ invokeAndTransfer: invokeAndTransfer$3,
986
1123
  set: set$3} = create$1(RendererWorker$1);
1124
+ const sendMessagePortToEditorWorker$1 = async (port, rpcId) => {
1125
+ const command = 'HandleMessagePort.handleMessagePort';
1126
+ // @ts-ignore
1127
+ await invokeAndTransfer$3('SendMessagePortToExtensionHostWorker.sendMessagePortToEditorWorker', port, command, rpcId);
1128
+ };
987
1129
  const writeClipBoardText$1 = async text => {
988
1130
  await invoke$3('ClipBoard.writeText', /* text */text);
989
1131
  };
990
1132
  const RendererWorker = {
991
1133
  __proto__: null,
1134
+ sendMessagePortToEditorWorker: sendMessagePortToEditorWorker$1,
992
1135
  set: set$3,
993
1136
  writeClipBoardText: writeClipBoardText$1
994
1137
  };
995
1138
 
996
1139
  const {
997
- set: set$1,
998
- writeClipBoardText
1140
+ set: set$2,
1141
+ writeClipBoardText,
1142
+ sendMessagePortToEditorWorker
999
1143
  } = RendererWorker;
1000
1144
 
1001
1145
  const writeText = async text => {
@@ -1017,7 +1161,7 @@ const Script = 2;
1017
1161
 
1018
1162
  const {
1019
1163
  get,
1020
- set,
1164
+ set: set$1,
1021
1165
  wrapCommand
1022
1166
  } = create$2();
1023
1167
 
@@ -1047,7 +1191,7 @@ const create = (id, uri, x, y, width, height, args, parentUid) => {
1047
1191
  smallWidthBreakPoint: 650,
1048
1192
  filteredProblems: []
1049
1193
  };
1050
- set(id, state, state);
1194
+ set$1(id, state, state);
1051
1195
  };
1052
1196
 
1053
1197
  const isEqual$1 = (oldState, newState) => {
@@ -1055,7 +1199,7 @@ const isEqual$1 = (oldState, newState) => {
1055
1199
  };
1056
1200
 
1057
1201
  const isEqual = (oldState, newState) => {
1058
- return oldState.problems === newState.problems && oldState.filterValue === newState.filterValue;
1202
+ return oldState.problems === newState.problems && oldState.filterValue === newState.filterValue && oldState.message === newState.message;
1059
1203
  };
1060
1204
 
1061
1205
  const RenderItems = 1;
@@ -1330,13 +1474,46 @@ const handleIconThemeChange = state => {
1330
1474
  };
1331
1475
  };
1332
1476
 
1477
+ const send = port => {
1478
+ return sendMessagePortToEditorWorker(port, 0);
1479
+ };
1480
+ const createEditorWorkerRpc = async () => {
1481
+ try {
1482
+ const rpc = await TransferMessagePortRpcParent.create({
1483
+ commandMap: {},
1484
+ send
1485
+ });
1486
+ return rpc;
1487
+ } catch (error) {
1488
+ throw new VError(error, `Failed to create editor worker rpc`);
1489
+ }
1490
+ };
1491
+
1492
+ const {
1493
+ invoke,
1494
+ set} = EditorWorker;
1495
+
1333
1496
  const initialize = async () => {
1334
- // TODO create connection to editor worker
1497
+ const rpc = await createEditorWorkerRpc();
1498
+ set(rpc);
1335
1499
  };
1336
1500
 
1337
1501
  const getProblems = async state => {
1338
- // TODO ask editor worker for problems
1339
- return [];
1502
+ try {
1503
+ // TODO send event listener to editor, asking to send problem updates to this worker
1504
+ // @ts-ignore
1505
+ await invoke('Editor.getProblems');
1506
+ // TODO ask editor worker for problems
1507
+ return {
1508
+ problems: [],
1509
+ error: ''
1510
+ };
1511
+ } catch (error) {
1512
+ return {
1513
+ problems: [],
1514
+ error: `${error}`
1515
+ };
1516
+ }
1340
1517
  };
1341
1518
 
1342
1519
  const emptyObject = {};
@@ -1440,7 +1617,16 @@ const getSavedCollapsedUris = savedState => {
1440
1617
  return [];
1441
1618
  };
1442
1619
  const loadContent = async (state, savedState) => {
1443
- const problems = await getProblems();
1620
+ const {
1621
+ problems,
1622
+ error
1623
+ } = await getProblems();
1624
+ if (error) {
1625
+ return {
1626
+ ...state,
1627
+ message: error
1628
+ };
1629
+ }
1444
1630
  const message = getMessage(problems.length);
1445
1631
  const viewMode = getSavedViewMode(savedState);
1446
1632
  const filterValue = getSavedFilterValue(savedState);
@@ -1576,6 +1762,22 @@ const getProblemsFilterVirtualDom = action => {
1576
1762
  })];
1577
1763
  };
1578
1764
 
1765
+ const getNoResultsWithFilterVirtualDom = () => {
1766
+ return [{
1767
+ type: VirtualDomElements.Div,
1768
+ className: Message,
1769
+ childCount: 3
1770
+ }, {
1771
+ type: VirtualDomElements.Span,
1772
+ childCount: 1
1773
+ }, text(noResultsFoundWithProvidedFilterCriteria()), {
1774
+ type: VirtualDomElements.A,
1775
+ className: MessageAction,
1776
+ childCount: 1,
1777
+ onClick: HandleClearFilterClick
1778
+ }, text(clearFilter()), text('.')];
1779
+ };
1780
+
1579
1781
  const getBadgeVirtualDom = (className, count) => {
1580
1782
  return [{
1581
1783
  type: VirtualDomElements.Div,
@@ -1739,29 +1941,12 @@ const getProblemsListVirtualDom = problems => {
1739
1941
  return dom;
1740
1942
  };
1741
1943
 
1742
- const getProblemsNoProblemsFoundVirtualDom = filterValue => {
1743
- // TODO avoid mutation
1744
- const dom = [];
1745
- dom.push({
1944
+ const getProblemsNoProblemsFoundVirtualDom = () => {
1945
+ return [{
1746
1946
  type: VirtualDomElements.Div,
1747
1947
  className: Message,
1748
1948
  childCount: 1
1749
- });
1750
- if (filterValue) {
1751
- dom[0].childCount += 2;
1752
- dom.push({
1753
- type: VirtualDomElements.Span,
1754
- childCount: 1
1755
- }, text(noResultsFoundWithProvidedFilterCriteria()), {
1756
- type: VirtualDomElements.A,
1757
- className: MessageAction,
1758
- childCount: 1,
1759
- onClick: HandleClearFilterClick
1760
- }, text(clearFilter()), text('.'));
1761
- } else {
1762
- dom.push(text(noProblemsDetected()));
1763
- }
1764
- return dom;
1949
+ }, text(noProblemsDetected())];
1765
1950
  };
1766
1951
 
1767
1952
  const getClassName = isEven => {
@@ -1867,9 +2052,19 @@ const getProblemsTableVirtualDom = problems => {
1867
2052
  return dom;
1868
2053
  };
1869
2054
 
1870
- const getProblemsVirtualDom$1 = (viewMode, problems, filterValue) => {
2055
+ const getProblemsVirtualDom$1 = (viewMode, problems, filterValue, message) => {
2056
+ if (message) {
2057
+ return [{
2058
+ type: VirtualDomElements.Div,
2059
+ className: Message,
2060
+ childCount: 1
2061
+ }, text(message)];
2062
+ }
2063
+ if (problems.length === 0 && filterValue) {
2064
+ return getNoResultsWithFilterVirtualDom();
2065
+ }
1871
2066
  if (problems.length === 0) {
1872
- return getProblemsNoProblemsFoundVirtualDom(filterValue);
2067
+ return getProblemsNoProblemsFoundVirtualDom();
1873
2068
  }
1874
2069
  if (viewMode === Table) {
1875
2070
  return getProblemsTableVirtualDom(problems);
@@ -1877,7 +2072,7 @@ const getProblemsVirtualDom$1 = (viewMode, problems, filterValue) => {
1877
2072
  return getProblemsListVirtualDom(problems);
1878
2073
  };
1879
2074
 
1880
- const getProblemsVirtualDom = (viewMode, problems, filterValue, isSmall) => {
2075
+ const getProblemsVirtualDom = (viewMode, problems, filterValue, isSmall, message) => {
1881
2076
  // TODO avoid mutation
1882
2077
  const dom = [];
1883
2078
  dom.push({
@@ -1896,7 +2091,7 @@ const getProblemsVirtualDom = (viewMode, problems, filterValue, isSmall) => {
1896
2091
  badgeText: '',
1897
2092
  placeholder: filter()}));
1898
2093
  }
1899
- dom.push(...getProblemsVirtualDom$1(viewMode, problems, filterValue));
2094
+ dom.push(...getProblemsVirtualDom$1(viewMode, problems, filterValue, message));
1900
2095
  return dom;
1901
2096
  };
1902
2097
 
@@ -1973,9 +2168,19 @@ const getVisibleProblems = (problems, collapsedUris, focusedIndex, filterValue)
1973
2168
  };
1974
2169
 
1975
2170
  const renderItems = (oldState, newState) => {
1976
- const visible = getVisibleProblems(newState.problems, newState.collapsedUris, newState.focusedIndex, newState.filterValue);
1977
- const isSmall = newState.width <= newState.smallWidthBreakPoint;
1978
- const dom = getProblemsVirtualDom(newState.viewMode, visible, newState.filterValue, isSmall);
2171
+ const {
2172
+ problems,
2173
+ width,
2174
+ smallWidthBreakPoint,
2175
+ collapsedUris,
2176
+ focusedIndex,
2177
+ viewMode,
2178
+ filterValue,
2179
+ message
2180
+ } = newState;
2181
+ const visible = getVisibleProblems(problems, collapsedUris, focusedIndex, filterValue);
2182
+ const isSmall = width <= smallWidthBreakPoint;
2183
+ const dom = getProblemsVirtualDom(viewMode, visible, filterValue, isSmall, message);
1979
2184
  return ['Viewlet.setDom2', dom];
1980
2185
  };
1981
2186
 
@@ -2004,7 +2209,7 @@ const render2 = (uid, diffResult) => {
2004
2209
  oldState,
2005
2210
  newState
2006
2211
  } = get(uid);
2007
- set(uid, newState, newState);
2212
+ set$1(uid, newState, newState);
2008
2213
  const commands = applyRender(oldState, newState, diffResult);
2009
2214
  return commands;
2010
2215
  };
@@ -2171,7 +2376,7 @@ const listen = async () => {
2171
2376
  const rpc = await WebWorkerRpcClient.create({
2172
2377
  commandMap: commandMapRef
2173
2378
  });
2174
- set$1(rpc);
2379
+ set$2(rpc);
2175
2380
  };
2176
2381
 
2177
2382
  const main = async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/problems-view",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Problems View Worker",
5
5
  "repository": {
6
6
  "type": "git",