@lvce-editor/editor-worker 19.28.3 → 19.29.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.
@@ -559,7 +559,7 @@ const execute$1 = (command, ...args) => {
559
559
 
560
560
  const Two$1 = '2.0';
561
561
  const callbacks = Object.create(null);
562
- const get$9 = id => {
562
+ const get$a = id => {
563
563
  return callbacks[id];
564
564
  };
565
565
  const remove$9 = id => {
@@ -749,7 +749,7 @@ const warn$1 = (...args) => {
749
749
  console.warn(...args);
750
750
  };
751
751
  const resolve = (id, response) => {
752
- const fn = get$9(id);
752
+ const fn = get$a(id);
753
753
  if (!fn) {
754
754
  console.log(response);
755
755
  warn$1(`callback ${id} may already be disposed`);
@@ -1154,7 +1154,7 @@ const rpcs = Object.create(null);
1154
1154
  const set$i = (id, rpc) => {
1155
1155
  rpcs[id] = rpc;
1156
1156
  };
1157
- const get$8 = id => {
1157
+ const get$9 = id => {
1158
1158
  return rpcs[id];
1159
1159
  };
1160
1160
  const remove$8 = id => {
@@ -1165,18 +1165,18 @@ const remove$8 = id => {
1165
1165
  const create$a = rpcId => {
1166
1166
  return {
1167
1167
  async dispose() {
1168
- const rpc = get$8(rpcId);
1168
+ const rpc = get$9(rpcId);
1169
1169
  await rpc.dispose();
1170
1170
  },
1171
1171
  // @ts-ignore
1172
1172
  invoke(method, ...params) {
1173
- const rpc = get$8(rpcId);
1173
+ const rpc = get$9(rpcId);
1174
1174
  // @ts-ignore
1175
1175
  return rpc.invoke(method, ...params);
1176
1176
  },
1177
1177
  // @ts-ignore
1178
1178
  invokeAndTransfer(method, ...params) {
1179
- const rpc = get$8(rpcId);
1179
+ const rpc = get$9(rpcId);
1180
1180
  // @ts-ignore
1181
1181
  return rpc.invokeAndTransfer(method, ...params);
1182
1182
  },
@@ -1515,7 +1515,7 @@ const createLazyRpc = rpcId => {
1515
1515
  const rpc = activeRpc;
1516
1516
  activeRpc = undefined;
1517
1517
  rpcPromise = undefined;
1518
- if (rpc && get$8(rpcId) === rpc) {
1518
+ if (rpc && get$9(rpcId) === rpc) {
1519
1519
  remove$8(rpcId);
1520
1520
  }
1521
1521
  if (notify) {
@@ -1982,12 +1982,12 @@ const loadContent$3 = async (state, parentUid) => {
1982
1982
 
1983
1983
  const editorStates = create$9();
1984
1984
  const {
1985
- dispose: dispose$1,
1985
+ dispose: dispose$2,
1986
1986
  getCommandIds,
1987
1987
  registerCommands,
1988
1988
  wrapGetter
1989
1989
  } = editorStates;
1990
- const get$7 = id => {
1990
+ const get$8 = id => {
1991
1991
  return editorStates.get(id);
1992
1992
  };
1993
1993
  const getKeys$2 = () => {
@@ -2094,6 +2094,7 @@ const createEditor2 = (id, uri, x, y, width, height, platform, assetDir) => {
2094
2094
  validLines: [],
2095
2095
  visibleLineIndices: [],
2096
2096
  visualDecorations: [],
2097
+ widgetRevision: 0,
2097
2098
  widgets: [],
2098
2099
  width,
2099
2100
  x,
@@ -2125,12 +2126,12 @@ const map$1 = Object.create(null);
2125
2126
  const set$8 = (id, widget) => {
2126
2127
  map$1[id] = widget;
2127
2128
  };
2128
- const get$6 = id => {
2129
+ const get$7 = id => {
2129
2130
  return map$1[id];
2130
2131
  };
2131
2132
 
2132
2133
  const getModule = id => {
2133
- return get$6(id);
2134
+ return get$7(id);
2134
2135
  };
2135
2136
 
2136
2137
  const applyWidgetChange = async (editor, widget, changes) => {
@@ -2610,7 +2611,7 @@ const has = languageId => {
2610
2611
  const set$6 = (languageId, tokenizer) => {
2611
2612
  state$9.tokenizers[languageId] = tokenizer;
2612
2613
  };
2613
- const get$5 = languageId => {
2614
+ const get$6 = languageId => {
2614
2615
  return state$9.tokenizers[languageId];
2615
2616
  };
2616
2617
  const setTokenizePath = (languageId, tokenizePath) => {
@@ -2634,7 +2635,7 @@ const tokenMaps = Object.create(null);
2634
2635
  const set$5 = (languageId, tokenMap) => {
2635
2636
  tokenMaps[languageId] = tokenMap;
2636
2637
  };
2637
- const get$4 = languageId => {
2638
+ const get$5 = languageId => {
2638
2639
  return tokenMaps[languageId] || {};
2639
2640
  };
2640
2641
 
@@ -2672,7 +2673,7 @@ const loadTokenizer = async (languageId, tokenizePath) => {
2672
2673
  };
2673
2674
  const getTokenizer = languageId => {
2674
2675
  if (has(languageId)) {
2675
- return get$5(languageId);
2676
+ return get$6(languageId);
2676
2677
  }
2677
2678
  if (isPending(languageId)) {
2678
2679
  return TokenizePlainText;
@@ -2684,7 +2685,7 @@ const tokenizers = Object.create(null);
2684
2685
  const set$4 = (id, value) => {
2685
2686
  tokenizers[id] = value;
2686
2687
  };
2687
- const get$3 = id => {
2688
+ const get$4 = id => {
2688
2689
  return tokenizers[id] || TokenizePlainText;
2689
2690
  };
2690
2691
 
@@ -2766,7 +2767,7 @@ const getTokensViewport = (editor, startLineIndex, endLineIndex) => {
2766
2767
  lines,
2767
2768
  tokenizerId
2768
2769
  } = editor;
2769
- const tokenizer = get$3(tokenizerId);
2770
+ const tokenizer = get$4(tokenizerId);
2770
2771
  const {
2771
2772
  hasArrayReturn,
2772
2773
  initialLineState,
@@ -3337,7 +3338,7 @@ const getLineInfosViewport = (editor, tokens, embeddedResults, minLineY, maxLine
3337
3338
  languageId,
3338
3339
  lines
3339
3340
  } = editor;
3340
- const tokenMap = get$4(languageId);
3341
+ const tokenMap = get$5(languageId);
3341
3342
  let offset = minLineOffset;
3342
3343
  const tabSize = 2;
3343
3344
  for (let i = minLineY; i < maxLineY; i++) {
@@ -3715,7 +3716,7 @@ const notifyListeners = async (listenerType, method, ...params) => {
3715
3716
  // Notify all listeners in parallel
3716
3717
  const notifications = rpcIds.map(async rpcId => {
3717
3718
  try {
3718
- const rpc = get$8(rpcId);
3719
+ const rpc = get$9(rpcId);
3719
3720
  if (rpc) {
3720
3721
  await rpc.invoke(method, ...params);
3721
3722
  }
@@ -4528,7 +4529,7 @@ const measureCharacterWidth = async (fontWeight, fontSize, fontFamily, letterSpa
4528
4529
  return await measureTextWidth('a', fontWeight, fontSize, fontFamily, letterSpacing, false, 0);
4529
4530
  };
4530
4531
 
4531
- const get$2 = async key => {
4532
+ const get$3 = async key => {
4532
4533
  const value = await getPreference(key);
4533
4534
  return value;
4534
4535
  };
@@ -4649,6 +4650,7 @@ const createEditor = async ({
4649
4650
  useFunctionalRendering,
4650
4651
  validLines: [],
4651
4652
  visibleLineIndices: [],
4653
+ widgetRevision: 0,
4652
4654
  widgets: [],
4653
4655
  width,
4654
4656
  x,
@@ -4691,7 +4693,7 @@ const createEditor = async ({
4691
4693
  // e.g. it might not always be necessary to send text to extension host worker
4692
4694
  // @ts-ignore
4693
4695
  await invoke$6(TextDocumentSyncFull, uri, id, languageId, content);
4694
- const completionsOnTypeRaw = await get$2('editor.completionsOnType');
4696
+ const completionsOnTypeRaw = await get$3('editor.completionsOnType');
4695
4697
  const completionsOnType = Boolean(completionsOnTypeRaw);
4696
4698
  set$9(id, emptyEditor, {
4697
4699
  ...newEditor4,
@@ -4721,7 +4723,7 @@ const createStandaloneEditor = async ({
4721
4723
  y
4722
4724
  }) => {
4723
4725
  createEditor2(id, uri, x, y, width, height, platform, assetDir);
4724
- const createdEditor = get$7(id).newState;
4726
+ const createdEditor = get$8(id).newState;
4725
4727
  await loadTokenizer(languageId, tokenizePath);
4726
4728
  const tokenizerId = createdEditor.tokenizerId + 1;
4727
4729
  set$4(tokenizerId, getTokenizer(languageId));
@@ -4802,7 +4804,7 @@ const RenderWidgets = 13;
4802
4804
  const RenderAdditionalFocusContext = 14;
4803
4805
 
4804
4806
  const isEqual = (oldState, newState) => {
4805
- return oldState.widgets === newState.widgets;
4807
+ return oldState.widgets === newState.widgets && oldState.widgetRevision === newState.widgetRevision;
4806
4808
  };
4807
4809
 
4808
4810
  const modules = [isEqual$1, isEqual$2, isEqual$2, isEqual$4, isEqual$3, isEqual];
@@ -4823,37 +4825,45 @@ const diff2 = uid => {
4823
4825
  const {
4824
4826
  newState,
4825
4827
  oldState
4826
- } = get$7(uid);
4828
+ } = get$8(uid);
4827
4829
  const result = diff(oldState, newState);
4828
4830
  return result;
4829
4831
  };
4830
4832
 
4831
4833
  const addWidget$1 = widget => {
4832
- const module = get$6(widget.id);
4834
+ const module = get$7(widget.id);
4833
4835
  if (!module) {
4834
4836
  throw new Error('unsupported widget');
4835
4837
  }
4836
4838
  return module.add(widget);
4837
4839
  };
4838
4840
  const renderWidget = widget => {
4839
- const module = get$6(widget.id);
4841
+ const module = get$7(widget.id);
4840
4842
  if (!module) {
4841
4843
  throw new Error('unsupported widget');
4842
4844
  }
4843
4845
  return module.render(widget);
4844
4846
  };
4845
- const removeWidget$1 = widget => {
4846
- const module = get$6(widget.id);
4847
- if (!module) {
4848
- throw new Error('unsupported widget');
4849
- }
4850
- return module.remove(widget);
4847
+
4848
+ const revisions = new Map();
4849
+ const next = editorUid => {
4850
+ const revision = (revisions.get(editorUid) || 0) + 1;
4851
+ revisions.set(editorUid, revision);
4852
+ return revision;
4853
+ };
4854
+ const get$2 = editorUid => {
4855
+ return revisions.get(editorUid) || 0;
4856
+ };
4857
+ const record = (editorUid, revision) => {
4858
+ revisions.set(editorUid, Math.max(get$2(editorUid), revision));
4859
+ };
4860
+ const dispose$1 = editorUid => {
4861
+ revisions.delete(editorUid);
4851
4862
  };
4852
4863
 
4853
4864
  const renderWidgets$1 = (oldState, newState) => {
4854
4865
  const addedWidgets = [];
4855
4866
  const changedWidgets = [];
4856
- const removedWidgets = [];
4857
4867
  const oldWidgets = oldState.widgets || [];
4858
4868
  const newWidgets = newState.widgets || [];
4859
4869
  const oldWidgetMap = Object.create(null);
@@ -4867,8 +4877,6 @@ const renderWidgets$1 = (oldState, newState) => {
4867
4877
  for (const oldWidget of oldWidgets) {
4868
4878
  if (Object.hasOwn(newWidgetMap, oldWidget.id)) {
4869
4879
  changedWidgets.push(newWidgetMap[oldWidget.id]);
4870
- } else {
4871
- removedWidgets.push(oldWidget);
4872
4880
  }
4873
4881
  }
4874
4882
  for (const newWidget of newWidgets) {
@@ -4890,19 +4898,16 @@ const renderWidgets$1 = (oldState, newState) => {
4890
4898
  changeCommands.push(...childCommands);
4891
4899
  }
4892
4900
  }
4893
- const removeCommands = [];
4894
- for (const removedWidget of removedWidgets) {
4895
- const childCommands = removeWidget$1(removedWidget);
4896
- if (childCommands.length > 0) {
4897
- removeCommands.push(...childCommands);
4898
- }
4899
- }
4900
- const allCommands = [...addCommands, ...changeCommands, ...removeCommands];
4901
- return allCommands.filter(item => item[0] !== 'Viewlet.setFocusContext');
4901
+ const hasDeclaredRevision = typeof newState.widgetRevision === 'number' && newState.widgetRevision > (oldState.widgetRevision || 0);
4902
+ const declaredRevision = hasDeclaredRevision ? newState.widgetRevision : next(newState.uid);
4903
+ record(newState.uid, declaredRevision);
4904
+ const widgetUids = newWidgets.map(widget => widget.newState.uid);
4905
+ const allCommands = [...addCommands, ...changeCommands, ['Viewlet.setWidgets', newState.uid, declaredRevision, widgetUids]];
4906
+ return allCommands.filter(item => item[0] !== 'Viewlet.setFocusContext' && item[0] !== 'Viewlet.appendToBody');
4902
4907
  };
4903
4908
 
4904
4909
  const disposeEditor = async editorUid => {
4905
- const editor = get$7(editorUid)?.newState;
4910
+ const editor = get$8(editorUid)?.newState;
4906
4911
  if (!editor) {
4907
4912
  return [];
4908
4913
  }
@@ -4912,9 +4917,11 @@ const disposeEditor = async editorUid => {
4912
4917
  }
4913
4918
  }
4914
4919
  const commands = renderWidgets$1(editor, {
4920
+ ...editor,
4915
4921
  widgets: []
4916
4922
  });
4917
4923
  dispose$1(editorUid);
4924
+ dispose$2(editorUid);
4918
4925
  return commands;
4919
4926
  };
4920
4927
 
@@ -5073,7 +5080,7 @@ const getOpenEditor = (currentEditor, uri) => {
5073
5080
  return currentEditor;
5074
5081
  }
5075
5082
  for (const key of getKeys$2()) {
5076
- const editor = get$7(Number(key))?.newState;
5083
+ const editor = get$8(Number(key))?.newState;
5077
5084
  if (editor && !editor.initial && editor.uri === uri) {
5078
5085
  return editor;
5079
5086
  }
@@ -5509,16 +5516,18 @@ const handleBlur$1 = async editor => {
5509
5516
  if (!editor.focused) {
5510
5517
  return editor;
5511
5518
  }
5519
+ const widgetRevision = next(editor.uid);
5512
5520
  const newEditor = {
5513
5521
  ...editor,
5514
5522
  additionalFocus: 0,
5515
5523
  focused: false,
5524
+ widgetRevision,
5516
5525
  widgets: closeWidgetsMaybe(editor.widgets || [])
5517
5526
  };
5518
5527
  if (!editor.modified) {
5519
5528
  return newEditor;
5520
5529
  }
5521
- const autoSave = await get$2('files.autoSave');
5530
+ const autoSave = await get$3('files.autoSave');
5522
5531
  if (autoSave === 'off') {
5523
5532
  return newEditor;
5524
5533
  }
@@ -5650,6 +5659,7 @@ const closeCodeGenerator = editor => {
5650
5659
  const {
5651
5660
  widgets
5652
5661
  } = editor;
5662
+ const widgetRevision = next(editor.uid);
5653
5663
  const index = widgets.findIndex(isMatchingWidget$2);
5654
5664
  if (index === -1) {
5655
5665
  return editor;
@@ -5658,6 +5668,7 @@ const closeCodeGenerator = editor => {
5658
5668
  return {
5659
5669
  ...editor,
5660
5670
  focused: true,
5671
+ widgetRevision,
5661
5672
  widgets: newWidgets
5662
5673
  };
5663
5674
  };
@@ -5666,6 +5677,7 @@ const closeCompletion = editor => {
5666
5677
  const {
5667
5678
  widgets
5668
5679
  } = editor;
5680
+ const widgetRevision = next(editor.uid);
5669
5681
  if (widgets.every(widget => widget.id !== Completion)) {
5670
5682
  return editor;
5671
5683
  }
@@ -5673,6 +5685,7 @@ const closeCompletion = editor => {
5673
5685
  ...editor,
5674
5686
  additionalFocus: 0,
5675
5687
  focused: true,
5688
+ widgetRevision,
5676
5689
  widgets: removeEditorWidget(widgets, Completion)
5677
5690
  };
5678
5691
  };
@@ -5684,6 +5697,7 @@ const closeFind = editor => {
5684
5697
  const {
5685
5698
  widgets
5686
5699
  } = editor;
5700
+ const widgetRevision = next(editor.uid);
5687
5701
  const index = widgets.findIndex(isMatchingWidget$1);
5688
5702
  if (index === -1) {
5689
5703
  return editor;
@@ -5694,6 +5708,7 @@ const closeFind = editor => {
5694
5708
  additionalFocus: 0,
5695
5709
  focus: FocusEditorText$1,
5696
5710
  focused: true,
5711
+ widgetRevision,
5697
5712
  widgets: newWidgets
5698
5713
  };
5699
5714
  };
@@ -5727,17 +5742,21 @@ const closeRename = async editor => {
5727
5742
  uid,
5728
5743
  widgets
5729
5744
  } = editor;
5745
+ const widgetRevision = next(uid);
5730
5746
  const renameWidgetIndex = widgets.findIndex(isRenameWidget);
5731
5747
  if (renameWidgetIndex === -1) {
5732
5748
  return editor;
5733
5749
  }
5734
5750
  const renameWidget = widgets[renameWidgetIndex];
5735
5751
  await invoke$5('Rename.close', renameWidget.newState.uid);
5736
- const latest = get$7(uid);
5752
+ const latest = get$8(uid);
5737
5753
  const {
5738
5754
  newState
5739
5755
  } = latest;
5740
- return newState;
5756
+ return {
5757
+ ...newState,
5758
+ widgetRevision: Math.max(newState.widgetRevision || 0, widgetRevision)
5759
+ };
5741
5760
  };
5742
5761
 
5743
5762
  const isMatchingWidget = widget => {
@@ -5747,6 +5766,7 @@ const closeSourceAction = editor => {
5747
5766
  const {
5748
5767
  widgets
5749
5768
  } = editor;
5769
+ const widgetRevision = next(editor.uid);
5750
5770
  const index = widgets.findIndex(isMatchingWidget);
5751
5771
  if (index === -1) {
5752
5772
  return editor;
@@ -5754,6 +5774,7 @@ const closeSourceAction = editor => {
5754
5774
  const newWidgets = removeEditorWidget(widgets, SourceAction$1);
5755
5775
  return {
5756
5776
  ...editor,
5777
+ widgetRevision,
5757
5778
  widgets: newWidgets
5758
5779
  };
5759
5780
  };
@@ -5774,6 +5795,7 @@ const addWidgetToEditor = async (widgetId, focusKey, editor, factory, newStateGe
5774
5795
  if (hasWidget(widgets, widgetId)) {
5775
5796
  return editor;
5776
5797
  }
5798
+ const widgetRevision = next(editor.uid);
5777
5799
  const widget = factory();
5778
5800
  // @ts-ignore
5779
5801
  widget.newState.editorUid = editor.uid;
@@ -5781,6 +5803,9 @@ const addWidgetToEditor = async (widgetId, focusKey, editor, factory, newStateGe
5781
5803
  if (!newState) {
5782
5804
  return editor;
5783
5805
  }
5806
+ if (get$2(editor.uid) !== widgetRevision) {
5807
+ return get$8(editor.uid)?.newState || editor;
5808
+ }
5784
5809
  // @ts-ignore
5785
5810
  newState.editorUid = editor.uid;
5786
5811
  const latestWidget = {
@@ -5794,6 +5819,7 @@ const addWidgetToEditor = async (widgetId, focusKey, editor, factory, newStateGe
5794
5819
  additionalFocus: fullFocus ? 0 : focusKey,
5795
5820
  focus: fullFocus ? focusKey : FocusEditorText$1,
5796
5821
  focused: newFocus,
5822
+ widgetRevision,
5797
5823
  widgets: newWidgets
5798
5824
  };
5799
5825
  return newEditor;
@@ -5834,6 +5860,7 @@ const closeColorPicker = editor => {
5834
5860
  const {
5835
5861
  widgets
5836
5862
  } = editor;
5863
+ const widgetRevision = next(editor.uid);
5837
5864
  if (widgets.every(widget => widget.id !== ColorPicker$1)) {
5838
5865
  return editor;
5839
5866
  }
@@ -5842,6 +5869,7 @@ const closeColorPicker = editor => {
5842
5869
  additionalFocus: 0,
5843
5870
  focus: FocusEditorText$1,
5844
5871
  focused: true,
5872
+ widgetRevision,
5845
5873
  widgets: removeEditorWidget(widgets, ColorPicker$1)
5846
5874
  };
5847
5875
  };
@@ -7190,11 +7218,13 @@ const Alt = 2;
7190
7218
 
7191
7219
  const handleSingleClickDefault = (editor, position) => {
7192
7220
  const widgets = closeWidgetsMaybe(editor.widgets);
7221
+ const widgetRevision = next(editor.uid);
7193
7222
  return {
7194
7223
  ...editor,
7195
7224
  focused: true,
7196
7225
  selectionAnchorPosition: position,
7197
7226
  selections: new Uint32Array([position.rowIndex, position.columnIndex, position.rowIndex, position.columnIndex]),
7227
+ widgetRevision,
7198
7228
  widgets
7199
7229
  };
7200
7230
  };
@@ -7695,7 +7725,7 @@ const getHoverPositionXy = (editor, rowIndex, wordStart, documentationHeight) =>
7695
7725
  };
7696
7726
  const getEditorHoverInfo = async (editorUid, position) => {
7697
7727
  number(editorUid);
7698
- const instance = get$7(editorUid);
7728
+ const instance = get$8(editorUid);
7699
7729
  const editor = instance.newState;
7700
7730
  const {
7701
7731
  selections
@@ -7765,13 +7795,13 @@ const showHover2 = async (editor, position) => {
7765
7795
  };
7766
7796
 
7767
7797
  const showHover$1 = async (editor, position, token) => {
7768
- const instance = get$7(editor.uid);
7798
+ const instance = get$8(editor.uid);
7769
7799
  if (!instance) {
7770
7800
  return;
7771
7801
  }
7772
7802
  const latestEditor = instance.newState;
7773
7803
  const newEditor = await showHover2(latestEditor, position);
7774
- const latestInstance = get$7(editor.uid);
7804
+ const latestInstance = get$8(editor.uid);
7775
7805
  if (latestEditor === newEditor || !latestInstance || latestInstance.newState !== latestEditor || get$1().token !== token) {
7776
7806
  return;
7777
7807
  }
@@ -8055,7 +8085,7 @@ const getNewEditor = (editor, position) => {
8055
8085
  return editor;
8056
8086
  };
8057
8087
  const continueScrollingAndMovingSelection = async editorUid => {
8058
- const editorState = get$7(editorUid);
8088
+ const editorState = get$8(editorUid);
8059
8089
  const editor = editorState?.newState;
8060
8090
  if (!editor || !editor.hasListener || !editor.isSelecting) {
8061
8091
  return;
@@ -8618,7 +8648,7 @@ const newStateGenerator$3 = async (state, parentUid) => {
8618
8648
  } = state;
8619
8649
  const {
8620
8650
  newState
8621
- } = get$7(parentUid);
8651
+ } = get$8(parentUid);
8622
8652
  const {
8623
8653
  languageId
8624
8654
  } = newState;
@@ -8651,7 +8681,7 @@ const isFunctional = widgetId => {
8651
8681
  }
8652
8682
  };
8653
8683
  const addWidget = (widget, id, render) => {
8654
- const commands = render(widget);
8684
+ const commands = render(widget).filter(command => command[0] !== 'Viewlet.appendToBody');
8655
8685
  // TODO how to generate a unique integer id
8656
8686
  // that doesn't collide with ids created in renderer worker?
8657
8687
  // @ts-ignore
@@ -8661,11 +8691,6 @@ const addWidget = (widget, id, render) => {
8661
8691
  const allCommands = [];
8662
8692
  allCommands.push(['Viewlet.createFunctionalRoot', id, uid, isFunctional(widget.id)]);
8663
8693
  allCommands.push(...commands);
8664
- if (isFunctional(widget.id)) {
8665
- allCommands.push(['Viewlet.appendToBody', uid]);
8666
- } else {
8667
- allCommands.push(['Viewlet.send', uid, 'appendWidget']);
8668
- }
8669
8694
  const focusCommandIndex = allCommands.findIndex(command => {
8670
8695
  return command[2] === 'focus' || command[0] === 'Viewlet.focusSelector';
8671
8696
  });
@@ -8691,18 +8716,18 @@ const launchFindWidgetWorker = async () => {
8691
8716
  const rpcId = 9002;
8692
8717
  const launch = async () => {
8693
8718
  // TODO race condition
8694
- if (get$8(rpcId)) {
8719
+ if (get$9(rpcId)) {
8695
8720
  return;
8696
8721
  }
8697
8722
  const rpc = await launchFindWidgetWorker();
8698
8723
  set$i(rpcId, rpc);
8699
8724
  };
8700
8725
  const invoke$3 = async (method, ...params) => {
8701
- const rpc = get$8(rpcId);
8726
+ const rpc = get$9(rpcId);
8702
8727
  return await rpc.invoke(method, ...params);
8703
8728
  };
8704
8729
  const dispose = async () => {
8705
- const rpc = get$8(rpcId);
8730
+ const rpc = get$9(rpcId);
8706
8731
  remove$8(rpcId);
8707
8732
  if (rpc) {
8708
8733
  await rpc.dispose();
@@ -8800,7 +8825,7 @@ const updateWidget = (editor, widgetId, newState) => {
8800
8825
 
8801
8826
  const getEditorByWidgetUid = (widgetUid, widgetId) => {
8802
8827
  for (const key of getKeys$2()) {
8803
- const editor = get$7(Number(key)).newState;
8828
+ const editor = get$8(Number(key)).newState;
8804
8829
  const widgets = editor.widgets || [];
8805
8830
  for (const widget of widgets) {
8806
8831
  if (widget.id === widgetId && widget.newState.uid === widgetUid) {
@@ -8814,7 +8839,7 @@ const getEditor$1 = (editorOrUid, widgetId) => {
8814
8839
  if (editorOrUid && editorOrUid.widgets) {
8815
8840
  return editorOrUid;
8816
8841
  }
8817
- const instance = get$7(editorOrUid);
8842
+ const instance = get$8(editorOrUid);
8818
8843
  if (instance && instance.newState && instance.newState.widgets) {
8819
8844
  return instance.newState;
8820
8845
  }
@@ -8832,6 +8857,8 @@ const createFn = (key, name, widgetId) => {
8832
8857
  if (!editor) {
8833
8858
  return editorOrUid;
8834
8859
  }
8860
+ const shouldClose = isClose(args);
8861
+ const widgetRevision = shouldClose ? next(editor.uid) : editor.widgetRevision;
8835
8862
  const childIndex = editor.widgets.findIndex(isWidget);
8836
8863
  if (childIndex === -1) {
8837
8864
  return editor;
@@ -8844,18 +8871,19 @@ const createFn = (key, name, widgetId) => {
8844
8871
  } = state;
8845
8872
  const invoke = getWidgetInvoke(widgetId);
8846
8873
  await invoke(`${name}.${key}`, uid, ...args);
8847
- const latestAfterInvoke = get$7(editor.uid).newState;
8874
+ const latestAfterInvoke = get$8(editor.uid).newState;
8848
8875
  const latestChildIndex = latestAfterInvoke.widgets.findIndex(isWidget);
8849
8876
  if (latestChildIndex === -1) {
8850
8877
  return latestAfterInvoke;
8851
8878
  }
8852
8879
  const diff = await invoke(`${name}.diff2`, uid);
8853
8880
  const commands = await invoke(`${name}.render2`, uid, diff);
8854
- const latest = get$7(editor.uid).newState;
8855
- if (isClose(args)) {
8881
+ const latest = get$8(editor.uid).newState;
8882
+ if (shouldClose) {
8856
8883
  const newEditor = {
8857
8884
  ...latest,
8858
8885
  focused: true,
8886
+ widgetRevision,
8859
8887
  widgets: removeEditorWidget(latest.widgets, widgetId)
8860
8888
  };
8861
8889
  set$9(editor.uid, latest, newEditor);
@@ -8886,7 +8914,6 @@ const renderFull$4 = (oldState, newState) => {
8886
8914
  return commands;
8887
8915
  };
8888
8916
 
8889
- const AppendToBody = 'Viewlet.appendToBody';
8890
8917
  const Focus = 'focus';
8891
8918
  const FocusSelector = 'Viewlet.focusSelector';
8892
8919
  const RegisterEventListeners = 'Viewlet.registerEventListeners';
@@ -8899,7 +8926,7 @@ const SetCss = 'Viewlet.setCss';
8899
8926
  const SetDom2 = 'Viewlet.setDom2';
8900
8927
  const SetUid = 'Viewlet.setUid';
8901
8928
 
8902
- const commandsToForward$5 = [SetDom2, SetCss, AppendToBody, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
8929
+ const commandsToForward$5 = [SetDom2, SetCss, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
8903
8930
  const render$c = widget => {
8904
8931
  const commands = renderFull$4(widget.oldState, widget.newState);
8905
8932
  const wrappedCommands = [];
@@ -8919,7 +8946,7 @@ const add$8 = widget => {
8919
8946
  return addWidget(widget, 'FindWidget', render$c);
8920
8947
  };
8921
8948
  const remove$7 = widget => {
8922
- return [['Viewlet.dispose', widget.newState.uid]];
8949
+ return [];
8923
8950
  };
8924
8951
  const focusFindInput = editor => {
8925
8952
  const widget = editor.widgets.find(widget => widget.id === Find);
@@ -9027,7 +9054,7 @@ const create$2 = () => {
9027
9054
  };
9028
9055
 
9029
9056
  const getEditor = editorUid => {
9030
- const instance = get$7(editorUid);
9057
+ const instance = get$8(editorUid);
9031
9058
  if (!instance) {
9032
9059
  throw new Error(`editor ${editorUid} not found`);
9033
9060
  }
@@ -9135,7 +9162,7 @@ const newStateGenerator$1 = async (state, parentUid) => {
9135
9162
  } = state;
9136
9163
  const {
9137
9164
  newState
9138
- } = get$7(parentUid);
9165
+ } = get$8(parentUid);
9139
9166
  const {
9140
9167
  languageId
9141
9168
  } = newState;
@@ -9853,7 +9880,7 @@ const getSignatureHelp = async (editor, offset) => {
9853
9880
 
9854
9881
  const getSignatureHelpInfo = async editorUid => {
9855
9882
  number(editorUid);
9856
- const instance = get$7(editorUid);
9883
+ const instance = get$8(editorUid);
9857
9884
  const editor = instance.newState;
9858
9885
  const {
9859
9886
  selections
@@ -9965,7 +9992,7 @@ const newStateGenerator = async (state, parentUid) => {
9965
9992
  } = state;
9966
9993
  const {
9967
9994
  newState
9968
- } = get$7(parentUid);
9995
+ } = get$8(parentUid);
9969
9996
  const {
9970
9997
  languageId
9971
9998
  } = newState;
@@ -10787,7 +10814,7 @@ const renderFull$3 = (oldState, newState) => {
10787
10814
  return commands;
10788
10815
  };
10789
10816
 
10790
- const commandsToForward$4 = [SetDom2, SetCss, AppendToBody, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
10817
+ const commandsToForward$4 = [SetDom2, SetCss, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
10791
10818
  const render$b = widget => {
10792
10819
  const commands = renderFull$3(widget.oldState, widget.newState);
10793
10820
  const wrappedCommands = [];
@@ -10807,7 +10834,7 @@ const add$7 = widget => {
10807
10834
  return addWidget(widget, 'EditorCompletion', render$b);
10808
10835
  };
10809
10836
  const remove$6 = widget => {
10810
- return [['Viewlet.dispose', widget.newState.uid]];
10837
+ return [];
10811
10838
  };
10812
10839
  const {
10813
10840
  close: close$3,
@@ -11069,7 +11096,7 @@ const renderHover = (oldState, newState) => {
11069
11096
  return commands;
11070
11097
  };
11071
11098
 
11072
- const commandsToForward$3 = [SetDom2, SetCss, AppendToBody, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
11099
+ const commandsToForward$3 = [SetDom2, SetCss, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
11073
11100
  const render$9 = widget => {
11074
11101
  const commands = renderFull$3(widget.oldState, widget.newState);
11075
11102
  const wrappedCommands = [];
@@ -11089,7 +11116,7 @@ const add$6 = widget => {
11089
11116
  return addWidget(widget, 'EditorRename', render$9);
11090
11117
  };
11091
11118
  const remove$5 = widget => {
11092
- return [['Viewlet.dispose', widget.newState.uid]];
11119
+ return [];
11093
11120
  };
11094
11121
  const {
11095
11122
  accept,
@@ -11126,11 +11153,10 @@ const focusNext$1 = state => {
11126
11153
  };
11127
11154
 
11128
11155
  const removeWidget = widget => {
11129
- // @ts-ignore
11130
- return [['Viewlet.dispose', widget.newState.uid]];
11156
+ return [];
11131
11157
  };
11132
11158
 
11133
- const commandsToForward$2 = [SetDom2, SetCss, AppendToBody, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
11159
+ const commandsToForward$2 = [SetDom2, SetCss, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
11134
11160
  const render$8 = widget => {
11135
11161
  const commands = renderFull$3(widget.oldState, widget.newState);
11136
11162
  const wrappedCommands = [];
@@ -11225,7 +11251,7 @@ const getEditorSourceActions = async editorId => {
11225
11251
  }
11226
11252
  const {
11227
11253
  newState
11228
- } = get$7(editorId);
11254
+ } = get$8(editorId);
11229
11255
  const offset = getOffsetAtCursor$1(newState);
11230
11256
  return execute({
11231
11257
  args: [offset],
@@ -11338,6 +11364,7 @@ const setSelections2 = async (editorUid, selections) => {
11338
11364
  };
11339
11365
  const closeWidget2 = async (editorUid, widgetId, widgetName, unsetAdditionalFocus$1) => {
11340
11366
  const editor = getEditor(editorUid);
11367
+ const widgetRevision = next(editorUid);
11341
11368
  const invoke = getWidgetInvoke(widgetId);
11342
11369
  const {
11343
11370
  widgets
@@ -11352,6 +11379,7 @@ const closeWidget2 = async (editorUid, widgetId, widgetName, unsetAdditionalFocu
11352
11379
  ...editor,
11353
11380
  decorations: widgetId === Rename$1 ? editor.decorations.slice(0, -4) : editor.decorations,
11354
11381
  focused: true,
11382
+ widgetRevision,
11355
11383
  widgets: newWidgets
11356
11384
  };
11357
11385
  const newEditorWithDerivedState = await updateDerivedState(editor, newEditor);
@@ -11874,7 +11902,7 @@ const getProblems = async () => {
11874
11902
  const keys = getKeys$2();
11875
11903
  const diagnostics = keys.flatMap(key => {
11876
11904
  const numericKey = Number(key);
11877
- const editor = get$7(numericKey);
11905
+ const editor = get$8(numericKey);
11878
11906
  if (!editor?.newState) {
11879
11907
  return [];
11880
11908
  }
@@ -12018,49 +12046,49 @@ const kAutoClosingBrackets = 'editor.autoclosingBrackets';
12018
12046
  const kFontWeight = 'editor.fontWeight';
12019
12047
  const kHover = 'editor.hover';
12020
12048
  const isAutoClosingBracketsEnabled = async () => {
12021
- return Boolean(await get$2(kAutoClosingBrackets));
12049
+ return Boolean(await get$3(kAutoClosingBrackets));
12022
12050
  };
12023
12051
  const isAutoClosingQuotesEnabled = async () => {
12024
- return Boolean(await get$2(kAutoClosingQuotes));
12052
+ return Boolean(await get$3(kAutoClosingQuotes));
12025
12053
  };
12026
12054
  const isQuickSuggestionsEnabled = async () => {
12027
- return Boolean(await get$2(kQuickSuggestions));
12055
+ return Boolean(await get$3(kQuickSuggestions));
12028
12056
  };
12029
12057
  const isAutoClosingTagsEnabled = async () => {
12030
12058
  return true;
12031
12059
  };
12032
12060
  const getRowHeight = async () => {
12033
- return (await get$2(kLineHeight)) || 20;
12061
+ return (await get$3(kLineHeight)) || 20;
12034
12062
  };
12035
12063
  const getFontSize = async () => {
12036
- return (await get$2(kFontSize)) || 15; // TODO find out if it is possible to use all numeric values for settings for efficiency, maybe settings could be an array
12064
+ return (await get$3(kFontSize)) || 15; // TODO find out if it is possible to use all numeric values for settings for efficiency, maybe settings could be an array
12037
12065
  };
12038
12066
  const getHoverEnabled = async () => {
12039
- return (await get$2(kHover)) ?? true;
12067
+ return (await get$3(kHover)) ?? true;
12040
12068
  };
12041
12069
  const getFontFamily = async () => {
12042
- return (await get$2(kFontFamily)) || 'Fira Code';
12070
+ return (await get$3(kFontFamily)) || 'Fira Code';
12043
12071
  };
12044
12072
  const getLetterSpacing = async () => {
12045
12073
  // if (!false) {
12046
12074
  // return 0
12047
12075
  // }
12048
- return (await get$2(kLetterSpacing)) ?? 0.5;
12076
+ return (await get$3(kLetterSpacing)) ?? 0.5;
12049
12077
  };
12050
12078
  const getTabSize = async () => {
12051
- return (await get$2(kTabSize)) || 2;
12079
+ return (await get$3(kTabSize)) || 2;
12052
12080
  };
12053
12081
  const getLineNumbers = async () => {
12054
- return (await get$2(kLineNumbers)) ?? false;
12082
+ return (await get$3(kLineNumbers)) ?? false;
12055
12083
  };
12056
12084
  const getCompletionTriggerCharacters = async () => {
12057
12085
  return ['.', '/'];
12058
12086
  };
12059
12087
  const diagnosticsEnabled = async () => {
12060
- return (await get$2(kDiagnostics)) ?? false;
12088
+ return (await get$3(kDiagnostics)) ?? false;
12061
12089
  };
12062
12090
  const getFontWeight = async () => {
12063
- return (await get$2(kFontWeight)) ?? 400;
12091
+ return (await get$3(kFontWeight)) ?? 400;
12064
12092
  };
12065
12093
 
12066
12094
  const getEditorPreferences = async () => {
@@ -12093,7 +12121,7 @@ const handleSettingsChanged = async state => {
12093
12121
  letterSpacing,
12094
12122
  rowHeight
12095
12123
  } = editorPreferences;
12096
- const [charWidth, completionsOnTypeRaw] = await Promise.all([measureCharacterWidth(fontWeight, fontSize, fontFamily, letterSpacing), get$2('editor.completionsOnType')]);
12124
+ const [charWidth, completionsOnTypeRaw] = await Promise.all([measureCharacterWidth(fontWeight, fontSize, fontFamily, letterSpacing), get$3('editor.completionsOnType')]);
12097
12125
  const isMonospaceFont = fontFamily === 'Fira Code' || fontFamily === "'Fira Code'";
12098
12126
  const editorWithUpdatedSettings = {
12099
12127
  ...state,
@@ -12173,7 +12201,7 @@ const restoreWidgetState = async (keys, savedStates) => {
12173
12201
  const newEditors = [];
12174
12202
  for (const key of keys) {
12175
12203
  const editorUid = parseInt(key);
12176
- const editor = get$7(editorUid);
12204
+ const editor = get$8(editorUid);
12177
12205
  if (!editor?.newState || !Array.isArray(editor.newState.widgets)) {
12178
12206
  continue;
12179
12207
  }
@@ -12226,7 +12254,7 @@ const saveSingleWidgetState = async (savedStates, key, widget) => {
12226
12254
  const saveWidgetState = async keys => {
12227
12255
  const savedStates = Object.create(null);
12228
12256
  for (const key of keys) {
12229
- const editor = get$7(parseInt(key));
12257
+ const editor = get$8(parseInt(key));
12230
12258
  if (!editor?.newState || !Array.isArray(editor.newState.widgets)) {
12231
12259
  continue;
12232
12260
  }
@@ -12387,7 +12415,7 @@ const loadContent = async (state, savedState) => {
12387
12415
  };
12388
12416
  let existingEditor;
12389
12417
  for (const key of getKeys$2()) {
12390
- const editor = get$7(Number(key))?.newState;
12418
+ const editor = get$8(Number(key))?.newState;
12391
12419
  if (editor && editor.id !== id && !editor.initial && editor.uri === uri) {
12392
12420
  existingEditor = editor;
12393
12421
  break;
@@ -12439,7 +12467,7 @@ const loadContent = async (state, savedState) => {
12439
12467
  // e.g. it might not always be necessary to send text to extension host worker
12440
12468
  // @ts-ignore
12441
12469
  await invoke$6(TextDocumentSyncFull, uri, id, computedLanguageId, content);
12442
- const completionsOnTypeRaw = await get$2('editor.completionsOnType');
12470
+ const completionsOnTypeRaw = await get$3('editor.completionsOnType');
12443
12471
  const completionsOnType = Boolean(completionsOnTypeRaw);
12444
12472
  const newEditor5 = {
12445
12473
  ...newEditor4,
@@ -13263,7 +13291,7 @@ const render2 = (uid, diffResult) => {
13263
13291
  const {
13264
13292
  newState,
13265
13293
  oldState
13266
- } = get$7(uid);
13294
+ } = get$8(uid);
13267
13295
  set$9(uid, newState, newState);
13268
13296
  const commands = applyRender(oldState, newState, diffResult);
13269
13297
  return commands;
@@ -13347,12 +13375,12 @@ const renderGutterInfo = {
13347
13375
  };
13348
13376
  const renderWidgets = {
13349
13377
  apply: renderWidgets$1,
13350
- isEqual: (oldState, newState) => oldState.widgets === newState.widgets,
13378
+ isEqual: (oldState, newState) => oldState.widgets === newState.widgets && oldState.widgetRevision === newState.widgetRevision,
13351
13379
  multiple: true
13352
13380
  };
13353
13381
  const render$7 = [renderLines, renderSelections, renderCss, renderFocus$1, renderDecorations, renderGutterInfo, renderWidgets, renderFocusContext, renderAdditionalFocusContext];
13354
13382
  const renderEditor = async id => {
13355
- const instance = get$7(id);
13383
+ const instance = get$8(id);
13356
13384
  if (!instance) {
13357
13385
  return [];
13358
13386
  }
@@ -13489,7 +13517,7 @@ const unregisterListener = (listenerType, rpcId) => {
13489
13517
  };
13490
13518
 
13491
13519
  const invoke = async (method, ...params) => {
13492
- const worker = get$8(DebugWorker);
13520
+ const worker = get$9(DebugWorker);
13493
13521
  return worker.invoke(method, ...params);
13494
13522
  };
13495
13523
 
@@ -13505,7 +13533,7 @@ const getKey = () => {
13505
13533
  const updateDebugInfo = async debugId => {
13506
13534
  const newInfo = await getDebugHighlight(debugId);
13507
13535
  const key = getKey();
13508
- const instance = get$7(key);
13536
+ const instance = get$8(key);
13509
13537
  if (!instance) {
13510
13538
  return;
13511
13539
  }
@@ -13661,7 +13689,7 @@ const updateDiagnostics = async editor => {
13661
13689
  }
13662
13690
  try {
13663
13691
  const diagnostics = await getDiagnostics(editor);
13664
- const latest = get$7(editor.id);
13692
+ const latest = get$8(editor.id);
13665
13693
  if (!latest) {
13666
13694
  return editor;
13667
13695
  }
@@ -13688,7 +13716,7 @@ const queues = {};
13688
13716
  // TODO only store editor state in editor worker, not in renderer worker also
13689
13717
 
13690
13718
  const wrapCommand = fn => async (uid, ...args) => {
13691
- const initialInstance = get$7(uid);
13719
+ const initialInstance = get$8(uid);
13692
13720
  const queueKey = initialInstance?.newState.uri || uid;
13693
13721
  const previous = queues[queueKey];
13694
13722
  const {
@@ -13700,7 +13728,7 @@ const wrapCommand = fn => async (uid, ...args) => {
13700
13728
  await previous;
13701
13729
  }
13702
13730
  try {
13703
- const oldInstance = get$7(uid);
13731
+ const oldInstance = get$8(uid);
13704
13732
  const state = oldInstance.newState;
13705
13733
  const newEditor = await fn(state, ...args);
13706
13734
  if (state === newEditor) {
@@ -13711,7 +13739,7 @@ const wrapCommand = fn => async (uid, ...args) => {
13711
13739
  let finalEditor = newEditorWithDerivedState;
13712
13740
  if (editorDiagnosticEffect.isActive(state, newEditorWithDerivedState)) {
13713
13741
  finalEditor = await editorDiagnosticEffect.apply(newEditorWithDerivedState);
13714
- if (!get$7(uid)) {
13742
+ if (!get$8(uid)) {
13715
13743
  return finalEditor;
13716
13744
  }
13717
13745
  set$9(uid, state, finalEditor);
@@ -13727,7 +13755,7 @@ const wrapCommand = fn => async (uid, ...args) => {
13727
13755
  if (!initial && uri === finalEditor.uri && (lines !== finalEditor.lines || modified !== finalEditor.modified || redoStack !== finalEditor.redoStack || undoStack !== finalEditor.undoStack)) {
13728
13756
  for (const key of getKeys$2()) {
13729
13757
  const otherUid = Number(key);
13730
- const instance = get$7(otherUid);
13758
+ const instance = get$8(otherUid);
13731
13759
  const editor = instance?.newState;
13732
13760
  if (otherUid === uid || !instance || !editor || editor.initial || editor.uri !== finalEditor.uri) {
13733
13761
  continue;
@@ -14215,7 +14243,7 @@ const renderFull$1 = (oldState, newState) => {
14215
14243
  return commands;
14216
14244
  };
14217
14245
 
14218
- const commandsToForward$1 = [SetDom2, SetCss, AppendToBody, FocusSelector, SetBounds2, RegisterEventListeners, SetUid];
14246
+ const commandsToForward$1 = [SetDom2, SetCss, FocusSelector, SetBounds2, RegisterEventListeners, SetUid];
14219
14247
  const render$4 = widget => {
14220
14248
  const commands = renderFull$1(widget.oldState, widget.newState);
14221
14249
  const wrappedCommands = [];
@@ -14374,7 +14402,7 @@ const EditorCompletionDetailWidget = {
14374
14402
  render: render$2
14375
14403
  };
14376
14404
 
14377
- const commandsToForward = [SetDom2, SetCss, AppendToBody, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
14405
+ const commandsToForward = [SetDom2, SetCss, SetBounds2, RegisterEventListeners, SetSelectionByName, SetValueByName, SetFocusContext, SetUid, 'Viewlet.focusSelector'];
14378
14406
  const render$1 = widget => {
14379
14407
  const {
14380
14408
  newState,
@@ -14398,7 +14426,7 @@ const add$1 = widget => {
14398
14426
  return addWidget(widget, 'EditorCompletion', render$1);
14399
14427
  };
14400
14428
  const remove = widget => {
14401
- return [['Viewlet.dispose', widget.newState.uid]];
14429
+ return [];
14402
14430
  };
14403
14431
  const {
14404
14432
  close
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/editor-worker",
3
- "version": "19.28.3",
3
+ "version": "19.29.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git@github.com:lvce-editor/editor-worker.git"