@lvce-editor/extension-host-worker 8.58.0 → 8.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/extension-api/index.js +112 -35
  2. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +5 -0
  3. package/dist/extension-api/parts/FileSystemProvider/FileSystemProvider.js +0 -0
  4. package/dist/extension-api/parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js +56 -0
  5. package/dist/extension-api/parts/FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.js +0 -0
  6. package/dist/extension-api/parts/RegisteredFileSystemProvider/RegisteredFileSystemProvider.js +0 -0
  7. package/dist/extension-api/parts/SourceControl/SourceControl.js +2 -0
  8. package/dist/extension-api/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.js +19 -0
  9. package/dist/extensionHostWorkerMain.js +70 -20
  10. package/extension-api/dist/index.d.ts +5 -1
  11. package/extension-api/dist/index.js +2 -1
  12. package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +3 -0
  13. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +3 -0
  14. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +5 -1
  15. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +3 -0
  16. package/extension-api/dist/parts/FileSystemProvider/FileSystemProvider.d.ts +4 -0
  17. package/extension-api/dist/parts/FileSystemProvider/FileSystemProvider.js +1 -0
  18. package/extension-api/dist/parts/FileSystemProviderRegistry/FileSystemProviderRegistry.d.ts +7 -0
  19. package/extension-api/dist/parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js +50 -0
  20. package/extension-api/dist/parts/FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.d.ts +5 -0
  21. package/extension-api/dist/parts/FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.js +1 -0
  22. package/extension-api/dist/parts/RegisteredFileSystemProvider/RegisteredFileSystemProvider.d.ts +4 -0
  23. package/extension-api/dist/parts/RegisteredFileSystemProvider/RegisteredFileSystemProvider.js +1 -0
  24. package/extension-api/dist/parts/RegisteredSourceControlProvider/RegisteredSourceControlProvider.d.ts +1 -0
  25. package/extension-api/dist/parts/ShowQuickPickOptions/ShowQuickPickOptions.d.ts +1 -0
  26. package/extension-api/dist/parts/SourceControl/SourceControl.d.ts +1 -1
  27. package/extension-api/dist/parts/SourceControl/SourceControl.js +1 -1
  28. package/extension-api/dist/parts/SourceControlProvider/SourceControlProvider.d.ts +1 -0
  29. package/extension-api/dist/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.d.ts +1 -0
  30. package/extension-api/dist/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.js +18 -0
  31. package/extension-api/package.json +1 -1
  32. package/extension-api/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +1 -1
