@lvce-editor/explorer-view 5.0.0 → 5.1.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.
@@ -533,7 +533,7 @@ const create$4$1 = (method, params) => {
533
533
  };
534
534
  };
535
535
  const callbacks = Object.create(null);
536
- const set$6 = (id, fn) => {
536
+ const set$7 = (id, fn) => {
537
537
  callbacks[id] = fn;
538
538
  };
539
539
  const get$2 = id => {
@@ -552,7 +552,7 @@ const registerPromise = () => {
552
552
  resolve,
553
553
  promise
554
554
  } = Promise.withResolvers();
555
- set$6(id, resolve);
555
+ set$7(id, resolve);
556
556
  return {
557
557
  id,
558
558
  promise
@@ -893,11 +893,11 @@ const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
893
893
  const responseMessage = await promise;
894
894
  return unwrapJsonRpcResult(responseMessage);
895
895
  };
896
- const send$1 = (transport, method, ...params) => {
896
+ const send$2 = (transport, method, ...params) => {
897
897
  const message = create$4$1(method, params);
898
898
  transport.send(message);
899
899
  };
900
- const invoke$4 = (ipc, method, ...params) => {
900
+ const invoke$5 = (ipc, method, ...params) => {
901
901
  return invokeHelper(ipc, method, params, false);
902
902
  };
903
903
  const invokeAndTransfer$2 = (ipc, method, ...params) => {
@@ -933,10 +933,10 @@ const createRpc = ipc => {
933
933
  * @deprecated
934
934
  */
935
935
  send(method, ...params) {
936
- send$1(ipc, method, ...params);
936
+ send$2(ipc, method, ...params);
937
937
  },
938
938
  invoke(method, ...params) {
939
- return invoke$4(ipc, method, ...params);
939
+ return invoke$5(ipc, method, ...params);
940
940
  },
941
941
  invokeAndTransfer(method, ...params) {
942
942
  return invokeAndTransfer$2(ipc, method, ...params);
@@ -1084,6 +1084,7 @@ const Alt = 1 << 9 >>> 0;
1084
1084
 
1085
1085
  const FileSystemWorker$1 = 209;
1086
1086
  const RendererWorker = 1;
1087
+ const SourceControlWorker = 66;
1087
1088
  const IconThemeWorker = 7009;
1088
1089
 
1089
1090
  const FocusElementByName = 'Viewlet.focusElementByName';
@@ -1096,7 +1097,7 @@ const FocusExplorer = 13;
1096
1097
  const FocusExplorerEditBox = 14;
1097
1098
 
1098
1099
  const rpcs = Object.create(null);
1099
- const set$5 = (id, rpc) => {
1100
+ const set$6 = (id, rpc) => {
1100
1101
  rpcs[id] = rpc;
1101
1102
  };
1102
1103
  const get$1 = id => {
@@ -1118,7 +1119,7 @@ const create$2 = rpcId => {
1118
1119
  return rpc.invokeAndTransfer(method, ...params);
1119
1120
  },
1120
1121
  set(rpc) {
1121
- set$5(rpcId, rpc);
1122
+ set$6(rpcId, rpc);
1122
1123
  },
1123
1124
  async dispose() {
1124
1125
  const rpc = get$1(rpcId);
@@ -1128,66 +1129,66 @@ const create$2 = rpcId => {
1128
1129
  };
1129
1130
 
1130
1131
  const {
1131
- invoke: invoke$3,
1132
+ invoke: invoke$4,
1132
1133
  invokeAndTransfer: invokeAndTransfer$1,
1133
- set: set$4,
1134
+ set: set$5,
1134
1135
  dispose
1135
1136
  } = create$2(FileSystemWorker$1);
1136
1137
  const remove$1 = async dirent => {
1137
- return invoke$3('FileSystem.remove', dirent);
1138
+ return invoke$4('FileSystem.remove', dirent);
1138
1139
  };
1139
1140
  const readDirWithFileTypes$1 = async uri => {
1140
- return invoke$3('FileSystem.readDirWithFileTypes', uri);
1141
+ return invoke$4('FileSystem.readDirWithFileTypes', uri);
1141
1142
  };
1142
1143
  const getPathSeparator$2 = async root => {
1143
1144
  // @ts-ignore
1144
- return invoke$3('FileSystem.getPathSeparator', root);
1145
+ return invoke$4('FileSystem.getPathSeparator', root);
1145
1146
  };
1146
1147
  const getRealPath$1 = async path => {
1147
- return invoke$3('FileSystem.getRealPath', path);
1148
+ return invoke$4('FileSystem.getRealPath', path);
1148
1149
  };
1149
1150
  const stat$1 = async dirent => {
1150
- return invoke$3('FileSystem.stat', dirent);
1151
+ return invoke$4('FileSystem.stat', dirent);
1151
1152
  };
1152
1153
  const createFile = async uri => {
1153
- return invoke$3('FileSystem.writeFile', uri, '');
1154
+ return invoke$4('FileSystem.writeFile', uri, '');
1154
1155
  };
1155
1156
  const readFile = async uri => {
1156
- return invoke$3('FileSystem.readFile', uri);
1157
+ return invoke$4('FileSystem.readFile', uri);
1157
1158
  };
1158
1159
  const writeFile$1 = async (uri, content) => {
1159
- return invoke$3('FileSystem.writeFile', uri, content);
1160
+ return invoke$4('FileSystem.writeFile', uri, content);
1160
1161
  };
1161
1162
  const mkdir$1 = async uri => {
1162
- return invoke$3('FileSystem.mkdir', uri);
1163
+ return invoke$4('FileSystem.mkdir', uri);
1163
1164
  };
1164
1165
  const rename$2 = async (oldUri, newUri) => {
1165
- return invoke$3('FileSystem.rename', oldUri, newUri);
1166
+ return invoke$4('FileSystem.rename', oldUri, newUri);
1166
1167
  };
1167
1168
  const copy$2 = async (oldUri, newUri) => {
1168
- return invoke$3('FileSystem.copy', oldUri, newUri);
1169
+ return invoke$4('FileSystem.copy', oldUri, newUri);
1169
1170
  };
1170
1171
  const exists = async uri => {
1171
1172
  // @ts-ignore
1172
- return invoke$3('FileSystem.exists', uri);
1173
+ return invoke$4('FileSystem.exists', uri);
1173
1174
  };
1174
1175
  const getFolderSize = async uri => {
1175
1176
  // @ts-ignore
1176
- return invoke$3('FileSystem.getFolderSize', uri);
1177
+ return invoke$4('FileSystem.getFolderSize', uri);
1177
1178
  };
1178
1179
  const readFileAsBlob = async uri => {
1179
1180
  // @ts-ignore
1180
- return invoke$3('FileSystem.readFileAsBlob', uri);
1181
+ return invoke$4('FileSystem.readFileAsBlob', uri);
1181
1182
  };
1182
1183
  const appendFile = async (uri, text) => {
1183
1184
  // @ts-ignore
1184
- return invoke$3('FileSystem.appendFile', uri, text);
1185
+ return invoke$4('FileSystem.appendFile', uri, text);
1185
1186
  };
1186
1187
  const registerMockRpc = commandMap => {
1187
1188
  const mockRpc = createMockRpc({
1188
1189
  commandMap
1189
1190
  });
1190
- set$4(mockRpc);
1191
+ set$5(mockRpc);
1191
1192
  return mockRpc;
1192
1193
  };
1193
1194
 
@@ -1201,7 +1202,7 @@ const FileSystemWorker = {
1201
1202
  getFolderSize,
1202
1203
  getPathSeparator: getPathSeparator$2,
1203
1204
  getRealPath: getRealPath$1,
1204
- invoke: invoke$3,
1205
+ invoke: invoke$4,
1205
1206
  invokeAndTransfer: invokeAndTransfer$1,
1206
1207
  mkdir: mkdir$1,
1207
1208
  readDirWithFileTypes: readDirWithFileTypes$1,
@@ -1210,30 +1211,30 @@ const FileSystemWorker = {
1210
1211
  registerMockRpc,
1211
1212
  remove: remove$1,
1212
1213
  rename: rename$2,
1213
- set: set$4,
1214
+ set: set$5,
1214
1215
  stat: stat$1,
1215
1216
  writeFile: writeFile$1
1216
1217
  };
1217
1218
 
1218
1219
  const {
1219
- invoke: invoke$2,
1220
- set: set$3} = create$2(IconThemeWorker);
1220
+ invoke: invoke$3,
1221
+ set: set$4} = create$2(IconThemeWorker);
1221
1222
  const getIcons = async iconRequests => {
1222
1223
  // @ts-ignore
1223
- return invoke$2('IconTheme.getIcons', iconRequests);
1224
+ return invoke$3('IconTheme.getIcons', iconRequests);
1224
1225
  };
1225
1226
 
1226
1227
  const {
1227
- invoke: invoke$1,
1228
+ invoke: invoke$2,
1228
1229
  invokeAndTransfer,
1229
- set: set$2} = create$2(RendererWorker);
1230
+ set: set$3} = create$2(RendererWorker);
1230
1231
  const showContextMenu2 = async (uid, menuId, x, y, args) => {
1231
1232
  number(uid);
1232
1233
  number(menuId);
1233
1234
  number(x);
1234
1235
  number(y);
1235
1236
  // @ts-ignore
1236
- await invoke$1('ContextMenu.show2', uid, menuId, x, y, args);
1237
+ await invoke$2('ContextMenu.show2', uid, menuId, x, y, args);
1237
1238
  };
1238
1239
  const sendMessagePortToIconThemeWorker = async (port, rpcId) => {
1239
1240
  const command = 'IconTheme.handleMessagePort';
@@ -1247,13 +1248,22 @@ const sendMessagePortToFileSystemWorker$1 = async (port, rpcId) => {
1247
1248
  };
1248
1249
  const confirm = async (message, options) => {
1249
1250
  // @ts-ignore
1250
- const result = await invoke$1('ConfirmPrompt.prompt', message, options);
1251
+ const result = await invoke$2('ConfirmPrompt.prompt', message, options);
1251
1252
  return result;
1252
1253
  };
1253
1254
  const writeClipBoardText = async text => {
1254
- await invoke$1('ClipBoard.writeText', /* text */text);
1255
+ await invoke$2('ClipBoard.writeText', /* text */text);
1256
+ };
1257
+ const sendMessagePortToSourceControlWorker = async port => {
1258
+ const command = 'SourceControl.handleMessagePort';
1259
+ // @ts-ignore
1260
+ await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToSourceControlWorker', port, command, 0);
1255
1261
  };
1256
1262
 
1263
+ const {
1264
+ invoke: invoke$1,
1265
+ set: set$2} = create$2(SourceControlWorker);
1266
+
1257
1267
  const toCommandId = key => {
1258
1268
  const dotIndex = key.indexOf('.');
1259
1269
  return key.slice(dotIndex + 1);
@@ -1287,10 +1297,11 @@ const create$1 = () => {
1287
1297
  wrapCommand(fn) {
1288
1298
  const wrapped = async (uid, ...args) => {
1289
1299
  const {
1300
+ oldState,
1290
1301
  newState
1291
1302
  } = states[uid];
1292
1303
  const newerState = await fn(newState, ...args);
1293
- if (newState === newerState) {
1304
+ if (oldState === newerState || newState === newerState) {
1294
1305
  return;
1295
1306
  }
1296
1307
  const latest = states[uid];
@@ -1346,7 +1357,7 @@ const Remove = 5;
1346
1357
 
1347
1358
  // TODO use direct connection
1348
1359
  const invoke = async (method, ...params) => {
1349
- return invoke$1(method, ...params);
1360
+ return invoke$2(method, ...params);
1350
1361
  };
1351
1362
  const {
1352
1363
  set: set$1
@@ -2209,10 +2220,10 @@ const writeText = async text => {
2209
2220
  };
2210
2221
  const readNativeFiles = async () => {
2211
2222
  // @ts-ignore
2212
- return invoke$1('ClipBoard.readNativeFiles');
2223
+ return invoke$2('ClipBoard.readNativeFiles');
2213
2224
  };
2214
2225
  const writeNativeFiles = async (type, files) => {
2215
- return invoke$1('ClipBoard.writeNativeFiles', type, files);
2226
+ return invoke$2('ClipBoard.writeNativeFiles', type, files);
2216
2227
  };
2217
2228
 
2218
2229
  const copyRelativePath = async state => {
@@ -3304,7 +3315,7 @@ const handleClickDirectory = async (state, dirent, index, keepFocus) => {
3304
3315
  };
3305
3316
 
3306
3317
  const openUri = async (uri, focus) => {
3307
- await invoke$1(/* Main.openAbsolutePath */'Main.openUri', /* absolutePath */uri, /* focus */focus);
3318
+ await invoke$2(/* Main.openAbsolutePath */'Main.openUri', /* absolutePath */uri, /* focus */focus);
3308
3319
  };
3309
3320
 
3310
3321
  const handleClickFile = async (state, dirent, index, keepFocus = false) => {
@@ -3597,7 +3608,7 @@ const handleClickCurrentButKeepFocus = state => {
3597
3608
 
3598
3609
  const openFolder = async () => {
3599
3610
  // @ts-ignore
3600
- await invoke$1(`Dialog.openFolder`);
3611
+ await invoke$2(`Dialog.openFolder`);
3601
3612
  };
3602
3613
 
3603
3614
  const handleClickOpenFolder = async state => {
@@ -4134,12 +4145,12 @@ const getFileArray = fileList => {
4134
4145
  };
4135
4146
 
4136
4147
  const getFileHandles = async fileIds => {
4137
- const files = await invoke$1('FileSystemHandle.getFileHandles', fileIds);
4148
+ const files = await invoke$2('FileSystemHandle.getFileHandles', fileIds);
4138
4149
  return files;
4139
4150
  };
4140
4151
 
4141
4152
  const getFilePathElectron = async file => {
4142
- return invoke$1('FileSystemHandle.getFilePathElectron', file);
4153
+ return invoke$2('FileSystemHandle.getFilePathElectron', file);
4143
4154
  };
4144
4155
 
4145
4156
  const getFilepath = async file => {
@@ -4274,7 +4285,7 @@ const handleKeyDown = (state, key) => {
4274
4285
 
4275
4286
  // @ts-ignore
4276
4287
  timeout = setTimeout(async () => {
4277
- await invoke$1('Explorer.cancelTypeAhead');
4288
+ await invoke$2('Explorer.cancelTypeAhead');
4278
4289
  }, focusWordTimeout);
4279
4290
  if (matchingIndex === -1) {
4280
4291
  return {
@@ -4593,16 +4604,49 @@ const handleWheel = (state, deltaMode, deltaY) => {
4593
4604
  };
4594
4605
 
4595
4606
  const getWorkspacePath = () => {
4596
- return invoke$1('Workspace.getPath');
4607
+ return invoke$2('Workspace.getPath');
4608
+ };
4609
+
4610
+ const DecorationsEnabled = false;
4611
+
4612
+ const ensureUris = maybeUris => {
4613
+ const uris = [];
4614
+ for (const item of maybeUris) {
4615
+ if (item.startsWith('/')) {
4616
+ uris.push(`file://` + item);
4617
+ } else {
4618
+ uris.push(item);
4619
+ }
4620
+ }
4621
+ return uris;
4622
+ };
4623
+ const getFileDecorations = async (scheme, root, maybeUris) => {
4624
+ try {
4625
+ if (!DecorationsEnabled) {
4626
+ return [];
4627
+ }
4628
+ const providerIds = await invoke$1('SourceControl.getEnabledProviderIds', scheme, root);
4629
+ if (providerIds.length === 0) {
4630
+ return [];
4631
+ }
4632
+ const providerId = providerIds[0];
4633
+ // @ts-ignore
4634
+ const uris = ensureUris(maybeUris);
4635
+ const decorations = await invoke$1('SourceControl.getFileDecorations', providerId, uris);
4636
+ return decorations;
4637
+ } catch (error) {
4638
+ console.error(error);
4639
+ return [];
4640
+ }
4597
4641
  };
4598
4642
 
4599
4643
  const getSettings = async () => {
4600
4644
  // TODO get all settings at once
4601
- const useChevronsRaw = await invoke$1('Preferences.get', 'explorer.useChevrons');
4645
+ const useChevronsRaw = await invoke$2('Preferences.get', 'explorer.useChevrons');
4602
4646
  const useChevrons = useChevronsRaw === false ? false : true;
4603
- const confirmDeleteRaw = await invoke$1('Preferences.get', 'explorer.confirmdelete');
4647
+ const confirmDeleteRaw = await invoke$2('Preferences.get', 'explorer.confirmdelete');
4604
4648
  const confirmDelete = confirmDeleteRaw === false ? false : false;
4605
- const confirmPasteRaw = await invoke$1('Preferences.get', 'explorer.confirmpaste');
4649
+ const confirmPasteRaw = await invoke$2('Preferences.get', 'explorer.confirmpaste');
4606
4650
  const confirmPaste = confirmPasteRaw === false ? false : false;
4607
4651
  return {
4608
4652
  useChevrons,
@@ -4720,6 +4764,14 @@ const getExcluded = () => {
4720
4764
  const getSavedRoot = (savedState, workspacePath) => {
4721
4765
  return workspacePath;
4722
4766
  };
4767
+ const RE_PROTOCOL = /^[a-z+]:\/\//;
4768
+ const getScheme = uri => {
4769
+ const match = uri.match(RE_PROTOCOL);
4770
+ if (!match) {
4771
+ return '';
4772
+ }
4773
+ return match[0];
4774
+ };
4723
4775
  const loadContent = async (state, savedState) => {
4724
4776
  const {
4725
4777
  useChevrons,
@@ -4739,6 +4791,8 @@ const loadContent = async (state, savedState) => {
4739
4791
  if (savedState && typeof savedState.deltaY === 'number') {
4740
4792
  deltaY = savedState.deltaY;
4741
4793
  }
4794
+ const scheme = getScheme(root);
4795
+ const decorations = await getFileDecorations(scheme, root, restoredDirents.filter(item => item.depth === 1).map(item => item.path));
4742
4796
  return {
4743
4797
  ...state,
4744
4798
  confirmDelete,
@@ -4749,7 +4803,8 @@ const loadContent = async (state, savedState) => {
4749
4803
  minLineY,
4750
4804
  pathSeparator,
4751
4805
  root,
4752
- useChevrons
4806
+ useChevrons,
4807
+ decorations
4753
4808
  };
4754
4809
  };
4755
4810
 
@@ -4784,14 +4839,14 @@ const initializeFileSystemWorker = async () => {
4784
4839
  set$1(rpc);
4785
4840
  };
4786
4841
 
4787
- const send = port => {
4842
+ const send$1 = port => {
4788
4843
  return sendMessagePortToIconThemeWorker(port, 0);
4789
4844
  };
4790
4845
  const createIconThemeWorkerRpc = async () => {
4791
4846
  try {
4792
4847
  const rpc = await TransferMessagePortRpcParent.create({
4793
4848
  commandMap: {},
4794
- send
4849
+ send: send$1
4795
4850
  });
4796
4851
  return rpc;
4797
4852
  } catch (error) {
@@ -4801,11 +4856,40 @@ const createIconThemeWorkerRpc = async () => {
4801
4856
 
4802
4857
  const initializeIconThemeWorker = async () => {
4803
4858
  const rpc = await createIconThemeWorkerRpc();
4804
- set$3(rpc);
4859
+ set$4(rpc);
4860
+ };
4861
+
4862
+ const send = port => {
4863
+ // @ts-ignore
4864
+ return sendMessagePortToSourceControlWorker(port);
4865
+ };
4866
+ const createSourceControlWorkerRpc = async () => {
4867
+ try {
4868
+ const rpc = await TransferMessagePortRpcParent.create({
4869
+ commandMap: {},
4870
+ send
4871
+ });
4872
+ return rpc;
4873
+ } catch (error) {
4874
+ throw new VError(error, `Failed to create source control worker rpc`);
4875
+ }
4876
+ };
4877
+
4878
+ const initializeSourceControlWorker = async () => {
4879
+ try {
4880
+ if (!DecorationsEnabled) {
4881
+ return;
4882
+ }
4883
+ const rpc = await createSourceControlWorkerRpc();
4884
+ // TODO
4885
+ set$2(rpc);
4886
+ } catch {
4887
+ // ignore
4888
+ }
4805
4889
  };
4806
4890
 
4807
4891
  const initialize = async () => {
4808
- await Promise.all([initializeFileSystemWorker(), initializeIconThemeWorker()]);
4892
+ await Promise.all([initializeFileSystemWorker(), initializeIconThemeWorker(), initializeSourceControlWorker()]);
4809
4893
  };
4810
4894
 
4811
4895
  const getNewChildDirentsForNewDirent = async (items, depth, parentPath, direntType) => {
@@ -4942,7 +5026,7 @@ const getContainingFolder = (root, dirents, focusedIndex, pathSeparator) => {
4942
5026
  };
4943
5027
 
4944
5028
  const openNativeFolder = async path => {
4945
- await invoke$1('OpenNativeFolder.openNativeFolder', /* path */path);
5029
+ await invoke$2('OpenNativeFolder.openNativeFolder', /* path */path);
4946
5030
  };
4947
5031
 
4948
5032
  const openContainingFolder = async state => {
@@ -5930,24 +6014,24 @@ const selectUp = state => {
5930
6014
 
5931
6015
  const getEditingIcon = async (editingType, value, direntType) => {
5932
6016
  if (editingType === CreateFile) {
5933
- return invoke$1('IconTheme.getFileIcon', {
6017
+ return invoke$2('IconTheme.getFileIcon', {
5934
6018
  name: value
5935
6019
  });
5936
6020
  }
5937
6021
  if (editingType === Rename$1) {
5938
6022
  if (direntType === File || direntType === EditingFile) {
5939
- return invoke$1('IconTheme.getFileIcon', {
6023
+ return invoke$2('IconTheme.getFileIcon', {
5940
6024
  name: value
5941
6025
  });
5942
6026
  }
5943
6027
  if (direntType === Directory || direntType === EditingFolder || direntType === EditingDirectoryExpanded) {
5944
- return invoke$1('IconTheme.getFolderIcon', {
6028
+ return invoke$2('IconTheme.getFolderIcon', {
5945
6029
  name: value
5946
6030
  });
5947
6031
  }
5948
6032
  }
5949
6033
  if (editingType === CreateFolder) {
5950
- return invoke$1('IconTheme.getFolderIcon', {
6034
+ return invoke$2('IconTheme.getFolderIcon', {
5951
6035
  name: value
5952
6036
  });
5953
6037
  }
@@ -6062,7 +6146,7 @@ const listen = async () => {
6062
6146
  const rpc = await WebWorkerRpcClient.create({
6063
6147
  commandMap: commandMap
6064
6148
  });
6065
- set$2(rpc);
6149
+ set$3(rpc);
6066
6150
  };
6067
6151
 
6068
6152
  const main = async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/explorer-view",
3
- "version": "5.0.0",
3
+ "version": "5.1.0",
4
4
  "description": "Explorer Worker",
5
5
  "repository": {
6
6
  "type": "git",