@@ -666,7 +666,7 @@ const register$1 = commandMap => {
666
666
  const getCommand = key => {
667
667
  return commands[key];
668
668
  };
669
- const execute$2 = (command, ...args) => {
669
+ const execute$3 = (command, ...args) => {
670
670
  const fn = getCommand(command);
671
671
  if (!fn) {
672
672
  throw new CommandNotFoundError(command);
@@ -1086,7 +1086,7 @@ const logError = () => {
1086
1086
  };
1087
1087
  const handleMessage = event => {
1088
1088
  const actualRequiresSocket = event?.target?.requiresSocket || requiresSocket;
1089
- const actualExecute = event?.target?.execute || execute$2;
1089
+ const actualExecute = event?.target?.execute || execute$3;
1090
1090
  return handleJsonRpcMessage(event.target, event.data, actualExecute, event.target._resolve, preparePrettyError, logError, actualRequiresSocket);
1091
1091
  };
1092
1092
 
@@ -1688,14 +1688,14 @@ const hasLegacyProvider = (getProvider, textDocumentId) => {
1688
1688
  const executeLegacy = (executeProvider, textDocumentId, args) => {
1689
1689
  return executeProvider(textDocumentId, ...args);
1690
1690
  };
1691
- const isUnavailableError$1 = error => {
1691
+ const isUnavailableError$2 = error => {
1692
1692
  return error instanceof Error && error.name === 'CommandNotFoundError' || error instanceof TypeError && error.message === "Cannot read properties of undefined (reading 'invoke')";
1693
1693
  };
1694
1694
  const invoke$3 = async (method, ...args) => {
1695
1695
  try {
1696
1696
  return await invoke$6(method, ...args);
1697
1697
  } catch (error) {
1698
- if (isUnavailableError$1(error)) {
1698
+ if (isUnavailableError$2(error)) {
1699
1699
  return {
1700
1700
  found: false
1701
1701
  };
@@ -1703,7 +1703,7 @@ const invoke$3 = async (method, ...args) => {
1703
1703
  throw error;
1704
1704
  }
1705
1705
  };
1706
- const execute$1 = async (kind, methodName, textDocumentId, ...args) => {
1706
+ const execute$2 = async (kind, methodName, textDocumentId, ...args) => {
1707
1707
  const textDocument = get$a(textDocumentId);
1708
1708
  if (!textDocument) {
1709
1709
  return {
@@ -1990,7 +1990,7 @@ const executeBraceCompletionProvider = async (textDocumentId, ...args) => {
1990
1990
  if (hasLegacyProvider(getProvider$d, textDocumentId)) {
1991
1991
  return executeLegacy(executeLegacyBraceCompletionProvider, textDocumentId, args);
1992
1992
  }
1993
- const isolated = await execute$1('brace completion', 'provideBraceCompletion', textDocumentId, ...args);
1993
+ const isolated = await execute$2('brace completion', 'provideBraceCompletion', textDocumentId, ...args);
1994
1994
  return isolated.found ? isolated.result : executeLegacy(executeLegacyBraceCompletionProvider, textDocumentId, args);
1995
1995
  };
1996
1996
 
@@ -2010,7 +2010,7 @@ const executeClosingTagProvider = async (textDocumentId, ...args) => {
2010
2010
  if (hasLegacyProvider(getProvider$c, textDocumentId)) {
2011
2011
  return executeLegacy(executeLegacyClosingTagProvider, textDocumentId, args);
2012
2012
  }
2013
- const isolated = await execute$1('closing tag', 'provideClosingTag', textDocumentId, ...args);
2013
+ const isolated = await execute$2('closing tag', 'provideClosingTag', textDocumentId, ...args);
2014
2014
  return isolated.found ? isolated.result : executeLegacy(executeLegacyClosingTagProvider, textDocumentId, args);
2015
2015
  };
2016
2016
 
@@ -2028,7 +2028,7 @@ const {
2028
2028
  });
2029
2029
  const executeCodeActionProvider = async (uid, ...args) => {
2030
2030
  if (!hasLegacyProvider(getProvider$b, uid)) {
2031
- const isolated = await execute$1('code action', 'provideCodeActions', uid, ...args);
2031
+ const isolated = await execute$2('code action', 'provideCodeActions', uid, ...args);
2032
2032
  if (isolated.found) {
2033
2033
  return isolated.result;
2034
2034
  }
@@ -2095,7 +2095,7 @@ const executeCommentProvider = async (textDocumentId, ...args) => {
2095
2095
  if (hasLegacyProvider(getProvider$a, textDocumentId)) {
2096
2096
  return executeLegacy(executeLegacyCommentProvider, textDocumentId, args);
2097
2097
  }
2098
- const isolated = await execute$1('comment', 'provideComment', textDocumentId, ...args);
2098
+ const isolated = await execute$2('comment', 'provideComment', textDocumentId, ...args);
2099
2099
  return isolated.found ? isolated.result : executeLegacy(executeLegacyCommentProvider, textDocumentId, args);
2100
2100
  };
2101
2101
 
@@ -2349,7 +2349,7 @@ const executeDefinitionProvider = async (textDocumentId, ...args) => {
2349
2349
  if (hasLegacyProvider(getProvider$9, textDocumentId)) {
2350
2350
  return executeLegacy(executeLegacyDefinitionProvider, textDocumentId, args);
2351
2351
  }
2352
- const isolated = await execute$1('definition', 'provideDefinition', textDocumentId, ...args);
2352
+ const isolated = await execute$2('definition', 'provideDefinition', textDocumentId, ...args);
2353
2353
  return isolated.found ? isolated.result : executeLegacy(executeLegacyDefinitionProvider, textDocumentId, args);
2354
2354
  };
2355
2355
 
@@ -2392,6 +2392,22 @@ const exec = async (command, args, options) => {
2392
2392
  throw new DepecratedError(`vscode.exec is deprecated, use createNodeRpc instead`);
2393
2393
  };
2394
2394
 
2395
+ const isUnavailableError$1 = error => {
2396
+ return error instanceof Error && error.name === 'CommandNotFoundError' || error instanceof TypeError && error.message === "Cannot read properties of undefined (reading 'invoke')";
2397
+ };
2398
+ const execute$1 = async (providerId, uri) => {
2399
+ try {
2400
+ return await invoke$6('Extensions.executeFileSystemProviderReadFile', providerId, uri);
2401
+ } catch (error) {
2402
+ if (isUnavailableError$1(error)) {
2403
+ return {
2404
+ found: false
2405
+ };
2406
+ }
2407
+ throw error;
2408
+ }
2409
+ };
2410
+
2395
2411
  const fileSystemProviderMap = Object.create(null);
2396
2412
  const get$9 = protocol => {
2397
2413
  const provider = fileSystemProviderMap[protocol];
@@ -2401,6 +2417,9 @@ const get$9 = protocol => {
2401
2417
  }
2402
2418
  return provider;
2403
2419
  };
2420
+ const getOptional = protocol => {
2421
+ return fileSystemProviderMap[protocol];
2422
+ };
2404
2423
  const set$9 = (id, provider) => {
2405
2424
  if (!id) {
2406
2425
  throw new Error('Failed to register file system provider: missing id');
@@ -2424,8 +2443,15 @@ const readDirWithFileTypes$2 = async (protocol, path) => {
2424
2443
  };
2425
2444
  const readFile$2 = async (protocol, path) => {
2426
2445
  try {
2427
- const provider = get$9(protocol);
2428
- return await provider.readFile(path);
2446
+ const provider = getOptional(protocol);
2447
+ if (provider) {
2448
+ return await provider.readFile(path);
2449
+ }
2450
+ const isolated = await execute$1(protocol, path);
2451
+ if (isolated.found) {
2452
+ return isolated.result;
2453
+ }
2454
+ return await get$9(protocol).readFile(path);
2429
2455
  } catch (error) {
2430
2456
  throw new VError(error, 'Failed to execute file system provider');
2431
2457
  }
@@ -2627,7 +2653,7 @@ const executeImplementationProvider = async (textDocumentId, ...args) => {
2627
2653
  if (hasLegacyProvider(getProvider$7, textDocumentId)) {
2628
2654
  return executeLegacy(executeLegacyImplementationProvider, textDocumentId, args);
2629
2655
  }
2630
- const isolated = await execute$1('implementation', 'provideImplementations', textDocumentId, ...args);
2656
+ const isolated = await execute$2('implementation', 'provideImplementations', textDocumentId, ...args);
2631
2657
  return isolated.found ? isolated.result : executeLegacy(executeLegacyImplementationProvider, textDocumentId, args);
2632
2658
  };
2633
2659
 
@@ -2954,6 +2980,7 @@ const validateQuickPickItem = item => {
2954
2980
  }
2955
2981
  };
2956
2982
  const showQuickPick = async ({
2983
+ acceptInput = false,
2957
2984
  items,
2958
2985
  placeholder
2959
2986
  }) => {
@@ -2964,6 +2991,7 @@ const showQuickPick = async ({
2964
2991
  validateQuickPickItem(item);
2965
2992
  }
2966
2993
  return invoke$5('QuickPick.showQuickPick', {
2994
+ acceptInput,
2967
2995
  items,
2968
2996
  placeholder
2969
2997
  });
@@ -2998,14 +3026,14 @@ const executeReferenceProvider = async (textDocumentId, ...args) => {
2998
3026
  if (hasLegacyProvider(getProvider$6, textDocumentId)) {
2999
3027
  return executeLegacy(executeLegacyReferenceProvider, textDocumentId, args);
3000
3028
  }
3001
- const isolated = await execute$1('reference', 'provideReferences', textDocumentId, ...args);
3029
+ const isolated = await execute$2('reference', 'provideReferences', textDocumentId, ...args);
3002
3030
  return isolated.found ? isolated.result : executeLegacy(executeLegacyReferenceProvider, textDocumentId, args);
3003
3031
  };
3004
3032
  const executefileReferenceProvider = async (textDocumentId, ...args) => {
3005
3033
  if (hasLegacyProvider(getProvider$6, textDocumentId)) {
3006
3034
  return executeLegacy(executeLegacyFileReferenceProvider, textDocumentId, args);
3007
3035
  }
3008
- const isolated = await execute$1('reference', 'provideFileReferences', textDocumentId, ...args);
3036
+ const isolated = await execute$2('reference', 'provideFileReferences', textDocumentId, ...args);
3009
3037
  return isolated.found ? isolated.result : executeLegacy(executeLegacyFileReferenceProvider, textDocumentId, args);
3010
3038
  };
3011
3039
  const executeReferenceProvider2 = async (uri, languageId, offset, position) => {
@@ -3082,14 +3110,14 @@ const executeRenameProvider = async (textDocumentId, ...args) => {
3082
3110
  if (hasLegacyProvider(getProvider$5, textDocumentId)) {
3083
3111
  return executeLegacy(executeLegacyRenameProvider, textDocumentId, args);
3084
3112
  }
3085
- const isolated = await execute$1('rename', 'provideRename', textDocumentId, ...args);
3113
+ const isolated = await execute$2('rename', 'provideRename', textDocumentId, ...args);
3086
3114
  return isolated.found ? isolated.result : executeLegacy(executeLegacyRenameProvider, textDocumentId, args);
3087
3115
  };
3088
3116
  const executeprepareRenameProvider = async (textDocumentId, ...args) => {
3089
3117
  if (hasLegacyProvider(getProvider$5, textDocumentId)) {
3090
3118
  return executeLegacy(executeLegacyPrepareRenameProvider, textDocumentId, args);
3091
3119
  }
3092
- const isolated = await execute$1('rename', 'prepareRename', textDocumentId, ...args);
3120
+ const isolated = await execute$2('rename', 'prepareRename', textDocumentId, ...args);
3093
3121
  return isolated.found ? isolated.result : executeLegacy(executeLegacyPrepareRenameProvider, textDocumentId, args);
3094
3122
  };
3095
3123
 
@@ -3250,7 +3278,7 @@ const executeSelectionProvider = async (textDocumentId, ...args) => {
3250
3278
  if (hasLegacyProvider(getProvider$4, textDocumentId)) {
3251
3279
  return executeLegacy(executeLegacySelectionProvider, textDocumentId, args);
3252
3280
  }
3253
- const isolated = await execute$1('selection', 'provideSelections', textDocumentId, ...args);
3281
+ const isolated = await execute$2('selection', 'provideSelections', textDocumentId, ...args);
3254
3282
  return isolated.found ? isolated.result : executeLegacy(executeLegacySelectionProvider, textDocumentId, args);
3255
3283
  };
3256
3284
 
@@ -3469,6 +3497,26 @@ const getFileBefore = async (providerId, uri) => {
3469
3497
  }
3470
3498
  return getProvider$3(providerId).getFileBefore(uri);
3471
3499
  };
3500
+ const getFileBeforeUriFromProvider = async (provider, uri) => {
3501
+ if (typeof provider.getFileBeforeUri === 'function') {
3502
+ return provider.getFileBeforeUri(uri);
3503
+ }
3504
+ const content = await provider.getFileBefore?.(uri);
3505
+ return `data://${content ?? ''}`;
3506
+ };
3507
+ const getFileBeforeUri = async (providerId, uri) => {
3508
+ string(providerId);
3509
+ string(uri);
3510
+ const provider = state$8.providers[providerId];
3511
+ if (provider) {
3512
+ return getFileBeforeUriFromProvider(provider, uri);
3513
+ }
3514
+ const isolated = await execute(providerId, 'executeSourceControlGetFileBeforeUri', uri);
3515
+ if (isolated.found) {
3516
+ return isolated.result;
3517
+ }
3518
+ return getFileBeforeUriFromProvider(getProvider$3(providerId), uri);
3519
+ };
3472
3520
  const getGroupsFromProvider = async (provider, cwd) => {
3473
3521
  if (provider.getGroups) {
3474
3522
  return provider.getGroups(cwd);
@@ -3758,7 +3806,7 @@ const executeTabCompletionProvider = async (textDocumentId, ...args) => {
3758
3806
  if (hasLegacyProvider(getProvider$2, textDocumentId)) {
3759
3807
  return executeLegacy(executeLegacyTabCompletionProvider, textDocumentId, args);
3760
3808
  }
3761
- const isolated = await execute$1('tab completion', 'provideTabCompletion', textDocumentId, ...args);
3809
+ const isolated = await execute$2('tab completion', 'provideTabCompletion', textDocumentId, ...args);
3762
3810
  return isolated.found ? isolated.result : executeLegacy(executeLegacyTabCompletionProvider, textDocumentId, args);
3763
3811
  };
3764
3812
 
@@ -3816,7 +3864,7 @@ const executeTypeDefinitionProvider = async (textDocumentId, ...args) => {
3816
3864
  if (hasLegacyProvider(getProvider$1, textDocumentId)) {
3817
3865
  return executeLegacy(executeLegacyTypeDefinitionProvider, textDocumentId, args);
3818
3866
  }
3819
- const isolated = await execute$1('type definition', 'provideTypeDefinition', textDocumentId, ...args);
3867
+ const isolated = await execute$2('type definition', 'provideTypeDefinition', textDocumentId, ...args);
3820
3868
  return isolated.found ? isolated.result : executeLegacy(executeLegacyTypeDefinitionProvider, textDocumentId, args);
3821
3869
  };
3822
3870
 
@@ -6071,6 +6119,7 @@ const SourceControlGetEnabledProviderIds = 'ExtensionHostSourceControl.getEnable
6071
6119
  const SourceControlGetFeatures = 'ExtensionHostSourceControl.getFeatures';
6072
6120
  const SourceControlGetFileBefore = 'ExtensionHostSourceControl.GetFileBefore';
6073
6121
  const SourceControlGetFileBefore2 = 'ExtensionHostSourceControl.getFileBefore';
6122
+ const SourceControlGetFileBeforeUri = 'ExtensionHostSourceControl.getFileBeforeUri';
6074
6123
  const SourceControlGetFileDecorations = 'ExtensionHostSourceControl.getFileDecorations';
6075
6124
  const SourceControlGetGroups = 'ExtensionHostSourceControl.getGroups';
6076
6125
  const StatusBarExecuteCommand = 'ExtensionHostStatusBar.executeCommand';
@@ -7297,6 +7346,7 @@ const commandMap = {
7297
7346
  [SourceControlGetFeatures]: getFeatures,
7298
7347
  [SourceControlGetFileBefore]: getFileBefore,
7299
7348
  [SourceControlGetFileBefore2]: getFileBefore,
7349
+ [SourceControlGetFileBeforeUri]: getFileBeforeUri,
7300
7350
  [SourceControlGetFileDecorations]: getFileDecorations,
7301
7351
  [SourceControlGetGroups]: getGroups,
7302
7352
  [StatusBarExecuteCommand]: executeCommand,
@@ -9,13 +9,14 @@ export { executeCompletionProvider, executeResolveCompletionItemProvider, getCom
9
9
  export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from './parts/Diagnostic/Diagnostic.ts';
10
10
  export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from './parts/Formatting/Formatting.ts';
11
11
  export { exists, mkdir, readDirWithFileTypes, readFile, remove, stat, writeFile } from './parts/FileSystem/FileSystem.ts';
12
+ export { executeFileSystemProviderReadFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from './parts/FileSystemProviderRegistry/FileSystemProviderRegistry.ts';
12
13
  export { confirm, getWorkspaceFolder, getWorkspaceUri, handleWorkspaceRefresh, openUri } from './parts/Host/Host.ts';
13
14
  export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from './parts/Hover/Hover.ts';
14
15
  export { getPlatform, type Platform } from './parts/Platform/Platform.ts';
15
16
  export { getLanguageServerRegistrySnapshot, registerLanguageServer, resetLanguageServerRegistry } from './parts/LanguageServer/LanguageServer.ts';
16
17
  export { registerBraceCompletionProvider, registerClosingTagProvider, registerCodeActionsProvider, registerCommentProvider, registerDefinitionProvider, registerImplementationProvider, registerReferenceProvider, registerRenameProvider, registerSelectionProvider, registerTabCompletionProvider, registerTypeDefinitionProvider, resetLanguageProviderRegistry, } from './parts/LanguageProvider/LanguageProvider.ts';
17
18
  export type { LanguageProvider } from './parts/LanguageProvider/LanguageProvider.ts';
18
- export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from './parts/SourceControl/SourceControl.ts';
19
+ export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileBeforeUri, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from './parts/SourceControl/SourceControl.ts';
19
20
  export { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewRegistrySnapshot, renderViewInstance, registerView, resetViewRegistry, saveViewInstanceState, } from './parts/ViewRegistry/ViewRegistry.ts';
20
21
  export { createOutputChannel, getOutputChannelRegistrySnapshot, resetOutputChannelRegistry } from './parts/OutputChannel/OutputChannel.ts';
21
22
  export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from './parts/StatusBar/StatusBar.ts';
@@ -31,6 +32,9 @@ export type { Disposable } from './parts/Disposable/Disposable.ts';
31
32
  export type { CreateElectronWebContentsViewOptions, ElectronWebContentsView, ElectronWebContentsViewStats, } from './parts/ElectronWebContentsView/ElectronWebContentsView.ts';
32
33
  export type { FormattingEdit, FormattingProvider, FormattingProviderRegistrySnapshot, RegisteredFormattingProvider, } from './parts/Formatting/Formatting.ts';
33
34
  export type { FileSystemDirent } from './parts/FileSystem/FileSystem.ts';
35
+ export type { FileSystemProvider } from './parts/FileSystemProvider/FileSystemProvider.ts';
36
+ export type { FileSystemProviderRegistrySnapshot } from './parts/FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.ts';
37
+ export type { RegisteredFileSystemProvider } from './parts/RegisteredFileSystemProvider/RegisteredFileSystemProvider.ts';
34
38
  export type { HandleExtensionManagementMessagePortOptions } from './parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts';
35
39
  export type { HoverProvider, HoverProviderRegistrySnapshot, HoverResult, RegisteredHoverProvider } from './parts/Hover/Hover.ts';
36
40
  export type { LanguageServerOptions, LanguageServerRegistrySnapshot } from './parts/LanguageServer/LanguageServer.ts';
@@ -9,12 +9,13 @@ export { executeCompletionProvider, executeResolveCompletionItemProvider, getCom
9
9
  export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from "./parts/Diagnostic/Diagnostic.js";
10
10
  export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from "./parts/Formatting/Formatting.js";
11
11
  export { exists, mkdir, readDirWithFileTypes, readFile, remove, stat, writeFile } from "./parts/FileSystem/FileSystem.js";
12
+ export { executeFileSystemProviderReadFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from "./parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js";
12
13
  export { confirm, getWorkspaceFolder, getWorkspaceUri, handleWorkspaceRefresh, openUri } from "./parts/Host/Host.js";
13
14
  export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from "./parts/Hover/Hover.js";
14
15
  export { getPlatform } from "./parts/Platform/Platform.js";
15
16
  export { getLanguageServerRegistrySnapshot, registerLanguageServer, resetLanguageServerRegistry } from "./parts/LanguageServer/LanguageServer.js";
16
17
  export { registerBraceCompletionProvider, registerClosingTagProvider, registerCodeActionsProvider, registerCommentProvider, registerDefinitionProvider, registerImplementationProvider, registerReferenceProvider, registerRenameProvider, registerSelectionProvider, registerTabCompletionProvider, registerTypeDefinitionProvider, resetLanguageProviderRegistry, } from "./parts/LanguageProvider/LanguageProvider.js";
17
- export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from "./parts/SourceControl/SourceControl.js";
18
+ export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileBeforeUri, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from "./parts/SourceControl/SourceControl.js";
18
19
  export { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewRegistrySnapshot, renderViewInstance, registerView, resetViewRegistry, saveViewInstanceState, } from "./parts/ViewRegistry/ViewRegistry.js";
19
20
  export { createOutputChannel, getOutputChannelRegistrySnapshot, resetOutputChannelRegistry } from "./parts/OutputChannel/OutputChannel.js";
20
21
  export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from "./parts/StatusBar/StatusBar.js";
@@ -6,6 +6,7 @@ export declare const commandMap: {
6
6
  'ExtensionApi.executeCommand': (id: string, ...args: readonly unknown[]) => Promise<unknown>;
7
7
  'ExtensionApi.executeCompletionProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<readonly import("../CompletionItem/CompletionItem.ts").CompletionItem[]>;
8
8
  'ExtensionApi.executeDiagnosticProvider': (textDocument: import("../DiagnosticTextDocument/DiagnosticTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../DiagnosticResult/DiagnosticResult.ts").Diagnostic[]>;
9
+ 'ExtensionApi.executeFileSystemProviderReadFile': (id: string, uri: string) => Promise<string>;
9
10
  'ExtensionApi.executeFormattingProvider': (textDocument: import("../FormattingTextDocument/FormattingTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../FormattingEdit/FormattingEdit.ts").FormattingEdit[]>;
10
11
  'ExtensionApi.executeHoverProvider': (textDocument: import("../HoverTextDocument/HoverTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<import("../HoverResult/HoverResult.ts").HoverResult | undefined>;
11
12
  'ExtensionApi.executeLanguageProvider': (kind: string, methodName: string, textDocument: {
@@ -23,6 +24,7 @@ export declare const commandMap: {
23
24
  'ExtensionApi.executeSourceControlGetChangedFiles': (id: string) => Promise<readonly unknown[]>;
24
25
  'ExtensionApi.executeSourceControlGetFeatures': (id: string) => Promise<unknown>;
25
26
  'ExtensionApi.executeSourceControlGetFileBefore': (id: string, uri: string) => Promise<unknown>;
27
+ 'ExtensionApi.executeSourceControlGetFileBeforeUri': (id: string, uri: string) => Promise<string>;
26
28
  'ExtensionApi.executeSourceControlGetFileDecorations': (id: string, uris: readonly string[]) => Promise<unknown>;
27
29
  'ExtensionApi.executeSourceControlGetGroups': (id: string, cwd: string) => Promise<unknown>;
28
30
  'ExtensionApi.executeSourceControlIsActive': (id: string, scheme: string, root: string) => Promise<boolean>;
@@ -30,6 +32,7 @@ export declare const commandMap: {
30
32
  'ExtensionApi.getCommandRegistrySnapshot': () => import("../CommandRegistrySnapshot/CommandRegistrySnapshot.ts").CommandRegistrySnapshot;
31
33
  'ExtensionApi.getCompletionProviderRegistrySnapshot': () => import("../CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.ts").CompletionProviderRegistrySnapshot;
32
34
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': () => import("../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts").DiagnosticProviderRegistrySnapshot;
35
+ 'ExtensionApi.getFileSystemProviderRegistrySnapshot': () => import("../FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.ts").FileSystemProviderRegistrySnapshot;
33
36
  'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
34
37
  'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
35
38
  'ExtensionApi.getLanguageServerRegistrySnapshot': () => import("../LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.ts").LanguageServerRegistrySnapshot;
@@ -5,6 +5,7 @@ export declare const commandMap: {
5
5
  'ExtensionApi.executeCommand': (id: string, ...args: readonly unknown[]) => Promise<unknown>;
6
6
  'ExtensionApi.executeCompletionProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<readonly import("../CompletionItem/CompletionItem.ts").CompletionItem[]>;
7
7
  'ExtensionApi.executeDiagnosticProvider': (textDocument: import("../DiagnosticTextDocument/DiagnosticTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../DiagnosticResult/DiagnosticResult.ts").Diagnostic[]>;
8
+ 'ExtensionApi.executeFileSystemProviderReadFile': (id: string, uri: string) => Promise<string>;
8
9
  'ExtensionApi.executeFormattingProvider': (textDocument: import("../FormattingTextDocument/FormattingTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../FormattingEdit/FormattingEdit.ts").FormattingEdit[]>;
9
10
  'ExtensionApi.executeHoverProvider': (textDocument: import("../HoverTextDocument/HoverTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<import("../HoverResult/HoverResult.ts").HoverResult | undefined>;
10
11
  'ExtensionApi.executeLanguageProvider': (kind: string, methodName: string, textDocument: {
@@ -22,6 +23,7 @@ export declare const commandMap: {
22
23
  'ExtensionApi.executeSourceControlGetChangedFiles': (id: string) => Promise<readonly unknown[]>;
23
24
  'ExtensionApi.executeSourceControlGetFeatures': (id: string) => Promise<unknown>;
24
25
  'ExtensionApi.executeSourceControlGetFileBefore': (id: string, uri: string) => Promise<unknown>;
26
+ 'ExtensionApi.executeSourceControlGetFileBeforeUri': (id: string, uri: string) => Promise<string>;
25
27
  'ExtensionApi.executeSourceControlGetFileDecorations': (id: string, uris: readonly string[]) => Promise<unknown>;
26
28
  'ExtensionApi.executeSourceControlGetGroups': (id: string, cwd: string) => Promise<unknown>;
27
29
  'ExtensionApi.executeSourceControlIsActive': (id: string, scheme: string, root: string) => Promise<boolean>;
@@ -29,6 +31,7 @@ export declare const commandMap: {
29
31
  'ExtensionApi.getCommandRegistrySnapshot': () => import("../CommandRegistrySnapshot/CommandRegistrySnapshot.ts").CommandRegistrySnapshot;
30
32
  'ExtensionApi.getCompletionProviderRegistrySnapshot': () => import("../CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.ts").CompletionProviderRegistrySnapshot;
31
33
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': () => import("../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts").DiagnosticProviderRegistrySnapshot;
34
+ 'ExtensionApi.getFileSystemProviderRegistrySnapshot': () => import("../FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.ts").FileSystemProviderRegistrySnapshot;
32
35
  'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
33
36
  'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
34
37
  'ExtensionApi.getLanguageServerRegistrySnapshot': () => import("../LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.ts").LanguageServerRegistrySnapshot;
@@ -1,13 +1,14 @@
1
1
  import { executeCommand, getCommandRegistrySnapshot } from "../CommandRegistry/CommandRegistry.js";
2
2
  import { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot } from "../Completion/Completion.js";
3
3
  import { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot } from "../Diagnostic/Diagnostic.js";
4
+ import { executeFileSystemProviderReadFile, getFileSystemProviderRegistrySnapshot } from "../FileSystemProviderRegistry/FileSystemProviderRegistry.js";
4
5
  import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from "../Formatting/Formatting.js";
5
6
  import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
6
7
  import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
7
8
  import { executeLanguageProvider, executeOrganizeImportsProvider } from "../LanguageProvider/LanguageProvider.js";
8
9
  import { getLanguageServerRegistrySnapshot } from "../LanguageServer/LanguageServer.js";
9
10
  import { getOutputChannelRegistrySnapshot } from "../OutputChannel/OutputChannel.js";
10
- import { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, } from "../SourceControl/SourceControl.js";
11
+ import { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileBeforeUri, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, } from "../SourceControl/SourceControl.js";
11
12
  import { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewActions, getViewActionsDom, getViewMenuEntries, getViewRegistrySnapshot, renderViewInstance, saveViewInstanceState, } from "../ViewRegistry/ViewRegistry.js";
12
13
  export const commandMap = {
13
14
  'ExtensionApi.createViewInstance': createViewInstance,
@@ -16,6 +17,7 @@ export const commandMap = {
16
17
  'ExtensionApi.executeCommand': executeCommand,
17
18
  'ExtensionApi.executeCompletionProvider': executeCompletionProvider,
18
19
  'ExtensionApi.executeDiagnosticProvider': executeDiagnosticProvider,
20
+ 'ExtensionApi.executeFileSystemProviderReadFile': executeFileSystemProviderReadFile,
19
21
  'ExtensionApi.executeFormattingProvider': executeFormattingProvider,
20
22
  'ExtensionApi.executeHoverProvider': executeHoverProvider,
21
23
  'ExtensionApi.executeLanguageProvider': executeLanguageProvider,
@@ -29,6 +31,7 @@ export const commandMap = {
29
31
  'ExtensionApi.executeSourceControlGetChangedFiles': executeSourceControlGetChangedFiles,
30
32
  'ExtensionApi.executeSourceControlGetFeatures': executeSourceControlGetFeatures,
31
33
  'ExtensionApi.executeSourceControlGetFileBefore': executeSourceControlGetFileBefore,
34
+ 'ExtensionApi.executeSourceControlGetFileBeforeUri': executeSourceControlGetFileBeforeUri,
32
35
  'ExtensionApi.executeSourceControlGetFileDecorations': executeSourceControlGetFileDecorations,
33
36
  'ExtensionApi.executeSourceControlGetGroups': executeSourceControlGetGroups,
34
37
  'ExtensionApi.executeSourceControlIsActive': executeSourceControlIsActive,
@@ -36,6 +39,7 @@ export const commandMap = {
36
39
  'ExtensionApi.getCommandRegistrySnapshot': getCommandRegistrySnapshot,
37
40
  'ExtensionApi.getCompletionProviderRegistrySnapshot': getCompletionProviderRegistrySnapshot,
38
41
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': getDiagnosticProviderRegistrySnapshot,
42
+ 'ExtensionApi.getFileSystemProviderRegistrySnapshot': getFileSystemProviderRegistrySnapshot,
39
43
  'ExtensionApi.getFormattingProviderRegistrySnapshot': getFormattingProviderRegistrySnapshot,
40
44
  'ExtensionApi.getHoverProviderRegistrySnapshot': getHoverProviderRegistrySnapshot,
41
45
  'ExtensionApi.getLanguageServerRegistrySnapshot': getLanguageServerRegistrySnapshot,
@@ -7,6 +7,7 @@ export declare const commandMap: {
7
7
  'ExtensionApi.executeCommand': (id: string, ...args: readonly unknown[]) => Promise<unknown>;
8
8
  'ExtensionApi.executeCompletionProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<readonly import("../CompletionItem/CompletionItem.ts").CompletionItem[]>;
9
9
  'ExtensionApi.executeDiagnosticProvider': (textDocument: import("../DiagnosticTextDocument/DiagnosticTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../DiagnosticResult/DiagnosticResult.ts").Diagnostic[]>;
10
+ 'ExtensionApi.executeFileSystemProviderReadFile': (id: string, uri: string) => Promise<string>;
10
11
  'ExtensionApi.executeFormattingProvider': (textDocument: import("../FormattingTextDocument/FormattingTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../FormattingEdit/FormattingEdit.ts").FormattingEdit[]>;
11
12
  'ExtensionApi.executeHoverProvider': (textDocument: import("../HoverTextDocument/HoverTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<import("../HoverResult/HoverResult.ts").HoverResult | undefined>;
12
13
  'ExtensionApi.executeLanguageProvider': (kind: string, methodName: string, textDocument: {
@@ -24,6 +25,7 @@ export declare const commandMap: {
24
25
  'ExtensionApi.executeSourceControlGetChangedFiles': (id: string) => Promise<readonly unknown[]>;
25
26
  'ExtensionApi.executeSourceControlGetFeatures': (id: string) => Promise<unknown>;
26
27
  'ExtensionApi.executeSourceControlGetFileBefore': (id: string, uri: string) => Promise<unknown>;
28
+ 'ExtensionApi.executeSourceControlGetFileBeforeUri': (id: string, uri: string) => Promise<string>;
27
29
  'ExtensionApi.executeSourceControlGetFileDecorations': (id: string, uris: readonly string[]) => Promise<unknown>;
28
30
  'ExtensionApi.executeSourceControlGetGroups': (id: string, cwd: string) => Promise<unknown>;
29
31
  'ExtensionApi.executeSourceControlIsActive': (id: string, scheme: string, root: string) => Promise<boolean>;
@@ -31,6 +33,7 @@ export declare const commandMap: {
31
33
  'ExtensionApi.getCommandRegistrySnapshot': () => import("../CommandRegistrySnapshot/CommandRegistrySnapshot.ts").CommandRegistrySnapshot;
32
34
  'ExtensionApi.getCompletionProviderRegistrySnapshot': () => import("../CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.ts").CompletionProviderRegistrySnapshot;
33
35
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': () => import("../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts").DiagnosticProviderRegistrySnapshot;
36
+ 'ExtensionApi.getFileSystemProviderRegistrySnapshot': () => import("../FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.ts").FileSystemProviderRegistrySnapshot;
34
37
  'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
35
38
  'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
36
39
  'ExtensionApi.getLanguageServerRegistrySnapshot': () => import("../LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.ts").LanguageServerRegistrySnapshot;
@@ -0,0 +1,4 @@
1
+ export interface FileSystemProvider {
2
+ readonly id: string;
3
+ readonly readFile: (uri: string) => string | Promise<string>;
4
+ }
@@ -0,0 +1,7 @@
1
+ import type { Disposable } from '../Disposable/Disposable.ts';
2
+ import type { FileSystemProvider } from '../FileSystemProvider/FileSystemProvider.ts';
3
+ import type { FileSystemProviderRegistrySnapshot } from '../FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.ts';
4
+ export declare const executeFileSystemProviderReadFile: (id: string, uri: string) => Promise<string>;
5
+ export declare const getFileSystemProviderRegistrySnapshot: () => FileSystemProviderRegistrySnapshot;
6
+ export declare const registerFileSystemProvider: (provider: FileSystemProvider) => Disposable;
7
+ export declare const resetFileSystemProviderRegistry: () => void;
@@ -0,0 +1,50 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ const providers = Object.create(null);
3
+ const assertFileSystemProvider = (provider) => {
4
+ if (!provider) {
5
+ throw new ExtensionApiError('file system provider is not defined');
6
+ }
7
+ if (typeof provider.id !== 'string' || provider.id.length === 0) {
8
+ throw new ExtensionApiError('file system provider is missing id');
9
+ }
10
+ if (typeof provider.readFile !== 'function') {
11
+ throw new ExtensionApiError(`file system provider ${provider.id} is missing readFile function`);
12
+ }
13
+ if (provider.id in providers) {
14
+ throw new ExtensionApiError(`file system provider ${provider.id} is already registered`);
15
+ }
16
+ };
17
+ const getProvider = (id) => {
18
+ const provider = providers[id];
19
+ if (!provider) {
20
+ throw new ExtensionApiError(`file system provider ${id} not found`);
21
+ }
22
+ return provider;
23
+ };
24
+ export const executeFileSystemProviderReadFile = async (id, uri) => {
25
+ return getProvider(id).readFile(uri);
26
+ };
27
+ export const getFileSystemProviderRegistrySnapshot = () => {
28
+ return {
29
+ providers: Object.values(providers).map((provider) => ({
30
+ id: provider.id,
31
+ })),
32
+ };
33
+ };
34
+ export const registerFileSystemProvider = (provider) => {
35
+ assertFileSystemProvider(provider);
36
+ providers[provider.id] = {
37
+ id: provider.id,
38
+ readFile: (uri) => provider.readFile(uri),
39
+ };
40
+ return {
41
+ dispose() {
42
+ delete providers[provider.id];
43
+ },
44
+ };
45
+ };
46
+ export const resetFileSystemProviderRegistry = () => {
47
+ for (const id of Object.keys(providers)) {
48
+ delete providers[id];
49
+ }
50
+ };
@@ -0,0 +1,5 @@
1
+ export interface FileSystemProviderRegistrySnapshot {
2
+ readonly providers: readonly {
3
+ readonly id: string;
4
+ }[];
5
+ }
@@ -0,0 +1,4 @@
1
+ export interface RegisteredFileSystemProvider {
2
+ readonly id: string;
3
+ readonly readFile: (uri: string) => string | Promise<string>;
4
+ }
@@ -7,6 +7,7 @@ export interface RegisteredSourceControlProvider {
7
7
  readonly getChangedFiles: () => readonly unknown[] | Promise<readonly unknown[]>;
8
8
  readonly getFeatures?: () => unknown | Promise<unknown>;
9
9
  readonly getFileBefore?: (uri: string) => unknown | Promise<unknown>;
10
+ readonly getFileBeforeUri?: (uri: string) => string | Promise<string>;
10
11
  readonly getFileDecorations?: (uris: readonly string[]) => unknown | Promise<unknown>;
11
12
  readonly getGroups?: (cwd: string) => unknown | Promise<unknown>;
12
13
  readonly id: string;
@@ -1,5 +1,6 @@
1
1
  import type { QuickPickItem } from '../QuickPickItem/QuickPickItem.ts';
2
2
  export interface ShowQuickPickOptions {
3
+ readonly acceptInput?: boolean;
3
4
  readonly items: readonly QuickPickItem[];
4
5
  readonly placeholder?: string;
5
6
  }
@@ -1,4 +1,4 @@
1
- export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, registerSourceControlProvider, resetSourceControlProviderRegistry, } from '../SourceControlProviderRegistry/SourceControlProviderRegistry.ts';
1
+ export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileBeforeUri, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, registerSourceControlProvider, resetSourceControlProviderRegistry, } from '../SourceControlProviderRegistry/SourceControlProviderRegistry.ts';
2
2
  export type { RegisteredSourceControlProvider } from '../RegisteredSourceControlProvider/RegisteredSourceControlProvider.ts';
3
3
  export type { SourceControlProvider } from '../SourceControlProvider/SourceControlProvider.ts';
4
4
  export type { SourceControlProviderRegistrySnapshot } from '../SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.ts';
@@ -1 +1 @@
1
- export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, registerSourceControlProvider, resetSourceControlProviderRegistry, } from "../SourceControlProviderRegistry/SourceControlProviderRegistry.js";
1
+ export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileBeforeUri, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, registerSourceControlProvider, resetSourceControlProviderRegistry, } from "../SourceControlProviderRegistry/SourceControlProviderRegistry.js";
@@ -7,6 +7,7 @@ export interface SourceControlProvider {
7
7
  readonly getChangedFiles: () => readonly unknown[] | Promise<readonly unknown[]>;
8
8
  readonly getFeatures?: () => unknown | Promise<unknown>;
9
9
  readonly getFileBefore?: (uri: string) => unknown | Promise<unknown>;
10
+ readonly getFileBeforeUri?: (uri: string) => string | Promise<string>;
10
11
  readonly getFileDecorations?: (uris: readonly string[]) => unknown | Promise<unknown>;
11
12
  readonly getGroups?: (cwd: string) => unknown | Promise<unknown>;
12
13
  readonly id: string;
@@ -10,6 +10,7 @@ export declare const executeSourceControlGetChangedFiles: (id: string) => Promis
10
10
  export declare const executeSourceControlGetBadgeCount: (id: string) => Promise<number>;
11
11
  export declare const executeSourceControlGetFeatures: (id: string) => Promise<unknown>;
12
12
  export declare const executeSourceControlGetFileBefore: (id: string, uri: string) => Promise<unknown>;
13
+ export declare const executeSourceControlGetFileBeforeUri: (id: string, uri: string) => Promise<string>;
13
14
  export declare const executeSourceControlGetFileDecorations: (id: string, uris: readonly string[]) => Promise<unknown>;
14
15
  export declare const executeSourceControlGetGroups: (id: string, cwd: string) => Promise<unknown>;
15
16
  export declare const executeSourceControlIsActive: (id: string, scheme: string, root: string) => Promise<boolean>;
@@ -8,6 +8,7 @@ const optionalMethods = [
8
8
  'getBadgeCount',
9
9
  'getFeatures',
10
10
  'getFileBefore',
11
+ 'getFileBeforeUri',
11
12
  'getFileDecorations',
12
13
  'getGroups',
13
14
  'isActive',
@@ -69,6 +70,9 @@ const mapSourceControlProvider = (provider) => {
69
70
  if (provider.getFileBefore) {
70
71
  registeredProvider.getFileBefore = (uri) => provider.getFileBefore(uri);
71
72
  }
73
+ if (provider.getFileBeforeUri) {
74
+ registeredProvider.getFileBeforeUri = (uri) => provider.getFileBeforeUri(uri);
75
+ }
72
76
  if (provider.getFileDecorations) {
73
77
  registeredProvider.getFileDecorations = (uris) => provider.getFileDecorations(uris);
74
78
  }
@@ -118,6 +122,20 @@ export const executeSourceControlGetFeatures = async (id) => {
118
122
  export const executeSourceControlGetFileBefore = async (id, uri) => {
119
123
  return getProvider(id).getFileBefore?.(uri);
120
124
  };
125
+ export const executeSourceControlGetFileBeforeUri = async (id, uri) => {
126
+ const provider = getProvider(id);
127
+ if (provider.getFileBeforeUri) {
128
+ return provider.getFileBeforeUri(uri);
129
+ }
130
+ const content = await provider.getFileBefore?.(uri);
131
+ if (content === undefined) {
132
+ return 'data://';
133
+ }
134
+ if (typeof content !== 'string') {
135
+ throw new ExtensionApiError(`source control provider ${id} returned an invalid getFileBefore result`);
136
+ }
137
+ return `data://${content}`;
138
+ };
121
139
  export const executeSourceControlGetFileDecorations = async (id, uris) => {
122
140
  return getProvider(id).getFileDecorations?.(uris) ?? [];
123
141
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/api",
3
- "version": "8.58.0",
3
+ "version": "8.60.0",
4
4
  "description": "Tree-shakeable extension API for Lvce Editor extensions.",
5
5
  "keywords": [
6
6
  "lvce-editor",